mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-03 22:01:36 +01:00 
			
		
		
		
	
		
			
	
	
		
			375 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			375 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								;; $Id$
							 | 
						||
| 
								 | 
							
								;;
							 | 
						||
| 
								 | 
							
								;; This file is part of the Modular DocBook Stylesheet distribution.
							 | 
						||
| 
								 | 
							
								;; See ../README or http://www.berkshire.net/~norm/dsssl/
							 | 
						||
| 
								 | 
							
								;;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								;; ................... INDEX TERMS (EMBEDDED MARKERS) ...................
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element indexterm 
							 | 
						||
| 
								 | 
							
								  (if html-index
							 | 
						||
| 
								 | 
							
								      (let* ((id (if (attribute-string (normalize "id"))
							 | 
						||
| 
								 | 
							
										     (attribute-string (normalize "id"))
							 | 
						||
| 
								 | 
							
										     (generate-anchor))))
							 | 
						||
| 
								 | 
							
									(make element gi: "A"
							 | 
						||
| 
								 | 
							
									      attributes: (list (list "NAME" id))
							 | 
						||
| 
								 | 
							
									      (empty-sosofo)))
							 | 
						||
| 
								 | 
							
								      (empty-sosofo)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element primary (empty-sosofo))
							 | 
						||
| 
								 | 
							
								(element secondary (empty-sosofo))
							 | 
						||
| 
								 | 
							
								(element tertiary (empty-sosofo))
							 | 
						||
| 
								 | 
							
								(element see (empty-sosofo))
							 | 
						||
| 
								 | 
							
								(element seealso (empty-sosofo))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								;; =========================== INDEX ELEMENTS ===========================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element (setindex title) (empty-sosofo))
							 | 
						||
