1 package Org::Element::Setting;
6 extends 'Org::Element';
8 our $VERSION = '0.23'; # VERSION
10 has name => (is => 'rw');
11 has args => (is => 'rw');
12 has indent => (is => 'rw');
14 sub indentable_settings {
15 state $data = [qw/TBLFM/];
20 require Org::Document;
21 my ($self, $build_args) = @_;
22 my $doc = $self->document;
23 my $pass = $build_args->{pass} // 1;
25 my $name = uc $self->name;
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') {
43 push @{ $doc->drawer_names }, $_
44 unless $_ ~~ @{ $doc->drawer_names };
47 } elsif ($name eq 'EMAIL') {
48 } elsif ($name eq 'EXPORT_EXCLUDE_TAGS') {
49 } elsif ($name eq 'EXPORT_SELECT_TAGS') {
50 } elsif ($name eq 'FILETAGS') {
52 $args->[0] =~ /^$Org::Document::tags_re$/ or
53 die "Invalid argument for FILETAGS: $args->[0]";
54 for (split /:/, $args->[0]) {
56 push @{ $doc->tags }, $_
57 unless $_ ~~ @{ $doc->tags };
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') {
74 push @{ $doc->priorities }, $_;
77 } elsif ($name eq 'PROPERTY') {
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];
83 } elsif ($name =~ /^(SEQ_TODO|TODO|TYP_TODO)$/) {
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;
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') {
103 die "Unknown setting $name";
111 "#+".uc($self->name),
112 $self->args && @{$self->args} ?
113 " ".Org::Document::__format_args($self->args) : "",
119 # ABSTRACT: Represent Org in-buffer settings
126 Org::Element::Setting - Represent Org in-buffer settings
134 Derived from L<Org::Element>.
148 Indentation (whitespaces before C<#+>), or empty string if none.
152 =for Pod::Coverage as_string BUILD
154 =head2 Org::Element::Setting->indentable_settings -> arrayref
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.
161 Steven Haryanto <stevenharyanto@gmail.com>
163 =head1 COPYRIGHT AND LICENSE
165 This software is copyright (c) 2012 by Steven Haryanto.
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.