Dear TeXmacs users,
I am trying to learn the style sheet language by implementing a simple
macro called nth. The goal of this macro is to transform 1 and 1st, 2 into
2nd, 3 into 3rd, and 4 into 4th, and so on. The code is shown below.
<assign|last-character|<macro|expr|<with|n|<length|<arg|expr>>|<range|<arg|expr>|<minus|<value|n>|1>|<value|n>>>>>
<assign|nth|<macro|n|<with|d|<last-character|<arg|n>>|<case|<equal|<arg|d>|1>|<arg|n><rsup|st>|<equal|<arg|d>|2>|<arg|n><rsup|nd>|<equal|<value|d>|3>|<arg|n><rsup|rd>|<arg|n><rsup|th>>>>>
It seems like it should work, but I'm missing something fundamental in my
understanding about how the style sheet macro language does value typing. I
tried taking <minus|5|<last-character|42>>, and got <error|bad plus/minus>.
When I tried to compare equality, I got false. Clearly these things are
being interpreted by the parser in a way I don't understand.
I tried searching for some documentation about this kind of thing in the
manual, but so far haven't had any luck. I would appreciate any pointers
from the community.
Best Regards,
Kyle
P.S.
Here is a nicer scheme-like representation fo the macro code:
(document
(assign "last-character"
(macro "expr"
(with "n" (length (arg "expr"))
(range (arg "expr")
(minus (value "n") "1")
(value "n")))))
(assign "nth"
(macro "n"
(with "d" (last-character (arg "n"))
(case (equal (arg "d") "1") (concat (arg "n") (rsup "st"))
(equal (arg "d") "2") (concat (arg "n") (rsup "nd"))
(equal (value "d") "3") (concat (arg "n") (rsup "rd"))
(concat (arg "n") (rsup "th")))))))
Archive powered by MHonArc 2.6.19.