| 
								 | 
							
								(element setindex
							 | 
						||
| 
								 | 
							
								  (let ((preamble (node-list-filter-by-not-gi 
							 | 
						||
| 
								 | 
							
										   (children (current-node))
							 | 
						||
| 
								 | 
							
										   (list (normalize "indexentry"))))
							 | 
						||
| 
								 | 
							
									(entries  (node-list-filter-by-gi
							 | 
						||
| 
								 | 
							
										   (children (current-node))
							 | 
						||
| 
								 | 
							
										   (list (normalize "indexentry")))))
							 | 
						||
| 
								 | 
							
								    (html-document 
							 | 
						||
| 
								 | 
							
								     (with-mode head-title-mode 
							 | 
						||
| 
								 | 
							
								       (literal (element-title-string (current-node))))
							 | 
						||
| 
								 | 
							
								     (make element gi: "DIV"
							 | 
						||
| 
								 | 
							
									   attributes: (list (list "CLASS" (gi)))
							 | 
						||
| 
								 | 
							
									   ($component-separator$)
							 | 
						||
| 
								 | 
							
									   ($component-title$)
							 | 
						||
| 
								 | 
							
									   (process-node-list preamble)
							 | 
						||
| 
								 | 
							
									   (if (node-list-empty? entries)
							 | 
						||
| 
								 | 
							
									       (empty-sosofo)
							 | 
						||
| 
								 | 
							
									       (make element gi: "DL"
							 | 
						||
| 
								 | 
							
										     (process-node-list entries)))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element (index title) (empty-sosofo))
							 | 
						||
| 
								 | 
							
								(element index 
							 | 
						||
| 
								 | 
							
								  (let ((preamble (node-list-filter-by-not-gi 
							 | 
						||
| 
								 | 
							
										   (children (current-node))
							 | 
						||
| 
								 | 
							
										   (list (normalize "indexentry"))))
							 | 
						||
| 
								 | 
							
									(entries  (node-list-filter-by-gi
							 | 
						||
| 
								 | 
							
										   (children (current-node))
							 | 
						||
| 
								 | 
							
										   (list (normalize "indexentry")))))
							 | 
						||
| 
								 | 
							
								    (html-document 
							 | 
						||
| 
								 | 
							
								     (with-mode head-title-mode 
							 | 
						||
| 
								 | 
							
								       (literal (element-title-string (current-node))))
							 | 
						||
| 
								 | 
							
								     (make element gi: "DIV"
							 | 
						||
| 
								 | 
							
									   attributes: (list (list "CLASS" (gi)))
							 | 
						||
| 
								 | 
							
									   ($component-separator$)
							 | 
						||
| 
								 | 
							
									   ($component-title$)
							 | 
						||
| 
								 | 
							
									   (process-node-list preamble)
							 | 
						||
| 
								 | 
							
									   (if (node-list-empty? entries)
							 | 
						||
| 
								 | 
							
									       (empty-sosofo)
							 | 
						||
| 
								 | 
							
									       (make element gi: "DL"
							 | 
						||
| 
								 | 
							
										     (process-node-list entries)))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element (indexdiv title) (empty-sosofo))
							 | 
						||
| 
								 | 
							
								(element indexdiv
							 | 
						||
| 
								 | 
							
								  (let ((preamble (node-list-filter-by-not-gi 
							 | 
						||
| 
								 | 
							
										   (children (current-node))
							 | 
						||
| 
								 | 
							
										   (list (normalize "indexentry"))))
							 | 
						||
| 
								 | 
							
									(entries  (node-list-filter-by-gi
							 | 
						||
| 
								 | 
							
										   (children (current-node))
							 | 
						||
| 
								 | 
							
										   (list (normalize "indexentry")))))
							 | 
						||
| 
								 | 
							
								    (html-document
							 | 
						||
| 
								 | 
							
								     (with-mode head-title-mode
							 | 
						||
| 
								 | 
							
								       (literal (element-title-string (current-node))))
							 | 
						||
| 
								 | 
							
								     (make element gi: "DIV"
							 | 
						||
| 
								 | 
							
									   attributes: (list (list "CLASS" (gi)))
							 | 
						||
| 
								 | 
							
									   ($section-separator$)
							 | 
						||
| 
								 | 
							
									   ($section-title$)
							 | 
						||
| 
								 | 
							
									   (process-node-list preamble)
							 | 
						||
| 
								 | 
							
									   (if (node-list-empty? entries)
							 | 
						||
| 
								 | 
							
									       (empty-sosofo)
							 | 
						||
| 
								 | 
							
									       (make element gi: "DL"
							 | 
						||
| 
								 | 
							
										     (process-node-list entries)))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (break-node-list nodes breakatgi)
							 | 
						||
| 
								 | 
							
								  ;; Given a _node_ list "PRIM SEC TERT SEC SEC TERT PRIM SEC PRIM PRIM"
							 | 
						||
| 
								 | 
							
								  ;; and the breakatgi of "PRIM", returns the _list_ of _node_ lists:
							 | 
						||
| 
								 | 
							
								  ;; '("PRIM SEC TERT SEC SEC TERT" "PRIM SEC" "PRIM" "PRIM")
							 | 
						||
| 
								 | 
							
								  (let loop ((nl nodes) (result '()) (curlist (empty-node-list)))
							 | 
						||
| 
								 | 
							
								    (if (node-list-empty? nl)
							 | 
						||
| 
								 | 
							
									(if (node-list-empty? curlist)
							 | 
						||
| 
								 | 
							
									    result
							 | 
						||
| 
								 | 
							
									    (append result (list curlist)))
							 | 
						||
| 
								 | 
							
									(if (equal? (gi (node-list-first nl)) breakatgi)
							 | 
						||
| 
								 | 
							
									    (loop (node-list-rest nl)
							 | 
						||
| 
								 | 
							
										  (if (node-list-empty? curlist)
							 | 
						||
| 
								 | 
							
										      result
							 | 
						||
| 
								 | 
							
										      (append result (list curlist)))
							 | 
						||
| 
								 | 
							
										  (node-list-first nl))
							 | 
						||
| 
								 | 
							
									    (loop (node-list-rest nl)
							 | 
						||
| 
								 | 
							
										  result
							 | 
						||
| 
								 | 
							
										  (node-list curlist (node-list-first nl)))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (process-primary primnode secnl)
							 | 
						||
| 
								 | 
							
								  (let ((see?     (equal? (gi (node-list-first secnl)) 
							 | 
						||
| 
								 | 
							
											  (normalize "seeie")))
							 | 
						||
| 
								 | 
							
									(seealso? (equal? (gi (node-list-first secnl))
							 | 
						||
| 
								 | 
							
											  (normalize "seealsoie")))
							 | 
						||
| 
								 | 
							
									(second   (break-node-list secnl (normalize "secondaryie"))))
							 | 
						||
| 
								 | 
							
								    (if (or see? seealso?)
							 | 
						||
| 
								 | 
							
									(process-terminal primnode secnl #t)
							 | 
						||
| 
								 | 
							
									(make sequence
							 | 
						||
| 
								 | 
							
									  (process-nonterminal primnode)
							 | 
						||
| 
								 | 
							
									  (if (node-list-empty? secnl)
							 | 
						||
| 
								 | 
							
									      (empty-sosofo)
							 | 
						||
| 
								 | 
							
									      (make element gi: "DD"
							 | 
						||
| 
								 | 
							
										    (make element gi: "DL"
							 | 
						||
| 
								 | 
							
											  (let sloop ((secs second))
							 | 
						||
| 
								 | 
							
											    (if (null? secs)
							 | 
						||
| 
								 | 
							
												(empty-sosofo)
							 | 
						||
| 
								 | 
							
												(make sequence
							 | 
						||
| 
								 | 
							
												  (let* ((nodes (car secs))
							 | 
						||
| 
								 | 
							
													 (sec   (node-list-first nodes))
							 | 
						||
| 
								 | 
							
													 (terts (node-list-rest nodes)))
							 | 
						||
| 
								 | 
							
												    (process-secondary sec terts))
							 | 
						||
| 
								 | 
							
												  (sloop (cdr secs))))))))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (process-secondary secnode tertnl)
							 | 
						||
| 
								 | 
							
								  (let ((see?     (equal? (gi (node-list-first tertnl))
							 | 
						||
| 
								 | 
							
											  (normalize "seeie")))
							 | 
						||
| 
								 | 
							
									(seealso? (equal? (gi (node-list-first tertnl))
							 | 
						||
| 
								 | 
							
											  (normalize "seealsoie")))
							 | 
						||
| 
								 | 
							
									(tert (break-node-list tertnl (normalize "tertiaryie"))))
							 | 
						||
| 
								 | 
							
								    (if (or see? seealso?)
							 | 
						||
| 
								 | 
							
									(process-terminal secnode tertnl)
							 | 
						||
| 
								 | 
							
									(make sequence
							 | 
						||
| 
								 | 
							
									  (process-nonterminal secnode)
							 | 
						||
| 
								 | 
							
									  (make element gi: "DD"
							 | 
						||
| 
								 | 
							
										(make element gi: "DL"
							 | 
						||
| 
								 | 
							
										      (let tloop ((terts tert))
							 | 
						||
| 
								 | 
							
											(if (null? terts)
							 | 
						||
| 
								 | 
							
											    (empty-sosofo)
							 | 
						||
| 
								 | 
							
											    (make sequence
							 | 
						||
| 
								 | 
							
											      (let* ((nodes (car terts))
							 | 
						||
| 
								 | 
							
												     (tert  (node-list-first nodes))
							 | 
						||
| 
								 | 
							
												     (sees  (node-list-rest nodes)))
							 | 
						||
| 
								 | 
							
												(process-tertiary tert sees))
							 | 
						||
| 
								 | 
							
											      (tloop (cdr terts)))))))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (process-tertiary tertnode seenl)
							 | 
						||
| 
								 | 
							
								  (process-terminal tertnode seenl))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (process-terminal node seenl #!optional (output-id #f))
							 | 
						||
| 
								 | 
							
								  (let ((id (attribute-string (normalize "id") (parent node))))
							 | 
						||
| 
								 | 
							
								    (make sequence
							 | 
						||
| 
								 | 
							
								      (make element gi: "DT"
							 | 
						||
| 
								 | 
							
									    (if id
							 | 
						||
| 
								 | 
							
										(make element gi: "A"
							 | 
						||
| 
								 | 
							
										      attributes: (list (list "NAME" id))
							 | 
						||
| 
								 | 
							
										      (empty-sosofo))
							 | 
						||
| 
								 | 
							
										(empty-sosofo))
							 | 
						||
| 
								 | 
							
									    (process-node-list node))
							 | 
						||
| 
								 | 
							
								      (if (node-list-empty? seenl)
							 | 
						||
| 
								 | 
							
									  (empty-sosofo)
							 | 
						||
| 
								 | 
							
									  (make element gi: "DD"
							 | 
						||
| 
								 | 
							
										(make element gi: "DL"
							 | 
						||
| 
								 | 
							
										      (let loop ((nl seenl))
							 | 
						||
| 
								 | 
							
											(if (node-list-empty? nl)
							 | 
						||
| 
								 | 
							
											    (empty-sosofo)
							 | 
						||
| 
								 | 
							
											    (make sequence
							 | 
						||
| 
								 | 
							
											      (make element gi: "DT"
							 | 
						||
| 
								 | 
							
												    (process-node-list 
							 | 
						||
| 
								 | 
							
												     (node-list-first nl)))
							 | 
						||
| 
								 | 
							
											      (loop (node-list-rest nl)))))))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (process-nonterminal node)
							 | 
						||
| 
								 | 
							
								  (make element gi: "DT"
							 | 
						||
| 
								 | 
							
									(process-node-list node)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element indexentry
							 | 
						||
| 
								 | 
							
								  (let* ((primary   (break-node-list (children (current-node))
							 | 
						||
| 
								 | 
							
												     (normalize "primaryie"))))
							 | 
						||
| 
								 | 
							
								    (make sequence
							 | 
						||
| 
								 | 
							
								      (let ploop ((prims primary))
							 | 
						||
| 
								 | 
							
									(if (null? prims)
							 | 
						||
| 
								 | 
							
									    (empty-sosofo)
							 | 
						||
| 
								 | 
							
									    (make sequence
							 | 
						||
| 
								 | 
							
									      (let* ((nodes (car prims))
							 | 
						||
| 
								 | 
							
										     (prim  (node-list-first nodes))
							 | 
						||
| 
								 | 
							
										     (secs  (node-list-rest nodes)))
							 | 
						||
| 
								 | 
							
										(process-primary prim secs))
							 | 
						||
| 
								 | 
							
									      (ploop (cdr prims))))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element primaryie (process-children))
							 | 
						||
| 
								 | 
							
								(element secondaryie (process-children))
							 | 
						||
| 
								 | 
							
								(element tertiaryie (process-children))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (indexentry-link nd)
							 | 
						||
| 
								 | 
							
								  (let* ((preferred (not (node-list-empty?
							 | 
						||
| 
								 | 
							
											  (select-elements (children (current-node))
							 | 
						||
| 
								 | 
							
													   (normalize "emphasis"))))))
							 | 
						||
| 
								 | 
							
								    (make element gi: "A"
							 | 
						||
| 
								 | 
							
									  attributes: (list (list "HREF" 
							 | 
						||
| 
								 | 
							
												  (attribute-string (normalize "url"))))
							 | 
						||
| 
								 | 
							
									  (process-children))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element (primaryie ulink)
							 | 
						||
| 
								 | 
							
								  (indexentry-link (current-node)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element (secondaryie ulink)
							 | 
						||
| 
								 | 
							
								  (indexentry-link (current-node)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element (tertiaryie ulink)
							 | 
						||
| 
								 | 
							
								  (indexentry-link (current-node)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element seeie 
							 | 
						||
| 
								 | 
							
								  (let ((linkend (attribute-string (normalize "linkend"))))
							 | 
						||
| 
								 | 
							
								      (if linkend
							 | 
						||
| 
								 | 
							
									  (make element gi: "A"
							 | 
						||
| 
								 | 
							
										attributes: (list (list "HREF" 
							 | 
						||
| 
								 | 
							
													(href-to (element-with-id linkend))))
							 | 
						||
| 
								 | 
							
										(literal (gentext-element-name (current-node)))
							 | 
						||
| 
								 | 
							
										(literal (gentext-label-title-sep (current-node)))
							 | 
						||
| 
								 | 
							
										(process-children))
							 | 
						||
| 
								 | 
							
									  (make sequence
							 | 
						||
| 
								 | 
							
									    (literal (gentext-element-name (current-node)))
							 | 
						||
| 
								 | 
							
									    (literal (gentext-label-title-sep (current-node)))
							 | 
						||
| 
								 | 
							
									    (process-children)))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(element seealsoie
							 | 
						||
| 
								 | 
							
								  (let* ((alinkends (attribute-string (normalize "linkends")))
							 | 
						||
| 
								 | 
							
									 (linkends  (if alinkends
							 | 
						||
| 
								 | 
							
											(split alinkends)
							 | 
						||
| 
								 | 
							
											'()))
							 | 
						||
| 
								 | 
							
									 (linkend   (if alinkends
							 | 
						||
| 
								 | 
							
											(car linkends)
							 | 
						||
| 
								 | 
							
											#f)))
							 | 
						||
| 
								 | 
							
								    (if linkend
							 | 
						||
| 
								 | 
							
									(make element gi: "A"
							 | 
						||
| 
								 | 
							
									      attributes: (list (list "HREF" 
							 | 
						||
| 
								 | 
							
												      (href-to (element-with-id linkend))))
							 | 
						||
| 
								 | 
							
									      (literal (gentext-element-name (current-node)))
							 | 
						||
| 
								 | 
							
									      (literal (gentext-label-title-sep (current-node)))
							 | 
						||
| 
								 | 
							
									      (process-children))
							 | 
						||
| 
								 | 
							
									(make sequence
							 | 
						||
| 
								 | 
							
									  (literal (gentext-element-name (current-node)))
							 | 
						||
| 
								 | 
							
									  (literal (gentext-label-title-sep (current-node)))
							 | 
						||
| 
								 | 
							
									  (process-children)))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								;; =====================HTML INDEX PROCESSING ==============================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (htmlnewline)
							 | 
						||
| 
								 | 
							
								  (make formatting-instruction data: "
"))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (htmlindexattr attr)
							 | 
						||
| 
								 | 
							
								  (if (attribute-string (normalize attr))
							 | 
						||
| 
								 | 
							
								      (make sequence
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: attr)
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: " ")
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: (attribute-string 
							 | 
						||
| 
								 | 
							
													    (normalize attr)))
							 | 
						||
| 
								 | 
							
									(htmlnewline))
							 | 
						||
| 
								 | 
							
								      (empty-sosofo)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (htmlindexterm)
							 | 
						||
| 
								 | 
							
								  (let* ((attr    (gi (current-node)))
							 | 
						||
| 
								 | 
							
									 (content (data (current-node)))
							 | 
						||
| 
								 | 
							
									 (string  (string-replace content "
" " "))
							 | 
						||
| 
								 | 
							
									 (sortas  (attribute-string (normalize "sortas"))))
							 | 
						||
| 
								 | 
							
								    (make sequence
							 | 
						||
| 
								 | 
							
								      (make formatting-instruction data: attr)
							 | 
						||
| 
								 | 
							
								      (if sortas
							 | 
						||
| 
								 | 
							
									  (make sequence
							 | 
						||
| 
								 | 
							
									    (make formatting-instruction data: "[")
							 | 
						||
| 
								 | 
							
									    (make formatting-instruction data: sortas)
							 | 
						||
| 
								 | 
							
									    (make formatting-instruction data: "]"))
							 | 
						||
| 
								 | 
							
									  (empty-sosofo))
							 | 
						||
| 
								 | 
							
								      (make formatting-instruction data: " ")
							 | 
						||
| 
								 | 
							
								      (make formatting-instruction data: string)
							 | 
						||
| 
								 | 
							
								      (htmlnewline))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (htmlindexzone zone)
							 | 
						||
| 
								 | 
							
								  (let loop ((idlist (split zone)))
							 | 
						||
| 
								 | 
							
								    (if (null? idlist)
							 | 
						||
| 
								 | 
							
									(empty-sosofo)
							 | 
						||
| 
								 | 
							
									(make sequence
							 | 
						||
| 
								 | 
							
									  (htmlindexzone1 (car idlist))
							 | 
						||
| 
								 | 
							
									  (loop (cdr idlist))))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(define (htmlindexzone1 id)
							 | 
						||
| 
								 | 
							
								  (let* ((target (ancestor-member (element-with-id id)
							 | 
						||
| 
								 | 
							
												  (append (book-element-list)
							 | 
						||
| 
								 | 
							
													  (division-element-list)
							 | 
						||
| 
								 | 
							
													  (component-element-list)
							 | 
						||
| 
								 | 
							
													  (section-element-list))))
							 | 
						||
| 
								 | 
							
									 (title  (string-replace (element-title-string target) "
" " ")))
							 | 
						||
| 
								 | 
							
								    (make sequence
							 | 
						||
| 
								 | 
							
								      (make formatting-instruction data: "ZONE ")
							 | 
						||
| 
								 | 
							
								      (make formatting-instruction data: (href-to target))
							 | 
						||
| 
								 | 
							
								      (htmlnewline)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      (make formatting-instruction data: "TITLE ")
							 | 
						||
| 
								 | 
							
								      (make formatting-instruction data: title)
							 | 
						||
| 
								 | 
							
								      (htmlnewline))))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								(mode htmlindex
							 | 
						||
| 
								 | 
							
								  ;; this mode is really just a hack to get at the root element
							 | 
						||
| 
								 | 
							
								  (root (process-children))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  (default 
							 | 
						||
| 
								 | 
							
								    (if (node-list=? (current-node) (sgml-root-element))
							 | 
						||
| 
								 | 
							
									(make entity
							 | 
						||
| 
								 | 
							
									  system-id: (html-entity-file html-index-filename)
							 | 
						||
| 
								 | 
							
									  (process-node-list (select-elements 
							 | 
						||
| 
								 | 
							
											      (descendants (current-node))
							 | 
						||
| 
								 | 
							
											      (normalize "indexterm"))))
							 | 
						||
| 
								 | 
							
									(empty-sosofo)))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  (element indexterm
							 | 
						||
| 
								 | 
							
								    (let* ((target (ancestor-member (current-node)
							 | 
						||
| 
								 | 
							
												    (append (book-element-list)
							 | 
						||
| 
								 | 
							
													    (division-element-list)
							 | 
						||
| 
								 | 
							
													    (component-element-list)
							 | 
						||
| 
								 | 
							
													    (section-element-list))))
							 | 
						||
| 
								 | 
							
									   (title  (string-replace (element-title-string target) "
" " ")))
							 | 
						||
| 
								 | 
							
								      (make sequence
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: "INDEXTERM ")
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: (href-to target))
							 | 
						||
| 
								 | 
							
									(htmlnewline)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: "INDEXPOINT ")
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: (href-to (current-node)))
							 | 
						||
| 
								 | 
							
									(htmlnewline)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: "TITLE ")
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: title)
							 | 
						||
| 
								 | 
							
									(htmlnewline)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									(htmlindexattr "scope")
							 | 
						||
| 
								 | 
							
									(htmlindexattr "significance")
							 | 
						||
| 
								 | 
							
									(htmlindexattr "class")
							 | 
						||
| 
								 | 
							
									(htmlindexattr "id")
							 | 
						||
| 
								 | 
							
									(htmlindexattr "startref")
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									(if (attribute-string (normalize "zone"))
							 | 
						||
| 
								 | 
							
									    (htmlindexzone (attribute-string (normalize "zone")))
							 | 
						||
| 
								 | 
							
									    (empty-sosofo))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									(process-children)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									(make formatting-instruction data: "/INDEXTERM")
							 | 
						||
| 
								 | 
							
									(htmlnewline))))
							 | 
						||
| 
								 | 
							
										    
							 | 
						||
| 
								 | 
							
								  (element primary
							 | 
						||
| 
								 | 
							
								    (htmlindexterm))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  (element secondary
							 | 
						||
| 
								 | 
							
								    (htmlindexterm))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  (element tertiary
							 | 
						||
| 
								 | 
							
								    (htmlindexterm))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  (element see
							 | 
						||
| 
								 | 
							
								    (htmlindexterm))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  (element seealso
							 | 
						||
| 
								 | 
							
								    (htmlindexterm))
							 | 
						||
| 
								 | 
							
								)
							 |