tkormann    01/12/03 05:01:40

  Modified:    sources/org/apache/batik/bridge SVGTextElementBridge.java
  Added:       samples/tests/spec/structure systemLanguage.svg
  Log:
  add support for systemLanguage on tspan
  add a new complete test for that
  
  Revision  Changes    Path
  1.1                  xml-batik/samples/tests/spec/structure/systemLanguage.svg
  
  Index: systemLanguage.svg
  ===================================================================
  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" 
  "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd";>
  
  <!-- ====================================================================== -->
  <!-- Copyright (C) The Apache Software Foundation. All rights reserved.     -->
  <!--                                                                        -->
  <!-- This software is published under the terms of the Apache Software      -->
  <!-- License version 1.1, a copy of which has been included with this       -->
  <!-- distribution in  the LICENSE file.                                     -->
  <!-- ====================================================================== -->
  
  <!-- ====================================================================== -->
  <!-- Tests text-anchor on multiple text chunks on single tspan element      -->
  <!--                                                                        -->
  <!-- @author [EMAIL PROTECTED]                                               -->
  <!-- @version $Id: systemLanguage.svg,v 1.1 2001/12/03 13:01:40 tkormann Exp $  -->
  <!-- ====================================================================== -->
  <?xml-stylesheet type="text/css" href="../../resources/style/test.css" ?>  
  
  <svg width="450" height="500" viewBox="0 0 450 500" >
  
      <!-- ============================================================= -->
      <!-- Test content                                                  -->
      <!-- ============================================================= -->
      <g id="testContent">
      <text x="225" y="50" class="title">Test the 'systemLanguage' attribute</text>
  
  
  <g style="fill:#eee; stroke:black">
        <rect x="50" y="80" width="360" height="20" />
  
        <rect x="30" y="100" width="20" height="85" />
        <rect x="30" y="185" width="20" height="65" />
        <rect x="30" y="250" width="20" height="65" />
        <rect x="30" y="315" width="20" height="65" />
        <rect x="30" y="380" width="20" height="65" />
  </g>
  <g style="fill:none; stroke:black">
        <rect x="50" y="80" width="360" height="365" />
  
        <line x1="170" y1="80" x2="170" y2="445" />
        <line x1="290" y1="80" x2="290" y2="445" />
  
        <line x1="50" y1="185" x2="410" y2="185" />
        <line x1="50" y1="250" x2="410" y2="250" />
        <line x1="50" y1="315" x2="410" y2="315" />
        <line x1="50" y1="380" x2="410" y2="380" />
  </g>
  <g style="fill:black; text-anchor:middle;">
        <text x="110" y="94">default</text>
        <text x="230" y="94">english (en)</text>
        <text x="350" y="94">french (fr)</text>
  
        <text x="0" y="0" transform="translate(44, 145) rotate(-90)">Graphic 
Obj.</text>
        <text x="0" y="0" transform="translate(44, 220) rotate(-90)">&lt;svg></text>
        <text x="0" y="0" transform="translate(44, 285) rotate(-90)">&lt;g></text>
        <text x="0" y="0" transform="translate(44, 350) rotate(-90)">&lt;use></text>
        <text x="0" y="0" transform="translate(44, 415) rotate(-90)">&lt;tspan></text>
  
  </g>
  
  <defs>
  
  </defs>
  
  <!-- 
#######################################################################################
 -->
  <g transform="translate(60, 110)">
        <g>
                <rect x="0" y="0" width="30" height="20" style="fill:crimson" />
                <circle cx="50" cy="10" r="10" style="fill:crimson" />
                <ellipse cx="85" cy="10" rx="15" ry="10" style="fill:crimson" />
        </g>
  
        <g style="stroke-width:3; fill:none">
                <line x1="0" y1="25" x2="30" y2="45" style="stroke:crimson" />
                <polyline points="35 25 45 42 55 25 65 42" style="stroke:crimson" />
                <polygon points="70 25 80 42 90 25 100 42" style="fill:crimson" />
        </g>
  
        <g style="stroke-width:3; fill:none">
                <path d="M0 60C5 55 10 55 15 60C20 65 25 65 30 60" 
style="stroke:crimson" />
                <image xlink:href="../../resources/images/tde.jpg" x="35" y="50" 
width="30" height="20" />
                <text x="85" y="65" style="fill:black; stroke:none; 
text-anchor:middle">text</text>
        </g>
  
  </g>
  
  <g transform="translate(180, 110)">
        <g>
                <rect x="0" y="0" width="30" height="20" style="fill:orange" 
systemLanguage="en" />
                <circle cx="50" cy="10" r="10" style="fill:orange" systemLanguage="en" 
/>
                <ellipse cx="85" cy="10" rx="15" ry="10" style="fill:orange" 
systemLanguage="en" />
        </g>
  
        <g style="stroke-width:3; fill:none">
                <line x1="0" y1="25" x2="30" y2="45" style="stroke:orange" 
systemLanguage="en"/>
                <polyline points="35 25 45 42 55 25 65 42" style="stroke:orange" 
