Forum Astuces.divers [Éditeur/Emacs] Transformer un buffer avec coloration syntaxique en buffer HTML

Posté par  .
Étiquettes : aucune
0
10
nov.
2007
Pour ceux qui vivent dans Emacs, voilà quelques lignes de code qui m'ont été bien utiles: transformer un buffer avec coloration syntaxique en un buffer HTML pour sauvegarde...


(defun replace-string* (from to)
(while (search-forward from (point-max) t)
(backward-char 1)
(let ((props (text-properties-at (point))))
(delete-char (length from))
(let ((string (format "%s" to)))
(set-text-properties 0 (length string) props string)
(insert string)))))

(defun faces:save-as-html ()
(interactive)
(let* ((buffer-name (format "*HTML:%s*" (buffer-name)))
(buffer (get-buffer (buffer-name)))
(buffer-html (or (get-buffer buffer-name)
(generate-new-buffer buffer-name))))
(save-excursion
(set-buffer buffer-html)
(insert-buffer buffer)
(save-excursion
(goto-char (point-min))
(replace-string* "&" "&"))
(save-excursion
(goto-char (point-min))
(replace-string* "<" "<"))
(save-excursion
(goto-char (point-min))
(replace-string* ">" ">"))
(let ((current-color nil))
(insert "<body text=\"white\" bgcolor=\"black\">\n")
(while (not (eobp))
(let ((color (let ((face (get-text-property (point) 'face)))
(if face
(face-foreground (if (consp face)
(first face)
face))
nil))))
(if (not (eq color current-color))
(progn
(when current-color
(insert ""))
(when color
(insert (format "<font color=\"%s\">" color)))
(setq current-color color)))
(forward-char 1)))
(when current-color
(insert "")))
(insert "\n"))
(display-buffer buffer-html)))

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.