<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.5 $" testname="$RCSfile: text-tselect-03-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-03-f.svg,v $</title>
  <defs>
    <style type="text/css">
  @font-face {
      font-family: Ezra SIL SR;
      src: url(woffs/EzraSILSR.woff) format("woff");
  }
    </style>
    <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>
    <font-face font-family="SVGHebrew" unicode-range="U+000D-FEFF">
      <font-face-src>
        <font-face-uri xlink:href="../resources/Heb.svg#SVGHebrew"/>
      </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" font-family="SVGHebrew, 'Ezra SIL SR', serif">
        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="14" 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="14" 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="14" 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="14" 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.5 $</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>
