code wiki / (root) / nx_html_entities.nx

nx_html_entities.nx source

↩ module page · 350 lines · 34246 B

1// nx_html_entities.nx -- data-driven HTML named-entity table for the 2// sovereign browser's text renderer (X-HTML-ENT-001 follow-on: the 3// named half). 110 common-on-the-web entities, codepoints sourced 4// AUTHORITATIVELY from python html.entities.html5 (verified, not from 5// memory). Single-responsibility organ (rule 9) so the table has ONE 6// home and is KAT-testable on its own; nx_html_to_text imports it. 7// expect_exit: 0 8// license_tier: ORIGINAL 9// genealogy_id: international-research-sources/whatwg/html5-named-charrefs 10 11import "nx_syscalls.nx" 12 13// Inline byte-compare per entity: NO internal function calls (avoids the 14// 21-same-fn-call-sites nxasm rc=6 landmine), early-out on length + first byte. 15func nx_html_entity_lookup(name: *u8, nlen: i64, out_cp: *i64) -> i64 { 16 if nlen == 3 { if (name[0]&0xff)==97 { if (name[1]&0xff)==109 { if (name[2]&0xff)==112 { out_cp[0] = 0x26; return 1 }}} } // &amp; 17 if nlen == 2 { if (name[0]&0xff)==108 { if (name[1]&0xff)==116 { out_cp[0] = 0x3c; return 1 }} } // &lt; 18 if nlen == 2 { if (name[0]&0xff)==103 { if (name[1]&0xff)==116 { out_cp[0] = 0x3e; return 1 }} } // &gt; 19 if nlen == 4 { if (name[0]&0xff)==113 { if (name[1]&0xff)==117 { if (name[2]&0xff)==111 { if (name[3]&0xff)==116 { out_cp[0] = 0x22; return 1 }}}} } // &quot; 20 if nlen == 4 { if (name[0]&0xff)==97 { if (name[1]&0xff)==112 { if (name[2]&0xff)==111 { if (name[3]&0xff)==115 { out_cp[0] = 0x27; return 1 }}}} } // &apos; 21 if nlen == 4 { if (name[0]&0xff)==110 { if (name[1]&0xff)==98 { if (name[2]&0xff)==115 { if (name[3]&0xff)==112 { out_cp[0] = 0xa0; return 1 }}}} } // &nbsp; 22 if nlen == 4 { if (name[0]&0xff)==99 { if (name[1]&0xff)==111 { if (name[2]&0xff)==112 { if (name[3]&0xff)==121 { out_cp[0] = 0xa9; return 1 }}}} } // &copy; 23 if nlen == 3 { if (name[0]&0xff)==114 { if (name[1]&0xff)==101 { if (name[2]&0xff)==103 { out_cp[0] = 0xae; return 1 }}} } // &reg; 24 if nlen == 5 { if (name[0]&0xff)==116 { if (name[1]&0xff)==114 { if (name[2]&0xff)==97 { if (name[3]&0xff)==100 { if (name[4]&0xff)==101 { out_cp[0] = 0x2122; return 1 }}}}} } // &trade; 25 if nlen == 6 { if (name[0]&0xff)==104 { if (name[1]&0xff)==101 { if (name[2]&0xff)==108 { if (name[3]&0xff)==108 { if (name[4]&0xff)==105 { if (name[5]&0xff)==112 { out_cp[0] = 0x2026; return 1 }}}}}} } // &hellip; 26 if nlen == 5 { if (name[0]&0xff)==109 { if (name[1]&0xff)==100 { if (name[2]&0xff)==97 { if (name[3]&0xff)==115 { if (name[4]&0xff)==104 { out_cp[0] = 0x2014; return 1 }}}}} } // &mdash; 27 if nlen == 5 { if (name[0]&0xff)==110 { if (name[1]&0xff)==100 { if (name[2]&0xff)==97 { if (name[3]&0xff)==115 { if (name[4]&0xff)==104 { out_cp[0] = 0x2013; return 1 }}}}} } // &ndash; 28 if nlen == 5 { if (name[0]&0xff)==108 { if (name[1]&0xff)==115 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0x2018; return 1 }}}}} } // &lsquo; 29 if nlen == 5 { if (name[0]&0xff)==114 { if (name[1]&0xff)==115 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0x2019; return 1 }}}}} } // &rsquo; 30 if nlen == 5 { if (name[0]&0xff)==108 { if (name[1]&0xff)==100 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0x201c; return 1 }}}}} } // &ldquo; 31 if nlen == 5 { if (name[0]&0xff)==114 { if (name[1]&0xff)==100 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0x201d; return 1 }}}}} } // &rdquo; 32 if nlen == 5 { if (name[0]&0xff)==115 { if (name[1]&0xff)==98 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0x201a; return 1 }}}}} } // &sbquo; 33 if nlen == 5 { if (name[0]&0xff)==98 { if (name[1]&0xff)==100 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0x201e; return 1 }}}}} } // &bdquo; 34 if nlen == 6 { if (name[0]&0xff)==100 { if (name[1]&0xff)==97 { if (name[2]&0xff)==103 { if (name[3]&0xff)==103 { if (name[4]&0xff)==101 { if (name[5]&0xff)==114 { out_cp[0] = 0x2020; return 1 }}}}}} } // &dagger; 35 if nlen == 6 { if (name[0]&0xff)==68 { if (name[1]&0xff)==97 { if (name[2]&0xff)==103 { if (name[3]&0xff)==103 { if (name[4]&0xff)==101 { if (name[5]&0xff)==114 { out_cp[0] = 0x2021; return 1 }}}}}} } // &Dagger; 36 if nlen == 4 { if (name[0]&0xff)==98 { if (name[1]&0xff)==117 { if (name[2]&0xff)==108 { if (name[3]&0xff)==108 { out_cp[0] = 0x2022; return 1 }}}} } // &bull; 37 if nlen == 6 { if (name[0]&0xff)==109 { if (name[1]&0xff)==105 { if (name[2]&0xff)==100 { if (name[3]&0xff)==100 { if (name[4]&0xff)==111 { if (name[5]&0xff)==116 { out_cp[0] = 0xb7; return 1 }}}}}} } // &middot; 38 if nlen == 3 { if (name[0]&0xff)==100 { if (name[1]&0xff)==101 { if (name[2]&0xff)==103 { out_cp[0] = 0xb0; return 1 }}} } // &deg; 39 if nlen == 6 { if (name[0]&0xff)==112 { if (name[1]&0xff)==108 { if (name[2]&0xff)==117 { if (name[3]&0xff)==115 { if (name[4]&0xff)==109 { if (name[5]&0xff)==110 { out_cp[0] = 0xb1; return 1 }}}}}} } // &plusmn; 40 if nlen == 5 { if (name[0]&0xff)==116 { if (name[1]&0xff)==105 { if (name[2]&0xff)==109 { if (name[3]&0xff)==101 { if (name[4]&0xff)==115 { out_cp[0] = 0xd7; return 1 }}}}} } // &times; 41 if nlen == 6 { if (name[0]&0xff)==100 { if (name[1]&0xff)==105 { if (name[2]&0xff)==118 { if (name[3]&0xff)==105 { if (name[4]&0xff)==100 { if (name[5]&0xff)==101 { out_cp[0] = 0xf7; return 1 }}}}}} } // &divide; 42 if nlen == 6 { if (name[0]&0xff)==102 { if (name[1]&0xff)==114 { if (name[2]&0xff)==97 { if (name[3]&0xff)==99 { if (name[4]&0xff)==49 { if (name[5]&0xff)==50 { out_cp[0] = 0xbd; return 1 }}}}}} } // &frac12; 43 if nlen == 6 { if (name[0]&0xff)==102 { if (name[1]&0xff)==114 { if (name[2]&0xff)==97 { if (name[3]&0xff)==99 { if (name[4]&0xff)==49 { if (name[5]&0xff)==52 { out_cp[0] = 0xbc; return 1 }}}}}} } // &frac14; 44 if nlen == 6 { if (name[0]&0xff)==102 { if (name[1]&0xff)==114 { if (name[2]&0xff)==97 { if (name[3]&0xff)==99 { if (name[4]&0xff)==51 { if (name[5]&0xff)==52 { out_cp[0] = 0xbe; return 1 }}}}}} } // &frac34; 45 if nlen == 4 { if (name[0]&0xff)==115 { if (name[1]&0xff)==117 { if (name[2]&0xff)==112 { if (name[3]&0xff)==49 { out_cp[0] = 0xb9; return 1 }}}} } // &sup1; 46 if nlen == 4 { if (name[0]&0xff)==115 { if (name[1]&0xff)==117 { if (name[2]&0xff)==112 { if (name[3]&0xff)==50 { out_cp[0] = 0xb2; return 1 }}}} } // &sup2; 47 if nlen == 4 { if (name[0]&0xff)==115 { if (name[1]&0xff)==117 { if (name[2]&0xff)==112 { if (name[3]&0xff)==51 { out_cp[0] = 0xb3; return 1 }}}} } // &sup3; 48 if nlen == 5 { if (name[0]&0xff)==109 { if (name[1]&0xff)==105 { if (name[2]&0xff)==99 { if (name[3]&0xff)==114 { if (name[4]&0xff)==111 { out_cp[0] = 0xb5; return 1 }}}}} } // &micro; 49 if nlen == 4 { if (name[0]&0xff)==112 { if (name[1]&0xff)==97 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { out_cp[0] = 0xb6; return 1 }}}} } // &para; 50 if nlen == 4 { if (name[0]&0xff)==115 { if (name[1]&0xff)==101 { if (name[2]&0xff)==99 { if (name[3]&0xff)==116 { out_cp[0] = 0xa7; return 1 }}}} } // &sect; 51 if nlen == 5 { if (name[0]&0xff)==108 { if (name[1]&0xff)==97 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0xab; return 1 }}}}} } // &laquo; 52 if nlen == 5 { if (name[0]&0xff)==114 { if (name[1]&0xff)==97 { if (name[2]&0xff)==113 { if (name[3]&0xff)==117 { if (name[4]&0xff)==111 { out_cp[0] = 0xbb; return 1 }}}}} } // &raquo; 53 if nlen == 6 { if (name[0]&0xff)==114 { if (name[1]&0xff)==115 { if (name[2]&0xff)==97 { if (name[3]&0xff)==113 { if (name[4]&0xff)==117 { if (name[5]&0xff)==111 { out_cp[0] = 0x203a; return 1 }}}}}} } // &rsaquo; 54 if nlen == 6 { if (name[0]&0xff)==108 { if (name[1]&0xff)==115 { if (name[2]&0xff)==97 { if (name[3]&0xff)==113 { if (name[4]&0xff)==117 { if (name[5]&0xff)==111 { out_cp[0] = 0x2039; return 1 }}}}}} } // &lsaquo; 55 if nlen == 5 { if (name[0]&0xff)==105 { if (name[1]&0xff)==101 { if (name[2]&0xff)==120 { if (name[3]&0xff)==99 { if (name[4]&0xff)==108 { out_cp[0] = 0xa1; return 1 }}}}} } // &iexcl; 56 if nlen == 6 { if (name[0]&0xff)==105 { if (name[1]&0xff)==113 { if (name[2]&0xff)==117 { if (name[3]&0xff)==101 { if (name[4]&0xff)==115 { if (name[5]&0xff)==116 { out_cp[0] = 0xbf; return 1 }}}}}} } // &iquest; 57 if nlen == 4 { if (name[0]&0xff)==99 { if (name[1]&0xff)==101 { if (name[2]&0xff)==110 { if (name[3]&0xff)==116 { out_cp[0] = 0xa2; return 1 }}}} } // &cent; 58 if nlen == 5 { if (name[0]&0xff)==112 { if (name[1]&0xff)==111 { if (name[2]&0xff)==117 { if (name[3]&0xff)==110 { if (name[4]&0xff)==100 { out_cp[0] = 0xa3; return 1 }}}}} } // &pound; 59 if nlen == 6 { if (name[0]&0xff)==99 { if (name[1]&0xff)==117 { if (name[2]&0xff)==114 { if (name[3]&0xff)==114 { if (name[4]&0xff)==101 { if (name[5]&0xff)==110 { out_cp[0] = 0xa4; return 1 }}}}}} } // &curren; 60 if nlen == 3 { if (name[0]&0xff)==121 { if (name[1]&0xff)==101 { if (name[2]&0xff)==110 { out_cp[0] = 0xa5; return 1 }}} } // &yen; 61 if nlen == 4 { if (name[0]&0xff)==101 { if (name[1]&0xff)==117 { if (name[2]&0xff)==114 { if (name[3]&0xff)==111 { out_cp[0] = 0x20ac; return 1 }}}} } // &euro; 62 if nlen == 6 { if (name[0]&0xff)==98 { if (name[1]&0xff)==114 { if (name[2]&0xff)==118 { if (name[3]&0xff)==98 { if (name[4]&0xff)==97 { if (name[5]&0xff)==114 { out_cp[0] = 0xa6; return 1 }}}}}} } // &brvbar; 63 if nlen == 3 { if (name[0]&0xff)==117 { if (name[1]&0xff)==109 { if (name[2]&0xff)==108 { out_cp[0] = 0xa8; return 1 }}} } // &uml; 64 if nlen == 4 { if (name[0]&0xff)==111 { if (name[1]&0xff)==114 { if (name[2]&0xff)==100 { if (name[3]&0xff)==102 { out_cp[0] = 0xaa; return 1 }}}} } // &ordf; 65 if nlen == 4 { if (name[0]&0xff)==111 { if (name[1]&0xff)==114 { if (name[2]&0xff)==100 { if (name[3]&0xff)==109 { out_cp[0] = 0xba; return 1 }}}} } // &ordm; 66 if nlen == 3 { if (name[0]&0xff)==110 { if (name[1]&0xff)==111 { if (name[2]&0xff)==116 { out_cp[0] = 0xac; return 1 }}} } // &not; 67 if nlen == 3 { if (name[0]&0xff)==115 { if (name[1]&0xff)==104 { if (name[2]&0xff)==121 { out_cp[0] = 0xad; return 1 }}} } // &shy; 68 if nlen == 4 { if (name[0]&0xff)==109 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==114 { out_cp[0] = 0xaf; return 1 }}}} } // &macr; 69 if nlen == 5 { if (name[0]&0xff)==97 { if (name[1]&0xff)==99 { if (name[2]&0xff)==117 { if (name[3]&0xff)==116 { if (name[4]&0xff)==101 { out_cp[0] = 0xb4; return 1 }}}}} } // &acute; 70 if nlen == 5 { if (name[0]&0xff)==99 { if (name[1]&0xff)==101 { if (name[2]&0xff)==100 { if (name[3]&0xff)==105 { if (name[4]&0xff)==108 { out_cp[0] = 0xb8; return 1 }}}}} } // &cedil; 71 if nlen == 6 { if (name[0]&0xff)==97 { if (name[1]&0xff)==103 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { if (name[4]&0xff)==118 { if (name[5]&0xff)==101 { out_cp[0] = 0xe0; return 1 }}}}}} } // &agrave; 72 if nlen == 6 { if (name[0]&0xff)==97 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xe1; return 1 }}}}}} } // &aacute; 73 if nlen == 5 { if (name[0]&0xff)==97 { if (name[1]&0xff)==99 { if (name[2]&0xff)==105 { if (name[3]&0xff)==114 { if (name[4]&0xff)==99 { out_cp[0] = 0xe2; return 1 }}}}} } // &acirc; 74 if nlen == 6 { if (name[0]&0xff)==97 { if (name[1]&0xff)==116 { if (name[2]&0xff)==105 { if (name[3]&0xff)==108 { if (name[4]&0xff)==100 { if (name[5]&0xff)==101 { out_cp[0] = 0xe3; return 1 }}}}}} } // &atilde; 75 if nlen == 4 { if (name[0]&0xff)==97 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xe4; return 1 }}}} } // &auml; 76 if nlen == 5 { if (name[0]&0xff)==97 { if (name[1]&0xff)==114 { if (name[2]&0xff)==105 { if (name[3]&0xff)==110 { if (name[4]&0xff)==103 { out_cp[0] = 0xe5; return 1 }}}}} } // &aring; 77 if nlen == 5 { if (name[0]&0xff)==97 { if (name[1]&0xff)==101 { if (name[2]&0xff)==108 { if (name[3]&0xff)==105 { if (name[4]&0xff)==103 { out_cp[0] = 0xe6; return 1 }}}}} } // &aelig; 78 if nlen == 6 { if (name[0]&0xff)==99 { if (name[1]&0xff)==99 { if (name[2]&0xff)==101 { if (name[3]&0xff)==100 { if (name[4]&0xff)==105 { if (name[5]&0xff)==108 { out_cp[0] = 0xe7; return 1 }}}}}} } // &ccedil; 79 if nlen == 6 { if (name[0]&0xff)==101 { if (name[1]&0xff)==103 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { if (name[4]&0xff)==118 { if (name[5]&0xff)==101 { out_cp[0] = 0xe8; return 1 }}}}}} } // &egrave; 80 if nlen == 6 { if (name[0]&0xff)==101 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xe9; return 1 }}}}}} } // &eacute; 81 if nlen == 5 { if (name[0]&0xff)==101 { if (name[1]&0xff)==99 { if (name[2]&0xff)==105 { if (name[3]&0xff)==114 { if (name[4]&0xff)==99 { out_cp[0] = 0xea; return 1 }}}}} } // &ecirc; 82 if nlen == 4 { if (name[0]&0xff)==101 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xeb; return 1 }}}} } // &euml; 83 if nlen == 6 { if (name[0]&0xff)==105 { if (name[1]&0xff)==103 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { if (name[4]&0xff)==118 { if (name[5]&0xff)==101 { out_cp[0] = 0xec; return 1 }}}}}} } // &igrave; 84 if nlen == 6 { if (name[0]&0xff)==105 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xed; return 1 }}}}}} } // &iacute; 85 if nlen == 5 { if (name[0]&0xff)==105 { if (name[1]&0xff)==99 { if (name[2]&0xff)==105 { if (name[3]&0xff)==114 { if (name[4]&0xff)==99 { out_cp[0] = 0xee; return 1 }}}}} } // &icirc; 86 if nlen == 4 { if (name[0]&0xff)==105 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xef; return 1 }}}} } // &iuml; 87 if nlen == 6 { if (name[0]&0xff)==110 { if (name[1]&0xff)==116 { if (name[2]&0xff)==105 { if (name[3]&0xff)==108 { if (name[4]&0xff)==100 { if (name[5]&0xff)==101 { out_cp[0] = 0xf1; return 1 }}}}}} } // &ntilde; 88 if nlen == 6 { if (name[0]&0xff)==111 { if (name[1]&0xff)==103 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { if (name[4]&0xff)==118 { if (name[5]&0xff)==101 { out_cp[0] = 0xf2; return 1 }}}}}} } // &ograve; 89 if nlen == 6 { if (name[0]&0xff)==111 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xf3; return 1 }}}}}} } // &oacute; 90 if nlen == 5 { if (name[0]&0xff)==111 { if (name[1]&0xff)==99 { if (name[2]&0xff)==105 { if (name[3]&0xff)==114 { if (name[4]&0xff)==99 { out_cp[0] = 0xf4; return 1 }}}}} } // &ocirc; 91 if nlen == 6 { if (name[0]&0xff)==111 { if (name[1]&0xff)==116 { if (name[2]&0xff)==105 { if (name[3]&0xff)==108 { if (name[4]&0xff)==100 { if (name[5]&0xff)==101 { out_cp[0] = 0xf5; return 1 }}}}}} } // &otilde; 92 if nlen == 4 { if (name[0]&0xff)==111 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xf6; return 1 }}}} } // &ouml; 93 if nlen == 6 { if (name[0]&0xff)==111 { if (name[1]&0xff)==115 { if (name[2]&0xff)==108 { if (name[3]&0xff)==97 { if (name[4]&0xff)==115 { if (name[5]&0xff)==104 { out_cp[0] = 0xf8; return 1 }}}}}} } // &oslash; 94 if nlen == 6 { if (name[0]&0xff)==117 { if (name[1]&0xff)==103 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { if (name[4]&0xff)==118 { if (name[5]&0xff)==101 { out_cp[0] = 0xf9; return 1 }}}}}} } // &ugrave; 95 if nlen == 6 { if (name[0]&0xff)==117 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xfa; return 1 }}}}}} } // &uacute; 96 if nlen == 5 { if (name[0]&0xff)==117 { if (name[1]&0xff)==99 { if (name[2]&0xff)==105 { if (name[3]&0xff)==114 { if (name[4]&0xff)==99 { out_cp[0] = 0xfb; return 1 }}}}} } // &ucirc; 97 if nlen == 4 { if (name[0]&0xff)==117 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xfc; return 1 }}}} } // &uuml; 98 if nlen == 6 { if (name[0]&0xff)==121 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xfd; return 1 }}}}}} } // &yacute; 99 if nlen == 4 { if (name[0]&0xff)==121 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xff; return 1 }}}} } // &yuml; 100 if nlen == 5 { if (name[0]&0xff)==115 { if (name[1]&0xff)==122 { if (name[2]&0xff)==108 { if (name[3]&0xff)==105 { if (name[4]&0xff)==103 { out_cp[0] = 0xdf; return 1 }}}}} } // &szlig; 101 if nlen == 6 { if (name[0]&0xff)==65 { if (name[1]&0xff)==103 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { if (name[4]&0xff)==118 { if (name[5]&0xff)==101 { out_cp[0] = 0xc0; return 1 }}}}}} } // &Agrave; 102 if nlen == 6 { if (name[0]&0xff)==65 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xc1; return 1 }}}}}} } // &Aacute; 103 if nlen == 5 { if (name[0]&0xff)==65 { if (name[1]&0xff)==99 { if (name[2]&0xff)==105 { if (name[3]&0xff)==114 { if (name[4]&0xff)==99 { out_cp[0] = 0xc2; return 1 }}}}} } // &Acirc; 104 if nlen == 4 { if (name[0]&0xff)==65 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xc4; return 1 }}}} } // &Auml; 105 if nlen == 5 { if (name[0]&0xff)==65 { if (name[1]&0xff)==114 { if (name[2]&0xff)==105 { if (name[3]&0xff)==110 { if (name[4]&0xff)==103 { out_cp[0] = 0xc5; return 1 }}}}} } // &Aring; 106 if nlen == 5 { if (name[0]&0xff)==65 { if (name[1]&0xff)==69 { if (name[2]&0xff)==108 { if (name[3]&0xff)==105 { if (name[4]&0xff)==103 { out_cp[0] = 0xc6; return 1 }}}}} } // &AElig; 107 if nlen == 6 { if (name[0]&0xff)==67 { if (name[1]&0xff)==99 { if (name[2]&0xff)==101 { if (name[3]&0xff)==100 { if (name[4]&0xff)==105 { if (name[5]&0xff)==108 { out_cp[0] = 0xc7; return 1 }}}}}} } // &Ccedil; 108 if nlen == 6 { if (name[0]&0xff)==69 { if (name[1]&0xff)==103 { if (name[2]&0xff)==114 { if (name[3]&0xff)==97 { if (name[4]&0xff)==118 { if (name[5]&0xff)==101 { out_cp[0] = 0xc8; return 1 }}}}}} } // &Egrave; 109 if nlen == 6 { if (name[0]&0xff)==69 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xc9; return 1 }}}}}} } // &Eacute; 110 if nlen == 5 { if (name[0]&0xff)==69 { if (name[1]&0xff)==99 { if (name[2]&0xff)==105 { if (name[3]&0xff)==114 { if (name[4]&0xff)==99 { out_cp[0] = 0xca; return 1 }}}}} } // &Ecirc; 111 if nlen == 4 { if (name[0]&0xff)==69 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xcb; return 1 }}}} } // &Euml; 112 if nlen == 6 { if (name[0]&0xff)==73 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xcd; return 1 }}}}}} } // &Iacute; 113 if nlen == 6 { if (name[0]&0xff)==78 { if (name[1]&0xff)==116 { if (name[2]&0xff)==105 { if (name[3]&0xff)==108 { if (name[4]&0xff)==100 { if (name[5]&0xff)==101 { out_cp[0] = 0xd1; return 1 }}}}}} } // &Ntilde; 114 if nlen == 6 { if (name[0]&0xff)==79 { if (name[1]&0xff)==97 { if (name[2]&0xff)==99 { if (name[3]&0xff)==117 { if (name[4]&0xff)==116 { if (name[5]&0xff)==101 { out_cp[0] = 0xd3; return 1 }}}}}} } // &Oacute; 115 if nlen == 4 { if (name[0]&0xff)==79 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xd6; return 1 }}}} } // &Ouml; 116 if nlen == 4 { if (name[0]&0xff)==85 { if (name[1]&0xff)==117 { if (name[2]&0xff)==109 { if (name[3]&0xff)==108 { out_cp[0] = 0xdc; return 1 }}}} } // &Uuml; 117 if nlen == 4 { if (name[0]&0xff)==108 { if (name[1]&0xff)==97 { if (name[2]&0xff)==114 { if (name[3]&0xff)==114 { out_cp[0] = 0x2190; return 1 }}}} } // &larr; 118 if nlen == 4 { if (name[0]&0xff)==114 { if (name[1]&0xff)==97 { if (name[2]&0xff)==114 { if (name[3]&0xff)==114 { out_cp[0] = 0x2192; return 1 }}}} } // &rarr; 119 if nlen == 4 { if (name[0]&0xff)==117 { if (name[1]&0xff)==97 { if (name[2]&0xff)==114 { if (name[3]&0xff)==114 { out_cp[0] = 0x2191; return 1 }}}} } // &uarr; 120 if nlen == 4 { if (name[0]&0xff)==100 { if (name[1]&0xff)==97 { if (name[2]&0xff)==114 { if (name[3]&0xff)==114 { out_cp[0] = 0x2193; return 1 }}}} } // &darr; 121 if nlen == 4 { if (name[0]&0xff)==104 { if (name[1]&0xff)==97 { if (name[2]&0xff)==114 { if (name[3]&0xff)==114 { out_cp[0] = 0x2194; return 1 }}}} } // &harr; 122 if nlen == 2 { if (name[0]&0xff)==108 { if (name[1]&0xff)==101 { out_cp[0] = 0x2264; return 1 }} } // &le; 123 if nlen == 2 { if (name[0]&0xff)==103 { if (name[1]&0xff)==101 { out_cp[0] = 0x2265; return 1 }} } // &ge; 124 if nlen == 2 { if (name[0]&0xff)==110 { if (name[1]&0xff)==101 { out_cp[0] = 0x2260; return 1 }} } // &ne; 125 if nlen == 5 { if (name[0]&0xff)==101 { if (name[1]&0xff)==113 { if (name[2]&0xff)==117 { if (name[3]&0xff)==105 { if (name[4]&0xff)==118 { out_cp[0] = 0x2261; return 1 }}}}} } // &equiv; 126 if nlen == 5 { if (name[0]&0xff)==105 { if (name[1]&0xff)==110 { if (name[2]&0xff)==102 { if (name[3]&0xff)==105 { if (name[4]&0xff)==110 { out_cp[0] = 0x221e; return 1 }}}}} } // &infin; 127 if nlen == 5 { if (name[0]&0xff)==97 { if (name[1]&0xff)==115 { if (name[2]&0xff)==121 { if (name[3]&0xff)==109 { if (name[4]&0xff)==112 { out_cp[0] = 0x2248; return 1 }}}}} } // &asymp; 128 return 0 129} 130 131// UTF-8 encode codepoint `cp` into out[o..], bounded by cap; returns the new write offset. 132func _ent_utf8(out: *u8, o0: i64, cap: i64, cp: i64) -> i64 { 133 var o: i64 = o0 134 if cp < 0x80 { 135 if o < cap { out[o] = cp as u8; o = o + 1 } 136 } else { 137 if cp < 0x800 { 138 if o + 1 < cap { out[o] = (0xC0 | (cp >> 6)) as u8; out[o+1] = (0x80 | (cp & 0x3F)) as u8; o = o + 2 } 139 } else { 140 if cp < 0x10000 { 141 if o + 2 < cap { out[o] = (0xE0 | (cp >> 12)) as u8; out[o+1] = (0x80 | ((cp >> 6) & 0x3F)) as u8; out[o+2] = (0x80 | (cp & 0x3F)) as u8; o = o + 3 } 142 } else { 143 if o + 3 < cap { out[o] = (0xF0 | (cp >> 18)) as u8; out[o+1] = (0x80 | ((cp >> 12) & 0x3F)) as u8; out[o+2] = (0x80 | ((cp >> 6) & 0x3F)) as u8; out[o+3] = (0x80 | (cp & 0x3F)) as u8; o = o + 4 } 144 } 145 } 146 } 147 return o 148} 149 150// Fold a Unicode codepoint to a single rendering ASCII byte for the ASCII-only 5x7 font: ASCII passes 151// through; accented Latin (Latin-1 Supplement + common Latin Extended-A/B for cs/pl/tr/ro/sk/hu/...) -> 152// its BASE letter (é->e, ñ->n, ç->c, š->s, ğ->g, ț->t, ...) so language names + accented words are 153// READABLE instead of blank gaps; any other codepoint (Cyrillic/CJK/Arabic) -> 0 = skipped. Returns 154// the ASCII byte, or 0 to emit nothing. 155func _fold_cp(cp: i64) -> i64 { 156 if cp == 0 { return 0 } 157 if cp < 128 { return cp } 158 // Latin-1 Supplement 159 if cp >= 0xC0 { if cp <= 0xC6 { return 65 } } // A 160 if cp == 0xC7 { return 67 } // C 161 if cp >= 0xC8 { if cp <= 0xCB { return 69 } } // E 162 if cp >= 0xCC { if cp <= 0xCF { return 73 } } // I 163 if cp == 0xD0 { return 68 } // D 164 if cp == 0xD1 { return 78 } // N 165 if cp >= 0xD2 { if cp <= 0xD6 { return 79 } } // O 166 if cp == 0xD8 { return 79 } // O 167 if cp >= 0xD9 { if cp <= 0xDC { return 85 } } // U 168 if cp == 0xDD { return 89 } // Y 169 if cp == 0xDF { return 115 } // ß -> s 170 if cp >= 0xE0 { if cp <= 0xE6 { return 97 } } // a 171 if cp == 0xE7 { return 99 } // c 172 if cp >= 0xE8 { if cp <= 0xEB { return 101 } } // e 173 if cp >= 0xEC { if cp <= 0xEF { return 105 } } // i 174 if cp == 0xF0 { return 100 } // d 175 if cp == 0xF1 { return 110 } // n 176 if cp >= 0xF2 { if cp <= 0xF6 { return 111 } } // o 177 if cp == 0xF8 { return 111 } // o 178 if cp >= 0xF9 { if cp <= 0xFC { return 117 } } // u 179 if cp == 0xFD { return 121 } // y 180 if cp == 0xFF { return 121 } // y 181 // Latin Extended-A/B common (upper even / lower odd in most pairs); base letter. 182 if cp == 0x100 { return 65 } if cp == 0x101 { return 97 } // A a (macron) 183 if cp == 0x102 { return 65 } if cp == 0x103 { return 97 } // A a (breve) 184 if cp == 0x104 { return 65 } if cp == 0x105 { return 97 } // A a (ogonek) 185 if cp == 0x106 { return 67 } if cp == 0x107 { return 99 } // C c (acute) 186 if cp == 0x10C { return 67 } if cp == 0x10D { return 99 } // C c (caron) 187 if cp == 0x10E { return 68 } if cp == 0x10F { return 100 } // D d 188 if cp == 0x110 { return 68 } if cp == 0x111 { return 100 } // D d (stroke) 189 if cp == 0x118 { return 69 } if cp == 0x119 { return 101 } // E e (ogonek) 190 if cp == 0x11A { return 69 } if cp == 0x11B { return 101 } // E e (caron) 191 if cp == 0x11E { return 71 } if cp == 0x11F { return 103 } // G g (breve) 192 if cp == 0x130 { return 73 } if cp == 0x131 { return 105 } // I i (dot/dotless) 193 if cp == 0x139 { return 76 } if cp == 0x13A { return 108 } // L l 194 if cp == 0x141 { return 76 } if cp == 0x142 { return 108 } // L l (stroke) 195 if cp == 0x143 { return 78 } if cp == 0x144 { return 110 } // N n (acute) 196 if cp == 0x147 { return 78 } if cp == 0x148 { return 110 } // N n (caron) 197 if cp == 0x150 { return 79 } if cp == 0x151 { return 111 } // O o (double acute) 198 if cp == 0x152 { return 79 } if cp == 0x153 { return 111 } // OE oe -> O o 199 if cp == 0x158 { return 82 } if cp == 0x159 { return 114 } // R r (caron) 200 if cp == 0x15A { return 83 } if cp == 0x15B { return 115 } // S s (acute) 201 if cp == 0x15E { return 83 } if cp == 0x15F { return 115 } // S s (cedilla) 202 if cp == 0x160 { return 83 } if cp == 0x161 { return 115 } // S s (caron) 203 if cp == 0x162 { return 84 } if cp == 0x163 { return 116 } // T t (cedilla) 204 if cp == 0x164 { return 84 } if cp == 0x165 { return 116 } // T t (caron) 205 if cp == 0x16E { return 85 } if cp == 0x16F { return 117 } // U u (ring) 206 if cp == 0x170 { return 85 } if cp == 0x171 { return 117 } // U u (double acute) 207 if cp == 0x178 { return 89 } // Y (diaeresis) 208 if cp == 0x179 { return 90 } if cp == 0x17A { return 122 } // Z z (acute) 209 if cp == 0x17B { return 90 } if cp == 0x17C { return 122 } // Z z (dot) 210 if cp == 0x17D { return 90 } if cp == 0x17E { return 122 } // Z z (caron) 211 if cp == 0x218 { return 83 } if cp == 0x219 { return 115 } // S s (comma) Romanian 212 if cp == 0x21A { return 84 } if cp == 0x21B { return 116 } // T t (comma) Romanian 213 // Typographic punctuation + common symbols -> single ASCII fallback so &mdash; &middot; &rsquo; 214 // &rsaquo; &hellip; arrows etc. render as SOMETHING readable in the 5x7 ASCII font instead of 215 // vanishing to blank gaps (the sub-0xC0 and non-Latin punctuation all fell through to skip). 216 if cp == 0xA0 { return 32 } // nbsp -> space 217 if cp == 0xA1 { return 33 } // inverted ! 218 if cp == 0xAB { return 60 } // << -> < 219 if cp == 0xB7 { return 42 } // middot -> * 220 if cp == 0xBB { return 62 } // >> -> > 221 if cp == 0xBF { return 63 } // inverted ? 222 if cp == 0xD7 { return 120 } // times -> x 223 if cp == 0xF7 { return 47 } // divide -> / 224 if cp == 0x2013 { return 45 } // en-dash -> - 225 if cp == 0x2014 { return 45 } // em-dash -> - 226 if cp == 0x2018 { return 39 } // ' -> ' 227 if cp == 0x2019 { return 39 } // ' -> ' 228 if cp == 0x201A { return 44 } // low quote -> , 229 if cp == 0x201C { return 34 } // " -> " 230 if cp == 0x201D { return 34 } // " -> " 231 if cp == 0x2022 { return 42 } // bullet -> * 232 if cp == 0x2026 { return 46 } // ellipsis -> . 233 if cp == 0x2039 { return 60 } // single << -> < 234 if cp == 0x203A { return 62 } // single >> -> > 235 if cp == 0x2190 { return 60 } // left arrow -> < 236 if cp == 0x2191 { return 94 } // up arrow -> ^ 237 if cp == 0x2192 { return 62 } // right arrow -> > 238 if cp == 0x2193 { return 118 } // down arrow -> v 239 if cp == 0x2194 { return 45 } // left-right arrow -> - 240 if cp == 0x2260 { return 33 } // not-equal -> ! 241 if cp == 0x2264 { return 60 } // <= -> < 242 if cp == 0x2265 { return 62 } // >= -> > 243 return 0 // non-Latin -> skip 244} 245 246// UTF-8 decode src[off..off+len) and fold each codepoint to a render-ready ASCII byte (see _fold_cp). 247// Output is ASCII (the 5x7 font's domain); non-Latin runs collapse to nothing instead of byte-gaps. 248func nx_fold_ascii(src: *u8, off: i64, len: i64, out: *u8, out_cap: i64) -> i64 { 249 var i: i64 = 0 250 var o: i64 = 0 251 while i < len { 252 let c: i64 = src[off + i] & 0xff 253 var cp: i64 = c 254 var adv: i64 = 1 255 if c >= 0x80 { 256 if c < 0xE0 { 257 if i + 1 < len { cp = ((c & 0x1F) << 6) | (src[off+i+1] & 0x3F); adv = 2 } 258 } else { 259 if c < 0xF0 { 260 if i + 2 < len { cp = ((c & 0x0F) << 12) | ((src[off+i+1] & 0x3F) << 6) | (src[off+i+2] & 0x3F); adv = 3 } 261 } else { 262 if i + 3 < len { cp = ((c & 0x07) << 18) | ((src[off+i+1] & 0x3F) << 12) | ((src[off+i+2] & 0x3F) << 6) | (src[off+i+3] & 0x3F); adv = 4 } 263 } 264 } 265 } 266 let a: i64 = _fold_cp(cp) 267 if a > 0 { if o < out_cap { out[o] = a as u8; o = o + 1 } } 268 i = i + adv 269 } 270 return o 271} 272 273// Decode HTML character references in src[off..off+len) into out (out_cap bytes); returns decoded 274// byte length. Named refs via nx_html_entity_lookup, numeric &#dec; / &#xHEX;, output as UTF-8. 275// Unknown name / no terminating ';' within bound -> the '&' passes through LITERALLY (scan resumes 276// after it, so "&bogus;" and a bare "&" survive un-eaten). out_cap should be >= len (output <= input 277// since every entity is >=4 source bytes and encodes to <=4 UTF-8 bytes). The reusable render-side 278// twin of the engine's je_decode_entities (DRY across the text-render + JS-DOM paths). 279func nx_html_decode_entities(src: *u8, off: i64, len: i64, out: *u8, out_cap: i64) -> i64 { 280 let cpp: *i64 = (sys_mmap(8)) as *i64 281 var i: i64 = 0 282 var o: i64 = 0 283 while i < len { 284 let c: i64 = src[off + i] & 0xff 285 if c != 38 { 286 if o < out_cap { out[o] = c as u8; o = o + 1 } 287 i = i + 1 288 } else { 289 var semi: i64 = 0 - 1 290 var j: i64 = i + 1 291 let maxj: i64 = i + 12 292 var look: i64 = 1 293 while look == 1 { 294 if j >= len { look = 0 } 295 else { 296 if j > maxj { look = 0 } 297 else { 298 let cj: i64 = src[off + j] & 0xff 299 if cj == 59 { semi = j; look = 0 } 300 else { if cj == 38 { look = 0 } else { j = j + 1 } } 301 } 302 } 303 } 304 if semi < 0 { 305 if o < out_cap { out[o] = 38 as u8; o = o + 1 } 306 i = i + 1 307 } else { 308 let body_off: i64 = off + i + 1 309 let body_len: i64 = semi - (i + 1) 310 var cp: i64 = 0 - 1 311 if body_len >= 1 { 312 if (src[body_off] & 0xff) == 35 { 313 if body_len >= 2 { 314 let c1: i64 = src[body_off + 1] & 0xff 315 var base: i64 = 10 316 var ks: i64 = 1 317 if c1 == 120 { base = 16; ks = 2 } 318 if c1 == 88 { base = 16; ks = 2 } 319 var val: i64 = 0 320 var k: i64 = ks 321 var good: i64 = 1 322 while k < body_len { 323 let d: i64 = src[body_off + k] & 0xff 324 var dv: i64 = 0 - 1 325 if d >= 48 { if d <= 57 { dv = d - 48 } } 326 if base == 16 { 327 if d >= 97 { if d <= 102 { dv = d - 87 } } 328 if d >= 65 { if d <= 70 { dv = d - 55 } } 329 } 330 if dv < 0 { good = 0; k = body_len } 331 else { val = val * base + dv; k = k + 1 } 332 } 333 if good == 1 { if body_len > ks { cp = val } } 334 } 335 } else { 336 if nx_html_entity_lookup(((src as i64) + body_off) as *u8, body_len, cpp) == 1 { cp = cpp[0] } 337 } 338 } 339 if cp >= 0 { 340 o = _ent_utf8(out, o, out_cap, cp) 341 i = semi + 1 342 } else { 343 if o < out_cap { out[o] = 38 as u8; o = o + 1 } 344 i = i + 1 345 } 346 } 347 } 348 } 349 return o 350}