diff --git a/contrib/lisp/org-e-html.el b/contrib/lisp/org-e-html.el
index 1c06005f9..4e9d39828 100644
--- a/contrib/lisp/org-e-html.el
+++ b/contrib/lisp/org-e-html.el
@@ -2835,10 +2835,9 @@ contextual information."
(org-export-solidify-link-text label)))))))
;; Remove last blank line.
(setq contents (substring contents 0 -1))
- ;; FIXME: splice
- (format "
"
+ (format ""
table-attributes
- (or caption "")
+ (if (not caption) "" (format "%s" caption))
(funcall table-column-specs table info)
contents)))))
diff --git a/contrib/lisp/org-e-odt.el b/contrib/lisp/org-e-odt.el
index d4c38ed98..0f9e2d487 100644
--- a/contrib/lisp/org-e-odt.el
+++ b/contrib/lisp/org-e-odt.el
@@ -6,7 +6,7 @@
;; Keywords: outlines, hypermedia, calendar, wp
;; Homepage: http://orgmode.org
-;; This file is part of GNU Emacs.
+;; This file is not part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
diff --git a/contrib/lisp/org-e-publish.el b/contrib/lisp/org-e-publish.el
index 8eb8a7e44..c4c0f178c 100644
--- a/contrib/lisp/org-e-publish.el
+++ b/contrib/lisp/org-e-publish.el
@@ -5,7 +5,7 @@
;; Maintainer: Carsten Dominik
;; Keywords: hypermedia, outlines, wp
-;; This file is part of GNU Emacs.
+;; This file is not part of GNU Emacs.
;;
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
diff --git a/contrib/lisp/org-e-texinfo.el b/contrib/lisp/org-e-texinfo.el
index dcef6ad11..da407584f 100644
--- a/contrib/lisp/org-e-texinfo.el
+++ b/contrib/lisp/org-e-texinfo.el
@@ -1,8 +1,11 @@
;;; org-e-texinfo.el --- Texinfo Back-End For Org Export Engine
+;; Copyright (C) 2012 Jonathan Leech-Pepin
;; Author: Jonathan Leech-Pepin
;; Keywords: outlines, hypermedia, calendar, wp
-
+;;
+;; This file is not part of GNU Emacs.
+;;
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
@@ -36,7 +39,7 @@
;; To include inline code snippets (for example for generating @kbd{}
;; and @key{} commands), the following export-snippet keys are
;; accepted:
-;;
+;;
;; info
;; e-info
;; e-texinfo
@@ -49,8 +52,7 @@
;; '("e-texinfo" . "e-texinfo"))
;; (add-to-list 'org-export-snippet-translation-alist
;; '("info" . "e-texinfo"))
-;;
-
+;;
;;; Code:
@@ -140,7 +142,6 @@ and title information beyond the initial variable.")
"Alist between filters keywords and back-end specific filters.
See `org-export-filters-alist' for more information")
-
;;; Internal Variables
@@ -155,8 +156,7 @@ and title information beyond the initial variable.")
:tag "Org Export Texinfo"
:group 'org-export)
-
-;;;; Preamble
+;;; Preamble
(defcustom org-e-texinfo-filename nil
"Default filename for texinfo output."
@@ -208,8 +208,7 @@ a format string in which the section title will be added."
(string :tag "unnumbered"))
(function :tag "Hook computing sectioning"))))))
-
-;;;; Headline
+;;; Headline
(defcustom org-e-texinfo-format-headline-function nil
"Function to format headline text.
@@ -240,11 +239,11 @@ order to reproduce the default set-up:
:type 'function)
-;;;; Footnotes
+;;; Footnotes
;;
;; Footnotes are inserted directly
-;;;; Timestamps
+;;; Timestamps
(defcustom org-e-texinfo-active-timestamp-format "@emph{%s}"
"A printf format string to be applied to active timestamps."
@@ -261,15 +260,14 @@ order to reproduce the default set-up:
:group 'org-export-e-texinfo
:type 'string)
-;;;; Links
+;;; Links
(defcustom org-e-texinfo-link-with-unknown-path-format "@indicateurl{%s}"
"Format string for links with unknown path type."
:group 'org-export-e-texinfo
:type 'string)
-
-;;;; Tables
+;;; Tables
(defcustom org-e-texinfo-tables-verbatim nil
"When non-nil, tables are exported verbatim."
@@ -290,13 +288,13 @@ When nil, no transformation is made."
(defcustom org-e-texinfo-def-table-markup "@samp"
"Default setting for @table environments.")
-;;;; Text markup
+;;; Text markup
(defcustom org-e-texinfo-text-markup-alist '((bold . "@strong{%s}")
- (code . code)
- (italic . "@emph{%s}")
- (verbatim . verb)
- (comment . "@c %s"))
+ (code . code)
+ (italic . "@emph{%s}")
+ (verbatim . verb)
+ (comment . "@c %s"))
"Alist of Texinfo expressions to convert text markup.
The key must be a symbol among `bold', `italic' and `comment'.
@@ -314,8 +312,7 @@ returned as-is."
:type 'alist
:options '(bold code italic verbatim comment))
-
-;;;; Drawers
+;;; Drawers
(defcustom org-e-texinfo-format-drawer-function nil
"Function called to format a drawer in Texinfo code.
@@ -335,8 +332,7 @@ in order to mimic default behaviour:
:group 'org-export-e-texinfo
:type 'function)
-
-;;;; Inlinetasks
+;;; Inlinetasks
(defcustom org-e-texinfo-format-inlinetask-function nil
"Function called to format an inlinetask in Texinfo code.
@@ -372,12 +368,11 @@ in order to mimic default behaviour:
:group 'org-export-e-texinfo
:type 'function)
-
-;;;; Src blocks
+;;; Src blocks
;;
;; Src Blocks are example blocks, except for LISP
-;;;; Plain text
+;;; Plain text
(defcustom org-e-texinfo-quotes
'(("quotes"
@@ -407,8 +402,7 @@ string defines the replacement string for this quote."
(string :tag "Regexp for char before")
(string :tag "Replacement quote "))))
-
-;;;; Compilation
+;;; Compilation
(defcustom org-e-texinfo-info-process
'("makeinfo %f")
@@ -504,7 +498,7 @@ See `org-e-texinfo-text-markup-alist' for details."
;; Else use format string.
(t (format fmt text)))))
-;;;; Menu creation
+;;; Menu creation
(defun org-e-texinfo--build-menu (tree level info &optional detailed)
"Create the @menu/@end menu information from TREE at headline
@@ -633,15 +627,13 @@ of the longest menu entry."
(concat "* " title ":: "
(make-string
(- (+ 3 max-length) length)
- ?\s)
+ ?\s)
(if desc
(concat desc)))
(concat "\n" title "\n"))))
text-menu))
output))
-
-
;;; Template
(defun org-e-texinfo-template (contents info)
@@ -681,7 +673,7 @@ holding export options."
(concat "\n"
texinfo-header
"\n"))
-
+
"@c %**end of header\n"
"@finalout\n"
"\n\n"
@@ -728,7 +720,7 @@ holding export options."
"@top " title " Manual\n"
"@insertcopying\n"
"@end ifnottex\n\n"
-
+
;; Menu
"@menu\n"
(org-e-texinfo-make-menu info 'main)
@@ -741,7 +733,7 @@ holding export options."
"@end detailmenu\n"
"@end menu\n"
"\n\n"
-
+
;; Document's body.
contents
"\n"
@@ -759,12 +751,11 @@ holding export options."
;;; Transcode Functions
-;;;; Babel Call
+;;; Babel Call
;;
;; Babel Calls are ignored.
-
-;;;; Bold
+;;; Bold
(defun org-e-texinfo-bold (bold contents info)
"Transcode BOLD from Org to Texinfo.
@@ -772,13 +763,11 @@ CONTENTS is the text with bold markup. INFO is a plist holding
contextual information."
(org-e-texinfo--text-markup contents 'bold))
-
-;;;; Center Block
+;;; Center Block
;;
;; Center blocks are ignored
-
-;;;; Clock
+;;; Clock
(defun org-e-texinfo-clock (clock contents info)
"Transcode a CLOCK element from Org to Texinfo.
@@ -793,8 +782,7 @@ information."
(and time (format " (%s)" time)))))
"@*"))
-
-;;;; Code
+;;; Code
(defun org-e-texinfo-code (code contents info)
"Transcode a CODE object from Org to Texinfo.
@@ -802,7 +790,7 @@ CONTENTS is nil. INFO is a plist used as a communication
channel."
(org-e-texinfo--text-markup (org-element-property :value code) 'code))
-;;;; Comment
+;;; Comment
(defun org-e-texinfo-comment (comment contents info)
"Transcode a COMMENT object from Org to Texinfo.
@@ -810,7 +798,7 @@ CONTENTS is the text in the comment. INFO is a plist holding
contextual information."
(org-e-texinfo--text-markup (org-element-property :value comment) 'comment))
-;;;; Comment Block
+;;; Comment Block
(defun org-e-texinfo-comment-block (comment-block contents info)
"Transcode a COMMENT-BLOCK object from Org to Texinfo.
@@ -818,7 +806,7 @@ CONTENTS is the text within the block. INFO is a plist holding
contextual information."
(format "@ignore\n%s@end ignore" (org-element-property :value comment-block)))
-;;;; Drawer
+;;; Drawer
(defun org-e-texinfo-drawer (drawer contents info)
"Transcode a DRAWER element from Org to Texinfo.
@@ -833,8 +821,7 @@ holding contextual information."
contents)))
output))
-
-;;;; Dynamic Block
+;;; Dynamic Block
(defun org-e-texinfo-dynamic-block (dynamic-block contents info)
"Transcode a DYNAMIC-BLOCK element from Org to Texinfo.
@@ -842,8 +829,7 @@ CONTENTS holds the contents of the block. INFO is a plist
holding contextual information. See `org-export-data'."
contents)
-
-;;;; Entity
+;;; Entity
(defun org-e-texinfo-entity (entity contents info)
"Transcode an ENTITY object from Org to Texinfo.
@@ -852,8 +838,7 @@ contextual information."
(let ((ent (org-element-property :latex entity)))
(if (org-element-property :latex-math-p entity) (format "@math{%s}" ent) ent)))
-
-;;;; Example Block
+;;; Example Block
(defun org-e-texinfo-example-block (example-block contents info)
"Transcode an EXAMPLE-BLOCK element from Org to Texinfo.
@@ -862,8 +847,7 @@ information."
(format "@verbatim\n%s@end verbatim"
(org-export-format-code-default example-block info)))
-
-;;;; Export Block
+;;; Export Block
(defun org-e-texinfo-export-block (export-block contents info)
"Transcode a EXPORT-BLOCK element from Org to Texinfo.
@@ -871,8 +855,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(when (string= (org-element-property :type export-block) "TEXINFO")
(org-remove-indentation (org-element-property :value export-block))))
-
-;;;; Export Snippet
+;;; Export Snippet
(defun org-e-texinfo-export-snippet (export-snippet contents info)
"Transcode a EXPORT-SNIPPET object from Org to Texinfo.
@@ -880,8 +863,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(when (eq (org-export-snippet-backend export-snippet) 'e-texinfo)
(org-element-property :value export-snippet)))
-
-;;;; Fixed Width
+;;; Fixed Width
(defun org-e-texinfo-fixed-width (fixed-width contents info)
"Transcode a FIXED-WIDTH element from Org to Texinfo.
@@ -890,13 +872,11 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(org-remove-indentation
(org-element-property :value fixed-width))))
-
-;;;; Footnote Definition
+;;; Footnote Definition
;;
;; Footnote Definitions are ignored.
-
-;;;; Footnote Reference
+;;; Footnote Reference
;;
(defun org-e-texinfo-footnote-reference (footnote contents info)
@@ -908,7 +888,7 @@ plist holding contextual information."
(format "@footnote{%s}"
(org-trim (org-export-data def info)))))
-;;;; Headline
+;;; Headline
(defun org-e-texinfo-headline (headline contents info)
"Transcode an HEADLINE element from Org to Texinfo.
@@ -1016,7 +996,7 @@ holding contextual information."
(index
(format
section-fmt full-text
- (concat pre-blanks contents "\n"
+ (concat pre-blanks contents "\n"
(if (member index '("cp" "fn" "ky" "pg" "tp" "vr"))
(concat "@printindex " index)))))
;; Case 4: This is a deep sub-tree: export it as a list item.
@@ -1068,17 +1048,15 @@ holding contextual information."
(format (replace-regexp-in-string "%]" "%%]" section-fmt) full-text
(concat pre-blanks contents))))))))
-
-;;;; Horizontal Rule
+;;; Horizontal Rule
;;
;; Horizontal rules are ignored
-;;;; Inline Babel Call
+;;; Inline Babel Call
;;
;; Inline Babel Calls are ignored.
-
-;;;; Inline Src Block
+;;; Inline Src Block
(defun org-e-texinfo-inline-src-block (inline-src-block contents info)
"Transcode an INLINE-SRC-BLOCK element from Org to Texinfo.
@@ -1088,8 +1066,7 @@ contextual information."
(separator (org-e-texinfo--find-verb-separator code)))
(concat "@verb{" separator code separator "}")))
-
-;;;; Inlinetask
+;;; Inlinetask
(defun org-e-texinfo-inlinetask (inlinetask contents info)
"Transcode an INLINETASK element from Org to Texinfo.
@@ -1122,8 +1099,7 @@ holding contextual information."
"\n")
full-title contents)))))
-
-;;;; Italic
+;;; Italic
(defun org-e-texinfo-italic (italic contents info)
"Transcode ITALIC from Org to Texinfo.
@@ -1131,7 +1107,7 @@ CONTENTS is the text with italic markup. INFO is a plist holding
contextual information."
(org-e-texinfo--text-markup contents 'italic))
-;;;; Item
+;;; Item
(defun org-e-texinfo-item (item contents info)
"Transcode an ITEM element from Org to Texinfo.
@@ -1139,11 +1115,10 @@ CONTENTS holds the contents of the item. INFO is a plist holding
contextual information."
(let* ((tag (org-element-property :tag item))
(desc (org-export-data tag info)))
- (concat "\n@item " (if tag desc) "\n"
- (org-trim contents) "\n")))
+ (concat "\n@item " (if tag desc) "\n"
+ (org-trim contents) "\n")))
-
-;;;; Keyword
+;;; Keyword
(defun org-e-texinfo-keyword (keyword contents info)
"Transcode a KEYWORD element from Org to Texinfo.
@@ -1157,29 +1132,24 @@ CONTENTS is nil. INFO is a plist holding contextual information."
((string= key "KINDEX") (format "@kindex %s" value))
((string= key "PINDEX") (format "@pindex %s" value))
((string= key "TINDEX") (format "@tindex %s" value))
- ((string= key "VINDEX") (format "@vindex %s" value))
- )))
+ ((string= key "VINDEX") (format "@vindex %s" value)))))
-
-;;;; Latex Environment
+;;; Latex Environment
;;
;; Latex environments are ignored
-
-;;;; Latex Fragment
+;;; Latex Fragment
;;
;; Latex fragments are ignored.
-
-;;;; Line Break
+;;; Line Break
(defun org-e-texinfo-line-break (line-break contents info)
"Transcode a LINE-BREAK object from Org to Texinfo.
CONTENTS is nil. INFO is a plist holding contextual information."
"@*")
-
-;;;; Link
+;;; Link
(defun org-e-texinfo-link (link desc info)
"Transcode a LINK object from Org to Texinfo.
@@ -1204,7 +1174,7 @@ INFO is a plist holding contextual information. See
(email (if (string= type "mailto")
(let ((text (replace-regexp-in-string
"@" "@@" raw-path)))
- (concat text (if desc (concat "," desc))))))
+ (concat text (if desc (concat "," desc))))))
protocol)
(cond
;; Links pointing to an headline: Find destination and build
@@ -1251,8 +1221,7 @@ INFO is a plist holding contextual information. See
;; No path, only description. Try to do something useful.
(t (format org-e-texinfo-link-with-unknown-path-format desc)))))
-
-;;;; Macro
+;;; Macro
(defun org-e-texinfo-macro (macro contents info)
"Transcode a MACRO element from Org to Texinfo.
@@ -1260,8 +1229,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
;; Use available tools.
(org-export-expand-macro macro info))
-
-;;;; Menu
+;;; Menu
(defun org-e-texinfo-make-menu (info level)
"Create the menu for inclusion in the texifo document.
@@ -1291,8 +1259,7 @@ are generated directly."
;; Otherwise do nothing
(t))))
-
-;;;; Paragraph
+;;; Paragraph
(defun org-e-texinfo-paragraph (paragraph contents info)
"Transcode a PARAGRAPH element from Org to Texinfo.
@@ -1300,8 +1267,7 @@ CONTENTS is the contents of the paragraph, as a string. INFO is
the plist used as a communication channel."
contents)
-
-;;;; Plain List
+;;; Plain List
(defun org-e-texinfo-plain-list (plain-list contents info)
"Transcode a PLAIN-LIST element from Org to Texinfo.
@@ -1324,12 +1290,11 @@ contextual information."
(format "@%s%s\n@end %s"
(if (eq type 'descriptive)
(concat list-type " " indic)
- list-type)
+ list-type)
contents
list-type)))
-
-;;;; Plain Text
+;;; Plain Text
(defun org-e-texinfo-plain-text (text info)
"Transcode a TEXT string from Org to Texinfo.
@@ -1359,8 +1324,7 @@ contextual information."
;; Return value.
text)
-
-;;;; Planning
+;;; Planning
(defun org-e-texinfo-planning (planning contents info)
"Transcode a PLANNING element from Org to Texinfo.
@@ -1393,8 +1357,7 @@ information."
" ")
"@*"))
-
-;;;; Property Drawer
+;;; Property Drawer
(defun org-e-texinfo-property-drawer (property-drawer contents info)
"Transcode a PROPERTY-DRAWER element from Org to Texinfo.
@@ -1404,24 +1367,19 @@ information."
;; lines nonetheless.
"")
-
-;;;; Quote Block
+;;; Quote Block
(defun org-e-texinfo-quote-block (quote-block contents info)
"Transcode a QUOTE-BLOCK element from Org to Texinfo.
CONTENTS holds the contents of the block. INFO is a plist
holding contextual information."
-
(let* ((title (org-element-property :name quote-block))
(start-quote (concat "@quotation"
-
(if title
- (format " %s" title)))))
-
+ (format " %s" title)))))
(format "%s\n%s@end quotation" start-quote contents)))
-
-;;;; Quote Section
+;;; Quote Section
(defun org-e-texinfo-quote-section (quote-section contents info)
"Transcode a QUOTE-SECTION element from Org to Texinfo.
@@ -1430,8 +1388,7 @@ CONTENTS is nil. INFO is a plist holding contextual information."
(org-element-property :value quote-section))))
(when value (format "@verbatim\n%s@end verbatim" value))))
-
-;;;; Radio Target
+;;; Radio Target
(defun org-e-texinfo-radio-target (radio-target text info)
"Transcode a RADIO-TARGET object from Org to Texinfo.
@@ -1442,8 +1399,7 @@ contextual information."
(org-element-property :value radio-target))
text))
-
-;;;; Section
+;;; Section
(defun org-e-texinfo-section (section contents info)
"Transcode a SECTION element from Org to Texinfo.
@@ -1451,12 +1407,11 @@ CONTENTS holds the contents of the section. INFO is a plist
holding contextual information."
contents)
-
-;;;; Special Block
+;;; Special Block
;;
;; Are ignored at the moment
-;;;; Src Block
+;;; Src Block
(defun org-e-texinfo-src-block (src-block contents info)
"Transcode a SRC-BLOCK element from Org to Texinfo.
@@ -1474,21 +1429,18 @@ contextual information."
(format "@example\n%s\n@end example"
(org-export-format-code-default src-block info))))))
-
-;;;; Statistics Cookie
+;;; Statistics Cookie
(defun org-e-texinfo-statistics-cookie (statistics-cookie contents info)
"Transcode a STATISTICS-COOKIE object from Org to Texinfo.
CONTENTS is nil. INFO is a plist holding contextual information."
(org-element-property :value statistics-cookie))
-
-;;;; Strike-Through
+;;; Strike-Through
;;
;; Strikethrough is ignored
-
-;;;; Subscript
+;;; Subscript
(defun org-e-texinfo-subscript (subscript contents info)
"Transcode a SUBSCRIPT object from Org to Texinfo.
@@ -1496,8 +1448,7 @@ CONTENTS is the contents of the object. INFO is a plist holding
contextual information."
(format "@math{_%s}" contents))
-
-;;;; Superscript
+;;; Superscript
(defun org-e-texinfo-superscript (superscript contents info)
"Transcode a SUPERSCRIPT object from Org to Texinfo.
@@ -1505,8 +1456,7 @@ CONTENTS is the contents of the object. INFO is a plist holding
contextual information."
(format "@math{^%s}" contents))
-
-;;;; Table
+;;; Table
;;
;; `org-e-texinfo-table' is the entry point for table transcoding. It
;; takes care of tables with a "verbatim" attribute. Otherwise, it
@@ -1552,19 +1502,18 @@ a communication channel."
cells counts)
(loop for row in collected do
(push (mapcar (lambda (ref)
- (let* ((start (org-element-property :contents-begin ref))
- (end (org-element-property :contents-end ref))
- (length (- end start)))
- length)) row) cells))
+ (let* ((start (org-element-property :contents-begin ref))
+ (end (org-element-property :contents-end ref))
+ (length (- end start)))
+ length)) row) cells))
(setq cells (remove-if #'null cells))
(push (loop for count from 0 to (- number-cells 1) collect
- (loop for item in cells collect
- (nth count item))) counts)
+ (loop for item in cells collect
+ (nth count item))) counts)
(mapconcat '(lambda (size)
(make-string size ?a)) (mapcar (lambda (ref)
- (apply 'max `,@ref)) (car counts))
- "} {")
- ))
+ (apply 'max `,@ref)) (car counts))
+ "} {")))
(defun org-e-texinfo-table--org-table (table contents info)
"Return appropriate Texinfo code for an Org table.
@@ -1597,8 +1546,7 @@ This function assumes TABLE has `org' as its `:type' attribute."
Rather than return an invalid table, nothing is returned."
'nil)
-
-;;;; Table Cell
+;;; Table Cell
(defun org-e-texinfo-table-cell (table-cell contents info)
"Transcode a TABLE-CELL element from Org to Texinfo.
@@ -1615,8 +1563,7 @@ a communication channel."
contents)
(when (org-export-get-next-element table-cell info) "\n@tab ")))
-
-;;;; Table Row
+;;; Table Row
(defun org-e-texinfo-table-row (table-row contents info)
"Transcode a TABLE-ROW element from Org to Texinfo.
@@ -1624,11 +1571,10 @@ CONTENTS is the contents of the row. INFO is a plist used as
a communication channel."
;; Rules are ignored since table separators are deduced from
;; borders of the current row.
- (when (eq (org-element-property :type table-row) 'standard)
+ (when (eq (org-element-property :type table-row) 'standard)
(concat "@item " contents "\n")))
-
-;;;; Target
+;;; Target
(defun org-e-texinfo-target (target contents info)
"Transcode a TARGET object from Org to Texinfo.
@@ -1637,8 +1583,7 @@ information."
(format "@anchor{%s}"
(org-export-solidify-link-text (org-element-property :value target))))
-
-;;;; Timestamp
+;;; Timestamp
(defun org-e-texinfo-timestamp (timestamp contents info)
"Transcode a TIMESTAMP object from Org to Texinfo.
@@ -1652,13 +1597,11 @@ information."
(format org-e-texinfo-inactive-timestamp-format value))
(t (format org-e-texinfo-diary-timestamp-format value)))))
-
-;;;; Underline
+;;; Underline
;;
;; Underline is ignored
-
-;;;; Verbatim
+;;; Verbatim
(defun org-e-texinfo-verbatim (verbatim contents info)
"Transcode a VERBATIM object from Org to Texinfo.
@@ -1666,8 +1609,7 @@ CONTENTS is nil. INFO is a plist used as a communication
channel."
(org-e-texinfo--text-markup (org-element-property :value verbatim) 'verbatim))
-
-;;;; Verse Block
+;;; Verse Block
(defun org-e-texinfo-verse-block (verse-block contents info)
"Transcode a VERSE-BLOCK element from Org to Texinfo.
@@ -1688,7 +1630,6 @@ contextual information."
(setq contents (replace-match new-str nil t contents))))
(format "\\begin{verse}\n%s\\end{verse}" contents)))
-
;;; Interactive functions
@@ -1843,6 +1784,5 @@ none."
(setq errors (concat errors " [unexpected error]")))
(and (org-string-nw-p errors) (org-trim errors)))))))
-
(provide 'org-e-texinfo)
;;; org-e-texinfo.el ends here
diff --git a/contrib/lisp/org-export.el b/contrib/lisp/org-export.el
index c5cbaaaea..24dc35bf5 100644
--- a/contrib/lisp/org-export.el
+++ b/contrib/lisp/org-export.el
@@ -138,6 +138,7 @@
(:with-entities nil "e" org-export-with-entities)
(:with-fixed-width nil ":" org-export-with-fixed-width)
(:with-footnotes nil "f" org-export-with-footnotes)
+ (:with-inlinetasks nil "inline" org-export-with-inlinetasks)
(:with-plannings nil "p" org-export-with-planning)
(:with-priority nil "pri" org-export-with-priority)
(:with-special-strings nil "-" org-export-with-special-strings)
@@ -405,9 +406,7 @@ e.g. \"f:nil\"."
(defcustom org-export-headline-levels 3
"The last level which is still exported as a headline.
-Inferior levels will produce itemize lists when exported. Note
-that a numeric prefix argument to an exporter function overrides
-this setting.
+Inferior levels will produce itemize lists when exported.
This option can also be set with the #+OPTIONS line, e.g. \"H:2\"."
:group 'org-export-general
@@ -444,6 +443,13 @@ e.g. \"e:nil\"."
:group 'org-export-general
:type 'boolean)
+(defcustom org-export-with-inlinetasks t
+ "Non-nil means inlinetasks should be exported.
+This option can also be set with the #+OPTIONS line,
+e.g. \"inline:nil\"."
+ :group 'org-export-general
+ :type 'boolean)
+
(defcustom org-export-with-planning nil
"Non-nil means include planning info in export.
This option can also be set with the #+OPTIONS: line,
@@ -453,9 +459,6 @@ e.g. \"p:t\"."
(defcustom org-export-with-priority nil
"Non-nil means include priority cookies in export.
-
-When nil, remove priority cookies for export.
-
This option can also be set with the #+OPTIONS line,
e.g. \"pri:t\"."
:group 'org-export-general
@@ -1814,6 +1817,8 @@ tag."
(and (memq with-tasks '(todo done))
(not (eq todo-type with-tasks)))
(and (consp with-tasks) (not (member todo with-tasks))))))))
+ ;; Check inlinetask.
+ (inlinetask (not (plist-get options :with-inlinetasks)))
;; Check timestamp.
(timestamp
(case (plist-get options :with-timestamps)
diff --git a/contrib/lisp/org-learn.el b/contrib/lisp/org-learn.el
index 1e08ea34c..0d5752b19 100644
--- a/contrib/lisp/org-learn.el
+++ b/contrib/lisp/org-learn.el
@@ -7,7 +7,7 @@
;; Homepage: http://orgmode.org
;; Version: 6.32trans
;;
-;; This file is part of GNU Emacs.
+;; This file is not part of GNU Emacs.
;;
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
diff --git a/contrib/lisp/org-md.el b/contrib/lisp/org-md.el
index 2fb417288..4579ca31e 100644
--- a/contrib/lisp/org-md.el
+++ b/contrib/lisp/org-md.el
@@ -334,7 +334,7 @@ a communication channel."
(let ((first-object (car (org-element-contents paragraph))))
;; If paragraph starts with a #, protect it.
(if (and (stringp first-object) (string-match "\\`#" first-object))
- (replace-match "\\#" nil t first-object)
+ (replace-regexp-in-string "\\`#" "\\#" contents nil t)
contents)))
diff --git a/contrib/lisp/org-track.el b/contrib/lisp/org-track.el
index 516868045..1d12862dd 100644
--- a/contrib/lisp/org-track.el
+++ b/contrib/lisp/org-track.el
@@ -14,7 +14,7 @@
;; Released under the GNU General Public License version 3
;; see: http://www.gnu.org/licenses/gpl-3.0.html
;;
-;; This file is part of GNU Emacs.
+;; This file is not part of GNU Emacs.
;;
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
diff --git a/contrib/lisp/org-wikinodes.el b/contrib/lisp/org-wikinodes.el
index 87cc174da..72af6eb6f 100644
--- a/contrib/lisp/org-wikinodes.el
+++ b/contrib/lisp/org-wikinodes.el
@@ -7,7 +7,7 @@
;; Homepage: http://orgmode.org
;; Version: 7.01trans
;;
-;; This file is part of GNU Emacs.
+;; This file is not part of GNU Emacs.
;;
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
diff --git a/doc/org.texi b/doc/org.texi
index 3fdb4ac6b..1d30a0614 100644
--- a/doc/org.texi
+++ b/doc/org.texi
@@ -1775,19 +1775,16 @@ state of the checkbox. In any case, verify bullets and indentation
consistency in the whole list.
@kindex C-c -
@vindex org-plain-list-ordered-item-terminator
-@vindex org-list-automatic-rules
@item C-c -
Cycle the entire list level through the different itemize/enumerate bullets
(@samp{-}, @samp{+}, @samp{*}, @samp{1.}, @samp{1)}) or a subset of them,
depending on @code{org-plain-list-ordered-item-terminator}, the type of list,
-and its position@footnote{See @code{bullet} rule in
-@code{org-list-automatic-rules} for more information.}. With a numeric
-prefix argument N, select the Nth bullet from this list. If there is an
-active region when calling this, selected text will be changed into an item.
-With a prefix argument, all lines will be converted to list items. If the
-first line already was a list item, any item marker will be removed from the
-list. Finally, even without an active region, a normal line will be
-converted into a list item.
+and its indentation. With a numeric prefix argument N, select the Nth bullet
+from this list. If there is an active region when calling this, selected
+text will be changed into an item. With a prefix argument, all lines will be
+converted to list items. If the first line already was a list item, any item
+marker will be removed from the list. Finally, even without an active
+region, a normal line will be converted into a list item.
@kindex C-c *
@item C-c *
Turn a plain list item into a headline (so that it becomes a subheading at
diff --git a/lisp/ob-ref.el b/lisp/ob-ref.el
index d2235898e..79861f1b7 100644
--- a/lisp/ob-ref.el
+++ b/lisp/ob-ref.el
@@ -240,8 +240,8 @@ to \"0:-1\"."
(funcall wrap (string-to-number (match-string 2 portion)))
(funcall wrap (string-to-number (match-string 3 portion))))
(list (funcall wrap 0) (funcall wrap -1)))))
- (list (nth (funcall wrap (string-to-number portion)) lis)))))))
- lis)
+ (list (nth (funcall wrap (string-to-number portion)) lis))))))
+ lis))
(defun org-babel-ref-split-args (arg-string)
"Split ARG-STRING into top-level arguments of balanced parenthesis."
diff --git a/lisp/org-agenda.el b/lisp/org-agenda.el
index 7db4e9dd2..b4d6d655d 100644
--- a/lisp/org-agenda.el
+++ b/lisp/org-agenda.el
@@ -886,7 +886,7 @@ you want to use two-columns display (see `org-agenda-menu-two-columns')."
:version "24.1"
:type 'boolean)
-(make-obsolete-variable 'org-agenda-menu-two-column 'org-agenda-menu-two-columns "24.2")
+(make-obsolete-variable 'org-agenda-menu-two-column 'org-agenda-menu-two-columns "24.3")
(defcustom org-agenda-menu-two-columns nil
"Non-nil means, use two columns to show custom commands in the dispatcher.
@@ -5718,8 +5718,7 @@ FRACTION is what fraction of the head-warning time has passed."
((= d1 d0)
(concat "<" start-time ">"))
((= d2 d0)
- (concat "<" end-time ">"))
- (t nil))
+ (concat "<" end-time ">")))
remove-re))))
(org-add-props txt props
'org-marker marker 'org-hd-marker hdmarker
@@ -6178,8 +6177,7 @@ could bind the variable in the options section of a custom command.")
(let ((pa (or (get-text-property 1 'priority a) 0))
(pb (or (get-text-property 1 'priority b) 0)))
(cond ((> pa pb) +1)
- ((< pa pb) -1)
- (t nil))))
+ ((< pa pb) -1))))
(defsubst org-cmp-effort (a b)
"Compare the effort values of string A and B."
@@ -6187,16 +6185,14 @@ could bind the variable in the options section of a custom command.")
(ea (or (get-text-property 1 'effort-minutes a) def))
(eb (or (get-text-property 1 'effort-minutes b) def)))
(cond ((> ea eb) +1)
- ((< ea eb) -1)
- (t nil))))
+ ((< ea eb) -1))))
(defsubst org-cmp-category (a b)
"Compare the string values of categories of strings A and B."
(let ((ca (or (get-text-property 1 'org-category a) ""))
(cb (or (get-text-property 1 'org-category b) "")))
(cond ((string-lessp ca cb) -1)
- ((string-lessp cb ca) +1)
- (t nil))))
+ ((string-lessp cb ca) +1))))
(defsubst org-cmp-todo-state (a b)
"Compare the todo states of strings A and B."
@@ -6218,8 +6214,7 @@ could bind the variable in the options section of a custom command.")
(cond ((and donepa (not donepb)) -1)
((and (not donepa) donepb) +1)
((< la lb) -1)
- ((< lb la) +1)
- (t nil))))
+ ((< lb la) +1))))
(defsubst org-cmp-alpha (a b)
"Compare the headlines, alphabetically."
@@ -6240,8 +6235,7 @@ could bind the variable in the options section of a custom command.")
(cond ((not ta) +1)
((not tb) -1)
((string-lessp ta tb) -1)
- ((string-lessp tb ta) +1)
- (t nil))))
+ ((string-lessp tb ta) +1))))
(defsubst org-cmp-tag (a b)
"Compare the string values of the first tags of A and B."
@@ -6250,8 +6244,7 @@ could bind the variable in the options section of a custom command.")
(cond ((not ta) +1)
((not tb) -1)
((string-lessp ta tb) -1)
- ((string-lessp tb ta) +1)
- (t nil))))
+ ((string-lessp tb ta) +1))))
(defsubst org-cmp-time (a b)
"Compare the time-of-day values of strings A and B."
@@ -6259,16 +6252,14 @@ could bind the variable in the options section of a custom command.")
(ta (or (get-text-property 1 'time-of-day a) def))
(tb (or (get-text-property 1 'time-of-day b) def)))
(cond ((< ta tb) -1)
- ((< tb ta) +1)
- (t nil))))
+ ((< tb ta) +1))))
(defsubst org-cmp-habit-p (a b)
"Compare the todo states of strings A and B."
(let ((ha (get-text-property 1 'org-habit-p a))
(hb (get-text-property 1 'org-habit-p b)))
(cond ((and ha (not hb)) -1)
- ((and (not ha) hb) +1)
- (t nil))))
+ ((and (not ha) hb) +1))))
(defsubst org-em (x y list) (or (memq x list) (memq y list)))
diff --git a/lisp/org-capture.el b/lisp/org-capture.el
index a59d9ee5b..0c5d04072 100644
--- a/lisp/org-capture.el
+++ b/lisp/org-capture.el
@@ -368,7 +368,7 @@ The capture buffer is current and still narrowed."
"When non-nil, add a bookmark pointing at the last stored
position when capturing."
:group 'org-capture
- :version "24.2"
+ :version "24.3"
:type 'boolean)
;;; The property list for keeping information about the capture process
@@ -1081,8 +1081,8 @@ it. When it is a variable, retrieve the value. Return whatever we get."
(setq end (point))))
(goto-char beg)
(org-capture-position-for-last-stored 'table-line)
- (if (or (re-search-backward "%\\?" end t)
- (re-search-forward "%\\?" beg t))
+ (if (or (re-search-backward "%\\?" beg t)
+ (re-search-forward "%\\?" end t))
(replace-match ""))
(org-table-align)))
diff --git a/lisp/org-clock.el b/lisp/org-clock.el
index 9a31ef106..633fb2b34 100644
--- a/lisp/org-clock.el
+++ b/lisp/org-clock.el
@@ -1798,8 +1798,8 @@ will be easy to remove."
(org-move-to-column c)
(unless (eolp) (skip-chars-backward "^ \t"))
(skip-chars-backward " \t")
- (setq ov (make-overlay (1- (point)) (point-at-eol))
- tx (concat (buffer-substring (1- (point)) (point))
+ (setq ov (make-overlay (point-at-bol) (point-at-eol))
+ tx (concat (buffer-substring (point-at-bol) (point))
(make-string (+ off (max 0 (- c (current-column)))) ?.)
(org-add-props (if org-time-clocksum-use-fractional
(format fmt
diff --git a/lisp/org-datetree.el b/lisp/org-datetree.el
index b39dc4448..4ff8e7d00 100644
--- a/lisp/org-datetree.el
+++ b/lisp/org-datetree.el
@@ -41,7 +41,7 @@ so the base level will be properly adjusted.")
(defcustom org-datetree-add-timestamp nil
"When non-nil, add a time stamp when create a datetree entry."
:group 'org-capture
- :version "24.2"
+ :version "24.3"
:type '(choice
(const :tag "Do not add a time stamp" nil)
(const :tag "Add an inactive time stamp" inactive)
diff --git a/lisp/org-element.el b/lisp/org-element.el
index e5e692afb..5efa6661b 100644
--- a/lisp/org-element.el
+++ b/lisp/org-element.el
@@ -131,11 +131,12 @@
"[ \t]*\\(?:"
;; Empty lines.
"$" "\\|"
- ;; Comments, blocks (any type), keywords, Babel calls,
- ;; drawers (any type) and tables.
- "[|#]" "\\|"
- ;; Fixed width areas.
- ":\\(?:[ \t]\\|$\\)" "\\|"
+ ;; Tables (any type).
+ "\\(?:|\\|\\+-[-+]\\)" "\\|"
+ ;; Blocks (any type), Babel calls, drawers (any type),
+ ;; fixed-width areas and keywords. Note: this is only an
+ ;; indication and need some thorough check.
+ "[#:]" "\\|"
;; Horizontal rules.
"-\\{5,\\}[ \t]*$" "\\|"
;; LaTeX environments.
@@ -153,7 +154,10 @@
(concat "\\(?:[-+*]\\|\\(?:[0-9]+" alpha "\\)" term "\\)"
"\\(?:[ \t]\\|$\\)"))
"\\)\\)")
- "Regexp to separate paragraphs in an Org buffer.")
+ "Regexp to separate paragraphs in an Org buffer.
+In the case of lines starting with \"#\" and \":\", this regexp
+is not sufficient to know if point is at a paragraph ending. See
+`org-element-paragraph-parser' for more information.")
(defconst org-element-all-elements
'(center-block clock comment comment-block drawer dynamic-block example-block
@@ -342,7 +346,7 @@ still has an entry since one of its properties (`:title') does.")
;; Setter functions allow to modify elements by side effect. There is
;; `org-element-put-property', `org-element-set-contents',
;; `org-element-set-element' and `org-element-adopt-element'. Note
-;; that `org-element-set-element' and `org-element-adopt-element' are
+;; that `org-element-set-element' and `org-element-adopt-elements' are
;; higher level functions since also update `:parent' property.
(defsubst org-element-type (element)
@@ -389,38 +393,39 @@ Return modified element."
(defsubst org-element-set-element (old new)
"Replace element or object OLD with element or object NEW.
The function takes care of setting `:parent' property for NEW."
- ;; OLD can belong to the contents of PARENT or to its secondary
- ;; string.
- (let* ((parent (org-element-property :parent old))
- (sec-loc (cdr (assq (org-element-type parent)
- org-element-secondary-value-alist)))
- (sec-value (and sec-loc (org-element-property sec-loc parent)))
- (place (or (memq old sec-value) (memq old parent))))
- ;; Make sure NEW has correct `:parent' property.
- (org-element-put-property new :parent parent)
- ;; Replace OLD with NEW in PARENT.
- (setcar place new)))
+ ;; Since OLD is going to be changed into NEW by side-effect, first
+ ;; make sure that every element or object within NEW has OLD as
+ ;; parent.
+ (mapc (lambda (blob) (org-element-put-property blob :parent old))
+ (org-element-contents new))
+ ;; Transfer contents.
+ (apply 'org-element-set-contents old (org-element-contents new))
+ ;; Ensure NEW has same parent as OLD, then overwrite OLD properties
+ ;; with NEW's.
+ (org-element-put-property new :parent (org-element-property :parent old))
+ (setcar (cdr old) (nth 1 new))
+ ;; Transfer type.
+ (setcar old (car new)))
-(defsubst org-element-adopt-element (parent child &optional append)
- "Add an element to the contents of another element.
+(defsubst org-element-adopt-elements (parent &rest children)
+ "Append elements to the contents of another element.
-PARENT is an element or object. CHILD is an element, an object,
-or a string.
-
-CHILD is added at the beginning of PARENT contents, unless the
-optional argument APPEND is non-nil, in which case CHILD is added
-at the end.
+PARENT is an element or object. CHILDREN can be elements,
+objects, or a strings.
The function takes care of setting `:parent' property for CHILD.
Return parent element."
- (if (not parent) (list child)
- (let ((contents (org-element-contents parent)))
- (apply 'org-element-set-contents
- parent
- (if append (append contents (list child)) (cons child contents))))
- ;; Link the CHILD element with PARENT.
- (when (consp child) (org-element-put-property child :parent parent))
- ;; Return the parent element.
+ (if (not parent) children
+ ;; Link every child to PARENT.
+ (mapc (lambda (child)
+ (unless (stringp child)
+ (org-element-put-property child :parent parent)))
+ children)
+ ;; Add CHILDREN at the end of PARENT contents.
+ (apply 'org-element-set-contents
+ parent
+ (nconc (org-element-contents parent) children))
+ ;; Return modified PARENT element.
parent))
@@ -474,8 +479,8 @@ Assume point is at the beginning of the block."
(let ((case-fold-search t))
(if (not (save-excursion
(re-search-forward "^[ \t]*#\\+END_CENTER" limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((block-end-line (match-beginning 0)))
(let* ((keywords (org-element--collect-affiliated-keywords))
(begin (car keywords))
@@ -574,8 +579,8 @@ containing `:block-name', `:begin', `:end', `:hiddenp',
Assume point is at beginning of dynamic block."
(let ((case-fold-search t))
(if (not (save-excursion (re-search-forward org-dblock-end-re limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((block-end-line (match-beginning 0)))
(save-excursion
(let* ((name (progn (looking-at org-dblock-start-re)
@@ -979,34 +984,39 @@ string instead.
Assume point is at the beginning of the item."
(save-excursion
(beginning-of-line)
+ (looking-at org-list-full-item-re)
(let* ((begin (point))
- (bullet (org-list-get-bullet (point) struct))
- (checkbox (let ((box (org-list-get-checkbox begin struct)))
+ (bullet (org-match-string-no-properties 1))
+ (checkbox (let ((box (org-match-string-no-properties 3)))
(cond ((equal "[ ]" box) 'off)
((equal "[X]" box) 'on)
((equal "[-]" box) 'trans))))
- (counter (let ((c (org-list-get-counter begin struct)))
- (cond
- ((not c) nil)
- ((string-match "[A-Za-z]" c)
- (- (string-to-char (upcase (match-string 0 c)))
- 64))
- ((string-match "[0-9]+" c)
- (string-to-number (match-string 0 c))))))
+ (counter (let ((c (org-match-string-no-properties 2)))
+ (save-match-data
+ (cond
+ ((not c) nil)
+ ((string-match "[A-Za-z]" c)
+ (- (string-to-char (upcase (match-string 0 c)))
+ 64))
+ ((string-match "[0-9]+" c)
+ (string-to-number (match-string 0 c)))))))
(end (save-excursion (goto-char (org-list-get-item-end begin struct))
(unless (bolp) (forward-line))
(point)))
- (contents-begin (progn (looking-at org-list-full-item-re)
- (goto-char (match-end 0))
- (skip-chars-forward " \r\t\n" limit)
- ;; If first line isn't empty,
- ;; contents really start at the text
- ;; after item's meta-data.
- (if (= (point-at-bol) begin) (point)
- (point-at-bol))))
+ (contents-begin
+ (progn (goto-char
+ ;; Ignore tags in un-ordered lists: they are just
+ ;; a part of item's body.
+ (if (and (match-beginning 4)
+ (save-match-data (string-match "[.)]" bullet)))
+ (match-beginning 4)
+ (match-end 0)))
+ (skip-chars-forward " \r\t\n" limit)
+ ;; If first line isn't empty, contents really start
+ ;; at the text after item's meta-data.
+ (if (= (point-at-bol) begin) (point) (point-at-bol))))
(hidden (progn (forward-line)
- (and (not (= (point) end))
- (org-invisible-p2))))
+ (and (not (= (point) end)) (org-invisible-p2))))
(contents-end (progn (goto-char end)
(skip-chars-backward " \r\t\n")
(forward-line)
@@ -1128,8 +1138,8 @@ Assume point is at the beginning of the block."
(let ((case-fold-search t))
(if (not (save-excursion
(re-search-forward "^[ \t]*#\\+END_QUOTE" limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((block-end-line (match-beginning 0)))
(save-excursion
(let* ((keywords (org-element--collect-affiliated-keywords))
@@ -1210,8 +1220,8 @@ Assume point is at the beginning of the block."
(upcase (match-string-no-properties 1)))))
(if (not (save-excursion
(re-search-forward (concat "^[ \t]*#\\+END_" type) limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((block-end-line (match-beginning 0)))
(save-excursion
(let* ((keywords (org-element--collect-affiliated-keywords))
@@ -1359,8 +1369,6 @@ Assume point is at comment beginning."
(save-excursion
(let* ((keywords (org-element--collect-affiliated-keywords))
(begin (car keywords))
- ;; Match first line with a loose regexp since it might as
- ;; well be an ill-defined keyword.
(value (prog2 (looking-at "[ \t]*# ?")
(buffer-substring-no-properties
(match-end 0) (line-end-position))
@@ -1410,8 +1418,8 @@ Assume point is at comment block beginning."
(let ((case-fold-search t))
(if (not (save-excursion
(re-search-forward "^[ \t]*#\\+END_COMMENT" limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((contents-end (match-beginning 0)))
(save-excursion
(let* ((keywords (org-element--collect-affiliated-keywords))
@@ -1455,8 +1463,8 @@ containing `:begin', `:end', `:number-lines', `:preserve-indent',
(let ((case-fold-search t))
(if (not (save-excursion
(re-search-forward "^[ \t]*#\\+END_EXAMPLE" limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((contents-end (match-beginning 0)))
(save-excursion
(let* ((switches
@@ -1534,8 +1542,8 @@ Assume point is at export-block beginning."
(upcase (org-match-string-no-properties 1)))))
(if (not (save-excursion
(re-search-forward (concat "^[ \t]*#\\+END_" type) limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((contents-end (match-beginning 0)))
(save-excursion
(let* ((keywords (org-element--collect-affiliated-keywords))
@@ -1732,12 +1740,45 @@ Assume point is at the beginning of the paragraph."
(keywords (org-element--collect-affiliated-keywords))
(begin (car keywords))
(before-blank
- (progn (end-of-line)
- (if (re-search-forward org-element-paragraph-separate
- limit
- 'm)
- (goto-char (match-beginning 0))
- (point))))
+ (let ((case-fold-search t))
+ (end-of-line)
+ (re-search-forward org-element-paragraph-separate limit 'm)
+ (while (and (/= (point) limit)
+ (cond
+ ;; Skip non-existent or incomplete drawer.
+ ((save-excursion
+ (beginning-of-line)
+ (and (looking-at "[ \t]*:\\S-")
+ (or (not (looking-at org-drawer-regexp))
+ (not (save-excursion
+ (re-search-forward
+ "^[ \t]*:END:" limit t)))))))
+ ;; Stop at comments.
+ ((save-excursion
+ (beginning-of-line)
+ (not (looking-at "[ \t]*#\\S-"))) nil)
+ ;; Skip incomplete dynamic blocks.
+ ((save-excursion
+ (beginning-of-line)
+ (looking-at "[ \t]*#\\+BEGIN: "))
+ (not (save-excursion
+ (re-search-forward
+ "^[ \t]*\\+END:" limit t))))
+ ;; Skip incomplete blocks.
+ ((save-excursion
+ (beginning-of-line)
+ (looking-at "[ \t]*#\\+BEGIN_\\(\\S-+\\)"))
+ (not (save-excursion
+ (re-search-forward
+ (concat "^[ \t]*#\\+END_"
+ (match-string 1))
+ limit t))))
+ ;; Skip ill-formed keywords.
+ ((not (save-excursion
+ (beginning-of-line)
+ (looking-at "[ \t]*#\\+\\S-+:"))))))
+ (re-search-forward org-element-paragraph-separate limit 'm))
+ (if (eobp) (point) (goto-char (line-beginning-position)))))
(contents-end (progn (skip-chars-backward " \r\t\n" contents-begin)
(forward-line)
(point)))
@@ -1913,8 +1954,8 @@ containing `:language', `:switches', `:parameters', `:begin',
Assume point is at the beginning of the block."
(let ((case-fold-search t))
(if (not (save-excursion (re-search-forward "^[ \t]*#\\+END_SRC" limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((contents-end (match-beginning 0)))
(save-excursion
(let* ((keywords (org-element--collect-affiliated-keywords))
@@ -2118,8 +2159,8 @@ Assume point is at beginning of the block."
(let ((case-fold-search t))
(if (not (save-excursion
(re-search-forward "^[ \t]*#\\+END_VERSE" limit t)))
- ;; Incomplete block: parse it as a comment.
- (org-element-comment-parser limit)
+ ;; Incomplete block: parse it as a paragraph.
+ (org-element-paragraph-parser limit)
(let ((contents-end (match-beginning 0)))
(save-excursion
(let* ((keywords (org-element--collect-affiliated-keywords))
@@ -3325,13 +3366,16 @@ element it has to parse."
;; Keywords.
((looking-at "[ \t]*#")
(goto-char (match-end 0))
- (cond ((looking-at "\\+BEGIN_\\(\\S-+\\)")
+ (cond ((looking-at "\\(?: \\|$\\)")
+ (beginning-of-line)
+ (org-element-comment-parser limit))
+ ((looking-at "\\+BEGIN_\\(\\S-+\\)")
(beginning-of-line)
(let ((parser (assoc (upcase (match-string 1))
org-element-block-name-alist)))
(if parser (funcall (cdr parser) limit)
(org-element-special-block-parser limit))))
- ((looking-at "\\+CALL")
+ ((looking-at "\\+CALL:")
(beginning-of-line)
(org-element-babel-call-parser limit))
((looking-at "\\+BEGIN:? ")
@@ -3342,7 +3386,7 @@ element it has to parse."
(org-element-keyword-parser limit))
(t
(beginning-of-line)
- (org-element-comment-parser limit))))
+ (org-element-paragraph-parser limit))))
;; Footnote Definition.
((looking-at org-footnote-definition-re)
(org-element-footnote-definition-parser limit))
@@ -3700,7 +3744,7 @@ Elements are accumulated into ACC."
(org-element--parse-objects
cbeg (org-element-property :contents-end element) element
(org-element-restriction type))))
- (org-element-adopt-element acc element t)))
+ (org-element-adopt-elements acc element)))
;; Return result.
acc))
@@ -3727,11 +3771,11 @@ current object."
(let ((obj-beg (org-element-property :begin next-object)))
(unless (= (point) obj-beg)
(setq acc
- (org-element-adopt-element
+ (org-element-adopt-elements
acc
(replace-regexp-in-string
"\t" (make-string tab-width ? )
- (buffer-substring-no-properties (point) obj-beg)) t))))
+ (buffer-substring-no-properties (point) obj-beg))))))
;; 2. Object...
(let ((obj-end (org-element-property :end next-object))
(cont-beg (org-element-property :contents-begin next-object)))
@@ -3746,16 +3790,16 @@ current object."
(org-element--parse-objects
(point-min) (point-max) next-object
(org-element-restriction next-object))))
- (setq acc (org-element-adopt-element acc next-object t))
+ (setq acc (org-element-adopt-elements acc next-object))
(goto-char obj-end))))
;; 3. Text after last object. Untabify it.
(unless (= (point) end)
(setq acc
- (org-element-adopt-element
+ (org-element-adopt-elements
acc
(replace-regexp-in-string
"\t" (make-string tab-width ? )
- (buffer-substring-no-properties (point) end)) t)))
+ (buffer-substring-no-properties (point) end)))))
;; Result.
acc)))
diff --git a/lisp/org-exp.el b/lisp/org-exp.el
index bce73bd6b..43652fe83 100644
--- a/lisp/org-exp.el
+++ b/lisp/org-exp.el
@@ -1,4 +1,4 @@
-;;; org-exp.el --- ASCII, HTML, XOXO and iCalendar export for Org-mode
+;;; org-exp.el --- Export internals for Org-mode
;; Copyright (C) 2004-2012 Free Software Foundation, Inc.
@@ -731,8 +731,7 @@ Each element is a list of 3 items:
(setq s (nth 2 e)
v (cond
((assq s letbind) (nth 1 (assq s letbind)))
- ((boundp s) (symbol-value s))
- (t nil))
+ ((boundp s) (symbol-value s)))
rtn (cons (car e) (cons v rtn))))
rtn))
@@ -1318,11 +1317,8 @@ on this string to produce the exported version."
;; Remove or replace comments
(org-export-handle-comments (plist-get parameters :comments))
- ;; Remove #+TBLFM and #+TBLNAME lines
- (org-export-handle-table-metalines)
-
- ;; Remove #+results and #+name lines
- (org-export-res/src-name-cleanup)
+ ;; Remove #+TBLFM #+TBLNAME #+NAME #+RESULTS lines
+ (org-export-handle-metalines)
;; Run the final hook
(run-hooks 'org-export-preprocess-final-hook)
@@ -2009,9 +2005,11 @@ When it is nil, all comments will be removed."
(replace-match "")
(goto-char (max (point-min) (1- pos))))))))
-(defun org-export-handle-table-metalines ()
- "Remove table specific metalines #+TBLNAME: and #+TBLFM:."
- (let ((re "^[ \t]*#\\+tbl\\(name\\|fm\\):\\(.*\n?\\)")
+(defun org-export-handle-metalines ()
+ "Remove tables and source blocks metalines.
+This function should only be called after all block processing
+has taken place."
+ (let ((re "^[ \t]*#\\+\\(tbl\\(?:name\\|fm\\)\\|results\\(?:\\[[a-z0-9]+\\]\\)?\\|name\\):\\(.*\n?\\)")
(case-fold-search t)
pos)
(goto-char (point-min))
@@ -2024,18 +2022,6 @@ When it is nil, all comments will be removed."
(replace-match "")
(goto-char (max (point-min) (1- pos)))))))
-(defun org-export-res/src-name-cleanup ()
- "Clean up #+results and #+name lines for export.
-This function should only be called after all block processing
-has taken place."
- (interactive)
- (save-excursion
- (goto-char (point-min))
- (let ((case-fold-search t))
- (while (org-re-search-forward-unprotected
- "#\\+\\(name\\|results\\(\\[[a-z0-9]+\\]\\)?\\):" nil t)
- (delete-region (match-beginning 0) (progn (forward-line) (point)))))))
-
(defun org-export-mark-radio-links ()
"Find all matches for radio targets and turn them into internal links."
(let ((re-radio (and org-target-link-regexp
@@ -3273,8 +3259,7 @@ If yes remove the column and the special lines."
(mapcar (lambda (x)
(cond ((member x '("<" "<")) :start)
((member x '(">" ">")) :end)
- ((member x '("<>" "<>")) :startend)
- (t nil)))
+ ((member x '("<>" "<>")) :startend)))
(org-split-string x "[ \t]*|[ \t]*")))
nil)
((org-table-cookie-line-p x)
@@ -3295,8 +3280,7 @@ If yes remove the column and the special lines."
(mapcar (lambda (x)
(cond ((member x '("<" "<")) :start)
((member x '(">" ">")) :end)
- ((member x '("<>" "<>")) :startend)
- (t nil)))
+ ((member x '("<>" "<>")) :startend)))
(cdr (org-split-string x "[ \t]*|[ \t]*"))))
nil)
((org-table-cookie-line-p x)
@@ -3313,18 +3297,20 @@ If yes remove the column and the special lines."
(defun org-export-cleanup-toc-line (s)
"Remove tags and timestamps from lines going into the toc."
- (when (memq org-export-with-tags '(not-in-toc nil))
- (if (string-match (org-re " +:[[:alnum:]_@#%:]+: *$") s)
+ (if (not s)
+ "" ; Return a string when argument is nil
+ (when (memq org-export-with-tags '(not-in-toc nil))
+ (if (string-match (org-re " +:[[:alnum:]_@#%:]+: *$") s)
+ (setq s (replace-match "" t t s))))
+ (when org-export-remove-timestamps-from-toc
+ (while (string-match org-maybe-keyword-time-regexp s)
(setq s (replace-match "" t t s))))
- (when org-export-remove-timestamps-from-toc
- (while (string-match org-maybe-keyword-time-regexp s)
- (setq s (replace-match "" t t s))))
- (while (string-match org-bracket-link-regexp s)
- (setq s (replace-match (match-string (if (match-end 3) 3 1) s)
- t t s)))
- (while (string-match "\\[\\([0-9]\\|fn:[^]]*\\)\\]" s)
- (setq s (replace-match "" t t s)))
- s)
+ (while (string-match org-bracket-link-regexp s)
+ (setq s (replace-match (match-string (if (match-end 3) 3 1) s)
+ t t s)))
+ (while (string-match "\\[\\([0-9]\\|fn:[^]]*\\)\\]" s)
+ (setq s (replace-match "" t t s)))
+ s))
(defun org-get-text-property-any (pos prop &optional object)
diff --git a/lisp/org-html.el b/lisp/org-html.el
index 6c1437386..2466b5c1b 100644
--- a/lisp/org-html.el
+++ b/lisp/org-html.el
@@ -698,8 +698,7 @@ The default is an extended format of the ISO 8601 specification."
((eq (plist-get parameters :LaTeX-fragments) 'mathjax ) 'mathjax)
((eq (plist-get parameters :LaTeX-fragments) t ) 'mathjax)
((eq (plist-get parameters :LaTeX-fragments) 'imagemagick) 'imagemagick)
- ((eq (plist-get parameters :LaTeX-fragments) 'dvipng ) 'dvipng)
- (t nil))))
+ ((eq (plist-get parameters :LaTeX-fragments) 'dvipng ) 'dvipng))))
(goto-char (point-min))
(let (label l1)
(while (re-search-forward "\\\\ref{\\([^{}\n]+\\)}" nil t)
@@ -1704,7 +1703,7 @@ PUB-DIR is set, use this as the publishing directory."
;; This is a headline
(setq level (org-tr-level (- (match-end 1) (match-beginning 1)
level-offset))
- txt (match-string 2 org-line))
+ txt (or (match-string 2 org-line) ""))
(if (string-match quote-re0 txt)
(setq txt (replace-match "" t t txt)))
(if (<= level (max umax umax-toc))
@@ -2141,9 +2140,10 @@ for formatting. This is required for the DocBook exporter."
(if colgropen (setq html (cons (car html)
(cons "" (cdr html)))))
;; Since the output of HTML table formatter can also be used in
- ;; DocBook document, we want to always include the caption to make
- ;; DocBook XML file valid.
- (push (format "%s" (or caption "")) html)
+ ;; DocBook document, include empty captions for the DocBook
+ ;; export only so that it produces valid XML.
+ (when (or caption (eq org-export-current-backend 'docbook))
+ (push (format "%s" (or caption "")) html))
(when label
(setq html-table-tag (org-export-splice-attributes html-table-tag (format "id=\"%s\"" (org-solidify-link-text label)))))
(push html-table-tag html))
diff --git a/lisp/org-icalendar.el b/lisp/org-icalendar.el
index 3cac791e7..bab366fcf 100644
--- a/lisp/org-icalendar.el
+++ b/lisp/org-icalendar.el
@@ -28,8 +28,7 @@
(require 'org-exp)
-(eval-when-compile
- (require 'cl))
+(eval-when-compile (require 'cl))
(declare-function org-bbdb-anniv-export-ical "org-bbdb" nil)
@@ -288,20 +287,19 @@ file and store it under the name `org-combined-agenda-icalendar-file'."
(let ((standard-output ical-buffer))
(if combine
(and (not started) (setq started t)
- (org-start-icalendar-file org-icalendar-combined-name))
- (org-start-icalendar-file category))
- (org-print-icalendar-entries combine)
+ (org-icalendar-start-file org-icalendar-combined-name))
+ (org-icalendar-start-file category))
+ (org-icalendar-print-entries combine)
(when (or (and combine (not files)) (not combine))
(when (and combine org-icalendar-include-bbdb-anniversaries)
(require 'org-bbdb)
(org-bbdb-anniv-export-ical))
- (org-finish-icalendar-file)
+ (org-icalendar-finish-file)
(set-buffer ical-buffer)
(run-hooks 'org-before-save-iCalendar-file-hook)
(save-buffer)
(run-hooks 'org-after-save-iCalendar-file-hook)
- (and (boundp 'org-wait) (numberp org-wait) (sit-for org-wait))
- ))))
+ (and (boundp 'org-wait) (numberp org-wait) (sit-for org-wait))))))
(org-release-buffers org-agenda-new-buffers))))
(defvar org-before-save-iCalendar-file-hook nil
@@ -315,13 +313,13 @@ A good way to use this is to tell a desktop calendar application to re-read
the iCalendar file.")
(defvar org-agenda-default-appointment-duration) ; defined in org-agenda.el
-(defun org-print-icalendar-entries (&optional combine)
+(defun org-icalendar-print-entries (&optional combine)
"Print iCalendar entries for the current Org-mode file to `standard-output'.
When COMBINE is non nil, add the category to each line."
(require 'org-agenda)
(let ((re1 (concat org-ts-regexp "\\|<%%([^>\n]+>"))
(re2 (concat "--?-?\\(" org-ts-regexp "\\)"))
- (dts (org-ical-ts-to-string
+ (dts (org-icalendar-ts-to-string
(format-time-string (cdr org-time-stamp-formats) (current-time))
"DTSTART"))
hd ts ts2 state status (inc t) pos b sexp rrule
@@ -448,8 +446,8 @@ SUMMARY:%s%s%s
CATEGORIES:%s%s
END:VEVENT\n"
(concat prefix uid)
- (org-ical-ts-to-string ts "DTSTART")
- (org-ical-ts-to-string ts2 "DTEND" inc)
+ (org-icalendar-ts-to-string ts "DTSTART")
+ (org-icalendar-ts-to-string ts2 "DTEND" inc)
rrule summary
(if (and desc (string-match "\\S-" desc))
(concat "\nDESCRIPTION: " desc) "")
@@ -532,8 +530,8 @@ END:VEVENT\n"
uid (if org-icalendar-store-UID
(org-id-get-create)
(or (org-id-get) (org-id-new))))
- (and due (setq due (org-ical-ts-to-string due "DUE")))
- (and start (setq start (org-ical-ts-to-string start "DTSTART")))
+ (and due (setq due (org-icalendar-ts-to-string due "DUE")))
+ (and start (setq start (org-icalendar-ts-to-string start "DTSTART")))
(if (string-match org-bracket-link-regexp hd)
(setq hd (replace-match (if (match-end 3) (match-string 3 hd)
@@ -636,7 +634,7 @@ not used right now."
(when (string-match "[;,:]" s) (setq s (concat "\"" s "\"")))
s))
-(defun org-start-icalendar-file (name)
+(defun org-icalendar-start-file (name)
"Start an iCalendar file by inserting the header."
(let ((user user-full-name)
(name (or name "unknown"))
@@ -653,11 +651,11 @@ X-WR-TIMEZONE:%s
X-WR-CALDESC:%s
CALSCALE:GREGORIAN\n" name user timezone description))))
-(defun org-finish-icalendar-file ()
+(defun org-icalendar-finish-file ()
"Finish an iCalendar file by inserting the END statement."
(princ "END:VCALENDAR\n"))
-(defun org-ical-ts-to-string (s keyword &optional inc)
+(defun org-icalendar-ts-to-string (s keyword &optional inc)
"Take a time string S and convert it to iCalendar format.
KEYWORD is added in front, to make a complete line like DTSTART....
When INC is non-nil, increase the hour by two (if time string contains
diff --git a/lisp/org-id.el b/lisp/org-id.el
index ae112c3f7..0c7a1b52d 100644
--- a/lisp/org-id.el
+++ b/lisp/org-id.el
@@ -216,8 +216,7 @@ In any case, the ID of the entry is returned."
(setq id (org-id-new prefix))
(org-entry-put pom "ID" id)
(org-id-add-location id (buffer-file-name (buffer-base-buffer)))
- id)
- (t nil)))))
+ id)))))
;;;###autoload
(defun org-id-get-with-outline-path-completion (&optional targets)
diff --git a/lisp/org-latex.el b/lisp/org-latex.el
index 1ec5d3695..933fa56b8 100644
--- a/lisp/org-latex.el
+++ b/lisp/org-latex.el
@@ -330,7 +330,7 @@ its description and the Org's version number, as a string. Set
this option to the empty string if you don't want to include
hyperref options altogether."
:type 'string
- :version "24.2"
+ :version "24.3"
:group 'org-export-latex)
(defcustom org-export-latex-footnote-separator "\\textsuperscript{,}\\,"
@@ -649,7 +649,7 @@ and `org-export-with-tags' instead."
(defcustom org-export-latex-link-with-unknown-path-format "\\texttt{%s}"
"Format string for links with unknown path type."
:group 'org-export-latex
- :version "24.2"
+ :version "24.3"
:type 'string)
(defcustom org-export-latex-inline-image-extensions
diff --git a/lisp/org-list.el b/lisp/org-list.el
index a3ea49f5f..10f5e6ec6 100644
--- a/lisp/org-list.el
+++ b/lisp/org-list.el
@@ -236,8 +236,7 @@ Otherwise, two of them will be necessary."
:group 'org-plain-lists
:type 'boolean)
-(defcustom org-list-automatic-rules '((bullet . t)
- (checkbox . t)
+(defcustom org-list-automatic-rules '((checkbox . t)
(indent . t))
"Non-nil means apply set of rules when acting on lists.
By default, automatic actions are taken when using
@@ -247,9 +246,6 @@ By default, automatic actions are taken when using
\\[org-insert-todo-heading]. You can disable individually these
rules by setting them to nil. Valid rules are:
-bullet when non-nil, cycling bullet do not allow lists at
- column 0 to have * as a bullet and descriptions lists
- to be numbered.
checkbox when non-nil, checkbox statistics is updated each time
you either insert a new checkbox or toggle a checkbox.
indent when non-nil, indenting or outdenting list top-item
@@ -261,7 +257,6 @@ indent when non-nil, indenting or outdenting list top-item
:type '(alist :tag "Sets of rules"
:key-type
(choice
- (const :tag "Bullet" bullet)
(const :tag "Checkbox" checkbox)
(const :tag "Indent" indent))
:value-type
@@ -626,12 +621,15 @@ Assume point is at an item."
;; Return association at point.
(lambda (ind)
(looking-at org-list-full-item-re)
- (list (point)
- ind
- (match-string-no-properties 1) ; bullet
- (match-string-no-properties 2) ; counter
- (match-string-no-properties 3) ; checkbox
- (match-string-no-properties 4))))) ; description tag
+ (let ((bullet (match-string-no-properties 1)))
+ (list (point)
+ ind
+ bullet
+ (match-string-no-properties 2) ; counter
+ (match-string-no-properties 3) ; checkbox
+ ;; Description tag.
+ (and (save-match-data (string-match "[-+*]" bullet))
+ (match-string-no-properties 4)))))))
(end-before-blank
(function
;; Ensure list ends at the first blank line.
@@ -1013,8 +1011,8 @@ Possible types are `descriptive', `ordered' and `unordered'. The
type is determined by the first item of the list."
(let ((first (org-list-get-list-begin item struct prevs)))
(cond
- ((org-list-get-tag first struct) 'descriptive)
((string-match "[[:alnum:]]" (org-list-get-bullet first struct)) 'ordered)
+ ((org-list-get-tag first struct) 'descriptive)
(t 'unordered))))
(defun org-list-get-item-number (item struct prevs parents)
@@ -1258,8 +1256,15 @@ This function modifies STRUCT."
(let* ((item (progn (goto-char pos) (goto-char (org-list-get-item-begin))))
(item-end (org-list-get-item-end item struct))
(item-end-no-blank (org-list-get-item-end-before-blank item struct))
- (beforep (and (looking-at org-list-full-item-re)
- (<= pos (match-end 0))))
+ (beforep
+ (progn
+ (looking-at org-list-full-item-re)
+ ;; Do not count tag in a non-descriptive list.
+ (<= pos (if (and (match-beginning 4)
+ (save-match-data
+ (string-match "[.)]" (match-string 1))))
+ (match-beginning 4)
+ (match-end 0)))))
(split-line-p (org-get-alist-option org-M-RET-may-split-line 'item))
(blank-nb (org-list-separating-blank-lines-number
pos struct prevs))
@@ -2192,14 +2197,19 @@ item is invisible."
(org-list-struct)))
(prevs (org-list-prevs-alist struct))
;; If we're in a description list, ask for the new term.
- (desc (when (org-list-get-tag itemp struct)
+ (desc (when (eq (org-list-get-list-type itemp struct prevs)
+ 'descriptive)
(concat (read-string "Term: ") " :: "))))
(setq struct
(org-list-insert-item pos struct prevs checkbox desc))
(org-list-write-struct struct (org-list-parents-alist struct))
(when checkbox (org-update-checkbox-count-maybe))
(looking-at org-list-full-item-re)
- (goto-char (match-end 0))
+ (goto-char (if (and (match-beginning 4)
+ (save-match-data
+ (string-match "[.)]" (match-string 1))))
+ (match-beginning 4)
+ (match-end 0)))
t)))))
(defun org-list-repair ()
@@ -2228,7 +2238,6 @@ is an integer, 0 means `-', 1 means `+' etc. If WHICH is
(prevs (org-list-prevs-alist struct))
(list-beg (org-list-get-first-item (point) struct prevs))
(bullet (org-list-get-bullet list-beg struct))
- (bullet-rule-p (cdr (assq 'bullet org-list-automatic-rules)))
(alpha-p (org-list-use-alpha-bul-p list-beg struct prevs))
(case-fold-search nil)
(current (cond
@@ -2243,22 +2252,21 @@ is an integer, 0 means `-', 1 means `+' etc. If WHICH is
(bullet-list
(append '("-" "+" )
;; *-bullets are not allowed at column 0.
- (unless (and bullet-rule-p
- (looking-at "\\S-")) '("*"))
+ (unless (looking-at "\\S-") '("*"))
;; Description items cannot be numbered.
(unless (or (eq org-plain-list-ordered-item-terminator ?\))
- (and bullet-rule-p (org-at-item-description-p)))
+ (org-at-item-description-p))
'("1."))
(unless (or (eq org-plain-list-ordered-item-terminator ?.)
- (and bullet-rule-p (org-at-item-description-p)))
+ (org-at-item-description-p))
'("1)"))
(unless (or (not alpha-p)
(eq org-plain-list-ordered-item-terminator ?\))
- (and bullet-rule-p (org-at-item-description-p)))
+ (org-at-item-description-p))
'("a." "A."))
(unless (or (not alpha-p)
(eq org-plain-list-ordered-item-terminator ?.)
- (and bullet-rule-p (org-at-item-description-p)))
+ (org-at-item-description-p))
'("a)" "A)"))))
(len (length bullet-list))
(item-index (- len (length (member current bullet-list))))
@@ -2814,8 +2822,7 @@ COMPARE-FUNC to compare entries."
(sort-func (cond
((= dcst ?a) 'string<)
((= dcst ?f) compare-func)
- ((= dcst ?t) '<)
- (t nil)))
+ ((= dcst ?t) '<)))
(next-record (lambda ()
(skip-chars-forward " \r\t\n")
(beginning-of-line)))
diff --git a/lisp/org-lparse.el b/lisp/org-lparse.el
index 797e6901d..52518b357 100644
--- a/lisp/org-lparse.el
+++ b/lisp/org-lparse.el
@@ -1929,8 +1929,7 @@ See `org-xhtml-entity-format-callbacks-alist' for more information."
(cond
((string= align "l") "left")
((string= align "r") "right")
- ((string= align "c") "center")
- (t nil))))))))
+ ((string= align "c") "center"))))))))
(incf org-lparse-table-rownum)
(let ((i -1))
(org-lparse-format
diff --git a/lisp/org-mobile.el b/lisp/org-mobile.el
index e899bfd51..93ba7e418 100644
--- a/lisp/org-mobile.el
+++ b/lisp/org-mobile.el
@@ -451,8 +451,7 @@ agenda view showing the flagged items."
((eq (car x) :startgroup) "{")
((eq (car x) :endgroup) "}")
((eq (car x) :newline) nil)
- ((listp x) (car x))
- (t nil)))
+ ((listp x) (car x))))
def-tags))
(setq def-tags (delq nil def-tags))
(setq tags (org-delete-all def-tags tags))
diff --git a/lisp/org.el b/lisp/org.el
index 86ec7472d..94c2de081 100644
--- a/lisp/org.el
+++ b/lisp/org.el
@@ -1409,7 +1409,7 @@ description to use."
(defcustom org-url-hexify-p t
"When non-nil, hexify URL when creating a link."
:type 'boolean
- :version "24.2"
+ :version "24.3"
:group 'org-link-store)
(defcustom org-email-link-description-format "Email %c: %.30s"
@@ -1853,7 +1853,7 @@ For more examples, see the system specific constants
(defcustom org-doi-server-url "http://dx.doi.org/"
"The URL of the DOI server."
:type 'string
- :version "24.2"
+ :version "24.3"
:group 'org-link-follow)
(defgroup org-refile nil
@@ -2752,8 +2752,8 @@ This affects the following situations:
If you set this variable to the symbol `time', then also the following
will work:
-3. If the user gives a time, but no day. If the time is before now,
- to will be interpreted as tomorrow.
+3. If the user gives a time.
+ If the time is before now, it will be interpreted as tomorrow.
Currently none of this works for ISO week specifications.
@@ -3425,7 +3425,7 @@ imagemagick Convert the LaTeX fragments to pdf files and use imagemagick
directories relative to the processed org files paths. An absolute path
puts all preview images at the same place."
:group 'org-latex
- :version "24.2"
+ :version "24.3"
:type 'string)
(defun org-format-latex-mathml-available-p ()
@@ -3611,7 +3611,7 @@ The default use of these custom properties is to let the user
hide them with `org-toggle-custom-properties-visibility'."
:group 'org-properties
:group 'org-appearance
- :version "24.2"
+ :version "24.3"
:type '(repeat (string :tag "Property Name")))
(defcustom org-fontify-done-headline nil
@@ -4307,7 +4307,7 @@ Otherwise, these types are allowed:
(const :tag "Only scheduled timestamps" scheduled)
(const :tag "Only deadline timestamps" deadline))
:group 'org-sparse-trees
- :version "24.2")
+ :version "24.3")
(defun org-cycle-hide-archived-subtrees (state)
"Re-hide all archived subtrees after a visibility state change."
@@ -5090,8 +5090,8 @@ The following commands are available:
(org-update-radio-target-regexp)
;; Comments
(org-set-local 'comment-use-syntax nil)
- (org-set-local 'comment-start "#")
- (org-set-local 'comment-start-skip "# ?")
+ (org-set-local 'comment-start "# ")
+ (org-set-local 'comment-start-skip "#\\(?:[ \t]\\|$\\)")
(org-set-local 'comment-insert-comment-function 'org-insert-comment)
(org-set-local 'comment-region-function 'org-comment-or-uncomment-region)
(org-set-local 'uncomment-region-function 'org-comment-or-uncomment-region)
@@ -5450,7 +5450,12 @@ will be prompted for."
"Run through the buffer and add overlays to links."
(catch 'exit
(let (f)
- (if (re-search-forward org-plain-link-re limit t)
+ (if (and (re-search-forward (concat org-plain-link-re) limit t)
+ (or (not (member 'bracket org-activate-links))
+ (save-excursion
+ (save-match-data
+ (goto-char (match-beginning 0))
+ (not (looking-back "\\[\\["))))))
(progn
(org-remove-flyspell-overlays-in (match-beginning 0) (match-end 0))
(setq f (get-text-property (match-beginning 0) 'face))
@@ -5579,7 +5584,8 @@ by a #."
(if (string-equal dc1 "+title:")
'(font-lock-fontified t face org-document-title)
'(font-lock-fontified t face org-document-info))))
- ((or (member dc1 '("+begin:" "+end:" "+caption:" "+label:"
+ ((or (equal dc1 "+results")
+ (member dc1 '("+begin:" "+end:" "+caption:" "+label:"
"+orgtbl:" "+tblfm:" "+tblname:" "+results:"
"+call:" "+header:" "+headers:" "+name:"))
(and (match-end 4) (equal dc3 "+attr")))
@@ -5772,8 +5778,7 @@ by a #."
((equal org-export-with-sub-superscripts '{})
(list org-match-substring-with-braces-regexp))
(org-export-with-sub-superscripts
- (list org-match-substring-regexp))
- (t nil)))
+ (list org-match-substring-regexp))))
(re-latex
(if org-export-with-LaTeX-fragments
(mapcar (lambda (x) (nth 1 x)) latexs)))
@@ -5992,7 +5997,6 @@ needs to be inserted at a specific position in the font-lock sequence.")
org-comment-string "\\|" org-quote-string
"\\)"))
'(2 'org-special-keyword t))
- '("^[ \t]*#.*" (0 'font-lock-comment-face t))
;; Blocks and meta lines
'(org-fontify-meta-lines-and-blocks)
)))
@@ -7920,8 +7924,7 @@ the inserted text when done."
(- (match-end 1) (match-beginning 1)))
((and (bolp)
(looking-at org-outline-regexp))
- (- (match-end 0) (point) 1))
- (t nil)))
+ (- (match-end 0) (point) 1))))
(previous-level (save-excursion
(condition-case nil
(progn
@@ -8373,8 +8376,7 @@ WITH-CASE, the sorting considers case as well."
(cond
((= dcst ?a) 'string<)
((= dcst ?f) compare-func)
- ((member dcst '(?p ?t ?s ?d ?c)) '<)
- (t nil)))))
+ ((member dcst '(?p ?t ?s ?d ?c)) '<)))))
(run-hooks 'org-after-sorting-entries-or-items-hook)
(message "Sorting entries...done")))
@@ -8697,7 +8699,8 @@ call CMD."
(defun org-refresh-category-properties ()
"Refresh category text properties in the buffer."
- (let ((inhibit-read-only t)
+ (let ((case-fold-search t)
+ (inhibit-read-only t)
(def-cat (cond
((null org-category)
(if buffer-file-name
@@ -8960,8 +8963,7 @@ For file links, arg negates `org-context-in-file-links'."
(setq txt (cond
((org-at-heading-p) nil)
((org-region-active-p)
- (buffer-substring (region-beginning) (region-end)))
- (t nil)))
+ (buffer-substring (region-beginning) (region-end)))))
(when (or (null txt) (string-match "\\S-" txt))
(setq cpltxt
(concat cpltxt "::"
@@ -9783,7 +9785,8 @@ application the system uses for this file type."
(save-excursion
(when (or (org-in-regexp org-angle-link-re)
- (org-in-regexp org-plain-link-re))
+ (and (goto-char (car (org-in-regexp org-plain-link-re)))
+ (save-match-data (not (looking-back "\\[\\[")))))
(setq type (match-string 1)
path (org-link-unescape (match-string 2)))
(throw 'match t)))
@@ -9923,15 +9926,13 @@ application the system uses for this file type."
(let ((cmd `(org-link-search
,path
,(cond ((equal arg '(4)) ''occur)
- ((equal arg '(16)) ''org-occur)
- (t nil))
+ ((equal arg '(16)) ''org-occur))
,pos)))
(condition-case nil (let ((org-link-search-inhibit-query t))
(eval cmd))
(error (progn (widen) (eval cmd))))))
- (t
- (browse-url-at-point)))))))
+ (t (browse-url-at-point)))))))
(move-marker org-open-link-marker nil)
(run-hook-with-args 'org-follow-link-hook)))
@@ -10558,8 +10559,7 @@ on the system \"/user@host:\"."
(tramp-handle-file-remote-p file))
((and (boundp 'ange-ftp-name-format)
(string-match (car ange-ftp-name-format) file))
- t)
- (t nil)))
+ t)))
;;;; Refiling
@@ -11157,20 +11157,20 @@ this is used for the GOTO interface."
(defun org-find-dblock (name)
"Find the first dynamic block with name NAME in the buffer.
If not found, stay at current position and return nil."
- (let (pos)
+ (let ((case-fold-search t) pos)
(save-excursion
(goto-char (point-min))
- (setq pos (and (re-search-forward (concat "^[ \t]*#\\+BEGIN:[ \t]+" name "\\>")
- nil t)
+ (setq pos (and (re-search-forward
+ (concat "^[ \t]*#\\+\\(?:BEGIN\\|begin\\):[ \t]+" name "\\>") nil t)
(match-beginning 0))))
(if pos (goto-char pos))
pos))
(defconst org-dblock-start-re
- "^[ \t]*#\\+BEGIN:[ \t]+\\(\\S-+\\)\\([ \t]+\\(.*\\)\\)?"
+ "^[ \t]*#\\+\\(?:BEGIN\\|begin\\):[ \t]+\\(\\S-+\\)\\([ \t]+\\(.*\\)\\)?"
"Matches the start line of a dynamic block, with parameters.")
-(defconst org-dblock-end-re "^[ \t]*#\\+END\\([: \t\r\n]\\|$\\)"
+(defconst org-dblock-end-re "^[ \t]*#\\+\\(?:END\\|end\\)\\([: \t\r\n]\\|$\\)"
"Matches the end of a dynamic block.")
(defun org-create-dblock (plist)
@@ -11322,7 +11322,7 @@ This function can be used in a hook."
'("TITLE:" "AUTHOR:" "EMAIL:" "DATE:"
"DESCRIPTION:" "KEYWORDS:" "LANGUAGE:" "OPTIONS:"
"EXPORT_SELECT_TAGS:" "EXPORT_EXCLUDE_TAGS:"
- "LINK_UP:" "LINK_HOME:" "LINK:"
+ "LINK_UP:" "LINK_HOME:" "LINK:" "TODO:"
"XSLT:" "CATEGORY:" "SEQ_TODO:" "TYP_TODO:"
"PRIORITIES:" "DRAWERS:" "STARTUP:" "TAGS:"
"FILETAGS:" "ARCHIVE:"))
@@ -12537,8 +12537,7 @@ EXTRA is additional text that will be inserted into the notes buffer."
(let* ((org-log-into-drawer (org-log-into-drawer))
(drawer (cond ((stringp org-log-into-drawer)
org-log-into-drawer)
- (org-log-into-drawer "LOGBOOK")
- (t nil))))
+ (org-log-into-drawer "LOGBOOK"))))
(save-restriction
(save-excursion
(when findpos
@@ -13645,8 +13644,7 @@ If DATA is nil or the empty string, any tags will be removed."
(concat ":" (mapconcat 'identity (org-split-string data ":+") ":")
":"))
((listp data)
- (concat ":" (mapconcat 'identity data ":") ":"))
- (t nil)))
+ (concat ":" (mapconcat 'identity data ":") ":"))))
(when data
(save-excursion
(org-back-to-heading t)
@@ -13962,8 +13960,7 @@ Returns the new tags string, or nil to not change the current settings."
((not (assoc tg table))
(org-get-todo-face tg))
((member tg current) c-face)
- ((member tg inherited) i-face)
- (t nil))))
+ ((member tg inherited) i-face))))
(if (and (= cnt 0) (not ingroup)) (insert " "))
(insert "[" c "] " tg (make-string
(- fwidth 4 (length tg)) ?\ ))
@@ -15557,10 +15554,11 @@ user."
(setq ans "+0"))
(when (setq delta (org-read-date-get-relative ans (current-time) org-def))
- (setq ans (replace-match "" t t ans)
- deltan (car delta)
- deltaw (nth 1 delta)
- deltadef (nth 2 delta)))
+ (unless (save-match-data (string-match org-plain-time-of-day-regexp ans))
+ (setq ans (replace-match "" t t ans)
+ deltan (car delta)
+ deltaw (nth 1 delta)
+ deltadef (nth 2 delta))))
;; Check if there is an iso week date in there
;; If yes, store the info and postpone interpreting it until the rest
@@ -15713,7 +15711,6 @@ user."
((equal deltaw "m") (setq month (+ month deltan)))
((equal deltaw "y") (setq year (+ year deltan)))))
((and wday (not (nth 3 tl)))
- (setq futurep nil)
;; Weekday was given, but no day, so pick that day in the week
;; on or after the derived date.
(setq wday1 (nth 6 (decode-time (encode-time 0 0 0 day month year))))
@@ -16210,8 +16207,7 @@ D may be an absolute day number, or a calendar-type list (month day year)."
(stringp (cdr result))) (cdr result))
((and (consp result)
(stringp (car result))) result)
- (result entry)
- (t nil))))
+ (result entry))))
(defun org-diary-to-ical-string (frombuf)
"Get iCalendar entries from diary entries in buffer FROMBUF.
@@ -20351,21 +20347,22 @@ and :keyword."
(push (list :table-table) clist)))
(goto-char p)
- ;; New the "medium" contexts: clocktables, source blocks
- (cond ((org-in-clocktable-p)
- (push (list :clocktable
- (and (or (looking-at "#\\+BEGIN: clocktable")
- (search-backward "#+BEGIN: clocktable" nil t))
- (match-beginning 0))
- (and (re-search-forward "#\\+END:?" nil t)
- (match-end 0))) clist))
- ((org-in-src-block-p)
- (push (list :src-block
- (and (or (looking-at "#\\+BEGIN_SRC")
- (search-backward "#+BEGIN_SRC" nil t))
- (match-beginning 0))
- (and (search-forward "#+END_SRC" nil t)
- (match-beginning 0))) clist)))
+ (let ((case-fold-search t))
+ ;; New the "medium" contexts: clocktables, source blocks
+ (cond ((org-in-clocktable-p)
+ (push (list :clocktable
+ (and (or (looking-at "#\\+BEGIN: clocktable")
+ (search-backward "#+BEGIN: clocktable" nil t))
+ (match-beginning 0))
+ (and (re-search-forward "#\\+END:?" nil t)
+ (match-end 0))) clist))
+ ((org-in-src-block-p)
+ (push (list :src-block
+ (and (or (looking-at "#\\+BEGIN_SRC")
+ (search-backward "#+BEGIN_SRC" nil t))
+ (match-beginning 0))
+ (and (search-forward "#+END_SRC" nil t)
+ (match-beginning 0))) clist))))
(goto-char p)
;; Now the small context
@@ -20960,53 +20957,54 @@ hierarchy of headlines by UP levels before marking the subtree."
"Compute a fill prefix for the line at point P.
Return fill prefix, as a string, or nil if current line isn't
meant to be filled."
- (unless (and (derived-mode-p 'message-mode) (not (message-in-body-p)))
- ;; FIXME: Prevent an error for users who forgot to make autoloads?
- ;; See also `org-fill-paragraph', which has the same.
- (require 'org-element)
- ;; FIXME: This is really the job of orgstruct++-mode
- (save-excursion
- (goto-char p)
- (beginning-of-line)
- (let* ((element (org-element-at-point))
- (type (org-element-type element))
- (post-affiliated
- (progn
- (goto-char (org-element-property :begin element))
- (while (looking-at org-element--affiliated-re) (forward-line))
- (point))))
- (unless (< p post-affiliated)
- (case type
- (comment (looking-at "[ \t]*# ?") (match-string 0))
- (footnote-definition "")
- ((item plain-list)
- (make-string (org-list-item-body-column
- (org-element-property :begin element))
- ? ))
- (paragraph
- ;; Fill prefix is usually the same as the current line,
- ;; except if the paragraph is at the beginning of an item.
- (let ((parent (org-element-property :parent element)))
- (cond ((eq (org-element-type parent) 'item)
- (make-string (org-list-item-body-column
- (org-element-property :begin parent))
- ? ))
- ((looking-at "\\s-+") (match-string 0))
- (t ""))))
- ((comment-block verse-block)
- ;; Only fill contents if P is within block boundaries.
- (let* ((cbeg (save-excursion (goto-char post-affiliated)
- (forward-line)
- (point)))
- (cend (save-excursion
- (goto-char (org-element-property :end element))
- (skip-chars-backward " \r\t\n")
- (line-beginning-position))))
- (when (and (>= p cbeg) (< p cend))
- (if (looking-at "\\s-+") (match-string 0) ""))))))))))
+ (org-with-wide-buffer
+ (unless (and (derived-mode-p 'message-mode) (not (message-in-body-p)))
+ ;; FIXME: Prevent an error for users who forgot to make autoloads?
+ ;; See also `org-fill-paragraph', which has the same.
+ (require 'org-element)
+ ;; FIXME: This is really the job of orgstruct++-mode
+ (goto-char p)
+ (beginning-of-line)
+ (let* ((element (org-element-at-point))
+ (type (org-element-type element))
+ (post-affiliated
+ (progn
+ (goto-char (org-element-property :begin element))
+ (while (looking-at org-element--affiliated-re) (forward-line))
+ (point))))
+ (unless (< p post-affiliated)
+ (case type
+ (comment (looking-at "[ \t]*# ?") (match-string 0))
+ (footnote-definition "")
+ ((item plain-list)
+ (make-string (org-list-item-body-column
+ (org-element-property :begin element))
+ ? ))
+ (paragraph
+ ;; Fill prefix is usually the same as the current line,
+ ;; except if the paragraph is at the beginning of an item.
+ (let ((parent (org-element-property :parent element)))
+ (cond ((eq (org-element-type parent) 'item)
+ (make-string (org-list-item-body-column
+ (org-element-property :begin parent))
+ ? ))
+ ((looking-at "\\s-+") (match-string 0))
+ (t ""))))
+ ((comment-block verse-block)
+ ;; Only fill contents if P is within block boundaries.
+ (let* ((cbeg (save-excursion (goto-char post-affiliated)
+ (forward-line)
+ (point)))
+ (cend (save-excursion
+ (goto-char (org-element-property :end element))
+ (skip-chars-backward " \r\t\n")
+ (line-beginning-position))))
+ (when (and (>= p cbeg) (< p cend))
+ (if (looking-at "\\s-+") (match-string 0) ""))))))))))
-(defvar org-element-paragraph-separate) ; From org-element.el
-(defvar org-element-all-objects) ; From org-element.el
+(declare-function message-goto-body "message" ())
+(defvar message-cite-prefix-regexp) ; From message.el
+(defvar org-element-all-objects) ; From org-element.el
(defun org-fill-paragraph (&optional justify)
"Fill element at point, when applicable.
@@ -21027,11 +21025,13 @@ a footnote definition, try to fill the first paragraph within."
(if (and (derived-mode-p 'message-mode)
(or (not (message-in-body-p))
(save-excursion (move-beginning-of-line 1)
- (looking-at "^>+ "))))
- (let ((fill-paragraph-function (cadadr (assoc 'fill-paragraph-function org-fb-vars)))
+ (looking-at message-cite-prefix-regexp))))
+ (let ((fill-paragraph-function
+ (cadadr (assoc 'fill-paragraph-function org-fb-vars)))
(fill-prefix (cadadr (assoc 'fill-prefix org-fb-vars)))
(paragraph-start (cadadr (assoc 'paragraph-start org-fb-vars)))
- (paragraph-separate (cadadr (assoc 'paragraph-separate org-fb-vars))))
+ (paragraph-separate
+ (cadadr (assoc 'paragraph-separate org-fb-vars))))
(fill-paragraph))
(save-excursion
;; Move to end of line in order to get the first paragraph within
@@ -21050,50 +21050,62 @@ a footnote definition, try to fill the first paragraph within."
t)
;; Elements that may contain `line-break' type objects.
((paragraph verse-block)
- (let ((beg (org-element-property :contents-begin element))
- (end (org-element-property :contents-end element))
+ (let ((beg (max (point-min)
+ (org-element-property :contents-begin element)))
+ (end (min (point-max)
+ (org-element-property :contents-end element)))
(type (org-element-type element)))
;; Do nothing if point is at an affiliated keyword or at
;; verse block markers.
(if (or (< (point) beg)
(and (eq type 'verse-block) (>= (point) end)))
t
- ;; At a verse block, first narrow to current "paragraph"
- ;; and set current element to that paragraph.
- (save-restriction
- (when (eq type 'verse-block)
- (narrow-to-region beg end)
- (save-excursion
- (let ((bol-pos (point-at-bol)))
- (re-search-backward
- org-element-paragraph-separate nil 'm)
- (unless (or (bobp) (= (point-at-bol) bol-pos))
- (forward-line))
- (setq element (org-element-paragraph-parser end)
- beg (org-element-property :contents-begin element)
- end (org-element-property
- :contents-end element)))))
- ;; Fill paragraph, taking line breaks into consideration.
- ;; For that, slice the paragraph using line breaks as
- ;; separators, and fill the parts in reverse order to
- ;; avoid messing with markers.
+ ;; In verse blocks and `message-mode', boundaries of
+ ;; region to fill have to be tweaked.
+ (cond
+ ;; At a verse block, fill current "paragraph", that
+ ;; is part of text separated by blank lines.
+ ((eq type 'verse-block)
(save-excursion
- (goto-char end)
- (mapc
- (lambda (pos)
- (let ((fill-prefix (org-fill-context-prefix pos)))
- (fill-region-as-paragraph pos (point) justify))
- (goto-char pos))
- ;; Find the list of ending positions for line breaks
- ;; in the current paragraph. Add paragraph beginning
- ;; to include first slice.
- (nreverse
- (cons beg
- (org-element-map
- (org-element--parse-objects
- beg end nil org-element-all-objects)
- 'line-break
- (lambda (lb) (org-element-property :end lb))))))))
+ (when (looking-at "[ \t]*$")
+ (skip-chars-backward " \r\t\n" beg))
+ (when (re-search-backward "^[ \t]*$" beg t)
+ (forward-line)
+ (setq beg (point))))
+ (when (save-excursion (re-search-forward "^[ \t]*$" end t))
+ (setq end (match-beginning 0))))
+ ;; In `message-mode', do not fill following citation
+ ;; in current paragraph nor text before message
+ ;; body.
+ ((derived-mode-p 'message-mode)
+ (let ((body-start (save-excursion (message-goto-body))))
+ (when body-start (setq beg (max body-start beg))))
+ (when (save-excursion
+ (re-search-forward
+ (concat "^" message-cite-prefix-regexp) end t))
+ (setq end (match-beginning 0)))))
+ ;; Fill paragraph, taking line breaks into consideration.
+ ;; For that, slice the paragraph using line breaks as
+ ;; separators, and fill the parts in reverse order to
+ ;; avoid messing with markers.
+ (save-excursion
+ (goto-char end)
+ (mapc
+ (lambda (pos)
+ (let ((fill-prefix (org-fill-context-prefix pos)))
+ (fill-region-as-paragraph pos (point) justify))
+ (goto-char pos))
+ ;; Find the list of ending positions for line breaks
+ ;; in the current paragraph. Add paragraph beginning
+ ;; to include first slice.
+ (nreverse
+ (cons
+ beg
+ (org-element-map
+ (org-element--parse-objects
+ beg end nil org-element-all-objects)
+ 'line-break
+ (lambda (lb) (org-element-property :end lb)))))))
t)))
;; Contents of `comment-block' type elements should be filled as
;; plain text.
@@ -21103,7 +21115,8 @@ a footnote definition, try to fill the first paragraph within."
(fill-region-as-paragraph
(progn
(goto-char (org-element-property :begin element))
- (while (looking-at org-element--affiliated-re) (forward-line))
+ (while (looking-at org-element--affiliated-re)
+ (forward-line))
(forward-line)
(point))
(progn
@@ -21118,7 +21131,8 @@ a footnote definition, try to fill the first paragraph within."
(fill-region-as-paragraph
(progn
(goto-char (org-element-property :begin element))
- (while (looking-at org-element--affiliated-re) (forward-line))
+ (while (looking-at org-element--affiliated-re)
+ (forward-line))
(point))
(progn
(goto-char (org-element-property :end element))
@@ -22061,12 +22075,10 @@ Show the heading too, if it is currently invisible."
(defun org-make-options-regexp (kwds &optional extra)
"Make a regular expression for keyword lines."
(concat
- "^"
- "#?[ \t]*\\+\\("
+ "^#\\+\\("
(mapconcat 'regexp-quote kwds "\\|")
(if extra (concat "\\|" extra))
- "\\):[ \t]*"
- "\\(.*\\)"))
+ "\\):[ \t]*\\(.*\\)"))
;; Make isearch reveal the necessary context
(defun org-isearch-end ()
diff --git a/testing/lisp/test-org-element.el b/testing/lisp/test-org-element.el
index 6c2b39f59..63faca1b1 100644
--- a/testing/lisp/test-org-element.el
+++ b/testing/lisp/test-org-element.el
@@ -128,34 +128,25 @@ Some other text
(org-element-map tree 'italic 'identity nil t))
(org-element-map tree 'paragraph 'identity nil t))))))
-(ert-deftest test-org-element/adopt-element ()
- "Test `org-element-adopt-element' specifications."
+(ert-deftest test-org-element/adopt-elements ()
+ "Test `org-element-adopt-elements' specifications."
;; Adopt an element.
(should
- (equal '(italic plain-text)
+ (equal '(plain-text italic)
(org-test-with-temp-text "* Headline\n *a*"
(let ((tree (org-element-parse-buffer)))
- (org-element-adopt-element
+ (org-element-adopt-elements
(org-element-map tree 'bold 'identity nil t) '(italic nil "a"))
(mapcar (lambda (blob) (org-element-type blob))
(org-element-contents
(org-element-map tree 'bold 'identity nil t)))))))
;; Adopt a string.
- (should
- (equal '("b" "a")
- (org-test-with-temp-text "* Headline\n *a*"
- (let ((tree (org-element-parse-buffer)))
- (org-element-adopt-element
- (org-element-map tree 'bold 'identity nil t) "b")
- (org-element-contents
- (org-element-map tree 'bold 'identity nil t))))))
- ;; Test APPEND optional argument.
(should
(equal '("a" "b")
(org-test-with-temp-text "* Headline\n *a*"
(let ((tree (org-element-parse-buffer)))
- (org-element-adopt-element
- (org-element-map tree 'bold 'identity nil t) "b" t)
+ (org-element-adopt-elements
+ (org-element-map tree 'bold 'identity nil t) "b")
(org-element-contents
(org-element-map tree 'bold 'identity nil t)))))))
@@ -297,10 +288,6 @@ CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01"
(org-test-with-temp-text "# First part\n# \n#\n# Second part"
(org-element-map (org-element-parse-buffer) 'comment 'identity nil t)))
"First part\n\n\nSecond part"))
- ;; Keywords without colons are treated as comments.
- (should
- (org-test-with-temp-text "#+wrong_keyword something"
- (org-element-map (org-element-parse-buffer) 'comment 'identity)))
;; Do not mix comments and keywords.
(should
(eq 1
@@ -903,6 +890,12 @@ DEADLINE: <2012-03-29 thu.>"
:tag
(org-test-with-temp-text "- tag :: description"
(org-element-map (org-element-parse-buffer) 'item 'identity nil t)))))
+ ;; No tags in ordered lists.
+ (should-not
+ (org-element-property
+ :tag
+ (org-test-with-temp-text "1. tag :: description"
+ (org-element-map (org-element-parse-buffer) 'item 'identity nil t))))
;; Check-boxes
(should
(equal
@@ -1147,7 +1140,35 @@ e^{i\\pi}+1=0
(org-element-map
(org-element-parse-buffer) 'paragraph
(lambda (p) (char-after (org-element-property :end p)))
- nil t)))))
+ nil t))))
+ ;; Include ill-formed Keywords.
+ (should
+ (org-test-with-temp-text "#+wrong_keyword something"
+ (org-element-map (org-element-parse-buffer) 'paragraph 'identity)))
+ ;; Include incomplete-drawers.
+ (should
+ (let ((org-drawers '("TEST")))
+ (org-test-with-temp-text ":TEST:\nParagraph"
+ (let ((elem (org-element-at-point)))
+ (and (eq (org-element-type elem) 'paragraph)
+ (= (point-max) (org-element-property :end elem)))))))
+ ;; Include non-existent drawers.
+ (should
+ (let ((org-drawers '("TEST")))
+ (org-test-with-temp-text ":NONAME:"
+ (org-element-map (org-element-parse-buffer) 'paragraph 'identity))))
+ ;; Include incomplete blocks.
+ (should
+ (org-test-with-temp-text "#+BEGIN_CENTER\nParagraph"
+ (let ((elem (org-element-at-point)))
+ (and (eq (org-element-type elem) 'paragraph)
+ (= (point-max) (org-element-property :end elem))))))
+ ;; Include incomplete dynamic blocks.
+ (should
+ (org-test-with-temp-text "#+BEGIN: \nParagraph"
+ (let ((elem (org-element-at-point)))
+ (and (eq (org-element-type elem) 'paragraph)
+ (= (point-max) (org-element-property :end elem)))))))
;;;; Plain List
@@ -1776,7 +1797,7 @@ CLOCK: [2012-01-01 sun. 00:01]--[2012-01-01 sun. 00:02] => 0:01"))
(ert-deftest test-org-element/comment-interpreter ()
"Test comment interpreter."
;; Regular comment.
- (should (equal (org-test-parse-and-interpret "#Comment") "# Comment\n"))
+ (should (equal (org-test-parse-and-interpret "# Comment") "# Comment\n"))
;; Inline comment.
(should (equal (org-test-parse-and-interpret " # Comment")
"# Comment\n"))
diff --git a/testing/lisp/test-org-export.el b/testing/lisp/test-org-export.el
index 3b372f964..56b351e06 100644
--- a/testing/lisp/test-org-export.el
+++ b/testing/lisp/test-org-export.el
@@ -65,14 +65,14 @@ already filled in `info'."
(equal
(org-export--parse-option-keyword
"H:1 num:t \\n:t timestamp:t arch:t author:t creator:t d:t email:t
- *:t e:t ::t f:t pri:t -:t ^:t toc:t |:t tags:t tasks:t <:t todo:t")
+ *:t e:t ::t f:t pri:t -:t ^:t toc:t |:t tags:t tasks:t <:t todo:t inline:nil")
'(:headline-levels
1 :preserve-breaks t :section-numbers t :time-stamp-file t
:with-archived-trees t :with-author t :with-creator t :with-drawers t
:with-email t :with-emphasize t :with-entities t :with-fixed-width t
- :with-footnotes t :with-priority t :with-special-strings t
- :with-sub-superscript t :with-toc t :with-tables t :with-tags t
- :with-tasks t :with-timestamps t :with-todo-keywords t)))
+ :with-footnotes t :with-inlinetasks nil :with-priority t
+ :with-special-strings t :with-sub-superscript t :with-toc t :with-tables t
+ :with-tags t :with-tasks t :with-timestamps t :with-todo-keywords t)))
;; Test some special values.
(should
(equal
@@ -265,7 +265,24 @@ Paragraph"
"CLOSED: [2012-04-29 sun. 10:45]\n"))
(should
(equal (org-export-as 'test nil nil nil '(:with-plannings nil))
- ""))))))
+ "")))))
+ ;; Inlinetasks.
+ (when (featurep 'org-inlinetask)
+ (should
+ (equal
+ (let ((org-inlinetask-min-level 15))
+ (org-test-with-temp-text "*************** Task"
+ (org-test-with-backend test
+ (org-export-as 'test nil nil nil '(:with-inlinetasks nil)))))
+ ""))
+ (should
+ (equal
+ (let ((org-inlinetask-min-level 15))
+ (org-test-with-temp-text
+ "*************** Task\nContents\n*************** END"
+ (org-test-with-backend test
+ (org-export-as 'test nil nil nil '(:with-inlinetasks nil)))))
+ ""))))
(ert-deftest test-org-export/comment-tree ()
"Test if export process ignores commented trees."
diff --git a/testing/lisp/test-org-list.el b/testing/lisp/test-org-list.el
index 41721a563..d57ebc94e 100644
--- a/testing/lisp/test-org-list.el
+++ b/testing/lisp/test-org-list.el
@@ -113,6 +113,111 @@
(org-previous-item)
(should (looking-at " - item 1.3"))))))
+(ert-deftest test-org-list/cycle-bullet ()
+ "Test `org-cycle-list-bullet' specifications."
+ ;; Error when not at an item.
+ (should-error
+ (org-test-with-temp-text "Paragraph"
+ (org-cycle-list-bullet)))
+ ;; Cycle through "-", "+", "*", "1.", "1)".
+ (org-test-with-temp-text " - item"
+ (org-cycle-list-bullet)
+ (should (looking-at "[ \t]+\\+"))
+ (org-cycle-list-bullet)
+ (should (looking-at "[ \t]+\\*"))
+ (let ((org-plain-list-ordered-item-terminator t))
+ (org-cycle-list-bullet))
+ (should (looking-at "[ \t]+1\\."))
+ (let ((org-plain-list-ordered-item-terminator t))
+ (org-cycle-list-bullet))
+ (should (looking-at "[ \t]+1)")))
+ ;; Argument is a valid bullet: cycle to that bullet directly.
+ (should
+ (equal "1. item"
+ (org-test-with-temp-text "- item"
+ (let ((org-plain-list-ordered-item-terminator t))
+ (org-cycle-list-bullet "1.")
+ (buffer-string)))))
+ ;; Argument is an integer N: cycle to the Nth allowed bullet.
+ (should
+ (equal "+ item"
+ (org-test-with-temp-text "1. item"
+ (let ((org-plain-list-ordered-item-terminator t))
+ (org-cycle-list-bullet 1)
+ (buffer-string)))))
+ ;; Argument is `previous': cycle backwards.
+ (should
+ (equal "- item"
+ (org-test-with-temp-text "+ item"
+ (let ((org-plain-list-ordered-item-terminator t))
+ (org-cycle-list-bullet 'previous)
+ (buffer-string)))))
+ ;; Do not cycle to "*" bullets when item is at column 0.
+ (should
+ (equal "1. item"
+ (org-test-with-temp-text "+ item"
+ (let ((org-plain-list-ordered-item-terminator t))
+ (org-cycle-list-bullet)
+ (buffer-string)))))
+ ;; Do not cycle to numbered bullets in a description list.
+ (should-not
+ (equal "1. tag :: item"
+ (org-test-with-temp-text "+ tag :: item"
+ (let ((org-plain-list-ordered-item-terminator t))
+ (org-cycle-list-bullet)
+ (buffer-string)))))
+ ;; Do not cycle to ordered item terminators if they are not allowed
+ ;; in `org-plain-list-ordered-item-terminator'.
+ (should
+ (equal " 1) item"
+ (org-test-with-temp-text " * item"
+ (let ((org-plain-list-ordered-item-terminator 41))
+ (org-cycle-list-bullet)
+ (buffer-string)))))
+ ;; When `org-alphabetical-lists' is non-nil, cycle to alpha bullets.
+ (should
+ (equal "a. item"
+ (org-test-with-temp-text "1) item"
+ (let ((org-plain-list-ordered-item-terminator t)
+ (org-alphabetical-lists t))
+ (org-cycle-list-bullet)
+ (buffer-string)))))
+ ;; Do not cycle to alpha bullets when list has more than 26
+ ;; elements.
+ (should-not
+ (equal "a. item 1"
+ (org-test-with-temp-text "1) item 1
+2) item 2
+3) item 3
+4) item 4
+5) item 5
+6) item 6
+7) item 7
+8) item 8
+9) item 9
+10) item 10
+11) item 11
+12) item 12
+13) item 13
+14) item 14
+15) item 15
+16) item 16
+17) item 17
+18) item 18
+19) item 19
+20) item 20
+21) item 21
+22) item 22
+23) item 23
+24) item 24
+25) item 25
+26) item 26
+27) item 27"
+ (let ((org-plain-list-ordered-item-terminator t)
+ (org-alphabetical-lists t))
+ (org-cycle-list-bullet)
+ (buffer-substring (point) (line-end-position)))))))
+
(ert-deftest test-org-list/indent-item ()
"Test `org-indent-item' specifications."
;; 1. Error when not at an item.
diff --git a/testing/lisp/test-org.el b/testing/lisp/test-org.el
index 9f59a7cdd..09bf3283e 100644
--- a/testing/lisp/test-org.el
+++ b/testing/lisp/test-org.el
@@ -160,6 +160,14 @@ http://article.gmane.org/gmane.emacs.orgmode/21459/"
(end-of-line)
(org-fill-paragraph)
(buffer-string)))))
+ ;; Correctly fill an element in a narrowed buffer.
+ (should
+ (equal "01234\n6"
+ (org-test-with-temp-text "01234 6789"
+ (let ((fill-column 5))
+ (narrow-to-region 1 8)
+ (org-fill-paragraph)
+ (buffer-string)))))
;; Special case: Fill first paragraph when point is at an item or
;; a plain-list or a footnote reference.
(should