[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [O] Tabular overview of org-element.el
From: |
Thorsten Jolitz |
Subject: |
Re: [O] Tabular overview of org-element.el |
Date: |
Sat, 20 Apr 2013 20:45:53 +0200 |
User-agent: |
Gnus/5.130002 (Ma Gnus v0.2) Emacs/24.3 (gnu/linux) |
Nicolas Goaziou <address@hidden> writes:
> Thorsten Jolitz <address@hidden> writes:
>
>> Nicolas Goaziou <address@hidden> writes:
>>
>>> Hello,
>>>
>>> Thorsten Jolitz <address@hidden> writes:
>>>
>>>> I prepared a tabular overview of org-element.el to get a better
>>>> understanding of how Nicolas modeled and Org file, and I thought it
>>>> might be useful for others so I share it here.
>>>>
>>>> I did not know where to put 'plain-link', but maybe I simply overlooked
>>>> it in one place.
>>>
>>> It belongs to `org-element-all-successors', which means it is
>>> a successor. Actually, it is a dumbed down successor for links, as it
>>> only finds plain links, i.e. links with no markup at all. E.g.,
>>>
>>> http://orgmode.org
>>>
>>> This is necessary as some contexts (i.e. link descriptions) can only
>>> contain such links.
>>
>>
>> Whats kind of confusing for me is that all other successors are either
>> 'atomic' objects or 'object-categories' containing 'atomic' objects:
>>
>> ,--------------------------------------------------------------------
>> | Object Recur? Successor(type) SecVal-Location
>> | -----------------------------------------------------------------
>> | bold X text-markup
>> | code text-markup
>> | entity latex-or-entity
>> | export-snippet X
>> | footnote-reference X :inline-definition
>> | inline-babel-call X
>> | inline-src-block X
>> | italic X text-markup
>> | line-break X
>> | latex-fragment latex-or-entity
>> | link X X
>> | macro X
>> | radio-target X X
>> | statistics-cookie X
>> | strike-through X text-markup
>> | subscript X sub/superscript
>> | superscript X sub/superscript
>> | table-cell X X
>> | target X
>> | timestamp X
>> | underline X text-markup
>> | verbatim text-markup
>> `--------------------------------------------------------------------
>>
>> Only plain-link is an 'outlier' in this systematic. What is a link like
>>
>> ,-------------------
>> | http://orgmode.org
>> `-------------------
>>
>> then, when encountered in an Org document? If its not an object nor an
>> element, then it is (anonymous) part of the String that forms a paragraph?
>> Its easy to understand that some objects can be successors of other
>> objects/elements, others not, and that its sometimes convenient to
>> organize similar successor objects into successor-categories.
>>
>> Its not so easy to understand how something can be a successor but not
>> an object.
>
> "http://orgmode.org" _is_ a link object, like [[http://orgmode.org]].
> There are two successors for the same object type, one being more
> selective than the other.
>
> This special successor was introduced (lately) because there was no
> image syntax in Org. So we needed to recognize:
>
> [[http://orgmode.org][./unicorn.jpg]]
>
> as an image pointing to an URL. In fact, we could separate `plain-link'
> objects from `link' objects, but the benefit is not obvious, so
> `plain-link' is just considered as a sub-type of `link'.
So in fact there are link objects that might belong to 'decorated-link'
or 'plain-link', but this has not been made explicit because there is
only one special case where its not sufficient to simply use super-type
'link'.
Maybe its worth to notice that wrt 'plain-link' there are some hidden
implicit things going on in the background. First of all, there are no
other subtypes of object-types - object 'link' would be the only
object-type with two subtypes ('plain-link' and 'decorated-link' or
whatever). And the object 'link' is used as successor but does not fit
all situations where a link can be used.
I know this might be of no practical relevance at the moment, and might
seem like a case of excessive pea-counting, but now that Org-mode has
such a wonderful parsing and exporting framework, there might well be a
trend towards more formalization in the future - and this will cause
hiccups for anyone who tries such formalization.
To keep the system consistent, there should be two types of link objects
('plain-link' and 'decorated-link') that are both successors too, and
maybe additionally a successor category 'link' that can be applied when
distinction between the two link object-types does not matter.
--
cheers,
Thorsten