Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion pydbml/definitions/column.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from .generic import expression
from .generic import expression_literal
from .generic import name
from .generic import name_pattern
from .generic import number_literal
from .generic import string_literal
from .reference import ref_inline
Expand All @@ -22,7 +23,7 @@
type_args = ("(" + pp.original_text_for(expression) + ")")

# column type is parsed as a single string, it will be split by blueprint
column_type = pp.Combine((name + pp.Literal('[]')) | (name + '.' + name) | ((name) + type_args[0, 1]))
column_type = pp.Regex(fr'{name_pattern}(\[\]|\.{name_pattern}|(\([^)]*\))?)')

default = pp.CaselessLiteral('default:').suppress() + _ - (
string_literal
Expand Down
1 change: 1 addition & 0 deletions pydbml/definitions/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,4 @@

hex_char = pp.Word(pp.srange('[0-9a-fA-F]'), exact=1)
hex_color = ("#" - (hex_char * 3 ^ hex_char * 6)).leaveWhitespace()
hex_color_pattern = r"#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})" # for use inside pp.Regex()
12 changes: 4 additions & 8 deletions pydbml/definitions/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
pp.ParserElement.set_default_whitespace_chars(' \t\r')

name = pp.Word(pp.unicode.alphanums + '_') | pp.QuotedString('"')
name_pattern = r'(\b\w+\b|\".*?\")' # for use inside pp.Regex()

# Literals

Expand All @@ -13,11 +14,8 @@
^ pp.QuotedString('"', escChar="\\")
^ pp.QuotedString("'''", escChar="\\", multiline=True)
)
expression_literal = pp.Combine(
pp.Suppress('`')
+ pp.CharsNotIn('`')[...]
+ pp.Suppress('`')
).set_parse_action(lambda s, lok, tok: ExpressionBlueprint(tok[0]))

expression_literal = pp.Regex(r"`[^`]*`").set_parse_action(lambda s, lok, tok: ExpressionBlueprint(tok[0]))

boolean_literal = (
pp.CaselessLiteral('true')
Expand All @@ -26,9 +24,7 @@
)
number_literal = (
pp.Word(pp.nums)
^ pp.Combine(
pp.Word(pp.nums) + '.' + pp.Word(pp.nums)
)
^ pp.Regex(r"\d+\.\d+")
)

# Expression
Expand Down
14 changes: 3 additions & 11 deletions pydbml/definitions/reference.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from .common import c
from .common import n
from .generic import name
from .generic import name_pattern
from pydbml.parser.blueprints import ReferenceBlueprint

pp.ParserElement.set_default_whitespace_chars(' \t\r')
Expand Down Expand Up @@ -80,17 +81,8 @@ def parse_ref_settings(s, loc, tok):

ref_settings.set_parse_action(parse_ref_settings)

composite_name = (
'(' + pp.White()[...]
- name + pp.White()[...]
+ (
pp.White()[...] + ","
+ pp.White()[...] + name
+ pp.White()[...]
)[...]
+ ')'
)
name_or_composite = name | pp.Combine(composite_name)
composite_name = pp.Regex(fr'\(\s*{name_pattern}(\s*,\s*{name_pattern}\s*)*\s*\)')
name_or_composite = name | composite_name

ref_cols = (
(
Expand Down
4 changes: 2 additions & 2 deletions pydbml/definitions/table.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from pydbml.parser.blueprints import TableBlueprint
from .column import table_column, table_column_with_properties
from .common import _, hex_color
from .common import _, hex_color_pattern
from .common import _c
from .common import end
from .common import note
Expand All @@ -17,7 +17,7 @@

header_color = (
pp.CaselessLiteral('headercolor:').suppress() + _
- pp.Combine(hex_color)('header_color')
- pp.Regex(hex_color_pattern)('header_color')
)
table_setting = _ + (note('note') | header_color) + _
table_settings = '[' + table_setting + (',' + table_setting)[...] + ']'
Expand Down
8 changes: 4 additions & 4 deletions pydbml/definitions/table_group.py
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
import pyparsing as pp

from pydbml.parser.blueprints import TableGroupBlueprint, NoteBlueprint
from .common import _, note, note_object, hex_color
from .common import _, note, note_object, hex_color_pattern
from .common import _c
from .common import end
from .generic import name
from .generic import name_pattern

pp.ParserElement.set_default_whitespace_chars(' \t\r')

table_name = pp.Combine(name + '.' + name) | name
table_name = pp.Regex(fr'{name_pattern}(\.{name_pattern})?')
note_element = note | note_object

tg_element = _ + (note_element('note') | table_name.set_results_name('items', list_all_matches=True)) + _

tg_body = tg_element[...]


tg_color = (
pp.CaselessLiteral('color:').suppress() + _
- pp.Combine(hex_color)('color')
- pp.Regex(hex_color_pattern)('color')
)
tg_setting = _ + (note('note') | tg_color) + _

Expand Down