<svg version="1.1" baseProfile="full" id="svg-root"
  width="100%" height="100%" viewBox="0 0 480 360"
  xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
  <!--======================================================================-->
  <!--=  SVG 1.1 2nd Edition Test Case                                     =-->
  <!--======================================================================-->
  <!--=  Copyright 2009 World Wide Web Consortium, (Massachusetts          =-->
  <!--=  Institute of Technology, European Research Consortium for         =-->
  <!--=  Informatics and Mathematics (ERCIM), Keio University).            =-->
  <!--=  All Rights Reserved.                                              =-->
  <!--=  See http://www.w3.org/Consortium/Legal/.                          =-->
  <!--======================================================================-->
  <d:SVGTestCase xmlns:d="http://www.w3.org/2000/02/svg/testsuite/description/"
    template-version="1.3" reviewer="CL" author="CM" status="reviewed"
    version="$Revision: 1.6 $" testname="$RCSfile: text-dom-05-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/text.html#InterfaceSVGTextContentElement">
      <p>
        This tests that methods on the SVGTextContentElement interface
        that take an index to a character or a number of characters
        actually interpret these as indexes to or numbers of UTF-16 code
        units. To test this, a character from outside the Basic Multilingual Plane 
        (U+10000; LINEAR B SYLLABLE B008) is used in a text string. 
        This character is stored in UTF-16 as a surrogate pair.
      </p>
      <p>
        The test consists of 5 sub-tests, which test the methods
        methods on the SVGTextContentElement interface.  The result
        of each sub-test is shown as a small rectangle: black
        indicates that the sub-test did not run, red indicates that
        the sub-test failed and green indicates that the sub-test
        succeeded.
      </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Run the test. No interaction required.
      </p>
      <p>
        The test relies on support for WebFonts - either SVG Fonts, or WOFF, or OpenType.
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        The test is passed if all 5 rectangles are green.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: text-dom-05-f.svg,v $</title>
  <defs>
    <font-face font-family="SVGFreeSansASCII" unicode-range="U+0-7F">
      <font-face-src>
        <font-face-uri xlink:href="../resources/SVGFreeSans.svg#ascii"/>
      </font-face-src>
    </font-face>
  </defs>
  <g id="test-body-content" font-family="SVGFreeSansASCII,sans-serif" font-size="18">
    <text x='10' y='30' font-size='13'>Test that SVGTextContentElement methods work on UTF-16 code units</text>
  <text x='10' y='60' font-size='11'>Methods that rely on layout</text>
    <font-face font-family='SPlaneOne'>
        <font-face-src>
          <font-face-uri xlink:href="../resources/Plane1/PlaneOne.svg#SPlaneOne"/>
        </font-face-src>
    </font-face>
    <style type="text/css">
      @font-face {
        font-family: PlaneOne;
        src: url(woffs/PlaneOne.woff) format("woff");
        }
    </style>

    <text id='t' x='50' y='50' visibility='hidden' font-family='PlaneOne, SPlaneOne' font-size='10' rotate='10 20 30'>a&#x10000;b</text>

    <rect id='r3' x='10' y='120' width='30' height='30'/>
    <text x='50' y='140'>getStartPositionOfChar</text>

    <rect id='r4' x='10' y='160' width='30' height='30'/>
    <text x='50' y='180'>getEndPositionOfChar</text>

    <rect id='r5' x='10' y='200' width='30' height='30'/>
    <text x='50' y='220'>getExtentOfChar</text>

    <rect id='r6' x='10' y='240' width='30' height='30'/>
    <text x='50' y='260'>getRotationOfChar</text>

    <rect id='r7' x='10' y='280' width='30' height='30'/>
    <text x='50' y='300'>getCharNumAtPosition</text>

    <script><![CDATA[
      function $(x) { return document.getElementById(x) }
      function eq(a, b) {
        if (a.length != b.length) return false;
        for (var i = 0; i < a.length; i++) if (a[i] != b[i]) return false;
        return true;
      }
      function p(x, y) {
        var p = document.documentElement.createSVGPoint();
        p.x = x;
        p.y = y;
        return p;
      }

      var t = $('t');
      var x, b;

      b = false;
      try {
        x = [
          t.getStartPositionOfChar(0).x,
          t.getStartPositionOfChar(1).x,
          t.getStartPositionOfChar(2).x,
          t.getStartPositionOfChar(3).x
        ];
        b = eq(x, [50, 51, 51, 53]);
      } catch (e) {
      }
      $('r3').setAttribute('fill', b ? 'green' : 'red');

      b = false;
      try {
        x = [
          t.getEndPositionOfChar(0).x,
          t.getEndPositionOfChar(1).x,
          t.getEndPositionOfChar(2).x,
          t.getEndPositionOfChar(3).x
        ];
        b = x[0] < x[1] && x[1] == x[2] && x[2] < x[3];
      } catch (e) {
      }
      $('r4').setAttribute('fill', b ? 'green' : 'red');

      b = false;
      try {
        x = [
          t.getExtentOfChar(0).width,
          t.getExtentOfChar(1).width,
          t.getExtentOfChar(2).width,
          t.getExtentOfChar(3).width
        ];
        b = eq(x, [1, 2, 2, 4]);
      } catch (e) {
      }
      $('r5').setAttribute('fill', b ? 'green' : 'red');

      b = false;
      try {
        x = [
          t.getRotationOfChar(0),
          t.getRotationOfChar(1),
          t.getRotationOfChar(2),
          t.getRotationOfChar(3)
        ];
        b = eq(x, [10, 20, 20, 30]);
      } catch (e) {
      }
      $('r6').setAttribute('fill', b ? 'green' : 'red');

      b = false;
      try {
        x = [
          t.getCharNumAtPosition(p(50.5, 49)),
          t.getCharNumAtPosition(p(51.5, 49)),  // within first half of the glyph represented by the two surrogates
          t.getCharNumAtPosition(p(52.5, 49)),  // within second half of the glyph represented by the two surrogates
          t.getCharNumAtPosition(p(53.5, 49))
        ];
        b = eq(x, [0, 1, 2, 3]);
      } catch (e) {
      }
      $('r7').setAttribute('fill', b ? 'green' : 'red');
    ]]></script>
  </g>
  <g font-family="SVGFreeSansASCII,sans-serif" font-size="32">
    <text id="revision" x="10" y="340" stroke="none" fill="black">$Revision: 1.6 $</text>
  </g>
  <rect id="test-frame" x="1" y="1" width="478" height="358" fill="none" stroke="#000"/>
  <!-- comment out this watermark once the test is approved -->
  <g id="draft-watermark">
    <rect x="1" y="1" width="478" height="20" fill="red" stroke="black" stroke-width="1"/>
    <text font-family="SVGFreeSansASCII,sans-serif" font-weight="bold" font-size="20" x="240"
      text-anchor="middle" y="18" stroke-width="0.5" stroke="black" fill="white">DRAFT</text>
  </g>
</svg>
