^^^^^^xxxxxx⇒hextochar(xxxxxx)- Remark:
xxxxxxis not limited, but values ≥0x110100will cause trouble. - 0 to
0x10ffff: characters in the normal Unicode range. 0x110000to0x1100ff: special characters that are shown as bytes (last 8 bits), they are not displayed in UTF-8.
- Remark:
^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)- Remark:
xxxxxxis not limited, but values ≥0x110100will cause trouble. - 0 to
0x10ffff: characters in the normal Unicode range. 0x110000to0x1100ff: special characters that are shown as bytes (last 8 bits), they are not displayed in UTF-8.
- Remark:
^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)- Remark:
xxxxxxis not limited, but values ≥0x110100will cause trouble. - 0 to
0x10ffff: characters in the normal Unicode range. 0x110000to0x1100ff: special characters that are shown as bytes (last 8 bits), they are not displayed in UTF-8.
- Remark:
^^^^xxxx⇒hextochar(xxxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)^^^^^^xxxxxx⇒hextochar(xxxxxx)- Remark:
xxxxxxis not limited, but values ≥0x110100will cause trouble. - 0 to
0x10ffff: characters in the normal Unicode range. 0x110000to0x1100ff: special characters that are shown as bytes (last 8 bits), they are not displayed in UTF-8.
- Remark:
^^^^^xxxxx⇒hextochar(xxxxx)^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^^^xxxx⇒hextochar(xxxx)^^xx⇒hextochar(xx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)
only ifxxxxxx≤0x10ffff.^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^^xxx⇒hextochar(xxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^^xxx⇒hextochar(xxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)- Remark:
xxxxxxis not limited, but values ≥0x110100will cause trouble. - 0 to
0x10ffff: characters in the normal Unicode range. 0x110000to0x1100ff: special characters that are shown as bytes (last 8 bits), they are not displayed in UTF-8.
- Remark:
^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
^^^^^^xxxxxx⇒hextochar(xxxxxx)
only ifxxxxxx≤0x10ffff.^^^^^xxxxx⇒hextochar(xxxxx)^^^^xxxx⇒hextochar(xxxx)^^^xxx⇒hextochar(xxx)^^xx⇒hextochar(xx)^^c⇒ ifcharcode(c) < 64 thennumtochar(c+64) elsenumtochar(c-64)
Characters ≤ U+FFFF are shown correctly, beyond the characters affected are the characters beyond. This can be used for debugging the string pool ⌣:
\catcode`\{=1 \catcode`\}=2 \catcode`\#=6 \catcode`\^=7 \catcode9=10 \def\msg#{\immediate\write16} % #1: string index % #2: string value \def\StringPrintEntry#1#2{% \msg{[#1: #2]}% } % #1: string index % #2: messge \def\StringError#1#2{% \msg{! [#1] #2}% } \def\StringPrintCount#1{% \msg{==> #1 strings available.}% } % #1: start index (zero based, including) % #2: number of entries \def\StringList#1#2{% \begingroup \countdef\i=11 % string index \countdef\m=12 % limit for string index \countdef\u=13 % char index \chardef\1=1 % \i=#1\relax \m=#2\relax \advance\m\i \u=\i \advance\u "10000\relax \StringProcess \endgroup } \def\StringProcess{ \ifnum\i<\m \ifnum\u<"110000 % \lccode`0=\u \lowercase{% \edef\x{% {\the\i}% {\expandafter\StringStripPrefix\meaning 0}% }% }% \expandafter\StringProcessEntry\x \advance\i\1 \advance\u\1 \else \let\StringProcess\relax \expandafter\StringError\expandafter {\the\i}% {Index is too large.}% \fi \else \let\StringProcess\relax \fi \StringProcess } \def\StringProcessEntry#1#2{% \def\s{#2}% \ifx\s\StringInvalid \ifnum\i=5 % magic \StringPrintEntry{#1}{#2}% \else \let\StringProcess\relax \StringError{#1}{End of strings reached.}% \fi \else \StringPrintEntry{#1}{#2}% \fi } \def\StringStripPrefix#1 #2 {} \def\StringInvalid{???} \def\StringCount{% \begingroup \countdef\c=14 % \c=0 % \def\StringPrintEntry##1##2{% \advance\c\1 \xdef\StringResult{\the\c}% }% \def\StringError##1##2{}% \StringList{0}{"10FFFF} \endgroup \StringPrintCount{\StringResult}% } \StringList{0}{40} \StringCount \csname @@end\endcsname\end The result:
This is XeTeX, Version 3.1415926-2.4-0.9998 (MiKTeX 2.9) (INITEX) (C:\Users\one\test\test-xetex-strings.tex [0: .4] [1: .9998] [2: buffer size] [3: pool size] [4: number of strings] [5: ???] [6: m2d5c2l5x2v5i] [7: End of file on the terminal!] [8: ! ] [9: (That makes 100 errors; please try again.)] [10: ? ] [11: Type <return> to proceed, S to scroll future error messages,] [12: R to run without stopping, Q to run quietly,] [13: I to insert something, ] [14: E to edit your file,] [15: 1 or ... or 9 to ignore the next 1 to 9 tokens of input,] [16: H for help, X to quit.] [17: OK, entering ] [18: batchmode] [19: nonstopmode] [20: scrollmode] [21: ...] [22: insert>] [23: I have just deleted some text, as you asked.] [24: You can now delete more, or insert, or whatever.] [25: Sorry, I don't know how to help in this situation.] [26: Maybe you should try asking a human?] [27: Sorry, I already gave what help I could...] [28: An error might have occurred before I noticed any problems.] [29: ``If all else fails, read the instructions.''] [30: (] [31: Emergency stop] [32: TeX capacity exceeded, sorry [] [33: If you really absolutely need more capacity,] [34: you can ask a wizard to enlarge me.] [35: This can't happen (] [36: I'm broken. Please show this to someone who can fix can fix] [37: I can't go on meeting you like this] [38: One of your faux pas seems to have wounded me deeply...] [39: in fact, I'm barely conscious. Please fix it and try again.] ==> 1381 strings available. ) No pages of output. Transcript written on test-xetex-strings.log. Characters ≤ U+FFFF are shown correctly, beyond the characters affected are the characters beyond. This can be used for debugging the string pool ⌣:
\catcode`\{=1 \catcode`\}=2 \catcode`\#=6 \catcode`\^=7 \catcode9=10 \def\msg#{\immediate\write16} % #1: string index % #2: string value \def\StringPrintEntry#1#2{% \msg{[#1: #2]}% } % #1: string index % #2: messge \def\StringError#1#2{% \msg{! [#1] #2}% } \def\StringPrintCount#1{% \msg{==> #1 strings available.}% } % #1: start index (zero based, including) % #2: number of entries \def\StringList#1#2{% \begingroup \countdef\i=11 % string index \countdef\m=12 % limit for string index \countdef\u=13 % char index \chardef\1=1 % \i=#1\relax \m=#2\relax \advance\m\i \u=\i \advance\u "10000\relax \StringProcess \endgroup } \def\StringProcess{ \ifnum\i<\m \ifnum\u<"110000 % \lccode`0=\u \lowercase{% \edef\x{% {\the\i}% {\expandafter\StringStripPrefix\meaning 0}% }% }% \expandafter\StringProcessEntry\x \advance\i\1 \advance\u\1 \else \let\StringProcess\relax \expandafter\StringError\expandafter {\the\i}% {Index is too large.}% \fi \else \let\StringProcess\relax \fi \StringProcess } \def\StringProcessEntry#1#2{% \def\s{#2}% \ifx\s\StringInvalid \ifnum\i=5 % magic \StringPrintEntry{#1}{#2}% \else \let\StringProcess\relax \StringError{#1}{End of strings reached.}% \fi \else \StringPrintEntry{#1}{#2}% \fi } \def\StringStripPrefix#1 #2 {} \def\StringInvalid{???} \def\StringCount{% \begingroup \countdef\c=14 % \c=0 % \def\StringPrintEntry##1##2{% \advance\c\1 \xdef\StringResult{\the\c}% }% \def\StringError##1##2{}% \StringList{0}{"10FFFF} \endgroup \StringPrintCount{\StringResult}% } \StringList{0}{40} \StringCount \csname @@end\endcsname\end The result:
This is XeTeX, Version 3.1415926-2.4-0.9998 (MiKTeX 2.9) (INITEX) (C:\Users\one\test\test-xetex-strings.tex [0: .4] [1: .9998] [2: buffer size] [3: pool size] [4: number of strings] [5: ???] [6: m2d5c2l5x2v5i] [7: End of file on the terminal!] [8: ! ] [9: (That makes 100 errors; please try again.)] [10: ? ] [11: Type <return> to proceed, S to scroll future error messages,] [12: R to run without stopping, Q to run quietly,] [13: I to insert something, ] [14: E to edit your file,] [15: 1 or ... or 9 to ignore the next 1 to 9 tokens of input,] [16: H for help, X to quit.] [17: OK, entering ] [18: batchmode] [19: nonstopmode] [20: scrollmode] [21: ...] [22: insert>] [23: I have just deleted some text, as you asked.] [24: You can now delete more, or insert, or whatever.] [25: Sorry, I don't know how to help in this situation.] [26: Maybe you should try asking a human?] [27: Sorry, I already gave what help I could...] [28: An error might have occurred before I noticed any problems.] [29: ``If all else fails, read the instructions.''] [30: (] [31: Emergency stop] [32: TeX capacity exceeded, sorry [] [33: If you really absolutely need more capacity,] [34: you can ask a wizard to enlarge me.] [35: This can't happen (] [36: I'm broken. Please show this to someone who can fix can fix] [37: I can't go on meeting you like this] [38: One of your faux pas seems to have wounded me deeply...] [39: in fact, I'm barely conscious. Please fix it and try again.] ==> 1381 strings available. ) No pages of output. Transcript written on test-xetex-strings.log.