Nicolas Goaziou <n.goaz...@gmail.com> writes: > Thorsten Jolitz <tjol...@gmail.com> writes: > >> Nicolas Goaziou <n.goaz...@gmail.com> writes: >> >>> Hello, >>> >>> Thorsten Jolitz <tjol...@gmail.com> 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