systemLanguage="en"/>
                <polygon points="70 25 80 42 90 25 100 42" style="fill:orange" 
systemLanguage="en"/>
        </g>
  
        <g style="stroke-width:3; fill:none">
                <path d="M0 60C5 55 10 55 15 60C20 65 25 65 30 60" 
style="stroke:orange" systemLanguage="en"/>
                <image xlink:href="../../resources/images/tde.jpg" x="35" y="50" 
width="30" height="20" systemLanguage="en"/>
                <text x="85" y="65" style="fill:black; stroke:none; 
text-anchor:middle" systemLanguage="en">text</text>
        </g>
  
  </g>
  
  <g transform="translate(300, 110)">
        <g>
                <rect x="0" y="0" width="30" height="20" style="fill:gold" 
systemLanguage="fr"/>
                <circle cx="50" cy="10" r="10" style="fill:gold" systemLanguage="fr"/>
                <ellipse cx="85" cy="10" rx="15" ry="10" style="fill:gold" 
systemLanguage="fr"/>
        </g>
  
        <g style="stroke-width:3; fill:none">
                <line x1="0" y1="25" x2="30" y2="45" style="stroke:gold" 
systemLanguage="fr"/>
                <polyline points="35 25 45 42 55 25 65 42" style="stroke:gold" 
systemLanguage="fr"/>
                <polygon points="70 25 80 42 90 25 100 42" style="fill: gold" 
systemLanguage="fr"/>
        </g>
  
        <g style="stroke-width:3; fill:none">
                <path d="M0 60C5 55 10 55 15 60C20 65 25 65 30 60" style="stroke:gold" 
systemLanguage="fr"/>
                <image xlink:href="../../resources/images/tde.jpg" x="35" y="50" 
width="30" height="20" systemLanguage="fr"/>
                <text x="85" y="65" style="fill:black; stroke:none; 
text-anchor:middle" systemLanguage="fr">text</text>
        </g>
  
  </g>
  <!-- 
#######################################################################################
 -->
  
  <g>
        <svg x="52" y="187" width="116" height="62">
           <rect x="0" y="0" width="100%" height="100%" style="fill:crimson" />
        </svg>
  
        <svg x="172" y="187" width="116" height="62" style="fill:orange" 
systemLanguage="en">
           <rect x="0" y="0" width="100%" height="100%" />
        </svg>
  
        <svg x="292" y="187" width="116" height="62" style="fill:gold" 
systemLanguage="fr">
           <rect x="0" y="0" width="100%" height="100%" />
        </svg>
  </g>
  
  <!-- 
#######################################################################################
 -->
  <g transform="translate(0 65)">
        <g>
                <rect x="52" y="187" width="116" height="62" style="fill:crimson"/>
        </g>
  
        <g>
                <rect x="172" y="187" width="116" height="62" style="fill:orange" 
systemLanguage="en" />
        </g>
  
        <g>
                <rect x="292" y="187" width="116" height="62" style="fill:gold" 
systemLanguage="fr" />
        </g>
  </g>
  <!-- 
#######################################################################################
 -->
  <defs>
        <rect id="use" x="0" y="0" width="116" height="61" />
  </defs>
  
  <g>
  
        <use xlink:href="#use" x="52" y="317" style="fill:crimson" />
  
        <use xlink:href="#use" x="172" y="317" style="fill:orange" systemLanguage="en" 
/>
  
        <use xlink:href="#use" x="292" y="317" style="fill:gold" systemLanguage="fr" />
  
  </g>
  
  <!-- 
#######################################################################################
 -->
  
  <text style="text-anchor:middle">
  <tspan x="110"  y="420" style="fill:crimson">simple &lt;tspan></tspan>
  <tspan x="230" y="420" style="fill:orange" systemLanguage="en">simple 
&lt;tspan></tspan>
  <tspan x="350" y="420" style="fill:gold" systemLanguage="fr">simple 
&lt;tspan></tspan>
  </text>
  
  </g>
  
      <!-- ============================================================= -->
      <!-- Batik sample mark                                             -->
      <!-- ============================================================= -->
      <use xlink:href="../../../batikLogo.svg#Batik_Tag_Box" />
  
  </svg>
  
  
  
  
  1.42      +30 -18    
xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java
  
  Index: SVGTextElementBridge.java
  ===================================================================
  RCS file: 
