forked from mirrors/org-mode
ox-ascii: Use options instead of defcustoms in code
* lisp/ox-ascii.el (org-ascii--current-text-width, org-ascii--build-title, org-ascii--build-toc, org-ascii--list-listings, org-ascii--list-tables, org-ascii-template--document-title, org-ascii-inner-template, org-ascii-template, org-ascii-code, org-ascii-drawer, org-ascii-headline, org-ascii-inline-src-block, org-ascii-format-inlinetask-default, org-ascii-inlinetask, org-ascii-link, org-ascii-paragraph, org-ascii-quote-block, org-ascii-section, org-ascii-src-block, org-ascii-table, org-ascii--table-cell-width, org-ascii-table-cell, org-ascii-verbatim, org-ascii-verse-block, org-ascii-filter-headline-blank-lines, org-ascii-filter-paragraph-spacing): Use options instead of hard coded variables.
This commit is contained in:
parent
f4455f4902
commit
dd6b4ffcef
277
lisp/ox-ascii.el
277
lisp/ox-ascii.el
|
@ -543,11 +543,12 @@ INFO is a plist used as a communication channel."
|
|||
INFO is a plist used as a communication channel."
|
||||
(case (org-element-type element)
|
||||
;; Elements with an absolute width: `headline' and `inlinetask'.
|
||||
(inlinetask org-ascii-inlinetask-width)
|
||||
(inlinetask (plist-get info :ascii-inlinetask-width))
|
||||
(headline
|
||||
(- org-ascii-text-width
|
||||
(- (plist-get info :ascii-text-width)
|
||||
(let ((low-level-rank (org-export-low-level-p element info)))
|
||||
(if low-level-rank (* low-level-rank 2) org-ascii-global-margin))))
|
||||
(if low-level-rank (* low-level-rank 2)
|
||||
(plist-get info :ascii-global-margin)))))
|
||||
;; Elements with a relative width: store maximum text width in
|
||||
;; TOTAL-WIDTH.
|
||||
(otherwise
|
||||
|
@ -557,10 +558,10 @@ INFO is a plist used as a communication channel."
|
|||
(total-width
|
||||
(if (loop for parent in genealogy
|
||||
thereis (eq (org-element-type parent) 'inlinetask))
|
||||
org-ascii-inlinetask-width
|
||||
(plist-get info :ascii-inlinetask-width)
|
||||
;; No inlinetask: Remove global margin from text width.
|
||||
(- org-ascii-text-width
|
||||
org-ascii-global-margin
|
||||
(- (plist-get info :ascii-text-width)
|
||||
(plist-get info :ascii-global-margin)
|
||||
(let ((parent (org-export-get-parent-headline element)))
|
||||
;; Inner margin doesn't apply to text before first
|
||||
;; headline.
|
||||
|
@ -571,7 +572,7 @@ INFO is a plist used as a communication channel."
|
|||
;; low level headlines, since they've got their
|
||||
;; own indentation mechanism.
|
||||
(if low-level-rank (* low-level-rank 2)
|
||||
org-ascii-inner-margin))))))))
|
||||
(plist-get info :ascii-inner-margin)))))))))
|
||||
(- total-width
|
||||
;; Each `quote-block' and `verse-block' above narrows text
|
||||
;; width by twice the standard margin size.
|
||||
|
@ -579,7 +580,7 @@ INFO is a plist used as a communication channel."
|
|||
when (memq (org-element-type parent)
|
||||
'(quote-block verse-block))
|
||||
count parent)
|
||||
2 org-ascii-quote-margin)
|
||||
2 (plist-get info :ascii-quote-margin))
|
||||
;; Text width within a plain-list is restricted by
|
||||
;; indentation of current item. If that's the case,
|
||||
;; compute it with the help of `:structure' property from
|
||||
|
@ -685,7 +686,7 @@ possible. It doesn't apply to `inlinetask' elements."
|
|||
(let ((under-char
|
||||
(nth (1- (org-export-get-relative-level element info))
|
||||
(cdr (assq (plist-get info :ascii-charset)
|
||||
org-ascii-underline)))))
|
||||
(plist-get info :ascii-underline))))))
|
||||
(and under-char
|
||||
(concat "\n"
|
||||
(make-string (/ (string-width first-part)
|
||||
|
@ -742,7 +743,8 @@ which the table of contents generation has been initiated."
|
|||
"\n\n"
|
||||
(let ((text-width
|
||||
(if keyword (org-ascii--current-text-width keyword info)
|
||||
(- org-ascii-text-width org-ascii-global-margin))))
|
||||
(- (plist-get info :ascii-text-width)
|
||||
(plist-get info :ascii-global-margin)))))
|
||||
(mapconcat
|
||||
(lambda (headline)
|
||||
(let* ((level (org-export-get-relative-level headline info))
|
||||
|
@ -769,7 +771,8 @@ generation. INFO is a plist used as a communication channel."
|
|||
"\n\n"
|
||||
(let ((text-width
|
||||
(if keyword (org-ascii--current-text-width keyword info)
|
||||
(- org-ascii-text-width org-ascii-global-margin)))
|
||||
(- (plist-get info :ascii-text-width)
|
||||
(plist-get info :ascii-global-margin))))
|
||||
;; Use a counter instead of retrieving ordinal of each
|
||||
;; src-block.
|
||||
(count 0))
|
||||
|
@ -808,7 +811,8 @@ generation. INFO is a plist used as a communication channel."
|
|||
"\n\n"
|
||||
(let ((text-width
|
||||
(if keyword (org-ascii--current-text-width keyword info)
|
||||
(- org-ascii-text-width org-ascii-global-margin)))
|
||||
(- (plist-get info :ascii-text-width)
|
||||
(plist-get info :ascii-global-margin))))
|
||||
;; Use a counter instead of retrieving ordinal of each
|
||||
;; src-block.
|
||||
(count 0))
|
||||
|
@ -927,10 +931,10 @@ INFO is a plist used as a communication channel."
|
|||
(defun org-ascii-template--document-title (info)
|
||||
"Return document title, as a string.
|
||||
INFO is a plist used as a communication channel."
|
||||
(let* ((text-width org-ascii-text-width)
|
||||
(let* ((text-width (plist-get info :ascii-text-width))
|
||||
;; Links in the title will not be resolved later, so we make
|
||||
;; sure their path is located right after them.
|
||||
(org-ascii-links-to-notes nil)
|
||||
(info (org-combine-plists info '(:ascii-links-to-notes nil)))
|
||||
(title (org-export-data (plist-get info :title) info))
|
||||
(author (and (plist-get info :with-author)
|
||||
(let ((auth (plist-get info :author)))
|
||||
|
@ -1003,81 +1007,84 @@ INFO is a plist used as a communication channel."
|
|||
CONTENTS is the transcoded contents string. INFO is a plist
|
||||
holding export options."
|
||||
(org-element-normalize-string
|
||||
(org-ascii--indent-string
|
||||
(concat
|
||||
;; 1. Document's body.
|
||||
contents
|
||||
;; 2. Footnote definitions.
|
||||
(let ((definitions (org-export-collect-footnote-definitions
|
||||
(plist-get info :parse-tree) info))
|
||||
;; Insert full links right inside the footnote definition
|
||||
;; as they have no chance to be inserted later.
|
||||
(org-ascii-links-to-notes nil))
|
||||
(when definitions
|
||||
(concat
|
||||
"\n\n\n"
|
||||
(let ((title (org-ascii--translate "Footnotes" info)))
|
||||
(concat
|
||||
title "\n"
|
||||
(make-string
|
||||
(string-width title)
|
||||
(if (eq (plist-get info :ascii-charset) 'utf-8) ?─ ?_))))
|
||||
"\n\n"
|
||||
(let ((text-width (- org-ascii-text-width org-ascii-global-margin)))
|
||||
(mapconcat
|
||||
(lambda (ref)
|
||||
(let ((id (format "[%s] " (car ref))))
|
||||
;; Distinguish between inline definitions and
|
||||
;; full-fledged definitions.
|
||||
(org-trim
|
||||
(let ((def (nth 2 ref)))
|
||||
(if (eq (org-element-type def) 'org-data)
|
||||
;; Full-fledged definition: footnote ID is
|
||||
;; inserted inside the first parsed paragraph
|
||||
;; (FIRST), if any, to be sure filling will
|
||||
;; take it into consideration.
|
||||
(let ((first (car (org-element-contents def))))
|
||||
(if (not (eq (org-element-type first) 'paragraph))
|
||||
(concat id "\n" (org-export-data def info))
|
||||
(push id (nthcdr 2 first))
|
||||
(org-export-data def info)))
|
||||
;; Fill paragraph once footnote ID is inserted
|
||||
;; in order to have a correct length for first
|
||||
;; line.
|
||||
(org-ascii--fill-string
|
||||
(concat id (org-export-data def info))
|
||||
text-width info))))))
|
||||
definitions "\n\n"))))))
|
||||
org-ascii-global-margin)))
|
||||
(let ((global-margin (plist-get info :ascii-global-margin)))
|
||||
(org-ascii--indent-string
|
||||
(concat
|
||||
;; 1. Document's body.
|
||||
contents
|
||||
;; 2. Footnote definitions.
|
||||
(let ((definitions (org-export-collect-footnote-definitions
|
||||
(plist-get info :parse-tree) info))
|
||||
;; Insert full links right inside the footnote definition
|
||||
;; as they have no chance to be inserted later.
|
||||
(info (org-combine-plists info '(:ascii-links-to-notes nil))))
|
||||
(when definitions
|
||||
(concat
|
||||
"\n\n\n"
|
||||
(let ((title (org-ascii--translate "Footnotes" info)))
|
||||
(concat
|
||||
title "\n"
|
||||
(make-string
|
||||
(string-width title)
|
||||
(if (eq (plist-get info :ascii-charset) 'utf-8) ?─ ?_))))
|
||||
"\n\n"
|
||||
(let ((text-width (- (plist-get info :ascii-text-width)
|
||||
global-margin)))
|
||||
(mapconcat
|
||||
(lambda (ref)
|
||||
(let ((id (format "[%s] " (car ref))))
|
||||
;; Distinguish between inline definitions and
|
||||
;; full-fledged definitions.
|
||||
(org-trim
|
||||
(let ((def (nth 2 ref)))
|
||||
(if (eq (org-element-type def) 'org-data)
|
||||
;; Full-fledged definition: footnote ID is
|
||||
;; inserted inside the first parsed
|
||||
;; paragraph (FIRST), if any, to be sure
|
||||
;; filling will take it into consideration.
|
||||
(let ((first (car (org-element-contents def))))
|
||||
(if (not (eq (org-element-type first) 'paragraph))
|
||||
(concat id "\n" (org-export-data def info))
|
||||
(push id (nthcdr 2 first))
|
||||
(org-export-data def info)))
|
||||
;; Fill paragraph once footnote ID is inserted
|
||||
;; in order to have a correct length for first
|
||||
;; line.
|
||||
(org-ascii--fill-string
|
||||
(concat id (org-export-data def info))
|
||||
text-width info))))))
|
||||
definitions "\n\n"))))))
|
||||
global-margin))))
|
||||
|
||||
(defun org-ascii-template (contents info)
|
||||
"Return complete document string after ASCII conversion.
|
||||
CONTENTS is the transcoded contents string. INFO is a plist
|
||||
holding export options."
|
||||
(concat
|
||||
;; 1. Build title block.
|
||||
(org-ascii--indent-string
|
||||
(concat (org-ascii-template--document-title info)
|
||||
;; 2. Table of contents.
|
||||
(let ((depth (plist-get info :with-toc)))
|
||||
(when depth
|
||||
(concat
|
||||
(org-ascii--build-toc info (and (wholenump depth) depth))
|
||||
"\n\n\n"))))
|
||||
org-ascii-global-margin)
|
||||
;; 3. Document's body.
|
||||
contents
|
||||
;; 4. Creator. Ignore `comment' value as there are no comments in
|
||||
;; ASCII. Justify it to the bottom right.
|
||||
(org-ascii--indent-string
|
||||
(let ((creator-info (plist-get info :with-creator))
|
||||
(text-width (- org-ascii-text-width org-ascii-global-margin)))
|
||||
(unless (or (not creator-info) (eq creator-info 'comment))
|
||||
(concat
|
||||
"\n\n\n"
|
||||
(org-ascii--fill-string
|
||||
(plist-get info :creator) text-width info 'right))))
|
||||
org-ascii-global-margin)))
|
||||
(let ((global-margin (plist-get info :ascii-global-margin)))
|
||||
(concat
|
||||
;; 1. Build title block.
|
||||
(org-ascii--indent-string
|
||||
(concat (org-ascii-template--document-title info)
|
||||
;; 2. Table of contents.
|
||||
(let ((depth (plist-get info :with-toc)))
|
||||
(when depth
|
||||
(concat
|
||||
(org-ascii--build-toc info (and (wholenump depth) depth))
|
||||
"\n\n\n"))))
|
||||
global-margin)
|
||||
;; 3. Document's body.
|
||||
contents
|
||||
;; 4. Creator. Ignore `comment' value as there are no comments in
|
||||
;; ASCII. Justify it to the bottom right.
|
||||
(org-ascii--indent-string
|
||||
(let ((creator-info (plist-get info :with-creator))
|
||||
(text-width (- (plist-get info :ascii-text-width) global-margin)))
|
||||
(unless (or (not creator-info) (eq creator-info 'comment))
|
||||
(concat
|
||||
"\n\n\n"
|
||||
(org-ascii--fill-string
|
||||
(plist-get info :creator) text-width info 'right))))
|
||||
global-margin))))
|
||||
|
||||
(defun org-ascii--translate (s info)
|
||||
"Translate string S according to specified language and charset.
|
||||
|
@ -1135,7 +1142,8 @@ information."
|
|||
"Return a CODE object from Org to ASCII.
|
||||
CONTENTS is nil. INFO is a plist holding contextual
|
||||
information."
|
||||
(format org-ascii-verbatim-format (org-element-property :value code)))
|
||||
(format (plist-get info :ascii-verbatim-format)
|
||||
(org-element-property :value code)))
|
||||
|
||||
|
||||
;;;; Drawer
|
||||
|
@ -1146,7 +1154,8 @@ CONTENTS holds the contents of the block. INFO is a plist
|
|||
holding contextual information."
|
||||
(let ((name (org-element-property :drawer-name drawer))
|
||||
(width (org-ascii--current-text-width drawer info)))
|
||||
(funcall org-ascii-format-drawer-function name contents width)))
|
||||
(funcall (plist-get info :ascii-format-drawer-function)
|
||||
name contents width)))
|
||||
|
||||
|
||||
;;;; Dynamic Block
|
||||
|
@ -1241,8 +1250,9 @@ holding contextual information."
|
|||
;; original buffer's spacing.
|
||||
(pre-blanks
|
||||
(make-string
|
||||
(if org-ascii-headline-spacing (car org-ascii-headline-spacing)
|
||||
(org-element-property :pre-blank headline)) ?\n))
|
||||
(or (car (plist-get info :ascii-headline-spacing))
|
||||
(org-element-property :pre-blank headline))
|
||||
?\n))
|
||||
;; Even if HEADLINE has no section, there might be some
|
||||
;; links in its title that we shouldn't forget to describe.
|
||||
(links
|
||||
|
@ -1256,7 +1266,7 @@ holding contextual information."
|
|||
(concat
|
||||
;; Bullet.
|
||||
(let ((bullets (cdr (assq (plist-get info :ascii-charset)
|
||||
org-ascii-bullets))))
|
||||
(plist-get info :ascii-bullets)))))
|
||||
(char-to-string
|
||||
(nth (mod (1- low-level-rank) (length bullets)) bullets)))
|
||||
" "
|
||||
|
@ -1298,7 +1308,7 @@ information."
|
|||
"Transcode an INLINE-SRC-BLOCK element from Org to ASCII.
|
||||
CONTENTS holds the contents of the item. INFO is a plist holding
|
||||
contextual information."
|
||||
(format org-ascii-verbatim-format
|
||||
(format (plist-get info :ascii-verbatim-format)
|
||||
(org-element-property :value inline-src-block)))
|
||||
|
||||
|
||||
|
@ -1310,7 +1320,7 @@ contextual information."
|
|||
See `org-ascii-format-inlinetask-function' for a description
|
||||
of the parameters."
|
||||
(let* ((utf8p (eq (plist-get info :ascii-charset) 'utf-8))
|
||||
(width (or width org-ascii-inlinetask-width)))
|
||||
(width (or width (plist-get info :ascii-inlinetask-width))))
|
||||
(org-ascii--indent-string
|
||||
(concat
|
||||
;; Top line, with an additional blank line if not in UTF-8.
|
||||
|
@ -1328,9 +1338,9 @@ of the parameters."
|
|||
;; Bottom line.
|
||||
(make-string width (if utf8p ?━ ?_)))
|
||||
;; Flush the inlinetask to the right.
|
||||
(- org-ascii-text-width org-ascii-global-margin
|
||||
(- (plist-get info :ascii-text-width) (plist-get info :ascii-global-margin)
|
||||
(if (not (org-export-get-parent-headline inlinetask)) 0
|
||||
org-ascii-inner-margin)
|
||||
(plist-get info :ascii-inner-margin))
|
||||
(org-ascii--current-text-width inlinetask info)))))
|
||||
|
||||
(defun org-ascii-inlinetask (inlinetask contents info)
|
||||
|
@ -1338,7 +1348,7 @@ of the parameters."
|
|||
CONTENTS holds the contents of the block. INFO is a plist
|
||||
holding contextual information."
|
||||
(let ((width (org-ascii--current-text-width inlinetask info)))
|
||||
(funcall org-ascii-format-inlinetask-function
|
||||
(funcall (plist-get info :ascii-format-inlinetask-function)
|
||||
;; todo.
|
||||
(and (plist-get info :with-todo-keywords)
|
||||
(let ((todo (org-element-property
|
||||
|
@ -1506,9 +1516,9 @@ INFO is a plist holding contextual information."
|
|||
(mapconcat 'number-to-string number "."))))))))
|
||||
(t
|
||||
(if (not (org-string-nw-p desc)) (format "[%s]" raw-link)
|
||||
(concat
|
||||
(format "[%s]" desc)
|
||||
(unless org-ascii-links-to-notes (format " (%s)" raw-link))))))))
|
||||
(concat (format "[%s]" desc)
|
||||
(and (not (plist-get info :ascii-links-to-notes))
|
||||
(format " (%s)" raw-link))))))))
|
||||
|
||||
|
||||
;;;; Node Properties
|
||||
|
@ -1530,14 +1540,15 @@ information."
|
|||
CONTENTS is the contents of the paragraph, as a string. INFO is
|
||||
the plist used as a communication channel."
|
||||
(org-ascii--justify-element
|
||||
(if (not (wholenump org-ascii-indented-line-width)) contents
|
||||
(concat
|
||||
;; Do not indent first paragraph in a section.
|
||||
(unless (and (not (org-export-get-previous-element paragraph info))
|
||||
(eq (org-element-type (org-export-get-parent paragraph))
|
||||
'section))
|
||||
(make-string org-ascii-indented-line-width ?\s))
|
||||
(replace-regexp-in-string "\\`[ \t]+" "" contents)))
|
||||
(let ((indented-line-width (plist-get info :ascii-indented-line-width)))
|
||||
(if (not (wholenump indented-line-width)) contents
|
||||
(concat
|
||||
;; Do not indent first paragraph in a section.
|
||||
(unless (and (not (org-export-get-previous-element paragraph info))
|
||||
(eq (org-element-type (org-export-get-parent paragraph))
|
||||
'section))
|
||||
(make-string indented-line-width ?\s))
|
||||
(replace-regexp-in-string "\\`[ \t]+" "" contents))))
|
||||
paragraph info))
|
||||
|
||||
|
||||
|
@ -1614,7 +1625,7 @@ holding contextual information."
|
|||
"Transcode a QUOTE-BLOCK element from Org to ASCII.
|
||||
CONTENTS holds the contents of the block. INFO is a plist
|
||||
holding contextual information."
|
||||
(org-ascii--indent-string contents org-ascii-quote-margin))
|
||||
(org-ascii--indent-string contents (plist-get info :ascii-quote-margin)))
|
||||
|
||||
|
||||
;;;; Radio Target
|
||||
|
@ -1635,7 +1646,7 @@ contextual information."
|
|||
(org-ascii--indent-string
|
||||
(concat
|
||||
contents
|
||||
(when org-ascii-links-to-notes
|
||||
(when (plist-get info :ascii-links-to-notes)
|
||||
;; Add list of links at the end of SECTION.
|
||||
(let ((links (org-ascii--describe-links
|
||||
(org-ascii--unique-links section info)
|
||||
|
@ -1645,7 +1656,7 @@ contextual information."
|
|||
;; Do not apply inner margin if parent headline is low level.
|
||||
(let ((headline (org-export-get-parent-headline section)))
|
||||
(if (or (not headline) (org-export-low-level-p headline info)) 0
|
||||
org-ascii-inner-margin))))
|
||||
(plist-get info :ascii-inner-margin)))))
|
||||
|
||||
|
||||
;;;; Special Block
|
||||
|
@ -1667,14 +1678,14 @@ holding contextual information."
|
|||
CONTENTS holds the contents of the item. INFO is a plist holding
|
||||
contextual information."
|
||||
(let ((caption (org-ascii--build-caption src-block info))
|
||||
(caption-above-p (plist-get info :ascii-caption-above))
|
||||
(code (org-export-format-code-default src-block info)))
|
||||
(if (equal code "") ""
|
||||
(org-ascii--justify-element
|
||||
(concat
|
||||
(when (and caption org-ascii-caption-above) (concat caption "\n"))
|
||||
(and caption caption-above-p (concat caption "\n"))
|
||||
(org-ascii--box-string code info)
|
||||
(when (and caption (not org-ascii-caption-above))
|
||||
(concat "\n" caption)))
|
||||
(and caption (not caption-above-p) (concat "\n" caption)))
|
||||
src-block info))))
|
||||
|
||||
|
||||
|
@ -1723,14 +1734,15 @@ holding contextual information."
|
|||
"Transcode a TABLE element from Org to ASCII.
|
||||
CONTENTS is the contents of the table. INFO is a plist holding
|
||||
contextual information."
|
||||
(let ((caption (org-ascii--build-caption table info)))
|
||||
(let ((caption (org-ascii--build-caption table info))
|
||||
(caption-above-p (plist-get info :ascii-caption-above)))
|
||||
(org-ascii--justify-element
|
||||
(concat
|
||||
;; Possibly add a caption string above.
|
||||
(when (and caption org-ascii-caption-above) (concat caption "\n"))
|
||||
(and caption caption-above-p (concat caption "\n"))
|
||||
;; Insert table. Note: "table.el" tables are left unmodified.
|
||||
(cond ((eq (org-element-property :type table) 'org) contents)
|
||||
((and org-ascii-table-use-ascii-art
|
||||
((and (plist-get info :ascii-table-use-ascii-art)
|
||||
(eq (plist-get info :ascii-charset) 'utf-8)
|
||||
(require 'ascii-art-to-unicode nil t))
|
||||
(with-temp-buffer
|
||||
|
@ -1743,7 +1755,7 @@ contextual information."
|
|||
(buffer-substring (point-min) (point))))
|
||||
(t (org-remove-indentation (org-element-property :value table))))
|
||||
;; Possible add a caption string below.
|
||||
(and (not org-ascii-caption-above) caption))
|
||||
(and (not caption-above-p) caption))
|
||||
table info)))
|
||||
|
||||
|
||||
|
@ -1770,12 +1782,13 @@ are ignored."
|
|||
(plist-put info :ascii-table-cell-width-cache
|
||||
(make-hash-table :test 'equal)))
|
||||
:ascii-table-cell-width-cache)))
|
||||
(key (cons table col)))
|
||||
(key (cons table col))
|
||||
(widenp (plist-get info :ascii-table-widen-columns)))
|
||||
(or (gethash key cache)
|
||||
(puthash
|
||||
key
|
||||
(let ((cookie-width (org-export-table-cell-width table-cell info)))
|
||||
(or (and (not org-ascii-table-widen-columns) cookie-width)
|
||||
(or (and (not widenp) cookie-width)
|
||||
(let ((contents-width
|
||||
(let ((max-width 0))
|
||||
(org-element-map table 'table-row
|
||||
|
@ -1790,8 +1803,7 @@ are ignored."
|
|||
info)
|
||||
max-width)))
|
||||
(cond ((not cookie-width) contents-width)
|
||||
(org-ascii-table-widen-columns
|
||||
(max cookie-width contents-width))
|
||||
(widenp (max cookie-width contents-width))
|
||||
(t cookie-width)))))
|
||||
cache))))
|
||||
|
||||
|
@ -1805,7 +1817,7 @@ a communication channel."
|
|||
;; each cell in the column.
|
||||
(let ((width (org-ascii--table-cell-width table-cell info)))
|
||||
;; When contents are too large, truncate them.
|
||||
(unless (or org-ascii-table-widen-columns
|
||||
(unless (or (plist-get info :ascii-table-widen-columns)
|
||||
(<= (string-width (or contents "")) width))
|
||||
(setq contents (concat (substring contents 0 (- width 2)) "=>")))
|
||||
;; Align contents correctly within the cell.
|
||||
|
@ -1899,7 +1911,7 @@ holding contextual information."
|
|||
(defun org-ascii-verbatim (verbatim contents info)
|
||||
"Return a VERBATIM object from Org to ASCII.
|
||||
CONTENTS is nil. INFO is a plist holding contextual information."
|
||||
(format org-ascii-verbatim-format
|
||||
(format (plist-get info :ascii-verbatim-format)
|
||||
(org-element-property :value verbatim)))
|
||||
|
||||
|
||||
|
@ -1912,7 +1924,7 @@ contextual information."
|
|||
(let ((verse-width (org-ascii--current-text-width verse-block info)))
|
||||
(org-ascii--indent-string
|
||||
(org-ascii--justify-element contents verse-block info)
|
||||
org-ascii-quote-margin)))
|
||||
(plist-get info :ascii-quote-margin))))
|
||||
|
||||
|
||||
|
||||
|
@ -1927,9 +1939,10 @@ plist containing the communication channel.
|
|||
|
||||
This function only applies to `ascii' back-end. See
|
||||
`org-ascii-headline-spacing' for information."
|
||||
(if (not org-ascii-headline-spacing) headline
|
||||
(let ((blanks (make-string (1+ (cdr org-ascii-headline-spacing)) ?\n)))
|
||||
(replace-regexp-in-string "\n\\(?:\n[ \t]*\\)*\\'" blanks headline))))
|
||||
(let ((headline-spacing (plist-get info :ascii-headline-spacing)))
|
||||
(if (not headline-spacing) headline
|
||||
(let ((blanks (make-string (1+ (cdr headline-spacing)) ?\n)))
|
||||
(replace-regexp-in-string "\n\\(?:\n[ \t]*\\)*\\'" blanks headline)))))
|
||||
|
||||
(defun org-ascii-filter-paragraph-spacing (tree back-end info)
|
||||
"Filter controlling number of blank lines between paragraphs.
|
||||
|
@ -1939,13 +1952,13 @@ back-end used for export. INFO is a plist used as
|
|||
a communication channel.
|
||||
|
||||
See `org-ascii-paragraph-spacing' for information."
|
||||
(when (wholenump org-ascii-paragraph-spacing)
|
||||
(org-element-map tree 'paragraph
|
||||
(lambda (p)
|
||||
(when (eq (org-element-type (org-export-get-next-element p info))
|
||||
'paragraph)
|
||||
(org-element-put-property
|
||||
p :post-blank org-ascii-paragraph-spacing)))))
|
||||
(let ((paragraph-spacing (plist-get info :ascii-paragraph-spacing)))
|
||||
(when paragraph-spacing
|
||||
(org-element-map tree 'paragraph
|
||||
(lambda (p)
|
||||
(when (eq (org-element-type (org-export-get-next-element p info))
|
||||
'paragraph)
|
||||
(org-element-put-property p :post-blank paragraph-spacing))))))
|
||||
tree)
|
||||
|
||||
(defun org-ascii-filter-comment-spacing (tree backend info)
|
||||
|
|
Loading…
Reference in New Issue