summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-04-29 20:39:25 +0200
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2021-04-29 20:39:25 +0200
commita5ddb05e399929e778f501c864c894b32da3c354 (patch)
tree49a00cd53469419504f7e28c5bdbe69aa9bd0d2f
parentd0e544bba4a204875b8357bb2d7e29d9ce29a461 (diff)
Clears up the multiple text rules.
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateLexer.g42
-rw-r--r--src/core/src/tonkadur/fate/v1/parser/FateParser.g4150
2 files changed, 51 insertions, 101 deletions
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
index d5f21cd..c9283c7 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4
@@ -55,7 +55,7 @@ END_KW: L_PAREN 'end)';
EQUALS_KW: L_PAREN ('equals'|'='|'=='|'eq') SEP+;
EXTENSION_FIRST_LEVEL_KW: L_PAREN '@';
EXTRA_INSTRUCTION_KW: L_PAREN '#';
-JOIN_KW: L_PAREN 'join' SEP+;
+JOIN_KW: L_PAREN ('text'US)? 'join' SEP+;
EXTRA_COMPUTATION_KW: L_PAREN '$';
FALSE_KW: L_PAREN 'false)';
IGNORE_ERROR_KW: L_PAREN 'ignore'US('error'|'warning') SEP+;
diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
index cba5111..7736318 100644
--- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
+++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4
@@ -2646,12 +2646,12 @@ returns [TextNode result]
final List<TextNode> content = new ArrayList();
}
:
- first=text
+ first=text_value
{
content.add(($first.result));
}
(
- (WS+ next_a=text)
+ (WS+ next_a=text_value)
{
if (!(content.get(content.size() - 1) instanceof Newline))
{
@@ -2671,7 +2671,7 @@ returns [TextNode result]
content.add(($next_a.result));
}
|
- (next_b=text)
+ (next_b=text_value)
{
content.add(($next_b.result));
}
@@ -2704,11 +2704,11 @@ catch [final Throwable e]
}
}
-text
+actual_text_value
returns [TextNode result]:
- sentence
+ TEXT_KW paragraph WS* R_PAREN
{
- $result = ValueToText.build(($sentence.result));
+ $result = ($paragraph.result);
}
| JOIN_KW value WS+ non_text_value WS* R_PAREN
@@ -2802,6 +2802,25 @@ returns [TextNode result]:
)
);
}
+;
+catch [final Throwable e]
+{
+ if ((e.getMessage() == null) || !e.getMessage().startsWith("Require"))
+ {
+ throw new ParseCancellationException(CONTEXT.toString() + ((e.getMessage() == null) ? "" : e.getMessage()), e);
+ }
+ else
+ {
+ throw new ParseCancellationException(e);
+ }
+}
+
+value_as_text
+returns [TextNode result]:
+ sentence
+ {
+ $result = ValueToText.build(($sentence.result));
+ }
| non_text_value
{
@@ -2820,6 +2839,29 @@ catch [final Throwable e]
}
}
+text_value
+returns [TextNode result]:
+ actual_text_value
+ {
+ $result = $actual_text_value.result;
+ }
+
+ | value_as_text
+ {
+ $result = $value_as_text.result;
+ }
+;
+catch [final Throwable e]
+{
+ if ((e.getMessage() == null) || !e.getMessage().startsWith("Require"))
+ {
+ throw new ParseCancellationException(CONTEXT.toString() + ((e.getMessage() == null) ? "" : e.getMessage()), e);
+ }
+ else
+ {
+ throw new ParseCancellationException(e);
+ }
+}
sentence
returns [Computation result]
@init
@@ -3935,101 +3977,9 @@ returns [Computation result]
$result = ($sentence.result);
}
- | TEXT_KW paragraph WS* R_PAREN
- {
- $result = ($paragraph.result);
- }
-
- | JOIN_KW value WS+ non_text_value WS* R_PAREN
- {
- $result =
- TextJoin.build
- (
- CONTEXT.get_origin_at
- (
- ($JOIN_KW.getLine()),
- ($JOIN_KW.getCharPositionInLine())
- ),
- ($non_text_value.result),
- ($value.result)
- );
- }
-
- | ENABLE_TEXT_EFFECT_KW WORD WS+ paragraph WS* R_PAREN
- {
- final TextEffect effect;
-
- effect =
- WORLD.text_effects().get
- (
- CONTEXT.get_origin_at
- (
- ($WORD.getLine()),
- ($WORD.getCharPositionInLine())
- ),
- ($WORD.text)
- );
-
- $result =
- TextWithEffect.build
- (
- CONTEXT.get_origin_at
- (
- ($WORD.getLine()),
- ($WORD.getCharPositionInLine())
- ),
- effect,
- new ArrayList<Computation>(),
- ($paragraph.result)
- );
- }
-
- | ENABLE_TEXT_EFFECT_KW
- L_PAREN
- WORD WS+
- value_list WS*
- R_PAREN WS+
- paragraph WS*
- R_PAREN
- {
- final TextEffect effect;
-
- effect =
- WORLD.text_effects().get
- (
- CONTEXT.get_origin_at
- (
- ($WORD.getLine()),
- ($WORD.getCharPositionInLine())
- ),
- ($WORD.text)
- );
-
- $result =
- TextWithEffect.build
- (
- CONTEXT.get_origin_at
- (
- ($ENABLE_TEXT_EFFECT_KW.getLine()),
- ($ENABLE_TEXT_EFFECT_KW.getCharPositionInLine())
- ),
- effect,
- ($value_list.result),
- ($paragraph.result)
- );
- }
-
- | NEWLINE_KW
+ | actual_text_value
{
- $result =
- new Newline
- (
- CONTEXT.get_origin_at
- (
- ($NEWLINE_KW.getLine()),
- ($NEWLINE_KW.getCharPositionInLine())
- )
- );
+ $result = ($actual_text_value.result);
}
| non_text_value