diff --git a/VERSION b/VERSION index e3a4f19..cc6612c 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2.0 \ No newline at end of file +2.3.0 \ No newline at end of file diff --git a/work/config/compiler.cfg b/work/config/compiler.cfg index 2508f5f..7cc4f84 100644 --- a/work/config/compiler.cfg +++ b/work/config/compiler.cfg @@ -1,4 +1,4 @@ -modules_required = "dev.pp.text, dev.pp.parameters, dev.pp.texttable, dev.pdml.core, dev.pdml.ext, org.graalvm.sdk, org.graalvm.truffle, org.graalvm.js, com.oracle.truffle.regex" +modules_required = "dev.pp.basics, dev.pp.text, dev.pp.parameters, dev.pp.texttable, dev.pp.scripting, dev.pdml.core, dev.pdml.ext, org.graalvm.js" # OPTION: You can uncomment one of the folloing lines to automatically open your editor (VSCode or IntelliJ Idea) # in case of a compiler error diff --git a/work/lib/dev.pdml.core-0.8.0.jar b/work/lib/dev.pdml.core-0.8.0.jar deleted file mode 100644 index e434b3b..0000000 Binary files a/work/lib/dev.pdml.core-0.8.0.jar and /dev/null differ diff --git a/work/lib/dev.pdml.core-0.9.0.jar b/work/lib/dev.pdml.core-0.9.0.jar new file mode 100644 index 0000000..ed9322e Binary files /dev/null and b/work/lib/dev.pdml.core-0.9.0.jar differ diff --git a/work/lib/dev.pdml.ext-0.8.0.jar b/work/lib/dev.pdml.ext-0.8.0.jar deleted file mode 100644 index 4b5bf10..0000000 Binary files a/work/lib/dev.pdml.ext-0.8.0.jar and /dev/null differ diff --git a/work/lib/dev.pdml.ext-0.9.0.jar b/work/lib/dev.pdml.ext-0.9.0.jar new file mode 100644 index 0000000..4fc9cac Binary files /dev/null and b/work/lib/dev.pdml.ext-0.9.0.jar differ diff --git a/work/lib/dev.pp.basics-0.9.0.jar b/work/lib/dev.pp.basics-0.9.0.jar new file mode 100644 index 0000000..cf4f4ea Binary files /dev/null and b/work/lib/dev.pp.basics-0.9.0.jar differ diff --git a/work/lib/dev.pp.datatype-0.8.0.jar b/work/lib/dev.pp.datatype-0.8.0.jar deleted file mode 100644 index 4beae6d..0000000 Binary files a/work/lib/dev.pp.datatype-0.8.0.jar and /dev/null differ diff --git a/work/lib/dev.pp.datatype-0.9.0.jar b/work/lib/dev.pp.datatype-0.9.0.jar new file mode 100644 index 0000000..d564c2d Binary files /dev/null and b/work/lib/dev.pp.datatype-0.9.0.jar differ diff --git a/work/lib/dev.pp.parameters-0.8.0.jar b/work/lib/dev.pp.parameters-0.8.0.jar deleted file mode 100644 index dda47c8..0000000 Binary files a/work/lib/dev.pp.parameters-0.8.0.jar and /dev/null differ diff --git a/work/lib/dev.pp.parameters-0.9.0.jar b/work/lib/dev.pp.parameters-0.9.0.jar new file mode 100644 index 0000000..48de1b1 Binary files /dev/null and b/work/lib/dev.pp.parameters-0.9.0.jar differ diff --git a/work/lib/dev.pp.scripting-0.9.0.jar b/work/lib/dev.pp.scripting-0.9.0.jar new file mode 100644 index 0000000..110e947 Binary files /dev/null and b/work/lib/dev.pp.scripting-0.9.0.jar differ diff --git a/work/lib/dev.pp.text-0.8.0.jar b/work/lib/dev.pp.text-0.8.0.jar deleted file mode 100644 index 39eaae4..0000000 Binary files a/work/lib/dev.pp.text-0.8.0.jar and /dev/null differ diff --git a/work/lib/dev.pp.text-0.9.0.jar b/work/lib/dev.pp.text-0.9.0.jar new file mode 100644 index 0000000..daf540e Binary files /dev/null and b/work/lib/dev.pp.text-0.9.0.jar differ diff --git a/work/lib/dev.pp.texttable-0.8.0.jar b/work/lib/dev.pp.texttable-0.8.0.jar deleted file mode 100644 index deb5d17..0000000 Binary files a/work/lib/dev.pp.texttable-0.8.0.jar and /dev/null differ diff --git a/work/lib/dev.pp.texttable-0.9.0.jar b/work/lib/dev.pp.texttable-0.9.0.jar new file mode 100644 index 0000000..4e57a1b Binary files /dev/null and b/work/lib/dev.pp.texttable-0.9.0.jar differ diff --git a/work/lib/icu4j-69.1.jar b/work/lib/icu4j-69.1.jar index eb80eea..c762183 100644 Binary files a/work/lib/icu4j-69.1.jar and b/work/lib/icu4j-69.1.jar differ diff --git a/work/resources/resources/css/pml-default.css b/work/resources/resources/css/pml-default.css index 700918d..b490274 100644 --- a/work/resources/resources/css/pml-default.css +++ b/work/resources/resources/css/pml-default.css @@ -1,5 +1,5 @@ /* - PML version: 2.2.0 + PML version: 2.3.0 This is the default CSS style used for HTML files created with PML. diff --git a/work/resources/resources/css/pml-print-default.css b/work/resources/resources/css/pml-print-default.css index 9179e01..5961ce7 100644 --- a/work/resources/resources/css/pml-print-default.css +++ b/work/resources/resources/css/pml-print-default.css @@ -1,5 +1,5 @@ /* - PML version: 2.2.0 + PML version: 2.3.0 This is the default CSS style used when printing a PML document. diff --git a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNode.java b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNode.java index 43dd360..cf9a4c3 100644 --- a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNode.java +++ b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNode.java @@ -3,8 +3,8 @@ package dev.pml.converter.data.user_defined_node; -import dev.pp.text.annotations.NotNull; -import dev.pp.text.annotations.Nullable; +import dev.pp.basics.annotations.NotNull; +import dev.pp.basics.annotations.Nullable; import java.util.List; diff --git a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeAttribute.java b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeAttribute.java index 73ea622..1cd9269 100644 --- a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeAttribute.java +++ b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeAttribute.java @@ -3,8 +3,8 @@ package dev.pml.converter.data.user_defined_node; -import dev.pp.text.annotations.NotNull; -import dev.pp.text.annotations.Nullable; +import dev.pp.basics.annotations.NotNull; +import dev.pp.basics.annotations.Nullable; public record UserDefinedNodeAttribute( @NotNull String name, diff --git a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeParser.java b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeParser.java index d5cc1f8..410b260 100644 --- a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeParser.java +++ b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeParser.java @@ -8,14 +8,14 @@ import dev.pdml.core.data.AST.children.Node_ASTNodeChild; import dev.pdml.core.data.formalNode.FormalNode; import dev.pdml.core.data.formalNode.FormalNodes; -import dev.pdml.core.data.formalNode.types.standard.TextBlockType; +import dev.pdml.ext.extensions.types.TextBlockType; import dev.pdml.core.data.node.name.NodeName; import dev.pdml.core.PDMLConstants; -import dev.pdml.ext.utilities.PDMLParserUtils; -import dev.pp.text.annotations.NotNull; -import dev.pp.text.annotations.Nullable; +import dev.pdml.ext.utilities.parser.PDMLParserUtils; +import dev.pp.basics.annotations.NotNull; +import dev.pp.basics.annotations.Nullable; +import dev.pp.basics.utilities.directory.DirectoryContentUtils; import dev.pp.text.error.handler.TextErrorHandler; -import dev.pp.text.utilities.DirectoryUtilities; import java.io.File; import java.util.ArrayList; @@ -50,7 +50,7 @@ public class UserDefinedNodeParser { Map UDNs = new HashMap<>(); for ( File directory : directories ) { - DirectoryUtilities.consumeNonExcludedFilesWithExtensionInTree ( directory, PDMLConstants.PDML_FILE_EXTENSION, file -> { + DirectoryContentUtils.forEachNonExcludedFileWithExtensionInTree ( directory, PDMLConstants.PDML_FILE_EXTENSION, file -> { try { addUDNsInFile ( file, UDNs, errorHandler ); } catch ( Exception e ) { @@ -91,7 +91,7 @@ private static void handleRootNode ( default -> errorHandler.handleError ( "INVALID_ROOT_NODE", - "Node '" + rootNode.getName().fullName() + "' is invalid. The root node must be be named '" + + "Node '" + rootNode.getName().qualifiedName() + "' is invalid. The root node must be be named '" + NODE_NODE_NAME + "' or '" + NODES_NODE_NAME + "'.", rootNode.getName().getToken() ); } @@ -106,7 +106,7 @@ private static void handleNodesNode ( if ( children == null ) { errorHandler.handleError ( "EMPTY_NODES", - "Node '" + nodesNode.getName().fullName() + "' must contain one or mode '" + NODE_NODE_NAME + "' nodes.", + "Node '" + nodesNode.getName().qualifiedName() + "' must contain one or mode '" + NODE_NODE_NAME + "' nodes.", nodesNode.getName().getToken() ); return; } @@ -118,7 +118,7 @@ private static void handleNodesNode ( } else { errorHandler.handleError ( "INVALID_NODE", - "Node '" + name + "' is invalid. Node '" + nodesNode.getName().fullName() + + "Node '" + name + "' is invalid. Node '" + nodesNode.getName().qualifiedName() + "' can only contain nodes with name '" + NODE_NODE_NAME + "'.", nodeNode.getName().getToken() ); } diff --git a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeWriter.java b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeWriter.java index f135463..0343417 100644 --- a/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeWriter.java +++ b/work/src/Java/dev/pml/converter/data/user_defined_node/UserDefinedNodeWriter.java @@ -3,7 +3,7 @@ package dev.pml.converter.data.user_defined_node; -import dev.pp.text.annotations.NotNull; +import dev.pp.basics.annotations.NotNull; public record UserDefinedNodeWriter( @NotNull String targetCodeName, diff --git a/work/src/PPL/dev/pml/converter/PAIOM_commands/se_PML_export_tags_command.ppl b/work/src/PPL/dev/pml/converter/PAIOM_commands/se_PML_export_tags_command.ppl index f72d9b5..738c0c2 100644 --- a/work/src/PPL/dev/pml/converter/PAIOM_commands/se_PML_export_tags_command.ppl +++ b/work/src/PPL/dev/pml/converter/PAIOM_commands/se_PML_export_tags_command.ppl @@ -73,11 +73,14 @@ The JSON file can be used by editor plugins and tools that depend on PML tags an write_string_member ( writer, name = "id", value = formal_node.standard_tag, is_last = no ) variable type string + variable is_inline_type yes_no case type of formal_node when PML_formal_block_node<*> type = "block" + is_inline_type = no when PML_formal_inline_node<*> type = "inline" + is_inline_type = yes . write_string_member ( writer, name = "type", value = type, is_last = no ) @@ -94,6 +97,9 @@ The JSON file can be used by editor plugins and tools that depend on PML tags an write_yes_no_member ( writer, name = "HTML_attributes_allowed", value = formal_node.HTML_attributes_allowed, is_last = no ) + write_yes_no_member ( writer, name = "is_inline_type", + value = is_inline_type, is_last = no ) + variable is_raw_text_block yes_no variable closing_tag = PML_default_values.node_end_symbol.to_string case type of formal_node diff --git a/work/src/PPL/dev/pml/converter/data/formal_node/block/with_child_nodes/nodes/se_PML_chapter_formal_node.ppl b/work/src/PPL/dev/pml/converter/data/formal_node/block/with_child_nodes/nodes/se_PML_chapter_formal_node.ppl index 6ffa42d..539c67f 100644 --- a/work/src/PPL/dev/pml/converter/data/formal_node/block/with_child_nodes/nodes/se_PML_chapter_formal_node.ppl +++ b/work/src/PPL/dev/pml/converter/data/formal_node/block/with_child_nodes/nodes/se_PML_chapter_formal_node.ppl @@ -23,7 +23,7 @@ service PML_chapter_formal_node PML_formal_block_node_with_child_nodes.create ( tags = [# "ch" ] attributes = a_attributes - default_attribute_id = parameter_id.create ( se_PML_attribute_ids.title ) + default_attribute_id = null HTML_attributes_allowed = yes child_nodes_are_inline_nodes = no node_creator = fa_PML_chapter_node_creator.create diff --git a/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/fa_PML_formal_block_node_with_raw_text_content.ppl b/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/fa_PML_formal_block_node_with_raw_text_content.ppl index 79cd2ac..bf91958 100644 --- a/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/fa_PML_formal_block_node_with_raw_text_content.ppl +++ b/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/fa_PML_formal_block_node_with_raw_text_content.ppl @@ -5,7 +5,7 @@ factory PML_formal_block_node_with_raw_text_content java_header import dev.pdml.core.data.formalNode.FormalNode; - import dev.pdml.core.data.formalNode.types.standard.TextBlockType; + import dev.pdml.ext.extensions.types.TextBlockType; import dev.pml.converter.data.formal_node.helper.se_formal_node; end java_header diff --git a/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/nodes/se_PML_table_data_formal_node.ppl b/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/nodes/se_PML_table_data_formal_node.ppl index 16cc2b6..74a9f8f 100644 --- a/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/nodes/se_PML_table_data_formal_node.ppl +++ b/work/src/PPL/dev/pml/converter/data/formal_node/block/with_raw_text_content/nodes/se_PML_table_data_formal_node.ppl @@ -24,7 +24,7 @@ service PML_table_data_formal_node title = "Table Data" description = '''Simple table data defined as plain text, and rendered as a table. Each line of text represents a row. -Cell values in a row are separated by a comma or a TAB character. +Cell values in a row are separated by a vertical bar (|), a semicolon (;), a comma (,) or a TAB character. The content of each cell can only be plain text. If formatted text or complex cell content (e.g. picture in a cell, or table in a table) is needed, then please use the 'table' tag. A header and footer can optionally be defined. The horizontal alignment (left, center, or right) can be specified for each column. diff --git a/work/src/PPL/dev/pml/converter/data/formal_node/helper/se_formal_node_attributes.ppl b/work/src/PPL/dev/pml/converter/data/formal_node/helper/se_formal_node_attributes.ppl index 2121510..4296d0e 100644 --- a/work/src/PPL/dev/pml/converter/data/formal_node/helper/se_formal_node_attributes.ppl +++ b/work/src/PPL/dev/pml/converter/data/formal_node/helper/se_formal_node_attributes.ppl @@ -16,7 +16,7 @@ An id can be used to: - identify a node so that it can be styled individually with CSS - create an HTML anchor so that it can be accessed with the # (hash) sign (e.g. writing id=foo will enable you to have an HTML link ending with #foo. -An identifier must start with a letter and can be followed by any number of letters, digits, and underscores. Note for programmers: The regex of an identifier is: [a-zA-Z][a-zA-Z0-9_]*. Identifiers are case-sensitive. The following identifiers are all different: name, Name, and NAME.''' +An identifier must start with a letter or an underscore, and can be followed by any number of letters, digits, underscores, dots, and hyphens. Note for programmers: The regex of an identifier is: [a-zA-Z_][a-zA-Z0-9_\.-]*. Identifiers are case-sensitive. The following identifiers are all different: name, Name, and NAME.''' examples = "id = basic_concept" ) ) diff --git a/work/src/PPL/dev/pml/converter/data/formal_node/inline/with_raw_text_content/fa_PML_formal_inline_node_with_raw_text_content.ppl b/work/src/PPL/dev/pml/converter/data/formal_node/inline/with_raw_text_content/fa_PML_formal_inline_node_with_raw_text_content.ppl index 79c0f84..84a405b 100644 --- a/work/src/PPL/dev/pml/converter/data/formal_node/inline/with_raw_text_content/fa_PML_formal_inline_node_with_raw_text_content.ppl +++ b/work/src/PPL/dev/pml/converter/data/formal_node/inline/with_raw_text_content/fa_PML_formal_inline_node_with_raw_text_content.ppl @@ -5,7 +5,7 @@ factory PML_formal_inline_node_with_raw_text_content java_header import dev.pdml.core.data.formalNode.FormalNode; - import dev.pdml.core.data.formalNode.types.standard.TextBlockType; + import dev.pdml.ext.extensions.types.TextBlockType; import dev.pml.converter.data.formal_node.helper.se_formal_node; end java_header diff --git a/work/src/PPL/dev/pml/converter/reader/pXML_parser/se_pXML_parser.ppl b/work/src/PPL/dev/pml/converter/reader/pXML_parser/se_pXML_parser.ppl index e477caf..624ce79 100644 --- a/work/src/PPL/dev/pml/converter/reader/pXML_parser/se_pXML_parser.ppl +++ b/work/src/PPL/dev/pml/converter/reader/pXML_parser/se_pXML_parser.ppl @@ -9,28 +9,31 @@ service pXML_parser import org.ppl.core.collections.java.se_Java_collection_utilities; - import dev.pp.text.annotations.NotNull; - import dev.pp.text.reader.exception.TextReaderException; + import dev.pp.basics.annotations.NotNull; + + import dev.pp.text.reader.exception.InvalidTextException; import dev.pp.text.token.TextToken; + import dev.pp.scripting.env.ScriptingEnvironmentImpl;; + import dev.pdml.core.data.AST.attribute.ASTNodeAttribute; import dev.pdml.core.data.AST.attribute.ASTNodeAttributes; import dev.pdml.core.data.formalNode.FormalNode; import dev.pdml.core.data.formalNode.FormalNodes; - import dev.pdml.core.data.formalNode.types.PDMLType; - import dev.pdml.core.data.formalNode.types.standard.TextBlockType; + import dev.pdml.core.data.formalNode.PDMLType; + import dev.pdml.ext.extensions.types.TextBlockType; import dev.pdml.core.data.node.name.NodeName; - import dev.pdml.core.reader.parser.eventHandler.NodeEndEvent; - import dev.pdml.core.reader.parser.eventHandler.NodeStartEvent; - import dev.pdml.core.reader.parser.eventHandler.ParserEventHandler; - import dev.pdml.core.reader.parser.EventStreamParserBuilder; - import dev.pdml.core.reader.reader.extensions.PXMLExtensionsHandler; - - import dev.pdml.ext.extensions.DefaultPXMLExtensionsHandler; - import dev.pdml.ext.extensions.node.PXMLExtensionHandler; - import dev.pdml.ext.extensions.node.standard.ConstantDeclaration_ExtensionHandler; - import dev.pdml.ext.extensions.node.standard.InsertConstant_ExtensionHandler; - import dev.pdml.ext.extensions.node.standard.InsertFile_ExtensionHandler; + import dev.pdml.core.parser.eventHandler.NodeEndEvent; + import dev.pdml.core.parser.eventHandler.NodeStartEvent; + import dev.pdml.core.parser.eventHandler.PDMLParserEventHandler; + import dev.pdml.ext.utilities.parser.PDMLParserBuilder; + import dev.pdml.core.reader.extensions.PDMLExtensionsHandler; + + import dev.pdml.ext.extensions.PDMLExtensionsHandlerImpl; + // import dev.pdml.ext.extensions.node.PDMLExtensionNodeHandler; + // import dev.pdml.ext.extensions.utilities.SetConstant_ExtensionHandler; + // import dev.pdml.ext.extensions.utilities.GetConstant_ExtensionHandler; + // import dev.pdml.ext.extensions.utilities.InsertFile_ExtensionHandler; import dev.pml.converter.data.formal_node.block.with_raw_text_content.nodes.se_PML_HTML_code_formal_node; import dev.pml.converter.data.formal_node.block.with_raw_text_content.nodes.se_PML_input_formal_node; @@ -50,13 +53,13 @@ service pXML_parser end java_header java - static class CreateTree_ParserEventHandler implements ParserEventHandler { + static class CreateTree_PDMLParserEventHandler implements PDMLParserEventHandler { private ty_mutable_PDML_AST_node rootNode; - public CreateTree_ParserEventHandler() {} + public CreateTree_PDMLParserEventHandler() {} public void onStart() {} @@ -125,11 +128,11 @@ service pXML_parser return formalNodes; } - private static PXMLExtensionsHandler createExtensionsHandler() { + private static PDMLExtensionsHandler createExtensionsHandler() { /* disabled, because PML uses PDML's syntax - Map customizedExtensionNodeHandlers = + Map customizedExtensionNodeHandlers = new HashMap<>(); customizedExtensionNodeHandlers.put ( @@ -138,15 +141,15 @@ service pXML_parser customizedExtensionNodeHandlers.put ( se_PML_declare_constant_formal_node.getNode().standard_tag().getJavaString(), - new ConstantDeclaration_ExtensionHandler() ); + new SetConstant_ExtensionHandler() ); customizedExtensionNodeHandlers.put ( "ins-const", - new InsertConstant_ExtensionHandler() ); + new GetConstant_ExtensionHandler() ); - return new DefaultPXMLExtensionsHandler ( customizedExtensionNodeHandlers ); + return new PDMLExtensionsHandlerImpl ( customizedExtensionNodeHandlers ); */ - return new DefaultPXMLExtensionsHandler(); + return new PDMLExtensionsHandlerImpl(); } end java @@ -164,16 +167,17 @@ service pXML_parser variable canceling_error text_error or null = null java - ParserEventHandler eventHandler = - new CreateTree_ParserEventHandler(); + PDMLParserEventHandler eventHandler = + new CreateTree_PDMLParserEventHandler(); try { - new EventStreamParserBuilder<> ( eventHandler ) + new PDMLParserBuilder<> ( eventHandler ) .setErrorHandler ( i_error_handler.getJavaTextErrorHandler() ) .setExtensionsHandler ( createExtensionsHandler() ) + .setScriptingEnvironment ( new ScriptingEnvironmentImpl(true) ) .setFormalNodes ( createFormalNodes() ) .parseFile ( i_file.getJavaFile() ); - } catch ( TextReaderException e ) { + } catch ( InvalidTextException e ) { v_canceling_error = fa_text_error.createFromJava ( e.toTextError() ); } v_pXML_root_node = eventHandler.getResult(); diff --git a/work/src/PPL/dev/pml/converter/se_CLI_start.ppl b/work/src/PPL/dev/pml/converter/se_CLI_start.ppl index 50a6fe3..6abb9f6 100644 --- a/work/src/PPL/dev/pml/converter/se_CLI_start.ppl +++ b/work/src/PPL/dev/pml/converter/se_CLI_start.ppl @@ -38,12 +38,7 @@ examples: case type of result when error e - case type of e - when text_error - // already handled by error_handler - otherwise - OS.err.write_line ( e.to_string ) - . + report_error ( e ) se_OS_process.exit_with_error otherwise @@ -82,5 +77,15 @@ examples: const a = allow_process_exit_after_execution ) return result = r, allow_process_exit = a . + + function report_error ( error ) + + case type of error + when text_error + write_form_to_OS_err__text_error_handler.create.handle_error ( error ) + otherwise + OS.err.write_line ( error.to_string ) + . + . . . diff --git a/work/src/PPL/dev/pml/converter/se_PML_to_HTML_Converter.ppl b/work/src/PPL/dev/pml/converter/se_PML_to_HTML_Converter.ppl index 9f75284..39d14d4 100644 --- a/work/src/PPL/dev/pml/converter/se_PML_to_HTML_Converter.ppl +++ b/work/src/PPL/dev/pml/converter/se_PML_to_HTML_Converter.ppl @@ -3,8 +3,8 @@ service PML_to_HTML_Converter - att version string = "2.2.0" - att version_date local_date = local_date.parse_or_throw ( "2021-12-14" ) + att version string = "2.3.0" + att version_date local_date = local_date.parse_or_throw ( "2022-02-11" ) function try_convert_PML_file_path_string -> file or anticipated_error in absolute_or_relative_PML_file_path string @@ -28,12 +28,17 @@ service PML_to_HTML_Converter const error = try_create_HTML_file ( i_config ) if error is not null then - const first_error = i_config.error_handler.first_error - assert first_error is not null - se_editor.open_editor_for_error ( error = first_error, i_config ) + show_error_in_editor ( error, config ) return error . +/// + java + // if (true) throw new Exception ( "EEE" ); + if (true) throw new RuntimeException ( "RRR" ); + end java +./// + try_copy_CSS_files ( output_directory ) on_error:return_error try_copy_resources ( resources_directory, output_directory ) on_error:return_error @@ -102,7 +107,10 @@ service PML_to_HTML_Converter root_node = pXML_root_node context = PML_tree_creator_context.create ( error_handler ) ) on_error:return_error if error_handler.first_error as first_non_canceling_error is not null then - return first_non_canceling_error + // return first_non_canceling_error + return invalid_string_data_error.create ( + info = "The process has been aborted because of errors encountered." + data = null ) . i_config.document_TOC_position = document_node.TOC_position @@ -148,5 +156,23 @@ service PML_to_HTML_Converter file_overwrite_policy = file_copy_overwrite_policy.always_overwrite include_child_directories = yes ) . + + function show_error_in_editor ( error anticipated_error, config PML_to_HTML_config ) + + variable editor_error text_error or null = null + if i_config.error_handler.first_error as first_error is not null then + editor_error = first_error + else + case type of i_error + when text_error + editor_error = i_error + otherwise + editor_error = null + . + . + if editor_error is not null then + se_editor.open_editor_for_error ( error = editor_error, i_config ) + . + . . . diff --git a/work/src/PPL/dev/pml/converter/tree_creator/node_creator/creators/block_node/table_data/fa_PML_table_data_node_creator.ppl b/work/src/PPL/dev/pml/converter/tree_creator/node_creator/creators/block_node/table_data/fa_PML_table_data_node_creator.ppl index 2d18951..1ab2cba 100644 --- a/work/src/PPL/dev/pml/converter/tree_creator/node_creator/creators/block_node/table_data/fa_PML_table_data_node_creator.ppl +++ b/work/src/PPL/dev/pml/converter/tree_creator/node_creator/creators/block_node/table_data/fa_PML_table_data_node_creator.ppl @@ -60,6 +60,10 @@ factory PML_table_data_node_creator type:PML_node_creator if i_first_line.contains ( "\t" ) then return se_PML_node_creator_regexes.tab_separator + else if i_first_line.contains ( "|" ) then + return se_PML_node_creator_regexes.vertical_bar_separator + else if i_first_line.contains ( ";" ) then + return se_PML_node_creator_regexes.semicolon_separator else if i_first_line.contains ( "," ) then return se_PML_node_creator_regexes.comma_separator else diff --git a/work/src/PPL/dev/pml/converter/tree_creator/node_creator/se_PML_node_creator_regexes.ppl b/work/src/PPL/dev/pml/converter/tree_creator/node_creator/se_PML_node_creator_regexes.ppl index 3db0207..48cca1e 100644 --- a/work/src/PPL/dev/pml/converter/tree_creator/node_creator/se_PML_node_creator_regexes.ppl +++ b/work/src/PPL/dev/pml/converter/tree_creator/node_creator/se_PML_node_creator_regexes.ppl @@ -7,6 +7,8 @@ service PML_node_creator_regexes paragraph_break = regex.create ( '''\r?\n[ \t]*\r?\n''' ) whitespace = regex.create ( '''[ \t\r\n]+''' ) + vertical_bar_separator = regex.create ( '''\s*\|\s*''' ) + semicolon_separator = regex.create ( '''\s*;\s*''' ) comma_separator = regex.create ( '''\s*,\s*''' ) tab_separator = regex.create ( '''\s*\t\s*''' ) . diff --git a/work/src/PPL/dev/pml/converter/utilities/se_editor.ppl b/work/src/PPL/dev/pml/converter/utilities/se_editor.ppl index 9ce4d0b..37f3219 100644 --- a/work/src/PPL/dev/pml/converter/utilities/se_editor.ppl +++ b/work/src/PPL/dev/pml/converter/utilities/se_editor.ppl @@ -6,7 +6,7 @@ service editor java_header import java.io.File; - import dev.pp.text.utilities.OSProcess; + import dev.pp.basics.utilities.os.process.OSCommand; end java_header function open_editor_for_error ( error anticipated_error, config PML_to_HTML_config ) @@ -50,7 +50,7 @@ service editor assert OS_command_ is not null // avoid "not used" compiler error java - OSProcess.startOSCommandAndContinue ( c_OS_command_.getJavaString() ); + OSCommand.startAndContinue ( c_OS_command_.getJavaString() ); end java . . \ No newline at end of file diff --git a/work/src/PPL/dev/pml/converter/writer/HTML/context/se_generic_scripting_context.ppl b/work/src/PPL/dev/pml/converter/writer/HTML/context/se_generic_scripting_bindings.ppl similarity index 80% rename from work/src/PPL/dev/pml/converter/writer/HTML/context/se_generic_scripting_context.ppl rename to work/src/PPL/dev/pml/converter/writer/HTML/context/se_generic_scripting_bindings.ppl index 1b45845..b1d4fce 100644 --- a/work/src/PPL/dev/pml/converter/writer/HTML/context/se_generic_scripting_context.ppl +++ b/work/src/PPL/dev/pml/converter/writer/HTML/context/se_generic_scripting_bindings.ppl @@ -1,38 +1,27 @@ // SPDX-License-Identifier: GPL-2.0-only // Copyright (C) 2018 - 2021 Christian Neumanns, email: chris@pml-lang.dev -service generic_scripting_context +service generic_scripting_bindings java_header import org.ppl.core.basics.base_types.ty_non_null; import org.ppl.core.basics.scalar.string.fa_string; import org.ppl.core.basics.scalar.yes_no.fa_yes_no; - import org.ppl.ext.parameters.parameter.identifier.fa_parameter_id; -// import org.ppl.ext.parameters.parameter.map.ty_any_type_parameters; - import dev.pdml.ext.scripting.ScriptingContext; + import org.ppl.ext.parameters.parameter.identifier.fa_parameter_id; import dev.pml.converter.data.node.inline.generic.ty_PML_generic_inline_node; end java_header java - public static class GenericScriptingContext implements ScriptingContext { + public static class PMLWriterContextBinding { private final ty_PML_HTML_writer_context PMLWriterContext; private final ty_PML_generic_inline_node node; // private final ty_any_type_parameters nonHTMLAttributes; // private final ty_list childNodes; -/* - public GenericScriptingContext ( - ty_PML_HTML_writer_context PMLWriterContext, - ty_any_type_parameters nonHTMLAttributes ) { - - this.PMLWriterContext = PMLWriterContext; - this.nonHTMLAttributes = nonHTMLAttributes; - } -*/ - public GenericScriptingContext ( + public PMLWriterContextBinding ( ty_PML_HTML_writer_context PMLWriterContext, ty_PML_generic_inline_node node ) { diff --git a/work/src/PPL/dev/pml/converter/writer/HTML/node/inline/generic/fa_PML_generic_inline_node_HTML_writer.ppl b/work/src/PPL/dev/pml/converter/writer/HTML/node/inline/generic/fa_PML_generic_inline_node_HTML_writer.ppl index 50c139f..e3d4b81 100644 --- a/work/src/PPL/dev/pml/converter/writer/HTML/node/inline/generic/fa_PML_generic_inline_node_HTML_writer.ppl +++ b/work/src/PPL/dev/pml/converter/writer/HTML/node/inline/generic/fa_PML_generic_inline_node_HTML_writer.ppl @@ -7,14 +7,13 @@ factory PML_generic_inline_node_HTML_writer type:PML_node_HTML_writer attributes = new HashMap<>(); end java @@ -47,29 +42,14 @@ factory PML_generic_inline_node_HTML_writer type:PML_node_HTML_writer bindings = new HashMap<>(); + bindings.put ( "context", new PMLWriterContextBinding ( i_context, i_node ) ); + bindings.put ( "attributes", attributes ); try { - ScriptingUtils.executeJavascriptWithBindings ( + ScriptingUtils.executeJavascriptScript ( a_script_code.getJavaString(), - Map.of ( - "context", scriptingContext, - "attributes", attributes - ), + bindings, true ); // } catch ( PolyglotException | IllegalStateException | IllegalArgumentException e ) { } catch ( Exception e ) { @@ -80,6 +60,7 @@ factory PML_generic_inline_node_HTML_writer type:PML_node_HTML_writer PML_node_HTML_writer