1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-03 10:31:37 -08:00

Fix typos and remove superfluous backslash-quoting in htmlfontify.el.

* htmlfontify.el (htmlfontify-load-rgb-file)
  (htmlfontify-unload-rgb-file, hfy-fallback-colour-values)
  (htmlfontify-manual, htmlfontify, hfy-page-header, hfy-page-footer)
  (hfy-src-doc-link-style, hfy-src-doc-link-unstyle, hfy-link-extn)
  (hfy-link-style-fun, hfy-index-file, hfy-instance-file)
  (hfy-html-quote-regex, hfy-init-kludge-hook, hfy-post-html-hooks)
  (hfy-default-face-def, hfy-etag-regex, hfy-html-quote-map)
  (hfy-etags-cmd-alist-default, hfy-etags-bin, hfy-ignored-properties)
  (hfy-which-etags, hfy-etags-cmd, hfy-istext-command, hfy-display-class)
  (hfy-optimisations, hfy-tags-cache, hfy-tags-sortl, hfy-tags-rmap)
  (hfy-style-assoc, hfy-sheet-assoc, hfy-facemap-assoc, hfy-interq)
  (hfy-colour-vals, hfy-default-header, hfy-link-style-string)
  (hfy-triplet, hfy-slant, hfy-weight, hfy-combined-face-spec)
  (hfy-face-attr-for-class, hfy-face-to-style-i, hfy-size-to-int)
  (hfy-flatten-style, hfy-face-to-style, hfy-face-or-def-to-name)
  (hfy-face-to-css, hfy-p-to-face, hfy-p-to-face-lennart, hfy-face-at)
  (hfy-fontified-p, hfy-merge-adjacent-spans, hfy-buffer)
  (hfy-html-enkludge-buffer, hfy-html-quote, hfy-html-dekludge-buffer)
  (hfy-force-fontification, htmlfontify-buffer, hfy-dirname)
  (hfy-make-directory, hfy-text-p, hfy-mark-tag-names, hfy-relstub)
  (hfy-href-stub, hfy-href, hfy-mark-tag-hrefs, hfy-prepare-index-i)
  (hfy-prepare-index, hfy-prepare-tag-map, hfy-subtract-maps)
  (htmlfontify-run-etags): Fix typos in docstrings and remove superfluous
  backslash-quoting from parentheses, etc.
This commit is contained in:
Juanma Barranquero 2010-01-11 18:26:28 +01:00
parent 92b1c41682
commit 30afcdfffd
2 changed files with 243 additions and 217 deletions

View file

@ -1,3 +1,30 @@
2010-01-11 Juanma Barranquero <lekktu@gmail.com>
* htmlfontify.el (htmlfontify-load-rgb-file)
(htmlfontify-unload-rgb-file, hfy-fallback-colour-values)
(htmlfontify-manual, htmlfontify, hfy-page-header, hfy-page-footer)
(hfy-src-doc-link-style, hfy-src-doc-link-unstyle, hfy-link-extn)
(hfy-link-style-fun, hfy-index-file, hfy-instance-file)
(hfy-html-quote-regex, hfy-init-kludge-hook, hfy-post-html-hooks)
(hfy-default-face-def, hfy-etag-regex, hfy-html-quote-map)
(hfy-etags-cmd-alist-default, hfy-etags-bin, hfy-ignored-properties)
(hfy-which-etags, hfy-etags-cmd, hfy-istext-command, hfy-display-class)
(hfy-optimisations, hfy-tags-cache, hfy-tags-sortl, hfy-tags-rmap)
(hfy-style-assoc, hfy-sheet-assoc, hfy-facemap-assoc, hfy-interq)
(hfy-colour-vals, hfy-default-header, hfy-link-style-string)
(hfy-triplet, hfy-slant, hfy-weight, hfy-combined-face-spec)
(hfy-face-attr-for-class, hfy-face-to-style-i, hfy-size-to-int)
(hfy-flatten-style, hfy-face-to-style, hfy-face-or-def-to-name)
(hfy-face-to-css, hfy-p-to-face, hfy-p-to-face-lennart, hfy-face-at)
(hfy-fontified-p, hfy-merge-adjacent-spans, hfy-buffer)
(hfy-html-enkludge-buffer, hfy-html-quote, hfy-html-dekludge-buffer)
(hfy-force-fontification, htmlfontify-buffer, hfy-dirname)
(hfy-make-directory, hfy-text-p, hfy-mark-tag-names, hfy-relstub)
(hfy-href-stub, hfy-href, hfy-mark-tag-hrefs, hfy-prepare-index-i)
(hfy-prepare-index, hfy-prepare-tag-map, hfy-subtract-maps)
(htmlfontify-run-etags): Fix typos in docstrings and remove superfluous
backslash-quoting from parentheses, etc.
2010-01-11 Chong Yidong <cyd@stupidchicken.com> 2010-01-11 Chong Yidong <cyd@stupidchicken.com>
* progmodes/js.el: Autoload javascript-mode alias. * progmodes/js.el: Autoload javascript-mode alias.

View file

