File: gen-special-replace.el

package info (click to toggle)
ruby-org 0.9.12-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,852 kB
  • sloc: ruby: 3,044; lisp: 50; makefile: 4
file content (60 lines) | stat: -rw-r--r-- 2,222 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
;; This code creates ruby code to replace special symbols with the corresponding utf8/html code

(require 'org-entities)

(defvar gen-use-entities-user t)
(defvar gen-file-name "replace-entities.rb")

(defun generate-replace-inbuffer (what)
  (insert "  " (capitalize what) "Entities = {\n")
  (let ((ll (if gen-use-entities-user
                (append org-entities-user org-entities)
              org-entities))
        (to (if (string= what "html") 3
              6)) ; use utf8 for textile
        (beg (point)))
    (insert (mapconcat
             (lambda (entity)
               (let ((symb (nth to entity)))
                 ;; escape backslashes and quotation marks
                 (setq symb (replace-regexp-in-string "\\(\\\\\\|\\\"\\)" "\\\\\\&" symb))
                 ;; escape percent marks from further formatting
                 (setq symb (replace-regexp-in-string "%" "%%" symb))
                 (concat "    \"" (car entity) "\" => \"" symb "\"")))
             (remove-if-not 'listp ll)
             ",\n")
            "\n")
    (align-regexp beg (point) "\\(\\s-+\\)=>" 1 1 t))
  (insert "  }\n"))

(defun generate-replace-header (what)
  (insert
   "# Autogenerated by util/gen-special-replace.el\n\n"
   "module Orgmode\n"))

(defun generate-replace-footer (what)
  (insert
   "  @org_entities_regexp = /\\\\(there4|sup[123]|frac[13][24]|[a-zA-Z]+)($|\\{\\}|[^a-zA-Z])/\n\n"
   "  def Orgmode.special_symbols_to_" what " str\n"
   "    str.gsub! @org_entities_regexp do |match|\n"
   "      if " (capitalize what) "Entities[$1]\n"
   "        if $2 == \"{}\" then \"#{" (capitalize what) "Entities[$1]}\"\n"
   "        else \"#{" (capitalize what) "Entities[$1]}#{$2}\"\n"
   "        end\n"
   "      else\n"
   "        $&\n"
   "      end\n"
   "    end\n"
   "  end\n"
   "end # module Orgmode\n"))

(defun generate-replace (file-name what)
  (let ((file (expand-file-name file-name)))
    (with-temp-buffer
      (generate-replace-header what)
      (generate-replace-inbuffer what)
      (generate-replace-footer what)
      (write-file file))))

(generate-replace "../lib/org-ruby/html_symbol_replace.rb" "html")
(generate-replace "../lib/org-ruby/textile_symbol_replace.rb" "textile")