Nicolas Goaziou
fd5edd35ae
org-element: Fix cache bug
...
* lisp/org-element.el (org-element-cache-get): Return correct cached
element when point is at the beginning of an item.
2014-01-11 22:31:53 +01:00
Nicolas Goaziou
a4b1fa7ca1
org-element: New accessor for cache root
...
* lisp/org-element.el (org-element--cache-root): New function.
(org-element--cache-sync, org-element-cache-get): Use new function.
This is a workaround for `avl-tree--root' bug before Emacs 24. Thanks
to Daniel Clemente for reporting it.
2014-01-11 10:12:45 +01:00
Nicolas Goaziou
f75f3dd1c1
org-element: Fix `org-element-at-point' at eob
...
* lisp/org-element.el (org-element-at-point): Return appropriate value
when point is at end of buffer and a cached element was found above.
2014-01-09 11:55:49 +01:00
Bastien Guerry
f8e1745440
Merge branch 'maint'
...
Conflicts:
contrib/lisp/org-favtable.el
2014-01-07 14:19:03 +01:00
Bastien Guerry
7d9a883b50
Update copyright years again.
...
Hint: copyright years are all updated in Emacs.
2014-01-07 14:18:17 +01:00
Nicolas Goaziou
e32ebb6c1a
org-element: Change data structure for cache
...
* lisp/org-element.el (org-element-at-point, org-element-cache-get,
org-element-cache-put, org-element--cache-sync): Complete rewrite to
use new data structure.
(org-element-context, org-element-cache-reset): Slight change in order
to use new tools to access cached data.
(org-element-cache-merge-changes-threshold): Renamed from
`org-element--cache-merge-changes-threshold'.
(org-element-cache-sync-idle-time): Renamed from
`org-element--cache-sync-idle-time'.
(org-element--cache-objects): New variable.
Now elements are stored in AVL tree and objects in a hash table. Also
moved functions relative to cache into a specific section of the file.
2014-01-05 23:08:18 +01:00
Nicolas Goaziou
594b7808a1
org-element: Fix parsing orphaned affiliated keywords
...
* lisp/org-element.el (org-element-keyword-parser): Fix parsing
orphaned affiliated keywords.
2014-01-05 23:08:18 +01:00
Bastien Guerry
c41f5075ac
Merge branch 'maint'
...
Conflicts:
contrib/lisp/org-favtable.el
2014-01-05 06:36:11 +01:00
Bastien Guerry
0beda99171
Revert "Update copyright years."
...
This reverts commit 21105594fc
.
2014-01-05 06:28:07 +01:00
Bastien Guerry
096ff7e078
Merge branch 'maint'
...
Conflicts:
contrib/lisp/org-favtable.el
2014-01-04 18:58:12 +01:00
Bastien Guerry
21105594fc
Update copyright years.
2014-01-04 18:56:11 +01:00
Nicolas Goaziou
ae1cf04833
org-element: Fix `org-element-at-point'
...
* lisp/org-element.el (org-element-at-point): Fix function when buffer
starts with a headline.
2013-12-30 17:26:13 +01:00
Nicolas Goaziou
4dbbbe5b01
org-element: Small refactoring
...
* lisp/org-element.el (org-element-at-point): Refactor code. Fixing
structure in cached plain lists is no longer required since
4423d750a4
.
2013-12-30 14:15:11 +01:00
Nicolas Goaziou
fde42c5303
org-element: Fix cache when point is at eob
...
* lisp/org-element.el (org-element-at-point): Fix cache when point is
at eob and shortcut found something above.
2013-12-30 14:15:11 +01:00
Nicolas Goaziou
405b505c73
org-element: Fix cache update
...
* lisp/org-element.el (org-element--cache-sync): Fix cache update when
a only contents of an element are modified.
(org-element--cache-shift-positions): Add optional argument allowing
partial shifting.
2013-12-30 14:15:11 +01:00
Nicolas Goaziou
398dbd91ed
org-element: Fix `org-element-at-point' shortcut
...
* lisp/org-element.el (org-element-at-point): Correctly move from
blank line to blank line in order to find a known element above.
2013-12-27 15:41:41 +01:00
Nicolas Goaziou
4cb98ed1cd
org-element: Fix org-element-insert-before
...
* lisp/org-element.el (org-element-insert-before): Handle insertion at
the beginning of a :title property.
2013-12-26 12:26:11 +01:00
Nicolas Goaziou
b44fbb920c
Merge branch 'maint'
2013-12-16 21:04:57 +01:00
Nicolas Goaziou
b22714a88d
org-element: Keep compatibility with Babel's regexps
...
* lisp/org-element.el (org-element-inline-babel-call-successor): Use
original regexp to stay up-to-date with Babel changes.
2013-12-16 21:00:57 +01:00
Nicolas Goaziou
d55f0632b5
Merge branch 'maint'
2013-12-15 16:18:31 +01:00
Nicolas Goaziou
f1b9339aa5
org-element: Fix affiliated keyword regexp
...
* lisp/org-element.el (org-element--affiliated-re): Fix affiliated
keyword regexp.
2013-12-15 16:16:20 +01:00
Nicolas Goaziou
149eafb487
org-element: Small change to cache optimization
...
* lisp/org-element.el (org-element-at-point): Simplify opportunistic
shortcut by looking only for blank lines and headlines or
inlinetasks. Since regexp is simpler, we can afford to make more
searches.
2013-12-12 23:49:49 +01:00
Nicolas Goaziou
4423d750a4
org-element: Fix holes in cache
...
* lisp/org-element.el (org-element--cache-stable-types): New variable.
(org-element--cache-sync): Do not store elements with missing parents
in cache.
The bug was introduced in 71c8474ae9
.
Parsing doesn't always start from beginning of section, which means
that missing parents aren't always repaired while moving to the
current element. Therefore, we need to remove any element from cache
with an invalid parent property.
2013-12-12 23:04:29 +01:00
Nicolas Goaziou
cd439bc513
org-element: Extend `org-element-set-element' to strings
...
* lisp/org-element.el (org-element-set-element): Allow to replace
a string with an element, an element with a string, or a string with
a string.
2013-12-01 17:05:34 +01:00
Nicolas Goaziou
798ad3a27e
org-element: Implement `org-element-insert-before'
...
* lisp/org-element.el (org-element-insert-before): New function.
* testing/lisp/test-org-element.el (test-org-element/insert-before):
New test.
2013-12-01 17:05:34 +01:00
Nicolas Goaziou
b0216248e3
org-element: Implement `org-element-extract-element'
...
* lisp/org-element.el (org-element-extract-element): New function.
* testing/lisp/test-org-element.el (test-org-element/extract-element):
New test.
2013-12-01 17:05:34 +01:00
Nicolas Goaziou
0fd4245a43
org-element: Implement `org-element-secondary-p'
...
* lisp/org-element.el (org-element-secondary-p): New function.
* lisp/ox.el (org-export-get-previous-element,
org-export-get-next-element): Use new function.
* testing/lisp/test-org-element.el (test-org-element/secondary-p): New
test.
2013-12-01 17:05:34 +01:00
Nicolas Goaziou
5a2dabc21b
org-element: Optimize parser only when cache is active
...
* lisp/org-element.el (org-element-at-point): Try opportunistic
shortcut only when cache is active.
2013-11-26 23:51:26 +01:00
Nicolas Goaziou
71c8474ae9
org-element: Speed-up for `org-element-at-point'
...
* lisp/org-element.el (org-element-at-point): Rewrite function. Remove
optional argument.
Include an opportunistic search at the beginning of the function. It
drastically improves speed on large sections for a small overhead on
small ones.
2013-11-26 18:18:33 +01:00
Nicolas Goaziou
a9eec72ecf
Merge branch 'maint'
2013-11-25 23:36:38 +01:00
Nicolas Goaziou
7bee47120b
org-element: Update paragraph separate regexp
...
* lisp/org-element.el (org-element-paragraph-separate): More accurate
regexp.
2013-11-25 23:19:48 +01:00
Nicolas Goaziou
fc95ee2768
org-element: Change to timestamp interpreter
...
* lisp/org-element.el (org-element-timestamp-interpreter):
Ignore :raw-value and build timestamp from numeric properties
instead.
* testing/lisp/test-org-element.el: Update tests.
* testing/lisp/test-ox.el: Update tests.
This change allow to modify and update a timestamp easily without
requiring to reset :raw-value first, which was not intuitive.
2013-11-16 10:18:19 +01:00
Nicolas Goaziou
926bc85861
org-element: Rename a function
...
* lisp/org-element.el (org-element--cache-shift-positions): Renamed
from `org-element--shift-positions'.
(org-element--cache-sync): Apply renaming.
2013-11-16 09:53:10 +01:00
Nicolas Goaziou
4466af5c11
org-element: Fix commit 73d60606bd
...
* lisp/org-element.el (org-element--cache-sync): Fix commit
73d60606bd
.
2013-11-16 00:33:30 +01:00
Nicolas Goaziou
73d60606bd
org-element: Fix cache bug
...
* lisp/org-element.el (org-element--cache-sync): Properly remove from
cache last element in a plain list when blank lines at the end of
that list are modified.
2013-11-15 23:46:45 +01:00
Nicolas Goaziou
91c1718519
org-element: Fix cache corruption when moving list
...
* lisp/org-element.el (org-element--shift-positions): Fix cache
corruption when moving list.
2013-11-15 23:10:41 +01:00
Nicolas Goaziou
f101663489
org-element: Interpret pseudo elements and objects
...
* lisp/org-element.el (org-element-interpret-data): Change signature.
One can now define pseudo elements and objects types.
(org-element--interpret-data-1): New function.
* testing/lisp/test-org-element.el: Add tests.
* testing/lisp/test-ox.el: Update tests.
A pseudo element or object is a new element or object type that is
created and treated locally within an export back-end. The back-end
provides a translator for it and it is ignored when interpreted back
into Org syntax.
2013-11-11 13:16:43 +01:00
Nicolas Goaziou
c57372d5fa
Merge branch 'maint'
...
Conflicts:
testing/lisp/test-org-element.el
2013-11-10 11:47:06 +01:00
Nicolas Goaziou
ede82ccf93
org-element: Fix infloops
...
* lisp/org-element.el (org-element-center-block-parser)
(org-element-drawer-parser, org-element-dynamic-block-parser)
(org-element-footnote-definition-parser)
(org-element-inlinetask-parser, org-element-property-drawer-parser)
(org-element-quote-block-parser, org-element-comment-block-parser)
(org-element-diary-sexp-parser, org-element-example-block-parser)
(org-element-keyword-parser, org-element-latex-environment-parser)
(org-element-paragraph-parser, org-element-src-block-parser)
(org-element-table-parser, org-element-verse-block-parser): Fix
infloop when buffer ends with a non-empty blank line after the
element.
* testing/lisp/test-org-element.el: Add tests.
2013-11-10 11:28:14 +01:00
Nicolas Goaziou
ca100eaa01
Merge branch 'maint'
2013-11-10 10:25:17 +01:00
Nicolas Goaziou
84818415e8
org-element: Fix infloop
...
* lisp/org-element.el (org-element-comment-parser): Fix infloop when
a non-empty blank line follows a comment at the end of the buffer.
* testing/lisp/test-org-element.el: Add test.
2013-11-10 10:23:18 +01:00
Nicolas Goaziou
0656278de4
Merge branch 'maint'
2013-11-06 19:17:39 +01:00
Nicolas Goaziou
92f89eedba
ox-org: Fix headline level during subtree export
...
* lisp/org-element.el (org-element-headline-interpreter): Take into
consideration `org-odd-levels-only' when building a headline.
* lisp/ox-org.el (org-org-headline): Correctly set transcoded headline
level during subtree export.
2013-11-06 19:14:14 +01:00
Nicolas Goaziou
8403332dbc
org-element: Fix bug in cache
...
* lisp/org-element.el (org-element--cache-sync): Modifying blank lines
at the end of a list or a footnote definition no longer corrupt
cache.
2013-11-04 19:28:07 +01:00
Nicolas Goaziou
8255286e22
org-element: Small refactoring
...
* lisp/org-element.el (org-element-item-parser,
org-element-plain-list-parser): Remove dependencies on org-list
library.
2013-11-04 18:16:28 +01:00
Nicolas Goaziou
b96986b81c
Merge branch 'maint'
2013-11-03 17:53:11 +01:00
Nicolas Goaziou
757f00811d
org-element: Fix error when parsing lowercase keywords
...
* lisp/org-element.el (org-element-context): Fix error when parsing
affiliated keywords, e.g. "caption".
* testing/lisp/test-org-element.el: Add test.
2013-11-03 17:51:12 +01:00
Nicolas Goaziou
0cecf32a0a
org-element: Implement caching for dynamic parser
...
* lisp/org-element.el (org-element-use-cache, org-element--cache,
org-element--cache-sync-idle-time,
org-element--cache-merge-changes-threshold, org-element--cache-status,
org-element--cache-opening-line, org-element--cache-closing-line): New
variables.
(org-element-cache-reset, org-element--cache-pending-changes-p,
org-element--cache-push-change, org-element--cache-cancel-changes,
org-element--cache-get-key, org-element-cache-get,
org-element-cache-put, org-element--shift-positions,
org-element--cache-before-change, org-element--cache-record-change,
org-element--cache-sync): New functions.
(org-element-at-point, org-element-context): Use cache when possible.
* lisp/org.el (org-mode, org-set-modules): Reset cache.
* lisp/org-footnote.el (org-footnote-section): Reset cache.
* testing/lisp/test-org-element.el: Update tests.
This patch gives a boost to `org-element-at-point' and, to a lesser
extent, to `org-element-context'.
2013-11-03 13:09:54 +01:00
Nicolas Goaziou
6202ec7b3b
Remove need to declare drawers before using them
...
* lisp/org-agenda.el (org-agenda-prepare): Remove reference to
`org-drawers-for-agenda'.
(org-agenda-show-1): Remove reference to `org-drawers'.
* lisp/org-clock.el (org-clock-remove-empty-clock-drawer,
org-clock-cancel): Apply signature change to
`org-remove-empty-drawer-at'.
* lisp/org-element.el (org-element--list-struct): Use
`org-drawer-regexp' instead of `org-drawers'.
* lisp/org-feed.el (org-feed-drawer): Update docstring according to
change.
* lisp/org-list.el (org-in-item-p, org-list-context): Use
`org-drawer-regexp' instead of `org-drawers'.
* lisp/org-mobile.el (org-mobile-create-index-file): Remove reference
to `org-drawers-for-agenda'.
* lisp/org-pcomplete.el (pcomplete/org-mode/drawer): Remove function.
* lisp/org.el (org-drawer-regexp): Make variable global.
(org-drawers): Remove variable.
(org-set-regexps-and-options): Ignore DRAWER keyword.
(org-cycle): Use `org-drawer-regexp' instead of `org-drawers'.
(org-cycle-hide-drawers): Add an optional argument to ignore some
drawers.
(org-remove-empty-drawer-at): Remove second argument. Rewrite
function.
(org-clone-subtree-with-time-shift): Apply signature change to
`org-remove-empty-drawer-at'.
(org-toggle-ordered-property): Apply `org-delete-property' signature
change.
(org-map-entries): Remove reference to `org-drawers-for-agenda'.
(org-entry-delete): Remove optional argument. Small refactoring.
(org-insert-drawer): Remove reference to `org-drawers'.
(org-delete-property): Apply `org-entry-delete' signature change.
(org-in-drawer-p): Rewrite function.
* testing/lisp/test-org-element.el: Update tests.
* testing/lisp/test-org.el: Update tests.
* testing/lisp/test-ox.el: Update tests.
2013-10-31 21:19:40 +01:00
Nicolas Goaziou
73f2ef866d
org-element: Small change to src block indentation
...
* lisp/org-element.el (org-element-remove-indentation): Renamed from
`org-element--remove-indentation'.
(org-element-example-block-interpreter, org-element-src-block-parser):
Do not depend on `org-src-preserve-indentation'.
(org-element-src-block-interpreter, org-element-example-block-parser):
Check `org-src-preserve-indentation'.
* lisp/ox.el (org-export-unravel-code): Handle
`org-src-preserve-indentation'.
* testing/lisp/test-org-element.el: Update tests.
2013-10-27 11:06:28 +01:00