@ -107,19 +107,19 @@
(autoload (autoload
'htmlfontify-load-rgb-file 'htmlfontify-load-rgb-file
"hfy-cmap" "hfy-cmap"
"Load an rgb.txt file for colour name -> rgb translation purposes." "Load an rgb.txt file for color name -> rgb translation purposes."
'interactive) 'interactive)
(autoload (autoload
'htmlfontify-unload-rgb-file 'htmlfontify-unload-rgb-file
"hfy-cmap" "hfy-cmap"
"Unload the current colour name -> rgb translation map." "Unload the current color name -> rgb translation map."
'interactive) 'interactive)
(autoload (autoload
'hfy-fallback-colour-values 'hfy-fallback-colour-values
"hfy-cmap" "hfy-cmap"
"Use a fallback method for obtaining the rgb values for a colour." "Use a fallback method for obtaining the rgb values for a color."
'interactive) 'interactive)
) )
@ -131,8 +131,8 @@
"The generator meta tag for this version of htmlfontify.") "The generator meta tag for this version of htmlfontify.")
(defconst htmlfontify-manual "Htmlfontify Manual" (defconst htmlfontify-manual "Htmlfontify Manual"
"Copy and convert buffers and files to html, adding hyperlinks between files "Copy and convert buffers and files to HTML, adding hyperlinks between files
\(driven by etags\) if requested. \(driven by etags) if requested.
\nInteractive functions: \nInteractive functions:
`htmlfontify-buffer' `htmlfontify-buffer'
`htmlfontify-run-etags' `htmlfontify-run-etags'
@ -144,50 +144,50 @@ fontify a file you have open: M-x htmlfontify-buffer
prepare the etags map for a directory: M-x htmlfontify-run-etags prepare the etags map for a directory: M-x htmlfontify-run-etags
copy a directory, fontifying as you go: M-x htmlfontify-copy-and-link-dir\n copy a directory, fontifying as you go: M-x htmlfontify-copy-and-link-dir\n
The following might be useful when running non-windowed or in batch mode: The following might be useful when running non-windowed or in batch mode:
\(note that they shouldn't be necessary - we have a built in map\)\n \(note that they shouldn't be necessary - we have a built in map)\n
load an X11 style rgb.txt file: M-x htmlfontify-load-rgb-file load an X11 style rgb.txt file: M-x htmlfontify-load-rgb-file
unload the current rgb.txt file: M-x htmlfontify-unload-rgb-file\n unload the current rgb.txt file: M-x htmlfontify-unload-rgb-file\n
And here's a programmatic example:\n And here's a programmatic example:\n
\(defun rtfm-build-page-header \(file style\) \(defun rtfm-build-page-header (file style)
\(format \"#define TEMPLATE red+black.html (format \"#define TEMPLATE red+black.html
#define DEBUG 1 #define DEBUG 1
#include <build/menu-dirlist|>\\n #include <build/menu-dirlist|>\\n
html-css-url := /css/red+black.css html-css-url := /css/red+black.css
title := rtfm.etla.org \( %s / src/%s \) title := rtfm.etla.org ( %s / src/%s )
bodytag := bodytag :=
head <=STYLESHEET;\\n head <=STYLESHEET;\\n
%s %s
STYLESHEET STYLESHEET
main-title := rtfm / %s / src/%s\\n main-title := rtfm / %s / src/%s\\n
main-content <=MAIN_CONTENT;\\n\" rtfm-section file style rtfm-section file\)\) main-content <=MAIN_CONTENT;\\n\" rtfm-section file style rtfm-section file))
\(defun rtfm-build-page-footer \(file\) \"\\nMAIN_CONTENT\\n\"\) \(defun rtfm-build-page-footer (file) \"\\nMAIN_CONTENT\\n\")
\(defun rtfm-build-source-docs \(section srcdir destdir\) \(defun rtfm-build-source-docs (section srcdir destdir)
\(interactive (interactive
\"s section[eg- emacs / p4-blame]:\\nD source-dir: \\nD output-dir: \"\) \"s section[eg- emacs / p4-blame]:\\nD source-dir: \\nD output-dir: \")
\(require 'htmlfontify\) (require 'htmlfontify)
\(hfy-load-tags-cache srcdir\) (hfy-load-tags-cache srcdir)
\(let \(\(hfy-page-header 'rtfm-build-page-header\) (let ((hfy-page-header 'rtfm-build-page-header)
\(hfy-page-footer 'rtfm-build-page-footer\) (hfy-page-footer 'rtfm-build-page-footer)
\(rtfm-section section\) (rtfm-section section)
\(hfy-index-file \"index\"\)\) (hfy-index-file \"index\"))
\(htmlfontify-run-etags srcdir\) (htmlfontify-run-etags srcdir)
\(htmlfontify-copy-and-link-dir srcdir destdir \".src\" \".html\"\)\)\)") (htmlfontify-copy-and-link-dir srcdir destdir \".src\" \".html\")))")
(defgroup htmlfontify nil (defgroup htmlfontify nil
"Copy and convert buffers and files to html, adding hyperlinks between "Copy and convert buffers and files to HTML, adding hyperlinks between
files \(driven by etags\) if requested.\n files (driven by etags) if requested.\n
See: `htmlfontify-manual'" See also `htmlfontify-manual'."
:group 'applications :group 'applications
:prefix "hfy-") :prefix "hfy-")
(defcustom hfy-page-header 'hfy-default-header (defcustom hfy-page-header 'hfy-default-header
"Function called with two arguments \(the filename relative to the top "Function called with two arguments (the filename relative to the top
level source directory being etag\'d and fontified), and a string containing level source directory being etag'd and fontified), and a string containing
the <style>...</style> text to embed in the document- the string returned will the <style>...</style> text to embed in the document- the string returned will
be used as the header for the htmlfontified version of the source file.\n be used as the header for the htmlfontified version of the source file.\n
See also: `hfy-page-footer'" See also `hfy-page-footer'."
:group 'htmlfontify :group 'htmlfontify
;; FIXME: Why place such a :tag everywhere? Isn't it imposing your ;; FIXME: Why place such a :tag everywhere? Isn't it imposing your
;; own Custom preference on your users? --Stef ;; own Custom preference on your users? --Stef
@ -204,7 +204,7 @@ be large and take a long time to render or be difficult to navigate."
(defcustom hfy-page-footer 'hfy-default-footer (defcustom hfy-page-footer 'hfy-default-footer
"As `hfy-page-header', but generates the output footer "As `hfy-page-header', but generates the output footer
\(and takes only 1 argument, the filename\)." \(and takes only one argument, the filename)."
:group 'htmlfontify :group 'htmlfontify
:tag "page-footer" :tag "page-footer"
:type '(function)) :type '(function))
@ -216,29 +216,29 @@ be large and take a long time to render or be difficult to navigate."
:type '(string)) :type '(string))
(defcustom hfy-src-doc-link-style "text-decoration: underline;" (defcustom hfy-src-doc-link-style "text-decoration: underline;"
"String to add to the \'<style> a\' variant of an htmlfontify css class." "String to add to the '<style> a' variant of an htmlfontify CSS class."
:group 'htmlfontify :group 'htmlfontify
:tag "src-doc-link-style" :tag "src-doc-link-style"
:type '(string)) :type '(string))
(defcustom hfy-src-doc-link-unstyle " text-decoration: none;" (defcustom hfy-src-doc-link-unstyle " text-decoration: none;"
"Regex to remove from the <style> a variant of an htmlfontify css class." "Regex to remove from the <style> a variant of an htmlfontify CSS class."
:group 'htmlfontify :group 'htmlfontify
:tag "src-doc-link-unstyle" :tag "src-doc-link-unstyle"
:type '(string)) :type '(string))
(defcustom hfy-link-extn nil (defcustom hfy-link-extn nil
"File extension used for href links - Useful where the htmlfontify "File extension used for href links.
output files are going to be processed again, with a resulting change Useful where the htmlfontify output files are going to be processed
in file extension. If nil, then any code using this should fall back again, with a resulting change in file extension. If nil, then any
to `hfy-extn'." code using this should fall back to `hfy-extn'."
:group 'htmlfontify :group 'htmlfontify
:tag "link-extension" :tag "link-extension"
:type '(choice string (const nil))) :type '(choice string (const nil)))
(defcustom hfy-link-style-fun 'hfy-link-style-string (defcustom hfy-link-style-fun 'hfy-link-style-string
"Set this to a function, which will be called with one argument "Set this to a function, which will be called with one argument
\(a \"{ foo: bar; ...}\" css style-string\) - it should return a copy of \(a \"{ foo: bar; ...}\" CSS style-string) - it should return a copy of
its argument, altered so as to make any changes you want made for text which its argument, altered so as to make any changes you want made for text which
is a hyperlink, in addition to being in the class to which that style would is a hyperlink, in addition to being in the class to which that style would
normally be applied." normally be applied."
@ -246,23 +246,23 @@ normally be applied."
:tag "link-style-function" :tag "link-style-function"
:type '(function)) :type '(function))
(defcustom hfy-index-file "hfy-index" (defcustom hfy-index-file "hfy-index"
"Name \(sans extension\) of the tag definition index file produced during "Name (sans extension) of the tag definition index file produced during
fontification-and-hyperlinking." fontification-and-hyperlinking."
:group 'htmlfontify :group 'htmlfontify
:tag "index-file" :tag "index-file"
:type '(string)) :type '(string))
(defcustom hfy-instance-file "hfy-instance" (defcustom hfy-instance-file "hfy-instance"
"Name \(sans extension\) of the tag usage index file produced during "Name (sans extension) of the tag usage index file produced during
fontification-and-hyperlinking." fontification-and-hyperlinking."
:group 'htmlfontify :group 'htmlfontify
:tag "instance-file" :tag "instance-file"
:type '(string)) :type '(string))
(defcustom hfy-html-quote-regex "\\(<\\|\"\\|&\\|>\\)" (defcustom hfy-html-quote-regex "\\(<\\|\"\\|&\\|>\\)"
"Regex to match \(with a single back-reference per match\) strings in HTML "Regex to match (with a single back-reference per match) strings in HTML
which should be quoted with `hfy-html-quote' \(and `hfy-html-quote-map'\) which should be quoted with `hfy-html-quote' (and `hfy-html-quote-map')
to make them safe." to make them safe."
:group 'htmlfontify :group 'htmlfontify
:tag "html-quote-regex" :tag "html-quote-regex"
@ -271,28 +271,28 @@ to make them safe."
(define-obsolete-variable-alias 'hfy-init-kludge-hooks 'hfy-init-kludge-hook (define-obsolete-variable-alias 'hfy-init-kludge-hooks 'hfy-init-kludge-hook
"23.2") "23.2")
(defcustom hfy-init-kludge-hook '(hfy-kludge-cperl-mode) (defcustom hfy-init-kludge-hook '(hfy-kludge-cperl-mode)
"List of functions to call when starting htmlfontify-buffer to do any "List of functions to call when starting `htmlfontify-buffer' to do any
kludging necessary to get highlighting modes to bahave as you want, even kludging necessary to get highlighting modes to behave as you want, even
when not running under a window system." when not running under a window system."
:group 'htmlfontify :group 'htmlfontify
:tag "init-kludge-hooks" :tag "init-kludge-hooks"
:type '(hook)) :type '(hook))
(defcustom hfy-post-html-hooks nil (defcustom hfy-post-html-hooks nil
"List of functions to call after creating and filling the html buffer. "List of functions to call after creating and filling the HTML buffer.
These functions will be called with the html buffer as the current buffer" These functions will be called with the html buffer as the current buffer."
:group 'htmlfontify :group 'htmlfontify
:tag "post-html-hooks" :tag "post-html-hooks"
:options '(set-auto-mode) :options '(set-auto-mode)
:type '(hook)) :type '(hook))
(defcustom hfy-default-face-def nil (defcustom hfy-default-face-def nil
"Fallback `defface' specification for the face \'default, used when "Fallback `defface' specification for the face 'default, used when
`hfy-display-class' has been set \(the normal htmlfontify way of extracting `hfy-display-class' has been set (the normal htmlfontify way of extracting
potentially non-current face information doesn\'t necessarily work for potentially non-current face information doesn't necessarily work for
\'default\).\n 'default).\n
Example: I customise this to:\n Example: I customize this to:\n
\(\(t :background \"black\" :foreground \"white\" :family \"misc-fixed\"\)\)" \((t :background \"black\" :foreground \"white\" :family \"misc-fixed\"))"
:group 'htmlfontify :group 'htmlfontify
:tag "default-face-definition" :tag "default-face-definition"
:type '(alist)) :type '(alist))
@ -306,7 +306,7 @@ Example: I customise this to:\n
in order, to:\n in order, to:\n
1 - The tag 1 - The tag
2 - The line 2 - The line
3 - The char \(point\) at which the tag occurs." 3 - The char (point) at which the tag occurs."
:group 'htmlfontify :group 'htmlfontify
:tag "etag-regex" :tag "etag-regex"
:type '(regexp)) :type '(regexp))
@ -315,7 +315,7 @@ in order, to:\n
("<" "&lt;" ) ("<" "&lt;" )
("&" "&amp;" ) ("&" "&amp;" )
(">" "&gt;" )) (">" "&gt;" ))
"Alist of char -> entity mappings used to make the text html-safe." "Alist of char -> entity mappings used to make the text HTML-safe."
:group 'htmlfontify :group 'htmlfontify
:tag "html-quote-map" :tag "html-quote-map"
:type '(alist :key-type (string))) :type '(alist :key-type (string)))
@ -358,13 +358,13 @@ done;")
(defcustom hfy-etags-cmd-alist (defcustom hfy-etags-cmd-alist
hfy-etags-cmd-alist-default hfy-etags-cmd-alist-default
"Alist of possible shell commands that will generate etags output that "Alist of possible shell commands that will generate etags output that
`htmlfontify' can use. \'%s\' will be replaced by `hfy-etags-bin'." `htmlfontify' can use. '%s' will be replaced by `hfy-etags-bin'."
:group 'htmlfontify :group 'htmlfontify
:tag "etags-cmd-alist" :tag "etags-cmd-alist"
:type '(alist :key-type (string) :value-type (string)) )) :type '(alist :key-type (string) :value-type (string)) ))
(defcustom hfy-etags-bin "etags" (defcustom hfy-etags-bin "etags"
"Location of etags binary (we begin by assuming it\'s in your path).\n "Location of etags binary (we begin by assuming it's in your path).\n
Note that if etags is not in your path, you will need to alter the shell Note that if etags is not in your path, you will need to alter the shell
commands in `hfy-etags-cmd-alist'." commands in `hfy-etags-cmd-alist'."
:group 'htmlfontify :group 'htmlfontify
@ -377,20 +377,20 @@ commands in `hfy-etags-cmd-alist'."
:tag "shell-file-name" :tag "shell-file-name"
:type '(file)) :type '(file))
(defcustom hfy-ignored-properties '(read-only (defcustom hfy-ignored-properties '(read-only
intangible intangible
modification-hooks modification-hooks
insert-in-front-hooks insert-in-front-hooks
insert-behind-hooks insert-behind-hooks
point-entered point-entered
point-left) point-left)
"Properties to omit when copying a fontified buffer for html transformation." "Properties to omit when copying a fontified buffer for HTML transformation."
:group 'htmlfontify :group 'htmlfontify
:tag "ignored-properties" :tag "ignored-properties"
:type '(repeat symbol)) :type '(repeat symbol))
(defun hfy-which-etags () (defun hfy-which-etags ()
"Return a string indicating which flavour of etags we are using." "Return a string indicating which flavour of etags we are using."
(let ((v (shell-command-to-string (concat hfy-etags-bin " --version")))) (let ((v (shell-command-to-string (concat hfy-etags-bin " --version"))))
(cond ((string-match "exube" v) "exuberant ctags") (cond ((string-match "exube" v) "exuberant ctags")
((string-match "GNU E" v) "emacs etags" )) )) ((string-match "GNU E" v) "emacs etags" )) ))
@ -400,8 +400,8 @@ commands in `hfy-etags-cmd-alist'."
"The etags equivalent command to run in a source directory to generate a tags "The etags equivalent command to run in a source directory to generate a tags
file for the whole source tree from there on down. The command should emit file for the whole source tree from there on down. The command should emit
the etags output on stdout.\n the etags output on stdout.\n
Two canned commands are provided - they drive Emacs\' etags and Two canned commands are provided - they drive Emacs' etags and
exuberant-ctags\' etags respectively." exuberant-ctags' etags respectively."
:group 'htmlfontify :group 'htmlfontify
:tag "etags-command" :tag "etags-command"
:type (eval-and-compile :type (eval-and-compile
@ -412,8 +412,8 @@ exuberant-ctags\' etags respectively."
(defcustom hfy-istext-command "file %s | sed -e 's@^[^:]*:[ \t]*@@'" (defcustom hfy-istext-command "file %s | sed -e 's@^[^:]*:[ \t]*@@'"
"Command to run with the name of a file, to see whether it is a text file "Command to run with the name of a file, to see whether it is a text file
or not. The command should emit a string containing the word \'text\' if or not. The command should emit a string containing the word 'text' if
the file is a text file, and a string not containing \'text\' otherwise." the file is a text file, and a string not containing 'text' otherwise."
:group 'htmlfontify :group 'htmlfontify
:tag "istext-command" :tag "istext-command"
:type '(string)) :type '(string))
@ -427,27 +427,27 @@ the file is a text file, and a string not containing \'text\' otherwise."
(defcustom hfy-display-class nil (defcustom hfy-display-class nil
"Display class to use to determine which display class to use when "Display class to use to determine which display class to use when
calculating a face\'s attributes. This is useful when, for example, you calculating a face's attributes. This is useful when, for example, you
are running Emacs on a tty or in batch mode, and want htmlfontify to have are running Emacs on a tty or in batch mode, and want htmlfontify to have
access to the face spec you would use if you were connected to an X display.\n access to the face spec you would use if you were connected to an X display.\n
Some valid class specification elements are:\n Some valid class specification elements are:\n
\'\(class color\) '(class color)
\'\(class grayscale\) '(class grayscale)
\'\(background dark\) '(background dark)
\'\(background light\) '(background light)
\'\(type x-toolkit\) '(type x-toolkit)
\'\(type tty\) '(type tty)
\'\(type motif\) '(type motif)
\'\(type lucid\) '(type lucid)
Multiple values for a tag may be combined, to indicate that any one or more Multiple values for a tag may be combined, to indicate that any one or more
of these values in the specification key constitutes a match, eg:\n of these values in the specification key constitutes a match, eg:\n
\'\(\(class color grayscale\) \(type tty\)\) would match any of:\n '((class color grayscale) (type tty)) would match any of:\n
\'\(\(class color\)\) '((class color))
\'\(\(class grayscale\)\) '((class grayscale))
\'\(\(class color grayscale\)\)\) '((class color grayscale))
\'\(\(class color foo\)\) '((class color foo))
\'\(\(type tty\)\) '((type tty))
\'\(\(type tty\) \(class color\)\)\n '((type tty) (class color))\n
and so on." and so on."
:type '(alist :key-type (symbol) :value-type (symbol)) :type '(alist :key-type (symbol) :value-type (symbol))
:group 'htmlfontify :group 'htmlfontify
@ -464,7 +464,7 @@ and so on."
(const :tag "Bright" light ))) )) (const :tag "Bright" light ))) ))
(defcustom hfy-optimisations (list 'keep-overlays) (defcustom hfy-optimisations (list 'keep-overlays)
"Optimisations to turn on: So far, the following have been implemented:\n "Optimizations to turn on: So far, the following have been implemented:\n
merge-adjacent-tags: If two (or more) span tags are adjacent, identical and merge-adjacent-tags: If two (or more) span tags are adjacent, identical and
separated by nothing more than whitespace, they will separated by nothing more than whitespace, they will
be merged into one span. be merged into one span.
@ -472,15 +472,15 @@ and so on."
zap-string-links : Suppress hyperlinking of tags found in strings. zap-string-links : Suppress hyperlinking of tags found in strings.
div-wrapper : Add <div class=\"default\"> </div> tags around the div-wrapper : Add <div class=\"default\"> </div> tags around the
output. output.
keep-overlays : More of a bell \(or possibly whistle\) than an keep-overlays : More of a bell (or possibly whistle) than an
optimisation - If on, preserve overlay highlighting optimization - If on, preserve overlay highlighting
\(cf ediff or goo-font-lock\) as well as basic faces\n (cf ediff or goo-font-lock) as well as basic faces.\n
And the following are planned but not yet available:\n And the following are planned but not yet available:\n
kill-context-leak : Suppress hyperlinking between files highlighted by kill-context-leak : Suppress hyperlinking between files highlighted by
different modes.\n different modes.\n
Note: like compiler optimisations, these optimise the _output_ of the code, Note: like compiler optimizations, these optimize the _output_ of the code,
not the processing of the source itself, and are therefore likely to slow not the processing of the source itself, and are therefore likely to slow
htmlfontify down, at least a little. Except for skip-refontification, htmlfontify down, at least a little. Except for skip-refontification,
which can never slow you down, but may result in incomplete fontification." which can never slow you down, but may result in incomplete fontification."
:type '(set (const :tag "merge-adjacent-tags" merge-adjacent-tags ) :type '(set (const :tag "merge-adjacent-tags" merge-adjacent-tags )
(const :tag "zap-comment-links" zap-comment-links ) (const :tag "zap-comment-links" zap-comment-links )
@ -490,86 +490,86 @@ which can never slow you down, but may result in incomplete fontification."
(const :tag "div-wrapper" div-wrapper ) (const :tag "div-wrapper" div-wrapper )
(const :tag "keep-overlays" keep-overlays )) (const :tag "keep-overlays" keep-overlays ))
:group 'htmlfontify :group 'htmlfontify
:tag "optimisations") :tag "optimizations")
(defvar hfy-tags-cache nil (defvar hfy-tags-cache nil
"Alist of the form:\n "Alist of the form:\n
\(\(\"/src/dir/0\" . tag-hash0\) \(\"/src/dir/1\" tag-hash1\) ...\)\n \((\"/src/dir/0\" . tag-hash0) (\"/src/dir/1\" tag-hash1) ...)\n
Each tag hash entry then contains entries of the form:\n Each tag hash entry then contains entries of the form:\n
\"tag_string\" => ((\"file/name.ext\" line char) ... )\n \"tag_string\" => ((\"file/name.ext\" line char) ... )\n
ie an alist mapping \(relative\) file paths to line and character offsets.\n ie an alist mapping (relative) file paths to line and character offsets.\n
See `hfy-load-tags-cache'.") See also `hfy-load-tags-cache'.")
(defvar hfy-tags-sortl nil (defvar hfy-tags-sortl nil
"Alist of the form \(\(\"/src/dir\" . (tag0 tag1 tag2)\) ... \)\n "Alist of the form ((\"/src/dir\" . (tag0 tag1 tag2)) ... )\n
Where the tags are stored in descending order of length.\n where the tags are stored in descending order of length.\n
See `hfy-load-tags-cache'.") See also `hfy-load-tags-cache'.")
(defvar hfy-tags-rmap nil (defvar hfy-tags-rmap nil
"Alist of the form \(\(\"/src/dir\" . tag-rmap-hash\)\)\n "Alist of the form ((\"/src/dir\" . tag-rmap-hash))\n
Where tag-rmap-hash has entries of the form: where tag-rmap-hash has entries of the form:
\"tag_string\" => ( \"file/name.ext\" line char ) \"tag_string\" => ( \"file/name.ext\" line char )
Unlike `hfy-tags-cache' these are the locations of occurrences of Unlike `hfy-tags-cache' these are the locations of occurrences of
tagged items, not the locations of their definitions.") tagged items, not the locations of their definitions.")
(defvar hfy-style-assoc 'please-ignore-this-line (defvar hfy-style-assoc 'please-ignore-this-line
"An assoc representing/describing an Emacs face. "An assoc representing/describing an Emacs face.
Properties may be repeated, In which case later properties should be Properties may be repeated, in which case later properties should be
treated as if they were inherited from a \'parent\' font. treated as if they were inherited from a 'parent' font.
\(For some properties, only the first encountered value is of any importance, \(For some properties, only the first encountered value is of any importance,
for others the values might be cumulative, and for others they might be for others the values might be cumulative, and for others they might be
cumulative in a complex way).\n cumulative in a complex way.)\n
Some examples:\n Some examples:\n
\(hfy-face-to-style 'default\) => \(hfy-face-to-style 'default) =>
\(\(\"background\" . \"rgb\(0, 0, 0\)\"\) ((\"background\" . \"rgb(0, 0, 0)\")
\(\"color\" . \"rgb\(255, 255, 255\)\"\) (\"color\" . \"rgb(255, 255, 255)\")
\(\"font-style\" . \"normal\"\) (\"font-style\" . \"normal\")
\(\"font-weight\" . \"500\"\) (\"font-weight\" . \"500\")
\(\"font-stretch\" . \"normal\"\) (\"font-stretch\" . \"normal\")
\(\"font-family\" . \"misc-fixed\"\) (\"font-family\" . \"misc-fixed\")
\(\"font-size\" . \"13pt\"\) (\"font-size\" . \"13pt\")
\(\"text-decoration\" . \"none\"\)\)\n (\"text-decoration\" . \"none\"))\n
\(hfy-face-to-style 'Info-title-3-face\) => \(hfy-face-to-style 'Info-title-3-face) =>
\(\(\"font-weight\" . \"700\"\) ((\"font-weight\" . \"700\")
\(\"font-family\" . \"helv\"\) (\"font-family\" . \"helv\")
\(\"font-size\" . \"120%\"\) (\"font-size\" . \"120%\")
\(\"text-decoration\" . \"none\"\)\)\n") (\"text-decoration\" . \"none\"))\n")
(defvar hfy-sheet-assoc 'please-ignore-this-line (defvar hfy-sheet-assoc 'please-ignore-this-line
"An assoc with elements of the form (face-name style-name . stlye-string):\n "An assoc with elements of the form (face-name style-name . style-string):\n
'\(\(default \"default\" . \"{background: black;color: white}\"\) '((default \"default\" . \"{background: black; color: white}\")
\(font-lock-string-face \"string\" . \"{color: rgb\(64,224,208\)}\"\)\)" ) (font-lock-string-face \"string\" . \"{color: rgb(64,224,208)}\"))" )
(defvar hfy-facemap-assoc 'please-ignore-this-line (defvar hfy-facemap-assoc 'please-ignore-this-line
"An assoc of \(point . FACE-SYMBOL\) or \(point . DEFFACE-LIST\) "An assoc of (point . FACE-SYMBOL) or (point . DEFFACE-LIST)
and (point . 'end) elements, in descending order of point value and (point . 'end) elements, in descending order of point value
\(ie from the file's end to its beginning\).\n \(ie from the file's end to its beginning).\n
The map is in reverse order because inserting a <style> tag \(or any other The map is in reverse order because inserting a <style> tag (or any other
string) at POINT invalidates the map for all entries with a greater value of string) at `point' invalidates the map for all entries with a greater value of
point. By traversing the map from greatest to least POINT, we still invalidate point. By traversing the map from greatest to least point, we still invalidate
the map as we go, but only those points we have already dealt with \( and the map as we go, but only those points we have already dealt with (and
therefore no longer care about \) will be invalid at any time.\n therefore no longer care about) will be invalid at any time.\n
'\(\(64820 . end\) '((64820 . end)
\(64744 . font-lock-comment-face\) (64744 . font-lock-comment-face)
\(64736 . end\) (64736 . end)
\(64722 . font-lock-string-face\) (64722 . font-lock-string-face)
\(64630 . end\) (64630 . end)
\(64623 . font-lock-string-face\) (64623 . font-lock-string-face)
\(64449 . end\) (64449 . end)
\(64446 . font-lock-keyword-face\) (64446 . font-lock-keyword-face)
\(64406 . end\) (64406 . end)
\(64395 . font-lock-constant-face\) (64395 . font-lock-constant-face)
\(64393 . end\) (64393 . end)
\(64386 . font-lock-keyword-face\) (64386 . font-lock-keyword-face)
\(64379 . end\) (64379 . end)
;; big similar section elided. You get the idea. ;; big similar section elided. You get the idea.
\(4285 . font-lock-constant-face\) (4285 . font-lock-constant-face)
\(4285 . end\) (4285 . end)
\(4221 . font-lock-comment-face\) (4221 . font-lock-comment-face)
\(4221 . end\) (4221 . end)
\(4197 . font-lock-constant-face\) (4197 . font-lock-constant-face)
\(4197 . end\) (4197 . end)
\(1 . font-lock-comment-face\)\)") (1 . font-lock-comment-face))")
(defvar hfy-tmpfont-stack nil (defvar hfy-tmpfont-stack nil
"An alist of derived fonts resulting from overlays.") "An alist of derived fonts resulting from overlays.")
@ -583,7 +583,7 @@ therefore no longer care about \) will be invalid at any time.\n
"\\(" hfy-hex-regex hfy-hex-regex "\\)")) "\\(" hfy-hex-regex hfy-hex-regex "\\)"))
(defun hfy-interq (set-a set-b) (defun hfy-interq (set-a set-b)
"Return the intersection \(using `eq'\) of 2 lists SET-A and SET-B." "Return the intersection (using `eq') of two lists SET-A and SET-B."
(let ((sa set-a) (interq nil) (elt nil)) (let ((sa set-a) (interq nil) (elt nil))
(while sa (while sa
(setq elt (car sa) (setq elt (car sa)
@ -591,8 +591,8 @@ therefore no longer care about \) will be invalid at any time.\n
(if (memq elt set-b) (setq interq (cons elt interq)))) interq)) (if (memq elt set-b) (setq interq (cons elt interq)))) interq))
(defun hfy-colour-vals (colour) (defun hfy-colour-vals (colour)
"Where COLOUR is a colour name or #XXXXXX style triplet, return a "Where COLOUR is a color name or #XXXXXX style triplet, return a
list of 3 (16 bit) rgb values for said colour.\n list of three (16 bit) rgb values for said color.\n
If a window system is unavailable, calls `hfy-fallback-colour-values'." If a window system is unavailable, calls `hfy-fallback-colour-values'."
(if (string-match hfy-triplet-regex colour) (if (string-match hfy-triplet-regex colour)
(mapcar (mapcar
@ -653,7 +653,7 @@ STYLE is the inline CSS stylesheet (or tag referring to an external sheet)."
// whether the current row is odd or even // whether the current row is odd or even
var even = false; var even = false;
// if arguments are provided to specify the colours // if arguments are provided to specify the colors
// of the even & odd rows, then use the them; // of the even & odd rows, then use the them;
// otherwise use the following defaults: // otherwise use the following defaults:
var evenColor = arguments[1] ? arguments[1] : \"#fff\"; var evenColor = arguments[1] ? arguments[1] : \"#fff\";
@ -739,7 +739,7 @@ FILE is the name of the file being rendered, in case it is needed."
"\n </body>\n</html>\n") "\n </body>\n</html>\n")
(defun hfy-link-style-string (style-string) (defun hfy-link-style-string (style-string)
"Replace the end of a css style declaration STYLE-STRING with the contents "Replace the end of a CSS style declaration STYLE-STRING with the contents
of the variable `hfy-src-doc-link-style', removing text matching the regex of the variable `hfy-src-doc-link-style', removing text matching the regex
`hfy-src-doc-link-unstyle' first, if necessary." `hfy-src-doc-link-unstyle' first, if necessary."
;;(message "hfy-colour-vals");;DBUG ;;(message "hfy-colour-vals");;DBUG
@ -755,11 +755,11 @@ of the variable `hfy-src-doc-link-style', removing text matching the regex
;; utility functions - cast emacs style specification values into their ;; utility functions - cast emacs style specification values into their
;; css2 equivalents: ;; css2 equivalents:
(defun hfy-triplet (colour) (defun hfy-triplet (colour)
"Takes a COLOUR name \(string\) and return a CSS rgb(R, G, B) triplet string. "Takes a COLOUR name (string) and return a CSS rgb(R, G, B) triplet string.
Uses the definition of \"white\" to map the numbers to the 0-255 range, so Uses the definition of \"white\" to map the numbers to the 0-255 range, so
if you\'ve redefined white, \(esp if you've redefined it to have a triplet if you've redefined white, (esp. if you've redefined it to have a triplet
member lower than that of the colour you are processing, strange things member lower than that of the color you are processing) strange things
may happen\)." may happen."
;;(message "hfy-colour-vals");;DBUG ;;(message "hfy-colour-vals");;DBUG
(let ((white (mapcar (lambda (I) (float (1+ I))) (hfy-colour-vals "white"))) (let ((white (mapcar (lambda (I) (float (1+ I))) (hfy-colour-vals "white")))
(rgb16 (mapcar (lambda (I) (float (1+ I))) (hfy-colour-vals colour)))) (rgb16 (mapcar (lambda (I) (float (1+ I))) (hfy-colour-vals colour))))
@ -782,7 +782,7 @@ may happen\)."
:type 'float :type 'float
:group 'htmlfontify) :group 'htmlfontify)
(defun hfy-size (height) (defun hfy-size (height)
"Derive a CSS font-size specifier from an Emacs font :height attribute HEIGHT. "Derive a CSS font-size specifier from an Emacs font :height attribute HEIGHT.
Does not cope with the case where height is a function to be applied to Does not cope with the case where height is a function to be applied to
the height of the underlying font." the height of the underlying font."
@ -794,8 +794,8 @@ the height of the underlying font."
((integerp height) ((integerp height)
(cons "font-size" (format "%dpt" (/ (* hfy-font-zoom height) 10 )))) )) ) (cons "font-size" (format "%dpt" (/ (* hfy-font-zoom height) 10 )))) )) )
(defun hfy-slant (slant) (defun hfy-slant (slant)
"Derive a font-style css specifier from the Emacs :slant attribute SLANT: "Derive a font-style CSS specifier from the Emacs :slant attribute SLANT:
CSS does not define the reverse-* styles, so just maps those to the CSS does not define the reverse-* styles, so just maps those to the
regular specifiers." regular specifiers."
(list (cons "font-style" (list (cons "font-style"
@ -806,7 +806,7 @@ regular specifiers."
"normal")))) "normal"))))
(defun hfy-weight (weight) (defun hfy-weight (weight)
"Derive a font-weight css specifier from an Emacs weight spec symbol WEIGHT." "Derive a font-weight CSS specifier from an Emacs weight spec symbol WEIGHT."
(list (cons "font-weight" (cdr (assq weight '((ultra-bold . "900") (list (cons "font-weight" (cdr (assq weight '((ultra-bold . "900")
(extra-bold . "800") (extra-bold . "800")
(bold . "700") (bold . "700")
@ -816,7 +816,7 @@ regular specifiers."
(light . "300") (light . "300")
(extra-light . "200") (extra-light . "200")
(ultra-light . "100"))))))) (ultra-light . "100")))))))
(defun hfy-box-to-border-assoc (spec) (defun hfy-box-to-border-assoc (spec)
(if spec (if spec
(let ((tag (car spec)) (let ((tag (car spec))
@ -866,7 +866,7 @@ VAL is ignored here."
(defun hfy-combined-face-spec (face) (defun hfy-combined-face-spec (face)
"Return a `defface' style alist of possible specifications for FACE. "Return a `defface' style alist of possible specifications for FACE.
Entries resulting from customisation \(`custom-set-faces'\) will take Entries resulting from customization (`custom-set-faces') will take
precedence." precedence."
(let ((spec nil)) (let ((spec nil))
(setq spec (append (or (get face 'saved-face) (list)) (setq spec (append (or (get face 'saved-face) (list))
@ -876,19 +876,19 @@ precedence."
(defun hfy-face-attr-for-class (face &optional class) (defun hfy-face-attr-for-class (face &optional class)
"Return the face attributes for FACE. "Return the face attributes for FACE.
If CLASS is set, it must be a `defface' alist key \[see below\], If CLASS is set, it must be a `defface' alist key [see below],
in which case the first face specification returned by `hfy-combined-face-spec' in which case the first face specification returned by `hfy-combined-face-spec'
which *doesn\'t* clash with CLASS is returned.\n which *doesn't* clash with CLASS is returned.\n
\(A specification with a class of t is considered to match any class you \(A specification with a class of t is considered to match any class you
specify - this matches Emacs\' behaviour when deciding on which face attributes specify - this matches Emacs' behavior when deciding on which face attributes
to use, to the best of my understanding\).\n to use, to the best of my understanding).\n
If CLASS is nil, then you just get get whatever `face-attr-construct' returns, If CLASS is nil, then you just get get whatever `face-attr-construct' returns,
ie the current specification in effect for FACE.\n ie the current specification in effect for FACE.\n
*NOTE* This function forces any face that is not \'default and which has *NOTE*: This function forces any face that is not 'default and which has
no :inherit property to inherit from \'default \( this is because \'default no :inherit property to inherit from 'default (this is because 'default
is magical in that Emacs' fonts behave as if they inherit implicitly from is magical in that Emacs' fonts behave as if they inherit implicitly from
\'default, but no such behaviour exists in HTML/CSS \).\n 'default, but no such behavior exists in HTML/CSS).\n
See `hfy-display-class' for details of valid values for CLASS." See also `hfy-display-class' for details of valid values for CLASS."
(let ((face-spec (let ((face-spec
(if class (if class
(let ((face-props (hfy-combined-face-spec face)) (let ((face-props (hfy-combined-face-spec face))
@ -975,9 +975,9 @@ See `hfy-display-class' for details of valid values for CLASS."
;; :height 98 :width normal :family "outline-courier new") ;; :height 98 :width normal :family "outline-courier new")
(defun hfy-face-to-style-i (fn) (defun hfy-face-to-style-i (fn)
"The guts of `hfy-face-to-style': FN should be a `defface' font spec, "The guts of `hfy-face-to-style': FN should be a `defface' font spec,
as returned by `face-attr-construct' or `hfy-face-attr-for-class'. Note as returned by `face-attr-construct' or `hfy-face-attr-for-class'.
that this function does not get font-sizes right if they are based on Note that this function does not get font-sizes right if they are based
inherited modifiers \(via the :inherit\) attribute, and any other on inherited modifiers (via the :inherit) attribute, and any other
modifiers that are cumulative if they appear multiple times need to be modifiers that are cumulative if they appear multiple times need to be
merged by the user - `hfy-flatten-style' should do this." merged by the user - `hfy-flatten-style' should do this."
;;(message "hfy-face-to-style-i");;DBUG ;;(message "hfy-face-to-style-i");;DBUG
@ -1026,8 +1026,8 @@ merged by the user - `hfy-flatten-style' should do this."
(nconc this that parent))) ) (nconc this that parent))) )
(defun hfy-size-to-int (spec) (defun hfy-size-to-int (spec)
"Convert SPEC, a css font-size specifier, back to an Emacs :height attribute "Convert SPEC, a CSS font-size specifier, to an Emacs :height attribute value.
value. Used while merging multiple font-size attributes." Used while merging multiple font-size attributes."
;;(message "hfy-size-to-int");;DBUG ;;(message "hfy-size-to-int");;DBUG
(list (list
(if (string-match "\\([0-9]+\\)\\(%\\|pt\\)" spec) (if (string-match "\\([0-9]+\\)\\(%\\|pt\\)" spec)
@ -1044,7 +1044,7 @@ value. Used while merging multiple font-size attributes."
"Take STYLE (see `hfy-face-to-style-i', `hfy-face-to-style') and merge "Take STYLE (see `hfy-face-to-style-i', `hfy-face-to-style') and merge
any multiple attributes appropriately. Currently only font-size is merged any multiple attributes appropriately. Currently only font-size is merged
down to a single occurrence - others may need special handling, but I down to a single occurrence - others may need special handling, but I
haven\'t encountered them yet. Returns a `hfy-style-assoc'." haven't encountered them yet. Returns a `hfy-style-assoc'."
;;(message "(hfy-flatten-style %S)" style) ;;DBUG ;;(message "(hfy-flatten-style %S)" style) ;;DBUG
(let ((n 0) (let ((n 0)
(m (list 1)) (m (list 1))
@ -1062,9 +1062,9 @@ haven\'t encountered them yet. Returns a `hfy-style-assoc'."
(defun hfy-face-to-style (fn) (defun hfy-face-to-style (fn)
"Take FN, a font or `defface' style font specification, "Take FN, a font or `defface' style font specification,
\(as returned by `face-attr-construct' or `hfy-face-attr-for-class'\) \(as returned by `face-attr-construct' or `hfy-face-attr-for-class')
and return a `hfy-style-assoc'.\n and return a `hfy-style-assoc'.\n
See also: `hfy-face-to-style-i', `hfy-flatten-style'." See also `hfy-face-to-style-i', `hfy-flatten-style'."
;;(message "hfy-face-to-style");;DBUG ;;(message "hfy-face-to-style");;DBUG
(let ((face-def (if (facep fn) (let ((face-def (if (facep fn)
(hfy-face-attr-for-class fn hfy-display-class) fn)) (hfy-face-attr-for-class fn hfy-display-class) fn))
@ -1086,7 +1086,7 @@ See also: `hfy-face-to-style-i', `hfy-flatten-style'."
;; also handle ephemeral fonts created by overlays, which don't actually ;; also handle ephemeral fonts created by overlays, which don't actually
;; have names: ;; have names:
(defun hfy-face-or-def-to-name (fn) (defun hfy-face-or-def-to-name (fn)
"Render a font symbol or `defface' font spec FN into a name \(string\)." "Render a font symbol or `defface' font spec FN into a name (string)."
;;(message "generating name for %s" fn) ;;(message "generating name for %s" fn)
(if (not (listp fn)) (if (not (listp fn))
(format "%s" fn) (format "%s" fn)
@ -1119,9 +1119,9 @@ See also: `hfy-face-to-style-i', `hfy-flatten-style'."
;; construct an assoc of (stripped-name . "{ css-stuff-here }") pairs ;; construct an assoc of (stripped-name . "{ css-stuff-here }") pairs
;; from a face: ;; from a face:
(defun hfy-face-to-css (fn) (defun hfy-face-to-css (fn)
"Take FN, a font or `defface' specification \(cf `face-attr-construct'\) "Take FN, a font or `defface' specification (cf `face-attr-construct')
and return a CSS style specification.\n and return a CSS style specification.\n
See also: `hfy-face-to-style'" See also `hfy-face-to-style'."
;;(message "hfy-face-to-css");;DBUG ;;(message "hfy-face-to-css");;DBUG
(let ((css-list nil) (let ((css-list nil)
(css-text nil) (css-text nil)
@ -1140,7 +1140,7 @@ See also: `hfy-face-to-style'"
;; extract a face from a list of char properties, if there is one: ;; extract a face from a list of char properties, if there is one:
(defun hfy-p-to-face (props) (defun hfy-p-to-face (props)
"Given PROPS, a list of text-properties, return the value of the face "Given PROPS, a list of text properties, return the value of the face
property, or nil." property, or nil."
(if props (if props
(if (string= (car props) "face") (if (string= (car props) "face")
@ -1152,7 +1152,7 @@ property, or nil."
nil)) nil))
(defun hfy-p-to-face-lennart (props) (defun hfy-p-to-face-lennart (props)
"Given PROPS, a list of text-properties, return the value of the face "Given PROPS, a list of text properties, return the value of the face
property, or nil." property, or nil."
(when props (when props
(let ((face (plist-get props 'face)) (let ((face (plist-get props 'face))
@ -1230,8 +1230,8 @@ MAP is the invisibility map as returned by `hfy-find-invisible-ranges'."
;; -- v ;; -- v
(defun hfy-face-at (p) (defun hfy-face-at (p)
"Find face in effect at point P. "Find face in effect at point P.
If overlays are to be considered \(see `hfy-optimisations'\) then this may If overlays are to be considered (see `hfy-optimisations') then this may
return a defface style list of face properties instead of a face symbol." return a `defface' style list of face properties instead of a face symbol."
;;(message "hfy-face-at");;DBUG ;;(message "hfy-face-at");;DBUG
;; Fix-me: clean up, remove face-name etc ;; Fix-me: clean up, remove face-name etc
;; not sure why we'd want to remove face-name? -- v ;; not sure why we'd want to remove face-name? -- v
@ -1385,7 +1385,7 @@ The plists are returned in descending priority order."
(push (cons 'default (hfy-face-to-css 'default)) style))) (push (cons 'default (hfy-face-to-css 'default)) style)))
(defun hfy-fontified-p () (defun hfy-fontified-p ()
"`font-lock' doesn't like to say it\'s been fontified when in batch "`font-lock' doesn't like to say it's been fontified when in batch
mode, but we want to know if we should fontify or raw copy, so in batch mode, but we want to know if we should fontify or raw copy, so in batch
mode we check for non-default face properties. Otherwise we test mode we check for non-default face properties. Otherwise we test
variable `font-lock-mode' and variable `font-lock-fontified' for truth." variable `font-lock-mode' and variable `font-lock-fontified' for truth."
@ -1412,7 +1412,7 @@ variable `font-lock-mode' and variable `font-lock-fontified' for truth."
this function merges adjacent style blocks which are of the same value this function merges adjacent style blocks which are of the same value
and are separated by nothing more interesting than whitespace.\n and are separated by nothing more interesting than whitespace.\n
<span class=\"foo\">narf</span> <span class=\"foo\">brain</span>\n <span class=\"foo\">narf</span> <span class=\"foo\">brain</span>\n
\(as interpreted from FACE-MAP\) would become:\n \(as interpreted from FACE-MAP) would become:\n
<span class=\"foo\">narf brain</span>\n <span class=\"foo\">narf brain</span>\n
Returns a modified copy of FACE-MAP." Returns a modified copy of FACE-MAP."
(let ((tmp-map face-map) (let ((tmp-map face-map)
@ -1485,8 +1485,8 @@ Returns a modified copy of FACE-MAP."
(if (hfy-opt 'merge-adjacent-tags) (hfy-merge-adjacent-spans map) map))) (if (hfy-opt 'merge-adjacent-tags) (hfy-merge-adjacent-spans map) map)))
(defun hfy-buffer () (defun hfy-buffer ()
"Generate a buffer to hold the html output. "Generate a buffer to hold the HTML output.
The filename of this buffer is derived from the source \(current\) buffer\'s The filename of this buffer is derived from the source (current) buffer's
variable `buffer-file-name', if it is set, plus `hfy-extn'. variable `buffer-file-name', if it is set, plus `hfy-extn'.
Otherwise a plausible filename is constructed from `default-directory', Otherwise a plausible filename is constructed from `default-directory',
`buffer-name' and `hfy-extn'." `buffer-name' and `hfy-extn'."
@ -1536,7 +1536,7 @@ Uses `hfy-link-style-fun' to do this."
;; tag all the dangerous characters we want to escape ;; tag all the dangerous characters we want to escape
;; (ie any "<> chars we _didn't_ put there explicitly for css markup) ;; (ie any "<> chars we _didn't_ put there explicitly for css markup)
(defun hfy-html-enkludge-buffer () (defun hfy-html-enkludge-buffer ()
"Mark dangerous [\"\<\>] characters with the \'hfy-quoteme property.\n "Mark dangerous [\"<>] characters with the `hfy-quoteme' property.\n
See also `hfy-html-dekludge-buffer'." See also `hfy-html-dekludge-buffer'."
;;(message "hfy-html-enkludge-buffer");;DBUG ;;(message "hfy-html-enkludge-buffer");;DBUG
(save-excursion (save-excursion
@ -1546,7 +1546,7 @@ See also `hfy-html-dekludge-buffer'."
;; dangerous char -> &entity; ;; dangerous char -> &entity;
(defun hfy-html-quote (char-string) (defun hfy-html-quote (char-string)
"Map CHAR-STRING to an html safe string (entity) if need be." "Map CHAR-STRING to an HTML safe string (entity) if need be."
;;(message "hfy-html-quote");;DBUG ;;(message "hfy-html-quote");;DBUG
(or (cadr (assoc char-string hfy-html-quote-map)) char-string) ) (or (cadr (assoc char-string hfy-html-quote-map)) char-string) )
@ -1556,8 +1556,8 @@ See also `hfy-html-dekludge-buffer'."
;; enter any other text before we do this, we'd have to track another ;; enter any other text before we do this, we'd have to track another
;; map of offsets, which would be tedious... ;; map of offsets, which would be tedious...
(defun hfy-html-dekludge-buffer () (defun hfy-html-dekludge-buffer ()
"Transform all dangerous characters marked with the \'hfy-quoteme property "Transform all dangerous characters marked with the `hfy-quoteme' property
using `hfy-html-quote'\n using `hfy-html-quote'.\n
See also `hfy-html-enkludge-buffer'." See also `hfy-html-enkludge-buffer'."
;;(message "hfy-html-dekludge-buffer");;DBUG ;;(message "hfy-html-dekludge-buffer");;DBUG
(save-excursion (save-excursion
@ -1774,7 +1774,7 @@ FILE, if set, is the file name."
html-buffer)) html-buffer))
(defun hfy-force-fontification () (defun hfy-force-fontification ()
"Try to force font-locking even when it is optimised away." "Try to force font-locking even when it is optimized away."
(run-hooks 'hfy-init-kludge-hook) (run-hooks 'hfy-init-kludge-hook)
(eval-and-compile (require 'font-lock)) (eval-and-compile (require 'font-lock))
(if (boundp 'font-lock-cache-position) (if (boundp 'font-lock-cache-position)
@ -1793,19 +1793,19 @@ FILE, if set, is the file name."
(defun htmlfontify-buffer (&optional srcdir file) (defun htmlfontify-buffer (&optional srcdir file)
"Create a new buffer, named for the current buffer + a .html extension, "Create a new buffer, named for the current buffer + a .html extension,
containing an inline css-stylesheet and formatted css-markup html containing an inline CSS-stylesheet and formatted CSS-markup HTML
that reproduces the look of the current Emacs buffer as closely that reproduces the look of the current Emacs buffer as closely
as possible. as possible.
Dangerous characters in the existing buffer are turned into html Dangerous characters in the existing buffer are turned into HTML
entities, so you should even be able to do html-within-html entities, so you should even be able to do HTML-within-HTML
fontified display. fontified display.
You should, however, note that random control or eight-bit You should, however, note that random control or eight-bit
characters such as ^L (\x0c) or ¤ (\xa4) won't get mapped yet. characters such as ^L (\x0c) or ¤ (\xa4) won't get mapped yet.
If the SRCDIR and FILE arguments are set, lookup etags derived If the SRCDIR and FILE arguments are set, lookup etags derived
entries in the `hfy-tags-cache' and add html anchors and entries in the `hfy-tags-cache' and add HTML anchors and
hyperlinks as appropriate." hyperlinks as appropriate."
(interactive) (interactive)
;; pick up the file name in case we didn't receive it ;; pick up the file name in case we didn't receive it
@ -1836,22 +1836,22 @@ Strips any leading \"./\" from each filename."
;; fed pretty carefully, so it should be Ok: ;; fed pretty carefully, so it should be Ok:
(defun hfy-dirname (file) (defun hfy-dirname (file)
"Return everything preceding the last \"/\" from a relative filename FILE, "Return everything preceding the last \"/\" from a relative filename FILE,
on the assumption that this will produce a relative directory name. Hardly on the assumption that this will produce a relative directory name.
bombproof, but good enough in the context in which it is being used." Hardly bombproof, but good enough in the context in which it is being used."
;;(message "hfy-dirname");;DBUG ;;(message "hfy-dirname");;DBUG
(let ((f (directory-file-name file))) (let ((f (directory-file-name file)))
(and (string-match "^\\(.*\\)/" f) (match-string 1 f)))) (and (string-match "^\\(.*\\)/" f) (match-string 1 f))))
;; create a directory, cf mkdir -p ;; create a directory, cf mkdir -p
(defun hfy-make-directory (dir) (defun hfy-make-directory (dir)
"Approx equivalent of mkdir -p DIR." "Approx. equivalent of mkdir -p DIR."
;;(message "hfy-make-directory");;DBUG ;;(message "hfy-make-directory");;DBUG
(if (file-exists-p dir) (if (file-exists-p dir)
(if (file-directory-p dir) t) (if (file-directory-p dir) t)
(make-directory dir t))) (make-directory dir t)))
(defun hfy-text-p (srcdir file) (defun hfy-text-p (srcdir file)
"Is SRCDIR/FILE text? Uses `hfy-istext-command' to determine this." "Is SRCDIR/FILE text? Uses `hfy-istext-command' to determine this."
(let* ((cmd (format hfy-istext-command (expand-file-name file srcdir))) (let* ((cmd (format hfy-istext-command (expand-file-name file srcdir)))
(rsp (shell-command-to-string cmd))) (rsp (shell-command-to-string cmd)))
(if (string-match "text" rsp) t nil))) (if (string-match "text" rsp) t nil)))
@ -1903,7 +1903,7 @@ Looks up the tags cache in `hfy-tags-cache' using SRCDIR as the key."
;; mark the tags native to this file for anchors ;; mark the tags native to this file for anchors
(defun hfy-mark-tag-names (srcdir file) (defun hfy-mark-tag-names (srcdir file)
"Mark tags in FILE (lookup SRCDIR in `hfy-tags-cache') with the \'hfy-anchor "Mark tags in FILE (lookup SRCDIR in `hfy-tags-cache') with the `hfy-anchor'
property, with a value of \"tag.line-number\"." property, with a value of \"tag.line-number\"."
;;(message "(hfy-mark-tag-names %s %s)" srcdir file);;DBUG ;;(message "(hfy-mark-tag-names %s %s)" srcdir file);;DBUG
(let ((cache-entry (assoc srcdir hfy-tags-cache)) (let ((cache-entry (assoc srcdir hfy-tags-cache))
@ -1925,7 +1925,7 @@ property, with a value of \"tag.line-number\"."
(defun hfy-relstub (file &optional start) (defun hfy-relstub (file &optional start)
"Return a \"../\" stub of the appropriate length for the current source "Return a \"../\" stub of the appropriate length for the current source
tree depth \(as determined from FILE \(a filename\)\). tree depth, as determined from FILE (a filename).
START is the offset at which to start looking for the / character in FILE." START is the offset at which to start looking for the / character in FILE."
;;(message "hfy-relstub");;DBUG ;;(message "hfy-relstub");;DBUG
(let ((c "")) (let ((c ""))
@ -1933,8 +1933,8 @@ START is the offset at which to start looking for the / character in FILE."
(setq start (1+ start)) (setq c (concat c "../"))) c)) (setq start (1+ start)) (setq c (concat c "../"))) c))
(defun hfy-href-stub (this-file def-files tag) (defun hfy-href-stub (this-file def-files tag)
"Return an href stub for a tag href i THIS-FILE: "Return an href stub for a tag href in THIS-FILE.
If DEF-FILES \(list of files containing definitions for the tag in question\) If DEF-FILES (list of files containing definitions for the tag in question)
contains only one entry, the href should link straight to that file. contains only one entry, the href should link straight to that file.
Otherwise, the link should be to the index file.\n Otherwise, the link should be to the index file.\n
We are not yet concerned with the file extensions/tag line number and so on at We are not yet concerned with the file extensions/tag line number and so on at
@ -1942,7 +1942,7 @@ this point.\n
If `hfy-split-index' is set, and the href wil be to an index file rather than If `hfy-split-index' is set, and the href wil be to an index file rather than
a source file, append a .X to `hfy-index-file', where X is the uppercased a source file, append a .X to `hfy-index-file', where X is the uppercased
first character of TAG.\n first character of TAG.\n
See also: `hfy-relstub', `hfy-index-file'`'." See also `hfy-relstub', `hfy-index-file'."
;;(message "hfy-href-stub");;DBUG ;;(message "hfy-href-stub");;DBUG
;; FIXME: Why not use something like ;; FIXME: Why not use something like
;; (file-relative-name (if ...) (file-name-directory this-file)) ? --Stef ;; (file-relative-name (if ...) (file-name-directory this-file)) ? --Stef
@ -1957,7 +1957,7 @@ See also: `hfy-relstub', `hfy-index-file'`'."
THIS-FILE `hfy-link-extn' `hfy-extn' DEF-FILES TAG and TAG-MAP\n THIS-FILE `hfy-link-extn' `hfy-extn' DEF-FILES TAG and TAG-MAP\n
THIS-FILE is the current source file THIS-FILE is the current source file
DEF-FILES is a list of file containing possible link endpoints for TAG DEF-FILES is a list of file containing possible link endpoints for TAG
TAG is the TAG in question TAG is the tag in question
TAG-MAP is the entry in `hfy-tags-cache'." TAG-MAP is the entry in `hfy-tags-cache'."
;;(message "hfy-href");;DBUG ;;(message "hfy-href");;DBUG
(concat (concat
@ -1975,8 +1975,8 @@ word characters on either side."
;; mark all tags for hyperlinking, except the tags at ;; mark all tags for hyperlinking, except the tags at
;; their own points of definition, iyswim: ;; their own points of definition, iyswim:
(defun hfy-mark-tag-hrefs (srcdir file) (defun hfy-mark-tag-hrefs (srcdir file)
"Mark href start points with the \'hfy-link prop \(value: href string\)\n "Mark href start points with the `hfy-link' prop (value: href string).\n
Mark href end points with the \'hfy-endl prop \(value t\)\n Mark href end points with the `hfy-endl' prop (value t).\n
Avoid overlapping links, and mark links in descending length of Avoid overlapping links, and mark links in descending length of
tag name in order to prevent subtags from usurping supertags, tag name in order to prevent subtags from usurping supertags,
\(eg \"term\" for \"terminal\"). \(eg \"term\" for \"terminal\").
@ -2134,7 +2134,7 @@ FILE is the specific file we are rendering."
`hfy-tags-cache' must already have an entry for SRCDIR for this to work. `hfy-tags-cache' must already have an entry for SRCDIR for this to work.
`hfy-page-header', `hfy-page-footer', `hfy-link-extn' and `hfy-extn' `hfy-page-header', `hfy-page-footer', `hfy-link-extn' and `hfy-extn'
all play a part here.\n all play a part here.\n
If STUB is set, prepare an \(appropriately named\) index buffer If STUB is set, prepare an (appropriately named) index buffer
specifically for entries beginning with STUB.\n specifically for entries beginning with STUB.\n
If MAP is set, use that instead of `hfy-tags-cache'. If MAP is set, use that instead of `hfy-tags-cache'.
FILENAME is the name of the file being indexed. FILENAME is the name of the file being indexed.
@ -2184,7 +2184,7 @@ DSTDIR is the output directory, where files will be written."
index-buf) )) index-buf) ))
(defun hfy-prepare-index (srcdir dstdir) (defun hfy-prepare-index (srcdir dstdir)
"Return a list of index buffer\(s\), as determined by `hfy-split-index'. "Return a list of index buffer(s), as determined by `hfy-split-index'.
SRCDIR and DSTDIR are the source and output directories respectively." SRCDIR and DSTDIR are the source and output directories respectively."
(if (not hfy-split-index) (if (not hfy-split-index)
(list (hfy-prepare-index-i srcdir dstdir hfy-index-file nil)) (list (hfy-prepare-index-i srcdir dstdir hfy-index-file nil))
@ -2207,12 +2207,11 @@ SRCDIR and DSTDIR are the source and output directories respectively."
index-list)) ))) cache-hash) ) index-list))) index-list)) ))) cache-hash) ) index-list)))
(defun hfy-prepare-tag-map (srcdir dstdir) (defun hfy-prepare-tag-map (srcdir dstdir)
"Prepare the counterpart\(s\) to the index buffer\(s\) - a list of buffers "Prepare the counterpart(s) to the index buffer(s) - a list of buffers
with the same structure, but listing \( and linking to \) instances of tags with the same structure, but listing (and linking to) instances of tags
\( as opposed to their definitions \).\n \(as opposed to their definitions).\n
SRCDIR and DSTDIR are the source and output directories respectively. SRCDIR and DSTDIR are the source and output directories respectively.
See: `hfy-prepare-index' See also `hfy-prepare-index', `hfy-split-index'."
`hfy-split-index'."
(if (not hfy-split-index) (if (not hfy-split-index)
(list (hfy-prepare-index-i srcdir (list (hfy-prepare-index-i srcdir
dstdir dstdir
@ -2242,7 +2241,7 @@ See: `hfy-prepare-index'
(defun hfy-subtract-maps (srcdir) (defun hfy-subtract-maps (srcdir)
"Internal function - strips definitions of tags from the instance map. "Internal function - strips definitions of tags from the instance map.
SRCDIR is the directory being \"published\". SRCDIR is the directory being \"published\".
See: `hfy-tags-cache' and `hfy-tags-rmap'" See also `hfy-tags-cache', `hfy-tags-rmap'."
(let ((new-list nil) (let ((new-list nil)
(old-list nil) (old-list nil)
(def-list nil) (def-list nil)
@ -2262,7 +2261,7 @@ See: `hfy-tags-cache' and `hfy-tags-rmap'"
(defun htmlfontify-run-etags (srcdir) (defun htmlfontify-run-etags (srcdir)
"Load the etags cache for SRCDIR. "Load the etags cache for SRCDIR.
See `hfy-load-tags-cache'." See also `hfy-load-tags-cache'."
(interactive "D source directory: ") (interactive "D source directory: ")
(setq srcdir (directory-file-name srcdir)) (setq srcdir (directory-file-name srcdir))
(hfy-load-tags-cache srcdir)) (hfy-load-tags-cache srcdir))