New indentation treatment for blocks during export

Now we also deal with center, quote, and verse blocks.
This commit is contained in:
Carsten Dominik 2009-06-07 16:11:14 +02:00
parent d8e44c1fa0
commit 8a9e604a7a
7 changed files with 52 additions and 30 deletions

View File

@ -1,5 +1,13 @@
2009-06-07 Carsten Dominik <carsten.dominik@gmail.com>
* org-docbook.el (org-export-as-docbook): Better indentation
treatment.
* org-macs.el (org-replace-match-keep-properties): New function.
* org-exp.el (org-export-mark-blockquote-verse-center): Better
preprocessing of center and quote and verse blocks.
* org-docbook.el (org-export-docbook-close-lists-maybe): New function.
(org-export-as-docbook): Close lists when original indentation
mandates it.

View File

@ -642,9 +642,10 @@ publishing directory."
(org-export-docbook-open-para))
(throw 'nextline nil))
(org-export-docbook-close-lists-maybe line)
;; Protected HTML
(when (get-text-property 0 'org-protected line)
(org-export-docbook-close-lists-maybe line)
(let (par)
(when (re-search-backward
"\\(<para>\\)\\([ \t\r\n]*\\)\\=" (- (point) 100) t)
@ -973,7 +974,8 @@ publishing directory."
((= llt ?\)) "^\\([ \t]*\\)\\(\\([-+*] \\)\\|\\([0-9]+)\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
(t (error "Invalid value of `org-plain-list-ordered-item-terminator'")))
line)
(setq ind (org-get-string-indentation line)
(setq ind (or (get-text-property 0 'original-indentation line)
(org-get-string-indentation line))
item-type (if (match-beginning 4) "o" "u")
starter (if (match-beginning 2)
(substring (match-string 2 line) 0 -1))

View File

@ -1681,24 +1681,25 @@ from the buffer."
"Mark block quote and verse environments with special cookies.
These special cookies will later be interpreted by the backend."
;; Blockquotes
(goto-char (point-min))
(while (re-search-forward "^[ \t]*#\\+\\(begin\\|end\\)_\\(block\\)?quote\\>.*"
nil t)
(replace-match (if (equal (downcase (match-string 1)) "end")
"ORG-BLOCKQUOTE-END" "ORG-BLOCKQUOTE-START")
t t))
;; Verse
(goto-char (point-min))
(while (re-search-forward "^[ \t]*#\\+\\(begin\\|end\\)_verse\\>.*" nil t)
(replace-match (if (equal (downcase (match-string 1)) "end")
"ORG-VERSE-END" "ORG-VERSE-START")
t t))
;; Center
(goto-char (point-min))
(while (re-search-forward "^[ \t]*#\\+\\(begin\\|end\\)_center\\>.*" nil t)
(replace-match (if (equal (downcase (match-string 1)) "end")
"ORG-CENTER-END" "ORG-CENTER-START")
t t)))
(let (type t1 ind beg end beg1 end1)
(goto-char (point-min))
(while (re-search-forward
"^\\([ \t]*\\)#\\+\\(begin_\\(\\(block\\)?quote\\|verse\\|center\\)\\>.*\\)"
nil t)
(setq ind (length (match-string 1))
type (downcase (match-string 3))
t1 (if (equal type "quote") "blockquote" type))
(setq beg (match-beginning 0)
beg1 (1+ (match-end 0)))
(when (re-search-forward (concat "^[ \t]*#\\+end_" type "\\>.*") nil t)
(setq end (1+ (point-at-eol))
end1 (1- (match-beginning 0)))
(setq content (org-remove-indentation (buffer-substring beg1 end1)))
(setq content (concat "ORG-" (upcase type) "-START\n"
content "\n"
"ORG-" (upcase type) "-END\n"))
(delete-region beg end)
(insert (org-add-props content nil 'original-indentation ind))))))
(defun org-export-attach-captions-and-attributes (backend target-alist)
"Move #+CAPTION, #+ATTR_BACKEND, and #+LABEL text into text properties.

View File

@ -839,9 +839,10 @@ lang=\"%s\" xml:lang=\"%s\">
(org-open-par))
(throw 'nextline nil))
(org-export-html-close-lists-maybe line)
;; Protected HTML
(when (get-text-property 0 'org-protected line)
(org-export-html-close-lists-maybe line)
(let (par)
(when (re-search-backward
"\\(<p>\\)\\([ \t\r\n]*\\)\\=" (- (point) 100) t)
@ -1181,7 +1182,8 @@ lang=\"%s\" xml:lang=\"%s\">
((= llt ?\)) "^\\([ \t]*\\)\\(\\([-+*] \\)\\|\\([0-9]+)\\) \\)?\\( *[^ \t\n\r]\\|[ \t]*$\\)")
(t (error "Invalid value of `org-plain-list-ordered-item-terminator'")))
line)
(setq ind (org-get-string-indentation line)
(setq ind (or (get-text-property 0 'original-indentation line)
(org-get-string-indentation line))
item-type (if (match-beginning 4) "o" "u")
starter (if (match-beginning 2)
(substring (match-string 2 line) 0 -1))

View File

@ -1510,20 +1510,20 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
;; Convert blockquotes
(goto-char (point-min))
(while (search-forward "ORG-BLOCKQUOTE-START" nil t)
(replace-match "\\begin{quote}" t t))
(org-replace-match-keep-properties "\\begin{quote}" t t))
(goto-char (point-min))
(while (search-forward "ORG-BLOCKQUOTE-END" nil t)
(replace-match "\\end{quote}" t t))
(org-replace-match-keep-properties "\\end{quote}" t t))
;; Convert verse
(goto-char (point-min))
(while (search-forward "ORG-VERSE-START" nil t)
(replace-match "\\begin{verse}" t t)
(org-replace-match-keep-properties "\\begin{verse}" t t)
(beginning-of-line 2)
(while (and (not (looking-at "[ \t]*ORG-VERSE-END.*")) (not (eobp)))
(when (looking-at "\\([ \t]+\\)\\([^ \t\n]\\)")
(goto-char (match-end 1))
(replace-match
(org-replace-match-keep-properties
(org-export-latex-protect-string
(concat "\\hspace*{1cm}" (match-string 2))) t t)
(beginning-of-line 1))
@ -1532,15 +1532,15 @@ The conversion is made depending of STRING-BEFORE and STRING-AFTER."
(insert "\\\\"))
(beginning-of-line 2))
(and (looking-at "[ \t]*ORG-VERSE-END.*")
(replace-match "\\end{verse}" t t)))
(org-replace-match-keep-properties "\\end{verse}" t t)))
;; Convert center
(goto-char (point-min))
(while (search-forward "ORG-CENTER-START" nil t)
(replace-match "\\begin{center}" t t))
(org-replace-match-keep-properties "\\begin{center}" t t))
(goto-char (point-min))
(while (search-forward "ORG-CENTER-END" nil t)
(replace-match "\\end{center}" t t))
(org-replace-match-keep-properties "\\end{center}" t t))
(run-hooks 'org-export-latex-after-blockquotes-hook)

View File

@ -1055,7 +1055,7 @@ INDENT is the indentation of the list, as a string."
(catch 'exit
(while (or (looking-at org-list-beginning-re)
(looking-at (concat "^" indent "[ \t]+\\|^$"))
(>= (or (get-text-property (point) 'original-indentation) -1)
(> (or (get-text-property (point) 'original-indentation) -1)
(length indent)))
(if (eq (point) (point-max))
(throw 'exit (point-max)))

View File

@ -245,6 +245,15 @@ This is in contrast to merely setting it to 0."
(setq plist (cddr plist)))
p))
(defun org-replace-match-keep-properties (newtext &optional fixedcase
literal string)
"Like `replace-match', but add the text properties found original text."
(setq newtext (org-add-props newtext (text-properties-at
(match-beginning 0) string)))
(replace-match newtext fixedcase literal string))
(provide 'org-macs)
;; arch-tag: 7e6a73ce-aac9-4fc0-9b30-ce6f89dc6668