mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-16 21:42:19 +00:00
New substr formatting function.
This commit is contained in:
@@ -115,7 +115,7 @@ get_element_grammar = lark.Lark(
|
|||||||
format_grammar = lark.Lark(
|
format_grammar = lark.Lark(
|
||||||
"""start: function
|
"""start: function
|
||||||
|
|
||||||
function: round | format_length | lower | upper | title | concat | ESCAPED_STRING | NUMBER
|
function: round | format_length | lower | upper | title | concat | substr | ESCAPED_STRING | NUMBER
|
||||||
|
|
||||||
round: "round(" function "," NUMBER ")"
|
round: "round(" function "," NUMBER ")"
|
||||||
format_length: metric_length | imperial_length
|
format_length: metric_length | imperial_length
|
||||||
@@ -125,6 +125,7 @@ format_grammar = lark.Lark(
|
|||||||
upper: "upper(" function ")"
|
upper: "upper(" function ")"
|
||||||
title: "title(" function ")"
|
title: "title(" function ")"
|
||||||
concat: "concat(" function ("," function)* ")"
|
concat: "concat(" function ("," function)* ")"
|
||||||
|
substr: "substr(" function "," SIGNED_INT "," SIGNED_INT ")"
|
||||||
|
|
||||||
// Embed common.lark for packaging
|
// Embed common.lark for packaging
|
||||||
DIGIT: "0".."9"
|
DIGIT: "0".."9"
|
||||||
@@ -181,6 +182,9 @@ class FormatTransformer(lark.Transformer):
|
|||||||
def concat(self, args):
|
def concat(self, args):
|
||||||
return "".join(args)
|
return "".join(args)
|
||||||
|
|
||||||
|
def substr(self, args):
|
||||||
|
return str(args[0])[int(args[1]):int(args[2])]
|
||||||
|
|
||||||
def round(self, args):
|
def round(self, args):
|
||||||
return str(round(float(args[0]) / float(args[1])) * float(args[1]))
|
return str(round(float(args[0]) / float(args[1])) * float(args[1]))
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,8 @@ class TestFormat():
|
|||||||
assert subject.format('title(\"fOo\")') == "Foo"
|
assert subject.format('title(\"fOo\")') == "Foo"
|
||||||
assert subject.format('concat(\"fOo\", \"bar\")') == "fOobar"
|
assert subject.format('concat(\"fOo\", \"bar\")') == "fOobar"
|
||||||
assert subject.format('upper(concat(\"fOo\", \"bar\"))') == "FOOBAR"
|
assert subject.format('upper(concat(\"fOo\", \"bar\"))') == "FOOBAR"
|
||||||
|
assert subject.format('substr(\"foobar\", 1, 2)') == "o"
|
||||||
|
assert subject.format('substr(\"foobar\", 1, -1)') == "ooba"
|
||||||
|
|
||||||
def test_number_formatting(self):
|
def test_number_formatting(self):
|
||||||
assert subject.format("round(123, 5)") == "125.0"
|
assert subject.format("round(123, 5)") == "125.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user