17dd7cddfSDavid du Colombier;; gsdoc.el 27dd7cddfSDavid du Colombier;; 37dd7cddfSDavid du Colombier;; GNU emacs (19.34) functions to help working with the HTML form of 47dd7cddfSDavid du Colombier;; Ghostscript documentation. 57dd7cddfSDavid du Colombier;; 67dd7cddfSDavid du Colombier;; Pete Kaiser 8 September 1998 V1.2 77dd7cddfSDavid du Colombier;; 2 December 1999 V1.3 Correct improper "--" to "==" 87dd7cddfSDavid du Colombier;; in HTML marker comments 97dd7cddfSDavid du Colombier;;============================================================ 107dd7cddfSDavid du Colombier;; One global key setting, which runs the function to bind some keys 117dd7cddfSDavid du Colombier;; locally -- presumably in a buffer containing HTML code. Plus that 127dd7cddfSDavid du Colombier;; function itself. 137dd7cddfSDavid du Colombier 147dd7cddfSDavid du Colombier(global-set-key [?\C-\S-k] 'gskeys) 157dd7cddfSDavid du Colombier 167dd7cddfSDavid du Colombier(defun gskeys () 177dd7cddfSDavid du Colombier 187dd7cddfSDavid du Colombier"Set the keys in this buffer to use with Ghostscript HTML docs." 197dd7cddfSDavid du Colombier 207dd7cddfSDavid du Colombier(interactive) 217dd7cddfSDavid du Colombier(local-set-key [?\C-\S-b] 'gs-bold) 227dd7cddfSDavid du Colombier(local-set-key [?\C-\S-c] 'gs-code) 237dd7cddfSDavid du Colombier(local-set-key [?\C-\S-e] 'gs-emphatic) 247dd7cddfSDavid du Colombier(local-set-key [?\C-\S-g] 'gs-get-anchor) 257dd7cddfSDavid du Colombier(local-set-key [?\C-\S-h] 'gs-href) 267dd7cddfSDavid du Colombier(local-set-key [?\C-\S-i] 'gs-italic) 277dd7cddfSDavid du Colombier(local-set-key [?\C-\S-m] 'gs-mailto) 287dd7cddfSDavid du Colombier(local-set-key [?\C-\S-n] 'gs-name) 297dd7cddfSDavid du Colombier(local-set-key [?\C-\S-p] 'gs-put-anchor) 307dd7cddfSDavid du Colombier(local-set-key [?\C-\S-q] 'gs-quote) 317dd7cddfSDavid du Colombier(local-set-key [?\C-\S-r] 'gs-row-of-table) 327dd7cddfSDavid du Colombier(local-set-key [?\C-\S-s] 'gs-selfref) 337dd7cddfSDavid du Colombier(local-set-key [?\C-\S-t] 'gs-table) 347dd7cddfSDavid du Colombier(local-set-key [?\C-\S-u] 'gs-tag) 357dd7cddfSDavid du Colombier(local-set-key [?\C-\S-x] 'gs-example) 367dd7cddfSDavid du Colombier) 377dd7cddfSDavid du Colombier 387dd7cddfSDavid du Colombier;;============================================================ 397dd7cddfSDavid du Colombier;; Each of these next few functions just wraps a region in a 407dd7cddfSDavid du Colombier;; <TAG>...</TAG>, or two nested tags. Where there are two, the first one 417dd7cddfSDavid du Colombier;; is inner. See the inner function ~gsregion. 427dd7cddfSDavid du Colombier 437dd7cddfSDavid du Colombier(defun gs-bold () "Make text strong (bold)." 447dd7cddfSDavid du Colombier(interactive) 457dd7cddfSDavid du Colombier(~gsregion "b")) 467dd7cddfSDavid du Colombier 477dd7cddfSDavid du Colombier(defun gs-code () "Make text strong code (bold TT)." 487dd7cddfSDavid du Colombier(interactive) 497dd7cddfSDavid du Colombier(~gsregion "tt") 507dd7cddfSDavid du Colombier(~gsregion "b")) 517dd7cddfSDavid du Colombier 527dd7cddfSDavid du Colombier(defun gs-emphatic () "Make text emphatic (bold italic)." 537dd7cddfSDavid du Colombier(interactive) 547dd7cddfSDavid du Colombier(~gsregion "em") 557dd7cddfSDavid du Colombier(~gsregion "b")) 567dd7cddfSDavid du Colombier 577dd7cddfSDavid du Colombier(defun gs-italic () "Make text italic." 587dd7cddfSDavid du Colombier(interactive) 597dd7cddfSDavid du Colombier(~gsregion "em")) 607dd7cddfSDavid du Colombier 617dd7cddfSDavid du Colombier;;============================================================ 627dd7cddfSDavid du Colombier 637dd7cddfSDavid du Colombier(defun gs-quote () 647dd7cddfSDavid du Colombier 657dd7cddfSDavid du Colombier"Indent a region with BLOCKQUOTE and separate it with empty lines from 667dd7cddfSDavid du Colombiersurrounding text." 677dd7cddfSDavid du Colombier 687dd7cddfSDavid du Colombier(interactive) 697dd7cddfSDavid du Colombier 707dd7cddfSDavid du Colombier(save-restriction (narrow-to-region (region-beginning) (region-end)) 717dd7cddfSDavid du Colombier (goto-char (point-min)) (insert "\n\n") 727dd7cddfSDavid du Colombier (push-mark (1+ (point-min)) t) 737dd7cddfSDavid du Colombier (goto-char (point-max)) 747dd7cddfSDavid du Colombier (~gsregion "blockquote") 757dd7cddfSDavid du Colombier (insert "\n\n") 767dd7cddfSDavid du Colombier ) 777dd7cddfSDavid du Colombier) 787dd7cddfSDavid du Colombier 797dd7cddfSDavid du Colombier;;============================================================ 807dd7cddfSDavid du Colombier 817dd7cddfSDavid du Colombier(defun gs-example () 827dd7cddfSDavid du Colombier 837dd7cddfSDavid du Colombier"Make an indented literatim example BLOCKQUOTE PRE and separate it with 847dd7cddfSDavid du Colombierempty lines from surrounding text." 857dd7cddfSDavid du Colombier 867dd7cddfSDavid du Colombier(interactive) 877dd7cddfSDavid du Colombier 887dd7cddfSDavid du Colombier(save-restriction (narrow-to-region (region-beginning) (region-end)) 897dd7cddfSDavid du Colombier (goto-char (point-min)) (insert "\n") 907dd7cddfSDavid du Colombier (push-mark (point-min) t) 917dd7cddfSDavid du Colombier (goto-char (point-max)) 927dd7cddfSDavid du Colombier (~gsregion "pre") 937dd7cddfSDavid du Colombier (~gsregion "blockquote") 947dd7cddfSDavid du Colombier (insert "\n") 957dd7cddfSDavid du Colombier ) 967dd7cddfSDavid du Colombier) 977dd7cddfSDavid du Colombier 987dd7cddfSDavid du Colombier;;============================================================ 997dd7cddfSDavid du Colombier 1007dd7cddfSDavid du Colombier(defun gs-get-anchor () 1017dd7cddfSDavid du Colombier 1027dd7cddfSDavid du Colombier"Beginning at the head of this line, pick up the next anchor name for later 1037dd7cddfSDavid du Colombieruse along with its HTML file name. This is useful when picking up an 1047dd7cddfSDavid du Colombieranchor name from a file in one buffer and using it in another buffer 1057dd7cddfSDavid du Colombiercontaining a different file." 1067dd7cddfSDavid du Colombier 1077dd7cddfSDavid du Colombier(interactive) 1087dd7cddfSDavid du Colombier 1097dd7cddfSDavid du Colombier;; From the beginning of this line find and pick up the next non-empty 1107dd7cddfSDavid du Colombier;; anchor, which might, of course not be right here -- though that's how it 1117dd7cddfSDavid du Colombier;; ought to be used, to pick up an anchor for immediate use. The regular 1127dd7cddfSDavid du Colombier;; expression picks up only the name itself. 1137dd7cddfSDavid du Colombier 1147dd7cddfSDavid du Colombier(beginning-of-line) 1157dd7cddfSDavid du Colombier(re-search-forward "<a name=\"?\\([^\">]+\\)\"?></a>" nil t) 1167dd7cddfSDavid du Colombier(setq gs-anchor (buffer-substring (match-beginning 1) (match-end 1))) 1177dd7cddfSDavid du Colombier 1187dd7cddfSDavid du Colombier;; Get the name of this buffer, treating it as the filename. 1197dd7cddfSDavid du Colombier 1207dd7cddfSDavid du Colombier(setq gs-anchor-file (buffer-name)) 1217dd7cddfSDavid du Colombier) 1227dd7cddfSDavid du Colombier 1237dd7cddfSDavid du Colombier;;============================================================ 1247dd7cddfSDavid du Colombier 1257dd7cddfSDavid du Colombier(defun gs-href () 1267dd7cddfSDavid du Colombier 1277dd7cddfSDavid du Colombier"Wrap a region in an empty link and leave point in the middle of the 1287dd7cddfSDavid du Colombieremptiness to write the link. Maybe some day read the URL and put it 1297dd7cddfSDavid du Colombierthere." 1307dd7cddfSDavid du Colombier 1317dd7cddfSDavid du Colombier(interactive) 1327dd7cddfSDavid du Colombier 1337dd7cddfSDavid du Colombier(save-restriction 1347dd7cddfSDavid du Colombier (narrow-to-region (region-beginning) (region-end)) 1357dd7cddfSDavid du Colombier (goto-char (point-min)) (insert "<a href=\"#\">") 1367dd7cddfSDavid du Colombier (setq HREF (- (point) 2)) 1377dd7cddfSDavid du Colombier (goto-char (point-max)) (insert "</a>") 1387dd7cddfSDavid du Colombier (goto-char HREF) 1397dd7cddfSDavid du Colombier ) 1407dd7cddfSDavid du Colombier) 1417dd7cddfSDavid du Colombier 1427dd7cddfSDavid du Colombier;;============================================================ 1437dd7cddfSDavid du Colombier 1447dd7cddfSDavid du Colombier(defun gs-mailto () 1457dd7cddfSDavid du Colombier 1467dd7cddfSDavid du Colombier"Turn an address into a proper \"mailto:\" visually bracketed with <>." 1477dd7cddfSDavid du Colombier 1487dd7cddfSDavid du Colombier(interactive) 1497dd7cddfSDavid du Colombier 1507dd7cddfSDavid du Colombier(save-restriction 1517dd7cddfSDavid du Colombier (narrow-to-region (region-beginning) (region-end)) 1527dd7cddfSDavid du Colombier (setq gs-address (buffer-substring (point-min) (point-max))) 1537dd7cddfSDavid du Colombier (goto-char (point-min)) (insert "<<a href=\"mailto:") 1547dd7cddfSDavid du Colombier (goto-char (point-max)) (insert "\">" gs-address "</a>>") 1557dd7cddfSDavid du Colombier ) 1567dd7cddfSDavid du Colombier) 1577dd7cddfSDavid du Colombier 1587dd7cddfSDavid du Colombier;;============================================================ 1597dd7cddfSDavid du Colombier 1607dd7cddfSDavid du Colombier(defun gs-tag (Tag) 1617dd7cddfSDavid du Colombier 1627dd7cddfSDavid du Colombier"Bracket a region with some arbitrary tag read from the minibuffer, leaving 1637dd7cddfSDavid du Colombierpoint right after the opening word of the opening tag, and the end of the 1647dd7cddfSDavid du Colombierregion at the end of the closing tag. Leaving point there makes it 1657dd7cddfSDavid du Colombierpossible, for instance, to enter additional matter in a <FONT> tag. Get to 1667dd7cddfSDavid du Colombierthe end of a region with ^x-^x." 1677dd7cddfSDavid du Colombier 1687dd7cddfSDavid du Colombier(interactive "*sTag: ") 1697dd7cddfSDavid du Colombier 1707dd7cddfSDavid du Colombier (~gsregion Tag) 1717dd7cddfSDavid du Colombier (exchange-point-and-mark) (forward-word 1) 1727dd7cddfSDavid du Colombier) 1737dd7cddfSDavid du Colombier 1747dd7cddfSDavid du Colombier;;============================================================ 1757dd7cddfSDavid du Colombier 1767dd7cddfSDavid du Colombier(defun gs-toc () 1777dd7cddfSDavid du Colombier 1787dd7cddfSDavid du Colombier"[Re]build the table of contents by picking up all the <Hn> lines and 1797dd7cddfSDavid du Colombierconverting them to properly indented <UL> entries, placing the TOC within 1807dd7cddfSDavid du Colombierthe standard TOC markers. Note that several of the original Ghostscript 1817dd7cddfSDavid du ColombierHTML files have hand-modified TOCs, so it's wise to check before running 1827dd7cddfSDavid du Colombierthis function. It can be run from anywhere within the HTML file. 1837dd7cddfSDavid du Colombier 1847dd7cddfSDavid du ColombierThis function relies on the specific format of the structure comments for 1857dd7cddfSDavid du Colombierthe table of contents, which are set by the g~marker function used in 1867dd7cddfSDavid du Colombierdefvars run when this package is loaded." 1877dd7cddfSDavid du Colombier 1887dd7cddfSDavid du Colombier(interactive) 1897dd7cddfSDavid du Colombier 1907dd7cddfSDavid du Colombier(setq g~html-buffer (buffer-name)) 1917dd7cddfSDavid du Colombier 1927dd7cddfSDavid du Colombier(save-restriction (save-excursion 1937dd7cddfSDavid du Colombier (widen) 1947dd7cddfSDavid du Colombier 1957dd7cddfSDavid du Colombier;; Since we're building the TOC, delete any current TOC. Locate the place 1967dd7cddfSDavid du Colombier;; for the TOC using the standard markers, deleting everything between the 1977dd7cddfSDavid du Colombier;; TOC-beginning and TOC-end markers. The new TOC is built entirely in the 1987dd7cddfSDavid du Colombier;; work buffer before being copied into the HTML buffer at that point. 1997dd7cddfSDavid du Colombier 2007dd7cddfSDavid du Colombier (goto-char (point-min)) 2017dd7cddfSDavid du Colombier (search-forward g~toc-begin nil t) 2027dd7cddfSDavid du Colombier (next-line 1) (beginning-of-line) (setq g~toc-insert (point)) 2037dd7cddfSDavid du Colombier (search-forward g~toc-end nil t) 2047dd7cddfSDavid du Colombier (beginning-of-line) (delete-region g~toc-insert (point)) 2057dd7cddfSDavid du Colombier 2067dd7cddfSDavid du Colombier;; Empty the work buffer by copying nothing into it. 2077dd7cddfSDavid du Colombier 2087dd7cddfSDavid du Colombier (copy-to-buffer gs-work-buffer 1 1) 2097dd7cddfSDavid du Colombier 2107dd7cddfSDavid du Colombier;; Now collect all the following header lines into a buffer to work on 2117dd7cddfSDavid du Colombier;; them. The later append-to-buffer needs point to be in the middle of the 2127dd7cddfSDavid du Colombier;; empty list, so go there before entering the work buffer. 2137dd7cddfSDavid du Colombier 2147dd7cddfSDavid du Colombier (save-excursion (while (re-search-forward "^<h[1-6][^>]*>" nil t) 2157dd7cddfSDavid du Colombier (beginning-of-line) (setq BOH (point)) 2167dd7cddfSDavid du Colombier (re-search-forward "</h[1-6]>\n" nil t) 2177dd7cddfSDavid du Colombier (append-to-buffer gs-work-buffer BOH (point)) 2187dd7cddfSDavid du Colombier )) 2197dd7cddfSDavid du Colombier (goto-char g~toc-insert) 2207dd7cddfSDavid du Colombier 2217dd7cddfSDavid du Colombier;; All the useful header lines should be in the work buffer now. 2227dd7cddfSDavid du Colombier 2237dd7cddfSDavid du Colombier (save-excursion 2247dd7cddfSDavid du Colombier (set-buffer gs-work-buffer) 2257dd7cddfSDavid du Colombier 2267dd7cddfSDavid du Colombier;; Formatting as list entries: insert <ul> when the level deepens and </ul> 2277dd7cddfSDavid du Colombier;; when it rises. 2287dd7cddfSDavid du Colombier 2297dd7cddfSDavid du Colombier (goto-char (point-min)) 2307dd7cddfSDavid du Colombier (while (search-forward "</a>" nil t) (replace-match "")) 2317dd7cddfSDavid du Colombier (goto-char (point-min)) 2327dd7cddfSDavid du Colombier (while (re-search-forward "</h[1-6]>" nil t) (replace-match "</a>")) 2337dd7cddfSDavid du Colombier (goto-char (point-min)) 2347dd7cddfSDavid du Colombier (while (re-search-forward "<a name=\"" nil t) (replace-match "<a href=\"#")) 2357dd7cddfSDavid du Colombier 2367dd7cddfSDavid du Colombier;; Change <h[1-6]> to <li>, inserting <ul>...</ul> as needed. Pick up the 2377dd7cddfSDavid du Colombier;; upmost level from the first header, usually <h1>, and save a copy to 2387dd7cddfSDavid du Colombier;; use to insert any terminating </ul>. 2397dd7cddfSDavid du Colombier 2407dd7cddfSDavid du Colombier (goto-char (point-min)) 2417dd7cddfSDavid du Colombier (re-search-forward "^<h\\([1-6]\\)[^>]*>" nil t) 2427dd7cddfSDavid du Colombier (setq First (string-to-number 2437dd7cddfSDavid du Colombier (buffer-substring (match-beginning 1) (match-end 1)))) 2447dd7cddfSDavid du Colombier (setq Previous First) 2457dd7cddfSDavid du Colombier (replace-match "<li>" t t) 2467dd7cddfSDavid du Colombier 2477dd7cddfSDavid du Colombier;; Got the first one, now handle the rest. 2487dd7cddfSDavid du Colombier 2497dd7cddfSDavid du Colombier (while (re-search-forward "^<h\\([1-6]\\)[^>]*>" nil t) 2507dd7cddfSDavid du Colombier (setq This (string-to-number 2517dd7cddfSDavid du Colombier (buffer-substring (match-beginning 1) (match-end 1)))) 2527dd7cddfSDavid du Colombier (setq Hold This) 2537dd7cddfSDavid du Colombier (replace-match "<li>" t t) (beginning-of-line) 2547dd7cddfSDavid du Colombier 2557dd7cddfSDavid du Colombier;; No point being too fancy with conditionals: the "while" statements here 2567dd7cddfSDavid du Colombier;; make at most one logically unnecessary test. 2577dd7cddfSDavid du Colombier 2587dd7cddfSDavid du Colombier (while (> This Previous) (insert "<ul>\n") (setq This (1- This))) 2597dd7cddfSDavid du Colombier (while (< This Previous) (insert "</ul>\n") (setq This (1+ This))) 2607dd7cddfSDavid du Colombier (setq Previous Hold) 2617dd7cddfSDavid du Colombier ) 2627dd7cddfSDavid du Colombier 2637dd7cddfSDavid du Colombier;; Done with the loop. Clean up by inserting at the end any </ul> needed 2647dd7cddfSDavid du Colombier;; to get back to the top level. 2657dd7cddfSDavid du Colombier 2667dd7cddfSDavid du Colombier (goto-char (point-max)) 2677dd7cddfSDavid du Colombier (while (> Previous First) (insert "</ul>\n") (setq Previous (1- Previous))) 2687dd7cddfSDavid du Colombier 2697dd7cddfSDavid du Colombier;; Finally add the trailing whitespace and leading whitespace and header line. 2707dd7cddfSDavid du Colombier 2717dd7cddfSDavid du Colombier (insert "</ul></blockquote>\n\n") 2727dd7cddfSDavid du Colombier (goto-char (point-min)) 2737dd7cddfSDavid du Colombier (insert "\n<h2>Table of contents</h2>\n\n<blockquote><ul>\n") 2747dd7cddfSDavid du Colombier 2757dd7cddfSDavid du Colombier;; The TOC is now entirely built in the work buffer. Move it to where it's 2767dd7cddfSDavid du Colombier;; supposed to be in the original buffer. 2777dd7cddfSDavid du Colombier 2787dd7cddfSDavid du Colombier (append-to-buffer g~html-buffer (point-min) (point-max)) 2797dd7cddfSDavid du Colombier ) 2807dd7cddfSDavid du Colombier )) 2817dd7cddfSDavid du Colombier) 2827dd7cddfSDavid du Colombier 2837dd7cddfSDavid du Colombier;;============================================================ 2847dd7cddfSDavid du Colombier 2857dd7cddfSDavid du Colombier(defun gs-name () 2867dd7cddfSDavid du Colombier 2877dd7cddfSDavid du Colombier"Insert a name anchor at point and leave point ready to enter the anchor's 2887dd7cddfSDavid du Colombiername. Anchors are always empty (that is, <a name=...></a>)." 2897dd7cddfSDavid du Colombier 2907dd7cddfSDavid du Colombier(interactive) 2917dd7cddfSDavid du Colombier 2927dd7cddfSDavid du Colombier(insert "<a name=\"\"></a>") 2937dd7cddfSDavid du Colombier(backward-char 6) 2947dd7cddfSDavid du Colombier) 2957dd7cddfSDavid du Colombier 2967dd7cddfSDavid du Colombier;;============================================================ 2977dd7cddfSDavid du Colombier 2987dd7cddfSDavid du Colombier(defun gs-put-anchor () 2997dd7cddfSDavid du Colombier 3007dd7cddfSDavid du Colombier"Insert around the current region the last anchor picked up with 3017dd7cddfSDavid du Colombiergs-get-anchor. This includes the HTML file name if the href is put in a 3027dd7cddfSDavid du Colombierfile other than the anchor." 3037dd7cddfSDavid du Colombier 3047dd7cddfSDavid du Colombier(interactive) 3057dd7cddfSDavid du Colombier 3067dd7cddfSDavid du Colombier(save-restriction 3077dd7cddfSDavid du Colombier (narrow-to-region (region-beginning) (region-end)) 3087dd7cddfSDavid du Colombier (goto-char (point-min)) 3097dd7cddfSDavid du Colombier (insert (concat 3107dd7cddfSDavid du Colombier "<a href=\"" 3117dd7cddfSDavid du Colombier 3127dd7cddfSDavid du Colombier;; Insert the filename (buffer name) picked up by gs-get-anchor only if 3137dd7cddfSDavid du Colombier;; this is a different buffer. 3147dd7cddfSDavid du Colombier 3157dd7cddfSDavid du Colombier (if (string-equal gs-anchor-file (buffer-name)) "" gs-anchor-file) 3167dd7cddfSDavid du Colombier 3177dd7cddfSDavid du Colombier;; And finish unconditionally with the specific anchor name. 3187dd7cddfSDavid du Colombier 3197dd7cddfSDavid du Colombier "#" gs-anchor "\">")) 3207dd7cddfSDavid du Colombier (goto-char (point-max)) (insert "</a>")) 3217dd7cddfSDavid du Colombier) 3227dd7cddfSDavid du Colombier 3237dd7cddfSDavid du Colombier;;============================================================ 3247dd7cddfSDavid du Colombier 3257dd7cddfSDavid du Colombier(defun gs-row-of-table () 3267dd7cddfSDavid du Colombier 3277dd7cddfSDavid du Colombier"Set up a row of a table from the line containing point. 3287dd7cddfSDavid du Colombier 3297dd7cddfSDavid du ColombierInsert the right things at beginning and end, and in between convert tab 3307dd7cddfSDavid du Colombierand \"|\" into column breaks with a nonbreaking space in between -- which 3317dd7cddfSDavid du Colombiermeans that no entry can contain a tab or \"|\". Format the HTML nicely 3327dd7cddfSDavid du Colombierfor readability. 3337dd7cddfSDavid du Colombier 3347dd7cddfSDavid du ColombierBetween each two substantive columns this function puts a column containing 3357dd7cddfSDavid du Colombiera single nonbreaking space to provide a visual break. Generally in the 3367dd7cddfSDavid du Colombierfirst row of a table those columns should be given enough NBSPs to make 3377dd7cddfSDavid du Colombierthe table look right on screen and when converted to text, but this has to 3387dd7cddfSDavid du Colombierbe done by hand." 3397dd7cddfSDavid du Colombier 3407dd7cddfSDavid du Colombier(interactive) 3417dd7cddfSDavid du Colombier 3427dd7cddfSDavid du Colombier(save-restriction 3437dd7cddfSDavid du Colombier (end-of-line) (setq EOL (point)) 3447dd7cddfSDavid du Colombier (beginning-of-line) (narrow-to-region (point) EOL) 3457dd7cddfSDavid du Colombier (insert "<tr valign=top>\t<td>") 3467dd7cddfSDavid du Colombier (while (re-search-forward "[|\t]" nil t) 3477dd7cddfSDavid du Colombier (replace-match "\n\t<td> \n\t<td>" t t)) 3487dd7cddfSDavid du Colombier (goto-char (point-max)) 3497dd7cddfSDavid du Colombier ) 3507dd7cddfSDavid du Colombier(next-line 1) (beginning-of-line) 3517dd7cddfSDavid du Colombier) 3527dd7cddfSDavid du Colombier 3537dd7cddfSDavid du Colombier;;============================================================ 3547dd7cddfSDavid du Colombier 3557dd7cddfSDavid du Colombier(defun gs-selfref () 3567dd7cddfSDavid du Colombier 3577dd7cddfSDavid du Colombier"Wrap an URL to make it its own link. This is useful for links that should 3587dd7cddfSDavid du Colombierbe visible when converted to text." 3597dd7cddfSDavid du Colombier 3607dd7cddfSDavid du Colombier(interactive) 3617dd7cddfSDavid du Colombier 3627dd7cddfSDavid du Colombier(save-restriction 3637dd7cddfSDavid du Colombier (narrow-to-region (region-beginning) (region-end)) 3647dd7cddfSDavid du Colombier (goto-char (point-min)) 3657dd7cddfSDavid du Colombier (if (not (looking-at "http:\\|ftp:")) (insert "http://")) 3667dd7cddfSDavid du Colombier (setq g~url (buffer-substring (point-min) (point-max))) 3677dd7cddfSDavid du Colombier (goto-char (point-min)) 3687dd7cddfSDavid du Colombier (insert "<a href=\"") 3697dd7cddfSDavid du Colombier (goto-char (point-max)) (insert "\">" g~url "</a>") 3707dd7cddfSDavid du Colombier ) 3717dd7cddfSDavid du Colombier) 3727dd7cddfSDavid du Colombier 3737dd7cddfSDavid du Colombier;;============================================================ 3747dd7cddfSDavid du Colombier 3757dd7cddfSDavid du Colombier(defun gs-table () 3767dd7cddfSDavid du Colombier 3777dd7cddfSDavid du Colombier"Set up an indented table around this region, leaving plenty of white space 3787dd7cddfSDavid du Colombieraround the table within the HTML. The number of columns in the table is 3797dd7cddfSDavid du Colombierhardcoded here as 3, so that number must be changed by hand if the table 3807dd7cddfSDavid du Colombierhas more than 3 columns. See gs-row-of-table for how rows are built: a 3817dd7cddfSDavid du Colombiertable with N visible columns generally has 2N-1 HTML columns, including the 3827dd7cddfSDavid du Colombiercolumns that provide vertical white space." 3837dd7cddfSDavid du Colombier 3847dd7cddfSDavid du Colombier(interactive) 3857dd7cddfSDavid du Colombier 3867dd7cddfSDavid du Colombier(save-restriction 3877dd7cddfSDavid du Colombier (narrow-to-region (region-beginning) (region-end)) 3887dd7cddfSDavid du Colombier (indent-rigidly (region-beginning) (region-end) -80) 3897dd7cddfSDavid du Colombier (goto-char (point-min)) 3907dd7cddfSDavid du Colombier (insert (concat 3917dd7cddfSDavid du Colombier "\n\n<blockquote><table cellpadding=0 cellspacing=0>\n" 3927dd7cddfSDavid du Colombier "<tr><th colspan=3 bgcolor=\"#CCCC00\"><hr><font size=\"+1\">XXXXXXXXXX</font><hr>\n" 3937dd7cddfSDavid du Colombier "<tr valign=bottom>\n" 3947dd7cddfSDavid du Colombier "\t<th align=left>\n" 3957dd7cddfSDavid du Colombier "\t<td> \n" 3967dd7cddfSDavid du Colombier "\t<th align=left>\n" 3977dd7cddfSDavid du Colombier "<tr>\t<td colspan=3><hr>\n" 3987dd7cddfSDavid du Colombier )) 3997dd7cddfSDavid du Colombier (goto-char (point-max)) 4007dd7cddfSDavid du Colombier (insert "</table></blockquote>\n") 4017dd7cddfSDavid du Colombier ) 4027dd7cddfSDavid du Colombier) 4037dd7cddfSDavid du Colombier 4047dd7cddfSDavid du Colombier;;============================================================ 4057dd7cddfSDavid du Colombier 4067dd7cddfSDavid du Colombier(defun gs-text-chars () 4077dd7cddfSDavid du Colombier 4087dd7cddfSDavid du Colombier"Prepare text for inclusion in HTML by converting \"&\", \"<\", and \">\" into 4097dd7cddfSDavid du Colombiertheir HTML special forms. The function acts from point to end-of-region or 4107dd7cddfSDavid du Colombierend-of-buffer, whichever comes first. 4117dd7cddfSDavid du Colombier 4127dd7cddfSDavid du ColombierThis function is NOT idempotent -- running it twice on the same text will 4137dd7cddfSDavid du Colombiercertainly do the wrong thing, unless at first the text contained none of 4147dd7cddfSDavid du Colombierthose characters." 4157dd7cddfSDavid du Colombier 4167dd7cddfSDavid du Colombier(interactive) 4177dd7cddfSDavid du Colombier(setq BEGIN (point)) 4187dd7cddfSDavid du Colombier 4197dd7cddfSDavid du Colombier;; Replace significant characters: "&", "<", and ">". 4207dd7cddfSDavid du Colombier 4217dd7cddfSDavid du Colombier(while (search-forward "&" nil t) (replace-match "&" t t)) 4227dd7cddfSDavid du Colombier 4237dd7cddfSDavid du Colombier(goto-char BEGIN) 4247dd7cddfSDavid du Colombier(while (search-forward "<" nil t) (replace-match "<" t t)) 4257dd7cddfSDavid du Colombier 4267dd7cddfSDavid du Colombier(goto-char BEGIN) 4277dd7cddfSDavid du Colombier(while (search-forward ">" nil t) (replace-match ">" t t)) 4287dd7cddfSDavid du Colombier 4297dd7cddfSDavid du Colombier(goto-char BEGIN) 4307dd7cddfSDavid du Colombier) 4317dd7cddfSDavid du Colombier 4327dd7cddfSDavid du Colombier;;============================================================ 4337dd7cddfSDavid du Colombier 4347dd7cddfSDavid du Colombier(defun gs-wrap-textfile () 4357dd7cddfSDavid du Colombier 4367dd7cddfSDavid du Colombier"Prepare a text file for inclusion between <pre> and </pre>, then put a 4377dd7cddfSDavid du Colombierheader and footer around it. One would generally run this function on a 4387dd7cddfSDavid du Colombierbuffer containing only an original text file; it is how the original 4397dd7cddfSDavid du Colombierhistory and news files were first prepared. At this point it's likely to 4407dd7cddfSDavid du Colombierbe most useful in preparing new sections for the news document." 4417dd7cddfSDavid du Colombier 4427dd7cddfSDavid du Colombier(interactive) 4437dd7cddfSDavid du Colombier 4447dd7cddfSDavid du Colombier(widen) 4457dd7cddfSDavid du Colombier 4467dd7cddfSDavid du Colombier;; First prepare the entire text by replacing special characters. 4477dd7cddfSDavid du Colombier 4487dd7cddfSDavid du Colombier(goto-char (point-min)) 4497dd7cddfSDavid du Colombier(gs-text-chars) 4507dd7cddfSDavid du Colombier 4517dd7cddfSDavid du Colombier;; At the end of the file, end as-is text and add the standard footer. 4527dd7cddfSDavid du Colombier 4537dd7cddfSDavid du Colombier(goto-char (point-max)) 4547dd7cddfSDavid du Colombier(backward-word 1) (next-line 1) (beginning-of-line) 4557dd7cddfSDavid du Colombier(delete-region (point) (point-max)) 4567dd7cddfSDavid du Colombier(insert "\n</pre>\n") 4577dd7cddfSDavid du Colombier(insert-file "Footer.htm") 4587dd7cddfSDavid du Colombier 4597dd7cddfSDavid du Colombier;; At the beginning of the file, begin as-is text and delete everything 4607dd7cddfSDavid du Colombier;; up to the identity string (if any), saving the identity string. 4617dd7cddfSDavid du Colombier 4627dd7cddfSDavid du Colombier(goto-char (point-min)) 4637dd7cddfSDavid du Colombier(insert "<pre>\n") (setq g~pre-point (point)) 4647dd7cddfSDavid du Colombier(setq g~ID " [No pre-existing ID] ") 465*593dc095SDavid du Colombier(if (re-search-forward "^\\$Id:\\( [^ ]+ \\)\\$" nil t) (progn 4667dd7cddfSDavid du Colombier (setq g~ID (buffer-substring (match-beginning 1) (match-end 1))) 4677dd7cddfSDavid du Colombier (next-line 1) (beginning-of-line) (delete-region g~pre-point (point)) 4687dd7cddfSDavid du Colombier )) 4697dd7cddfSDavid du Colombier 4707dd7cddfSDavid du Colombier;; Insert the standard header and fill in the identity string. 4717dd7cddfSDavid du Colombier 4727dd7cddfSDavid du Colombier(goto-char (point-min)) (insert-file "Header.htm") 4737dd7cddfSDavid du Colombier(goto-char (point-min)) (search-forward "<!--" nil t) 4747dd7cddfSDavid du Colombier(delete-horizontal-space) (insert g~ID) 4757dd7cddfSDavid du Colombier(search-forward "<pre>\n" nil t) 4767dd7cddfSDavid du Colombier) 4777dd7cddfSDavid du Colombier 4787dd7cddfSDavid du Colombier;;============================================================ 4797dd7cddfSDavid du Colombier 4807dd7cddfSDavid du Colombier(defun ~gsregion (Tag) 4817dd7cddfSDavid du Colombier 4827dd7cddfSDavid du Colombier"Tag a region, leaving point at its end and the region around the whole 4837dd7cddfSDavid du Colombierthing including the new surrounding tags; thus invoking this function twice 4847dd7cddfSDavid du Colombiersuccessively makes the first invocation the inner tags and the second the 4857dd7cddfSDavid du Colombierouter. 4867dd7cddfSDavid du Colombier 4877dd7cddfSDavid du ColombierNot intended for interactive use; for that use gs-tag, which gives a little 4887dd7cddfSDavid du Colombierbit of additional service." 4897dd7cddfSDavid du Colombier 4907dd7cddfSDavid du Colombier(interactive) 4917dd7cddfSDavid du Colombier 4927dd7cddfSDavid du Colombier(if (not (= 0 (length Tag))) (save-restriction 4937dd7cddfSDavid du Colombier (narrow-to-region (region-beginning) (region-end)) 4947dd7cddfSDavid du Colombier (goto-char (point-min)) (insert "<" Tag ">") 4957dd7cddfSDavid du Colombier (goto-char (point-max)) (insert "</" Tag ">") 4967dd7cddfSDavid du Colombier (push-mark (point-min) t) 4977dd7cddfSDavid du Colombier (goto-char (point-max)) 4987dd7cddfSDavid du Colombier ) 4997dd7cddfSDavid du Colombier ) 5007dd7cddfSDavid du Colombier) 5017dd7cddfSDavid du Colombier 5027dd7cddfSDavid du Colombier;;============================================================ 5037dd7cddfSDavid du Colombier 5047dd7cddfSDavid du Colombier(defun gs-structure () 5057dd7cddfSDavid du Colombier 5067dd7cddfSDavid du Colombier"For historical interest only: add structuring commentary to a Ghostscript 5077dd7cddfSDavid du ColombierHTML file. It's crude, but it did most of the work. Future files will 5087dd7cddfSDavid du Colombieracquire their structure through plagiarism, like any other code. 5097dd7cddfSDavid du Colombier 5107dd7cddfSDavid du ColombierNow they've all been structured, and this function was used to do it. The 5117dd7cddfSDavid du Colombierplacement of table-of-contents lines never worked, because most of the 5127dd7cddfSDavid du Colombierfiles didn't yet have TOCS. Now all files that should have TOCs have 5137dd7cddfSDavid du Colombierproperly placed markers, but that's history." 5147dd7cddfSDavid du Colombier 5157dd7cddfSDavid du Colombier(interactive) 5167dd7cddfSDavid du Colombier 5177dd7cddfSDavid du Colombier(setq g~thisfile (buffer-name)) 5187dd7cddfSDavid du Colombier 5197dd7cddfSDavid du Colombier(widen) 5207dd7cddfSDavid du Colombier(goto-char (point-min)) 5217dd7cddfSDavid du Colombier 5227dd7cddfSDavid du Colombier;; Replace the RCS $Id if one can be found in exactly the right format, and 5237dd7cddfSDavid du Colombier;; otherwise insert one just after the title, along with a warning message. 5247dd7cddfSDavid du Colombier 525*593dc095SDavid du Colombier(if (re-search-forward "<!-- $Id: *\\([^ ]*\\) $ -->" nil t) 5267dd7cddfSDavid du Colombier (progn 5277dd7cddfSDavid du Colombier (setq Original (buffer-substring (match-beginning 1) (match-end 1))) 5287dd7cddfSDavid du Colombier (replace-match g~thisfile t t nil 1) 5297dd7cddfSDavid du Colombier ) 5307dd7cddfSDavid du Colombier (progn 5317dd7cddfSDavid du Colombier (search-forward "</title>" nil t) (end-of-line) 532*593dc095SDavid du Colombier (insert (concat "\n<!-- $Id: " g~thisfile " $ -->")) 5337dd7cddfSDavid du Colombier (setq Original "(UNSET by gs-structure)") 5347dd7cddfSDavid du Colombier ) 5357dd7cddfSDavid du Colombier ) 5367dd7cddfSDavid du Colombier 5377dd7cddfSDavid du Colombier(end-of-line) 5387dd7cddfSDavid du Colombier(insert (concat "\n<!-- Originally: " Original " -->")) 5397dd7cddfSDavid du Colombier 5407dd7cddfSDavid du Colombier;; Place the visible header marker immediately after <BODY>. 5417dd7cddfSDavid du Colombier 5427dd7cddfSDavid du Colombier(re-search-forward "<body[^>]*>" nil t) 5437dd7cddfSDavid du Colombier (end-of-line) (forward-char 1) 5447dd7cddfSDavid du Colombier (insert (concat g~header-begin "\n\n")) 5457dd7cddfSDavid du Colombier 5467dd7cddfSDavid du Colombier;; Place the headline marker before the first <table> block. 5477dd7cddfSDavid du Colombier 5487dd7cddfSDavid du Colombier(search-forward "<table" nil t) (search-backward "\n\n" nil t) 5497dd7cddfSDavid du Colombier (forward-word 1) (beginning-of-line) 5507dd7cddfSDavid du Colombier (insert (concat g~headline-begin "\n\n")) 5517dd7cddfSDavid du Colombier 5527dd7cddfSDavid du Colombier;; After the first table block place the end-headline marker and both 5537dd7cddfSDavid du Colombier;; table-of-contents markers, without worrying where the table of contents 5547dd7cddfSDavid du Colombier;; really is. The TOC markers can easily be moved by hand later. 5557dd7cddfSDavid du Colombier 5567dd7cddfSDavid du Colombier(search-forward "\n\n" nil t) 5577dd7cddfSDavid du Colombier (backward-word 1) (end-of-line) (forward-char 1) 5587dd7cddfSDavid du Colombier (insert (concat 5597dd7cddfSDavid du Colombier "\n" 5607dd7cddfSDavid du Colombier g~headline-end "\n\n" 5617dd7cddfSDavid du Colombier g~toc-begin "\n\n" 5627dd7cddfSDavid du Colombier g~toc-end "\n\n")) 5637dd7cddfSDavid du Colombier 5647dd7cddfSDavid du Colombier;; The hints section begins with the first paragraph after where the TOC 5657dd7cddfSDavid du Colombier;; markers are placed, and ends with <HR>. This isn't precise, and in fact 5667dd7cddfSDavid du Colombier;; fails for several files, but once again only an approximation is needed 5677dd7cddfSDavid du Colombier;; because it'll be edited by hand later. 5687dd7cddfSDavid du Colombier 5697dd7cddfSDavid du Colombier(search-forward "<p>" nil t) (beginning-of-line) 5707dd7cddfSDavid du Colombier (insert (concat g~hint-begin "\n\n")) 5717dd7cddfSDavid du Colombier 5727dd7cddfSDavid du Colombier(search-forward "<hr>" nil t) (beginning-of-line) 5737dd7cddfSDavid du Colombier (insert (concat g~hint-end "\n\n")) 5747dd7cddfSDavid du Colombier 5757dd7cddfSDavid du Colombier;; The visible header ends with (and includes) the first <HR>, and the 5767dd7cddfSDavid du Colombier;; contents begin immediately thereafter. 5777dd7cddfSDavid du Colombier 5787dd7cddfSDavid du Colombier(search-forward "<hr>\n" nil t) 5797dd7cddfSDavid du Colombier (insert (concat "\n" g~header-end "\n\n")) 5807dd7cddfSDavid du Colombier 5817dd7cddfSDavid du Colombier(forward-word 1) (beginning-of-line) 5827dd7cddfSDavid du Colombier (insert (concat g~contents-begin "\n\n")) 5837dd7cddfSDavid du Colombier 5847dd7cddfSDavid du Colombier;; The contents end before the final <HR> and the trailer begins 5857dd7cddfSDavid du Colombier;; immediately thereafter. 5867dd7cddfSDavid du Colombier 5877dd7cddfSDavid du Colombier(goto-char (point-max)) (search-backward "<hr>" nil t) 5887dd7cddfSDavid du Colombier (backward-word 1) (end-of-line) (forward-char 1) 5897dd7cddfSDavid du Colombier (insert (concat 5907dd7cddfSDavid du Colombier "\n" 5917dd7cddfSDavid du Colombier g~contents-end "\n\n" 5927dd7cddfSDavid du Colombier g~trailer-begin "\n\n")) 5937dd7cddfSDavid du Colombier 5947dd7cddfSDavid du Colombier;; The trailer ends with </BODY>. 5957dd7cddfSDavid du Colombier 5967dd7cddfSDavid du Colombier(goto-char (point-max)) (search-backward "</body>" nil t) 5977dd7cddfSDavid du Colombier (insert (concat "\n" g~trailer-end "\n\n")) 5987dd7cddfSDavid du Colombier 5997dd7cddfSDavid du Colombier;; We may have introduced trailing whitespace and extra empty lines. 6007dd7cddfSDavid du Colombier;; Remove them. 6017dd7cddfSDavid du Colombier 6027dd7cddfSDavid du Colombier(goto-char (point-min)) 6037dd7cddfSDavid du Colombier(while (re-search-forward "[ \t\240\r]+$" nil t) (replace-match "" t t)) 6047dd7cddfSDavid du Colombier(goto-char (point-min)) 6057dd7cddfSDavid du Colombier(while (re-search-forward "\n\n\n+" nil t) (replace-match "\n\n" t t)) 6067dd7cddfSDavid du Colombier 6077dd7cddfSDavid du Colombier) 6087dd7cddfSDavid du Colombier 6097dd7cddfSDavid du Colombier;;============================================================ 6107dd7cddfSDavid du Colombier;; When this file is loaded into emacs, define the structure markers for GS 6117dd7cddfSDavid du Colombier;; HTML files. These markers have two purposes: first, to make the HTML 6127dd7cddfSDavid du Colombier;; more readable, and second, to enable these functions to locate sections 6137dd7cddfSDavid du Colombier;; unambiguously (see gs-toc, the table of contents builder). Note that 6147dd7cddfSDavid du Colombier;; the markers do not include LF. 6157dd7cddfSDavid du Colombier 6167dd7cddfSDavid du Colombier(defun g~marker (basic) 6177dd7cddfSDavid du Colombier 6187dd7cddfSDavid du Colombier"Build a complete Ghostscript HTML file marker from its text-only part. 6197dd7cddfSDavid du Colombiergs-toc relies entirely on this function, so if it's ever changed, gs-toc 6207dd7cddfSDavid du Colombierand existing markers would also have to be changed to keep pace. 6217dd7cddfSDavid du Colombier 6227dd7cddfSDavid du ColombierIntended only for initialization, not interactive use. 6237dd7cddfSDavid du Colombier 6247dd7cddfSDavid du ColombierAll the existing files are now marked up, and since any future ones are 6257dd7cddfSDavid du Colombier(properly) likely to be created by plagiarism, it's difficult to imagine 6267dd7cddfSDavid du Colombierwhy anyone would want to change this unless they want to go to the trouble 6277dd7cddfSDavid du Colombierof coming up with a much more useful marking scheme." 6287dd7cddfSDavid du Colombier 6297dd7cddfSDavid du Colombier(interactive) 6307dd7cddfSDavid du Colombier 6317dd7cddfSDavid du Colombier(setq HEAD (concat "<!-- [" basic "] ")) 6327dd7cddfSDavid du Colombier(concat HEAD 6337dd7cddfSDavid du Colombier (substring 6347dd7cddfSDavid du Colombier "====================================================================== -->" 6357dd7cddfSDavid du Colombier (- (length HEAD) 80) 6367dd7cddfSDavid du Colombier )) 6377dd7cddfSDavid du Colombier) 6387dd7cddfSDavid du Colombier 6397dd7cddfSDavid du Colombier;;============================================================ 6407dd7cddfSDavid du Colombier;; Initialization code that must run after functions are defined. 6417dd7cddfSDavid du Colombier;; 6427dd7cddfSDavid du Colombier;; Look in a Ghostscript HTML file to see how these markers are used, 6437dd7cddfSDavid du Colombier;; generally 6447dd7cddfSDavid du Colombier;; 6457dd7cddfSDavid du Colombier;; begin visible header 6467dd7cddfSDavid du Colombier;; begin headline 6477dd7cddfSDavid du Colombier;; end headline 6487dd7cddfSDavid du Colombier;; begin table of contents 6497dd7cddfSDavid du Colombier;; end table of contents 6507dd7cddfSDavid du Colombier;; begin hint 6517dd7cddfSDavid du Colombier;; end hint 6527dd7cddfSDavid du Colombier;; end visible header 6537dd7cddfSDavid du Colombier;; begin contents 6547dd7cddfSDavid du Colombier;; end contents 6557dd7cddfSDavid du Colombier;; begin visible trailer 6567dd7cddfSDavid du Colombier;; end visible trailer 6577dd7cddfSDavid du Colombier;; 6587dd7cddfSDavid du Colombier;; although the TOC is in slightly different positions in a few files. 6597dd7cddfSDavid du Colombier 6607dd7cddfSDavid du Colombier(defvar g~header-begin (g~marker "1.0 begin visible header") 6617dd7cddfSDavid du Colombier "Begin the HTML file's visible header material") 6627dd7cddfSDavid du Colombier 6637dd7cddfSDavid du Colombier(defvar g~header-end (g~marker "1.0 end visible header") 6647dd7cddfSDavid du Colombier "End the HTML file's visible header") 6657dd7cddfSDavid du Colombier 6667dd7cddfSDavid du Colombier(defvar g~headline-begin (g~marker "1.1 begin headline") 6677dd7cddfSDavid du Colombier "Begin the conspicuous headline") 6687dd7cddfSDavid du Colombier 6697dd7cddfSDavid du Colombier(defvar g~headline-end (g~marker "1.1 end headline") 6707dd7cddfSDavid du Colombier "End the conspicuous headline") 6717dd7cddfSDavid du Colombier 6727dd7cddfSDavid du Colombier(defvar g~toc-begin (g~marker "1.2 begin table of contents") 6737dd7cddfSDavid du Colombier "Begin the table of contents") 6747dd7cddfSDavid du Colombier 6757dd7cddfSDavid du Colombier(defvar g~toc-end (g~marker "1.2 end table of contents") 6767dd7cddfSDavid du Colombier "End the table of contents") 6777dd7cddfSDavid du Colombier 6787dd7cddfSDavid du Colombier(defvar g~hint-begin (g~marker "1.3 begin hint") 6797dd7cddfSDavid du Colombier "Begin the \"for other information\" section") 6807dd7cddfSDavid du Colombier 6817dd7cddfSDavid du Colombier(defvar g~hint-end (g~marker "1.3 end hint") 6827dd7cddfSDavid du Colombier "End the \"for other information\" section") 6837dd7cddfSDavid du Colombier 6847dd7cddfSDavid du Colombier(defvar g~contents-begin (g~marker "2.0 begin contents") 6857dd7cddfSDavid du Colombier "Begin the main contents") 6867dd7cddfSDavid du Colombier 6877dd7cddfSDavid du Colombier(defvar g~contents-end (g~marker "2.0 end contents") 6887dd7cddfSDavid du Colombier "End the main contents") 6897dd7cddfSDavid du Colombier 6907dd7cddfSDavid du Colombier(defvar g~trailer-begin (g~marker "3.0 begin visible trailer") 6917dd7cddfSDavid du Colombier "Begin the visible standard trailer material") 6927dd7cddfSDavid du Colombier 6937dd7cddfSDavid du Colombier(defvar g~trailer-end (g~marker "3.0 end visible trailer") 6947dd7cddfSDavid du Colombier "End the visible standard trailer material") 6957dd7cddfSDavid du Colombier 6967dd7cddfSDavid du Colombier;;============================================================ 6977dd7cddfSDavid du Colombier;; Some working variables 6987dd7cddfSDavid du Colombier 6997dd7cddfSDavid du Colombier(defvar gs-anchor "JUNK" "*Anchor name to insert") 7007dd7cddfSDavid du Colombier(defvar gs-anchor-file "JUNKFILE" "*Anchor filename to insert") 7017dd7cddfSDavid du Colombier(defvar gs-work-buffer "*GS work*" "*Ghostscript working buffer") 702