Module: Enolib::Grammar

Defined in:
lib/enolib/grammar_regexp.rb

Constant Summary collapse

OPTIONAL =
/([^\n]+?)?/.source
REQUIRED =
/(\S[^\n]*?)/.source
EMPTY =
/()/.source
EMPTY_LINE_INDEX =
1
DIRECT_LINE_CONTINUATION =

| value

/(\|)[^\S\n]*#{OPTIONAL}/.source
DIRECT_LINE_CONTINUATION_OPERATOR_INDEX =
2
DIRECT_LINE_CONTINUATION_VALUE_INDEX =
3
SPACED_LINE_CONTINUATION =

\ value

/(\\)[^\S\n]*#{OPTIONAL}/.source
SPACED_LINE_CONTINUATION_OPERATOR_INDEX =
4
SPACED_LINE_CONTINUATION_VALUE_INDEX =
5
CONTINUATION =
/#{DIRECT_LINE_CONTINUATION}|#{SPACED_LINE_CONTINUATION}/.source
COMMENT =

> Comment

/(>)[^\S\n]*#{OPTIONAL}/.source
COMMENT_OPERATOR_INDEX =
6
COMMENT_VALUE_INDEX =
7
LIST_ITEM =
  • value

/(-)(?!-)[^\S\n]*#{OPTIONAL}/.source
LIST_ITEM_OPERATOR_INDEX =
8
LIST_ITEM_VALUE_INDEX =
9
MULTILINE_FIELD =

– key

/(-{2,})(?!-)[^\S\n]*#{REQUIRED}/.source
MULTILINE_FIELD_OPERATOR_INDEX =
10
MULTILINE_FIELD_KEY_INDEX =
11
SECTION_OPERATOR =

#

/(#+)(?!#)/.source
SECTION_OPERATOR_INDEX =
12
SECTION_KEY_UNESCAPED =

# key

/([^\s`<][^<\n]*?)/.source
SECTION_KEY_UNESCAPED_INDEX =
13
SECTION_KEY_ESCAPE_BEGIN_OPERATOR_INDEX =

# ‘key`

14
SECTION_KEY_ESCAPED =

TODO: Should this exclude the backreference inside the quotes? (as in ((?:(?!1).)+) ) here and elsewhere (probably not because it’s not greedy.?!

/(`+)(?!`)[^\S\n]*(\S[^\n]*?)[^\S\n]*(#{"\\#{SECTION_KEY_ESCAPE_BEGIN_OPERATOR_INDEX}"})/.source
SECTION_KEY_ESCAPED_INDEX =
15
SECTION_KEY_ESCAPE_END_OPERATOR_INDEX =
16
SECTION_KEY =

# key < template # ‘key` < template

/(?:#{SECTION_KEY_UNESCAPED}|#{SECTION_KEY_ESCAPED})/.source
SECTION_TEMPLATE =
/(?:(<(?!<)|<<)[^\S\n]*#{REQUIRED})?/.source
SECTION =
/#{SECTION_OPERATOR}\s*#{SECTION_KEY}[^\S\n]*#{SECTION_TEMPLATE}/.source
SECTION_COPY_OPERATOR_INDEX =
17
SECTION_TEMPLATE_INDEX =
18
EARLY_DETERMINED =
/#{CONTINUATION}|#{COMMENT}|#{LIST_ITEM}|#{MULTILINE_FIELD}|#{SECTION}/.source
KEY_UNESCAPED =

key

/([^\s>#\-`\\|:=<][^\n:=<]*?)/.source
KEY_UNESCAPED_INDEX =
19
KEY_ESCAPE_BEGIN_OPERATOR_INDEX =

‘key`

20
KEY_ESCAPED =
/(`+)(?!`)[^\S\n]*(\S[^\n]*?)[^\S\n]*(#{"\\#{KEY_ESCAPE_BEGIN_OPERATOR_INDEX}"})/.source
KEY_ESCAPED_INDEX =
21
KEY_ESCAPE_END_OPERATOR_INDEX =
22
KEY =
/(?:#{KEY_UNESCAPED}|#{KEY_ESCAPED})/.source
ELEMENT_OR_FIELD =

: : value

/(:)[^\S\n]*#{OPTIONAL}/.source
ELEMENT_OPERATOR_INDEX =
23
FIELD_VALUE_INDEX =
24
FIELDSET_ENTRY =

value

/(=)[^\S\n]*#{OPTIONAL}/.source
FIELDSET_ENTRY_OPERATOR_INDEX =
25
FIELDSET_ENTRY_VALUE_INDEX =
26
COPY =

< template << template

/(<(?!<)|<<)\s*#{REQUIRED}/.source
COPY_OPERATOR_INDEX =
27
TEMPLATE_INDEX =
28
LATE_DETERMINED =
/#{KEY}\s*(?:#{ELEMENT_OR_FIELD}|#{FIELDSET_ENTRY}|#{COPY})/.source
NOT_EMPTY =
/(?:#{EARLY_DETERMINED}|#{LATE_DETERMINED})/.source
REGEX =
/[^\S\n]*(?:#{EMPTY}|#{NOT_EMPTY})[^\S\n]*(?=\n|$)/.freeze