Subject: bug#48148: closed (Re: bug#48148: 27.2; ox-ascii breaks TITLE line wrongly when 2 width char is used)

From: [email-masked] (GNU bug Tracking System)
Date: Sun, 02 May 2021 15:57:02 +0000

Your bug report

#48148: 27.2;  ox-ascii breaks TITLE line wrongly when 2 width char is used

which was filed against the org-mode package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
48148: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=48148
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#48148: 27.2; ox-ascii breaks TITLE line wrongly when 2 width char is used
From: Nicolas Goaziou <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked], [email-masked]
Date: Sun, 02 May 2021 17:56:04 +0200
List-Id: <debbugs-submit.debbugs.gnu.org>

Eli Zaretskii <[email-masked]> writes:

>> From: Nicolas Goaziou <[email-masked]>
>> Cc: [email-masked],  [email-masked]
>> Date: Sun, 02 May 2021 14:18:24 +0200
>> 
>> My problem is that I have some string, _which is not displayed anywhere_
>> yet. I need to obtain its real width along with the width of a single
>> character in order to compute the length argument in `make-string'.
>
> The width of any text on display is meaningless unless you also tell
> in what window will it be displayed.  That's because some of the
> factors that affect the display width depend on the window and the
> buffer shown by that window.

I understand. More than the width of the text, I'm interested in the
ratio between the width of the text and the width of an underline
character (assuming monospace).

> So assuming the string you have will eventually be displayed in some
> window -- and most strings in Emacs are of that kind -- you should use
> that window up front.  Otherwise, the value you get from other methods
> can only be an approximation, which will sometimes be close, and
> sometimes quite far from the truth.

The string may not be displayed at all. Since it is the output of an
export process, it could, e.g., be written to a file.

I applied Shingo Tanaka's suggestion using `string-width', which is the
best we can do considering our requirements.

Thank you for your answer, and to Shingo Tanaka for the report an the
patch.

Regards,

Subject: 27.2; ox-ascii breaks TITLE line wrongly when 2 width char is used
From: Shingo Tanaka <[email-masked]>
To: [email-masked]
Date: Sun, 02 May 2021 08:52:13 +0900
List-Id: <debbugs-submit.debbugs.gnu.org>

Hi,

When exporting org-mode document to plain text (either ascii/unicode/utf-8)
with `org-export-dispatch', Emacs translates the document title with
`org-ascii-template--document-title'.  However, when 2 width character is
used, it detects the title line's width wrongly and breaks it even if the
width is not too long.

For example, when the title is "ＡＢＣＤＥＦ" (each character has width of
2), expected title would be like:

                     ━━━━━━━━━━━━━━━
                              ＡＢＣＤＥＦ
                     ━━━━━━━━━━━━━━━

However, the reality is:

                     ━━━━━━━━━━━━━━━
                                 ＡＢＣ
                                 ＤＥＦ
                     ━━━━━━━━━━━━━━━
                     
This is because it uses `length' to detects the width, which only returns the
number of characters (6 in this case) but not the actual width displayed (12
in this case), and it tries to fill the line with that half width.
`string-width' should be used instead.

Here is a potential patch.

--- ox-ascii.el.org	2021-03-26 09:28:44.000000000 +0900
+++ ox-ascii.el	2021-05-02 08:11:57.657347150 +0900
@@ -1033,7 +1033,7 @@
 	     ;; Format TITLE.  It may be filled if it is too wide,
 	     ;; that is wider than the two thirds of the total width.
 	     (title-len (min (apply #'max
-				    (mapcar #'length
+				    (mapcar #'string-width
 					    (org-split-string
 					     (concat title "\n" subtitle) "\n")))
 			     (/ (* 2 text-width) 3)))

---
Shingo Tanaka