/home/cvs/xml-batik/sources/org/apache/batik/bridge/SVGTextElementBridge.java,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- SVGTextElementBridge.java 2001/11/14 10:54:23     1.41
  +++ SVGTextElementBridge.java 2001/12/03 13:01:40     1.42
  @@ -56,7 +56,7 @@
    * Bridge class for the &lt;text> element.
    *
    * @author <a href="[EMAIL PROTECTED]>Bill Haneman</a>
  - * @version $Id: SVGTextElementBridge.java,v 1.41 2001/11/14 10:54:23 tkormann Exp $
  + * @version $Id: SVGTextElementBridge.java,v 1.42 2001/12/03 13:01:40 tkormann Exp $
    */
   public class SVGTextElementBridge extends AbstractSVGBridge
       implements GraphicsNodeBridge, ErrorConstants {
  @@ -82,17 +82,17 @@
        * @return a graphics node that represents the specified element
        */
       public GraphicsNode createGraphicsNode(BridgeContext ctx, Element e) {
  -     // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage'
  -     if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) {
  -         return null;
  -     }
  +        // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage'
  +        if (!SVGUtilities.matchUserAgent(e, ctx.getUserAgent())) {
  +            return null;
  +        }
   
           TextNode node = new TextNode();
  -     // specify the text painter to use if one has been provided in the
  -     // bridge context
  -     if (ctx.getTextPainter() != null) {
  -         node.setTextPainter(ctx.getTextPainter());
  -     }
  +        // specify the text painter to use if one has been provided in the
  +        // bridge context
  +        if (ctx.getTextPainter() != null) {
  +            node.setTextPainter(ctx.getTextPainter());
  +        }
   
           // 'transform'
           String s = e.getAttributeNS(null, SVG_TRANSFORM_ATTRIBUTE);
  @@ -290,6 +290,11 @@
                                             TextPath textPath,
                                             LinkedList result) {
   
  +        // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage'
  +        if (!SVGUtilities.matchUserAgent(element, ctx.getUserAgent())) {
  +            return result;
  +        }
  +
           // !!! return two lists
           Map m = getAttributeMap(ctx, element, node, textPath);
           String s = XMLSupport.getXMLSpace(element);
  @@ -325,7 +330,7 @@
   
                   if (n.getLocalName().equals(SVG_TSPAN_TAG) ||
                       n.getLocalName().equals(SVG_ALT_GLYPH_TAG) ||
  -                 n.getLocalName().equals(SVG_A_TAG)) {
  +                    n.getLocalName().equals(SVG_A_TAG)) {
   
                       buildAttributedStrings(ctx,
                                              nodeElement,
  @@ -333,7 +338,6 @@
                                              false,
                                              textPath,
                                              result);
  -
                   } else if (n.getLocalName().equals(SVG_TEXT_PATH_TAG)) {
   
                       SVGTextPathElementBridge textPathBridge
  @@ -380,7 +384,7 @@
                   }
                   break;
               case Node.TEXT_NODE:
  -            case Node.CDATA_SECTION_NODE:            
  +            case Node.CDATA_SECTION_NODE:
                   s = n.getNodeValue();
                   int[] indexMap = new int[s.length()];
                   as = createAttributedString
  @@ -531,6 +535,10 @@
                                                 Element element,
                                                 BridgeContext ctx) {
   
  +        // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage'
  +        if (!SVGUtilities.matchUserAgent(element, ctx.getUserAgent())) {
  +            return;
  +        }
           // get all of the glyph position attribute values
           String xAtt = element.getAttributeNS(null, SVG_X_ATTRIBUTE);
           String yAtt = element.getAttributeNS(null, SVG_Y_ATTRIBUTE);
  @@ -662,6 +670,10 @@
                                         BridgeContext ctx) {
   
   
  +        // 'requiredFeatures', 'requiredExtensions' and 'systemLanguage'
  +        if (!SVGUtilities.matchUserAgent(element, ctx.getUserAgent())) {
  +            return;
  +        }
           AttributedCharacterIterator aci = as.getIterator();
   
           // calculate which chars in the string belong to this element
  @@ -693,7 +705,7 @@
   
           // Fill
           Paint p = PaintServer.convertFillPaint(element, node, ctx);
  -        as.addAttribute(TextAttribute.FOREGROUND, p, 
  +        as.addAttribute(TextAttribute.FOREGROUND, p,
                           firstChar, lastChar+1);
   
           // Stroke Paint
  @@ -711,7 +723,7 @@
           // Text decoration
           if (textDecoration != null) {
               as.addAttribute(GVTAttributedCharacterIterator.
  -                            TextAttribute.UNDERLINE_PAINT, 
  +                            TextAttribute.UNDERLINE_PAINT,
                               textDecoration.underlinePaint,
                               firstChar, lastChar+1);
   
  @@ -719,14 +731,14 @@
                               TextAttribute.UNDERLINE_STROKE_PAINT,
                               textDecoration.underlineStrokePaint,
                               firstChar, lastChar+1);
  -            
  +
               as.addAttribute(GVTAttributedCharacterIterator.
                               TextAttribute.UNDERLINE_STROKE,
                               textDecoration.underlineStroke,
                               firstChar, lastChar+1);
   
               as.addAttribute(GVTAttributedCharacterIterator.
  -                            TextAttribute.OVERLINE_PAINT, 
  +                            TextAttribute.OVERLINE_PAINT,
                               textDecoration.overlinePaint,
                               firstChar, lastChar+1);
   
  @@ -744,7 +756,7 @@
                               TextAttribute.STRIKETHROUGH_PAINT,
                               textDecoration.strikethroughPaint,
                               firstChar, lastChar+1);
  -            
  +
               as.addAttribute(GVTAttributedCharacterIterator.
                               TextAttribute.STRIKETHROUGH_STROKE_PAINT,
                               textDecoration.strikethroughStrokePaint,
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to