From efc77ab6f5e8883fc38d8c6f75b6db54a0965c15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Delafond?= Date: Sun, 13 Jul 2014 13:35:32 +0200 Subject: Imported Upstream version 8.2.5h --- lisp/ox-ascii.el | 72 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 29 deletions(-) (limited to 'lisp/ox-ascii.el') diff --git a/lisp/ox-ascii.el b/lisp/ox-ascii.el index 55bda83..e8f1b1f 100644 --- a/lisp/ox-ascii.el +++ b/lisp/ox-ascii.el @@ -1,6 +1,6 @@ ;;; ox-ascii.el --- ASCII Back-End for Org Export Engine -;; Copyright (C) 2012-2013 Free Software Foundation, Inc. +;; Copyright (C) 2012-2014 Free Software Foundation, Inc. ;; Author: Nicolas Goaziou ;; Keywords: outlines, hypermedia, calendar, wp @@ -530,8 +530,9 @@ INFO is a plist used as a communication channel." (+ (- (org-list-get-ind beg-item struct) (org-list-get-ind (org-list-get-top-point struct) struct)) - (length (org-ascii--checkbox parent-item info)) - (length + (string-width (or (org-ascii--checkbox parent-item info) + "")) + (string-width (or (org-list-get-tag beg-item struct) (org-list-get-bullet beg-item struct))))))))))))) @@ -589,7 +590,8 @@ possible. It doesn't apply to `inlinetask' elements." (when tags (format (format " %%%ds" - (max (- text-width (1+ (length first-part))) (length tags))) + (max (- text-width (1+ (string-width first-part))) + (string-width tags))) tags)) ;; Maybe underline text, if ELEMENT type is `headline' and an ;; underline character has been defined. @@ -600,7 +602,9 @@ possible. It doesn't apply to `inlinetask' elements." org-ascii-underline))))) (and under-char (concat "\n" - (make-string (length first-part) under-char)))))))) + (make-string (/ (string-width first-part) + (char-width under-char)) + under-char)))))))) (defun org-ascii--has-caption-p (element info) "Non-nil when ELEMENT has a caption affiliated keyword. @@ -647,7 +651,7 @@ which the table of contents generation has been initiated." (let ((title (org-ascii--translate "Table of Contents" info))) (concat title "\n" - (make-string (length title) + (make-string (string-width title) (if (eq (plist-get info :ascii-charset) 'utf-8) ?─ ?_)) "\n\n" (let ((text-width @@ -674,7 +678,7 @@ generation. INFO is a plist used as a communication channel." (let ((title (org-ascii--translate "List of Listings" info))) (concat title "\n" - (make-string (length title) + (make-string (string-width title) (if (eq (plist-get info :ascii-charset) 'utf-8) ?─ ?_)) "\n\n" (let ((text-width @@ -688,9 +692,10 @@ generation. INFO is a plist used as a communication channel." ;; Store initial text so its length can be computed. This is ;; used to properly align caption right to it in case of ;; filling (like contents of a description list item). - (let ((initial-text - (format (org-ascii--translate "Listing %d:" info) - (incf count)))) + (let* ((initial-text + (format (org-ascii--translate "Listing %d:" info) + (incf count))) + (initial-width (string-width initial-text))) (concat initial-text " " (org-trim @@ -700,8 +705,8 @@ generation. INFO is a plist used as a communication channel." (let ((caption (or (org-export-get-caption src-block t) (org-export-get-caption src-block)))) (org-export-data caption info)) - (- text-width (length initial-text)) info) - (length initial-text)))))) + (- text-width initial-width) info) + initial-width))))) (org-export-collect-listings info) "\n"))))) (defun org-ascii--list-tables (keyword info) @@ -712,7 +717,7 @@ generation. INFO is a plist used as a communication channel." (let ((title (org-ascii--translate "List of Tables" info))) (concat title "\n" - (make-string (length title) + (make-string (string-width title) (if (eq (plist-get info :ascii-charset) 'utf-8) ?─ ?_)) "\n\n" (let ((text-width @@ -726,9 +731,10 @@ generation. INFO is a plist used as a communication channel." ;; Store initial text so its length can be computed. This is ;; used to properly align caption right to it in case of ;; filling (like contents of a description list item). - (let ((initial-text - (format (org-ascii--translate "Table %d:" info) - (incf count)))) + (let* ((initial-text + (format (org-ascii--translate "Table %d:" info) + (incf count))) + (initial-width (string-width initial-text))) (concat initial-text " " (org-trim @@ -738,8 +744,8 @@ generation. INFO is a plist used as a communication channel." (let ((caption (or (org-export-get-caption table t) (org-export-get-caption table)))) (org-export-data caption info)) - (- text-width (length initial-text)) info) - (length initial-text)))))) + (- text-width initial-width) info) + initial-width))))) (org-export-collect-tables info) "\n"))))) (defun org-ascii--unique-links (element info) @@ -852,14 +858,16 @@ INFO is a plist used as a communication channel." ((and (org-string-nw-p date) (org-string-nw-p author)) (concat author - (make-string (- text-width (length date) (length author)) ? ) + (make-string (- text-width (string-width date) (string-width author)) + ?\s) date (when (org-string-nw-p email) (concat "\n" email)) "\n\n\n")) ((and (org-string-nw-p date) (org-string-nw-p email)) (concat email - (make-string (- text-width (length date) (length email)) ? ) + (make-string (- text-width (string-width date) (string-width email)) + ?\s) date "\n\n\n")) ((org-string-nw-p date) (concat @@ -879,7 +887,10 @@ INFO is a plist used as a communication channel." (formatted-title (org-ascii--fill-string title title-len info)) (line (make-string - (min (+ (max title-len (length author) (length email)) 2) + (min (+ (max title-len + (string-width (or author "")) + (string-width (or email ""))) + 2) text-width) (if utf8p ?━ ?_)))) (org-ascii--justify-string (concat line "\n" @@ -918,7 +929,7 @@ holding export options." (concat title "\n" (make-string - (length title) + (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))) @@ -1195,10 +1206,10 @@ contextual information." ;;;; Inlinetask (defun org-ascii-format-inlinetask-default - (todo type priority name tags contents width inlinetask info) + (todo type priority name tags contents width inlinetask info) "Format an inline task element for ASCII export. See `org-ascii-format-inlinetask-function' for a description -of the paramaters." +of the parameters." (let* ((utf8p (eq (plist-get info :ascii-charset) 'utf-8)) (width (or width org-ascii-inlinetask-width))) (org-ascii--indent-string @@ -1208,7 +1219,7 @@ of the paramaters." (unless utf8p (concat (make-string width ? ) "\n")) ;; Add title. Fill it if wider than inlinetask. (let ((title (org-ascii--build-title inlinetask info width))) - (if (<= (length title) width) title + (if (<= (string-width title) width) title (org-ascii--fill-string title width info))) "\n" ;; If CONTENTS is not empty, insert it along with @@ -1301,7 +1312,7 @@ contextual information." ;; Contents: Pay attention to indentation. Note: check-boxes are ;; already taken care of at the paragraph level so they don't ;; interfere with indentation. - (let ((contents (org-ascii--indent-string contents (length bullet)))) + (let ((contents (org-ascii--indent-string contents (string-width bullet)))) (if (eq (org-element-type (car (org-element-contents item))) 'paragraph) (org-trim contents) (concat "\n" contents)))))) @@ -1652,7 +1663,7 @@ are ignored." (org-element-map table 'table-row (lambda (row) (setq max-width - (max (length + (max (string-width (org-export-data (org-element-contents (elt (org-element-contents row) col)) @@ -1672,7 +1683,8 @@ 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 (<= (length contents) width)) + (unless (or org-ascii-table-widen-columns + (<= (string-width (or contents "")) width)) (setq contents (concat (substring contents 0 (- width 2)) "=>"))) ;; Align contents correctly within the cell. (let* ((indent-tabs-mode nil) @@ -1681,7 +1693,9 @@ a communication channel." (org-ascii--justify-string contents width (org-export-table-cell-alignment table-cell info))))) - (setq contents (concat data (make-string (- width (length data)) ? )))) + (setq contents + (concat data + (make-string (- width (string-width (or data ""))) ?\s)))) ;; Return cell. (concat (format " %s " contents) (when (memq 'right (org-export-table-cell-borders table-cell info)) -- cgit v1.2.3