Skip to content

Commit 6030ed9

Browse files
committed
Add ast.Placeable
1 parent a962169 commit 6030ed9

File tree

5 files changed

+115
-84
lines changed

5 files changed

+115
-84
lines changed

fluent/syntax/ast.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,11 @@ def __init__(self, value, **kwargs):
187187
super(TextElement, self).__init__(**kwargs)
188188
self.value = value
189189

190+
class Placeable(SyntaxNode):
191+
def __init__(self, expression, **kwargs):
192+
super(Placeable, self).__init__(**kwargs)
193+
self.expression = expression
194+
190195
class Expression(SyntaxNode):
191196
def __init__(self, **kwargs):
192197
super(Expression, self).__init__(**kwargs)

fluent/syntax/ftlstream.py

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,28 @@
22
from .stream import ParserStream
33
from .errors import ParseError
44

5+
6+
ws = (' ', '\t', '\n')
7+
8+
59
class FTLParserStream(ParserStream):
6-
def peek_line_ws(self):
10+
def peek_ws(self):
11+
ch = self.current_peek()
12+
while ch:
13+
if ch not in ws:
14+
break
15+
ch = self.peek()
16+
17+
def peek_inline_ws(self):
718
ch = self.current_peek()
819
while ch:
920
if ch != ' ' and ch != '\t':
1021
break
1122
ch = self.peek()
1223

13-
def skip_ws_lines(self):
24+
def skip_ws(self):
1425
while True:
15-
self.peek_line_ws()
26+
self.peek_inline_ws()
1627

1728
if self.current_peek_is('\n'):
1829
self.skip_to_peek()
@@ -21,7 +32,7 @@ def skip_ws_lines(self):
2132
self.reset_peek()
2233
break
2334

24-
def skip_line_ws(self):
35+
def skip_inline_ws(self):
2536
while self.ch:
2637
if self.ch != ' ' and self.ch != '\t':
2738
break
@@ -66,6 +77,16 @@ def is_number_start(self):
6677

6778
return (cc >= 48 and cc <= 57) or cc == 45
6879

80+
def is_peek_placeable_start(self):
81+
self.peek_ws()
82+
83+
if self.current_peek_is('{'):
84+
self.reset_peek()
85+
return True
86+
87+
self.reset_peek()
88+
return False
89+
6990
def is_peek_next_line_indented(self):
7091
if not self.current_peek_is('\n'):
7192
return False
@@ -87,7 +108,7 @@ def is_peek_next_line_variant_start(self):
87108

88109
ptr = self.get_peek_index()
89110

90-
self.peek_line_ws()
111+
self.peek_inline_ws()
91112

92113
if (self.get_peek_index() - ptr == 0):
93114
self.reset_peek()
@@ -111,7 +132,7 @@ def is_peek_next_line_attribute_start(self):
111132

112133
ptr = self.get_peek_index()
113134

114-
self.peek_line_ws()
135+
self.peek_inline_ws()
115136

116137
if (self.get_peek_index() - ptr == 0):
117138
self.reset_peek()
@@ -132,7 +153,7 @@ def is_peek_next_line_pattern(self):
132153

133154
ptr = self.get_peek_index()
134155

135-
self.peek_line_ws()
156+
self.peek_inline_ws()
136157

137158
if (self.get_peek_index() - ptr == 0):
138159
self.reset_peek()
@@ -158,7 +179,7 @@ def is_peek_next_line_tag_start(self):
158179

159180
ptr = self.get_peek_index()
160181

161-
self.peek_line_ws()
182+
self.peek_inline_ws()
162183

163184
if (self.get_peek_index() - ptr == 0):
164185
self.reset_peek()

0 commit comments

Comments
 (0)