Class: Orgmode::Line
- Inherits:
-
Object
- Object
- Orgmode::Line
- Defined in:
- lib/org-ruby/line.rb
Overview
Represents a single line of an orgmode file.
Direct Known Subclasses
Constant Summary collapse
- PropertyDrawerRegexp =
/^\s*:(PROPERTIES|END):/i- PropertyDrawerItemRegexp =
/^\s*:([0-9A-Za-z_\-]+):\s*(.*)$/i- UnorderedListRegexp =
/^\s*(-|\+|\s+[*])\s+/- DefinitionListRegexp =
/^\s*(-|\+|\s+[*])\s+(.*\s+|)::($|\s+)/- OrderedListRegexp =
/^\s*\d+(\.|\))\s+/- HorizontalRuleRegexp =
/^\s*-{5,}\s*$/- BlockRegexp =
/^\s*#\+(BEGIN|END)_(\w*)\s*([0-9A-Za-z_\-]*)?/i- InlineExampleRegexp =
/^\s*:\s/- RawTextRegexp =
/^(\s*)#\+(\w+):\s*/- InBufferSettingRegexp =
/^#\+(\w+):\s*(.*)$/- LinkAbbrevRegexp =
/^\s*#\+LINK:\s*(\w+)\s+(.+)$/i- IncludeFileRegexp =
/^\s*#\+INCLUDE:\s*"([^"]+)"(\s+([^\s]+)\s+(.*))?$/i
Instance Attribute Summary collapse
-
#assigned_paragraph_type ⇒ Object
A line can have its type assigned instead of inferred from its content.
-
#indent ⇒ Object
readonly
The indent level of this line.
-
#major_mode ⇒ Object
readonly
Major modes associate paragraphs with a table, list and so on.
-
#paragraph_type ⇒ Object
readonly
Paragraph type determined for the line.
-
#parser ⇒ Object
readonly
Backpointer to the parser that owns this line.
Instance Method Summary collapse
- #begin_block? ⇒ Boolean
- #blank? ⇒ Boolean
- #block_lang ⇒ Object
- #block_type ⇒ Object
- #code_block? ⇒ Boolean
-
#comment? ⇒ Boolean
Tests if a line is a comment.
- #definition_list? ⇒ Boolean
- #determine_major_mode ⇒ Object
-
#determine_paragraph_type ⇒ Object
Determines the paragraph type of the current line.
- #end_block? ⇒ Boolean
- #horizontal_rule? ⇒ Boolean
-
#in_buffer_setting? ⇒ Boolean
call-seq: line.in_buffer_setting? => boolean line.in_buffer_setting? { |key, value| … }.
- #include_file? ⇒ Boolean
- #include_file_options ⇒ Object
- #include_file_path ⇒ Object
-
#initialize(line, parser = nil) ⇒ Line
constructor
A new instance of Line.
-
#inline_example? ⇒ Boolean
Test if the line matches the “inline example” case: the first character on the line is a colon.
- #link_abbrev? ⇒ Boolean
- #link_abbrev_data ⇒ Object
-
#metadata? ⇒ Boolean
Tests if a line contains metadata instead of actual content.
- #nonprinting? ⇒ Boolean
- #ordered_list? ⇒ Boolean
-
#output_text ⇒ Object
Extracts meaningful text and excludes org-mode markup, like identifiers for lists or headings.
- #plain_list? ⇒ Boolean
- #plain_text? ⇒ Boolean
- #property_drawer? ⇒ Boolean
- #property_drawer_begin_block? ⇒ Boolean
- #property_drawer_end_block? ⇒ Boolean
- #property_drawer_item ⇒ Object
- #property_drawer_item? ⇒ Boolean
-
#raw_text? ⇒ Boolean
Checks if this line is raw text.
- #raw_text_tag ⇒ Object
- #strip_ordered_list_tag ⇒ Object
- #strip_raw_text_tag ⇒ Object
- #strip_unordered_list_tag ⇒ Object
- #table? ⇒ Boolean
-
#table_header? ⇒ Boolean
Checks if this line is a table header.
- #table_row? ⇒ Boolean
- #table_separator? ⇒ Boolean
- #to_s ⇒ Object
- #unordered_list? ⇒ Boolean
Constructor Details
#initialize(line, parser = nil) ⇒ Line
Returns a new instance of Line.
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/org-ruby/line.rb', line 27 def initialize(line, parser = nil) @parser = parser @line = line @indent = 0 @line =~ /\s*/ determine_paragraph_type determine_major_mode @assigned_paragraph_type = nil @indent = $&.length unless blank? end |
Instance Attribute Details
#assigned_paragraph_type ⇒ Object
A line can have its type assigned instead of inferred from its content. For example, something that parses as a “table” on its own (“| one | two|n”) may just be a paragraph if it’s inside #+BEGIN_EXAMPLE. Set this property on the line to assign its type. This will then affect the value of paragraph_type.
25 26 27 |
# File 'lib/org-ruby/line.rb', line 25 def assigned_paragraph_type @assigned_paragraph_type end |
#indent ⇒ Object (readonly)
The indent level of this line. this is important to properly translate nested lists from orgmode to textile. TODO 2009-12-20 bdewey: Handle tabs
9 10 11 |
# File 'lib/org-ruby/line.rb', line 9 def indent @indent end |
#major_mode ⇒ Object (readonly)
Major modes associate paragraphs with a table, list and so on.
18 19 20 |
# File 'lib/org-ruby/line.rb', line 18 def major_mode @major_mode end |
#paragraph_type ⇒ Object (readonly)
Paragraph type determined for the line.
15 16 17 |
# File 'lib/org-ruby/line.rb', line 15 def paragraph_type @paragraph_type end |
#parser ⇒ Object (readonly)
Backpointer to the parser that owns this line.
12 13 14 |
# File 'lib/org-ruby/line.rb', line 12 def parser @parser end |
Instance Method Details
#begin_block? ⇒ Boolean
163 164 165 |
# File 'lib/org-ruby/line.rb', line 163 def begin_block? @line =~ BlockRegexp && $1 =~ /BEGIN/i end |
#blank? ⇒ Boolean
84 85 86 |
# File 'lib/org-ruby/line.rb', line 84 def blank? check_assignment_or_regexp(:blank, /^\s*$/) end |
#block_lang ⇒ Object
175 176 177 |
# File 'lib/org-ruby/line.rb', line 175 def block_lang $3 if @line =~ BlockRegexp end |
#block_type ⇒ Object
171 172 173 |
# File 'lib/org-ruby/line.rb', line 171 def block_type $2 if @line =~ BlockRegexp end |
#code_block? ⇒ Boolean
179 180 181 |
# File 'lib/org-ruby/line.rb', line 179 def code_block? block_type =~ /^(EXAMPLE|SRC)$/i end |
#comment? ⇒ Boolean
Tests if a line is a comment.
43 44 45 46 47 |
# File 'lib/org-ruby/line.rb', line 43 def comment? return @assigned_paragraph_type == :comment if @assigned_paragraph_type return block_type.casecmp("COMMENT") if begin_block? or end_block? return @line =~ /^#/ end |
#definition_list? ⇒ Boolean
104 105 106 |
# File 'lib/org-ruby/line.rb', line 104 def definition_list? check_assignment_or_regexp(:definition_list, DefinitionListRegexp) end |
#determine_major_mode ⇒ Object
294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'lib/org-ruby/line.rb', line 294 def determine_major_mode @major_mode = \ case when definition_list? # order is important! A definition_list is also an unordered_list! :definition_list when ordered_list? :ordered_list when unordered_list? :unordered_list when table? :table end end |
#determine_paragraph_type ⇒ Object
Determines the paragraph type of the current line.
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 |
# File 'lib/org-ruby/line.rb', line 252 def determine_paragraph_type @paragraph_type = \ case when blank? :blank when definition_list? # order is important! A definition_list is also an unordered_list! :definition_term when (ordered_list? or unordered_list?) :list_item when property_drawer_begin_block? :property_drawer_begin_block when property_drawer_end_block? :property_drawer_end_block when property_drawer_item? :property_drawer_item when :metadata when block_type case block_type.downcase.to_sym when :center, :comment, :example, :html, :quote, :src block_type.downcase.to_sym else :comment end when raw_text? # order is important! Raw text can be also a comment :raw_text when comment? :comment when table_separator? :table_separator when table_row? :table_row when table_header? :table_header when inline_example? :inline_example when horizontal_rule? :horizontal_rule else :paragraph end end |
#end_block? ⇒ Boolean
167 168 169 |
# File 'lib/org-ruby/line.rb', line 167 def end_block? @line =~ BlockRegexp && $1 =~ /END/i end |
#horizontal_rule? ⇒ Boolean
120 121 122 |
# File 'lib/org-ruby/line.rb', line 120 def horizontal_rule? check_assignment_or_regexp(:horizontal_rule, HorizontalRuleRegexp) end |
#in_buffer_setting? ⇒ Boolean
call-seq:
line.in_buffer_setting? => boolean
line.in_buffer_setting? { |key, value| ... }
Called without a block, this method determines if the line contains an in-buffer setting. Called with a block, the block will get called if the line contains an in-buffer setting with the key and value for the setting.
216 217 218 219 220 221 222 223 224 225 |
# File 'lib/org-ruby/line.rb', line 216 def in_buffer_setting? return false if @assigned_paragraph_type && @assigned_paragraph_type != :comment if block_given? then if @line =~ InBufferSettingRegexp yield $1, $2 end else @line =~ InBufferSettingRegexp end end |
#include_file? ⇒ Boolean
239 240 241 |
# File 'lib/org-ruby/line.rb', line 239 def include_file? @line =~ IncludeFileRegexp end |
#include_file_options ⇒ Object
247 248 249 |
# File 'lib/org-ruby/line.rb', line 247 def [$3, $4] if @line =~ IncludeFileRegexp and !$2.nil? end |
#include_file_path ⇒ Object
243 244 245 |
# File 'lib/org-ruby/line.rb', line 243 def include_file_path File. $1 if @line =~ IncludeFileRegexp end |
#inline_example? ⇒ Boolean
Test if the line matches the “inline example” case: the first character on the line is a colon.
187 188 189 |
# File 'lib/org-ruby/line.rb', line 187 def inline_example? check_assignment_or_regexp(:inline_example, InlineExampleRegexp) end |
#link_abbrev? ⇒ Boolean
229 230 231 |
# File 'lib/org-ruby/line.rb', line 229 def link_abbrev? @line =~ LinkAbbrevRegexp end |
#link_abbrev_data ⇒ Object
233 234 235 |
# File 'lib/org-ruby/line.rb', line 233 def link_abbrev_data [$1, $2] if @line =~ LinkAbbrevRegexp end |
#metadata? ⇒ Boolean
Tests if a line contains metadata instead of actual content.
76 77 78 |
# File 'lib/org-ruby/line.rb', line 76 def check_assignment_or_regexp(:metadata, /^\s*(CLOCK|DEADLINE|START|CLOSED|SCHEDULED):/) end |
#nonprinting? ⇒ Boolean
80 81 82 |
# File 'lib/org-ruby/line.rb', line 80 def nonprinting? comment? || || begin_block? || end_block? || include_file? end |
#ordered_list? ⇒ Boolean
110 111 112 |
# File 'lib/org-ruby/line.rb', line 110 def ordered_list? check_assignment_or_regexp(:ordered_list, OrderedListRegexp) end |
#output_text ⇒ Object
Extracts meaningful text and excludes org-mode markup, like identifiers for lists or headings.
126 127 128 129 130 131 132 |
# File 'lib/org-ruby/line.rb', line 126 def output_text return strip_ordered_list_tag if ordered_list? return strip_unordered_list_tag if unordered_list? return @line.sub(InlineExampleRegexp, "") if inline_example? return strip_raw_text_tag if raw_text? return @line end |
#plain_list? ⇒ Boolean
88 89 90 |
# File 'lib/org-ruby/line.rb', line 88 def plain_list? ordered_list? or unordered_list? or definition_list? end |
#plain_text? ⇒ Boolean
134 135 136 |
# File 'lib/org-ruby/line.rb', line 134 def plain_text? not and not blank? and not plain_list? end |
#property_drawer? ⇒ Boolean
59 60 61 |
# File 'lib/org-ruby/line.rb', line 59 def property_drawer? check_assignment_or_regexp(:property_drawer, PropertyDrawerRegexp) end |
#property_drawer_begin_block? ⇒ Boolean
51 52 53 |
# File 'lib/org-ruby/line.rb', line 51 def property_drawer_begin_block? @line =~ PropertyDrawerRegexp && $1 =~ /PROPERTIES/ end |
#property_drawer_end_block? ⇒ Boolean
55 56 57 |
# File 'lib/org-ruby/line.rb', line 55 def property_drawer_end_block? @line =~ PropertyDrawerRegexp && $1 =~ /END/ end |
#property_drawer_item ⇒ Object
69 70 71 72 73 |
# File 'lib/org-ruby/line.rb', line 69 def property_drawer_item @line =~ PropertyDrawerItemRegexp [$1, $2] end |
#property_drawer_item? ⇒ Boolean
65 66 67 |
# File 'lib/org-ruby/line.rb', line 65 def property_drawer_item? @line =~ PropertyDrawerItemRegexp end |
#raw_text? ⇒ Boolean
Checks if this line is raw text.
194 195 196 |
# File 'lib/org-ruby/line.rb', line 194 def raw_text? check_assignment_or_regexp(:raw_text, RawTextRegexp) end |
#raw_text_tag ⇒ Object
198 199 200 |
# File 'lib/org-ruby/line.rb', line 198 def raw_text_tag $2.upcase if @line =~ RawTextRegexp end |
#strip_ordered_list_tag ⇒ Object
114 115 116 |
# File 'lib/org-ruby/line.rb', line 114 def strip_ordered_list_tag @line.sub(OrderedListRegexp, "") end |
#strip_raw_text_tag ⇒ Object
202 203 204 |
# File 'lib/org-ruby/line.rb', line 202 def strip_raw_text_tag @line.sub(RawTextRegexp) { |match| $1 } end |
#strip_unordered_list_tag ⇒ Object
98 99 100 |
# File 'lib/org-ruby/line.rb', line 98 def strip_unordered_list_tag @line.sub(UnorderedListRegexp, "") end |
#table? ⇒ Boolean
157 158 159 |
# File 'lib/org-ruby/line.rb', line 157 def table? table_row? or table_separator? or table_header? end |
#table_header? ⇒ Boolean
Checks if this line is a table header.
153 154 155 |
# File 'lib/org-ruby/line.rb', line 153 def table_header? @assigned_paragraph_type == :table_header end |
#table_row? ⇒ Boolean
138 139 140 141 142 |
# File 'lib/org-ruby/line.rb', line 138 def table_row? # for an org-mode table, the first non-whitespace character is a # | (pipe). check_assignment_or_regexp(:table_row, /^\s*\|/) end |
#table_separator? ⇒ Boolean
144 145 146 147 148 149 150 |
# File 'lib/org-ruby/line.rb', line 144 def table_separator? # an org-mode table separator has the first non-whitespace # character as a | (pipe), then consists of nothing else other # than pipes, hyphens, and pluses. check_assignment_or_regexp(:table_separator, /^\s*\|[-\|\+]*\s*$/) end |
#to_s ⇒ Object
38 39 40 |
# File 'lib/org-ruby/line.rb', line 38 def to_s return @line end |
#unordered_list? ⇒ Boolean
94 95 96 |
# File 'lib/org-ruby/line.rb', line 94 def unordered_list? check_assignment_or_regexp(:unordered_list, UnorderedListRegexp) end |