aboutsummaryrefslogtreecommitdiffstats
path: root/include/cprintf
diff options
context:
space:
mode:
Diffstat (limited to 'include/cprintf')
-rw-r--r--include/cprintf383
1 files changed, 383 insertions, 0 deletions
diff --git a/include/cprintf b/include/cprintf
new file mode 100644
index 0000000..fca806e
--- /dev/null
+++ b/include/cprintf
@@ -0,0 +1,383 @@
+
+###############################################################################
+# #
+# Lout @CPSetup package for formatting C and C++ programs (Version 1.1) #
+# #
+# Version 1.0 by Jeffrey H. Kingston, March 1994. #
+# Version 1.1 by Jeffrey H. Kingston, November 1998 (name change only) #
+# #
+# This package uses a filtered body parameter to convert C and C++ source #
+# code into Lout source. The filter program is c2lout which is distributed #
+# with Basser Lout Version 3. The list of keywords and tokens is from #
+# Stroustrup, 2nd Edition. See "User's Guide to the Lout Document #
+# Formatting System" for user information. #
+# #
+###############################################################################
+
+export @CP
+def @CPSetup
+ named style { fixed } # print style
+
+ named fixedfont { Courier } # font family if fixed
+ named fixedstrings { Base } # string face if fixed
+ named fixedidentifiers { Base } # identifier face if fixed
+ named fixedcomments { Base } # comment face if fixed
+ named fixedkeywords { Base } # keyword face if fixed
+ named fixednumbers { Base } # number face if fixed
+ named fixedoperators { Base } # operator face if fixed
+ named fixedsize { -1.0p } # font size if fixed
+ named fixedline { 1.0vx } # line-space if fixed
+ named fixedtabin { 8 } # tab interval if fixed
+ named fixedtabout { 8s } # tab width if fixed
+
+ named varyingfont { } # font family if varying
+ named varyingstrings { Slope } # string face if varying
+ named varyingidentifiers { Slope } # identifier face if varying
+ named varyingcomments { Base } # comment face if varying
+ named varyingkeywords { Bold } # keyword face if varying
+ named varyingnumbers { Base } # number face if varying
+ named varyingoperators { Base } # operator face if varying
+ named varyingsize { 1.0f } # font size if varying
+ named varyingline { 1.0vx } # line-space if varying
+ named varyingtabin { 8 } # tab interval if varying
+ named varyingtabout { 3f } # tab width if varying
+
+ named symbolfont { } # font family if symbol
+ named symbolstrings { Slope } # string face if symbol
+ named symbolidentifiers { Slope } # identifier face if symbol
+ named symbolcomments { Base } # comment face if symbol
+ named symbolkeywords { Bold } # keyword face if symbol
+ named symbolnumbers { Base } # number face if symbol
+ named symboloperators { Base } # operator face if symbol
+ named symbolsize { 1.0f } # font size if symbol
+ named symbolline { 1.0vx } # line-space if symbol
+ named symboltabin { 8 } # tab interval if symbol
+ named symboltabout { 3f } # tab width if symbol
+
+@Begin
+
+ export
+
+ "$$" "$>" "`" @L @S @C
+
+ "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
+
+ "!" "%" "^" "&" "*" "(" ")" "-" "+" "=" "${" "$}" "|" "~"
+ "[" "]" ";" "'" ":" "<" ">" "?" "," "." "/"
+
+ "->" "++" "--" ".*" "->*" "<<" ">>" "<=" ">=" "==" "!=" "&&"
+ "||" "*=" "/=" "%=" "+=" "-=" "<<=" ">>=" "&=" "^=" "|=" "::"
+
+ asm continue float new signed try
+ auto default for operator sizeof typedef
+ break delete friend private static union
+ case do goto protected struct unsigned
+ catch double if public switch virtual
+ char else inline register template void
+ class enum int return this volatile
+ const extern long short throw while
+
+ @EvaluateCp
+
+ def @CP
+ named style { style } # style
+ named font { dft } # font family
+ named strings { dft } # string font
+ named identifiers { dft } # ident. font
+ named comments { dft } # comment font
+ named keywords { dft } # keyword font
+ named numbers { dft } # number font
+ named operators { dft } # operator font
+ named size { dft } # font size
+ named line { dft } # line-space
+ named tabin { dft } # tab interval
+ named tabout { dft } # tab width
+ body @Body # filtered, see below
+ @Begin
+
+ def @Test # returns x unless x is dft
+ left x
+ named iffixed {}
+ named ifvarying {}
+ named ifsymbol {}
+ {
+ x @Case {
+ dft @Yield {
+ style @Case {
+ fixed @Yield { iffixed }
+ varying @Yield { ifvarying }
+ symbol @Yield { ifsymbol }
+ }
+ }
+ else @Yield x
+ }
+ }
+
+ def @InitTab
+ {
+ tabin @Test
+ iffixed { fixedtabin }
+ ifvarying { varyingtabin }
+ ifsymbol { symboltabin }
+ }
+
+ def @InitTabWidth
+ {
+ tabout @Test
+ iffixed { fixedtabout }
+ ifvarying { varyingtabout }
+ ifsymbol { symboltabout }
+ }
+
+ def @Filter
+ {
+ c2lout -r -i{@FilterIn} -o{@FilterOut} -e{@FilterErr}
+ -t{@InitTab} -T{@InitTabWidth}
+ }
+
+ def @InitFontFamily
+ {
+ font @Test
+ iffixed { fixedfont }
+ ifvarying { varyingfont }
+ ifsymbol { symbolfont }
+ }
+
+ def @InitSize
+ {
+ size @Test
+ iffixed { fixedsize }
+ ifvarying { varyingsize }
+ ifsymbol { symbolsize }
+ }
+
+ def @InitLine
+ {
+ line @Test
+ iffixed { fixedline }
+ ifvarying { varyingline }
+ ifsymbol { symbolline }
+ }
+
+ def @S # for formatting C strings
+ right x
+ {
+ "\"" &
+ strings @Test
+ iffixed { fixedstrings }
+ ifvarying { varyingstrings }
+ ifsymbol { symbolstrings }
+ @Font x
+ & "\""
+ }
+
+ def "`"
+ {
+ style @Case {
+ symbol @Yield { "`" }
+ else @Yield { "'" }
+ }
+ }
+
+ def @L # for formatting C character literals
+ right x
+ {
+ ` &
+ strings @Test
+ iffixed { fixedstrings }
+ ifvarying { varyingstrings }
+ ifsymbol { symbolstrings }
+ @Font x
+ & '
+ }
+
+ def @Ident # for formatting C identifiers
+ {
+ identifiers @Test
+ iffixed { fixedidentifiers }
+ ifvarying { varyingidentifiers }
+ ifsymbol { symbolidentifiers }
+ }
+
+ def @C # for formatting C comments
+ right x
+ {
+ comments @Test
+ iffixed { fixedcomments }
+ ifvarying { varyingcomments }
+ ifsymbol { symbolcomments }
+ @Font x
+ }
+
+ def @K # for formatting C keywords
+ right x
+ {
+ keywords @Test
+ iffixed { fixedkeywords }
+ ifvarying { varyingkeywords }
+ ifsymbol { symbolkeywords }
+ @Font x
+ }
+
+ def @N # for formatting C numbers
+ right x
+ {
+ numbers @Test
+ iffixed { fixednumbers }
+ ifvarying { varyingnumbers }
+ ifsymbol { symbolnumbers }
+ @Font x
+ }
+
+ def @O # for formatting C operators
+ right x
+ {
+ operators @Test
+ iffixed { fixedoperators }
+ ifvarying { varyingoperators }
+ ifsymbol { symboloperators }
+ @Font x
+ }
+
+ def @A # get characters from the Adobe Symbol font
+ left sym
+ right x
+ {
+ style @Case {
+ symbol @Yield { { Symbol Base } @Font @Char sym }
+ else @Yield { x }
+ }
+ }
+
+ macro "$>" { {} & }
+
+ def "$$" { "#" }
+
+ def "0" { @N "0" }
+ def "1" { @N "1" }
+ def "2" { @N "2" }
+ def "3" { @N "3" }
+ def "4" { @N "4" }
+ def "5" { @N "5" }
+ def "6" { @N "6" }
+ def "7" { @N "7" }
+ def "8" { @N "8" }
+ def "9" { @N "9" }
+
+ def "!" { @O "!" }
+ def "%" { @O "%" }
+ def "^" { @O "^" }
+ def "&" { @O "&" }
+ def "*" { asteriskmath @A @O "*" }
+ def "(" { @O "(" }
+ def ")" { @O ")" }
+ def "-" { minus @A @O "-" }
+ def "+" { plus @A @O "+" }
+ def "=" { equal @A @O "=" }
+ def "${" { @O "{" }
+ def "$}" { @O "}" }
+ def "|" { @O "|" }
+ def "~" { @O "~" }
+ def "[" { @O "[" }
+ def "]" { @O "]" }
+ def ";" { @O ";" }
+ def "'" { @O "'" }
+ def ":" { @O ":" }
+ def "<" { less @A @O "<" }
+ def ">" { greater @A @O ">" }
+ def "?" { @O "?" }
+ def "," { @O "," }
+ def "." { @O "." }
+ def "/" { @O "/" }
+ def "->" { arrowright @A @O "->" }
+ def "++" { { + }{ + } }
+ def "--" { { - }{ - } }
+ def ".*" { { . }{ * } }
+ def "->*" { { ->}{ * } }
+ def "<<" { { < }{ < } }
+ def ">>" { { > }{ > } }
+ def "<=" { lessequal @A @O "<=" }
+ def ">=" { greaterequal @A @O ">=" }
+ def "==" { { = }{ = } }
+ def "!=" { notequal @A @O "!=" }
+ def "&&" { { & }{ & } }
+ def "||" { { | }{ | } }
+ def "*=" { { * }{ = } }
+ def "/=" { { / }{ = } }
+ def "%=" { { % }{ = } }
+ def "+=" { { + }{ = } }
+ def "-=" { { - }{ = } }
+ def "<<=" { { <<}{ = } }
+ def ">>=" { { >>}{ = } }
+ def "&=" { { & }{ = } }
+ def "^=" { { ^ }{ = } }
+ def "|=" { { | }{ = } }
+ def "::" { { : }{ : } }
+
+ def asm { @K "asm" }
+ def auto { @K "auto" }
+ def break { @K "break" }
+ def case { @K "case" }
+ def catch { @K "catch" }
+ def char { @K "char" }
+ def class { @K "class" }
+ def const { @K "const" }
+
+ def continue { @K "continue" }
+ def default { @K "default" }
+ def delete { @K "delete" }
+ def do { @K "do" }
+ def double { @K "double" }
+ def else { @K "else" }
+ def enum { @K "enum" }
+ def extern { @K "extern" }
+
+ def float { @K "float" }
+ def for { @K "for" }
+ def friend { @K "friend" }
+ def goto { @K "goto" }
+ def if { @K "if" }
+ def inline { @K "inline" }
+ def int { @K "int" }
+ def long { @K "long" }
+
+ def new { @K "new" }
+ def operator { @K "operator" }
+ def private { @K "private" }
+ def protected { @K "protected" }
+ def public { @K "public" }
+ def register { @K "register" }
+ def return { @K "return" }
+ def short { @K "short" }
+
+ def signed { @K "signed" }
+ def sizeof { @K "sizeof" }
+ def static { @K "static" }
+ def struct { @K "struct" }
+ def switch { @K "switch" }
+ def template { @K "template" }
+ def this { @K "this" }
+ def throw { @K "throw" }
+
+ def try { @K "try" }
+ def typedef { @K "typedef" }
+ def union { @K "union" }
+ def unsigned { @K "unsigned" }
+ def virtual { @K "virtual" }
+ def void { @K "void" }
+ def volatile { @K "volatile" }
+ def while { @K "while" }
+
+ def @EvaluateCp right x
+ {
+ { @InitFontFamily Base } @Font
+ { @Ident @InitSize } @Font
+ { @InitLine lines } @Break x
+ }
+
+ { @InitFontFamily Base } @Font { @Ident @InitSize } @Font
+ { @InitLine lines } @Break @Body
+
+ @End @CP
+
+@End @CPSetup