From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: [PATCH] Fix XEmacs "wrong type error" in org-export-as-pdf Date: Sun, 21 Dec 2008 12:49:17 +0100 Message-ID: <08F21A85-7DF6-4786-89A8-3BE3930003A2@uva.nl> References: <871vw2til4.fsf@gmail.com> Mime-Version: 1.0 (Apple Message framework v929.2) Content-Type: multipart/mixed; boundary="===============1188316722==" Return-path: Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LEMoI-0001Gs-0L for emacs-orgmode@gnu.org; Sun, 21 Dec 2008 06:49:26 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LEMoF-0001Dt-3R for emacs-orgmode@gnu.org; Sun, 21 Dec 2008 06:49:24 -0500 Received: from [199.232.76.173] (port=44180 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LEMoE-0001Dq-VN for emacs-orgmode@gnu.org; Sun, 21 Dec 2008 06:49:22 -0500 Received: from ug-out-1314.google.com ([66.249.92.172]:32821) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LEMoE-0003dk-8A for emacs-orgmode@gnu.org; Sun, 21 Dec 2008 06:49:22 -0500 Received: by ug-out-1314.google.com with SMTP id 36so792819uga.17 for ; Sun, 21 Dec 2008 03:49:20 -0800 (PST) In-Reply-To: <871vw2til4.fsf@gmail.com> List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: Hugh Daschbach Cc: emacs-orgmode@gnu.org --===============1188316722== Content-Type: multipart/alternative; boundary=Apple-Mail-1-297370911 --Apple-Mail-1-297370911 Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Fixed, thanks. - Carsten On Dec 21, 2008, at 2:36 AM, Hugh Daschbach wrote: > XEmacs throws a wrong-type-argument exception from org-export-as-pdf > if org file contains '&'. See sample document, traceback, and patch > below. > > This may well not be the best fix. And it's not clear why this issue > doesn't exist in Emacs. But there are several regular expressions in > org-export-latex-special-chars that call > org-export-latex-treat-backslash-char with a nil value for > string-after. The regular expression that matched "MB&A" is > "\\(.\\|^\\)\\(&\\)". So there is no (match-string 3). > > Here's a document that generates the exception: > > --8<---------------cut here---------------start------------->8--- > * Header > > MB&A > > * Footer > --8<---------------cut here---------------end--------------->8--- > > Here's the traceback: > > Debugger entered--Lisp error: (wrong-type-argument stringp nil) > string-match("^[ \n ]" nil) > (not (string-match "^[ \n ]" string-after)) > (and (not (string-match "^[ \n ]" string-after)) (not (string-match > "[ ]\\'\\|^" string-before))) > (cond ((member ... org-html-entities) (concat string-before "$\ > \" ... "$")) ((and ... ...) (org-export-latex-protect-string ...)) > ((not ...) (org-export-latex-protect-string ...)) ((and ... ...) > (org-export-latex-protect-string ...)) (t (org-export-latex-protect- > string ...))) > org-export-latex-treat-backslash-char("B" nil) > # match-data match-data match-data c re-search-forward nil t get-text- > property 2 org-protected match-string ("\\$" "$") "\\$" replace- > match 1 "$" 3 ("&" "%" "#") "\\" "..." org-export-latex-protect- > string "\\ldots{}" "~" 0 face org-link "\\~" "\\~{}" ("{" "}") match- > data (...) org-inside-LaTeX-fragment-p (...) (...) org-export-latex- > treat-backslash-char "" ("_" "^") (...) org-export-latex-treat-sub- > super-char] 7>("\\(.\\|^\\)\\(&\\)") > mapc-internal(# match-data match-data match-data match-data c re-search-forward nil > t get-text-property 2 org-protected match-string ("\\$" "$") "\\$" > replace-match 1 "$" 3 ("&" "%" "#") "\\" "..." org-export-latex- > protect-string "\\ldots{}" "~" 0 face org-link "\\~" "\\~{}" ("{" > "}") match-data (...) org-inside-LaTeX-fragment-p (...) (...) org- > export-latex-treat-backslash-char "" ("_" "^") (...) org-export- > latex-treat-sub-super-char] 7> ("^\\([^\n$]*?\\|^\\)\\(\\\\?\\$\\)\\ > ([^\n$]*\\)$" "\\([a-za-z0-9]+\\|[ \n]\\|\\b\\|\\\\\\)\\(_\\|\\^\\)\ > \([a-za-z0-9]+\\|[ \n]\\|[:punct:]\\|{[a-za-z0-9]+}\\|([a-za-z0-9]+) > \\)" "\\(.\\|^\\)\\(\\\\\\)\\([ \n]\\|[a-zA-Z&#%{}\"]+\\)" "\\(.\\|^ > \\)\\(&\\)" "\\(.\\|^\\)\\(#\\)" "\\(.\\|^\\)\\(%\\)" "\\(.\\|^\\)\\ > ({\\)" "\\(.\\|^\\)\\(}\\)" "\\(.\\|^\\)\\(~\\)" "\\(.\\|^\\)\\(\\.\ > \.\\.\\)")) > mapc(# match-data match-data match-data c re-search-forward nil t get-text- > property 2 org-protected match-string ("\\$" "$") "\\$" replace- > match 1 "$" 3 ("&" "%" "#") "\\" "..." org-export-latex-protect- > string "\\ldots{}" "~" 0 face org-link "\\~" "\\~{}" ("{" "}") match- > data (...) org-inside-LaTeX-fragment-p (...) (...) org-export-latex- > treat-backslash-char "" ("_" "^") (...) org-export-latex-treat-sub- > super-char] 7> ("^\\([^\n$]*?\\|^\\)\\(\\\\?\\$\\)\\([^\n$]*\\)$" "\\ > ([a-za-z0-9]+\\|[ \n]\\|\\b\\|\\\\\\)\\(_\\|\\^\\)\\([a-za-z0-9]+\\| > [ \n]\\|[:punct:]\\|{[a-za-z0-9]+}\\|([a-za-z0-9]+)\\)" "\\(.\\|^\\) > \\(\\\\\\)\\([ \n]\\|[a-zA-Z&#%{}\"]+\\)" "\\(.\\|^\\)\\(&\\)" "\\(. > \\|^\\)\\(#\\)" "\\(.\\|^\\)\\(%\\)" "\\(.\\|^\\)\\({\\)" "\\(.\\|^\ > \)\\(}\\)" "\\(.\\|^\\)\\(~\\)" "\\(.\\|^\\)\\(\\.\\.\\.\\)")) > org-export-latex-special-chars(t) > org-export-latex-content("\nMB&A\n\n") > org-export-latex-first-lines(nil) > org-export-as-latex(nil nil nil nil nil nil) > org-export-as-pdf(nil) > call-interactively(org-export-as-pdf) > command-execute(org-export-as-pdf t) > execute-extended-command(nil) > call-interactively(execute-extended-command) > --- > lisp/org-export-latex.el | 1 + > 1 files changed, 1 insertions(+), 0 deletions(-) > > diff --git a/lisp/org-export-latex.el b/lisp/org-export-latex.el > index fa6a0e4..60795fb 100644 > --- a/lisp/org-export-latex.el > +++ b/lisp/org-export-latex.el > @@ -976,6 +976,7 @@ The conversion is made depending of STRING- > BEFORE and STRING-AFTER." > (concat string-before "$\\" > (or (cdar (member (list string-after) org-html-entities)) > string-after) "$")) > + ((null string-after) (concat string-before "\\")) > ((and (not (string-match "^[ \n\t]" string-after)) > (not (string-match "[ \t]\\'\\|^" string-before))) > ;; backslash is inside a word > -- > 1.5.6.3 > > > > _______________________________________________ > Emacs-orgmode mailing list > Remember: use `Reply All' to send replies to the list. > Emacs-orgmode@gnu.org > http://lists.gnu.org/mailman/listinfo/emacs-orgmode --Apple-Mail-1-297370911 Content-Type: text/html; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Fixed, = thanks.

- Carsten

On Dec 21, = 2008, at 2:36 AM, Hugh Daschbach wrote:

XEmacs = throws a wrong-type-argument exception from org-export-as-pdf
if org = file contains '&'.  See sample document, traceback, and = patch
below.

This may well not be the best fix.  And it's = not clear why this issue
doesn't exist in Emacs.  But there are = several regular expressions in
org-export-latex-special-chars that = call
org-export-latex-treat-backslash-char with a nil value = for
string-after.  The regular expression that matched = "MB&A" is
"\\(.\\|^\\)\\(&\\)".  So there is no = (match-string 3).

Here's a document that generates the = exception:

--8<---------------cut = here---------------start------------->8---
* = Header

MB&A

* Footer
--8<---------------cut = here---------------end--------------->8---

Here's the = traceback:

Debugger entered--Lisp error: (wrong-type-argument = stringp nil)
 string-match("^[ \n ]" nil)
 (not = (string-match "^[ \n ]" string-after))
 (and = (not (string-match "^[ \n ]" string-after)) (not = (string-match "[ = ]\\'\\|^" string-before)))
 (cond ((member ... = org-html-entities) (concat string-before "$\\" ... "$")) ((and ... ...) = (org-export-latex-protect-string ...)) ((not ...) = (org-export-latex-protect-string ...)) ((and ... ...) = (org-export-latex-protect-string ...)) (t = (org-export-latex-protect-string ...)))
=  org-export-latex-treat-backslash-char("B" nil)
=  #<compiled-function (c) "...(304)" [sub-superscript match-data = match-data match-data match-data c re-search-forward nil t = get-text-property 2 org-protected match-string ("\\$" "$") "\\$" = replace-match 1 "$" 3 ("&" "%" "#") "\\" "..." = org-export-latex-protect-string "\\ldots{}" "~" 0 face org-link "\\~" = "\\~{}" ("{" "}") match-data (...) org-inside-LaTeX-fragment-p (...) = (...) org-export-latex-treat-backslash-char "" ("_" "^") (...) = org-export-latex-treat-sub-super-char] 7>("\\(.\\|^\\)\\(&\\)")
=  mapc-internal(#<compiled-function (c) "...(304)" = [sub-superscript match-data match-data match-data match-data c = re-search-forward nil t get-text-property 2 org-protected match-string = ("\\$" "$") "\\$" replace-match 1 "$" 3 ("&" "%" "#") "\\" "..." = org-export-latex-protect-string "\\ldots{}" "~" 0 face org-link "\\~" = "\\~{}" ("{" "}") match-data (...) org-inside-LaTeX-fragment-p (...) = (...) org-export-latex-treat-backslash-char "" ("_" "^") (...) = org-export-latex-treat-sub-super-char] 7> = ("^\\([^\n$]*?\\|^\\)\\(\\\\?\\$\\)\\([^\n$]*\\)$" "\\([a-za-z0-9]+\\|[ = = \n]\\|\\b\\|\\\\\\)\\(_\\|\\^\\)\\([a-za-z0-9]+\\|[ = \n]\\|[:punct:]\\|{[a-za-z0-9]+}\\|([a-za-z0-9]+)\\)" = "\\(.\\|^\\)\\(\\\\\\)\\([ \n]\\|[a-zA-Z&#%{}\"]+\\)" = "\\(.\\|^\\)\\(&\\)" "\\(.\\|^\\)\\(#\\)" "\\(.\\|^\\)\\(%\\)" = "\\(.\\|^\\)\\({\\)" "\\(.\\|^\\)\\(}\\)" "\\(.\\|^\\)\\(~\\)" = "\\(.\\|^\\)\\(\\.\\.\\.\\)"))
 mapc(#<compiled-function (c) = "...(304)" [sub-superscript match-data match-data match-data match-data = c re-search-forward nil t get-text-property 2 org-protected match-string = ("\\$" "$") "\\$" replace-match 1 "$" 3 ("&" "%" "#") "\\" "..." = org-export-latex-protect-string "\\ldots{}" "~" 0 face org-link "\\~" = "\\~{}" ("{" "}") match-data (...) org-inside-LaTeX-fragment-p (...) = (...) org-export-latex-treat-backslash-char "" ("_" "^") (...) = org-export-latex-treat-sub-super-char] 7> = ("^\\([^\n$]*?\\|^\\)\\(\\\\?\\$\\)\\([^\n$]*\\)$" "\\([a-za-z0-9]+\\|[ = = \n]\\|\\b\\|\\\\\\)\\(_\\|\\^\\)\\([a-za-z0-9]+\\|[ = \n]\\|[:punct:]\\|{[a-za-z0-9]+}\\|([a-za-z0-9]+)\\)" = "\\(.\\|^\\)\\(\\\\\\)\\([ \n]\\|[a-zA-Z&#%{}\"]+\\)" = "\\(.\\|^\\)\\(&\\)" "\\(.\\|^\\)\\(#\\)" "\\(.\\|^\\)\\(%\\)" = "\\(.\\|^\\)\\({\\)" "\\(.\\|^\\)\\(}\\)" "\\(.\\|^\\)\\(~\\)" = "\\(.\\|^\\)\\(\\.\\.\\.\\)"))
=  org-export-latex-special-chars(t)
=  org-export-latex-content("\nMB&A\n\n")
=  org-export-latex-first-lines(nil)
=  org-export-as-latex(nil nil nil nil nil nil)
=  org-export-as-pdf(nil)
=  call-interactively(org-export-as-pdf)
=  command-execute(org-export-as-pdf t)
=  execute-extended-command(nil)
=  call-interactively(execute-extended-command)
---
= lisp/org-export-latex.el |    1 +
1 files changed, 1 = insertions(+), 0 deletions(-)

diff --git = a/lisp/org-export-latex.el b/lisp/org-export-latex.el
index = fa6a0e4..60795fb 100644
--- a/lisp/org-export-latex.el
+++ = b/lisp/org-export-latex.el
@@ -976,6 +976,7 @@ The conversion is made = depending of STRING-BEFORE and STRING-AFTER."
(concat = string-before "$\\"
(or (cdar (member (list = string-after) org-html-entities))
=     string-after) "$"))
+ ((null = string-after) (concat string-before "\\"))
((and = (not (string-match "^[ \n\t]" string-after))
=      (not (string-match "[ \t]\\'\\|^" = string-before)))
;; backslash is inside a = word
-- =
1.5.6.3



_______________________________________________=
Emacs-orgmode mailing list
Remember: use `Reply All' to send = replies to the list.
Emacs-orgmode@gnu.org
http://= lists.gnu.org/mailman/listinfo/emacs-orgmode
<= br>
= --Apple-Mail-1-297370911-- --===============1188316722== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Emacs-orgmode mailing list Remember: use `Reply All' to send replies to the list. Emacs-orgmode@gnu.org http://lists.gnu.org/mailman/listinfo/emacs-orgmode --===============1188316722==--