tor-browser

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

anb-parsing.html (3336B)


      1 <!doctype html>
      2 <title>An+B Parsing</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <style>
      6 
      7 foo { color: blue; }
      8 
      9 </style>
     10 
     11 <meta name="author" title="Tab Atkins-Bittner">
     12 <link rel=help href="https://drafts.csswg.org/css-syntax/#the-anb-type">
     13 
     14 <script>
     15 
     16 function roundtripANB(str) {
     17    const rule = document.styleSheets[0].cssRules[0];
     18    rule.selectorText = "foo";
     19    rule.selectorText = `:nth-child(${str})`;
     20    // Check for parse error.
     21    if(rule.selectorText == "foo") return "parse error";
     22    return rule.selectorText.slice(11, -1);
     23 }
     24 function testANB(input, expected) {
     25    test(()=>{
     26        assert_equals(roundtripANB(input), expected);
     27    }, `"${input}" becomes "${expected}"`);
     28 }
     29 
     30 /* Just going down all the syntax clauses one-by-one */
     31 //  odd | even |
     32 testANB("odd", "2n+1");
     33 testANB("even", "2n");
     34 //  <integer> |
     35 testANB("1", "1");
     36 testANB("+1", "1");
     37 testANB("-1", "-1");
     38 //
     39 //  <n-dimension> |
     40 testANB("5n", "5n");
     41 testANB("5N", "5n");
     42 //  '+'?† n |
     43 testANB("+n", "n");
     44 testANB("n", "n");
     45 testANB("N", "n");
     46 testANB("+ n", "parse error");
     47 //  -n |
     48 testANB("-n", "-n");
     49 testANB("-N", "-n");
     50 //
     51 //  <ndashdigit-dimension> |
     52 testANB("5n-5", "5n-5");
     53 //  '+'?† <ndashdigit-ident> |
     54 testANB("+n-5", "n-5");
     55 testANB("n-5", "n-5");
     56 testANB("+ n-5", "parse error");
     57 //  <dashndashdigit-ident> |
     58 testANB("-n-5", "-n-5");
     59 //
     60 //  <n-dimension> <signed-integer> |
     61 testANB("5n +5", "5n+5");
     62 testANB("5n -5", "5n-5");
     63 //  '+'?† n <signed-integer> |
     64 testANB("+n +5", "n+5");
     65 testANB("n +5", "n+5");
     66 testANB("+n -5", "n-5");
     67 testANB("+ n +5", "parse error");
     68 testANB("n 5", "parse error");
     69 //  -n <signed-integer> |
     70 testANB("-n +5", "-n+5");
     71 testANB("-n -5", "-n-5");
     72 testANB("-n 5", "parse error");
     73 //
     74 //  <ndash-dimension> <signless-integer> |
     75 testANB("5n- 5", "5n-5");
     76 testANB("5n- -5", "parse error");
     77 testANB("5n- +5", "parse error");
     78 testANB("-5n- 5", "-5n-5");
     79 //  '+'?† n- <signless-integer> |
     80 testANB("+n- 5", "n-5");
     81 testANB("n- 5", "n-5");
     82 testANB("+ n- 5", "parse error");
     83 testANB("n- +5", "parse error");
     84 testANB("n- -5", "parse error");
     85 //  -n- <signless-integer> |
     86 testANB("-n- 5", "-n-5");
     87 testANB("-n- +5", "parse error");
     88 testANB("-n- -5", "parse error");
     89 //
     90 //  <n-dimension> ['+' | '-'] <signless-integer>
     91 testANB("5n + 5", "5n+5");
     92 testANB("5n - 5", "5n-5");
     93 testANB("5n + +5", "parse error");
     94 testANB("5n + -5", "parse error");
     95 testANB("5n - +5", "parse error");
     96 testANB("5n - -5", "parse error");
     97 //  '+'?† n ['+' | '-'] <signless-integer> |
     98 testANB("+n + 5", "n+5");
     99 testANB("n + 5", "n+5");
    100 testANB("+ n + 5", "parse error");
    101 testANB("+n - 5", "n-5");
    102 testANB("+n + +5", "parse error");
    103 testANB("+n + -5", "parse error");
    104 testANB("+n - +5", "parse error");
    105 testANB("+n - -5", "parse error");
    106 //  -n ['+' | '-'] <signless-integer>
    107 testANB("-n + 5", "-n+5");
    108 testANB("-n - 5", "-n-5");
    109 testANB("-n + +5", "parse error");
    110 testANB("-n + -5", "parse error");
    111 testANB("-n - +5", "parse error");
    112 testANB("-n - -5", "parse error");
    113 
    114 /* Swapped ordering is invalid */
    115 testANB("1 - n", "parse error");
    116 testANB("0 - n", "parse error");
    117 testANB("-1 + n", "parse error");
    118 
    119 /* Odd space usage */
    120 testANB("2 n + 2", "parse error");
    121 testANB("- 2n", "parse error");
    122 testANB("+ 2n", "parse error");
    123 testANB("+2 n", "parse error");
    124 
    125 </script>