]> git.donarmstrong.com Git - liborg-parser-perl.git/blob - lib/Org/Element/Setting.pm
Import original source of Org-Parser 0.23
[liborg-parser-perl.git] / lib / Org / Element / Setting.pm
1 package Org::Element::Setting;
2
3 use 5.010;
4 use locale;
5 use Moo;
6 extends 'Org::Element';
7
8 our $VERSION = '0.23'; # VERSION
9
10 has name => (is => 'rw');
11 has args => (is => 'rw');
12 has indent => (is => 'rw');
13
14 sub indentable_settings {
15     state $data = [qw/TBLFM/];
16     $data;
17 }
18
19 sub BUILD {
20     require Org::Document;
21     my ($self, $build_args) = @_;
22     my $doc = $self->document;
23     my $pass = $build_args->{pass} // 1;
24
25     my $name    = uc $self->name;
26     $self->name($name);
27
28     my $args = $self->args;
29     if      ($name eq 'ARCHIVE') {
30     } elsif ($name eq 'AUTHOR') {
31     } elsif ($name eq 'BABEL') {
32     } elsif ($name eq 'CALL') {
33     } elsif ($name eq 'CAPTION') {
34     } elsif ($name eq 'BIND') {
35     } elsif ($name eq 'CATEGORY') {
36     } elsif ($name eq 'COLUMNS') {
37     } elsif ($name eq 'CONSTANTS') {
38     } elsif ($name eq 'DATE') {
39     } elsif ($name eq 'DESCRIPTION') {
40     } elsif ($name eq 'DRAWERS') {
41         if ($pass == 1) {
42             for (@$args) {
43                 push @{ $doc->drawer_names }, $_
44                     unless $_ ~~ @{ $doc->drawer_names };
45             }
46         }
47     } elsif ($name eq 'EMAIL') {
48     } elsif ($name eq 'EXPORT_EXCLUDE_TAGS') {
49     } elsif ($name eq 'EXPORT_SELECT_TAGS') {
50     } elsif ($name eq 'FILETAGS') {
51         if ($pass == 1) {
52             $args->[0] =~ /^$Org::Document::tags_re$/ or
53                 die "Invalid argument for FILETAGS: $args->[0]";
54             for (split /:/, $args->[0]) {
55                 next unless length;
56                 push @{ $doc->tags }, $_
57                     unless $_ ~~ @{ $doc->tags };
58             }
59         }
60     } elsif ($name eq 'INCLUDE') {
61     } elsif ($name eq 'INDEX') {
62     } elsif ($name eq 'KEYWORDS') {
63     } elsif ($name eq 'LABEL') {
64     } elsif ($name eq 'LANGUAGE') {
65     } elsif ($name eq 'LATEX_HEADER') {
66     } elsif ($name eq 'LINK') {
67     } elsif ($name eq 'LINK_HOME') {
68     } elsif ($name eq 'LINK_UP') {
69     } elsif ($name eq 'OPTIONS') {
70     } elsif ($name eq 'PLOT') {
71     } elsif ($name eq 'PRIORITIES') {
72         if ($pass == 1) {
73             for (@$args) {
74                 push @{ $doc->priorities }, $_;
75             }
76         }
77     } elsif ($name eq 'PROPERTY') {
78         if ($pass == 1) {
79             @$args >= 2 or die "Not enough argument for PROPERTY, minimum 2";
80             my $name = shift @$args;
81             $doc->properties->{$name} = @$args > 1 ? [@$args] : $args->[0];
82         }
83     } elsif ($name =~ /^(SEQ_TODO|TODO|TYP_TODO)$/) {
84         if ($pass == 1) {
85             my $done;
86             for (my $i=0; $i<@$args; $i++) {
87                 my $arg = $args->[$i];
88                 if ($arg eq '|') { $done++; next }
89                 $done++ if !$done && @$args > 1 && $i == @$args-1;
90                 my $ary = $done ? $doc->done_states : $doc->todo_states;
91                 push @$ary, $arg unless $arg ~~ @$ary;
92             }
93         }
94     } elsif ($name eq 'SETUPFILE') {
95     } elsif ($name eq 'STARTUP') {
96     } elsif ($name eq 'STYLE') {
97     } elsif ($name eq 'TAGS') {
98     } elsif ($name eq 'TBLFM') {
99     } elsif ($name eq 'TEXT') {
100     } elsif ($name eq 'TITLE') {
101     } elsif ($name eq 'XSLT') {
102     } else {
103         die "Unknown setting $name";
104     }
105 }
106
107 sub as_string {
108     my ($self) = @_;
109     join("",
110          $self->indent // "",
111          "#+".uc($self->name),
112          $self->args && @{$self->args} ?
113              " ".Org::Document::__format_args($self->args) : "",
114          "\n"
115      );
116 }
117
118 1;
119 # ABSTRACT: Represent Org in-buffer settings
120
121
122 =pod
123
124 =head1 NAME
125
126 Org::Element::Setting - Represent Org in-buffer settings
127
128 =head1 VERSION
129
130 version 0.23
131
132 =head1 DESCRIPTION
133
134 Derived from L<Org::Element>.
135
136 =head1 ATTRIBUTES
137
138 =head2 name => STR
139
140 Setting name.
141
142 =head2 args => ARRAY
143
144 Setting's arguments.
145
146 =head2 indent => STR
147
148 Indentation (whitespaces before C<#+>), or empty string if none.
149
150 =head1 METHODS
151
152 =for Pod::Coverage as_string BUILD
153
154 =head2 Org::Element::Setting->indentable_settings -> arrayref
155
156 Return the list of setting names that can be indented. In Org, some settings can
157 be indented and some can't. Setting names are all in uppercase.
158
159 =head1 AUTHOR
160
161 Steven Haryanto <stevenharyanto@gmail.com>
162
163 =head1 COPYRIGHT AND LICENSE
164
165 This software is copyright (c) 2012 by Steven Haryanto.
166
167 This is free software; you can redistribute it and/or modify it under
168 the same terms as the Perl 5 programming language system itself.
169
170 =cut
171
172
173 __END__
174