You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
;;; ein-multilang-fontify.el --- Syntax highlighting for multiple-languages
;; Copyright (C) 2012 Takafumi Arakaki
;; Author: Takafumi Arakaki <aka.tkf at gmail.com>
;; This file is NOT part of GNU Emacs.
;; ein-multilang-fontify.el 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 3 of;; the License, or (at your option) any later version.
;; ein-multilang-fontify.el 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 ein-multilang-fontify.el.;; If not, see <http://www.gnu.org/licenses/>.
;;; Commentary:
;;
;;; Code:
;; It would be nice if org-src is available, but this module should;; work without org-src. Data on `org-src-lang-modes' is used;; if this variable is bound.(require 'org-src nil t)
(defun ein:mlf-get-lang-mode (lang) "Return major mode for LANG.
Modified version of `org-src-get-lang-mode'."
(when (symbolp lang) (setq lang (symbol-name lang))) (intern (format "%s-mode" (or (and (bound-and-true-p org-src-lang-modes) (cdr (assoc lang org-src-lang-modes))) lang))))
(defun ein:mlf-font-lock-fontify-block (lang start end) "Patched version of `org-src-font-lock-fontify-block'." (let ((lang-mode (ein:mlf-get-lang-mode lang))) (if (fboundp lang-mode) (let ((string (buffer-substring-no-properties start end)) (modified (buffer-modified-p)) (orig-buffer (current-buffer)) pos next) (remove-text-properties start end '(face nil)) (with-current-buffer (get-buffer-create (concat " ein:mlf-fontification:" (symbol-name lang-mode))) (delete-region (point-min) (point-max)) (insert string) (unless (eq major-mode lang-mode) (funcall lang-mode)) (font-lock-fontify-buffer) (setq pos (point-min)) (cl-loop for next = (next-single-property-change pos 'face nil (point-max)) do (put-text-property ;; `font-lock-face' property is used instead of `font'. ;; This is the only difference from org-src. (+ start (1- pos)) (+ start next) 'font-lock-face (get-text-property pos 'face) orig-buffer) do (setq pos next) until (eq pos (point-max)))) (add-text-properties start end '(font-lock-fontified t fontified t font-lock-multiline t)) (set-buffer-modified-p modified)))))
(provide 'ein-multilang-fontify)
;;; ein-multilang-fontify.el ends here
|