tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

embellished-operator-003.html (12577B)


      1 <!DOCTYPE html>
      2 <html>
      3 <head>
      4 <meta charset="utf-8">
      5 <title>Embellished operators</title>
      6 <link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
      7 <link rel="help" href="https://w3c.github.io/mathml-core/#embellished-operators">
      8 <link rel="help" href="https://w3c.github.io/mathml-core/#definition-of-space-like-elements">
      9 <link rel="help" href="https://w3c.github.io/mathml-core/#layout-of-mrow">
     10 <meta name="assert" content="Verify definition of embellished operators">
     11 <script src="/resources/testharness.js"></script>
     12 <script src="/resources/testharnessreport.js"></script>
     13 <script src="/mathml/support/feature-detection.js"></script>
     14 <script src="/mathml/support/box-navigation.js"></script>
     15 <style>
     16  /* Default spacing of operator 'X' is 0.2777777777777778em so quite different
     17     from the measured/specified 0em and 1em. */
     18  math, math * {
     19      font: 25px/1 Ahem;
     20  }
     21  mn {
     22      color: black;
     23  }
     24  mtext.space-like {
     25      color: lightblue !important;
     26  }
     27  .testedElement mo {
     28      color: yellow !important;
     29  }
     30  .testedElement, .testedElement * {
     31      color: blue !important;
     32      background: blue !important;
     33  }
     34  .oof1 {
     35      position: absolute;
     36  }
     37  .oof2 {
     38      position: fixed;
     39  }
     40  .nobox {
     41      display: none;
     42  }
     43  .allChildrenVisible > *:not(.nobox) {
     44      display: inline math;
     45  }
     46 </style>
     47 <script>
     48  function spaceBeforeElement(element) {
     49      var mnBefore = previousInFlowSibling(element);
     50      return element.getBoundingClientRect().left - mnBefore.getBoundingClientRect().right;
     51  }
     52 
     53  setup({ explicit_done: true });
     54  window.addEventListener("load", runTests);
     55 
     56  function runTests() {
     57      var epsilon = 1;
     58      var emToPx = 25;
     59 
     60      ["maction", "semantics"].forEach(tag => {
     61           test(function() {
     62               assert_true(MathMLFeatureDetection.has_operator_spacing());
     63               var element = document.getElementsByTagName(tag)[0];
     64               assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon);
     65           }, `${tag} (embellished operator)`);
     66 
     67           test(function() {
     68               assert_true(MathMLFeatureDetection.has_operator_spacing());
     69               var element = document.getElementsByTagName(tag)[1];
     70               assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon);
     71           }, `${tag} (embellished operator, from in-flow children)`);
     72 
     73           test(function() {
     74               assert_true(MathMLFeatureDetection.has_operator_spacing());
     75               var element = document.getElementsByTagName(tag)[2];
     76               assert_approx_equals(spaceBeforeElement(element), 0, epsilon);
     77           }, `${tag} (not embellished operator)`);
     78 
     79           test(function() {
     80               assert_true(MathMLFeatureDetection.has_operator_spacing());
     81               var element = document.getElementsByTagName(tag)[3];
     82               assert_approx_equals(spaceBeforeElement(element), 0, epsilon);
     83           }, `${tag} (not embellished operator, from in-flow children)`);
     84 
     85           test(function() {
     86               assert_true(MathMLFeatureDetection.has_operator_spacing());
     87               var element = document.getElementsByTagName(tag)[4];
     88               assert_approx_equals(spaceBeforeElement(element), 0, epsilon);
     89           }, `${tag} (not embellished operator, empty)`);
     90 
     91           test(function() {
     92               assert_true(MathMLFeatureDetection.has_operator_spacing());
     93               var element = document.getElementsByTagName(tag)[5];
     94               assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon);
     95           }, `${tag} (embellished operator, one child)`);
     96 
     97           test(function() {
     98               assert_true(MathMLFeatureDetection.has_operator_spacing());
     99               var element = document.getElementsByTagName(tag)[6];
    100               assert_approx_equals(spaceBeforeElement(element), 2 * emToPx, epsilon);
    101           }, `${tag} (embellished operator, complex)`);
    102     });
    103      done();
    104  }
    105 </script>
    106 </head>
    107 <body>
    108  <div id="log"></div>
    109  <!-- <semantics> or <maction> are embellished operators if their children
    110       consist (in any order) of one embellished operator and zero or more
    111       space-like elements. -->
    112  <p>
    113    <math>
    114      <mn>X</mn>
    115      <maction class="testedElement" actiontype="statusline">
    116        <mo lspace="2em" rspace="0em">X</mo>
    117        <mn>STATUS MESSAGE</mn>
    118      </maction>
    119      <mn>X</mn>
    120    </math>
    121  </p>
    122  <p>
    123    <math>
    124      <mn>X</mn>
    125      <semantics class="testedElement">
    126        <mo lspace="2em" rspace="0em">X</mo>
    127        <annotation>TEXT ANNOTATION</annotation>
    128        <mn>X</mn>
    129      </semantics>
    130      <mn>X</mn>
    131    </math>
    132  </p>
    133 
    134  <!-- Only in-flow children affect determination of embellished operators. -->
    135  <p>
    136    <math>
    137      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    138      <mn>X</mn>
    139      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    140      <maction class="testedElement" actiontype="statusline">
    141        <mo lspace="2em" rspace="0em">X</mo>
    142        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    143        <mn>STATUS MESSAGE</mn>
    144        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    145      </maction>
    146      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    147      <mn>X</mn>
    148      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    149    </math>
    150  </p>
    151  <p>
    152    <math>
    153      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    154      <mn>X</mn>
    155      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    156      <semantics class="testedElement">
    157        <mo lspace="2em" rspace="0em">X</mo>
    158        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    159        <annotation>TEXT ANNOTATION</annotation>
    160        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    161        <mn>X</mn>
    162        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    163      </semantics>
    164      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    165      <mn>X</mn>
    166      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    167    </math>
    168  </p>
    169 
    170  <!-- <semantics> or <maction> are not embellished
    171       operators if their first in-flow child is not an embellished operator -->
    172  <p>
    173    <math>
    174      <mn>X</mn>
    175      <msub class="testedElement">
    176        <mn>X</mn>
    177        <mo lspace="2em" rspace="0em">X</mo>
    178      </msub>
    179      <mn>X</mn>
    180    </math>
    181  </p>
    182  <p>
    183    <math>
    184      <mn>X</mn>
    185      <msup class="testedElement">
    186        <mn>X</mn>
    187        <mo lspace="2em" rspace="0em">X</mo>
    188      </msup>
    189      <mn>X</mn>
    190    </math>
    191  </p>
    192  <p>
    193    <math>
    194      <mn>X</mn>
    195      <msubsup class="testedElement">
    196        <mn>X</mn>
    197        <mo lspace="2em" rspace="0em">X</mo>
    198        <mn>X</mn>
    199      </msubsup>
    200      <mn>X</mn>
    201    </math>
    202  </p>
    203  <p>
    204    <math>
    205      <mn>X</mn>
    206      <munder class="testedElement">
    207        <mn>X</mn>
    208        <mo lspace="2em" rspace="0em">X</mo>
    209      </munder>
    210      <mn>X</mn>
    211    </math>
    212  </p>
    213  <p>
    214    <math>
    215      <mn>X</mn>
    216      <mover class="testedElement">
    217        <mn>X</mn>
    218        <mo lspace="2em" rspace="0em">X</mo>
    219      </mover>
    220      <mn>X</mn>
    221    </math>
    222  </p>
    223  <p>
    224    <math>
    225      <mn>X</mn>
    226      <munderover class="testedElement">
    227        <mn>X</mn>
    228        <mo lspace="2em" rspace="0em">X</mo>
    229      </munderover>
    230      <mn>X</mn>
    231    </math>
    232  </p>
    233  <p>
    234    <math>
    235      <mn>X</mn>
    236      <mmultiscripts class="testedElement">
    237        <mn>X</mn>
    238        <mo lspace="2em" rspace="0em">X</mo>
    239        <mn>X</mn>
    240        <mn>X</mn>
    241        <mn>X</mn>
    242      </mmultiscripts>
    243      <mn>X</mn>
    244    </math>
    245  </p>
    246  <p>
    247    <math>
    248      <mn>X</mn>
    249      <mfrac class="testedElement">
    250        <mn>X</mn>
    251        <mo lspace="2em" rspace="0em">X</mo>
    252      </mfrac>
    253      <mn>X</mn>
    254    </math>
    255  </p>
    256  <p>
    257    <math>
    258      <mn>X</mn>
    259      <maction class="testedElement" actiontype="statusline">
    260        <mn>X</mn>
    261        <mo lspace="2em" rspace="0em">STATUS MESSAGE</mo>
    262      </maction>
    263      <mn>X</mn>
    264    </math>
    265  </p>
    266  <p>
    267    <math>
    268      <mn>X</mn>
    269      <semantics class="testedElement">
    270        <mrow>
    271          <mn>X</mn>
    272          <mo lspace="2em" rspace="0em">X</mo>
    273        </mrow>
    274        <annotation>TEXT ANNOTATION</annotation>
    275      </semantics>
    276      <mn>X</mn>
    277    </math>
    278  </p>
    279 
    280  <!-- Only in-flow children affect determination of embellished operators. -->
    281  <p>
    282    <math>
    283      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    284      <mn>X</mn>
    285      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    286      <maction class="testedElement" actiontype="statusline">
    287        <mn>X</mn>
    288        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    289        <mo lspace="2em" rspace="0em">STATUS MESSAGE</mo>
    290        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    291      </maction>
    292      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    293      <mn>X</mn>
    294      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    295    </math>
    296  </p>
    297  <p>
    298    <math>
    299      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    300      <mn>X</mn>
    301      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    302      <semantics class="testedElement">
    303        <mrow>
    304          <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    305          <mn>X</mn>
    306          <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    307          <mo lspace="2em" rspace="0em">X</mo>
    308          <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    309        </mrow>
    310        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    311        <annotation>TEXT ANNOTATION</annotation>
    312        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    313      </semantics>
    314      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    315      <mn>X</mn>
    316      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    317    </math>
    318  </p>
    319 
    320  <!-- Empty <maction> and <semantics> (invalid in MathML3). -->
    321  <p>
    322    <math>
    323      <mn>X</mn>
    324      <maction class="testedElement">
    325      </maction>
    326      <mn>X</mn>
    327    </math>
    328  </p>
    329  <p>
    330    <math>
    331      <mn>X</mn>
    332      <semantics class="testedElement">
    333      </semantics>
    334      <mn>X</mn>
    335    </math>
    336  </p>
    337 
    338  <!-- One-child <maction> and <semantics> (invalid in MathML3). -->
    339  <p>
    340    <math>
    341      <mn>X</mn>
    342      <maction class="testedElement">
    343        <mo lspace="2em" rspace="0em">X</mo>
    344      </maction>
    345      <mn>X</mn>
    346    </math>
    347  </p>
    348  <p>
    349    <math>
    350      <mn>X</mn>
    351      <semantics class="testedElement">
    352        <mo lspace="2em" rspace="0em">X</mo>
    353      </semantics>
    354      <mn>X</mn>
    355    </math>
    356  </p>
    357 
    358  <!-- Complex structure (invalid in MathML3). -->
    359  <p>
    360    <math>
    361      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    362      <mn>X</mn>
    363      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    364      <maction class="testedElement allChildrenVisible">
    365        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    366        <mo lspace="2em" rspace="0em">X</mo>
    367        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    368        <mtext class="space-like">X</mtext>
    369        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    370      </maction>
    371      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    372      <mn>X</mn>
    373      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    374    </math>
    375  </p>
    376  <p>
    377    <math>
    378      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    379      <mn>X</mn>
    380      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    381      <semantics class="testedElement allChildrenVisible">
    382        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    383        <mo lspace="2em" rspace="0em">X</mo>
    384        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    385        <mtext class="space-like">X</mtext>
    386        <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    387      </semantics>
    388      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    389      <mn>X</mn>
    390      <mn class="oof1">0</mn><mn class="oof2">1</mn><mn class="nobox">2</mn>
    391    </math>
    392  </p>
    393 </body>
    394 </html>