NAME Org::Parser::Tiny - Parse Org documents with as little code (and no non-core deps) as possible VERSION This document describes version 0.005 of Org::Parser::Tiny (from Perl distribution Org-Parser-Tiny), released on 2020-02-07. SYNOPSIS use Org::Parser::Tiny; my $orgp = Org::Parser::Tiny->new(); # parse a file my $doc = $orgp->parse_file("$ENV{HOME}/todo.org"); # parse a string $doc = $orgp->parse(< ["Org::Parser::Tiny::Node"]}, "Headline[title =~ /foo/]" ); Manipulate tree nodes with path-like semantic using Tree::FSMethods::Org: Sample sample.org: some text before the first headline. * header1 :tag: contains an internal link to another part of the document [[blah]] * header2 [#A] [20%] - contains priority and progress cookie (percent-style) * header3 [1/10] - contains progress cookie (fraction-style) ** header3.1 ** header3.2 ** header3.3 * header4 blah blah. * blah Using Tree::FSMethods::Org: use Tree::FSMethods::Org; my $fs = Tree::FSMethods::Org->new( org_file => "sample.org", ); # list nodes right above the root node my %nodes = $fs->ls; # (header1=>{...}, header2=>{...}, header3=>{...}, header4=>{}) # list nodes below header3 $fs->cd("header3"); %nodes = $fs->ls; # ("header3.1"=>{...}, "header3.2"=>{...}, "header3.3"=>{...}) # die, path not found $fs->cd("/header5"); # remove top-level headlines which have "3" $fs->rm("*3*"); DESCRIPTION This module is a more lightweight alternative to . Currently it is very simple and only parses headlines; thus it is several times faster than Org::Parser. I use this to write utilities like sort-org-headlines-tiny or to use it with Tree::FSMethods. NODE CLASSES Org::Parser::Tiny::Node Base class. Methods: * parent * children * as_string Org::Parser::Tiny::Node::Document Root node. Methods: Org::Parser::Tiny::Node::Headline Root node. Methods: * level Integer. * title Str. * is_todo Whether headline has a done or undone todo state. For example, the following headlines will have their is_todo() return true: * TODO foo * DONE bar * is_done Whether headline has a done todo state. For example, the following headlines will have their is_done() return true: * DONE bar * todo_state Todo state or empty string. For example, this headline: * TODO foo will have "TODO" as the todo_state, while: * foo will have "". * tags Array of strings. For example, this headline: * foo :tag1:tag2: will have its "tags()" return "["tag1","tag2"]", while this headline: * foo will have its "tags()" return "[]". * header_as_string First line of headline (the header) as string, without the preamble and children. ATTRIBUTES METHODS new Usage: my $orgp = Org::Parser::Tiny->new; Constructor. Create a new parser instance. parse Usage: my $doc = $orgp->parse($str | $arrayref | $coderef | $filehandle, \%opts); Parse document (which can be contained in a $str, an array of lines $arrayref, a $coderef which will be called for chunks until it returns undef, or a $filehandle. Returns a tree of node objects (of class "Org::Parser::Tiny::Node" and its subclasses "Org::Parser::Tiny::Node::Document" and "Org::Parser::Tiny::Node::Headline"). The tree node complies to Role::TinyCommons::Tree::Node role, so these tools are available: Data::CSel, Tree::Dump, Tree::FSMethods, etc. Will die if there are syntax errors in documents. Known options: parse_file Usage: my $doc = $orgp->parse_file($filename, \%opts); Just like "parse", but will load document from file instead. Known options (aside from those known by parse()): FAQ HOMEPAGE Please visit the project's homepage at . SOURCE Source repository is at . BUGS Please report any bugs or feature requests on the bugtracker website When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature. SEE ALSO Org::Parser, the more fully featured Org parser. . Tree::FSMethods::Org and Tree::FSMethods. AUTHOR perlancar COPYRIGHT AND LICENSE This software is copyright (c) 2020, 2019 by perlancar@cpan.org. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.