<svg version="1.1" baseProfile="full" onload="doSelection(0,0);" 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.4" reviewer="CL" author="ED" status="accepted"
    version="$Revision: 1.6 $" testname="$RCSfile: text-tselect-02-f.svg,v $">
    <d:testDescription xmlns="http://www.w3.org/1999/xhtml" href="http://www.w3.org/TR/SVG11/text.html#TextSelection">
      <p>
        This test demonstrates text selection of bidirectional text.
      </p>
    </d:testDescription>
    <d:operatorScript xmlns="http://www.w3.org/1999/xhtml">
      <p>
        Run the test. No interaction required.
      </p>
    </d:operatorScript>
    <d:passCriteria xmlns="http://www.w3.org/1999/xhtml">
      <p>
        The initial result should be that the first 9 characters in logical order
        starting from logical position 0 are selected.
      </p>
      <p>
        Visually the selection is discontigous and these substrings must be selected (listed in visual order):
      </p>
      <p>
        "abc"
      </p>
      <p>
        the space between "c" and "ו"
      </p>
      <p>
        "1"
      </p>
      <p>
        the space between "3" and "ג"
      </p>
      <p>
        "אבג"
      </p>
      <p>
        If only the substrings listed above were selected then the test has passed.
      </p>
      <p>
        A user agent that allows selecting text in logical order would have generated the same selection
        as in this testcase if the user started the selection on the character "a" and ended it on the
        character "1".

        A user agent that allows selecting text in visual order would not have a discontigous selection
        if the user started the selection on the character "a" and ended it on the character "1". The copied
        text would be discontigous instead in this case.

        Note that the SVG DOM method requires logical order text selection, so for both types of user agents
        this testcase must look the same.
      </p>
      <p>
        The testcase also shows what happens when the selection is modified via DOM (click the buttons below
        the bidi-text). Compliant viewers must throw an exception when the first parameter handed
        to SVGTextContentElement.selectSubString is out-of-range.
        That means the variable 'startIndex' must always be in the range 0 &lt;= startIndex &lt;= 18.
        It can be noted that the parameter 'numChars' is not restricted in this way.
      </p>
      <p>
        Note that the color of the text selection is UA dependent and not defined in the SVG specification.
      </p>
    </d:passCriteria>
  </d:SVGTestCase>
  <title id="test-title">$RCSfile: text-tselect-02-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">
    <defs>
      <script>
        var startIndex = 0;
        var numChars = 9;

        function doSelection(indexDelta, numCharsDelta)
        {
        try
        {
        document.getElementById('text').selectSubString(startIndex+indexDelta, numChars+numCharsDelta);
        }
        catch(e)
        {
        if(e.code == DOMException.INDEX_SIZE_ERR)
        {
        // If there was an error, re-select the last range
        document.getElementById('text').selectSubString(startIndex, numChars);
        return;
        }
        }

        startIndex += indexDelta;
        numChars += numCharsDelta;

        document.getElementById('info').firstChild.data = "StartIndex: " + startIndex + ". NumChars: " + numChars;
        }
      </script>
    </defs>

    <g transform="translate(0,60)">
      <text id="info" font-size="16" x="10" y="70">StartIndex: 0 NumChars: 0</text>

      <text id="text" font-size="48" y="128" x="10">
        abc אבג 123 דהו def
      </text>

      <g id="buttons">
        <rect x="10" y="160" width="100" height="20" fill="blue" onclick="doSelection(1,0);"/>
        <text x="60" y="175" text-anchor="middle" font-size="16" fill="white" pointer-events="none">startIndex++</text>

        <rect x="120" y="160" width="100" height="20" fill="blue" onclick="doSelection(-1,0);"/>
        <text x="170" y="175" text-anchor="middle" font-size="16" fill="white" pointer-events="none">startIndex--</text>

        <rect x="230" y="160" width="100" height="20" fill="blue" onclick="doSelection(0,1);"/>
        <text x="280" y="175" text-anchor="middle" font-size="16" fill="white" pointer-events="none">numChars++</text>

        <rect x="340" y="160" width="100" height="20" fill="blue" onclick="doSelection(0,-1);"/>
        <text x="390" y="175" text-anchor="middle" font-size="16" fill="white" pointer-events="none">numChars--</text>
      </g>
    </g>
  </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>
