From mboxrd@z Thu Jan 1 00:00:00 1970 From: Carsten Dominik Subject: Re: [BUG] #+begin_src wo. language blocks XHTML export Date: Mon, 12 Jul 2010 20:12:58 +0200 Message-ID: <602AF50D-9053-4D34-A6CB-6CD0879376BA@gmail.com> References: <87fx0abtr1.fsf@gmx.de> <87mxu7nxoy.wl%dmaus@ictsoc.de> <87iq4uzynf.fsf@gmx.de> <87r5jdsscu.fsf@gmail.com> <8BFEB2A8-C320-475C-861D-6FDF1F74AB50@tsdye.com> <871vbcgdnn.fsf@gmail.com> <87y6dhglrt.wl%dmaus@ictsoc.de> <87aapwlhmi.fsf@gmail.com> Mime-Version: 1.0 (Apple Message framework v936) Content-Type: text/plain; charset=WINDOWS-1252; format=flowed; delsp=yes Content-Transfer-Encoding: quoted-printable Return-path: Received: from [140.186.70.92] (port=44815 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OYNVC-0006uV-43 for emacs-orgmode@gnu.org; Mon, 12 Jul 2010 14:13:17 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OYNV1-0002Ej-TK for emacs-orgmode@gnu.org; Mon, 12 Jul 2010 14:13:14 -0400 Received: from mail-ew0-f41.google.com ([209.85.215.41]:42520) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OYNV1-0002ES-HN for emacs-orgmode@gnu.org; Mon, 12 Jul 2010 14:13:03 -0400 Received: by ewy28 with SMTP id 28so1030985ewy.0 for ; Mon, 12 Jul 2010 11:13:02 -0700 (PDT) In-Reply-To: <87aapwlhmi.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: Eric Schulte Cc: Emacs-orgmode mailing list Hi Eric, Please go ahead and apply it, Eric, and mark the first as superseded, the second as applied on the patchwork server. Thanks! - Carsten On Jul 12, 2010, at 7:44 PM, Eric Schulte wrote: > Carsten Dominik writes: > >> On Jul 12, 2010, at 10:13 AM, David Maus wrote: >> >>> SEric Schulte wrote: >>>> "Thomas S. Dye" writes: >>> >>>>> On Jul 8, 2010, at 9:09 AM, Eric Schulte wrote: >>>>> >>>>>> Sebastian Rose writes: >>>>>> >>>>>> [...] >>>>>>> >>>>>>> It can be considered an error, since the docs say: >>>>>>> >>>>>>> "...This is done with the =91src=92 block, where you also need = to >>>>>>> specify the name of the major mode that should be used to =20 >>>>>>> fontify >>>>>>> the example..." >>>>>>> >>>>>> >>>>>> I would vote that this be considered an error as a source block >>>>>> doesn't make sense w/o a source language. If others agree with >>>>>> this >>>>>> interpretation, I would be happy to submit a patch which actively >>>>>> raises an errors when this cases is encountered. >>>>>> >>>>>> Cheers -- Eric >>>>> >>>>> This seems like the right approach to me. >>>>> >>>>> Tom >>> >>>> As promised here's a patch which raises errors when source blocks >>>> don't >>>> have a specified language. I would prefer if the error could >>>> indicate >>>> which block caused the problem, but I don't know how to accomplish >>>> this. >>> >>> Maybe we could store a marker in a text property of (source) blocks >>> right before they are processed in the input file? >> >> The problem here is that during export, the source code is taken >> from a temporary buffer containing an already modifed copy of the >> original buffer. >> >> Another solution would be to include into the message is short >> part of the code itself (maybe the first line...) - this should >> make it possible to identify the problematic block reasonably easily. >> >> - Carsten > > The following updated patch includes the first line (up to 35 > characters) of the code block in the error message. > > -- Eric > > =46rom a76629a565920c3506f7046cc15d27ad01b8bd47 Mon Sep 17 00:00:00 = 2001 > From: Eric Schulte > Date: Mon, 12 Jul 2010 10:42:59 -0700 > Subject: [PATCH] org-exp: raise an error when trying to export code =20= > blocks w/o languages > > * lisp/ob.el (org-babel-get-src-block-info): ensure that we don't > match (and return info for) source blocks without a language > > * lisp/org-exp.el (org-export-replace-src-segments-and-examples): > updated source code block regexp so that the presence of a language > can be explicitly checked. Also now raising an error when a source > block does not have a language. > --- > lisp/ob.el | 3 ++- > lisp/org-exp.el | 30 ++++++++++++++++++++---------- > 2 files changed, 22 insertions(+), 11 deletions(-) > > diff --git a/lisp/ob.el b/lisp/ob.el > index 7b7be3d..d94cc06 100644 > --- a/lisp/ob.el > +++ b/lisp/ob.el > @@ -143,7 +143,8 @@ added to the header-arguments-alist." > (setq indent (car (last info))) > (setq info (butlast info)) > (forward-line -1) > - (if (looking-at org-babel-src-name-w-name-regexp) > + (if (and (looking-at org-babel-src-name-w-name-regexp) > + (match-string 2)) > (progn > (setq info (append info (list = (org-babel-clean-text-properties > (match-string 2))))) > diff --git a/lisp/org-exp.el b/lisp/org-exp.el > index f1cea62..55b8812 100644 > --- a/lisp/org-exp.el > +++ b/lisp/org-exp.el > @@ -2107,19 +2107,29 @@ in the list) and remove property and value =20 > from the list in LISTVAR." > lang code trans opts indent caption) > (goto-char (point-min)) > (while (re-search-forward > - "\\(^\\([ \t]*\\)#\\+BEGIN_SRC:?[ \t]+\\([^ = \t\n]+\\)\\(.*\\)\n=20 > \\([^\000]+?\n\\)[ \t]*#\\+END_SRC.*\n?\\)\\|\\(^\\([ \t]*\\)#\\=20 > +BEGIN_EXAMPLE:?\\(?:[ \t]+\\(.*\\)\\)?\n\\([^\000]+?\n\\)[ \t]*#\\=20 > +END_EXAMPLE.*\n?\\)" > + "\\(^\\([ \t]*\\)#\\+BEGIN_SRC:?\\([ \t]+\\([^ = \t\n]+\\)\\)?\\=20 > (.*\\)\n\\([^\000]+?\n\\)[ \t]*#\\+END_SRC.*\n?\\)\\|\\(^\\([ \t]*\=20 > \)#\\+BEGIN_EXAMPLE:?\\(?:[ \t]+\\(.*\\)\\)?\n\\([^\000]+?\n\\)=20 > [ \t]*#\\+END_EXAMPLE.*\n?\\)" > nil t) > (if (match-end 1) > - ;; src segments > - (setq lang (match-string 3) > - opts (match-string 4) > - code (match-string 5) > - indent (length (match-string 2)) > - caption (get-text-property 0 'org-caption (match-=20 > string 0))) > + (if (not (match-string 4)) > + (error "source block missing language specification: %s" > + (let* ((body (match-string 6)) > + (nothing (message "body:%s" body)) > + (preview (or (and (string-match > + "^[ \t]*\\([^\n\r]*\\)" = body) > + (match-string 1 body)) = body))) > + (if (> (length preview) 35) > + (concat (substring preview 0 32) "...") > + preview))) > + ;; src segments > + (setq lang (match-string 4) > + opts (match-string 5) > + code (match-string 6) > + indent (length (match-string 2)) > + caption (get-text-property 0 'org-caption = (match-string 0)))) > (setq lang nil > - opts (match-string 8) > - code (match-string 9) > - indent (length (match-string 7)) > + opts (match-string 9) > + code (match-string 10) > + indent (length (match-string 8)) > caption (get-text-property 0 'org-caption (match-=20 > string 0)))) > > (setq trans (org-export-format-source-code-or-example > --=20 > 1.7.0.4 > - Carsten