diff --git a/Rakefile b/Rakefile index 83c6257..c63d269 100644 --- a/Rakefile +++ b/Rakefile @@ -50,6 +50,10 @@ task :release => [:package, 'doc:archive'] do raise "Not implemented for github yet!" end +# rake doc[../htmlize] +# +# To do this interactively, load doc/yas-doc-helper, open one of the +# org files, and do `C-c C-e P'. desc "Generate document" task :doc, [:htmlize] do |t, args| load_path = '-L .' diff --git a/doc/nav-menu.html.inc b/doc/nav-menu.html.inc index 2a3f0a1..3e74cf8 100644 --- a/doc/nav-menu.html.inc +++ b/doc/nav-menu.html.inc @@ -3,8 +3,8 @@
*/ -code { - background-color: #F3F5F7; - font-family: courier, monospace; +.nopad { + padding: 0; +} +li.border { + border: solid; + border-width: 1px; } -#content { - margin-left: 5%; - margin-right: 10%; +pre, code{ background-color: #F3F5F7; } +code { + /* http://neugierig.org/software/chromium/notes/2009/09/monospace-fonts-workaround.html */ + font-family: WorkAroundWebKitAndMozilla, monospace; + white-space: nowrap; } /* Styles for htmlize.el fontification. */ diff --git a/doc/stylesheets/styles.css b/doc/stylesheets/styles.css deleted file mode 100644 index a158012..0000000 --- a/doc/stylesheets/styles.css +++ /dev/null @@ -1,93 +0,0 @@ -@media all -{ - body { - margin: 1em auto; - /*margin: 10px 18% 10px 18%;*/ - font-family: Arial; - /*text-align: justify;*/ - font-size: 14pt; - padding: 10px; - line-height: 1.2em; - max-width: 600pt; - } - - div#table-of-contents { - position: fixed; - left: 0%; - right: 0%; - top: 0px; - z-index: 100; - background: black; - } - - div#table-of-contents h2 { - display: none; - } - - div#table-of-contents a { - text-decoration: none; - color: white; - } - - div#table-of-contents a:visited { - color: white; - } - - div#table-of-contents a:hover { - color: orange; - } - - div.outline-2 h2{ - padding-top: 50px; - } - - div#text-table-of-contents { - text-color: white; - text-align: center; - margin-left: 30%; - margin-right: 30%; - } - - div#text-table-of-contents ul { - height: 2em; - width: 500px; - list-style: none; - margin: auto; - } - - div#text-table-of-contents ul li { - float: left; - margin-left:auto; - margin-right: auto; - padding-left: 10px; - } - - div#postamble{ - position: fixed; - width: 800px; - height: 250px; - left: 50%; - right: 50%; - margin:-75px 0 0 -400px; - bottom: -20px; - font-size: 10pt; - color: grey; - background: url('siscog-bottom-logo.png') no-repeat; - /* background-size: 100% 100%; */ - } - - div#postamble *{ - display: none; - } - - div#postamble p.date{ - position: relative; - bottom: -200px; - text-align: center; - display: block; - } - - - - -} \ No newline at end of file diff --git a/doc/yas-doc-helper.el b/doc/yas-doc-helper.el index e272e41..f48628f 100644 --- a/doc/yas-doc-helper.el +++ b/doc/yas-doc-helper.el @@ -31,13 +31,14 @@ (require 'ox-publish)) (require 'yasnippet) ; docstrings must be loaded -(defun yas--org-raw-html (tag content) +(defun yas--org-raw-html (tag content &optional attrs) ;; in version 8.0 org-mode changed the export syntax, see ;; http://orgmode.org/worg/org-8.0.html#sec-8-1 (format (if (version< org-version "8.0.0") "@<%s>%s@%s>" ; old: @"@@html:<%s>@@%s@@html:%s>@@") ; new: @@html: @@ - tag content tag)) + (concat tag (if attrs " ") attrs) + content tag)) (defun yas--document-symbol (symbol level) (let* ((stars (make-string level ?*)) @@ -45,14 +46,17 @@ (mapcar #'symbol-name (help-function-arglist symbol t)))) (heading (cond ((fboundp symbol) (format - "%s =%s= (%s)" stars symbol + "%s %s (%s)\n" stars (yas--org-raw-html "code" symbol "class='function'") (mapconcat (lambda (a) (format (if (string-prefix-p "&" a) - "/%s/" "=%s=") a)) + "/%s/" "=%s=") + a)) args " "))) (t - (format "%s =%s=\n" stars symbol)))) + (format "%s %s\n" stars + (yas--org-raw-html "code" symbol "class='variable'"))))) (after-heading (format ":PROPERTIES:\n:CUSTOM_ID: %s\n:END:" symbol)) + (text-quoting-style 'grave) (body (or (cond ((fboundp symbol) (let ((doc-synth (car-safe (get symbol 'function-documentation)))) (if (functionp doc-synth) @@ -64,10 +68,17 @@ (format "*WARNING*: no symbol named =%s=" symbol))) (format "*WARNING*: no doc for symbol =%s=" symbol))) (case-fold-search nil)) - ;; do some transformations on the body: + ;; Do some transformations on the body: ;; ARGxxx becomes @ arg@
xxx ;; FOO becomes /foo/ ;; `bar' becomes [[#bar][=bar=]] + ;; (...) becomes #+BEGIN_SRC elisp (...) #+END_SRC + ;; Info node `(some-manual) Node Name' becomes + ;; [[https://www.gnu.org/software/emacs/manual/html_node/some-manual/Node-Name.html] + ;; [(some-manual) Node Name]] + ;; + ;; This is fairly fragile, though it seems to be working for + ;; now... (setq body (replace-regexp-in-string "\\<\\([A-Z][-A-Z0-9]+\\)\\(\\sw+\\)?\\>" #'(lambda (match) @@ -82,16 +93,41 @@ match1))) body t t 1) body (replace-regexp-in-string - "`\\([a-z-]+\\)'" + "\\\\{[^}]+}" + (lambda (match) + (concat "#+BEGIN_EXAMPLE\n" + (substitute-command-keys match) + "#+END_EXAMPLE\n")) + body t t) + body (substitute-command-keys body) + body (replace-regexp-in-string + "Info node `(\\([-a-z]+\\)) \\([A-Za-z0-9 ]+\\)'" + (lambda (match) + (let* ((manual (match-string 1 match)) + (node (match-string 2 match)) + (html-node (replace-regexp-in-string " " "-" node t t))) + (format "Info node\ + [[https://www.gnu.org/software/emacs/manual/html_node/%s/%s.html][(%s) %s]]" + manual html-node manual node))) + body t t) + body (replace-regexp-in-string + "`\\([-a-z]+\\)'" #'(lambda (match) (let* ((name (downcase (match-string 1 match))) - (sym (intern name))) + (sym (intern-soft name))) (if (memq sym yas--exported-syms) (format "[[#%s][=%s=]]" name name) (format "=%s=" name)))) - body t)) + body t t) + body (replace-regexp-in-string + "\n\n +(.+\\(?:\n +.+\\)*" + (lambda (match) + (concat "\n#+BEGIN_SRC elisp\n" + match + "\n#+END_SRC\n")) + body t t)) ;; output the paragraph - (concat heading "\n" after-heading "\n" body))) + (concat heading after-heading "\n" body))) (defun yas--document-symbols (level &rest names-and-predicates) (let ((sym-lists (make-vector (length names-and-predicates) nil)) @@ -118,6 +154,22 @@ ;; This lets all the org files be exported to HTML with ;; `org-publish-current-project' (C-c C-e P). +(defun yas--make-preamble (props) + "Return contents of nav-menu-html.inc. +But replace link to \"current\" page with a span element." + (with-temp-buffer + (let ((dir (file-name-directory (plist-get props :input-file)))) + (insert-file-contents (expand-file-name "nav-menu.html.inc" dir)) + (goto-char (point-min)) + (search-forward (concat "")) + (replace-match "") + (search-forward "") + (replace-match "") + (buffer-string)))) + (let* ((dir (if load-file-name (file-name-directory load-file-name) default-directory)) (src-epoch (getenv "SOURCE_DATE_EPOCH")) @@ -138,10 +190,8 @@ `(,@(when (fboundp 'org-html-publish-to-html) '(:publishing-function org-html-publish-to-html)) :base-directory ,dir :publishing-directory ,dir - :html-preamble - ,(with-temp-buffer - (insert-file-contents (expand-file-name "nav-menu.html.inc" dir)) - (buffer-string)) + :html-preamble yas--make-preamble + ;;:with-broken-links mark :html-postamble ,(concat "Generated by %c from " (or rev yas--version) " " date "
\n" diff --git a/yasnippet.el b/yasnippet.el index 11bc270..0d41241 100644 --- a/yasnippet.el +++ b/yasnippet.el @@ -237,7 +237,7 @@ nil. - To signal that the user quit the prompting process, you can signal `quit' with - (signal \\='quit \"user quit!\")." + (signal \\='quit \"user quit!\")" :type '(repeat function)) (defcustom yas-indent-line 'auto @@ -2946,7 +2946,8 @@ Otherwise signal `yas-exception'." (defun yas-field-value (number) "Get the string for field with NUMBER. -Use this in primary and mirror transformations to tget." +Use this in primary and mirror transformations to get the text of +other fields." (let* ((snippet (car (yas-active-snippets))) (field (and snippet (yas--snippet-find-field snippet number))))