You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-dev@xmlgraphics.apache.org by "Tony BenBrahim (JIRA)" <ji...@apache.org> on 2015/03/05 15:16:38 UTC

[jira] [Updated] (BATIK-1112) CSS style Parser does not handle style names with leading dash

     [ https://issues.apache.org/jira/browse/BATIK-1112?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tony BenBrahim updated BATIK-1112:
----------------------------------
    Description: 
Consider the following fragment:
{code}
<text 
   id="text8072"
       y="15.697294"
       x="1.0898001"
       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.67250013px;line-height:125%;font-family:'Arial Unicode MS';-inkscape-font-specification:'Arial Unicode MS, Normal';fill:#ff0000>
{code}
the style Parser stops parsing with an exception when it encounters -inkscape-font-specification, which Inkscape adds to every font declaration and which cannot be removed.The rendered text is then missing any style attribute specified afterwards, such as color, anchor, alignment, etc...

possible patch that parses styles correctly:
{code}
	protected void parseStyleDeclaration(final boolean inSheet) throws CSSException {
		boolean leadingDash = false;
		for (;;) {
			switch (current) {
			case LexicalUnits.EOF:
				if (inSheet) {
					throw createCSSParseException("eof");
				}
				return;
			case LexicalUnits.RIGHT_CURLY_BRACE:
				if (!inSheet) {
					throw createCSSParseException("eof.expected");
				}
				nextIgnoreSpaces();
				return;
			case LexicalUnits.SEMI_COLON:
				nextIgnoreSpaces();
				continue;
			case LexicalUnits.MINUS:
				leadingDash = true;
				next();
				break;
			default:
				throw createCSSParseException("identifier");
			case LexicalUnits.IDENTIFIER:
			}

			final String name = (leadingDash ? "-" : "") + scanner.getStringValue();
			leadingDash = false;

			if (nextIgnoreSpaces() != LexicalUnits.COLON) {
				throw createCSSParseException("colon");
			}
			nextIgnoreSpaces();

			LexicalUnit exp = null;

			try {
				exp = parseExpression(false);
			} catch (final CSSParseException e) {
				reportError(e);
			}

			if (exp != null) {
				boolean important = false;
				if (current == LexicalUnits.IMPORTANT_SYMBOL) {
					important = true;
					nextIgnoreSpaces();
				}
				documentHandler.property(name, exp, important);
			}
		}
	}
{code}

  was:
Consider the following fragment:
{code}
<text 
   id="text8072"
       y="15.697294"
       x="1.0898001"
       style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.67250013px;line-height:125%;font-family:'Arial Unicode MS';-inkscape-font-specification:'Arial Unicode MS, Normal';fill:#ff0000>
{code}
the style Parser stops parsing with an exception when it encounters -inkscape-font-specification, which Inkscape adds to every font declaration and which cannot be removed.The rendered text is then missing any style attribute specified afterwards, such as color, anchor, alignment, etc...


> CSS style Parser does not handle style names with leading dash
> --------------------------------------------------------------
>
>                 Key: BATIK-1112
>                 URL: https://issues.apache.org/jira/browse/BATIK-1112
>             Project: Batik
>          Issue Type: Bug
>          Components: CSS
>    Affects Versions: 1.7
>            Reporter: Tony BenBrahim
>            Priority: Minor
>
> Consider the following fragment:
> {code}
> <text 
>    id="text8072"
>        y="15.697294"
>        x="1.0898001"
>        style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.67250013px;line-height:125%;font-family:'Arial Unicode MS';-inkscape-font-specification:'Arial Unicode MS, Normal';fill:#ff0000>
> {code}
> the style Parser stops parsing with an exception when it encounters -inkscape-font-specification, which Inkscape adds to every font declaration and which cannot be removed.The rendered text is then missing any style attribute specified afterwards, such as color, anchor, alignment, etc...
> possible patch that parses styles correctly:
> {code}
> 	protected void parseStyleDeclaration(final boolean inSheet) throws CSSException {
> 		boolean leadingDash = false;
> 		for (;;) {
> 			switch (current) {
> 			case LexicalUnits.EOF:
> 				if (inSheet) {
> 					throw createCSSParseException("eof");
> 				}
> 				return;
> 			case LexicalUnits.RIGHT_CURLY_BRACE:
> 				if (!inSheet) {
> 					throw createCSSParseException("eof.expected");
> 				}
> 				nextIgnoreSpaces();
> 				return;
> 			case LexicalUnits.SEMI_COLON:
> 				nextIgnoreSpaces();
> 				continue;
> 			case LexicalUnits.MINUS:
> 				leadingDash = true;
> 				next();
> 				break;
> 			default:
> 				throw createCSSParseException("identifier");
> 			case LexicalUnits.IDENTIFIER:
> 			}
> 			final String name = (leadingDash ? "-" : "") + scanner.getStringValue();
> 			leadingDash = false;
> 			if (nextIgnoreSpaces() != LexicalUnits.COLON) {
> 				throw createCSSParseException("colon");
> 			}
> 			nextIgnoreSpaces();
> 			LexicalUnit exp = null;
> 			try {
> 				exp = parseExpression(false);
> 			} catch (final CSSParseException e) {
> 				reportError(e);
> 			}
> 			if (exp != null) {
> 				boolean important = false;
> 				if (current == LexicalUnits.IMPORTANT_SYMBOL) {
> 					important = true;
> 					nextIgnoreSpaces();
> 				}
> 				documentHandler.property(name, exp, important);
> 			}
> 		}
> 	}
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org