[ 
https://issues.apache.org/jira/browse/BATIK-1112?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16512896#comment-16512896
 ] 

Jan Tošovský commented on BATIK-1112:
-------------------------------------

Converting the existing code from description into the patch hoping it will 
speedup integrating it into the code base. There are lot of Inkscape SVGs in my 
documents (converted to PDF via FOP) which are affected by this bug.

> 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
>         Attachments: BATIK-1112.patch
>
>
> 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}
> workaround:
> Create your own parser class that extends org.apache.batik.css.parser.Parser, 
> overriding parseStyleDeclaration with the code above, and add the following 
> line your code
> {code}
> XMLResourceDescriptor.setCSSParserClassName(MyParser.class.getName());
> {code}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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

Reply via email to