From 223e3245322bd83d6217482a6a199cf3ae7bfa3d Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 3 Jul 2015 07:47:09 -0700 Subject: * genman.txr: Simplify double plass over BODY into single pass. --- ChangeLog | 4 ++++ genman.txr | 58 ++++++++++++++++++++++++++++------------------------------ 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/ChangeLog b/ChangeLog index 0c2fb2df..49b3c468 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2015-07-03 Kaz Kylheku + + * genman.txr: Simplify double plass over BODY into single pass. + 2015-07-03 Kaz Kylheku Allow op arguments like @1 to be places. diff --git a/genman.txr b/genman.txr index 77a84016..63130521 100644 --- a/genman.txr +++ b/genman.txr @@ -47,7 +47,7 @@ Content-type: text/html @ (end) @ (and)

@nil TXR LISP

-@ (set lookup @[orf txlhash txrhash]) +@ (set lookup txrhash) @ (and) TXR - text processing language (version @ver) @ (set VERSION ver) @@ -79,20 +79,6 @@ Content-type: text/html @(until) This document was created by @(end) -@(set BODY @(mapcar (do if (search-regex @1 #//) - @1 - (regsub #/.%<\/TT>/ - (do let ((tok [@1 4 -5]) tag) - (if (match-str tok "@(") - (let ((sym [tok 2 -1])) - (set tag [txrhash sym])) - (set tag [@@2 tok])) - (if tag - `@1` - @1)) - @1)) - BODY - LOOKUP)) @(set BODY @(let ((inside-tt nil) (inside-syntax nil)) (mapcar (do cond @@ -103,21 +89,33 @@ This document was created by ((equal @1 "
Syntax:
") (set inside-syntax t) @1) ((or (and inside-tt (not inside-syntax)) (match-regex @1 #/
/)) - (let* ((out0 (regsub #/@\([a-z0-9\-]+/ - (do let* ((tok [@1 2..:]) - (tag (or [txlhash tok] - [@@2 tok]))) - (if tag - `\@(@tok` - @1)) @1))) - (regsub #/[\(\[][^ )&]+/ - (do let* ((tok [@1 1..:]) - (bkt [@1 0]) - (tag [txlhash tok])) - (if tag - `@bkt@tok` - @1)) out0))) - (t @1)) + (regsub #/@?[\(\[][^ )&]+/ + (do let* ((at (if (eql [@1 0] #\@) + (pop @1))) + (tok [@1 1..:]) + (bkt [@1 0]) + (tag [(if at txrhash txlhash) + tok])) + (if tag + `@at@bkt@tok` + `@at@1`)) @1)) + ((search-regex @1 #//) @1) + (t (regsub #/.%<\/TT>/ + (do let* ((tok [@1 4 -5]) + (tend (break-str tok ") ")) + pfx sym sfx tag) + (cond + ((match-str tok "@(") + (set pfx "@(" + sym [tok 2 tend] + sfx [tok tend .. :] + tag [txrhash sym])) + (t (set tag [@@2 tok] + sym tok))) + (if tag + `@pfx@sym@sfx` + @1)) + @1))) BODY LOOKUP))) @(output) -- cgit v1.2.3