Skip to content

Commit db48da7

Browse files
author
robsy121
committed
Added if and set support
1 parent 2cf36cd commit db48da7

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

nginxparser.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import string
22

33
from pyparsing import (
4-
Literal, White, Word, alphanums, CharsNotIn, Forward, Group,
5-
Optional, OneOrMore, ZeroOrMore, pythonStyleComment)
4+
Literal, White, Word, alphanums, CharsNotIn, Forward, Group, SkipTo,
5+
LineEnd, Optional, OneOrMore, ZeroOrMore, pythonStyleComment)
66

77

88
class NginxParser(object):
@@ -17,18 +17,30 @@ class NginxParser(object):
1717
space = White().suppress()
1818
key = Word(alphanums + "_/")
1919
value = CharsNotIn("{};,")
20+
value2 = CharsNotIn(";")
2021
location = CharsNotIn("{};," + string.whitespace)
22+
ifword = Literal("if")
23+
setword = Literal("set")
2124
# modifier for location uri [ = | ~ | ~* | ^~ ]
2225
modifier = Literal("=") | Literal("~*") | Literal("~") | Literal("^~")
2326

2427
# rules
2528
assignment = (key + Optional(space + value) + semicolon)
29+
setblock = (setword + OneOrMore(space + value2) + semicolon)
2630
block = Forward()
31+
ifblock = Forward()
32+
subblock = ZeroOrMore(Group(assignment) | block | ifblock | setblock)
33+
ifblock = (
34+
ifword
35+
+ SkipTo('{')
36+
+ left_bracket
37+
+ subblock
38+
+ right_bracket)
2739

2840
block << Group(
2941
Group(key + Optional(space + modifier) + Optional(space + location))
3042
+ left_bracket
31-
+ Group(ZeroOrMore(Group(assignment) | block))
43+
+ Group(ZeroOrMore(Group(assignment) | block | ifblock | setblock))
3244
+ right_bracket)
3345

3446
script = OneOrMore(Group(assignment) | block).ignore(pythonStyleComment)

0 commit comments

Comments
 (0)