Merge branch 'master' of orgmode.org:org-mode

This commit is contained in:
Carsten Dominik 2011-09-20 15:41:19 +02:00
commit a7d89a80fb
14 changed files with 582 additions and 203 deletions

View File

@ -139,7 +139,7 @@ of the same value."
(format "integer, parameter :: %S = %S\n" var val))
((floatp val)
(format "real, parameter :: %S = %S\n" var val))
((or (characterp val))
((or (integerp val))
(format "character, parameter :: %S = '%S'\n" var val))
((stringp val)
(format "character(len=%d), parameter :: %S = '%s'\n"

View File

@ -31,6 +31,8 @@
(require 'org-lparse)
(defun org-odt-end-export ()
(org-odt-fixup-label-references)
;; remove empty paragraphs
(goto-char (point-min))
(while (re-search-forward
@ -598,15 +600,107 @@ PUB-DIR is set, use this as the publishing directory."
(defvar org-lparse-table-is-styled)
(defvar org-lparse-table-rowgrp-info)
(defvar org-lparse-table-colalign-vector)
(defvar org-odt-table-style nil
"Table style specified by \"#+ATTR_ODT: <style-name>\" line.
This is set during `org-odt-begin-table'.")
(defvar org-odt-table-style-spec nil
"Entry for `org-odt-table-style' in `org-export-odt-table-styles'.")
(defcustom org-export-odt-table-styles nil
"Specify how Table Styles should be derived from a Table Template.
This is a list where each element is of the
form (TABLE-STYLE-NAME TABLE-TEMPLATE-NAME TABLE-CELL-OPTIONS).
TABLE-STYLE-NAME is the style associated with the table through
`org-odt-table-style'.
TABLE-TEMPLATE-NAME is a set of - upto 9 - automatic
TABLE-CELL-STYLE-NAMEs and PARAGRAPH-STYLE-NAMEs (as defined
below) that is included in
`org-export-odt-content-template-file'.
TABLE-CELL-STYLE-NAME := TABLE-TEMPLATE-NAME + TABLE-CELL-TYPE +
\"TableCell\"
PARAGRAPH-STYLE-NAME := TABLE-TEMPLATE-NAME + TABLE-CELL-TYPE +
\"TableParagraph\"
TABLE-CELL-TYPE := \"FirstRow\" | \"LastColumn\" |
\"FirstRow\" | \"LastRow\" |
\"EvenRow\" | \"OddRow\" |
\"EvenColumn\" | \"OddColumn\" | \"\"
where \"+\" above denotes string concatenation.
TABLE-CELL-OPTIONS is an alist where each element is of the
form (TABLE-CELL-STYLE-SELECTOR . ON-OR-OFF).
TABLE-CELL-STYLE-SELECTOR := `use-first-row-styles' |
`use-last-row-styles' |
`use-first-column-styles' |
`use-last-column-styles' |
`use-banding-rows-styles' |
`use-banding-columns-styles' |
`use-first-row-styles'
ON-OR-OFF := `t' | `nil'
For example, with the following configuration
\(setq org-export-odt-table-styles
'\(\(\"TableWithHeaderRowsAndColumns\" \"Custom\"
\(\(use-first-row-styles . t\)
\(use-first-column-styles . t\)\)\)
\(\"TableWithHeaderColumns\" \"Custom\"
\(\(use-first-column-styles . t\)\)\)\)\)
1. A table associated with \"TableWithHeaderRowsAndColumns\"
style will use the following table-cell styles -
\"CustomFirstRowTableCell\", \"CustomFirstColumnTableCell\",
\"CustomTableCell\" and the following paragraph styles
\"CustomFirstRowTableParagraph\",
\"CustomFirstColumnTableParagraph\", \"CustomTableParagraph\"
as appropriate.
2. A table associated with \"TableWithHeaderColumns\" style will
use the following table-cell styles -
\"CustomFirstColumnTableCell\", \"CustomTableCell\" and the
following paragraph styles
\"CustomFirstColumnTableParagraph\", \"CustomTableParagraph\"
as appropriate..
Note that TABLE-TEMPLATE-NAME corresponds to the
\"<table:table-template>\" elements contained within
\"<office:styles>\". The entries (TABLE-STYLE-NAME
TABLE-TEMPLATE-NAME TABLE-CELL-OPTIONS) correspond to
\"table:template-name\" and \"table:use-first-row-styles\" etc
attributes of \"<table:table>\" element. Refer ODF-1.2
specification for more information. Also consult the
implementation filed under `org-odt-get-table-cell-styles'."
:group 'org-export-odt
:type '(choice
(const :tag "None" nil)
(repeat :tag "Table Styles"
(list :tag "Table Style Specification"
(string :tag "Table Style Name")
(string :tag "Table Template Name")
(alist :options (use-first-row-styles
use-last-row-styles
use-first-column-styles
use-last-column-styles
use-banding-rows-styles
use-banding-columns-styles)
:key-type symbol
:value-type (const :tag "True" t))))))
(defun org-odt-begin-table (caption label attributes)
(setq org-odt-table-style attributes)
(setq org-odt-table-style-spec
(assoc org-odt-table-style org-export-odt-table-styles))
(when label
(insert
(org-odt-format-stylized-paragraph
'table (org-odt-format-entity-caption label caption "Table"))))
(org-lparse-insert-tag
"<table:table table:name=\"%s\" table:style-name=\"%s\">"
(or label "") "OrgTable")
(or label "") (or (nth 1 org-odt-table-style-spec) "OrgTable"))
(setq org-lparse-table-begin-marker (point)))
(defun org-odt-end-table ()
@ -614,22 +708,24 @@ PUB-DIR is set, use this as the publishing directory."
(loop for level from 0 below org-lparse-table-ncols
do (insert
(org-odt-format-tags
"<table:table-column table:style-name=\"OrgTableColumn\"/>" "")))
"<table:table-column table:style-name=\"%sColumn\"/>"
"" (or (nth 1 org-odt-table-style-spec) "OrgTable"))))
;; fill style attributes for table cells
(when org-lparse-table-is-styled
(while (re-search-forward "@@\\(table-cell:p\\|table-cell:style-name\\)@@\\([0-9]+\\)@@\\([0-9]+\\)@@" nil t)
(let ((spec (match-string 1))
(r (string-to-number (match-string 2)))
(c (string-to-number (match-string 3))))
(let* ((spec (match-string 1))
(r (string-to-number (match-string 2)))
(c (string-to-number (match-string 3)))
(cell-styles (org-odt-get-table-cell-styles
r c org-odt-table-style-spec))
(table-cell-style (car cell-styles))
(table-cell-paragraph-style (cdr cell-styles)))
(cond
((equal spec "table-cell:p")
(let ((style-name (org-odt-get-paragraph-style-for-table-cell r c)))
(replace-match style-name t t)))
(replace-match table-cell-paragraph-style t t))
((equal spec "table-cell:style-name")
(let ((style-name (org-odt-get-style-name-for-table-cell r c)))
(replace-match style-name t t)))))))
(replace-match table-cell-style t t))))))
(goto-char (point-max))
(org-lparse-insert-tag "</table:table>"))
@ -653,30 +749,87 @@ PUB-DIR is set, use this as the publishing directory."
(org-odt-format-tags
'("<table:table-row>" . "</table:table-row>") row))
(defun org-odt-get-style-name-for-table-cell (r c)
(concat
"OrgTblCell"
(cond
((= r 0) "T")
((eq (cdr (assoc r org-lparse-table-rowgrp-info)) :start) "T")
(t ""))
(when (= r org-lparse-table-rownum) "B")
(cond
((= c 0) "")
((or (memq (nth c org-table-colgroup-info) '(:start :startend))
(memq (nth (1- c) org-table-colgroup-info) '(:end :startend))) "L")
(t ""))))
(defun org-odt-get-table-cell-styles (r c &optional style-spec)
"Retrieve styles applicable to a table cell.
R and C are (zero-based) row and column numbers of the table
cell. STYLE-SPEC is an entry in `org-export-odt-table-styles'
applicable to the current table. It is `nil' if the table is not
associated with any style attributes.
(defun org-odt-get-paragraph-style-for-table-cell (r c)
(capitalize (aref org-lparse-table-colalign-vector c)))
Return a cons of (TABLE-CELL-STYLE-NAME . PARAGRAPH-STYLE-NAME).
When STYLE-SPEC is nil, style the table cell the conventional way
- choose cell borders based on row and column groupings and
choose paragraph alignment based on `org-col-cookies' text
property. See also
`org-odt-get-paragraph-style-cookie-for-table-cell'.
When STYLE-SPEC is non-nil, ignore the above cookie and return
styles congruent with the ODF-1.2 specification."
(cond
(style-spec
;; LibreOffice - particularly the Writer - honors neither table
;; templates nor custom table-cell styles. Inorder to retain
;; inter-operability with LibreOffice, only automatic styles are
;; used for styling of table-cells. The current implementation is
;; congruent with ODF-1.2 specification and hence is
;; future-compatible.
;; Additional Note: LibreOffice's AutoFormat facility for tables -
;; which recognizes as many as 16 different cell types - is much
;; richer. Unfortunately it is NOT amenable to easy configuration
;; by hand.
(let* ((template-name (nth 1 style-spec))
(cell-style-selectors (nth 2 style-spec))
(cell-type
(cond
((and (cdr (assoc 'use-first-column-styles cell-style-selectors))
(= c 0)) "FirstColumn")
((and (cdr (assoc 'use-last-column-styles cell-style-selectors))
(= c (1- org-lparse-table-ncols))) "LastColumn")
((and (cdr (assoc 'use-first-row-styles cell-style-selectors))
(= r 0)) "FirstRow")
((and (cdr (assoc 'use-last-row-styles cell-style-selectors))
(= r org-lparse-table-rownum))
"LastRow")
((and (cdr (assoc 'use-banding-rows-styles cell-style-selectors))
(= (% r 2) 1)) "EvenRow")
((and (cdr (assoc 'use-banding-rows-styles cell-style-selectors))
(= (% r 2) 0)) "OddRow")
((and (cdr (assoc 'use-banding-columns-styles cell-style-selectors))
(= (% c 2) 1)) "EvenColumn")
((and (cdr (assoc 'use-banding-columns-styles cell-style-selectors))
(= (% c 2) 0)) "OddColumn")
(t ""))))
(cons
(concat template-name cell-type "TableCell")
(concat template-name cell-type "TableParagraph"))))
(t
(cons
(concat
"OrgTblCell"
(cond
((= r 0) "T")
((eq (cdr (assoc r org-lparse-table-rowgrp-info)) :start) "T")
(t ""))
(when (= r org-lparse-table-rownum) "B")
(cond
((= c 0) "")
((or (memq (nth c org-table-colgroup-info) '(:start :startend))
(memq (nth (1- c) org-table-colgroup-info) '(:end :startend))) "L")
(t "")))
(capitalize (aref org-lparse-table-colalign-vector c))))))
(defun org-odt-get-paragraph-style-cookie-for-table-cell (r c)
(concat
(cond
(org-lparse-table-cur-rowgrp-is-hdr "OrgTableHeading")
((and (= c 0) (org-lparse-get 'TABLE-FIRST-COLUMN-AS-LABELS))
"OrgTableHeading")
(t "OrgTableContents"))
(and (not org-odt-table-style-spec)
(cond
(org-lparse-table-cur-rowgrp-is-hdr "OrgTableHeading")
((and (= c 0) (org-lparse-get 'TABLE-FIRST-COLUMN-AS-LABELS))
"OrgTableHeading")
(t "OrgTableContents")))
(and org-lparse-table-is-styled
(format "@@table-cell:p@@%03d@@%03d@@" r c))))
@ -1017,51 +1170,11 @@ value of `org-export-odt-use-htmlfontify."
(org-odt-copy-image-file thefile) thelink))))
(org-export-odt-format-image thefile href)))
(defun org-export-odt-do-format-numbered-formula (embed-as caption attr label
width height href)
(with-temp-buffer
(let ((org-lparse-table-colalign-info '((0 "c" "8") (0 "c" "1"))))
(org-lparse-insert-list-table
`((,(org-export-odt-do-format-formula ; caption and label
; should be nil
embed-as nil attr nil width height href)
,(org-odt-format-entity-caption label caption "Equation")))
nil nil nil nil nil org-lparse-table-colalign-info))
(buffer-substring-no-properties (point-min) (point-max))))
(defun org-export-odt-do-format-formula (embed-as caption attr label
width height href)
"Create image tag with source and attributes."
(save-match-data
(cond
((and (not caption) (not label))
(let (style-name anchor-type)
(case embed-as
(paragraph
(setq style-name "OrgSimpleGraphics" anchor-type "paragraph"))
(character
(setq style-name "OrgInlineGraphics" anchor-type "as-char"))
(t
(error "Unknown value for embed-as %S" embed-as)))
(org-odt-format-frame href style-name width height nil anchor-type)))
(t
(concat
(org-odt-format-textbox
(org-odt-format-stylized-paragraph
'illustration
(concat
(let ((extra ""))
(org-odt-format-frame
href "" width height extra "paragraph"))
(org-odt-format-entity-caption label caption)))
"OrgCaptionFrame" width height))))))
(defun org-export-odt-format-formula (src href &optional embed-as)
"Create image tag with source and attributes."
(save-match-data
(let* ((caption (org-find-text-property-in-string 'org-caption src))
(caption (and caption (org-xml-format-desc caption)))
(attr (org-find-text-property-in-string 'org-attributes src))
(label (org-find-text-property-in-string 'org-label src))
(embed-as (or embed-as
(and (org-find-text-property-in-string
@ -1069,11 +1182,20 @@ value of `org-export-odt-use-htmlfontify."
(org-find-text-property-in-string
'org-latex-src-embed-type src))
'paragraph))
(attr-plist (when attr (read attr)))
(width (plist-get attr-plist :width))
(height (plist-get attr-plist :height)))
(org-export-odt-do-format-formula
embed-as caption attr label width height href))))
width height)
(cond
((eq embed-as 'character)
(org-odt-format-entity "InlineFormula" href width height))
(t
(org-lparse-end-paragraph)
(org-lparse-insert-list-table
`((,(org-odt-format-entity
(if caption "CaptionedDisplayFormula" "DisplayFormula")
href width height caption nil)
,(if (not label) ""
(org-odt-format-entity-caption label nil "Equation"))))
nil nil nil "OrgEquation" nil '((1 "c" 8) (2 "c" 1)))
(throw 'nextline nil))))))
(defvar org-odt-embedded-formulas-count 0)
(defun org-odt-copy-formula-file (path)
@ -1256,12 +1378,20 @@ MAY-INLINE-P allows inlining it as an image."
(size (org-odt-image-size-from-file
src (plist-get attr-plist :width)
(plist-get attr-plist :height)
(plist-get attr-plist :scale) nil embed-as)))
(org-export-odt-do-format-image
embed-as caption attr label (car size) (cdr size) href))))
(plist-get attr-plist :scale) nil embed-as))
(width (car size)) (height (cdr size)))
(cond
((not (or caption label))
(case embed-as
(paragraph (org-odt-format-entity "DisplayImage" href width height))
(character (org-odt-format-entity "InlineImage" href width height))
(t (error "Unknown value for embed-as %S" embed-as))))
(t
(org-odt-format-entity
"CaptionedDisplayImage" href width height caption label))))))
(defun org-odt-format-frame (text style &optional
width height extra anchor-type)
(defun org-odt-format-frame (text width height style &optional
extra anchor-type)
(let ((frame-attrs
(concat
(if width (format " svg:width=\"%0.2fcm\"" width) "")
@ -1272,13 +1402,14 @@ MAY-INLINE-P allows inlining it as an image."
'("<draw:frame draw:style-name=\"%s\"%s>" . "</draw:frame>")
text style frame-attrs)))
(defun org-odt-format-textbox (text style &optional width height extra)
(defun org-odt-format-textbox (text width height style &optional
extra anchor-type)
(org-odt-format-frame
(org-odt-format-tags
'("<draw:text-box %s>" . "</draw:text-box>")
text (concat (format " fo:min-height=\"%0.2fcm\"" (or height .2))
(format " fo:min-width=\"%0.2fcm\"" (or width .2))))
style width nil extra))
width nil style extra anchor-type))
(defun org-odt-format-inlinetask (heading content
&optional todo priority tags)
@ -1289,33 +1420,34 @@ MAY-INLINE-P allows inlining it as an image."
(org-lparse-format
'HEADLINE (concat (org-lparse-format-todo todo) " " heading)
nil tags))
content) "OrgInlineTaskFrame" nil nil " style:rel-width=\"100%\"")))
(defun org-export-odt-do-format-image (embed-as caption attr label
width height href)
"Create image tag with source and attributes."
(save-match-data
(cond
((and (not caption) (not label))
(let (style-name anchor-type)
(case embed-as
(paragraph
(setq style-name "OrgSimpleGraphics" anchor-type "paragraph"))
(character
(setq style-name "OrgInlineGraphics" anchor-type "as-char"))
(t
(error "Unknown value for embed-as %S" embed-as)))
(org-odt-format-frame href style-name width height nil anchor-type)))
(t
(concat
(org-odt-format-textbox
(org-odt-format-stylized-paragraph
'illustration
(concat
(let ((extra " style:rel-width=\"100%\" style:rel-height=\"scale\""))
(org-odt-format-frame
href "OrgCaptionedGraphics" width height extra "paragraph"))
(org-odt-format-entity-caption label caption)))
"OrgCaptionFrame" width height))))))
content) nil nil "OrgInlineTaskFrame" " style:rel-width=\"100%\"")))
(defvar org-odt-entity-frame-styles
'(("InlineImage" "Figure" ("OrgInlineImage" nil "as-char"))
("DisplayImage" "Figure" ("OrgDisplayImage" nil "paragraph"))
("CaptionedDisplayImage" "Figure"
("OrgCaptionedImage"
" style:rel-width=\"100%\" style:rel-height=\"scale\"" "paragraph")
("OrgImageCaptionFrame"))
("InlineFormula" "Equation" ("OrgInlineFormula" nil "as-char"))
("DisplayFormula" "Equation" ("OrgDisplayFormula" nil "as-char"))
("CaptionedDisplayFormula" "Equation"
("OrgCaptionedFormula" nil "paragraph")
("OrgFormulaCaptionFrame" nil "as-char"))))
(defun org-odt-format-entity (entity href width height &optional caption label)
(let* ((entity-style (assoc entity org-odt-entity-frame-styles))
(entity-frame (apply 'org-odt-format-frame
href width height (nth 2 entity-style))))
(if (not (or caption label)) entity-frame
(apply 'org-odt-format-textbox
(org-odt-format-stylized-paragraph
'illustration
(concat entity-frame (org-odt-format-entity-caption
label caption (nth 1 entity-style))))
width height (nth 3 entity-style)))))
(defvar org-odt-embedded-images-count 0)
(defun org-odt-copy-image-file (path)
@ -1401,22 +1533,105 @@ MAY-INLINE-P allows inlining it as an image."
(t (ignore)))
(cons width height)))
(defvar org-odt-default-entity "Illustration")
(defun org-odt-format-entity-caption (label caption &optional default-entity)
(if (not label) (or caption "")
(let* ((label-components (org-odt-parse-label label))
(entity (car label-components))
(seqno (cdr label-components))
(caption (and caption (concat ": " caption))))
(unless seqno
(setq seqno label
entity (or default-entity org-odt-default-entity)))
(concat
entity " "
(org-odt-format-tags
'("<text:sequence text:ref-name=\"%s\" text:name=\"%s\" text:formula=\"ooow:%s+1\" style:num-format=\"1\">" . "</text:sequence>")
seqno label entity entity)
caption))))
(defvar org-odt-entity-labels-alist nil
"Associate Labels with the Labelled entities.
Each element of the alist is of the form (LABEL-NAME
CATEGORY-NAME SEQNO). LABEL-NAME is same as that specified by
\"#+LABEL: ...\" line. CATEGORY-NAME is the type of the entity
that LABEL-NAME is attached to. CATEGORY-NAME can be one of
\"Table\", \"Figure\" or \"Equation\". SEQNO is the unique
number assigned to the referenced entity on a per-CATEGORY basis.
It is generated sequentially and is 1-based.
Update this alist with `org-odt-add-label-definition' and
retrieve an entry with `org-odt-get-label-definition'.")
(defvar org-odt-entity-counts-plist nil
"Plist of running counters of SEQNOs for each of the CATEGORY-NAMEs.
See `org-odt-entity-labels-alist' for known CATEGORY-NAMEs.")
(defvar org-odt-label-def-ref-spec
'(("Equation" "(%n)" "text" "(%n)")
("" "%e %n%c" "category-and-value" "%e %n"))
"Specify how labels are applied and referenced.
This is an alist where each element is of the form (CATEGORY-NAME
LABEL-APPLY-FMT LABEL-REF-MODE LABEL-REF-FMT). CATEGORY-NAME is
as defined in `org-odt-entity-labels-alist'. It can additionally
be an empty string in which case it is used as a catch-all
specifier.
LABEL-APPLY-FMT is used for applying labels and captions. It may
contain following specifiers - %e, %n and %c. %e is replaced
with the CATEGORY-NAME. %n is replaced with \"<text:sequence
...> SEQNO </text:sequence>\". %c is replaced with CAPTION. See
`org-odt-format-label-definition'.
LABEL-REF-MODE and LABEL-REF-FMT are used for generating the
following label reference - \"<text:sequence-ref
text:reference-format=\"LABEL-REF-MODE\" ...> LABEL-REF-FMT
</text:sequence-ref>\". LABEL-REF-FMT may contain following
specifiers - %e and %n. %e is replaced with the CATEGORY-NAME. %n is
replaced with SEQNO. See `org-odt-format-label-reference'.")
(defun org-odt-add-label-definition (label category)
"Return (SEQNO . LABEL-APPLY-FMT).
See `org-odt-label-def-ref-spec'."
(setq label (substring-no-properties label))
(let (seqno label-props fmt (category-sym (intern category)))
(setq seqno (1+ (plist-get org-odt-entity-counts-plist category-sym))
org-odt-entity-counts-plist (plist-put org-odt-entity-counts-plist
category-sym seqno)
fmt (cadr (or (assoc-string category org-odt-label-def-ref-spec t)
(assoc-string "" org-odt-label-def-ref-spec t)))
label-props (list label category seqno))
(push label-props org-odt-entity-labels-alist)
(cons seqno fmt)))
(defun org-odt-get-label-definition (label)
"Return (LABEL-NAME CATEGORY-NAME SEQNO LABEL-REF-MODE LABEL-REF-FMT).
See `org-odt-entity-labels-alist' and
`org-odt-label-def-ref-spec'."
(let* ((label-props (assoc label org-odt-entity-labels-alist))
(category (nth 1 label-props)))
(append label-props
(cddr (or (assoc-string category org-odt-label-def-ref-spec t)
(assoc-string "" org-odt-label-def-ref-spec t))))))
(defun org-odt-format-label-definition (label category caption)
(assert label)
(let* ((label-props (org-odt-add-label-definition label category))
(seqno (car label-props))
(fmt (cdr label-props)))
(or (format-spec
fmt
`((?e . ,category)
(?n . ,(org-odt-format-tags
'("<text:sequence text:ref-name=\"%s\" text:name=\"%s\" text:formula=\"ooow:%s+1\" style:num-format=\"1\">" . "</text:sequence>")
(format "%d" seqno) label category category))
(?c . ,(or (and caption (concat ": " caption)) ""))))
caption "")))
(defun org-odt-format-label-reference (label category seqno fmt1 fmt2)
(assert label)
(save-match-data
(org-odt-format-tags
'("<text:sequence-ref text:reference-format=\"%s\" text:ref-name=\"%s\">"
. "</text:sequence-ref>")
(format-spec fmt2 `((?e . ,category)
(?n . ,(format "%d" seqno)))) fmt1 label)))
(defun org-odt-fixup-label-references ()
(goto-char (point-min))
(while (re-search-forward
"<text:sequence-ref text:ref-name=\"\\([^\"]+\\)\"/>" nil t)
(let* ((label (match-string 1)))
(replace-match
(apply 'org-odt-format-label-reference
(org-odt-get-label-definition label)) t t))))
(defun org-odt-format-entity-caption (label caption category)
(or (and label (org-odt-format-label-definition label category caption))
caption ""))
(defun org-odt-format-tags (tag text &rest args)
(let ((prefix (when org-lparse-encode-pending "@"))
@ -1437,8 +1652,9 @@ MAY-INLINE-P allows inlining it as an image."
;; reset variables
(setq org-odt-manifest-file-entries nil
org-odt-embedded-images-count 0
org-odt-embedded-formulas-count 0)
org-odt-embedded-formulas-count 0
org-odt-entity-labels-alist nil
org-odt-entity-counts-plist (list 'Table 0 'Equation 0 'Figure 0))
content-file))
(defcustom org-export-odt-prettify-xml nil
@ -1673,14 +1889,6 @@ visually."
(CODING-SYSTEM-FOR-SAVE 'utf-8)
(t (error "Unknown property: %s" what))))
(defun org-odt-parse-label (label)
(save-match-data
(if (not (string-match "\\`[a-zA-Z]+:\\(.+\\)" label))
(cons label nil)
(cons
(capitalize (substring label 0 (1- (match-beginning 1))))
(substring label (match-beginning 1))))))
(defvar org-lparse-latex-fragment-fallback) ; set by org-do-lparse
(defvar org-lparse-opt-plist) ; bound during org-do-lparse
(defun org-export-odt-do-preprocess-latex-fragments ()
@ -1722,16 +1930,18 @@ visually."
(let (label label-components category value pretty-label)
(while (re-search-forward "\\\\ref{\\([^{}\n]+\\)}" nil t)
(org-if-unprotected-at (match-beginning 1)
(setq label (match-string 1)
label-components (org-odt-parse-label label)
category (car label-components)
value (cdr label-components)
pretty-label (if value (concat category " " value) label))
(replace-match
(let ((org-lparse-encode-pending t))
(let ((org-lparse-encode-pending t)
(label (match-string 1)))
;; markup generated below is mostly an eye-candy. At
;; pre-processing stage, there is no information on which
;; entity a label reference points to. The actual markup
;; is generated as part of `org-odt-fixup-label-references'
;; which gets called at the fag end of export. By this
;; time we would have seen and collected all the label
;; definitions in `org-odt-entity-labels-alist'.
(org-odt-format-tags
'("<text:sequence-ref text:reference-format=\"category-and-value\" text:ref-name=\"%s\">"
. "</text:sequence-ref>") pretty-label label)) t t)))))
"<text:sequence-ref text:ref-name=\"%s\"/>" "" label)) t t)))))
;; process latex fragments as part of
;; `org-export-preprocess-after-blockquote-hook'. Note that this hook

View File

@ -46,7 +46,7 @@
<!-- automatic styles -->
<office:automatic-styles>
<style:style style:name="OrgTable" style:family="table">
<style:table-properties style:rel-width="90%" table:align="center"/>
<style:table-properties style:rel-width="90%" fo:margin-top="0cm" fo:margin-bottom="0.20cm" table:align="center"/>
</style:style>
<style:style style:name="OrgTableColumn" style:family="table-column">
@ -57,50 +57,72 @@
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="none" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellL" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="0.035cm solid #808080" fo:border-right="none"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="0.002cm solid #000000" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="none" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="none" fo:border-right="0.002cm solid #000000"/>
</style:style>
<style:style style:name="OrgTblCellLR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="0.035cm solid #808080" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000"/>
</style:style>
<style:style style:name="OrgTblCellT" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="none" fo:border-left="none" fo:border-right="none"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="none" fo:border-left="none" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellTL" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="none" fo:border-left="0.035cm solid #808080" fo:border-right="none"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="none" fo:border-left="0.002cm solid #000000" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellTR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="none" fo:border-left="none" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="none" fo:border-left="none" fo:border-right="0.002cm solid #000000"/>
</style:style>
<style:style style:name="OrgTblCellTLR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="none" fo:border-left="0.035cm solid #808080" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="none" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000"/>
</style:style>
<style:style style:name="OrgTblCellB" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.035cm solid #808080" fo:border-left="none" fo:border-right="none"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.002cm solid #000000" fo:border-left="none" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellBL" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.035cm solid #808080" fo:border-left="0.035cm solid #808080" fo:border-right="none"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.002cm solid #000000" fo:border-left="0.002cm solid #000000" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellBR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.035cm solid #808080" fo:border-left="none" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.002cm solid #000000" fo:border-left="none" fo:border-right="0.002cm solid #000000"/>
</style:style>
<style:style style:name="OrgTblCellBLR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.035cm solid #808080" fo:border-left="0.035cm solid #808080" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="0.002cm solid #000000" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000"/>
</style:style>
<style:style style:name="OrgTblCellTB" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="0.035cm solid #808080" fo:border-left="none" fo:border-right="none"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:border-left="none" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellTBL" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="0.035cm solid #808080" fo:border-left="0.035cm solid #808080" fo:border-right="none"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:border-left="0.002cm solid #000000" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgTblCellTBR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="0.035cm solid #808080" fo:border-left="none" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:border-left="none" fo:border-right="0.002cm solid #000000"/>
</style:style>
<style:style style:name="OrgTblCellTBLR" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.035cm solid #808080" fo:border-bottom="0.035cm solid #808080" fo:border-left="0.035cm solid #808080" fo:border-right="0.035cm solid #808080"/>
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="0.002cm solid #000000" fo:border-bottom="0.002cm solid #000000" fo:border-left="0.002cm solid #000000" fo:border-right="0.002cm solid #000000"/>
</style:style>
<!-- BEGIN: Table styles for numbered equations -->
<style:style style:name="OrgEquation" style:family="table">
<style:table-properties style:rel-width="100%" fo:margin-top="0cm" fo:margin-bottom="0.20cm" table:align="center"/>
</style:style>
<style:style style:name="OrgEquationTableColumn" style:family="table-column">
<style:table-column-properties style:rel-column-width="1*"/>
</style:style>
<style:style style:name="OrgFirstEquationFirstColumnTableCell" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="none" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgEquationLastColumnTableCell" style:family="table-cell">
<style:table-cell-properties style:vertical-align="middle" fo:padding="0.159cm" fo:border-top="none" fo:border-bottom="none" fo:border-left="none" fo:border-right="none"/>
</style:style>
<style:style style:name="OrgEquationFirstColumnTableParagraph" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:paragraph-properties fo:text-align="center" style:justify-single-word="false"/>
</style:style>
<style:style style:name="OrgEquationLastColumnTableParagraph" style:family="paragraph" style:parent-style-name="Table_20_Contents">
<style:paragraph-properties fo:text-align="end" style:justify-single-word="false"/>
</style:style>
<!-- END: Table styles for numbered equations -->
</office:automatic-styles>
<office:body>
@ -111,8 +133,8 @@
<text:sequence-decl text:display-outline-level="0" text:name="Text"/>
<text:sequence-decl text:display-outline-level="0" text:name="Drawing"/>
<text:sequence-decl text:display-outline-level="0" text:name="Equation"/>
<text:sequence-decl text:display-outline-level="0" text:name="Figure"/>
</text:sequence-decls>
</office:text>
</office:body>
</office:document-content>

View File

@ -363,29 +363,49 @@
</style:style>
<!-- Simple Images -->
<style:style style:name="OrgSimpleGraphics" style:family="graphic" style:parent-style-name="Graphics">
<style:style style:name="OrgDisplayImage" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties text:anchor-type="paragraph" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
</style:style>
<!-- Captioned Images -->
<style:style style:name="OrgCaptionedGraphics" style:family="graphic" style:parent-style-name="Graphics">
<style:style style:name="OrgCaptionedImage" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties style:rel-width="100%" text:anchor-type="paragraph" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:run-through="foreground" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none"/>
</style:style>
<style:style style:name="OrgCaptionFrame" style:family="graphic" style:parent-style-name="Frame">
<style:style style:name="OrgImageCaptionFrame" style:family="graphic" style:parent-style-name="Frame">
<style:graphic-properties text:anchor-type="paragraph" fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:wrap="none" style:vertical-pos="top" style:vertical-rel="paragraph" style:horizontal-pos="center" style:horizontal-rel="paragraph" fo:padding="0cm" fo:border="none"/>
</style:style>
<!-- Inlined Images -->
<style:style style:name="OrgInlineGraphics" style:family="graphic" style:parent-style-name="Graphics">
<style:style style:name="OrgInlineImage" style:family="graphic" style:parent-style-name="Graphics">
<style:graphic-properties text:anchor-type="as-char" style:vertical-pos="top" style:vertical-rel="baseline" style:horizontal-pos="center" style:horizontal-rel="paragraph"/>
</style:style>
<!-- Inline Formula -->
<style:style style:name="OrgFormula" style:family="graphic">
<style:graphic-properties text:anchor-type="as-char" svg:y="0cm" fo:margin-left="0.201cm" fo:margin-right="0.201cm" style:vertical-pos="middle" style:vertical-rel="text" style:shadow="none"/>
</style:style>
<style:style style:name="OrgInlineFormula" style:family="graphic" style:parent-style-name="Formula">
<style:graphic-properties text:anchor-type="as-char" fo:margin-left="0.201cm" fo:margin-right="0.201cm" style:vertical-pos="middle" style:vertical-rel="text"/>
</style:style>
<style:style style:name="OrgInlineFormula" style:family="graphic" style:parent-style-name="Formula">
<style:graphic-properties style:vertical-pos="middle" style:vertical-rel="text" draw:ole-draw-aspect="1"/>
</style:style>
<style:style style:name="OrgDisplayFormula" style:family="graphic" style:parent-style-name="OrgFormula">
<style:graphic-properties style:vertical-pos="middle" style:vertical-rel="text" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" draw:ole-draw-aspect="1"/>
</style:style>
<style:style style:name="OrgFormulaCaptionFrame" style:family="graphic" style:parent-style-name="Frame">
<style:graphic-properties fo:margin-top="0cm" fo:margin-bottom="0cm" style:vertical-pos="middle" style:vertical-rel="text" style:horizontal-pos="from-left" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none"/>
</style:style>
<style:style style:name="OrgCaptionedFormula" style:family="graphic" style:parent-style-name="OrgFormula">
<style:graphic-properties fo:margin-left="0cm" fo:margin-right="0cm" fo:margin-top="0cm" fo:margin-bottom="0cm" style:run-through="foreground" style:wrap="none" style:vertical-pos="from-top" style:vertical-rel="paragraph-content" style:horizontal-pos="center" style:horizontal-rel="paragraph-content" fo:padding="0cm" fo:border="none" style:shadow="none" draw:ole-draw-aspect="1"/>
</style:style>
<!-- Inline Tasks -->
<style:style style:name="OrgInlineTaskHeading" style:family="paragraph" style:parent-style-name="Caption" style:next-style-name="Text_20_body">
<style:text-properties style:font-name="Arial1" fo:font-style="normal" fo:font-weight="bold"/>

View File

@ -179,7 +179,7 @@ of the same value."
(format "int %S = %S;" var val))
((floatp val)
(format "double %S = %S;" var val))
((or (characterp val))
((or (integerp val))
(format "char %S = '%S';" var val))
((stringp val)
(format "char %S[%d] = \"%s\";"

View File

@ -79,7 +79,8 @@
"Execute a block of R code.
This function is called by `org-babel-execute-src-block'."
(save-excursion
(let* ((result-type (cdr (assoc :result-type params)))
(let* ((result-params (cdr (assoc :result-params params)))
(result-type (cdr (assoc :result-type params)))
(session (org-babel-R-initiate-session
(cdr (assoc :session params)) params))
(colnames-p (cdr (assoc :colnames params)))
@ -88,7 +89,7 @@ This function is called by `org-babel-execute-src-block'."
(full-body (org-babel-expand-body:R body params graphics-file))
(result
(org-babel-R-evaluate
session full-body result-type
session full-body result-type result-params
(or (equal "yes" colnames-p)
(org-babel-pick-name
(cdr (assoc :colname-names params)) colnames-p))
@ -231,16 +232,15 @@ current code buffer."
(defvar org-babel-R-write-object-command "{function(object,transfer.file){object;invisible(if(inherits(try({tfile<-tempfile();write.table(object,file=tfile,sep=\"\\t\",na=\"nil\",row.names=%s,col.names=%s,quote=FALSE);file.rename(tfile,transfer.file)},silent=TRUE),\"try-error\")){if(!file.exists(transfer.file))file.create(transfer.file)})}}(object=%s,transfer.file=\"%s\")")
(defun org-babel-R-evaluate
(session body result-type column-names-p row-names-p)
(session body result-type result-params column-names-p row-names-p)
"Evaluate R code in BODY."
(if session
(org-babel-R-evaluate-session
session body result-type column-names-p row-names-p)
(org-babel-R-evaluate-external-process
body result-type column-names-p row-names-p)))
(funcall (if session
#'org-babel-R-evaluate-session
#'org-babel-R-evaluate-external-process)
body result-type result-params column-names-p row-names-p))
(defun org-babel-R-evaluate-external-process
(body result-type column-names-p row-names-p)
(body result-type result-params column-names-p row-names-p)
"Evaluate BODY in external R process.
If RESULT-TYPE equals 'output then return standard output as a
string. If RESULT-TYPE equals 'value then return the value of the
@ -257,11 +257,17 @@ last statement in BODY, as elisp."
(format "{function ()\n{\n%s\n}}()" body)
(org-babel-process-file-name tmp-file 'noquote)))
(org-babel-R-process-value-result
(org-babel-import-elisp-from-file tmp-file '(16)) column-names-p)))
(if (or (member "scalar" result-params)
(member "verbatim" result-params))
(with-temp-buffer
(insert-file-contents tmp-file)
(buffer-string))
(org-babel-import-elisp-from-file tmp-file '(16)))
column-names-p)))
(output (org-babel-eval org-babel-R-command body))))
(defun org-babel-R-evaluate-session
(session body result-type column-names-p row-names-p)
(session body result-type result-params column-names-p row-names-p)
"Evaluate BODY in SESSION.
If RESULT-TYPE equals 'output then return standard output as a
string. If RESULT-TYPE equals 'value then return the value of the
@ -283,7 +289,13 @@ last statement in BODY, as elisp."
"FALSE")
".Last.value" (org-babel-process-file-name tmp-file 'noquote)))
(org-babel-R-process-value-result
(org-babel-import-elisp-from-file tmp-file '(16)) column-names-p)))
(if (or (member "scalar" result-params)
(member "verbatim" result-params))
(with-temp-buffer
(insert-file-contents tmp-file)
(buffer-string))
(org-babel-import-elisp-from-file tmp-file '(16)))
column-names-p)))
(output
(mapconcat
#'org-babel-chomp

View File

@ -95,6 +95,14 @@ controlled by the :comments header argument."
:group 'org-babel
:type 'string)
(defcustom org-babel-process-comment-text #'org-babel-trim
"Function called to process raw Org-mode text collected to be
inserted as comments in tangled source-code files. The function
should take a single string argument and return a string
result. The default value is `org-babel-trim'."
:group 'org-babel
:type 'function)
(defun org-babel-find-file-noselect-refresh (file)
"Find file ensuring that the latest changes on disk are
represented in the file."
@ -345,16 +353,20 @@ code blocks by language."
(when (or (string= "both" (cdr (assoc :comments params)))
(string= "org" (cdr (assoc :comments params))))
;; from the previous heading or code-block end
(buffer-substring
(max (condition-case nil
(save-excursion
(org-back-to-heading t) (point))
(error 0))
(save-excursion
(re-search-backward
org-babel-src-block-regexp nil t)
(match-end 0)))
(point))))
(funcall
org-babel-process-comment-text
(buffer-substring
(max (condition-case nil
(save-excursion
(org-back-to-heading t) ; sets match data
(match-end 0))
(error (point-min)))
(save-excursion
(if (re-search-backward
org-babel-src-block-regexp nil t)
(match-end 0)
(point-min))))
(point)))))
by-lang)
;; add the spec for this block to blocks under it's language
(setq by-lang (cdr (assoc src-lang blocks)))
@ -396,12 +408,11 @@ form
(eval el))))
'(start-line file link source-name))))
(flet ((insert-comment (text)
(let ((text (org-babel-trim text)))
(when (and comments (not (string= comments "no"))
(> (length text) 0))
(when padline (insert "\n"))
(comment-region (point) (progn (insert text) (point)))
(end-of-line nil) (insert "\n")))))
(when (and comments (not (string= comments "no"))
(> (length text) 0))
(when padline (insert "\n"))
(comment-region (point) (progn (insert text) (point)))
(end-of-line nil) (insert "\n"))))
(when comment (insert-comment comment))
(when link-p
(insert-comment

View File

@ -220,8 +220,16 @@ Returns a list
(when (match-string 6)
(setf (nth 2 info) ;; merge functional-syntax vars and header-args
(org-babel-merge-params
(mapcar (lambda (ref) (cons :var ref))
(org-babel-ref-split-args (match-string 6)))
(mapcar
(lambda (ref) (cons :var ref))
(mapcar
(lambda (var) ;; check that each variable is initialized
(if (string-match ".+=.+" var)
var
(error
"variable \"%s\"%s must be assigned a default value"
var (if name (format " in block \"%s\"" name) ""))))
(org-babel-ref-split-args (match-string 6))))
(nth 2 info))))))
;; inline source block
(when (org-babel-get-inline-src-block-matches)
@ -550,6 +558,7 @@ arguments and pop open the results in a preview buffer."
(interactive)
;; TODO: report malformed code block
;; TODO: report incompatible combinations of header arguments
;; TODO: report uninitialized variables
(let ((too-close 2)) ;; <- control closeness to report potential match
(dolist (header (mapcar (lambda (arg) (substring (symbol-name (car arg)) 1))
(and (org-babel-where-is-src-block-head)
@ -1795,8 +1804,8 @@ Later elements of PLISTS override the values of previous elements.
This takes into account some special considerations for certain
parameters when merging lists."
(let ((results-exclusive-groups
'(("file" "list" "vector" "table" "scalar" "verbatim" "raw" "org"
"html" "latex" "code" "pp" "wrap")
'(("file" "list" "vector" "table" "scalar" "verbatim")
("raw" "org" "html" "latex" "code" "pp" "wrap")
("replace" "silent" "append" "prepend")
("output" "value")))
(exports-exclusive-groups

View File

@ -249,7 +249,7 @@ footnote text is included and defined locally.
The return value will be nil if not at a footnote definition, and a list with
label, start, end and definition of the footnote otherwise."
(when (org-footnote-in-valid-context-p)
(when (save-excursion (beginning-of-line) (org-footnote-in-valid-context-p))
(save-excursion
(end-of-line)
(let ((lim (save-excursion (re-search-backward

View File

@ -0,0 +1,15 @@
#+Title: dangerous code block examples which should be isolated
#+OPTIONS: ^:nil
* no default value for vars
:PROPERTIES:
:ID: f2df5ba6-75fa-4e6b-8441-65ed84963627
:END:
There is no default value assigned to =x= variable. This is not permitted
anymore.
#+source: carre(x)
#+begin_src python
return x*x
#+end_src

View File

@ -289,3 +289,22 @@ src_sh{echo "One"} block at start of line
One spaced block in src_sh{ echo "middle" } of line
src_sh{echo 2} blocks on the src_emacs-lisp{"same"} line
Inline block with src_sh[:results silent]{ echo "parameters" }.
* returning file names -- interpreted as lists
:PROPERTIES:
:ID: a73a2ab6-b8b2-4c0e-ae7f-23ad14eab7bc
:END:
#+begin_src sh :results scalar
echo "[[file:./cv.cls]]"
#+end_src
#+results:
: [[file:./cv.cls]]
#+begin_src sh :results raw scalar
echo "[[file:./cv.cls]]"
#+end_src
#+results:
[[file:./cv.cls]]

View File

@ -1,6 +1,6 @@
;;; test-ob.el --- tests for ob.el
;; Copyright (c) 2010 Eric Schulte
;; Copyright (c) 2010, 2011 Eric Schulte
;; Authors: Eric Schulte, Martyn Jago
;; Released under the GNU General Public License version 3
@ -409,6 +409,27 @@
(should (string= (concat test-line " =\"x\"=")
(buffer-substring-no-properties (point-min) (point-max)))))))
(ert-deftest test-org-babel/combining-scalar-and-raw-result-types ()
(flet ((next-result ()
(org-babel-next-src-block)
(org-babel-execute-src-block)
(goto-char (org-babel-where-is-src-block-result))
(forward-line 1)))
(org-test-at-id "a73a2ab6-b8b2-4c0e-ae7f-23ad14eab7bc"
(next-result)
(should (org-babel-in-example-or-verbatim))
(next-result)
(should (not (org-babel-in-example-or-verbatim))))))
(ert-deftest test-org-babel/no-defaut-value-for-var ()
"Test that the absence of a default value for a variable DOES THROW
a proper error."
(org-test-at-id "f2df5ba6-75fa-4e6b-8441-65ed84963627"
(org-babel-next-src-block)
(let ((err
(should-error (org-babel-execute-src-block) :type 'error)))
(should (equal '(error "variable \"x\" in block \"carre\" must be assigned a default value") err)))))
(provide 'test-ob)
;;; test-ob ends here

View File

@ -82,7 +82,7 @@
(should
(string=
"àâçèéêîôùû"
(org-link-unescape "%E0%E2%E7%E8%E9%EA%EE%F4%F9%FB"))))
(decode-coding-string (org-link-unescape "%E0%E2%E7%E8%E9%EA%EE%F4%F9%FB") 'latin-1))))
(ert-deftest test-org/org-link-escape-url-with-escaped-char ()
"Escape and unscape a URL that includes an escaped char.

View File

@ -4,10 +4,14 @@
;; Authors:
;; Sebastian Rose, Hannover, Germany, sebastian_rose gmx de
;; Eric Schulte, Santa Fe, New Mexico, USA, schulte.eric gmail com
;; David Maus, Brunswick, Germany, dmaus ictsoc de
;; Released under the GNU General Public License version 3
;; see: http://www.gnu.org/licenses/gpl-3.0.html
;; Definition of `special-mode' copied from Emacs23's simple.el to be
;; provide a testing environment for Emacs22.
;;;; Comments:
;; Interactive testing for Org mode.
@ -31,7 +35,7 @@
(or load-file-name buffer-file-name)))))
(let ((org-lisp-dir (expand-file-name
(concat org-test-dir "../lisp"))))
(unless (member 'features "org")
(unless (featurep 'org)
(setq load-path (cons org-lisp-dir load-path))
(org-babel-do-load-languages
'org-babel-load-languages '((sh . t)))))
@ -41,6 +45,25 @@
(expand-file-name "jump" org-test-dir)
load-path))))
(require 'cl)
(when (= emacs-major-version 22)
(defvar special-mode-map
(let ((map (make-sparse-keymap)))
(suppress-keymap map)
(define-key map "q" 'quit-window)
(define-key map " " 'scroll-up)
(define-key map "\C-?" 'scroll-down)
(define-key map "?" 'describe-mode)
(define-key map "h" 'describe-mode)
(define-key map ">" 'end-of-buffer)
(define-key map "<" 'beginning-of-buffer)
(define-key map "g" 'revert-buffer)
(define-key map "z" 'kill-this-buffer)
map))
(put 'special-mode 'mode-class 'special)
(define-derived-mode special-mode nil "Special"
"Parent major mode from which special major modes should inherit."
(setq buffer-read-only t)))
(require 'ert)
(require 'ert-x)
(when (file-exists-p
@ -138,6 +161,23 @@ files."
(re-search-forward (regexp-quote ,marker))
,@body))
(defmacro org-test-with-temp-text (text &rest body)
"Run body in a temporary buffer with Org-mode as the active
mode holding TEXT. If the string \"<point>\" appears in TEXT
then remove it and place the point there before running BODY."
(declare (indent 1))
`(with-temp-buffer
(org-mode)
,(let ((point (string-match (regexp-quote "<point>") text)))
(if point
`(progn
(insert `(replace-match "" nil nil text))
(goto-char ,(match-beginning 0)))
`(progn
(insert ,text)
(goto-char (point-min)))))
,@body))
;;; Navigation Functions
(when (featurep 'jump)