%D \module %D [ file=spec-tst, %D version=2002.12.08, %D title=\CONTEXT\ \PDF\ Macros, %D subtitle=Special Test Macro %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] %C %C This module is part of the \CONTEXT\ macro||package and is %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. \ifcase \pdfoutput \endinput \fi \unprotect %D The conversions comes down to (for the sake fo speed the %D implementation combines steps): %D %D \startitemize %D \item we expand the \UTF\ sequences into \type {\unicodechar}'s %D \item spaces become character 255's (so that they are not %D gobbled in argument fetching %D \item normal \ASCII\ chars are unchanged %D \item \par's and alike are converted to \type {\unicodechar}'s %D \stopitemize %D %D This happens by expansion; next we convert the resulting %D sequence by interpreting the stream. \long\def\sanitizePDFuniencoding#1\to#2% {\enablePDFunicrlf \simplifycommands % added due to Dohyun Kim \let\unicodechar\relax % prevent further expansion \retainlccodes\lccode32=255 % slooow \lowercasestring\PDFunicodetrigger#1\to#2% \edef#2{\expandafter\doPDFuni#2\empty\empty}} % slooow %D Handling of empty lines: \bgroup \catcode`\^^M=\@@active \gdef\enablePDFunicrlf% {\def\\{\unicodechar{13}}% \def\par{\\\\}% \catcode`\^^M=\@@active% \let^^M=\\} \egroup %D Conversion to 16 bit \UNICODE: \def\PDFunicodechar#1% {\@EA\lchexnumbers\@EA{\number\utfdiv{#1}}% \@EA\lchexnumbers\@EA{\number\utfmod{#1}}} \def\PDFunicodetrigger {\unicodechar{65279}} %D The postprocessor: \def\doPDFuni#1% {\ifx#1\relax \@EA\dodoPDFuni \else\ifx#1\empty % quit \else \@EAEAEA\nodoPDFuni \fi\fi#1} \def\nodoPDFuni#1% {\PDFunicodechar{\ifnum`#1=255 32\else`#1\fi}\doPDFuni} \def\dodoPDFuni#1#2% {\PDFunicodechar{#2}\doPDFuni} \def\sanitizePDFencoding {\doifelse\currentregime{utf}% {\PDFunicodetrue\sanitizePDFuniencoding}\sanitizePDFdocencoding} % pdftex specific \def\doPDFinsertbookmark#1#2#3#4#5% level sublevels text page open=1 {\bgroup \sanitizePDFencoding#3\to\bookmarktext % uses scratchcounter \stripstring\bookmarktext \doPDFbookmark{#1}{#2}{\bookmarktext}{#4}{#5}% \egroup} \def\doPDFbookmark#1#2#3#4#5% {\doPDFgetpagereference{#4}\PDFobjectreference \pdfoutline user {<>}% \ifcase#2 \else count \ifcase#5-\fi#2 \fi {\ifPDFunicode<#3>\else#3\fi}} \def\doPDFsetupidentity#1#2#3#4#5#6% {\bgroup \enablePDFdocencoding \sanitizePDFencoding#1\to\idtitle \stripstring\idtitle \sanitizePDFencoding#2\to\idsubject\stripstring\idsubject \sanitizePDFencoding#3\to\idauthor \stripstring\idauthor \sanitizePDFencoding#4\to\idcreator\stripstring\idcreator \sanitizePDFencoding#6\to\idkeyword\stripstring\idkeyword \expanded{\doPDFaddtoinfo {/Title \ifPDFunicode<\idtitle >\else(\idtitle )\fi /Subject \ifPDFunicode<\idsubject>\else(\idsubject)\fi /Author \ifPDFunicode<\idauthor >\else(\idauthor )\fi /Creator \ifPDFunicode<\idcreator>\else(\idcreator)\fi /ModDate (#4) /ID (\jobname.#5) % needed for pdf/x /Keywords \ifPDFunicode<\idkeyword>\else(\idkeyword)\fi}}% \egroup} \protect \doifnotmode{demo}{\endinput} % \input spec-tst.tex \mainlanguage[vn] \enableregime[utf] \usetypescript[all][computer-modern][t5] \setupinteraction [state=start, title={Thử tiếng Việt}, author={Tác Văn Giả}, keyword={Thử tiếng Việt}] \placebookmarks[chapter,section,subsection] \starttext \placelist[chapter,section,subsection][alternative=c] \chapter{Thử tiếng Việt} \section {Mục thứ nhất} \subsection{Mục nhỏ thứ nhất} Thử tiếng Việt \subsection{Mục nhỏ thứ hai} Thử tiếng Việt \section {Mục thứ hai} \subsection{Mục nhỏ thứ nhất} Thử tiếng Việt \subsection{Mục nhỏ thứ hai} Thử tiếng Việt \section {Mục thứ ba} \subsection{Mục nhỏ thứ nhất} Thử tiếng Việt \subsection{Mục nhỏ thứ hai} Thử tiếng Việt \stoptext