0
0
Fork 1
mirror of https://git.savannah.gnu.org/git/emacs/org-mode.git synced 2024-08-24 01:48:39 +00:00
Savannah is a terribly unstable remote. Let's try to alleviate that.
Find a file
Ihor Radchenko 1260f61830
Refactor org-element API for abstract syntax tree
Major changes:
1. Property values can now deferred and computed next time when the
   value is requested.
2. Some properties are stored in an array instead of plist.  The
   functions are inlined to turn the propery queries into direct
   `aref' and `aset' calls to the plist, when applicable.
3. Secondary strings are now considered of `anonymous' type, in
   backwards-compatible way.
4. New functions to map over and/or resolve deferred values of element
   properties.
5. Docstrings and code consistently use "node" for generic syntax tree
   elements, to not confuse the element/object terminology we use in
   the parser.

* lisp/org-element-ast.el (org-element-deferred): New type user to
store deferred values.
(org-element--deferred-resolve-once):
(org-element--deferred-resolve):
(org-element--deferred-resolve-force):
(org-element--deferred-resolve-list): Helper functions used to resolve
the deferred values.
(org-element--standard-properties):
(org-element--standard-properties-idxs):
(org-element--property-idx):
(org-element--parray):
(org-element--plist-property): Store most commonly used properties in
vector for faster access.  Implement inliner helpers to transform
property keywords into array indices.
(org-element-property-1): New function to retrieve property without
resolving deferred value.
(org-element--put-parray):
(org-element-put-property): Refactor, using the new property vector
when applicable.
(org-element--property): New helper function.
(org-element-property): Refactor, using the new property vector and
deferred value resolution.  Add new optional arguments DFLT and
FORCE-UNDEFER.  Define setters.
(org-element-set-contents): Handle anonymous nodes.
(org-element-set):
(org-element-adopt):
(org-element-extract): Rename from `org-element-set-elements',
`org-element-adopt-elements', and `org-element-extract-elements' and
keep backward-compatible alias.  This is to reduce the confusion about
"node" vs. "element" vs. "object".
(org-element-create): Initialize property array correctly.
(org-element-copy): Allow copying secondary strings.  Add new optional
argument KEEP-CONTENTS.
(org-element-lineage): Clarify the limitation when cache is disabled.
(org-element-type): New optional argument to identify anonymous nodes
instead of returning nil for both anonymous nodes and everything not
matching other element types.
2023-07-01 14:35:17 +03:00
doc org-manual: Explain how to deal with literal $ parsed as LaTeX fragments 2023-07-01 13:00:30 +03:00
etc lisp/org-habit.el: Inherit habit style property 2023-06-23 13:47:51 +03:00
lisp Refactor org-element API for abstract syntax tree 2023-07-01 14:35:17 +03:00
mk mk/org-fixup.el: Adjust for Emacs 29 autoload.el deprecation 2023-05-21 17:06:59 -04:00
testing test-org-src.el: Add two tests 2023-06-26 12:10:26 +02:00
.dir-locals.el .dir-locals.el: Set indent-tabs-mode to nil in Elisp sources 2020-12-23 00:00:26 -05:00
.gitignore * lisp/org-agenda.el: Use lexical-binding 2021-03-09 22:56:33 -05:00
.gitmodules updated jump submodule for those behind http proxy 2013-06-06 14:36:24 -06:00
CONTRIBUTE.org CONTRIBUTE.org: Try to be more effective in giving directions 2022-09-27 23:17:28 +02:00
COPYING Prefer HTTPS to HTTP in most links 2021-03-21 15:21:22 -04:00
Makefile Use https for links to orgmode.org 2018-01-19 18:14:58 +01:00
README.org Rename README and CONTRIBUTE as README.org and CONTRIBUTE.org 2022-09-26 06:48:27 +02:00

This is a distribution of Org Mode, a major mode for keeping notes, authoring documents, computational notebooks, literate programming, maintaining to-do lists, planning projects, and more — in a fast and effective plain text system.

Check the Org Mode website for more.

Install Org

Org is part of GNU Emacs: you probably don't need to install it.

To install a more recent version, please do it from GNU ELPA by running this command: M-x package-install RET org RET

Join the GNU Project

Org is part of GNU Emacs and GNU Emacs is part of the GNU Operating System, developed by the GNU Project.

If you are the author of an awesome program and want to join us in writing Free (libre) Software, please consider making it an official GNU program and become a GNU Maintainer. Instructions on how to do this are here http://www.gnu.org/help/evaluation.

Don't have a program to contribute? Look at all the other ways to help: https://www.gnu.org/help/help.html.

And to learn more about Free (libre) Software in general, please read and share this page: https://gnu.org/philosophy/free-sw.html

License

Org-mode is published under the GNU GPLv3 license or any later version, the same as GNU Emacs.

Org-mode 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 (at your option) any later version.

GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Org mode. If not, see https://www.gnu.org/licenses/.