From a488b43b66971b16f63141d29cb61f44b959abfa Mon Sep 17 00:00:00 2001 From: Eric Schulte Date: Fri, 6 Aug 2010 11:29:33 -0400 Subject: [PATCH] introduction of colorization for html output * lisp/org-exp.el (org-export-with-color): new customization parameter controlling the code colorization on export * lisp/org-html.el (org-html-do-expand): conditional application of string colorization in html (org-export-html-colorize): apply html colorization to org-mode text * lisp/org.el (org-fontify-colorized-text): add option to control in-buffer colorization of the text (org-do-colorize-faces): function which applies color to a buffer (org-set-font-lock-defaults): add coloring to the org-mode fontification loop --- lisp/org-exp.el | 5 +++++ lisp/org-html.el | 18 ++++++++++++++++++ lisp/org.el | 27 +++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 0 deletions(-) diff --git a/lisp/org-exp.el b/lisp/org-exp.el index 6fc5109..991a555 100644 --- a/lisp/org-exp.el +++ b/lisp/org-exp.el @@ -445,6 +445,11 @@ This option can also be set with the +OPTIONS line, e.g. \"*:nil\"." :group 'org-export-translation :type 'boolean) +(defcustom org-export-with-color t + "Non-nil means apply colors to exported text." + :group 'org-export-translation + :type 'boolean) + (defcustom org-export-with-footnotes t "If nil, export [1] as a footnote marker. Lines starting with [1] will be formatted as footnotes. diff --git a/lisp/org-html.el b/lisp/org-html.el index a12141f..3d3bdcb 100644 --- a/lisp/org-html.el +++ b/lisp/org-html.el @@ -2060,6 +2060,8 @@ If there are links in the string, don't modify these." (setq s (replace-match "<\\1>" t nil s)))) (if org-export-with-emphasize (setq s (org-export-html-convert-emphasize s))) + (if org-export-with-color + (setq s (org-export-html-colorize s))) (if org-export-with-special-strings (setq s (org-export-html-convert-special-strings s))) (if org-export-with-sub-superscripts @@ -2131,6 +2133,22 @@ If there are links in the string, don't modify these." (setq s (1+ s)))) string)) +(defun org-export-html-colorize (string) + "Apply colors." + (replace-regexp-in-string + "\\\\color{\\(.+?\\)}{\\(.+?\\)}" + (lambda (text) + (let ((ind 7) (length (length text))) + (while (and (< ind length) + (not (string= (substring text ind (+ 2 ind)) "}{"))) + (setq ind (+ 1 ind))) + (if (get-text-property (match-beginning 0) 'org-protected string) + text + (concat "" (substring text (+ 2 ind) (- length 1)) + "")))) + string)) + (defun org-open-par () "Insert

, but first close previous paragraph if any." (org-close-par-maybe) diff --git a/lisp/org.el b/lisp/org.el index d2c1fdf..fe98fb0 100644 --- a/lisp/org.el +++ b/lisp/org.el @@ -3282,6 +3282,12 @@ Changing this variable requires a restart of Emacs to take effect." :group 'org-appearance :type 'boolean) +(defcustom org-fontify-colorized-text t + "Non-nil means colorize colored text. +Changing this variable requires a restart of Emacs to take effect." + :group 'org-appearance + :type 'boolean) + (defcustom org-fontify-whole-heading-line nil "Non-nil means fontify the whole line for headings. This is useful when setting a background color for the @@ -4920,6 +4926,21 @@ The time stamps may be either active or inactive.") (backward-char 1)) rtn)) +(defun org-do-colorize-faces (limit) + "Run through the buffer and add overlays to colored text." + (let ((org-color-re "\\\\color{\\(.+?\\)}{\\(.+?\\)}")) + (while (re-search-forward org-color-re limit t) + ;; hide wrapper + (add-text-properties (match-beginning 0) (+ 2 (match-end 1)) + '(invisible org-link)) + (add-text-properties (- (match-end 0) 1) (match-end 0) + '(invisible org-link)) + ;; color text + (font-lock-prepend-text-property (match-beginning 2) (match-end 2) + 'face + `((t (:foreground ,(match-string 1)))))) + rtn)) + (defun org-emphasize (&optional char) "Insert or change an emphasis, i.e. a font like bold or italic. If there is an active region, change that region to a new emphasis. @@ -5367,6 +5388,7 @@ For plain list items, if they are matched by `outline-regexp', this returns (defun org-set-font-lock-defaults () (let* ((em org-fontify-emphasized-text) + (co org-fontify-colorized-text) (lk org-activate-links) (org-font-lock-extra-keywords (list @@ -5429,6 +5451,11 @@ For plain list items, if they are matched by `outline-regexp', this returns (if (featurep 'xemacs) '(org-do-emphasis-faces (0 nil append)) '(org-do-emphasis-faces))) + ;; Color + (if co + (if (featurep 'xemacs) + '(org-do-colorize-faces (0 nil append)) + '(org-do-colorize-faces))) ;; Checkboxes '("^[ \t]*\\([-+*]\\|[0-9]+[.)]\\) +\\(\\[[- X]\\]\\)" 2 'org-checkbox prepend) -- 1.7.0.4