From 22b3bf35e5e120bcfb6df317d11805fd5e83f53e Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Tue, 29 Dec 2020 02:54:35 +0100 Subject: ... --- src/core/src/tonkadur/fate/v1/lang/TextEffect.java | 4 +- src/core/src/tonkadur/fate/v1/lang/World.java | 2 +- .../lang/computation/ExtraComputationInstance.java | 7 +- .../tonkadur/fate/v1/lang/computation/Newline.java | 4 +- .../fate/v1/lang/computation/Paragraph.java | 12 +- .../fate/v1/lang/computation/TextWithEffect.java | 12 +- .../fate/v1/lang/computation/ValueToText.java | 18 +-- .../tonkadur/fate/v1/lang/instruction/Assert.java | 10 +- .../tonkadur/fate/v1/lang/instruction/Display.java | 8 +- .../fate/v1/lang/instruction/EventOption.java | 134 +++++++++++++++++++++ .../lang/instruction/ExtraInstructionInstance.java | 6 +- .../fate/v1/lang/instruction/PlayerInput.java | 134 --------------------- .../fate/v1/lang/instruction/PlayerOption.java | 78 ------------ .../fate/v1/lang/instruction/PromptInteger.java | 2 +- .../fate/v1/lang/instruction/PromptString.java | 2 +- .../fate/v1/lang/instruction/TextOption.java | 78 ++++++++++++ .../fate/v1/lang/meta/ComputationVisitor.java | 2 +- .../fate/v1/lang/meta/ExtraComputation.java | 36 ++++++ .../fate/v1/lang/meta/ExtraInstruction.java | 37 +++++- .../fate/v1/lang/meta/InstructionVisitor.java | 4 +- .../tonkadur/fate/v1/lang/meta/RichTextNode.java | 25 ---- .../src/tonkadur/fate/v1/lang/meta/TextNode.java | 25 ++++ src/core/src/tonkadur/fate/v1/lang/type/Type.java | 6 +- src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 | 8 +- src/core/src/tonkadur/fate/v1/parser/FateParser.g4 | 78 ++++++------ .../v1/compiler/fate/v1/ComputationCompiler.java | 37 ++++++ .../v1/compiler/fate/v1/InstructionCompiler.java | 19 +-- .../wyrd/v1/lang/computation/ExtraComputation.java | 74 ++++++++++++ .../tonkadur/jsonexport/ComputationCompiler.java | 33 ++++- .../tonkadur/jsonexport/InstructionCompiler.java | 18 +-- 30 files changed, 566 insertions(+), 347 deletions(-) create mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/EventOption.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/PlayerInput.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/PlayerOption.java create mode 100644 src/core/src/tonkadur/fate/v1/lang/instruction/TextOption.java delete mode 100644 src/core/src/tonkadur/fate/v1/lang/meta/RichTextNode.java create mode 100644 src/core/src/tonkadur/fate/v1/lang/meta/TextNode.java create mode 100644 src/core/src/tonkadur/wyrd/v1/lang/computation/ExtraComputation.java diff --git a/src/core/src/tonkadur/fate/v1/lang/TextEffect.java b/src/core/src/tonkadur/fate/v1/lang/TextEffect.java index 2ac4000..930218f 100644 --- a/src/core/src/tonkadur/fate/v1/lang/TextEffect.java +++ b/src/core/src/tonkadur/fate/v1/lang/TextEffect.java @@ -60,7 +60,9 @@ public class TextEffect extends DeclaredEntity final String name ) { - super(origin, signature, name); + super(origin, name); + + this.signature = signature; } /**** Accessors ************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/World.java b/src/core/src/tonkadur/fate/v1/lang/World.java index f6caa7c..34b2364 100644 --- a/src/core/src/tonkadur/fate/v1/lang/World.java +++ b/src/core/src/tonkadur/fate/v1/lang/World.java @@ -318,7 +318,7 @@ public class World //type_collection.add(Type.LIST); //type_collection.add(Type.SET); type_collection.add(Type.STRING); - type_collection.add(Type.RICH_TEXT); + type_collection.add(Type.TEXT); } catch (final Throwable t) { diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ExtraComputationInstance.java b/src/core/src/tonkadur/fate/v1/lang/computation/ExtraComputationInstance.java index d46d20f..5f5b572 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/ExtraComputationInstance.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/ExtraComputationInstance.java @@ -4,9 +4,12 @@ import java.util.List; import tonkadur.parser.Context; import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; import tonkadur.fate.v1.lang.meta.Computation; +import tonkadur.fate.v1.lang.meta.ComputationVisitor; import tonkadur.fate.v1.lang.meta.ExtraComputation; +import tonkadur.fate.v1.lang.meta.RecurrentChecks; public class ExtraComputationInstance extends Computation { @@ -24,7 +27,7 @@ public class ExtraComputationInstance extends Computation final List parameters ) { - super(origin, computation.get_result_type()); + super(origin, computation.get_returned_type()); this.computation = computation; this.parameters = parameters; @@ -34,7 +37,7 @@ public class ExtraComputationInstance extends Computation /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - public ExtraComputationInstance build + public static ExtraComputationInstance build ( final Origin origin, final ExtraComputation computation, diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java b/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java index 9a5b880..b05021d 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/Newline.java @@ -3,9 +3,9 @@ package tonkadur.fate.v1.lang.computation; import tonkadur.parser.Origin; import tonkadur.fate.v1.lang.meta.ComputationVisitor; -import tonkadur.fate.v1.lang.meta.RichTextNode; +import tonkadur.fate.v1.lang.meta.TextNode; -public class Newline extends RichTextNode +public class Newline extends TextNode { /***************************************************************************/ /**** PUBLIC ***************************************************************/ diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java b/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java index 62c72f3..26b08b4 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/Paragraph.java @@ -5,14 +5,14 @@ import java.util.List; import tonkadur.parser.Origin; import tonkadur.fate.v1.lang.meta.ComputationVisitor; -import tonkadur.fate.v1.lang.meta.RichTextNode; +import tonkadur.fate.v1.lang.meta.TextNode; -public class Paragraph extends RichTextNode +public class Paragraph extends TextNode { /***************************************************************************/ /**** MEMBERS **************************************************************/ /***************************************************************************/ - protected final List content; + protected final List content; /***************************************************************************/ /**** PROTECTED ************************************************************/ @@ -26,7 +26,7 @@ public class Paragraph extends RichTextNode public Paragraph ( final Origin origin, - final List content + final List content ) { super(origin); @@ -42,7 +42,7 @@ public class Paragraph extends RichTextNode cv.visit_paragraph(this); } - public List get_content () + public List get_content () { return content; } @@ -55,7 +55,7 @@ public class Paragraph extends RichTextNode sb.append("(Paragraph "); - for (final RichTextNode text: content) + for (final TextNode text: content) { sb.append(content.toString()); } diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java b/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java index 9829d37..17fda37 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/TextWithEffect.java @@ -8,18 +8,18 @@ import tonkadur.parser.ParsingError; import tonkadur.fate.v1.lang.TextEffect; import tonkadur.fate.v1.lang.meta.ComputationVisitor; -import tonkadur.fate.v1.lang.meta.RichTextNode; +import tonkadur.fate.v1.lang.meta.TextNode; import tonkadur.fate.v1.lang.meta.Computation; import tonkadur.fate.v1.lang.meta.RecurrentChecks; -public class TextWithEffect extends RichTextNode +public class TextWithEffect extends TextNode { /***************************************************************************/ /**** MEMBERS **************************************************************/ /***************************************************************************/ protected final TextEffect effect; protected final List parameters; - protected final RichTextNode text; + protected final TextNode text; /***************************************************************************/ /**** PROTECTED ************************************************************/ @@ -30,7 +30,7 @@ public class TextWithEffect extends RichTextNode final Origin origin, final TextEffect effect, final List parameters, - final RichTextNode text + final TextNode text ) { super(origin); @@ -49,7 +49,7 @@ public class TextWithEffect extends RichTextNode final Origin origin, final TextEffect effect, final List parameters, - final RichTextNode text + final TextNode text ) throws ParsingError { @@ -81,7 +81,7 @@ public class TextWithEffect extends RichTextNode return parameters; } - public RichTextNode get_text () + public TextNode get_text () { return text; } diff --git a/src/core/src/tonkadur/fate/v1/lang/computation/ValueToText.java b/src/core/src/tonkadur/fate/v1/lang/computation/ValueToText.java index b21024b..e81f8cd 100644 --- a/src/core/src/tonkadur/fate/v1/lang/computation/ValueToText.java +++ b/src/core/src/tonkadur/fate/v1/lang/computation/ValueToText.java @@ -8,10 +8,10 @@ import tonkadur.fate.v1.error.IncomparableTypeException; import tonkadur.fate.v1.lang.type.Type; import tonkadur.fate.v1.lang.meta.ComputationVisitor; -import tonkadur.fate.v1.lang.meta.RichTextNode; +import tonkadur.fate.v1.lang.meta.TextNode; import tonkadur.fate.v1.lang.meta.Computation; -public class ValueToRichText extends RichTextNode +public class ValueToText extends TextNode { /***************************************************************************/ /**** MEMBERS **************************************************************/ @@ -22,7 +22,7 @@ public class ValueToRichText extends RichTextNode /**** PROTECTED ************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - protected ValueToRichText (final Computation value) + protected ValueToText (final Computation value) { super(value.get_origin()); @@ -33,7 +33,7 @@ public class ValueToRichText extends RichTextNode /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - public static ValueToRichText build (final Computation value) + public static ValueToText build (final Computation value) throws IncompatibleTypeException, IncomparableTypeException @@ -45,14 +45,14 @@ public class ValueToRichText extends RichTextNode if ( value_base_type.equals(Type.STRING) - || value_base_type.equals(Type.RICH_TEXT) + || value_base_type.equals(Type.TEXT) ) { - return new ValueToRichText(value); + return new ValueToText(value); } return - new ValueToRichText + new ValueToText ( Cast.build ( @@ -69,7 +69,7 @@ public class ValueToRichText extends RichTextNode public void get_visited_by (final ComputationVisitor cv) throws Throwable { - cv.visit_value_to_rich_text(this); + cv.visit_value_to_text(this); } public Computation get_value () @@ -83,7 +83,7 @@ public class ValueToRichText extends RichTextNode { final StringBuilder sb = new StringBuilder(); - sb.append("(ValueToRichText "); + sb.append("(ValueToText "); sb.append(value.toString()); sb.append(")"); diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java b/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java index d487d38..4a6e7bc 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/Assert.java @@ -5,7 +5,7 @@ import tonkadur.parser.ParsingError; import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.RichTextNode; +import tonkadur.fate.v1.lang.meta.TextNode; import tonkadur.fate.v1.lang.meta.Computation; import tonkadur.fate.v1.lang.meta.RecurrentChecks; @@ -17,7 +17,7 @@ public class Assert extends Instruction /**** MEMBERS **************************************************************/ /***************************************************************************/ protected final Computation condition; - protected final RichTextNode message; + protected final TextNode message; /***************************************************************************/ /**** PROTECTED ************************************************************/ @@ -27,7 +27,7 @@ public class Assert extends Instruction ( final Origin origin, final Computation condition, - final RichTextNode message + final TextNode message ) { super(origin); @@ -44,7 +44,7 @@ public class Assert extends Instruction ( final Origin origin, final Computation condition, - final RichTextNode message + final TextNode message ) throws ParsingError { @@ -66,7 +66,7 @@ public class Assert extends Instruction return condition; } - public RichTextNode get_message () + public TextNode get_message () { return message; } diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java b/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java index 5e95601..5e85d79 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/Display.java @@ -10,14 +10,14 @@ import tonkadur.fate.v1.lang.type.Type; import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.RichTextNode; +import tonkadur.fate.v1.lang.meta.TextNode; public class Display extends Instruction { /***************************************************************************/ /**** MEMBERS **************************************************************/ /***************************************************************************/ - protected final RichTextNode content; + protected final TextNode content; /***************************************************************************/ /**** PROTECTED ************************************************************/ @@ -26,7 +26,7 @@ public class Display extends Instruction public Display ( final Origin origin, - final RichTextNode content + final TextNode content ) { super(origin); @@ -47,7 +47,7 @@ public class Display extends Instruction iv.visit_display(this); } - public RichTextNode get_content () + public TextNode get_content () { return content; } diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/EventOption.java b/src/core/src/tonkadur/fate/v1/lang/instruction/EventOption.java new file mode 100644 index 0000000..8cfc0a9 --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/EventOption.java @@ -0,0 +1,134 @@ +package tonkadur.fate.v1.lang.instruction; + +import java.util.ArrayList; +import java.util.List; + +import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; + +import tonkadur.fate.v1.lang.Event; + +import tonkadur.fate.v1.lang.type.Type; + +import tonkadur.fate.v1.lang.meta.InstructionVisitor; +import tonkadur.fate.v1.lang.meta.Instruction; +import tonkadur.fate.v1.lang.meta.Computation; +import tonkadur.fate.v1.lang.meta.RecurrentChecks; + +public class EventOption extends Instruction +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final Event input_event; + protected final List params; + protected final List effects; + + /***************************************************************************/ + /**** PROTECTED ************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + protected EventOption + ( + final Origin origin, + final Event input_event, + final List params, + final List effects + ) + { + super(origin); + + this.input_event = input_event; + this.params = params; + this.effects = effects; + } + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + public EventOption + ( + final Origin origin, + final Event input_event, + final List effects + ) + { + super(origin); + + this.input_event = input_event; + this.params = new ArrayList(); + this.effects = effects; + } + + public static EventOption build + ( + final Origin origin, + final Event event, + final List parameters, + final List effects + ) + throws ParsingError + { + RecurrentChecks.assert_computations_matches_signature + ( + origin, + parameters, + event.get_signature() + ); + + return new EventOption(origin, event, parameters, effects); + } + + /**** Accessors ************************************************************/ + @Override + public void get_visited_by (final InstructionVisitor iv) + throws Throwable + { + iv.visit_event_option(this); + } + + public Event get_input_event () + { + return input_event; + } + + public List get_parameters () + { + return params; + } + + public List get_effects () + { + return effects; + } + + /**** Misc. ****************************************************************/ + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append("(EventOption ("); + sb.append(System.lineSeparator()); + sb.append(input_event.toString()); + + for (final Computation param: params) + { + sb.append(" "); + sb.append(param.toString()); + } + + sb.append(")"); + + for (final Instruction effect: effects) + { + sb.append(System.lineSeparator()); + sb.append(effect.toString()); + } + + sb.append(")"); + + return sb.toString(); + } +} diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/ExtraInstructionInstance.java b/src/core/src/tonkadur/fate/v1/lang/instruction/ExtraInstructionInstance.java index f333509..f13e05a 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/ExtraInstructionInstance.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/ExtraInstructionInstance.java @@ -4,9 +4,13 @@ import java.util.List; import tonkadur.parser.Context; import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; +import tonkadur.fate.v1.lang.meta.Computation; import tonkadur.fate.v1.lang.meta.Instruction; +import tonkadur.fate.v1.lang.meta.InstructionVisitor; import tonkadur.fate.v1.lang.meta.ExtraInstruction; +import tonkadur.fate.v1.lang.meta.RecurrentChecks; public class ExtraInstructionInstance extends Instruction { @@ -34,7 +38,7 @@ public class ExtraInstructionInstance extends Instruction /**** PUBLIC ***************************************************************/ /***************************************************************************/ /**** Constructors *********************************************************/ - public ExtraInstructionInstance build + public static ExtraInstructionInstance build ( final Origin origin, final ExtraInstruction instruction, diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerInput.java b/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerInput.java deleted file mode 100644 index 3daef53..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerInput.java +++ /dev/null @@ -1,134 +0,0 @@ -package tonkadur.fate.v1.lang.instruction; - -import java.util.ArrayList; -import java.util.List; - -import tonkadur.parser.Origin; -import tonkadur.parser.ParsingError; - -import tonkadur.fate.v1.lang.Event; - -import tonkadur.fate.v1.lang.type.Type; - -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.Computation; -import tonkadur.fate.v1.lang.meta.RecurrentChecks; - -public class PlayerInput extends Instruction -{ - /***************************************************************************/ - /**** MEMBERS **************************************************************/ - /***************************************************************************/ - protected final Event input_event; - protected final List params; - protected final List effects; - - /***************************************************************************/ - /**** PROTECTED ************************************************************/ - /***************************************************************************/ - /**** Constructors *********************************************************/ - protected PlayerInput - ( - final Origin origin, - final Event input_event, - final List params, - final List effects - ) - { - super(origin); - - this.input_event = input_event; - this.params = params; - this.effects = effects; - } - - /***************************************************************************/ - /**** PUBLIC ***************************************************************/ - /***************************************************************************/ - /**** Constructors *********************************************************/ - public PlayerInput - ( - final Origin origin, - final Event input_event, - final List effects - ) - { - super(origin); - - this.input_event = input_event; - this.params = new ArrayList(); - this.effects = effects; - } - - public static PlayerInput build - ( - final Origin origin, - final Event event, - final List parameters, - final List effects - ) - throws ParsingError - { - RecurrentChecks.assert_computations_matches_signature - ( - origin, - parameters, - event.get_signature() - ); - - return new PlayerInput(origin, event, parameters, effects); - } - - /**** Accessors ************************************************************/ - @Override - public void get_visited_by (final InstructionVisitor iv) - throws Throwable - { - iv.visit_player_input(this); - } - - public Event get_input_event () - { - return input_event; - } - - public List get_parameters () - { - return params; - } - - public List get_effects () - { - return effects; - } - - /**** Misc. ****************************************************************/ - @Override - public String toString () - { - final StringBuilder sb = new StringBuilder(); - - sb.append("(PlayerInput ("); - sb.append(System.lineSeparator()); - sb.append(input_event.toString()); - - for (final Computation param: params) - { - sb.append(" "); - sb.append(param.toString()); - } - - sb.append(")"); - - for (final Instruction effect: effects) - { - sb.append(System.lineSeparator()); - sb.append(effect.toString()); - } - - sb.append(")"); - - return sb.toString(); - } -} diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerOption.java b/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerOption.java deleted file mode 100644 index d6db1e4..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/PlayerOption.java +++ /dev/null @@ -1,78 +0,0 @@ -package tonkadur.fate.v1.lang.instruction; - -import java.util.List; - -import tonkadur.parser.Origin; - -import tonkadur.fate.v1.lang.type.Type; - -import tonkadur.fate.v1.lang.meta.InstructionVisitor; -import tonkadur.fate.v1.lang.meta.Instruction; -import tonkadur.fate.v1.lang.meta.RichTextNode; - -public class PlayerOption extends Instruction -{ - /***************************************************************************/ - /**** MEMBERS **************************************************************/ - /***************************************************************************/ - protected final RichTextNode text; - protected final List effects; - - /***************************************************************************/ - /**** PUBLIC ***************************************************************/ - /***************************************************************************/ - /**** Constructors *********************************************************/ - public PlayerOption - ( - final Origin origin, - final RichTextNode text, - final List effects - ) - { - super(origin); - - this.text = text; - this.effects = effects; - } - - - /**** Accessors ************************************************************/ - @Override - public void get_visited_by (final InstructionVisitor iv) - throws Throwable - { - iv.visit_player_option(this); - } - - public RichTextNode get_text () - { - return text; - } - - public List get_effects () - { - return effects; - } - - /**** Misc. ****************************************************************/ - @Override - public String toString () - { - final StringBuilder sb = new StringBuilder(); - - sb.append("(PlayerOption ("); - sb.append(System.lineSeparator()); - sb.append(text.toString()); - sb.append(")"); - - for (final Instruction effect: effects) - { - sb.append(System.lineSeparator()); - sb.append(effect.toString()); - } - - sb.append(")"); - - return sb.toString(); - } -} diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/PromptInteger.java b/src/core/src/tonkadur/fate/v1/lang/instruction/PromptInteger.java index 8c76365..9ddf4fb 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/PromptInteger.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/PromptInteger.java @@ -58,7 +58,7 @@ public class PromptInteger extends Instruction { RecurrentChecks.assert_can_be_used_as(min, Type.INT); RecurrentChecks.assert_can_be_used_as(max, Type.INT); - RecurrentChecks.assert_can_be_used_as(label, Type.RICH_TEXT); + RecurrentChecks.assert_can_be_used_as(label, Type.TEXT); RecurrentChecks.assert_can_be_used_as ( target, diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/PromptString.java b/src/core/src/tonkadur/fate/v1/lang/instruction/PromptString.java index a0a8a42..23f1d35 100644 --- a/src/core/src/tonkadur/fate/v1/lang/instruction/PromptString.java +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/PromptString.java @@ -58,7 +58,7 @@ public class PromptString extends Instruction { RecurrentChecks.assert_can_be_used_as(min, Type.INT); RecurrentChecks.assert_can_be_used_as(max, Type.INT); - RecurrentChecks.assert_can_be_used_as(label, Type.RICH_TEXT); + RecurrentChecks.assert_can_be_used_as(label, Type.TEXT); RecurrentChecks.assert_can_be_used_as ( target, diff --git a/src/core/src/tonkadur/fate/v1/lang/instruction/TextOption.java b/src/core/src/tonkadur/fate/v1/lang/instruction/TextOption.java new file mode 100644 index 0000000..9a1774d --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/instruction/TextOption.java @@ -0,0 +1,78 @@ +package tonkadur.fate.v1.lang.instruction; + +import java.util.List; + +import tonkadur.parser.Origin; + +import tonkadur.fate.v1.lang.type.Type; + +import tonkadur.fate.v1.lang.meta.InstructionVisitor; +import tonkadur.fate.v1.lang.meta.Instruction; +import tonkadur.fate.v1.lang.meta.TextNode; + +public class TextOption extends Instruction +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final TextNode text; + protected final List effects; + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + public TextOption + ( + final Origin origin, + final TextNode text, + final List effects + ) + { + super(origin); + + this.text = text; + this.effects = effects; + } + + + /**** Accessors ************************************************************/ + @Override + public void get_visited_by (final InstructionVisitor iv) + throws Throwable + { + iv.visit_text_option(this); + } + + public TextNode get_text () + { + return text; + } + + public List get_effects () + { + return effects; + } + + /**** Misc. ****************************************************************/ + @Override + public String toString () + { + final StringBuilder sb = new StringBuilder(); + + sb.append("(TextOption ("); + sb.append(System.lineSeparator()); + sb.append(text.toString()); + sb.append(")"); + + for (final Instruction effect: effects) + { + sb.append(System.lineSeparator()); + sb.append(effect.toString()); + } + + sb.append(")"); + + return sb.toString(); + } +} diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java index 5d0821e..8e57746 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/ComputationVisitor.java @@ -94,7 +94,7 @@ public interface ComputationVisitor public void visit_text_with_effect (final TextWithEffect n) throws Throwable; - public void visit_value_to_rich_text (final ValueToRichText n) + public void visit_value_to_text (final ValueToText n) throws Throwable; public void visit_variable_reference (final VariableReference n) diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/ExtraComputation.java b/src/core/src/tonkadur/fate/v1/lang/meta/ExtraComputation.java index 703e079..6cefa54 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/ExtraComputation.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/ExtraComputation.java @@ -1,16 +1,52 @@ package tonkadur.fate.v1.lang.meta; +import java.util.ArrayList; import java.util.List; import tonkadur.parser.Context; import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; import tonkadur.fate.v1.lang.World; import tonkadur.fate.v1.lang.type.Type; +import tonkadur.fate.v1.lang.computation.ExtraComputationInstance; + public class ExtraComputation extends DeclaredEntity { + protected static final ExtraComputation ANY; + + static + { + ANY = + new ExtraComputation + ( + Origin.BASE_LANGUAGE, + Type.ANY, + /* + * Use of a space necessary to avoid conflicting with a user created + * type. + */ + "undetermined extra_computation", + new ArrayList() + ); + } + + public static ExtraComputation value_on_missing () + { + return ANY; + } + + @Override + public /* static */ String get_type_name () + { + return "ExtraComputation"; + } + + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ protected final Type returned_type; protected final List signature; diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/ExtraInstruction.java b/src/core/src/tonkadur/fate/v1/lang/meta/ExtraInstruction.java index 10a8f05..cd056dd 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/ExtraInstruction.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/ExtraInstruction.java @@ -1,16 +1,51 @@ package tonkadur.fate.v1.lang.meta; +import java.util.ArrayList; import java.util.List; import tonkadur.parser.Context; import tonkadur.parser.Origin; +import tonkadur.parser.ParsingError; import tonkadur.fate.v1.lang.World; import tonkadur.fate.v1.lang.type.Type; +import tonkadur.fate.v1.lang.instruction.ExtraInstructionInstance; + public class ExtraInstruction extends DeclaredEntity { + protected static final ExtraInstruction ANY; + + static + { + ANY = + new ExtraInstruction + ( + Origin.BASE_LANGUAGE, + /* + * Use of a space necessary to avoid conflicting with a user created + * type. + */ + "undetermined extra_instruction", + new ArrayList() + ); + } + + public static ExtraInstruction value_on_missing () + { + return ANY; + } + + @Override + public /* static */ String get_type_name () + { + return "ExtraInstruction"; + } + + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ protected final List signature; /***************************************************************************/ @@ -52,7 +87,7 @@ public class ExtraInstruction extends DeclaredEntity final World world, final Context context, final Origin origin, - final List parameters + final List parameters ) throws ParsingError { diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java index 6426cfb..922fbc1 100644 --- a/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java +++ b/src/core/src/tonkadur/fate/v1/lang/meta/InstructionVisitor.java @@ -122,10 +122,10 @@ public interface InstructionVisitor public void visit_player_choice (final PlayerChoice n) throws Throwable; - public void visit_player_option (final PlayerOption n) + public void visit_text_option (final TextOption n) throws Throwable; - public void visit_player_input (final PlayerInput n) + public void visit_event_option (final EventOption n) throws Throwable; public void visit_remove_all_of_element (final RemoveAllOfElement n) diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/RichTextNode.java b/src/core/src/tonkadur/fate/v1/lang/meta/RichTextNode.java deleted file mode 100644 index 1afd6fe..0000000 --- a/src/core/src/tonkadur/fate/v1/lang/meta/RichTextNode.java +++ /dev/null @@ -1,25 +0,0 @@ -package tonkadur.fate.v1.lang.meta; - -import tonkadur.parser.Origin; - -import tonkadur.fate.v1.lang.type.Type; - - -public abstract class RichTextNode extends Computation -{ - /***************************************************************************/ - /**** PROTECTED ************************************************************/ - /***************************************************************************/ - /**** Constructors *********************************************************/ - protected RichTextNode (final Origin origin) - { - super(origin, Type.RICH_TEXT); - } - - /***************************************************************************/ - /**** PUBLIC ***************************************************************/ - /***************************************************************************/ - /**** Constructors *********************************************************/ - /**** Accessors ************************************************************/ - /**** Misc. ****************************************************************/ -} diff --git a/src/core/src/tonkadur/fate/v1/lang/meta/TextNode.java b/src/core/src/tonkadur/fate/v1/lang/meta/TextNode.java new file mode 100644 index 0000000..eec40bb --- /dev/null +++ b/src/core/src/tonkadur/fate/v1/lang/meta/TextNode.java @@ -0,0 +1,25 @@ +package tonkadur.fate.v1.lang.meta; + +import tonkadur.parser.Origin; + +import tonkadur.fate.v1.lang.type.Type; + + +public abstract class TextNode extends Computation +{ + /***************************************************************************/ + /**** PROTECTED ************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + protected TextNode (final Origin origin) + { + super(origin, Type.TEXT); + } + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + /**** Accessors ************************************************************/ + /**** Misc. ****************************************************************/ +} diff --git a/src/core/src/tonkadur/fate/v1/lang/type/Type.java b/src/core/src/tonkadur/fate/v1/lang/type/Type.java index ce93e9e..850afeb 100644 --- a/src/core/src/tonkadur/fate/v1/lang/type/Type.java +++ b/src/core/src/tonkadur/fate/v1/lang/type/Type.java @@ -28,7 +28,7 @@ public class Type extends DeclaredEntity public static final Type LAMBDA; public static final Type LIST; public static final Type REF; - public static final Type RICH_TEXT; + public static final Type TEXT; public static final Type SEQUENCE; public static final Type SET; public static final Type STRING; @@ -57,7 +57,7 @@ public class Type extends DeclaredEntity LAMBDA = new Type(base, null, "lambda"); LIST = new Type(base, null, "list"); REF = new Type(base, null, "ref"); - RICH_TEXT = new Type(base, null, "text"); + TEXT = new Type(base, null, "text"); SEQUENCE = new Type(base, null, "sequence"); SET = new Type(base, null, "set"); STRING = new Type(base, null, "string"); @@ -72,7 +72,7 @@ public class Type extends DeclaredEntity ALL_TYPES.add(LAMBDA); ALL_TYPES.add(LIST); ALL_TYPES.add(REF); - ALL_TYPES.add(RICH_TEXT); + ALL_TYPES.add(TEXT); ALL_TYPES.add(SEQUENCE); ALL_TYPES.add(SET); ALL_TYPES.add(STRING); diff --git a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 index cd96bb4..b333202 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateLexer.g4 @@ -41,7 +41,7 @@ DECLARE_DICT_TYPE_KW: L_PAREN ('declare'|'define'|'def')US('dict'|('struct''ure'?))(US'type')? SEP+; DECLARE_EXTRA_INSTRUCTION_KW: L_PAREN ('declare'|'define'|'def')US'extra'US'instruction' SEP+; DECLARE_EXTRA_COMPUTATION_KW: L_PAREN ('declare'|'define'|'def')US'extra'US'computation' SEP+; -DECLARE_INPUT_EVENT_TYPE_KW: L_PAREN ('declare'|'define'|'def')(US'input')?US'event'(US'type')? SEP+; +DECLARE_EVENT_TYPE_KW: L_PAREN ('declare'|'define'|'def')(US'input')?US'event'(US'type')? SEP+; DECLARE_TEXT_EFFECT_KW: L_PAREN ('declare'|'define'|'def')US'text'US'effect' SEP+; DECLARE_VARIABLE_KW: L_PAREN 'global' SEP+; LOCAL_KW: L_PAREN 'local' SEP+; @@ -111,7 +111,7 @@ NEW_KW: L_PAREN ('new'|'reserve'|'create') SEP+; NOT_KW: L_PAREN ('not'|'~'|'!') SEP+; ONE_IN_KW: L_PAREN ('exactly'US)?'one'(US'in')? SEP+; OR_KW: L_PAREN ('or'|'\\/') SEP+; -RICH_TEXT_KW: L_PAREN (('rich'US)?'text') SEP+; +TEXT_KW: L_PAREN 'text' SEP+; PARTITION_KW: L_PAREN 'partition' SEP+; IMP_PARTITION_KW: L_PAREN 'partition!' SEP+; INDEXED_PARTITION_KW: L_PAREN 'indexed'US'partition' SEP+; @@ -125,8 +125,8 @@ IMP_PUSH_LEFT_KW: L_PAREN 'push'US'left!' SEP+; PUSH_RIGHT_KW: L_PAREN 'push'US'right' SEP+; IMP_PUSH_RIGHT_KW: L_PAREN 'push'US'right!' SEP+; PLAYER_CHOICE_KW: L_PAREN ('choice'|'user'US'choice'|'player'US'choice') SEP+; -PLAYER_OPTION_KW: L_PAREN ('option'|'user'US'option'|'player'US'option') SEP+; -PLAYER_EVENT_KW: L_PAREN ('event'|'user'US'event'|'player'US'event') SEP+; +TEXT_OPTION_KW: L_PAREN ('option'|'user'US'option'|'player'US'option') SEP+; +EVENT_OPTION_KW: L_PAREN ('event'|'user'US'event'|'player'US'event') SEP+; PLUS_KW: L_PAREN ('plus'|'+') SEP+; POWER_KW: L_PAREN ('power'|'^'|'**'|'pow') SEP+; RANGE_KW: L_PAREN 'range' SEP+; diff --git a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 index 612d77d..519a01c 100644 --- a/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 +++ b/src/core/src/tonkadur/fate/v1/parser/FateParser.g4 @@ -363,7 +363,7 @@ first_level_fate_instr: ($DECLARE_EXTRA_INSTRUCTION_KW.getCharPositionInLine()) ); - new_event = + extra_instruction = new ExtraInstruction ( start_origin, @@ -386,7 +386,7 @@ first_level_fate_instr: ($DECLARE_EXTRA_INSTRUCTION_KW.getCharPositionInLine()) ); - new_event = + extra_instruction = new ExtraInstruction ( start_origin, @@ -445,50 +445,50 @@ first_level_fate_instr: WORLD.extra_computations().add(extra_computation); } - | DECLARE_INPUT_EVENT_TYPE_KW new_reference_name WS* R_PAREN + | DECLARE_EVENT_TYPE_KW new_reference_name WS* R_PAREN { final Origin start_origin; - final InputEvent new_event; + final Event new_event; start_origin = CONTEXT.get_origin_at ( - ($DECLARE_INPUT_EVENT_TYPE_KW.getLine()), - ($DECLARE_INPUT_EVENT_TYPE_KW.getCharPositionInLine()) + ($DECLARE_EVENT_TYPE_KW.getLine()), + ($DECLARE_EVENT_TYPE_KW.getCharPositionInLine()) ); new_event = - new InputEvent + new Event ( start_origin, new ArrayList(), ($new_reference_name.result) ); - WORLD.input_events().add(new_event); + WORLD.events().add(new_event); } - | DECLARE_INPUT_EVENT_TYPE_KW new_reference_name WS+ type_list WS* R_PAREN + | DECLARE_EVENT_TYPE_KW new_reference_name WS+ type_list WS* R_PAREN { final Origin start_origin; - final InputEvent new_event; + final Event new_event; start_origin = CONTEXT.get_origin_at ( - ($DECLARE_INPUT_EVENT_TYPE_KW.getLine()), - ($DECLARE_INPUT_EVENT_TYPE_KW.getCharPositionInLine()) + ($DECLARE_EVENT_TYPE_KW.getLine()), + ($DECLARE_EVENT_TYPE_KW.getCharPositionInLine()) ); new_event = - new InputEvent + new Event ( start_origin, ($type_list.result), ($new_reference_name.result) ); - WORLD.input_events().add(new_event); + WORLD.events().add(new_event); } @@ -549,6 +549,7 @@ first_level_fate_instr: CONTEXT.pop(); } + /* | EXTENSION_FIRST_LEVEL_KW WORD WS+ general_fate_sequence WS* R_PAREN { final Origin origin; @@ -575,6 +576,7 @@ first_level_fate_instr: instr.build(WORLD, CONTEXT, origin, ($general_fate_sequence.result)); } } + */ ; catch [final Throwable e] { @@ -2203,7 +2205,7 @@ returns [List result] player_choice returns [Instruction result] : - PLAYER_OPTION_KW + TEXT_OPTION_KW L_PAREN WS* paragraph WS* R_PAREN WS+ { HIERARCHICAL_VARIABLES.push(new ArrayList()); @@ -2219,19 +2221,19 @@ returns [Instruction result] R_PAREN { $result = - new PlayerOption + new TextOption ( CONTEXT.get_origin_at ( - ($PLAYER_OPTION_KW.getLine()), - ($PLAYER_OPTION_KW.getCharPositionInLine()) + ($TEXT_OPTION_KW.getLine()), + ($TEXT_OPTION_KW.getCharPositionInLine()) ), ($paragraph.result), ($general_fate_sequence.result) ); } - | PLAYER_EVENT_KW + | EVENT_OPTION_KW L_PAREN WS* WORD WS* R_PAREN WS+ { HIERARCHICAL_VARIABLES.push(new ArrayList()); @@ -2247,7 +2249,7 @@ returns [Instruction result] R_PAREN { final Origin origin; - final InputEvent event; + final Event event; origin = CONTEXT.get_origin_at @@ -2256,10 +2258,10 @@ returns [Instruction result] ($L_PAREN.getCharPositionInLine()) ); - event = WORLD.input_events().get(origin, ($WORD.text)); + event = WORLD.events().get(origin, ($WORD.text)); $result = - new PlayerInput + new EventOption ( origin, event, @@ -2267,7 +2269,7 @@ returns [Instruction result] ); } - | PLAYER_EVENT_KW + | EVENT_OPTION_KW L_PAREN WS* WORD WS+ value_list WS* R_PAREN WS+ { HIERARCHICAL_VARIABLES.push(new ArrayList()); @@ -2283,7 +2285,7 @@ returns [Instruction result] R_PAREN { final Origin origin; - final InputEvent event; + final Event event; origin = CONTEXT.get_origin_at @@ -2292,10 +2294,10 @@ returns [Instruction result] ($L_PAREN.getCharPositionInLine()) ); - event = WORLD.input_events().get(origin, ($WORD.text)); + event = WORLD.events().get(origin, ($WORD.text)); $result = - PlayerInput.build + EventOption.build ( origin, event, @@ -2570,10 +2572,10 @@ catch [final Throwable e] } paragraph -returns [RichTextNode result] +returns [TextNode result] @init { - final List content = new ArrayList(); + final List content = new ArrayList(); } : first=text @@ -2587,7 +2589,7 @@ returns [RichTextNode result] { content.add ( - ValueToRichText.build + ValueToText.build ( Constant.build_string ( @@ -2635,10 +2637,10 @@ catch [final Throwable e] } text -returns [RichTextNode result]: +returns [TextNode result]: sentence { - $result = ValueToRichText.build(($sentence.result)); + $result = ValueToText.build(($sentence.result)); } | ENABLE_TEXT_EFFECT_KW WORD WS+ paragraph WS* R_PAREN @@ -2720,7 +2722,7 @@ returns [RichTextNode result]: | non_text_value { - $result = ValueToRichText.build(($non_text_value.result)); + $result = ValueToText.build(($non_text_value.result)); } ; catch [final Throwable e] @@ -3703,7 +3705,7 @@ returns [Computation result] $result = ($sentence.result); } - | RICH_TEXT_KW paragraph WS* R_PAREN + | TEXT_KW paragraph WS* R_PAREN { $result = ($paragraph.result); } @@ -4187,7 +4189,7 @@ returns [Computation result] | EXTRA_COMPUTATION_KW WORD WS+ value_list WS* R_PAREN { final Origin origin; - final ExtensionComputation extra_computation; + final ExtraComputation extra_computation; origin = CONTEXT.get_origin_at @@ -4199,7 +4201,7 @@ returns [Computation result] extra_computation = WORLD.extra_computations().get(origin, ($WORD.text)); $result = - extra_computation.build + extra_computation.instantiate ( WORLD, CONTEXT, @@ -4211,7 +4213,7 @@ returns [Computation result] | EXTRA_COMPUTATION_KW WORD WS* R_PAREN { final Origin origin; - final ExtensionComputation extra_computation; + final ExtraComputation extra_computation; origin = CONTEXT.get_origin_at @@ -4223,12 +4225,12 @@ returns [Computation result] extra_computation = WORLD.extra_computations().get(origin, ($WORD.text)); $result = - extra_computation.build + extra_computation.instantiate ( WORLD, CONTEXT, origin, - ($value_list.result) + new ArrayList() ); } diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java index ad3abc3..70d3ed1 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/ComputationCompiler.java @@ -1307,6 +1307,43 @@ implements tonkadur.fate.v1.lang.meta.ComputationVisitor result_as_computation = new Size(cc.get_address()); } + @Override + public void visit_extra_computation + ( + final tonkadur.fate.v1.lang.computation.ExtraComputationInstance n + ) + throws Throwable + { + final List parameters; + + parameters = new ArrayList(); + + for (final tonkadur.fate.v1.lang.meta.Computation p: n.get_parameters()) + { + final ComputationCompiler cc; + + cc = new ComputationCompiler(compiler); + + p.get_visited_by(cc); + + assimilate(cc); + + parameters.add(cc.get_computation()); + } + + result_as_computation = + new ExtraComputation + ( + TypeCompiler.compile + ( + compiler, + n.get_computation_type().get_returned_type() + ), + n.get_computation_type().get_name(), + parameters + ); + } + @Override public void visit_is_empty ( diff --git a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java index f1c28fc..8597920 100644 --- a/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java +++ b/src/core/src/tonkadur/wyrd/v1/compiler/fate/v1/InstructionCompiler.java @@ -2636,7 +2636,8 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor ( new ExtraInstruction ( - n.get_instruction().get_name(), parameters + n.get_instruction_type().get_name(), + parameters ) ); @@ -2837,16 +2838,16 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor } @Override - public void visit_player_option + public void visit_text_option ( - final tonkadur.fate.v1.lang.instruction.PlayerOption n + final tonkadur.fate.v1.lang.instruction.TextOption n ) throws Throwable { /* - * Fate: (player_choice label i0) + * Fate: (text_option label i0) * - * Wyrd (add_choice label i0) + * Wyrd (add_text_option label i0) */ final List to_next, labels_only; final ComputationCompiler cc; @@ -2974,16 +2975,16 @@ implements tonkadur.fate.v1.lang.meta.InstructionVisitor } @Override - public void visit_player_input + public void visit_event_option ( - final tonkadur.fate.v1.lang.instruction.PlayerInput n + final tonkadur.fate.v1.lang.instruction.EventOption n ) throws Throwable { /* - * Fate: (player_choice label i0) + * Fate: (event_option label i0) * - * Wyrd (add_choice label i0) + * Wyrd (add_event_option label i0) */ final List to_next, labels_only; final List params_cc; diff --git a/src/core/src/tonkadur/wyrd/v1/lang/computation/ExtraComputation.java b/src/core/src/tonkadur/wyrd/v1/lang/computation/ExtraComputation.java new file mode 100644 index 0000000..99b694f --- /dev/null +++ b/src/core/src/tonkadur/wyrd/v1/lang/computation/ExtraComputation.java @@ -0,0 +1,74 @@ +package tonkadur.wyrd.v1.lang.computation; + +import java.util.List; + +import tonkadur.wyrd.v1.lang.type.Type; + +import tonkadur.wyrd.v1.lang.meta.Computation; +import tonkadur.wyrd.v1.lang.meta.ComputationVisitor; + +public class ExtraComputation extends Computation +{ + /***************************************************************************/ + /**** MEMBERS **************************************************************/ + /***************************************************************************/ + protected final String name; + protected final List parameters; + + /***************************************************************************/ + /**** PUBLIC ***************************************************************/ + /***************************************************************************/ + /**** Constructors *********************************************************/ + public ExtraComputation + ( + final Type type, + final String name, + final List parameters + ) + { + super(type); + + this.name = name; + this.parameters = parameters; + } + + /**** Accessors ************************************************************/ + public String get_name () + { + return name; + } + + public List get_parameters () + { + return parameters; + } + + @Override + public void get_visited_by (final ComputationVisitor cv) + throws Throwable + { + cv.visit_extra_computation(this); + } + + /**** Misc. ****************************************************************/ + @Override + public String toString () + { + final StringBuilder sb; + + sb = new StringBuilder(); + + sb.append("(ExtraComputation "); + sb.append(name); + + for (final Computation param: parameters) + { + sb.append(" "); + sb.append(param.toString()); + } + + sb.append(")"); + + return sb.toString(); + } +} diff --git a/src/json-export/src/tonkadur/jsonexport/ComputationCompiler.java b/src/json-export/src/tonkadur/jsonexport/ComputationCompiler.java index 132e658..4db47a9 100644 --- a/src/json-export/src/tonkadur/jsonexport/ComputationCompiler.java +++ b/src/json-export/src/tonkadur/jsonexport/ComputationCompiler.java @@ -12,7 +12,7 @@ public class ComputationCompiler implements ComputationVisitor { protected JSONObject result; - public void visit_add_rich_text_effect (final AddRichTextEffect n) + public void visit_add_text_effect (final AddTextEffect n) throws Throwable { final JSONArray params, content; @@ -44,7 +44,7 @@ public class ComputationCompiler implements ComputationVisitor result = new JSONObject(); - result.put("category", "add_rich_text_effect"); + result.put("category", "add_text_effect"); result.put("effect", n.get_effect_name()); result.put("parameters", params); result.put("content", content); @@ -185,7 +185,7 @@ public class ComputationCompiler implements ComputationVisitor result.put("extra", param_cc.get_result()); } - public void visit_rich_text (final RichText n) + public void visit_text (final Text n) throws Throwable { final JSONArray content; @@ -205,7 +205,7 @@ public class ComputationCompiler implements ComputationVisitor result = new JSONObject(); - result.put("category", "rich_text"); + result.put("category", "text"); result.put("content", content); } @@ -224,6 +224,31 @@ public class ComputationCompiler implements ComputationVisitor result.put("reference", cc.get_result()); } + public void visit_extra_computation (final ExtraComputation n) + throws Throwable + { + final JSONArray params; + + params = new JSONArray(); + + for (final Computation c: n.get_parameters()) + { + final ComputationCompiler cc; + + cc = new ComputationCompiler(); + + c.get_visited_by(cc); + + params.add(cc.get_result()); + } + + result = new JSONObject(); + + result.put("category", "extra_computation"); + result.put("name", n.get_name()); + result.put("parameters", params); + } + public void visit_value_of (final ValueOf n) throws Throwable { diff --git a/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java b/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java index 86b2a56..d33901d 100644 --- a/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java +++ b/src/json-export/src/tonkadur/jsonexport/InstructionCompiler.java @@ -12,7 +12,7 @@ public class InstructionCompiler implements InstructionVisitor { protected JSONObject result; - public void visit_add_choice (final AddChoice n) + public void visit_add_text_option (final AddTextOption n) throws Throwable { final ComputationCompiler label_cc; @@ -23,11 +23,11 @@ public class InstructionCompiler implements InstructionVisitor result = new JSONObject(); - result.put("category", "add_choice"); + result.put("category", "add_text_option"); result.put("label", label_cc.get_result()); } - public void visit_add_event_input (final AddEventInput n) + public void visit_add_event_option (final AddEventOption n) throws Throwable { final JSONArray params; @@ -47,7 +47,7 @@ public class InstructionCompiler implements InstructionVisitor result = new JSONObject(); - result.put("category", "add_event_input"); + result.put("category", "add_event_option"); result.put("event", n.get_name()); result.put("parameters", params); } @@ -93,7 +93,7 @@ public class InstructionCompiler implements InstructionVisitor result.put("category", "end"); } - public void visit_event_call (final EventCall n) + public void visit_extra_instruction (final ExtraInstruction n) throws Throwable { final JSONArray params; @@ -113,8 +113,8 @@ public class InstructionCompiler implements InstructionVisitor result = new JSONObject(); - result.put("category", "event_call"); - result.put("event", n.get_name()); + result.put("category", "extra_instruction"); + result.put("name", n.get_name()); result.put("parameters", params); } @@ -133,12 +133,12 @@ public class InstructionCompiler implements InstructionVisitor result.put("reference", cc.get_result()); } - public void visit_resolve_choices (final ResolveChoices n) + public void visit_resolve_choice (final ResolveChoice n) throws Throwable { result = new JSONObject(); - result.put("category", "resolve_choices"); + result.put("category", "resolve_choice"); } public void visit_set_pc (final SetPC n) -- cgit v1.2.3-70-g09d2