version 1.244, 2003/11/05 10:40:37
|
version 1.245, 2003/11/06 15:46:17
|
Line 2933 static char *ParseCSSBackgroundColor (El
|
Line 2933 static char *ParseCSSBackgroundColor (El
|
} |
} |
|
|
/*---------------------------------------------------------------------- |
/*---------------------------------------------------------------------- |
|
ParseCSSUrl: parse an URL |
|
----------------------------------------------------------------------*/ |
|
static char *ParseCSSUrl (char *cssRule, char **url) |
|
{ |
|
char saved; |
|
char *base, *ptr; |
|
|
|
cssRule = SkipBlanksAndComments (cssRule); |
|
saved = *cssRule; |
|
if (*cssRule == '(') |
|
{ |
|
cssRule++; |
|
cssRule = SkipBlanksAndComments (cssRule); |
|
/*** Escaped quotes are not handled. See function SkipQuotedString */ |
|
if (*cssRule == '"') |
|
{ |
|
cssRule++; |
|
base = cssRule; |
|
while (*cssRule != EOS && *cssRule != '"') |
|
cssRule++; |
|
} |
|
else if (*cssRule == '\'') |
|
{ |
|
cssRule++; |
|
base = cssRule; |
|
while (*cssRule != EOS && *cssRule != '\'') |
|
cssRule++; |
|
} |
|
else |
|
{ |
|
base = cssRule; |
|
while (*cssRule != EOS && *cssRule != ')') |
|
cssRule++; |
|
} |
|
/* keep the current position */ |
|
ptr = cssRule; |
|
if (saved == ')') |
|
{ |
|
/* remove extra spaces */ |
|
if (cssRule[-1] == SPACE) |
|
{ |
|
*cssRule = SPACE; |
|
cssRule--; |
|
while (cssRule[-1] == SPACE) |
|
cssRule--; |
|
} |
|
} |
|
saved = *cssRule; |
|
*cssRule = EOS; |
|
*url = TtaStrdup (base); |
|
*cssRule = saved; |
|
if (saved == '"' || saved == '\'') |
|
/* we need to skip the quote character and possible spaces */ |
|
{ |
|
cssRule++; |
|
cssRule = SkipBlanksAndComments (cssRule); |
|
} |
|
else |
|
cssRule = ptr; |
|
} |
|
cssRule++; |
|
return cssRule; |
|
} |
|
|
|
/*---------------------------------------------------------------------- |
ParseSVGStroke: parse a SVG stroke property |
ParseSVGStroke: parse a SVG stroke property |
----------------------------------------------------------------------*/ |
----------------------------------------------------------------------*/ |
static char *ParseSVGStroke (Element element, PSchema tsch, |
static char *ParseSVGStroke (Element element, PSchema tsch, |
Line 2940 static char *ParseSVGStroke (Element ele
|
Line 3005 static char *ParseSVGStroke (Element ele
|
CSSInfoPtr css, ThotBool isHTML) |
CSSInfoPtr css, ThotBool isHTML) |
{ |
{ |
PresentationValue best; |
PresentationValue best; |
|
char *url; |
|
|
best.typed_data.unit = UNIT_INVALID; |
best.typed_data.unit = UNIT_INVALID; |
best.typed_data.real = FALSE; |
best.typed_data.real = FALSE; |
Line 2955 static char *ParseSVGStroke (Element ele
|
Line 3021 static char *ParseSVGStroke (Element ele
|
} |
} |
cssRule = SkipWord (cssRule); |
cssRule = SkipWord (cssRule); |
} |
} |
|
else if (!strncasecmp (cssRule, "currentColor", 12)) |
|
{ |
|
/* **** do something here to inherit color */; |
|
} |
|
else if (!strncasecmp (cssRule, "url", 3)) |
|
{ |
|
cssRule += 3; |
|
cssRule = ParseCSSUrl (cssRule, &url); |
|
/* **** do something with the url ***** */; |
|
TtaFreeMemory (url); |
|
/* **** caution: another color value may follow the uri (in case |
|
the uri could ne be dereferenced) *** */ |
|
} |
else |
else |
{ |
{ |
cssRule = ParseCSSColor (cssRule, &best); |
cssRule = ParseCSSColor (cssRule, &best); |
Line 2977 static char *ParseSVGFill (Element eleme
|
Line 3056 static char *ParseSVGFill (Element eleme
|
CSSInfoPtr css, ThotBool isHTML) |
CSSInfoPtr css, ThotBool isHTML) |
{ |
{ |
PresentationValue best; |
PresentationValue best; |
|
char *url; |
|
|
best.typed_data.unit = UNIT_INVALID; |
best.typed_data.unit = UNIT_INVALID; |
best.typed_data.real = FALSE; |
best.typed_data.real = FALSE; |
Line 2992 static char *ParseSVGFill (Element eleme
|
Line 3072 static char *ParseSVGFill (Element eleme
|
} |
} |
cssRule = SkipWord (cssRule); |
cssRule = SkipWord (cssRule); |
} |
} |
|
else if (!strncasecmp (cssRule, "currentColor", 12)) |
|
{ |
|
/* **** do something here to inherit color */; |
|
} |
|
else if (!strncasecmp (cssRule, "url", 3)) |
|
{ |
|
cssRule += 3; |
|
cssRule = ParseCSSUrl (cssRule, &url); |
|
/* **** do something with the url ***** */; |
|
TtaFreeMemory (url); |
|
/* **** caution: another color value may follow the uri (in case |
|
the uri could ne be dereferenced) *** */ |
|
} |
else |
else |
{ |
{ |
cssRule = ParseCSSColor (cssRule, &best); |
cssRule = ParseCSSColor (cssRule, &best); |
Line 3178 void ParseCSSBackgroundImageCallback (Do
|
Line 3271 void ParseCSSBackgroundImageCallback (Do
|
} |
} |
|
|
/*---------------------------------------------------------------------- |
/*---------------------------------------------------------------------- |
ParseCSSUrl: parse an URL |
|
----------------------------------------------------------------------*/ |
|
static char *ParseCSSUrl (char *cssRule, char **url) |
|
{ |
|
char saved; |
|
char *base, *ptr; |
|
|
|
cssRule = SkipBlanksAndComments (cssRule); |
|
saved = *cssRule; |
|
if (*cssRule == '(') |
|
{ |
|
cssRule++; |
|
cssRule = SkipBlanksAndComments (cssRule); |
|
/*** Escaped quotes are not handled. See function SkipQuotedString */ |
|
if (*cssRule == '"') |
|
{ |
|
cssRule++; |
|
base = cssRule; |
|
while (*cssRule != EOS && *cssRule != '"') |
|
cssRule++; |
|
} |
|
else if (*cssRule == '\'') |
|
{ |
|
cssRule++; |
|
base = cssRule; |
|
while (*cssRule != EOS && *cssRule != '\'') |
|
cssRule++; |
|
} |
|
else |
|
{ |
|
base = cssRule; |
|
while (*cssRule != EOS && *cssRule != ')') |
|
cssRule++; |
|
} |
|
/* keep the current position */ |
|
ptr = cssRule; |
|
if (saved == ')') |
|
{ |
|
/* remove extra spaces */ |
|
if (cssRule[-1] == SPACE) |
|
{ |
|
*cssRule = SPACE; |
|
cssRule--; |
|
while (cssRule[-1] == SPACE) |
|
cssRule--; |
|
} |
|
} |
|
saved = *cssRule; |
|
*cssRule = EOS; |
|
*url = TtaStrdup (base); |
|
*cssRule = saved; |
|
if (saved == '"' || saved == '\'') |
|
/* we need to skip the quote character and possible spaces */ |
|
{ |
|
cssRule++; |
|
cssRule = SkipBlanksAndComments (cssRule); |
|
} |
|
else |
|
cssRule = ptr; |
|
} |
|
cssRule++; |
|
return cssRule; |
|
} |
|
|
|
/*---------------------------------------------------------------------- |
|
GetCSSBackgroundURL searches a CSS BackgroundImage url within |
GetCSSBackgroundURL searches a CSS BackgroundImage url within |
the cssRule. |
the cssRule. |
Returns NULL or a new allocated url string. |
Returns NULL or a new allocated url string. |