diff --git a/collects/tex2page/tex2page-aux.ss b/collects/tex2page/tex2page-aux.ss index 4f708880e2..c85b7a01fd 100644 --- a/collects/tex2page/tex2page-aux.ss +++ b/collects/tex2page/tex2page-aux.ss @@ -18,7 +18,7 @@ ;(c) Dorai Sitaram, ;http://www.ccs.neu.edu/~dorai/scmxlate/scmxlate.html -(define *tex2page-version* "20050501") +(define *tex2page-version* "20070609") (define *tex2page-website* "http://www.ccs.neu.edu/~dorai/tex2page/tex2page-doc.html") @@ -26,7 +26,7 @@ (define *operating-system* (if (getenv "COMSPEC") (let ((term (getenv "TERM"))) - (if (and (string? term) (string=? term "cygwin")) 'unix 'windows)) + (if (and (string? term) (string=? term "cygwin")) 'cygwin 'windows)) 'unix)) (define *enable-write-18?* #t) @@ -47,10 +47,6 @@ "gswin32.exe")) (else "gs"))) -(define *image-format* 'gif) - -(define *use-advanced-html-entities?* #f) - (define *use-closing-p-tag?* #t) (define *metapost* (case *operating-system* ((windows) "mp") (else "mpost"))) @@ -88,10 +84,7 @@ (define *directory-separator* (if (eqv? *operating-system* 'windows) "\\" "/")) (define *bye-tex* - (case *operating-system* - ((windows) " \\bye") - ((unix) " \\\\bye") - (else " \\\\bye"))) + (case *operating-system* ((windows) " \\bye") (else " \\\\bye"))) (define *int-corresp-to-0* (char->integer #\0)) @@ -142,60 +135,17 @@ (define *if-aware-ctl-seqs* '("\\csname" "\\else" "\\end" "\\eval" "\\fi" "\\let")) -(define *html-bull* "¤") +(define *html-ldquo* "“") -(define *html-dagger* "±") +(define *html-lsquo* "‘") -(define *html-cap-dagger* "±±") +(define *html-mdash* "—") -(define *html-ldquo* "``") +(define *html-ndash* "–") -(define *html-lsaquo* "<") +(define *html-rdquo* "”") -(define *html-lsquo* "`") - -(define *html-mdash* " -- ") - -(define *html-ndash* "-") - -(define *html-oelig* "oe") - -(define *html-cap-oelig* "OE") - -(define *html-rdquo* "''") - -(define *html-rsaquo* ">") - -(define *html-rsquo* "'") - -(define *html-scaron* "s") - -(define *html-cap-scaron* "S") - -(define *html-trade* "TM") - -(define *html-cap-yuml* "Y"") - -(define html-advanced-entities - (lambda () - (set! *use-advanced-html-entities?* #t) - (set! *html-bull* "•") - (set! *html-dagger* "†") - (set! *html-cap-dagger* "‡") - (set! *html-ldquo* "“") - (set! *html-lsaquo* "‹") - (set! *html-lsquo* "‘") - (set! *html-mdash* "—") - (set! *html-ndash* "–") - (set! *html-cap-oelig* "Œ") - (set! *html-oelig* "œ") - (set! *html-rdquo* "”") - (set! *html-rsaquo* "›") - (set! *html-rsquo* "’") - (set! *html-cap-scaron* "Š") - (set! *html-scaron* "š") - (set! *html-trade* "™") - (set! *html-cap-yuml* "Ÿ"))) +(define *html-rsquo* "’") (define *filename-delims* '()) @@ -208,6 +158,8 @@ (define *tab* (integer->char 9)) +(define *afterassignment* #f) + (define *afterpar* '()) (define *afterbye* '()) @@ -222,14 +174,6 @@ (define *bibitem-num* 0) -(define *colophon-links-to-tex2page-website?* #t) - -(define *colophon-mentions-last-mod-time?* #t) - -(define *colophon-mentions-tex2page?* #t) - -(define *colophon-on-first-page?* #t) - (define *color-names* '()) (define *comment-char* #\%) @@ -246,10 +190,6 @@ (define *dumping-nontex?* #f) -(define *epsf-xsize* #f) - -(define *epsf-ysize* #f) - (define *equation-number* #f) (define *equation-numbered?* #t) @@ -282,7 +222,7 @@ (define *html-head* #f) -(define *html-only* #f) +(define *html-only* 0) (define *html-page* #f) @@ -292,12 +232,8 @@ (define *ignore-active-space?* #f) -(define *img-magnification* 1) - (define *img-file-count* 0) -(define *img-file-extn* "") - (define *img-file-tally* 0) (define *imgdef-file-count* 0) @@ -316,6 +252,8 @@ (define *includeonly-list* #f) +(define *index-page-mention-alist* '()) + (define *index-table* #f) (define *index-count* #f) @@ -334,6 +272,8 @@ (define *inside-appendix?* #f) +(define *inside-eplain-verbatim?* #f) + (define *jobname* "texput") (define *label-port* #f) @@ -360,6 +300,8 @@ (define *math-mode?* #f) +(define *math-needs-image?* #f) + (define *math-script-mode?* #f) (define *math-roman-mode?* #f) @@ -384,6 +326,8 @@ (define *outputting-to-non-html?* #f) +(define *reading-control-sequence?* #f) + (define *recent-node-name* #f) (define *remember-index-number* #f) @@ -437,8 +381,6 @@ (define *section-counter-dependencies* #f) -(define *slatex-like-comments?* #f) - (define *slatex-math-escape* #f) (define *source-changed-since-last-run?* #f) @@ -453,7 +395,9 @@ (define *temp-string-count* #f) -(define *tex2page-inputs* #f) +(define *temporarily-use-ascii-for-math?* #f) + +(define *tex2page-inputs* '()) (define *tex-env* '()) @@ -461,22 +405,16 @@ (define *tex-if-stack* '()) +(define *tex-like-layout?* #f) + (define *title* #f) (define *toc-list* #f) (define *toc-page* #f) -(define *tracingcommands?* #f) - -(define *tracingmacros?* #f) - (define *unresolved-xrefs* #f) -(define *use-image-for-displayed-math?* #t) - -(define *use-image-for-intext-math?* #t) - (define *using-bibliography?* #f) (define *using-chapters?* #f) @@ -906,17 +844,9 @@ (terror "\\errmessage"))) (define do-tracingall - (lambda () (do-tracingcommands #t) (do-tracingmacros #t))) - -(define do-tracingcommands - (lambda (unconditional-set?) - (set! *tracingcommands?* - (or unconditional-set? (begin (get-equal-sign) (> (get-number) 0)))))) - -(define do-tracingmacros - (lambda (unconditional-set?) - (set! *tracingmacros?* - (or unconditional-set? (begin (get-equal-sign) (> (get-number) 0)))))) + (lambda () + (tex-def-count "\\tracingcommands" 1 #f) + (tex-def-count "\\tracingmacros" 1 #f))) (defstruct bport (port #f) (buffer '())) @@ -981,7 +911,7 @@ (define emit-newline (lambda () (newline *html*))) (define emit-visible-space - (lambda () (display "·" *html*))) + (lambda () (display "·" *html*))) (define invisible-space? (lambda (x) (eq? x *invisible-space*))) @@ -1023,16 +953,17 @@ (define ignorespaces (lambda () - (if (and (find-chardef #\space) (not *ignore-active-space?*)) - (when (= (the-count "\\TIIPobeyspacestrictly") 0) - (let ((c (snoop-actual-char))) - (cond ((eof-object? c) #t) ((char=? c #\newline) #t) (else #t)))) + (unless (and (find-chardef #\space) (not *ignore-active-space?*)) (let ((newline-active? (find-chardef #\newline)) (newline-already-read? #f)) (let loop () - (let ((c (snoop-actual-char))) + (let ((c (snoop-char))) + (when (eqv? c *return*) (set! c (snoop-actual-char))) (cond ((eof-object? c) #t) + ((invisible-space? c) + (get-char) + (unless *reading-control-sequence?* (loop))) ((char=? c #\newline) (cond (newline-active? #t) @@ -1096,9 +1027,15 @@ (cond ((eof-object? c) s) ((invisible-space? c) s) - ((char-alphabetic? c) (get-char) (loop (cons c s))) + ((char-tex-alphabetic? c) (get-char) (loop (cons c s))) (else - (unless (or *math-mode?* *not-processing?*) (ignorespaces)) + (unless (or + *math-mode?* + *not-processing?* + (eq? *tex-format* 'texinfo)) + (fluid-let + ((*reading-control-sequence?* #t)) + (ignorespaces))) s))))))) (else (string #\\ c)))))) @@ -1231,6 +1168,15 @@ s (substring s 1 n-1))))) +(define eat-alphanumeric-string + (lambda () + (ignorespaces) + (let loop () + (let ((c (snoop-actual-char))) + (when (or (char-alphabetic? c) (char-numeric? c)) + (get-actual-char) + (loop)))))) + (define get-filename (lambda (braced?) (ignorespaces) @@ -1342,6 +1288,7 @@ ((string=? x "\\sectiondnumber") (table-get *section-counters* (string->number (ungroup (get-token))) 0)) ((find-count x) => cadr) + ((find-dimen x) => cadr) (else (or (string->number (or (resolve-defs x) x))))))) (define get-number-or-false @@ -1366,21 +1313,15 @@ ((char-numeric? c) (get-integer 10)) (else #f))))) -(define get-number (lambda () (or (get-number-or-false) (terror 'get-number)))) +(define get-number + (lambda () + (or (get-number-or-false) (terror 'get-number "Missing number.")))) (define get-tex-char-spec (lambda () - (ignorespaces) - (case (snoop-actual-char) - ((#\`) - (get-actual-char) - (ignorespaces) - (if (char=? (snoop-actual-char) #\\) - (get-char-as-ctl-seq) - (get-actual-char))) - ((#\') (get-actual-char) (integer->char (get-integer 8))) - ((#\") (get-actual-char) (integer->char (get-integer 16))) - (else (integer->char (get-integer 10)))))) + (cond + ((get-number-or-false) => integer->char) + (else (terror 'get-tex-char-spec "not a char"))))) (define get-url (lambda () @@ -1478,41 +1419,48 @@ (loop (+ i 1) (cons c r))) (else (for-each toss-back-char r) #f)))))))) -(define eat-dimen - (lambda () - (get-equal-sign) - (fluid-let - ((*not-processing?* #t)) - (let loop ((first? #t)) - (ignorespaces) - (let ((c (snoop-actual-char))) - (cond - ((eof-object? c) 'done) - ((and (char=? c *esc-char*) first?) (get-ctl-seq)) - ((or (char-numeric? c) (char=? c #\.)) (get-real) (loop first?)) - ((or (char=? c #\') (char=? c #\")) (get-number) (loop first?)) - ((ormap eat-word '("+" "-")) (loop first?)) - ((ormap - eat-word - '("bp" - "cc" - "cm" - "dd" - "em" - "ex" - "filll" - "fill" - "fil" - "in" - "minus" - "mm" - "pc" - "plus" - "pt" - "sp" - "true")) - (loop #f)) - (else 'done))))))) +(define eat-skip-fluff + (lambda (full?) + (let ((go-ahead? #t)) + (cond + (full? (get-equal-sign)) + ((ormap eat-word '("plus" "minus")) #t) + (else (set! go-ahead? #f))) + (when go-ahead? + (fluid-let + ((*not-processing?* #t)) + (let loop ((first? full?)) + (ignorespaces) + (let ((c (snoop-actual-char))) + (cond + ((eof-object? c) 'done) + ((and (char=? c *esc-char*) first?) (get-ctl-seq)) + ((or (char-numeric? c) (char=? c #\.)) (get-real) (loop first?)) + ((or (char=? c #\') (char=? c #\")) (get-number) (loop first?)) + ((ormap eat-word '("+" "-")) (loop first?)) + ((ormap + eat-word + '("bp" + "cc" + "cm" + "dd" + "em" + "ex" + "filll" + "fill" + "fil" + "in" + "minus" + "mm" + "pc" + "plus" + "pt" + "sp" + "true")) + (loop #f)) + (else 'done))))))))) + +(define eat-dimen (lambda () (eat-skip-fluff #t))) (define eat-integer (lambda () @@ -1568,8 +1516,6 @@ (postludes '()) (aftergroups '())) -(set! *global-texframe* (make-texframe)) - (define *primitive-texframe* (make-texframe)) (define *math-primitive-texframe* (make-texframe)) @@ -1592,6 +1538,11 @@ (unless (null? ags) (toss-back-char *invisible-space*)) (for-each (lambda (ag) (ag)) ags)))) +(define perform-afterassignment + (lambda () + (let ((z *afterassignment*)) + (when z (set! *afterassignment* #f) (do-tex-ctl-seq z))))) + (define add-postlude-to-top-frame (lambda (p) (let ((fr (if (null? *tex-env*) *global-texframe* (car *tex-env*)))) @@ -1658,14 +1609,31 @@ (set!tdef.optarg d optarg) (set!tdef.thunk d thunk) (set!tdef.prim d prim) - (set!tdef.defer d defer)))) + (set!tdef.defer d defer)) + (perform-afterassignment))) (define tex-def-prim (lambda (prim thunk) (tex-def prim '() #f #f thunk prim #f *primitive-texframe*))) -(define tex-def-0arg - (lambda (cs expn fr) (tex-def cs '() expn #f #f #f #f fr))) +(define tex-def-0arg (lambda (cs expn) (tex-def cs '() expn #f #f #f #f #f))) + +(define find-def-0arg + (lambda (cs) (cond ((find-def cs) => tdef.expansion) (else #f)))) + +(define tex-gdef-0arg + (lambda (cs expn) (tex-def cs '() expn #f #f cs #f *global-texframe*))) + +(define tex-def-prim-0arg + (lambda (cs expn) (tex-def cs '() expn #f #f cs #f *primitive-texframe*))) + +(define get-0arg-expn (lambda (cs) (cond ((find-def cs) => tdef.expansion)))) + +(define tex2page-flag-value (lambda (cs) (string-ref (get-0arg-expn cs) 0))) + +(define tex2page-flag-boolean + (lambda (cs) + (not (memv (string-ref (get-0arg-expn cs) 0) '(#\0 #\f #\F #\n #\N))))) (define tex-let (lambda (lft rt frame) @@ -1691,8 +1659,8 @@ (tex-def name '() #f #f thunk name #f frame)))) (define tex-def-count - (lambda (name num global?) - (let ((frame (if global? *global-texframe* (top-texframe)))) + (lambda (name num g?) + (let ((frame (if g? *global-texframe* (top-texframe)))) (cond ((lassoc name (texframe.counts frame) string=?) => @@ -1700,11 +1668,12 @@ (else (set!texframe.counts frame - (cons (list name num) (texframe.counts frame)))))))) + (cons (list name num) (texframe.counts frame)))))) + (perform-afterassignment))) (define tex-def-toks - (lambda (name tokens global?) - (let ((frame (if global? *global-texframe* (top-texframe)))) + (lambda (name tokens g?) + (let ((frame (if g? *global-texframe* (top-texframe)))) (cond ((lassoc name (texframe.toks frame) string=?) => @@ -1712,24 +1681,29 @@ (else (set!texframe.toks frame - (cons (list name tokens) (texframe.toks frame)))))))) + (cons (list name tokens) (texframe.toks frame))))) + (perform-afterassignment)))) (define tex-def-dimen - (lambda (name global?) - (let ((frame (if global? *global-texframe* (top-texframe)))) + (lambda (name len g?) + (let ((frame (if g? *global-texframe* (top-texframe)))) (cond - ((lassoc name (texframe.dimens frame) string=?) #t) + ((lassoc name (texframe.dimens frame) string=?) + => + (lambda (c) (set-car! (cdr c) len))) (else (set!texframe.dimens frame - (cons (list name) (texframe.dimens frame)))))))) + (cons (list name len) (texframe.dimens frame))))) + (perform-afterassignment)))) (define tex-def-char (lambda (char argpat expansion frame) (unless frame (set! frame (top-texframe))) (let ((d (ensure-cdef char frame))) (set!cdef.argpat d argpat) - (set!cdef.expansion d expansion)))) + (set!cdef.expansion d expansion)) + (perform-afterassignment))) (define ensure-cdef (lambda (c f) @@ -1762,13 +1736,13 @@ (and x (let ((d (cdr x))) (and (cdef.active d) d)))))) (define do-defcsactive - (lambda (global?) + (lambda (g?) (ignorespaces) (let* ((cs (get-ctl-seq)) (c (string-ref cs 1)) (argpat (get-def-arguments c)) (rhs (ungroup (get-group))) - (f (and global? *global-texframe*))) + (f (and g? *global-texframe*))) (activate-cdef c) (tex-def-char c argpat rhs f)))) @@ -1803,16 +1777,24 @@ (define do-catcode (lambda () (let* ((c (get-tex-char-spec)) (val (begin (get-equal-sign) (get-number)))) - (if (= val 13) - (activate-cdef c) - (begin (deactivate-cdef c) (when (= val 0) (set! *esc-char* c))))))) + (set-catcode c val)))) + +(define set-catcode + (lambda (c val) + (unless (= val 13) (deactivate-cdef c)) + (unless (= val 11) (ldelete c *tex-extra-letters* char=?)) + (case val + ((0) (set! *esc-char* 0)) + ((11) (set! *tex-extra-letters* (cons c *tex-extra-letters*))) + ((13) (activate-cdef c))))) (define do-global (lambda () (ignorespaces) (let ((next (get-ctl-seq))) (cond - ((ormap (lambda (z) (string=? next z)) '("\\def" "\\edef")) (do-def #t)) + ((string=? next "\\def") (do-def #t #f)) + ((string=? next "\\edef") (do-def #t #t)) ((string=? next "\\let") (do-let #t)) ((string=? next "\\newcount") (do-newcount #t)) ((string=? next "\\newtoks") (do-newtoks #t)) @@ -1927,6 +1909,13 @@ (emit "
") (set! *in-para?* #t)))) +(define do-noindent + (lambda () + (do-end-para) + (emit-newline) + (emit "
")
+ (set! *in-para?* #t)))
+
(define do-maketitle
(lambda ()
(do-end-para)
@@ -1967,12 +1956,18 @@
(let ((x (get-ctl-seq)))
(cond
((string=? x "\\endcsname")
- (toss-back-char *invisible-space*)
+ (toss-back-char #\})
(for-each toss-back-string r)
+ (toss-back-char *esc-char*)
+ (toss-back-char #\{)
+ (toss-back-string "TIIPcsname")
(toss-back-char *esc-char*))
(else (loop (cons (expand-ctl-seq-into-string x) r))))))
(else (get-actual-char) (loop (cons (string c) r))))))))
+(define do-saved-csname
+ (lambda () (let ((x (get-peeled-group))) (do-tex-ctl-seq x))))
+
(define do-cssblock
(lambda ()
(fluid-let
@@ -2006,6 +2001,7 @@
(lambda (k v)
(if (and (> k seclvl) (> k 0))
(hash-table-put! *section-counters* k 0))))
+ (when (= seclvl 0) (set-gcount! "\\footnotenumber" 0))
(for-each
(lambda (counter-name)
(set!counter.value (table-get *dotted-counters* counter-name) 0))
@@ -2076,115 +2072,168 @@
((< secnumdepth -1) #f)
((> seclvl secnumdepth) #t)
(else #f))))
- (unnumbered? (or starred? too-deep?)))
- (if (<= seclvl 0) (do-eject))
+ (unnumbered? (or starred? too-deep?))
+ (header
+ (fluid-let
+ ((*tabular-stack* (list 'header)))
+ (tex-string->html-string (get-group)))))
+ (when (<= seclvl 0) (do-eject))
(increment-section-counter seclvl unnumbered?)
- (let* ((htmlnum
- (max 1 (min 6 (if *using-chapters?* (+ seclvl 1) seclvl))))
- (header (get-group))
- (lbl-val (if unnumbered? "IGNORE" (section-counter-value seclvl)))
- (lbl
- (string-append
- *html-node-prefix*
- (case seclvl ((-1) "part") ((0) "chap") (else "sec"))
- "_"
- (if unnumbered? (gen-temp-string) lbl-val))))
- (unless #f
- (tex-def-toks "\\TIIPrecentlabelname" lbl #f)
- (tex-def-toks "\\TIIPrecentlabelvalue" lbl-val #f))
- (do-end-para)
- (emit-anchor lbl)
- (emit-newline)
- (ignore-all-whitespace)
- (emit "
")
+ (emit-newline))
+ ((0)
+ (emit-newline)
+ (emit "
")
+ (emit-newline)))
+ (when write-to-toc?
+ (emit-page-node-link-start
+ *toc-page*
+ (string-append *html-node-prefix* "toc_" lbl)))
+ (unless (or (<= seclvl 0) unnumbered?) (emit lbl-val) (emit-nbsp 2))
+ (emit header)
+ (when write-to-toc? (emit-link-stop))
+ (emit "
") (lambda () (emit ""))) ((raggedleft) (do-end-para) (emit "
")
+ (set! *in-para?* #t))))
+
(define do-newline
(lambda () (when (>= (munch-newlines) 1) (do-para)) (emit-newline)))
@@ -2957,12 +3115,18 @@
(define do-rsquo
(lambda ()
(emit
- (if (not *ligatures?*)
- *html-rsquo*
+ (cond
+ (*math-mode?*
+ (let ((c (snoop-actual-char)))
+ (if (and (char? c) (char=? c #\'))
+ (begin (get-actual-char) "″")
+ "′")))
+ ((not *ligatures?*) *html-rsquo*)
+ (else
(let ((c (snoop-actual-char)))
(if (and (char? c) (char=? c #\'))
(begin (get-actual-char) *html-rdquo*)
- *html-rsquo*))))))
+ *html-rsquo*)))))))
(defstruct label (src #f) page name value)
@@ -3007,14 +3171,22 @@
(define emit-link-stop (lambda () (emit "")))
+(define do-anchor-for-potential-label
+ (lambda ()
+ (let ((node-name
+ (string-append *html-node-prefix* "anchor_" (gen-temp-string))))
+ (tex-def-0arg "\\TIIPcurrentnodename" node-name)
+ (emit-anchor node-name))))
+
(define do-label (lambda () (do-label-aux (get-label))))
(define do-node (lambda () (set! *recent-node-name* (get-peeled-group))))
(define do-label-aux
(lambda (label)
- (let ((name (get-toks "\\TIIPrecentlabelname"))
- (value (get-toks "\\TIIPrecentlabelvalue")))
+ (let ((name (find-def-0arg "\\TIIPcurrentnodename"))
+ (value (find-def-0arg "\\@currentlabel")))
+ (set! value (tex-string->html-string value))
(!label label *html-page-count* name value)
(write-label `(!label ,label ,*html-page-count* ,name ,value)))))
@@ -3052,12 +3224,22 @@
(lambda ()
(let ((tag-name (get-peeled-group))) (do-tag-aux tag-name (get-group)))))
+(define do-definexref
+ (lambda ()
+ (let* ((tag (get-peeled-group)) (value (get-group)) (class (get-token)))
+ (do-tag-aux tag value))))
+
+(define do-xrdef
+ (lambda ()
+ (let ((tag (get-peeled-group)))
+ (do-tag-aux tag (number->string *html-page-count*)))))
+
(define do-tag-aux
(lambda (tag-name tag-val)
(let ((node-name
(string-append *html-node-prefix* "tag_" (gen-temp-string))))
- (tex-def-toks "\\TIIPrecentlabelname" node-name #f)
- (tex-def-toks "\\TIIPrecentlabelvalue" tag-val #f)
+ (tex-def-0arg "\\TIIPcurrentnodename" node-name)
+ (tex-def-0arg "\\@currentlabel" tag-val)
(emit-anchor node-name)
(do-label-aux tag-name))))
@@ -3080,7 +3262,7 @@
(label-text
(cond
(link-text (tex-string->html-string link-text))
- (label-ref (tex-string->html-string (label.value label-ref)))
+ (label-ref (label.value label-ref))
(else label))))
(if label-ref
(emit-ext-page-node-link-start
@@ -3094,7 +3276,7 @@
(define maybe-label-page
(lambda (this-label-src this-label-pageno)
(if (and (not this-label-src) (= *html-page-count* this-label-pageno))
- "#"
+ ""
(string-append
(or this-label-src *jobname*)
(if (= this-label-pageno 0)
@@ -3294,6 +3476,17 @@
(tex2page-string link-text)
(emit-link-stop))))
+(define do-hlstart
+ (lambda ()
+ (let* ((cat (get-peeled-group)) (options (get-token)) (url (get-url)))
+ (when (string=? cat "url")
+ (emit-link-start (fully-qualify-url url))
+ (bgroup)
+ (tex-let "\\hlend" "\\TIIPhlend" #f))
+ (ignorespaces))))
+
+(define do-hlend (lambda () (egroup) (emit-link-stop)))
+
(define do-htmladdimg
(lambda ()
(let* ((align-info (get-bracketed-text-if-any))
@@ -3423,9 +3616,9 @@
(key (string-append "cite{" (get-peeled-group) "}"))
(node-name
(string-append *html-node-prefix* "bib_" bibitem-num-s)))
- (tex-def-toks "\\TIIPrecentlabelname" node-name #f)
+ (tex-def-0arg "\\TIIPcurrentnodename" node-name)
(unless bibmark (set! bibmark bibitem-num-s))
- (tex-def-toks "\\TIIPrecentlabelvalue" bibmark #f)
+ (tex-def-0arg "\\@currentlabel" bibmark)
(emit-anchor node-name)
(emit "[")
(tex2page-string bibmark)
@@ -3443,6 +3636,7 @@
(define do-index
(lambda ()
(let ((idx-entry (ungroup (get-group))))
+ (ignorespaces)
(unless (substring? "|)" idx-entry)
(set! *index-count* (+ *index-count* 2))
(!index *index-count* *html-page-count*)
@@ -3505,40 +3699,32 @@
(lambda ()
(bgroup)
(tex2page-string "\\let\\endtheindex\\egroup")
- (tex2page-string "\\let\\indexspace\\par")
+ (tex2page-string "\\let\\indexspace\\medskip")
(tex2page-string "\\let\\item\\indexitem")
(tex2page-string "\\let\\subitem\\indexsubitem")
(tex2page-string "\\let\\subsubitem\\indexsubsubitem")
(tex2page-string "\\let\\(\\expandhtmlindex")))
(define expand-html-index
- (lambda (item)
- (ignorespaces)
- (unless (char=? (get-actual-char) #\{)
- (terror 'expand-tex-macro "Missing {"))
- (let ((first-link? #t))
- (let loop ((i (if item 1 *remember-index-number*)))
- (cond
- ((get-csv)
- =>
- (lambda (s)
- (let* ((n (string->number s)) (pageno (table-get *index-table* n)))
- (cond
- (pageno
- (if first-link? (set! first-link? #f) (emit ", "))
- (emit-page-node-link-start
- pageno
- (string-append *html-node-prefix* "idx_" s))
- (if item
- (tex2page-string item)
- (begin (emit "[") (emit i) (emit "]")))
- (emit-link-stop))
- (else (trace-if #t "Bad index entry around " item)))
- (loop (+ i 1)))))
- (else (set! *remember-index-number* i)))))
- (unless (char=? (get-actual-char) #\})
- (terror 'expand-html-index "Missing }"))
- (ignorespaces)))
+ (lambda ()
+ (let* ((s (get-peeled-group))
+ (n (string->number s))
+ (pageno (table-get *index-table* n)))
+ (emit-page-node-link-start
+ pageno
+ (string-append *html-node-prefix* "idx_" s))
+ (emit pageno)
+ (cond
+ ((assv pageno *index-page-mention-alist*)
+ =>
+ (lambda (c)
+ (let ((n (+ 1 (cdr c))))
+ (emit (number->roman n #f))
+ (set-cdr! c n))))
+ (else
+ (set! *index-page-mention-alist*
+ (cons (cons pageno 1) *index-page-mention-alist*))))
+ (emit-link-stop))))
(define do-see-also
(lambda ()
@@ -3548,62 +3734,10 @@
(define do-indexitem
(lambda (indent)
+ (set! *index-page-mention-alist* '())
(emit "
")
(emit-newline)
- (emit-nbsp (* indent 4))
- (let loop ((s '()) (brace-nesting 0))
- (let ((c (snoop-actual-char)))
- (cond
- ((eof-object? c) (tex2page-string (list->string (reverse! s))))
- ((and (= brace-nesting 0) (char=? c *esc-char*))
- (let ((x (get-ctl-seq)))
- (cond
- ((or (string=? x "\\subitem") (string=? x "\\subsubitem"))
- (tex2page-string (list->string (reverse! s)))
- (toss-back-char *invisible-space*)
- (toss-back-string x))
- (else
- (let ((xr (reverse! (string->list x))))
- (loop
- (if (char-alphabetic? (car xr))
- (cons #\space (append xr s))
- (append xr s))
- brace-nesting))))))
- ((char=? c #\,)
- (get-actual-char)
- (if (char-whitespace? (snoop-actual-char))
- (begin
- (ignore-all-whitespace)
- (if (char=? (snoop-actual-char) *esc-char*)
- (let ((x (get-ctl-seq)))
- (cond
- ((string=? x "\\expandhtmlindex")
- (expand-html-index (list->string (reverse! s))))
- ((string=? x "\\see")
- (tex2page-string (list->string (reverse! s)))
- (emit ", see ")
- (tex2page-string (get-group))
- (get-group))
- ((string=? x "\\seealso")
- (tex2page-string (list->string (reverse! s)))
- (emit ", see also ")
- (tex2page-string (get-group))
- (get-group))
- (else
- (toss-back-char *invisible-space*)
- (toss-back-string x)
- (toss-back-char *invisible-space*)
- (loop (cons #\space (cons #\, s)) brace-nesting))))
- (loop (cons #\space (cons #\, s)) brace-nesting)))
- (loop (cons #\, s) brace-nesting)))
- (else
- (get-actual-char)
- (loop
- (cons c s)
- (cond
- ((char=? c #\{) (+ brace-nesting 1))
- ((char=? c #\}) (- brace-nesting 1))
- (else brace-nesting)))))))))
+ (emit-nbsp (* indent 4))))
(define do-description-item
(lambda ()
@@ -3659,12 +3793,18 @@
(define do-bigskip
(lambda (type)
- (do-para)
- (when (ormap (lambda (z) (string=? type z)) '("\\bigskip" "\\bigbreak"))
- (emit "
")
- (do-para)
- (emit "
"))
- (do-para)))
+ (do-end-para)
+ (emit "
") + (set! *in-para?* #t) + (emit-newline))) (define do-hspace (lambda () @@ -3678,7 +3818,7 @@ (ignorespaces) (if (eqv? (snoop-actual-char) #\*) (get-actual-char)) (get-group) - (do-bigskip "vspace"))) + (do-bigskip 'vspace))) (define do-htmlmathstyle (lambda () @@ -3690,16 +3830,9 @@ (let ((c (snoop-actual-char))) (unless (eof-object? c) (case (string->symbol (scm-get-token)) - ((image) - (set! *use-image-for-displayed-math?* #t) - (set! *use-image-for-intext-math?* #t)) - ((display-image) (set! *use-image-for-displayed-math?* #t)) - ((in-text-image) (set! *use-image-for-intext-math?* #t)) - ((no-image) - (set! *use-image-for-displayed-math?* #f) - (set! *use-image-for-intext-math?* #f)) - ((no-display-image) (set! *use-image-for-displayed-math?* #f)) - ((no-in-text-image) (set! *use-image-for-intext-math?* #f))) + ((image display-image) (tex-def-0arg "\\TZPmathimage" "1")) + ((no-image no-display-image) + (tex-def-0arg "\\TZPmathimage" "0"))) (loop)))))))) (define do-htmldoctype @@ -3724,33 +3857,85 @@ (define output-colophon (lambda () - (when (or *colophon-mentions-last-mod-time?* *colophon-mentions-tex2page?*) - (do-end-para) - (emit "
") (tex2page-string tex-string) (emit " |
^ |
| |