summaryrefslogtreecommitdiff
path: root/tex/context/base/mkii/verb-pl.mkii
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkii/verb-pl.mkii')
-rw-r--r--tex/context/base/mkii/verb-pl.mkii547
1 files changed, 547 insertions, 0 deletions
diff --git a/tex/context/base/mkii/verb-pl.mkii b/tex/context/base/mkii/verb-pl.mkii
new file mode 100644
index 000000000..634a0a314
--- /dev/null
+++ b/tex/context/base/mkii/verb-pl.mkii
@@ -0,0 +1,547 @@
+%D \module
+%D [ file=verb-pl,
+%D version=1997.12.22,
+%D title=\CONTEXT\ Verbatim Macros,
+%D subtitle=Pretty \PERL\ Verbatim,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{ConTeXt Verbatim Macros / Pretty PERL Verbatim}
+
+%D When I rewrote \TEXUTIL\ in \PERL\ I decided to write a
+%D pretty \PERL\ interpreter too. In fact, this was the main
+%D reason for rewriting the pretty verbatim mechanisms to
+%D handle more that \TEX.
+%D
+%D \startPL
+%D $alfa = $beta{gamma};
+%D if ($alfa="delta")
+%D { print "epsilon" }
+%D \stopPL
+%D
+%D When looking at the macros, watch the \type{\doglobal}'s!
+%D They're something \CONTEXT\ specific.
+
+\unprotect
+
+%D \macros
+%D {prettyPLvariables}
+%D
+%D Identifiers and system variables get a special treatment.
+%D One can disable this option for the variables by resetting
+%D the next switch.
+
+\doglobal\newif\ifprettyPLvariables
+
+\global\prettyPLvariablestrue
+
+%D As said before, the global assignment is needed in
+%D \CONTEXT\ (for once||only loading on demand).
+
+\doglobal\newif\ifinPLsingle
+\doglobal\newif\ifinPLdouble
+\doglobal\newif\ifinPLcomment
+\doglobal\newif\ifinPLdoc % only used in java filter
+\doglobal\newif\ifPLdocdone % only used in java filter
+\doglobal\newif\ifPLverbose
+
+\newcount\PLverboseskipped
+
+\gdef\PLverbosecorrection%
+ {\ifnum\PLverboseskipped>0
+ \obeyedspace
+ \advance\PLverboseskipped -1
+ \@EA\PLverbosecorrection
+ \fi}
+
+\gdef\PLsetcontrols%
+ {\saveprettycontrols
+ \def\obeyedspace%
+ {\endPLtypesix
+ \ifPLverbose
+ \advance\PLverboseskipped 1
+ \else
+ \oldobeyedspace
+ \fi}%
+ \def\flushrestofverbatimline%
+ {\endPLtypesix
+ \global\inPLcommentfalse}%
+ \def\obeyedline%
+ {\PLverbosefalse
+ \PLverboseskipped=0
+ \PLdocdonefalse
+ \oldobeyedline}%
+ \let\obeytabs=\ignoretabs}
+
+\gdef\JVsetcontrols%
+ {\PLsetcontrols
+ {\endPLtypesix
+ \ifcase\JVcommentlevel \inPLcommentfalse \fi
+ \PLverbosefalse
+ \PLverboseskipped=0}}
+
+\gdef\setupprettyPLtype%
+ {\def\prettyidentifier{PL}%
+ \PLsetvariables
+ \PLsetcontrols
+ \PLsethandlers
+ \PLsetspecials
+ \PLsetdiagnostics}
+
+\gdef\PLsetvariables%
+ {\global\inPLsinglefalse
+ \global\inPLdoublefalse
+ \global\inPLcommentfalse
+ \global\let\PLsequence=\empty
+ \global\let\PLprefix=\empty}
+
+\gdef\PLsetspecials%
+ {\setpretty`\{=10 \setpretty`\}=10
+ \setpretty`\$=21 \setpretty`\@=21 \setpretty`\%=22
+ \setpretty`\[=31 \setpretty`\]=31 \setpretty`\(=32 \setpretty`\)=32
+ \setpretty`\==32 \setpretty`\~=32 \setpretty`\<=32 \setpretty`\>=32
+ \setpretty`\-=41 \setpretty`\+=41 \setpretty`\/=41 \setpretty`\*=41
+ \setpretty`\|=41 \setpretty`\`=41 \setpretty`\!=41 \setpretty`\?=41
+ \setpretty`\^=41 \setpretty`\&=42
+ \setpretty`\\=50
+ \setpretty`\1=61 \setpretty`\2=61 \setpretty`\3=61 \setpretty`\4=61
+ \setpretty`\5=61 \setpretty`\6=61 \setpretty`\7=61 \setpretty`\8=61
+ \setpretty`\9=61 \setpretty`\0=61 \setpretty`\_=61
+ \setpretty`\A=62 \setpretty`\B=62 \setpretty`\C=62 \setpretty`\D=62 \setpretty`\E=62
+ \setpretty`\F=62 \setpretty`\G=62 \setpretty`\H=62 \setpretty`\I=62 \setpretty`\J=62
+ \setpretty`\K=62 \setpretty`\L=62 \setpretty`\M=62 \setpretty`\N=62 \setpretty`\O=62
+ \setpretty`\P=62 \setpretty`\Q=62 \setpretty`\R=62 \setpretty`\S=62 \setpretty`\T=62
+ \setpretty`\U=62 \setpretty`\V=62 \setpretty`\W=62 \setpretty`\X=62 \setpretty`\Y=62
+ \setpretty`\Z=62
+ \setpretty`\a=62 \setpretty`\b=62 \setpretty`\c=62 \setpretty`\d=62 \setpretty`\e=62
+ \setpretty`\f=62 \setpretty`\g=62 \setpretty`\h=62 \setpretty`\i=62 \setpretty`\j=62
+ \setpretty`\k=62 \setpretty`\l=62 \setpretty`\m=62 \setpretty`\n=62 \setpretty`\o=62
+ \setpretty`\p=62 \setpretty`\q=62 \setpretty`\r=62 \setpretty`\s=62 \setpretty`\t=62
+ \setpretty`\u=62 \setpretty`\v=62 \setpretty`\w=62 \setpretty`\x=62 \setpretty`\y=62
+ \setpretty`\z=62
+ \setpretty`\;=71 \setpretty`\:=72 \setpretty`\,=71 \setpretty`\.=71
+ \setpretty`\'=80
+ \setpretty`\"=90
+ \setpretty`\#= 0 }
+
+\gdef\PLsethandlers%
+ {\installprettyhandler 10 \PLtypeone
+ \installprettyhandler 21 \PLtypetwo
+ \installprettyhandler 22 \PLtypetwo
+ \installprettyhandler 31 \PLtypethree
+ \installprettyhandler 32 \PLtypethree
+ \installprettyhandler 41 \PLtypefourone
+ \installprettyhandler 42 \PLtypefourtwo
+ \installprettyhandler 50 \PLtypefive
+ \installprettyhandler 61 \PLtypesixone
+ \installprettyhandler 62 \PLtypesixtwo
+ \installprettyhandler 71 \PLtypesevenone
+ \installprettyhandler 72 \PLtypeseventwo
+ \installprettyhandler 80 \PLtypeeight
+ \installprettyhandler 90 \PLtypenine
+ \installprettyhandler 0 \PLtypezero}
+
+\gdef\PLtypeone#1%
+ {\ifinPLdouble
+ \PLverbosefalse
+ \ifinPLcomment
+ \endPLtypesix
+ \getpretty{#1}%
+ \else\ifx\PLprefix\empty
+ \endPLtypesix
+ \getpretty{#1}%
+ \else
+ \endPLtypesix
+ \xdef\PLprefix{\getpretty{#1}}%
+ \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty
+ \fi\fi
+ \else
+ \endPLtypesix
+ \ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \getpretty{#1}%
+ \else
+ \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty
+ \fi\fi
+ \fi}
+
+% \gdef\PLtypetwo#1%
+% {\endPLtypesix
+% \xdef\PLprefix{\getpretty{#1}}%
+% \ifinPLcomment
+% \getpretty{#1}%
+% \else\ifinPLsingle
+% \getpretty{#1}%
+% \else\ifinPLdouble
+% \getprettydata{#1}%
+% \ifnum\prettytype=21
+% \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty
+% \else
+% \getpretty{#1}%
+% \fi
+% \else
+% \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty
+% \fi\fi\fi}
+
+\gdef\PLtypetwo#1%
+ {\endPLtypesix
+ \ifinPLdoc
+ \xdef\PLsequence{\PLsequence\getpretty{#1}}%
+ \else\ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \getpretty{#1}%
+ \else\ifinPLdouble
+ \getprettydata{#1}%
+ \ifnum\prettytype=21
+ \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty
+ \else
+ \getpretty{#1}%
+ \fi
+ \else
+ \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty
+ \fi\fi\fi\fi}
+
+\gdef\PLtypethree#1%
+ {\endPLtypesix
+ \ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \getpretty{#1}%
+ \else\ifinPLdouble
+ \getprettydata{#1}%
+ \ifnum\prettytype=31
+ \ifx\PLprefix\empty
+ \getpretty{#1}%
+ \else
+ \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty
+ \fi
+ \else
+ \getpretty{#1}%
+ \fi
+ \else
+ \beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty
+ \fi\fi\fi}
+
+\gdef\PLtypefourone#1%
+ {\endPLtypesix
+ \ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \getpretty{#1}%
+ \else\ifinPLdouble
+ \getpretty{#1}%
+ \else
+ \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty
+ \fi\fi\fi}
+
+\gdef\doPLtypefourtwo#1#2%
+ {\PLverbosefalse
+ \getprettydata{#2}%
+ \ifnum\prettytype=62
+ \expandafter\PLtypetwo
+ \else
+ \expandafter\PLtypefourone
+ \fi
+ {#1}#2}
+
+\gdef\PLtypefourtwo%
+ {\handlenextnextpretty\doPLtypefourtwo\PLtypefourone}
+
+\gdef\doPLtypefiveA#1#2%
+ {\endPLtypesix
+ \ifinPLcomment
+ \getpretties{#1}{#2}%
+ \else\ifinPLsingle
+ \getprettydata{#2}%
+ \ifnum\prettytype=50
+ \beginofpretty[\!!prettytwo]\getpretties{#1}{#2}\endofpretty
+ \else\ifnum\prettytype=80
+ \beginofpretty[\!!prettytwo]\getpretties{#1}{#2}\endofpretty
+ \else
+ \getpretties{#1}{#2}%
+ \fi\fi
+ \else
+ \beginofpretty[\!!prettytwo]\getpretties{#1}{#2}\endofpretty
+ \fi\fi}
+
+\gdef\doPLtypefiveB#1%
+ {\endPLtypesix
+ \ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \getpretty{#1}%
+ \else
+ \beginofpretty[\!!prettytwo]\getpretty{#1}\endofpretty
+ \fi\fi}
+
+\gdef\PLtypefive%
+ {\ifPLverbose
+ \expandafter\PLtypesixtwo
+ \else
+ \expandafter\handlenextnextpretty\expandafter\doPLtypefiveA\expandafter\doPLtypefiveB
+ \fi}
+
+% \gdef\endPLtypesix%
+% {\ifx\PLsequence\empty\else
+% \ifinPLcomment
+% \PLsequence
+% \else\ifinPLsingle
+% \PLsequence
+% \else\ifinPLdouble
+% \PLsequence
+% \else\ifPLverbose
+% \beginofpretty[\!!prettytwo]\PLsequence\endofpretty
+% \PLverbosefalse
+% \else\ifx\PLprefix\empty
+% \doifprettyidentifierelse{\PLsequence}{\PLverboses}
+% {\PLverbosetrue\PLverboseskipped=3 }
+% {\doifprettyidentifierelse{\PLsequence}{\PLidentifiers}
+% {\beginofpretty[\!!prettytwo]%
+% {\prettyidentifierfont\PLsequence}%
+% \endofpretty}
+% {\ifprettyPLvariables
+% \doifprettyidentifierelse{\PLsequence}{\PLvariables}
+% {\beginofpretty[\!!prettytwo]%
+% {\prettyvariablefont\PLsequence}%
+% \endofpretty}
+% {\PLsequence}%
+% \else
+% \PLsequence
+% \fi}}%
+% \else\ifprettyPLvariables
+% \doifprettyidentifierelse{\PLprefix\PLsequence}{\PLvariables}
+% {\beginofpretty[\!!prettytwo]%
+% {\prettyvariablefont\PLsequence}%
+% \endofpretty}
+% {\PLsequence}%
+% \else
+% \PLsequence
+% \fi\fi\fi\fi\fi\fi
+% \global\let\PLsequence=\empty
+% \global\let\PLprefix=\empty
+% \fi}
+
+\gdef\endPLtypesix
+ {\ifx\PLsequence\empty\else
+ \ifinPLdoc
+ \doendPLtypesixvar\!!prettythree
+ \else\ifinPLcomment
+ \PLsequence
+ \else\ifinPLsingle
+ \PLsequence
+ \else\ifinPLdouble
+ \PLsequence
+ \else\ifPLverbose
+ \beginofpretty[\!!prettytwo]\PLsequence\endofpretty
+ \PLverbosefalse
+ \else\ifx\PLprefix\empty
+ \doendPLtypesix\!!prettytwo
+ \else\ifprettyPLvariables
+ \doendPLtypesixvar\!!prettytwo
+ \else
+ \PLsequence
+ \fi\fi\fi\fi\fi\fi\fi
+ \global\let\PLsequence\empty
+ \global\let\PLprefix\empty
+ \fi}
+
+\gdef\doendPLtypesix#1%
+ {\doifprettyidentifierelse{\PLsequence}{\PLverboses}
+ {\PLverbosetrue\PLverboseskipped=3 }
+ {\doifprettyidentifierelse{\PLsequence}{\PLidentifiers}
+ {\beginofpretty[#1]%
+ {\prettyidentifierfont\PLsequence}%
+ \endofpretty}
+ {\ifprettyPLvariables
+ \doifprettyidentifierelse{\PLsequence}{\PLvariables}
+ {\beginofpretty[#1]%
+ {\prettyvariablefont\PLsequence}%
+ \endofpretty}
+ {\PLsequence}%
+ \else
+ \PLsequence
+ \fi}}}
+
+\gdef\doendPLtypesixvar#1%
+ {\doifprettyidentifierelse{\PLprefix\PLsequence}{\PLvariables}
+ {\beginofpretty[#1]%
+ {\prettyvariablefont\PLsequence}%
+ \endofpretty}
+ {\PLsequence}}
+
+\gdef\PLtypesixone
+ {\ifx\PLsequence\empty
+ \expandafter\getpretty
+ \else
+ \expandafter\PLtypesixtwo
+ \fi}
+
+% \gdef\PLtypesixtwo#1%
+% {\ifinPLcomment
+% \getpretty{#1}%
+% \else\ifinPLsingle
+% \getpretty{#1}%
+% \else\ifinPLdouble
+% \ifx\PLprefix\empty
+% \getpretty{#1}%
+% \else
+% \xdef\PLsequence{\PLsequence\getpretty{#1}}%
+% \fi
+% \else
+% \xdef\PLsequence{\PLsequence\getpretty{#1}}%
+% \fi\fi\fi}
+
+\gdef\PLtypesixtwo#1%
+ {\ifinPLdoc
+ \xdef\PLsequence{\PLsequence\getpretty{#1}}%
+ \else\ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \getpretty{#1}%
+ \else\ifinPLdouble
+ \ifx\PLprefix\empty
+ \getpretty{#1}%
+ \else
+ \xdef\PLsequence{\PLsequence\getpretty{#1}}%
+ \fi
+ \else
+ \xdef\PLsequence{\PLsequence\getpretty{#1}}%
+ \fi\fi\fi\fi}
+
+\gdef\PLtypesevenone#1%
+ {\endPLtypesix
+ \getpretty{#1}}
+
+\gdef\PLtypeseventwo%
+ {\handlenextnextpretty\doPLtypeseventwo\PLtypesevenone}
+
+\gdef\doPLtypeseventwo#1#2%
+ {\getprettydata{#2}%
+ \ifnum\prettytype=72
+ \PLtypesixtwo{#1}\PLtypesixtwo{#1}%
+ \else
+ \PLtypesevenone{#1}\expandafter#2%
+ \fi}
+
+\gdef\PLtypeeight#1% single quote
+ {\endPLtypesix
+ \ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLdouble
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \global\inPLsinglefalse
+ \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty
+ \else
+ \global\inPLsingletrue
+ \beginofpretty[\!!prettyfour]\getpretty{#1}\endofpretty
+ \fi\fi\fi}
+
+\gdef\PLtypenine#1% double quote
+ {\endPLtypesix
+ \ifinPLcomment
+ \getpretty{#1}%
+ \else\ifinPLsingle
+ \getpretty{#1}%
+ \else\ifinPLdouble
+ \global\inPLdoublefalse
+ \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty
+ \else
+ \global\inPLdoubletrue
+ \beginofpretty[\!!prettyone]\getpretty{#1}\endofpretty
+ \fi\fi\fi}
+
+\gdef\PLtypezero%
+ {\endPLtypesix
+ \ifnewpretty\expandafter\handlenewpretty\fi\doPLtypezero}
+
+\gdef\doPLtypezero#1%
+ {\ifinPLcomment
+ \getpretty{#1}%
+ \else
+ \global\inPLcommenttrue
+ \PLverbosecorrection
+ \ifnaturaltextext % non tested yet
+ \let\next\naturaltextext
+ \else
+ \def\next{\beginofpretty[\!!prettythree]\getpretty{#1}\endofpretty}%
+ \fi
+ \expandafter\next
+ \fi}
+
+\gdef\doreportprettyPLtype#1#2#3#4%
+ {#1%
+ [PERL \string#2 typing conflict, use \string#3 instead]
+ \writestatus
+ {PERL typing}
+ {use \string#3 instead of \string#2 to enable propper visualization}%
+ \global#4%
+ \expandafter\doemptyverbatimline
+ \fi}
+
+\gdef\reportprettyPLtype%
+ {\doreportprettyPLtype\ifinPLsingle'\'\inPLsinglefalse
+ \doreportprettyPLtype\ifinPLdouble"\"\inPLdoublefalse}
+
+\gdef\PLsetdiagnostics%
+ {\let\normaldoemptyverbatimline=\doemptyverbatimline
+ \def\doemptyverbatimline%
+ {\normaldoemptyverbatimline
+ \reportprettyPLtype}}
+
+%D The official \PERL\ version 5 keywords:
+
+\useprettyidentifiers \PLidentifiers \PLsetspecials
+ abs accept alarm and atan atan2 bind binmode bless caller
+ chdir chmod chomp chop chown chr chroot close closedir cmp
+ connect continue cos crypt dbmclose dbmopen defined delete
+ die do dump each echo else elsif endgrent endhostent
+ endnetent endprotoend endpwent endservent eof eq eval exec
+ exists exit exp fcntl fileno flock for foreach fork format
+ formline getc getgrent getgrgid getgrnam gethostbyaddr
+ gethostbyname gethostent getlogin getnetbyaddr getnetbyname
+ getnetent getpeername getpgrp getppid getpriority
+ getprotobyname getprotobynumber getprotoent getpwent
+ getpwnam getpwuid getservbyname getservbyport getservent
+ getsockname getsockopt glob gmtime goto grep gt hex if
+ import index int integer ioctl join keys kill last lc
+ lcfirst le length lib link listen local localtime log lstat
+ lt map method mkdir msgctl msgget msgrcv msgsnd my ne next
+ no not oct open opendir or ord pack package pipe pop pos
+ print printf process prompt push quotemeta rand read readdir
+ readlink recv redo ref rename require reset return reverse
+ rewinddir rindex rmdir scalar seek seekdir select semctl
+ semget semop send setgrent sethostent setnetent setpgrp
+ setpriority setprotoent setpwent setservent setsockopt shift
+ shmctl shmget shmread shmwrite shutdown sin sleep socket
+ socketpair sort splice split sprintf sqrt srand stat strict
+ study sub subs substr symlink syscall sysopen sysread system
+ syswrite tell telldir tie tied time times times truncate uc
+ ucfirst ucmask umask unary undef unless unlink unpack
+ unshift untie until use utime values vars vec wait waitpid
+ wantarray warn warn while write xor
+
+%D Additional module keywords (still incomplete):
+
+\useprettyidentifiers \PLvariables \PLsetspecials
+ Getopt::Long
+ $Getopt::Long::passthrough
+ $Getopt::Long::autoabbrev
+ &GetOptions
+
+%D A funny hack. When prefixes by \type{TEX}, a \type{\csname}
+%D is typeset as \TEX\ sequence.
+
+\useprettyidentifiers \PLverboses \PLsetspecials
+ TEX
+
+\protect
+
+\endinput