;;; html-wtoc.el --- Creating pages with site TOC ;; ;; Author: Lennart Borgman (lennart O borgman A gmail O com) ;; Created: Sat Feb 11 00:06:14 2006 (defconst html-wtoc:version "0.2") ;; Version: ;; Last-Updated: Sun Nov 04 21:49:34 2007 (3600 +0100) ;; Keywords: ;; Compatibility: ;; ;; Features that might be required by this library: ;; ;; None ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Commentary: ;; ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Change log: ;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; ;; You should have received a copy of the GNU General Public License ;; along with this program; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;; Code: (eval-when-compile (add-to-list 'load-path default-directory load-path)) (eval-when-compile (require 'html-site nil t)) ;;;###autoload (defgroup html-wtoc nil "Customization group for html-wtoc." :group 'nxhtml) (defcustom html-wtoc-dir (file-name-as-directory (expand-file-name "html-wtoc" (file-name-directory (if load-file-name load-file-name buffer-file-name)))) "Directory where the tools needed are located. The tools for html-wtoc includes: - html-wtoc.pl - html-wtoc.js - html-wtoc.css - html-wtoc-template.htm - html-wtoc-template.js - html-wtoc-template.css - img/ " :type 'directory :group 'html-wtoc) ;; (defun html-wtoc-get-parsed-html-toc () ;; (save-excursion ;; (let ((toc-file (html-toc-file))) ;; (unless (file-exists-p toc-file) ;; (html-toc-write-toc-file)) ;; (with-current-buffer (find-file-noselect toc-file) ;; (goto-char (point-min)) ;; (let ((toc-begin (search-forward html-toc-mark-begin nil t)) ;; (toc-middle (search-forward html-toc-mark-middle nil t)) ;; toc-parsed) ;; (unless (and toc-begin toc-middle) ;; (error "Can't find table of contents in %s" toc-file)) ;; (setq toc-parsed (html-toc-parse-toc ;; (buffer-substring-no-properties ;; toc-begin toc-middle)))))))) ;; (defun html-wtoc-get-atags (parsed-ul level) ;; (assert (eq 'ul (car parsed-ul))) ;; (let (atags) ;; (dolist (l parsed-ul) ;; (when (and (listp l) ;; (eq 'li (car l))) ;; (dolist (ll l) ;; (when (listp ll) ;; (when (eq 'a (car ll)) ;; (setq atags ;; (cons ;; (list level ;; (caddr ll) ;; (cdaadr ll)) ;; atags))) ;; (when (eq 'ul (car ll)) ;; (let ((subs (html-wtoc-get-atags ll (1+ level)))) ;; (dolist (s subs) ;; (setq atags (cons s atags))))))))) ;; (reverse atags))) ;; (defcustom html-wtoc-pages-default-name "html-wtoc-pages.txt" ;; "Default file name sans directory for list of pages file. ;; This file is located in the same directory as `html-toc-file'." ;; :type 'string) ;; (defun html-wtoc-pages-file () ;; (expand-file-name html-wtoc-pages-default-name ;; (file-name-directory (html-toc-file)))) (defun html-wtoc-browse-page-with-toc () (interactive) (unless buffer-file-name (error "This buffer is not visiting a file")) (html-site-current-ensure-site-defined) (let ((merge-dir (html-site-current-merge-dir)) merged-file (in-site (html-site-dir-contains (html-site-current-site-dir) buffer-file-name))) (unless merge-dir (error "There is no output dir for pages with TOC defined for the site %s" html-site-current)) (unless in-site (error "This buffer's file is not in %s" (html-site-current-site-dir))) (setq merged-file (expand-file-name (file-relative-name buffer-file-name (html-site-current-site-dir)) (html-site-current-merge-dir))) (unless (file-exists-p merged-file) (error "The file %s does not yet exist.\nPlease do use `html-wtoc-write-merged' to create it." merged-file)) (browse-url-of-file merged-file))) (defun html-wtoc-write-pages-with-toc (allow-overwrite) "Merge the TOC with the pages. If an entry with the name MERGE-NAME exists in `html-wtoc-merges' then this is chosen. Otherwise a new entry is created and added to `html-wtoc-merges'. The entry has all necessary information to do the merge. If `html-move-site-directory' has a non-nil value then the list of completions when prompting for MERGE-NAME contains only those merge names from `html-wtoc-merges' where the site directory has the same value. Otherwise the completion list contains all merge names and `html-move-site-directory' will be set to the chosen merge's site directory. The merging of the pages and the table of contents is done in a subprocess using a Perl script named html-wtoc.pl the directory `html-wtoc-dir'. " (interactive (list (y-or-n-p "Allow overwrite? "))) (html-site-current-ensure-site-defined) (let ((pag-file (html-site-current-page-list)) (out-dir (html-site-current-merge-dir)) (tpl-file (html-site-current-merge-template)) (html-wtoc-pl (expand-file-name "html-wtoc.pl" html-wtoc-dir)) ) (unless (< 0 (length pag-file)) (error "Page list file not defined for site %s" html-site-current)) (unless (file-exists-p pag-file) (error "Can't find page file for site %s.\nHave you done M-x html-toc-create-pages-file?" html-site-current)) (unless (< 0 (length tpl-file)) ;;(error "Template file not defined for site %s.\nPlease use customize to add this in `html-site-list'." html-site-current) (setq tpl-file (expand-file-name "html-wtoc-template.html" html-wtoc-dir)) ) (let ( (buffer (noshell-procbuf-setup "*Merging pages and TOC*")) (opt (list (concat "pages=" pag-file) (concat "outroot=" out-dir) (concat "template=" tpl-file)))) (when allow-overwrite (setq opt (cons "update=1" opt))) (apply 'noshell-procbuf-run buffer "perl" "-w" html-wtoc-pl "merge" opt )))) (provide 'html-wtoc) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; html-wtoc.el ends here