emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* Invalid read syntax (#) in org-element parse tree
@ 2013-02-11 18:29 Thorsten Jolitz
  2013-02-11 21:47 ` Nicolas Goaziou
  0 siblings, 1 reply; 6+ messages in thread
From: Thorsten Jolitz @ 2013-02-11 18:29 UTC (permalink / raw)
  To: emacs-orgmode


Hi List, 

here is an excerpt of a parse tree produced with
'org-element-parse-buffer': 

,-------------------------------------------------------------
| (section (:begin 1 :end 624 :contents-begin
| 1 :contents-end 623 :post-blank 1 :parent #0) (keyword (:key
| TITLE :value Program "Blues for Icke" :begin 1 :end
| 39 :post-blank 0 :post-affiliated 1 :parent #1)))
`-------------------------------------------------------------

When I evaluate a function with this list as data, I get an error:

,--------------------------------------------------------
| Debugger entered--Lisp error: (invalid-read-syntax "#")
|   read(#<buffer *scratch*>)
|   preceding-sexp()
|   eval-last-sexp-1(t)
|   eval-last-sexp(t)
|   eval-print-last-sexp()
|   call-interactively(eval-print-last-sexp nil nil)
`--------------------------------------------------------

from the doc in 'org-element.el' I learn that:

,------------------------------------------------------------------------
| ;; Notwithstanding affiliated keywords, each greater element, element
| ;; and object has a fixed set of properties attached to it. [...]
| 
| ;; `:parent' which refers to the element or object containing it. [...]
| 
| ;; Lisp-wise, an element or an object can be represented as a list.
| ;; It follows the pattern (TYPE PROPERTIES CONTENTS), where:
| ;;   TYPE is a symbol describing the Org element or object.
| ;;   PROPERTIES is the property list attached to it.  See docstring of
| ;;              appropriate parsing function to get an exhaustive
| ;;              list.
| ;;   CONTENTS is a list of elements, objects or raw strings contained
| ;;            in the current element or object, when applicable.
| ;;
| ;; An Org buffer is a nested list of such elements and objects, whose
| ;; type is `org-data' and properties is nil.
`------------------------------------------------------------------------

There are a lot of usages of '#' in Emacs Lisp, but I couldn't figure
out how (and why) it is used in ':parent #1'. 

Nic Ferrier wrote an exhaustive library with "routines for working with
key/value data structures like hash-tables and alists and plists"
(https://github.com/nicferrier/emacs-kv/blob/master/kv.el), but I cannot
apply any of the functions due to the read error. Do I really have to
treat the parse tree as text first and eliminate the '#' before I can
use it as list in Emacs Lisp, or did I simply manage to get the wrong
represantation of the parse tree somehow?

Thanks for any advice.

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Invalid read syntax (#) in org-element parse tree
  2013-02-11 18:29 Invalid read syntax (#) in org-element parse tree Thorsten Jolitz
@ 2013-02-11 21:47 ` Nicolas Goaziou
  2013-02-11 23:20   ` Thorsten Jolitz
  0 siblings, 1 reply; 6+ messages in thread
From: Nicolas Goaziou @ 2013-02-11 21:47 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

Hello,

Thorsten Jolitz <tjolitz@gmail.com> writes:

> here is an excerpt of a parse tree produced with
> 'org-element-parse-buffer': 
>
> ,-------------------------------------------------------------
> | (section (:begin 1 :end 624 :contents-begin
> | 1 :contents-end 623 :post-blank 1 :parent #0) (keyword (:key
> | TITLE :value Program "Blues for Icke" :begin 1 :end
> | 39 :post-blank 0 :post-affiliated 1 :parent #1)))
> `-------------------------------------------------------------
>
> When I evaluate a function with this list as data, I get an error:
>
> ,--------------------------------------------------------
> | Debugger entered--Lisp error: (invalid-read-syntax "#")
> |   read(#<buffer *scratch*>)
> |   preceding-sexp()
> |   eval-last-sexp-1(t)
> |   eval-last-sexp(t)
> |   eval-print-last-sexp()
> |   call-interactively(eval-print-last-sexp nil nil)
> `--------------------------------------------------------

[...]

> There are a lot of usages of '#' in Emacs Lisp, but I couldn't figure
> out how (and why) it is used in ':parent #1'. 

See (info "(elisp) Read Syntax for Circular Objects")

> Nic Ferrier wrote an exhaustive library with "routines for working with
> key/value data structures like hash-tables and alists and plists"
> (https://github.com/nicferrier/emacs-kv/blob/master/kv.el), but I cannot
> apply any of the functions due to the read error. Do I really have to
> treat the parse tree as text first and eliminate the '#' before I can
> use it as list in Emacs Lisp, or did I simply manage to get the wrong
> represantation of the parse tree somehow?

I'm not sure about what you want to do with the parse tree. The usual
function to work with it is `org-element-map'. You may want to have
a look at its docstring, as it contains examples.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Invalid read syntax (#) in org-element parse tree
  2013-02-11 21:47 ` Nicolas Goaziou
@ 2013-02-11 23:20   ` Thorsten Jolitz
  2013-02-12 19:41     ` Nicolas Goaziou
  0 siblings, 1 reply; 6+ messages in thread
From: Thorsten Jolitz @ 2013-02-11 23:20 UTC (permalink / raw)
  To: emacs-orgmode

Nicolas Goaziou <n.goaziou@gmail.com> writes:

Hello,

> I'm not sure about what you want to do with the parse tree. The usual
> function to work with it is `org-element-map'. You may want to have
> a look at its docstring, as it contains examples.

I want to write an 'unusual' backend that does not need anything else
from the exporting framework but the parse-tree as a list. So all I need
would be a workaround for this read-error issue, i.e. a tip how to get
a version of the parse tree that can be used as list in a Lisp program. 

I could not find any explanation for the '#1' and '#2' syntax I
encountered, so I don't really know what its all about. 

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Invalid read syntax (#) in org-element parse tree
  2013-02-11 23:20   ` Thorsten Jolitz
@ 2013-02-12 19:41     ` Nicolas Goaziou
  2013-02-12 20:47       ` Thorsten Jolitz
  0 siblings, 1 reply; 6+ messages in thread
From: Nicolas Goaziou @ 2013-02-12 19:41 UTC (permalink / raw)
  To: Thorsten Jolitz; +Cc: emacs-orgmode

Thorsten Jolitz <tjolitz@gmail.com> writes:

>> I'm not sure about what you want to do with the parse tree. The usual
>> function to work with it is `org-element-map'. You may want to have
>> a look at its docstring, as it contains examples.
>
> I want to write an 'unusual' backend that does not need anything else
> from the exporting framework but the parse-tree as a list. 

Then you don't want the exporting framework at all, only org-element.el.

Anyway I'm confused. The parse-tree _is_ a list. To convince yourself,
evaluate the following in any Org buffer:

  (listp (org-element-parse-buffer))

> So all I need would be a workaround for this read-error issue, i.e.
> a tip how to get a version of the parse tree that can be used as list
> in a Lisp program.

Have you tried (setq print-circle t) ?

> I could not find any explanation for the '#1' and '#2' syntax I
> encountered, so I don't really know what its all about.

It is explained in the info link I gave you.


Regards,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Invalid read syntax (#) in org-element parse tree
  2013-02-12 19:41     ` Nicolas Goaziou
@ 2013-02-12 20:47       ` Thorsten Jolitz
  2013-02-12 20:56         ` Thorsten Jolitz
  0 siblings, 1 reply; 6+ messages in thread
From: Thorsten Jolitz @ 2013-02-12 20:47 UTC (permalink / raw)
  To: emacs-orgmode

Nicolas Goaziou <n.goaziou@gmail.com> writes:

>> I want to write an 'unusual' backend that does not need anything else
>> from the exporting framework but the parse-tree as a list. 
>
> Then you don't want the exporting framework at all, only org-element.el.

yes, only the parser. 

> Anyway I'm confused. The parse-tree _is_ a list. To convince yourself,
> evaluate the following in any Org buffer:
>
>   (listp (org-element-parse-buffer))
>
>> So all I need would be a workaround for this read-error issue, i.e.
>> a tip how to get a version of the parse tree that can be used as list
>> in a Lisp program.
>
> Have you tried (setq print-circle t) ?
>
>> I could not find any explanation for the '#1' and '#2' syntax I
>> encountered, so I don't really know what its all about.
>
> It is explained in the info link I gave you.

I read this link, it says:

,--------------------------------------------------------------------
| To represent shared or circular structures within a complex of Lisp
| objects, you can use the reader constructs ‘#n=’ and ‘#n#’.
`--------------------------------------------------------------------

what is not quite the same like 

,-----------
| :parent #1
`-----------

but with your other hints, I now understand the problem. I wanted to see
how the parse tree looks like, so I printed it out (I did not know about
the existance of 'print-circle' then, but it was set to nil). Then I
tried to experiment with the printed representation, but the #1 syntax
gave me an error. 

When I set 'print-circle' to t, the printed result looks like described
in the info page, with elements like 

[...] :parent #66#)))) #67=(headline [...]


-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Invalid read syntax (#) in org-element parse tree
  2013-02-12 20:47       ` Thorsten Jolitz
@ 2013-02-12 20:56         ` Thorsten Jolitz
  0 siblings, 0 replies; 6+ messages in thread
From: Thorsten Jolitz @ 2013-02-12 20:56 UTC (permalink / raw)
  To: emacs-orgmode

Thorsten Jolitz <tjolitz@gmail.com> writes:

[continuation, prior message sent unfinished by accident]

> but with your other hints, I now understand the problem. I wanted to see
> how the parse tree looks like, so I printed it out (I did not know about
> the existance of 'print-circle' then, but it was set to nil). Then I
> tried to experiment with the printed representation, but the #1 syntax
> gave me an error. 
>
> When I set 'print-circle' to t, the printed result looks like described
> in the info page, with elements like 
>
> [...] :parent #66#)))) #67=(headline [...]

So it was all about the difference between printed representation and
the actual list object, and the special syntax when 'print-circle' is
nil that I could not find in the manual. 

Thanks for the tips, I have to read more about circular lists in Emacs
Lisp, ,first time I see them in action. 

-- 
cheers,
Thorsten

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-02-12 20:57 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-02-11 18:29 Invalid read syntax (#) in org-element parse tree Thorsten Jolitz
2013-02-11 21:47 ` Nicolas Goaziou
2013-02-11 23:20   ` Thorsten Jolitz
2013-02-12 19:41     ` Nicolas Goaziou
2013-02-12 20:47       ` Thorsten Jolitz
2013-02-12 20:56         ` Thorsten Jolitz

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).