emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Orgmode] [BUG] #+begin_src wo. language blocks XHTML export


From: Carsten Dominik
Subject: Re: [Orgmode] [BUG] #+begin_src wo. language blocks XHTML export
Date: Mon, 12 Jul 2010 20:12:58 +0200

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 <address@hidden> writes:

On Jul 12, 2010, at 10:13 AM, David Maus wrote:

SEric Schulte wrote:
"Thomas S. Dye" <address@hidden> writes:

On Jul 8, 2010, at 9:09 AM, Eric Schulte wrote:

Sebastian Rose <address@hidden> writes:

[...]

It can be considered an error, since the docs say:

"...This is done with the ‘src’ block, where you also need to
specify the name of the major mode that should be used to 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

From a76629a565920c3506f7046cc15d27ad01b8bd47 Mon Sep 17 00:00:00 2001
From: Eric Schulte <address@hidden>
Date: Mon, 12 Jul 2010 10:42:59 -0700
Subject: [PATCH] org-exp: raise an error when trying to export code 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 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 \\([^\000]+?\n\\)[ \t]*#\\+END_SRC.*\n?\\)\\|\\(^\\([ \t]*\\)#\\ +BEGIN_EXAMPLE:?\\(?:[ \t]+\\(.*\\)\\)?\n\\([^\000]+?\n\\)[ \t]*#\\ +END_EXAMPLE.*\n?\\)" + "\\(^\\([ \t]*\\)#\\+BEGIN_SRC:?\\([ \t]+\\([^ \t\n]+\\)\\)?\\ (.*\\)\n\\([^\000]+?\n\\)[ \t]*#\\+END_SRC.*\n?\\)\\|\\(^\\([ \t]*\ \)#\\+BEGIN_EXAMPLE:?\\(?:[ \t]+\\(.*\\)\\)?\n\\([^\000]+?\n\\) [ \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- 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- string 0))))

      (setq trans (org-export-format-source-code-or-example
--
1.7.0.4


- Carsten






reply via email to

[Prev in Thread] Current Thread [Next in Thread]