@gmb/bitmark-parser-generator 1.35.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/bitmark-parser-generator.min.js +1 -1
- package/dist/browser/bundle-report.html +2 -2
- package/dist/cjs/BitmarkParserGenerator.js +8 -3
- package/dist/cjs/BitmarkParserGenerator.js.map +1 -1
- package/dist/cjs/ast/Ast.js +1 -0
- package/dist/cjs/ast/Ast.js.map +1 -1
- package/dist/cjs/ast/BaseBuilder.js +91 -54
- package/dist/cjs/ast/BaseBuilder.js.map +1 -1
- package/dist/cjs/ast/Builder.js +813 -389
- package/dist/cjs/ast/Builder.js.map +1 -1
- package/dist/cjs/ast/ResourceBuilder.js +516 -252
- package/dist/cjs/ast/ResourceBuilder.js.map +1 -1
- package/dist/cjs/ast/rules/NodeValidator.js +61 -22
- package/dist/cjs/ast/rules/NodeValidator.js.map +1 -1
- package/dist/cjs/breakscaping/Breakscape.js +96 -71
- package/dist/cjs/breakscaping/Breakscape.js.map +1 -1
- package/dist/cjs/config/raw/bits.js +44 -5
- package/dist/cjs/config/raw/bits.js.map +1 -1
- package/dist/cjs/config/raw/properties.js +7 -2
- package/dist/cjs/config/raw/properties.js.map +1 -1
- package/dist/cjs/generated/build-info.js +1 -1
- package/dist/cjs/generated/build-info.js.map +1 -1
- package/dist/cjs/generated/parser/bitmark/bitmark-peggy-parser.js +1 -0
- package/dist/cjs/generated/parser/bitmark/bitmark-peggy-parser.js.map +1 -1
- package/dist/cjs/generator/AstWalkerGenerator.js +4 -1
- package/dist/cjs/generator/AstWalkerGenerator.js.map +1 -1
- package/dist/cjs/generator/bitmark/BitmarkGenerator.js +992 -339
- package/dist/cjs/generator/bitmark/BitmarkGenerator.js.map +1 -1
- package/dist/cjs/generator/json/JsonGenerator.js +312 -1985
- package/dist/cjs/generator/json/JsonGenerator.js.map +1 -1
- package/dist/cjs/generator/text/TextGenerator.js +26 -8
- package/dist/cjs/generator/text/TextGenerator.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/model/ast/NodeType.js +28 -8
- package/dist/cjs/model/ast/NodeType.js.map +1 -1
- package/dist/cjs/model/config/enum/PropertyConfigKey.js +1 -0
- package/dist/cjs/model/config/enum/PropertyConfigKey.js.map +1 -1
- package/dist/cjs/model/enum/BitType.js +2 -2
- package/dist/cjs/model/enum/BitType.js.map +1 -1
- package/dist/cjs/model/enum/PropertyFormat.js +3 -1
- package/dist/cjs/model/enum/PropertyFormat.js.map +1 -1
- package/dist/cjs/model/enum/TextFormat.js +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserHelper.js +9 -3
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserHelper.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserProcessor.js +49 -131
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserTypes.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserValidator.js +7 -31
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserValidator.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js +255 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js.map +1 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js +25 -12
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/CardContentProcessor.js +175 -129
- package/dist/cjs/parser/bitmark/peg/contentProcessors/CardContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js +8 -2
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js +61 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js.map +1 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js +11 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js +21 -17
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js +50 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js.map +1 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js +2 -15
- package/dist/cjs/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js +2 -4
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js +4 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js +2 -4
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js +5 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js +5 -6
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js +23 -7
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js +5 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js +3 -2
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js +19 -8
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js +4 -6
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js +4 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js +14 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js +37 -21
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js +3 -2
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/json/JsonParser.js +73 -765
- package/dist/cjs/parser/json/JsonParser.js.map +1 -1
- package/dist/cjs/parser/text/TextParser.js +61 -2
- package/dist/cjs/parser/text/TextParser.js.map +1 -1
- package/dist/cjs/utils/BitUtils.js +15 -13
- package/dist/cjs/utils/BitUtils.js.map +1 -1
- package/dist/esm/BitmarkParserGenerator.js +8 -3
- package/dist/esm/BitmarkParserGenerator.js.map +1 -1
- package/dist/esm/ast/Ast.js +1 -0
- package/dist/esm/ast/Ast.js.map +1 -1
- package/dist/esm/ast/BaseBuilder.js +91 -54
- package/dist/esm/ast/BaseBuilder.js.map +1 -1
- package/dist/esm/ast/Builder.js +813 -389
- package/dist/esm/ast/Builder.js.map +1 -1
- package/dist/esm/ast/ResourceBuilder.js +516 -252
- package/dist/esm/ast/ResourceBuilder.js.map +1 -1
- package/dist/esm/ast/rules/NodeValidator.js +61 -22
- package/dist/esm/ast/rules/NodeValidator.js.map +1 -1
- package/dist/esm/breakscaping/Breakscape.js +96 -71
- package/dist/esm/breakscaping/Breakscape.js.map +1 -1
- package/dist/esm/config/raw/bits.js +44 -5
- package/dist/esm/config/raw/bits.js.map +1 -1
- package/dist/esm/config/raw/properties.js +7 -2
- package/dist/esm/config/raw/properties.js.map +1 -1
- package/dist/esm/generated/build-info.js +1 -1
- package/dist/esm/generated/build-info.js.map +1 -1
- package/dist/esm/generated/parser/bitmark/bitmark-peggy-parser.js +1 -0
- package/dist/esm/generated/parser/bitmark/bitmark-peggy-parser.js.map +1 -1
- package/dist/esm/generator/AstWalkerGenerator.js +4 -1
- package/dist/esm/generator/AstWalkerGenerator.js.map +1 -1
- package/dist/esm/generator/bitmark/BitmarkGenerator.js +992 -339
- package/dist/esm/generator/bitmark/BitmarkGenerator.js.map +1 -1
- package/dist/esm/generator/json/JsonGenerator.js +312 -1985
- package/dist/esm/generator/json/JsonGenerator.js.map +1 -1
- package/dist/esm/generator/text/TextGenerator.js +26 -8
- package/dist/esm/generator/text/TextGenerator.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/model/ast/NodeType.js +28 -8
- package/dist/esm/model/ast/NodeType.js.map +1 -1
- package/dist/esm/model/config/enum/PropertyConfigKey.js +1 -0
- package/dist/esm/model/config/enum/PropertyConfigKey.js.map +1 -1
- package/dist/esm/model/enum/BitType.js +2 -2
- package/dist/esm/model/enum/BitType.js.map +1 -1
- package/dist/esm/model/enum/PropertyFormat.js +3 -1
- package/dist/esm/model/enum/PropertyFormat.js.map +1 -1
- package/dist/esm/model/enum/TextFormat.js +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserHelper.js +9 -3
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserHelper.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserProcessor.js +49 -131
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserTypes.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserValidator.js +7 -31
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserValidator.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js +252 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js.map +1 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js +25 -12
- package/dist/esm/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/CardContentProcessor.js +175 -129
- package/dist/esm/parser/bitmark/peg/contentProcessors/CardContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js +8 -2
- package/dist/esm/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js +58 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js.map +1 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js +11 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js +21 -17
- package/dist/esm/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js +47 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js.map +1 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js +2 -15
- package/dist/esm/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js +2 -4
- package/dist/esm/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js +4 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js +2 -4
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js +5 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js +5 -6
- package/dist/esm/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js +23 -7
- package/dist/esm/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js +5 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js +3 -2
- package/dist/esm/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js +19 -8
- package/dist/esm/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js +4 -6
- package/dist/esm/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js +4 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js +14 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js +37 -21
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js +3 -2
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/json/JsonParser.js +73 -765
- package/dist/esm/parser/json/JsonParser.js.map +1 -1
- package/dist/esm/parser/text/TextParser.js +61 -2
- package/dist/esm/parser/text/TextParser.js.map +1 -1
- package/dist/esm/utils/BitUtils.js +15 -13
- package/dist/esm/utils/BitUtils.js.map +1 -1
- package/dist/types/BitmarkParserGenerator.d.ts +8 -0
- package/dist/types/BitmarkParserGenerator.d.ts.map +1 -1
- package/dist/types/ast/Ast.d.ts.map +1 -1
- package/dist/types/ast/BaseBuilder.d.ts +31 -21
- package/dist/types/ast/BaseBuilder.d.ts.map +1 -1
- package/dist/types/ast/Builder.d.ts +293 -441
- package/dist/types/ast/Builder.d.ts.map +1 -1
- package/dist/types/ast/ResourceBuilder.d.ts +177 -164
- package/dist/types/ast/ResourceBuilder.d.ts.map +1 -1
- package/dist/types/ast/rules/NodeValidator.d.ts +3 -2
- package/dist/types/ast/rules/NodeValidator.d.ts.map +1 -1
- package/dist/types/breakscaping/Breakscape.d.ts +6 -5
- package/dist/types/breakscaping/Breakscape.d.ts.map +1 -1
- package/dist/types/config/raw/bits.d.ts.map +1 -1
- package/dist/types/config/raw/properties.d.ts.map +1 -1
- package/dist/types/generated/parser/bitmark/bitmark-peggy-parser.d.ts.map +1 -1
- package/dist/types/generator/AstWalkerGenerator.d.ts.map +1 -1
- package/dist/types/generator/bitmark/BitmarkGenerator.d.ts +92 -55
- package/dist/types/generator/bitmark/BitmarkGenerator.d.ts.map +1 -1
- package/dist/types/generator/json/JsonGenerator.d.ts +89 -108
- package/dist/types/generator/json/JsonGenerator.d.ts.map +1 -1
- package/dist/types/generator/text/TextGenerator.d.ts +14 -2
- package/dist/types/generator/text/TextGenerator.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/model/ast/NodeType.d.ts +50 -16
- package/dist/types/model/ast/NodeType.d.ts.map +1 -1
- package/dist/types/model/ast/Nodes.d.ts +64 -440
- package/dist/types/model/ast/Nodes.d.ts.map +1 -1
- package/dist/types/model/config/enum/ConfigKey.d.ts +2 -0
- package/dist/types/model/config/enum/ConfigKey.d.ts.map +1 -1
- package/dist/types/model/config/enum/PropertyConfigKey.d.ts +3 -0
- package/dist/types/model/config/enum/PropertyConfigKey.d.ts.map +1 -1
- package/dist/types/model/enum/BitType.d.ts +4 -4
- package/dist/types/model/enum/PropertyFormat.d.ts +4 -2
- package/dist/types/model/enum/PropertyFormat.d.ts.map +1 -1
- package/dist/types/model/enum/PropertyTag.d.ts +2 -0
- package/dist/types/model/enum/PropertyTag.d.ts.map +1 -1
- package/dist/types/model/json/BitJson.d.ts +38 -21
- package/dist/types/model/json/BitJson.d.ts.map +1 -1
- package/dist/types/model/json/BodyBitJson.d.ts +16 -12
- package/dist/types/model/json/BodyBitJson.d.ts.map +1 -1
- package/dist/types/model/json/ResourceJson.d.ts +2 -22
- package/dist/types/model/json/ResourceJson.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserHelper.d.ts +3 -2
- package/dist/types/parser/bitmark/peg/BitmarkPegParserHelper.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserProcessor.d.ts +2 -15
- package/dist/types/parser/bitmark/peg/BitmarkPegParserProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserTypes.d.ts +83 -71
- package/dist/types/parser/bitmark/peg/BitmarkPegParserTypes.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserValidator.d.ts +2 -2
- package/dist/types/parser/bitmark/peg/BitmarkPegParserValidator.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/BodyContentProcessor.d.ts +37 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/BodyContentProcessor.d.ts.map +1 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/CardContentProcessor.d.ts +2 -2
- package/dist/types/parser/bitmark/peg/contentProcessors/CardContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.d.ts +15 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.d.ts.map +1 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/FooterContentProcessor.d.ts +16 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/FooterContentProcessor.d.ts.map +1 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.d.ts +2 -2
- package/dist/types/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.d.ts +5 -2
- package/dist/types/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.d.ts +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/json/JsonParser.d.ts +9 -72
- package/dist/types/parser/json/JsonParser.d.ts.map +1 -1
- package/dist/types/parser/text/TextParser.d.ts +16 -1
- package/dist/types/parser/text/TextParser.d.ts.map +1 -1
- package/dist/types/utils/BitUtils.d.ts +8 -8
- package/dist/types/utils/BitUtils.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -24,10 +24,7 @@ import { Config } from '../../config/Config';
|
|
|
24
24
|
import { NodeType } from '../../model/ast/NodeType';
|
|
25
25
|
import { BitType } from '../../model/enum/BitType';
|
|
26
26
|
import { BitmarkVersion, DEFAULT_BITMARK_VERSION } from '../../model/enum/BitmarkVersion';
|
|
27
|
-
import { BodyBitType } from '../../model/enum/BodyBitType';
|
|
28
27
|
import { ExampleType } from '../../model/enum/ExampleType';
|
|
29
|
-
import { PropertyAstKey } from '../../model/enum/PropertyAstKey';
|
|
30
|
-
import { PropertyTag } from '../../model/enum/PropertyTag';
|
|
31
28
|
import { ResourceTag } from '../../model/enum/ResourceTag';
|
|
32
29
|
import { TextFormat } from '../../model/enum/TextFormat';
|
|
33
30
|
import { TextNodeType } from '../../model/enum/TextNodeType';
|
|
@@ -35,9 +32,8 @@ import { TextParser } from '../../parser/text/TextParser';
|
|
|
35
32
|
import { ArrayUtils } from '../../utils/ArrayUtils';
|
|
36
33
|
import { BooleanUtils } from '../../utils/BooleanUtils';
|
|
37
34
|
import { NumberUtils } from '../../utils/NumberUtils';
|
|
38
|
-
import { StringUtils } from '../../utils/StringUtils';
|
|
39
|
-
import { UrlUtils } from '../../utils/UrlUtils';
|
|
40
35
|
import { AstWalkerGenerator } from '../AstWalkerGenerator';
|
|
36
|
+
import { TextGenerator } from '../text/TextGenerator';
|
|
41
37
|
const DEFAULT_OPTIONS = {
|
|
42
38
|
// debugGenerationInline: true,
|
|
43
39
|
};
|
|
@@ -65,7 +61,13 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
65
61
|
this.textDefault = Breakscape.EMPTY_STRING;
|
|
66
62
|
this.bodyDefault = Breakscape.EMPTY_STRING;
|
|
67
63
|
this.bodyJson = this.bodyDefault;
|
|
68
|
-
this.
|
|
64
|
+
this.placeholderIndex = 0;
|
|
65
|
+
// Bind callbacks
|
|
66
|
+
this.enter = this.enter.bind(this);
|
|
67
|
+
this.between = this.between.bind(this);
|
|
68
|
+
this.exit = this.exit.bind(this);
|
|
69
|
+
this.leaf = this.leaf.bind(this);
|
|
70
|
+
this.bodyBitCallback = this.bodyBitCallback.bind(this);
|
|
69
71
|
this.bitmarkVersion = (_a = BitmarkVersion.fromValue(options === null || options === void 0 ? void 0 : options.bitmarkVersion)) !== null && _a !== void 0 ? _a : DEFAULT_BITMARK_VERSION;
|
|
70
72
|
this.textParserVersion = this.textParser.version();
|
|
71
73
|
this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options === null || options === void 0 ? void 0 : options.jsonOptions);
|
|
@@ -82,11 +84,13 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
82
84
|
this.options.textAsPlainText = false;
|
|
83
85
|
}
|
|
84
86
|
}
|
|
87
|
+
// Create the text generator for generating v2 texts
|
|
88
|
+
this.textGenerator = new TextGenerator(this.bitmarkVersion, {
|
|
89
|
+
// writeCallback: this.write,
|
|
90
|
+
bodyBitCallback: this.bodyBitCallback,
|
|
91
|
+
debugGenerationInline: this.debugGenerationInline,
|
|
92
|
+
});
|
|
85
93
|
this.writer = writer;
|
|
86
|
-
this.enter = this.enter.bind(this);
|
|
87
|
-
this.between = this.between.bind(this);
|
|
88
|
-
this.exit = this.exit.bind(this);
|
|
89
|
-
this.leaf = this.leaf.bind(this);
|
|
90
94
|
this.generatePropertyHandlers();
|
|
91
95
|
}
|
|
92
96
|
/**
|
|
@@ -130,7 +134,8 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
130
134
|
this.textDefault = this.options.textAsPlainText ? Breakscape.EMPTY_STRING : [];
|
|
131
135
|
this.bodyDefault = this.options.textAsPlainText ? Breakscape.EMPTY_STRING : [];
|
|
132
136
|
this.bodyJson = this.bodyDefault;
|
|
133
|
-
this.
|
|
137
|
+
this.listItem = undefined;
|
|
138
|
+
this.placeholderIndex = 0;
|
|
134
139
|
this.printed = false;
|
|
135
140
|
}
|
|
136
141
|
walkAndWrite(ast) {
|
|
@@ -148,6 +153,16 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
148
153
|
// Reset the JSON
|
|
149
154
|
this.json = [];
|
|
150
155
|
}
|
|
156
|
+
exit_bitmarkAst(_node, _route) {
|
|
157
|
+
// Convert all bitmark text to plain text if required
|
|
158
|
+
if (this.options.textAsPlainText) {
|
|
159
|
+
// Convert all bitmark text to plain text
|
|
160
|
+
this.convertAllBitmarkTextsToStringsForPlainText(this.json);
|
|
161
|
+
}
|
|
162
|
+
// Walk the entire json object and remove all' '_xxx' properties
|
|
163
|
+
// (which are used to store temporary data during the generation process)
|
|
164
|
+
this.removeTemporaryProperties(this.json);
|
|
165
|
+
}
|
|
151
166
|
// bitmarkAst -> bits
|
|
152
167
|
// bitmarkAst -> bits -> bitsValue
|
|
153
168
|
enter_bitsValue(node, _route) {
|
|
@@ -181,7 +196,7 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
181
196
|
}
|
|
182
197
|
else {
|
|
183
198
|
// String example
|
|
184
|
-
defaultExample = (_c =
|
|
199
|
+
defaultExample = (_c = ArrayUtils.asSingle(bit.sampleSolution)) !== null && _c !== void 0 ? _c : '';
|
|
185
200
|
}
|
|
186
201
|
const exampleRes = this.toExample(bit, {
|
|
187
202
|
defaultExample,
|
|
@@ -193,87 +208,34 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
193
208
|
else if (bit.isExample) {
|
|
194
209
|
this.bitJson.isExample = true;
|
|
195
210
|
}
|
|
211
|
+
// Reset the placeholder index
|
|
212
|
+
this.placeholderIndex = 0;
|
|
196
213
|
}
|
|
197
214
|
exit_bitsValue(_node, _route) {
|
|
198
215
|
// Clean up the bit JSON, removing any unwanted values
|
|
199
|
-
this.
|
|
216
|
+
this.cleanBitJson(this.bitJson);
|
|
200
217
|
}
|
|
201
218
|
// bitmarkAst -> bits -> bitsValue -> imageSource
|
|
202
219
|
enter_imageSource(node, route) {
|
|
203
|
-
|
|
204
|
-
// Ignore values that are not at the bit level as they might be handled elsewhere
|
|
205
|
-
const parent = this.getParentNode(route);
|
|
206
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue)
|
|
207
|
-
return;
|
|
208
|
-
const { url, mockupId, size, format, trim } = imageSource;
|
|
209
|
-
const imageSourceJson = {};
|
|
210
|
-
this.addProperty(imageSourceJson, 'url', url !== null && url !== void 0 ? url : '', true);
|
|
211
|
-
this.addProperty(imageSourceJson, 'mockupId', mockupId !== null && mockupId !== void 0 ? mockupId : '', true);
|
|
212
|
-
this.addProperty(imageSourceJson, 'size', size !== null && size !== void 0 ? size : null, true);
|
|
213
|
-
this.addProperty(imageSourceJson, 'format', format !== null && format !== void 0 ? format : null, true);
|
|
214
|
-
this.addProperty(imageSourceJson, 'trim', BooleanUtils.isBoolean(trim) ? trim : null, true);
|
|
215
|
-
this.bitJson.imageSource = imageSourceJson;
|
|
220
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
216
221
|
}
|
|
217
222
|
// bitmarkAst -> bits -> bitsValue -> person
|
|
218
223
|
enter_person(node, route) {
|
|
219
|
-
const person = node.value;
|
|
220
224
|
const bitType = this.getBitType(route);
|
|
221
|
-
|
|
222
|
-
const parent = this.getParentNode(route);
|
|
223
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue || !bitType)
|
|
224
|
-
return;
|
|
225
|
-
const { name, title, avatarImage } = person;
|
|
226
|
-
const personJson = {};
|
|
227
|
-
this.addProperty(personJson, 'name', name !== null && name !== void 0 ? name : '', true);
|
|
228
|
-
if (title) {
|
|
229
|
-
this.addProperty(personJson, 'title', title, true);
|
|
230
|
-
}
|
|
231
|
-
if (avatarImage) {
|
|
232
|
-
const res = this.parseResourceToJson(bitType, avatarImage);
|
|
233
|
-
if (res && res.type === ResourceTag.image) {
|
|
234
|
-
personJson.avatarImage = res.image;
|
|
235
|
-
}
|
|
236
|
-
}
|
|
225
|
+
let keyOverride = 'person';
|
|
237
226
|
if (Config.isOfBitType(bitType, BitType.conversationLeft1)) {
|
|
238
227
|
// Use the legacy partner property in the JSON for conversation bits, so change to person is backwards compatible
|
|
239
|
-
|
|
240
|
-
}
|
|
241
|
-
else {
|
|
242
|
-
this.bitJson.person = personJson;
|
|
228
|
+
keyOverride = 'partner';
|
|
243
229
|
}
|
|
230
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false, keyOverride });
|
|
244
231
|
}
|
|
245
232
|
// bitmarkAst -> bits -> bitsValue -> ratingLevelStart
|
|
246
233
|
enter_ratingLevelStart(node, route) {
|
|
247
|
-
|
|
248
|
-
if (json)
|
|
249
|
-
this.bitJson.ratingLevelStart = json;
|
|
250
|
-
// Stop traversal of this branch
|
|
251
|
-
return false;
|
|
234
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
252
235
|
}
|
|
253
236
|
// bitmarkAst -> bits -> bitsValue -> ratingLevelEnd
|
|
254
237
|
enter_ratingLevelEnd(node, route) {
|
|
255
|
-
|
|
256
|
-
if (json)
|
|
257
|
-
this.bitJson.ratingLevelEnd = json;
|
|
258
|
-
// Stop traversal of this branch
|
|
259
|
-
return false;
|
|
260
|
-
}
|
|
261
|
-
// Common code for ratingLevelStart and ratingLevelEnd
|
|
262
|
-
enterRatingLevelStartEndCommon(node, route) {
|
|
263
|
-
const n = node.value;
|
|
264
|
-
// Ignore statements that are not at the bit level
|
|
265
|
-
const parent = this.getParentNode(route);
|
|
266
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue)
|
|
267
|
-
return;
|
|
268
|
-
const json = {};
|
|
269
|
-
this.addProperty(json, 'level', n.level, true);
|
|
270
|
-
if (n.label) {
|
|
271
|
-
json.label = this.convertBreakscapedStringToJsonText(n.label, TextFormat.bitmarkMinusMinus);
|
|
272
|
-
}
|
|
273
|
-
// Delete unwanted properties
|
|
274
|
-
if ((json === null || json === void 0 ? void 0 : json.label) == null)
|
|
275
|
-
delete json.label;
|
|
276
|
-
return json;
|
|
238
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
277
239
|
}
|
|
278
240
|
// bitmarkAst -> bits -> bitsValue -> productId
|
|
279
241
|
enter_productId(node, route) {
|
|
@@ -281,53 +243,76 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
281
243
|
// Ignore item that is not at the correct level
|
|
282
244
|
const parent = this.getParentNode(route);
|
|
283
245
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue)
|
|
284
|
-
return;
|
|
246
|
+
return true;
|
|
285
247
|
const bitType = this.getBitType(route);
|
|
286
248
|
if (bitType === BitType.module) {
|
|
287
|
-
this.addProperty(this.bitJson, 'productId', productIds);
|
|
249
|
+
this.addProperty(this.bitJson, 'productId', productIds, { array: true });
|
|
288
250
|
}
|
|
289
251
|
else if (productIds.length > 0) {
|
|
290
|
-
this.addProperty(this.bitJson, 'productId', productIds[productIds.length - 1],
|
|
252
|
+
this.addProperty(this.bitJson, 'productId', productIds[productIds.length - 1], { array: false });
|
|
291
253
|
}
|
|
254
|
+
// Stop traversal of this branch
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
// bitmarkAst -> bits -> bitsValue -> markConfig
|
|
258
|
+
enter_markConfig(_node, _route) {
|
|
259
|
+
// Handler so markConfig is not processed by the default property handler
|
|
260
|
+
// Continue traversal
|
|
261
|
+
return true;
|
|
292
262
|
}
|
|
293
263
|
// bitmarkAst -> bits -> bitsValue -> markConfig -> markConfigValue
|
|
294
264
|
enter_markConfigValue(node, route) {
|
|
295
|
-
const
|
|
265
|
+
const markJson = node.value;
|
|
296
266
|
// Ignore item that is not at the correct level
|
|
297
267
|
const parent = this.getParentNode(route);
|
|
298
268
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.markConfig)
|
|
299
|
-
return;
|
|
300
|
-
const { mark, color, emphasis } = markConfig;
|
|
301
|
-
const markJson = {};
|
|
302
|
-
this.addProperty(markJson, 'mark', mark !== null && mark !== void 0 ? mark : 'unknown', true);
|
|
303
|
-
if (color)
|
|
304
|
-
this.addProperty(markJson, 'color', color !== null && color !== void 0 ? color : '', true);
|
|
305
|
-
if (emphasis)
|
|
306
|
-
this.addProperty(markJson, 'emphasis', emphasis !== null && emphasis !== void 0 ? emphasis : '', true);
|
|
269
|
+
return true;
|
|
307
270
|
if (!this.bitJson.marks)
|
|
308
271
|
this.bitJson.marks = [];
|
|
309
272
|
this.bitJson.marks.push(markJson);
|
|
273
|
+
// Stop traversal of this branch
|
|
274
|
+
return false;
|
|
310
275
|
}
|
|
311
|
-
// bitmarkAst -> bits -> bitsValue ->
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
276
|
+
// bitmarkAst -> bits -> bitsValue -> item
|
|
277
|
+
enter_item(node, route) {
|
|
278
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
279
|
+
}
|
|
280
|
+
// bitmarkAst -> bits -> bitsValue -> lead
|
|
281
|
+
enter_lead(node, route) {
|
|
282
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
283
|
+
}
|
|
284
|
+
// bitmarkAst -> bits -> bitsValue -> pageNumber
|
|
285
|
+
enter_pageNumber(node, route) {
|
|
286
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
287
|
+
}
|
|
288
|
+
// bitmarkAst -> bits -> bitsValue -> marginNumber
|
|
289
|
+
enter_marginNumber(node, route) {
|
|
290
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
291
|
+
}
|
|
292
|
+
// bitmarkAst -> bits -> bitsValue -> hint
|
|
293
|
+
enter_hint(node, route) {
|
|
294
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
295
|
+
}
|
|
296
|
+
// bitmarkAst -> bits -> bitsValue -> instruction
|
|
297
|
+
enter_instruction(node, route) {
|
|
298
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
299
|
+
}
|
|
300
|
+
// bitmarkAst -> bits -> bitsValue -> title
|
|
301
|
+
enter_title(node, route) {
|
|
302
|
+
// // Ignore title that are not at the bit or card node level as they are handled elsewhere
|
|
303
|
+
// const parent = this.getParentNode(route);
|
|
304
|
+
// if (parent?.key !== NodeType.bitsValue && parent?.key !== NodeType.cardNode) return;
|
|
305
|
+
// this.bitJson.title = node.value;
|
|
306
|
+
return this.standardHandler(node, route, [NodeType.bitsValue, NodeType.cardNode], { array: true });
|
|
307
|
+
}
|
|
308
|
+
// bitmarkAst -> bits -> bitsValue -> subtitle
|
|
309
|
+
enter_subtitle(node, route) {
|
|
310
|
+
// this.bitJson.subtitle = node.value;
|
|
311
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
312
|
+
}
|
|
313
|
+
// bitmarkAst -> bits -> bitsValue -> caption
|
|
314
|
+
enter_caption(node, route) {
|
|
315
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
331
316
|
}
|
|
332
317
|
// bitmarkAst -> bits -> bitsValue -> width
|
|
333
318
|
enter_width(node, route) {
|
|
@@ -339,8 +324,7 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
339
324
|
value = (_a = NumberUtils.asNumber(value, 0)) !== null && _a !== void 0 ? _a : 0;
|
|
340
325
|
}
|
|
341
326
|
// Add the property
|
|
342
|
-
this.
|
|
343
|
-
return false;
|
|
327
|
+
return this.standardHandler(node, route, undefined, { array: false, valueOverride: value });
|
|
344
328
|
}
|
|
345
329
|
// bitmarkAst -> bits -> bitsValue -> height
|
|
346
330
|
enter_height(node, route) {
|
|
@@ -352,8 +336,7 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
352
336
|
value = (_a = NumberUtils.asNumber(value, 0)) !== null && _a !== void 0 ? _a : 0;
|
|
353
337
|
}
|
|
354
338
|
// Add the property
|
|
355
|
-
this.
|
|
356
|
-
return false;
|
|
339
|
+
return this.standardHandler(node, route, undefined, { array: false, valueOverride: value });
|
|
357
340
|
}
|
|
358
341
|
// bitmarkAst -> bits -> bitsValue -> extraProperties
|
|
359
342
|
enter_extraProperties(node, _route) {
|
|
@@ -364,12 +347,14 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
364
347
|
if (Object.prototype.hasOwnProperty.call(this.bitJson, key)) {
|
|
365
348
|
k = `_${key}`;
|
|
366
349
|
}
|
|
367
|
-
this.addProperty(this.bitJson, k, values);
|
|
350
|
+
this.addProperty(this.bitJson, k, values, { array: true });
|
|
368
351
|
}
|
|
369
352
|
}
|
|
370
353
|
}
|
|
371
354
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> cardBits -> cardBitsValue
|
|
372
355
|
enter_cardBitsValue(node, route) {
|
|
356
|
+
var _a, _b, _c, _d;
|
|
357
|
+
const cardBit = node.value;
|
|
373
358
|
// How cardBits are handled depends on the bit type
|
|
374
359
|
const bitType = this.getBitType(route);
|
|
375
360
|
if (!bitType)
|
|
@@ -387,7 +372,14 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
387
372
|
listItems = this.bitJson.listItems;
|
|
388
373
|
}
|
|
389
374
|
// Create this list item
|
|
390
|
-
this.listItem =
|
|
375
|
+
this.listItem = {
|
|
376
|
+
item: ((_a = cardBit.item) !== null && _a !== void 0 ? _a : []),
|
|
377
|
+
lead: ((_b = cardBit.lead) !== null && _b !== void 0 ? _b : []),
|
|
378
|
+
hint: ((_c = cardBit.hint) !== null && _c !== void 0 ? _c : []),
|
|
379
|
+
instruction: ((_d = cardBit.instruction) !== null && _d !== void 0 ? _d : []),
|
|
380
|
+
// ...this.toItemLeadHintInstruction(node.value),
|
|
381
|
+
body: this.bodyDefault,
|
|
382
|
+
};
|
|
391
383
|
// Delete unwanted properties
|
|
392
384
|
// const nv = node.value;
|
|
393
385
|
// const li: Partial<ListItemJson> = this.listItem;
|
|
@@ -397,220 +389,58 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
397
389
|
this.listItem = undefined;
|
|
398
390
|
}
|
|
399
391
|
// bitmarkAst -> bits -> bitsValue -> body
|
|
400
|
-
enter_body(
|
|
401
|
-
|
|
402
|
-
const textFormat = this.getTextFormat(_route);
|
|
403
|
-
if (textFormat === TextFormat.json)
|
|
404
|
-
this.bodyDefault = null;
|
|
405
|
-
this.bodyJson = this.bodyDefault;
|
|
406
|
-
}
|
|
407
|
-
exit_body(_node, route) {
|
|
392
|
+
enter_body(node, route) {
|
|
393
|
+
const value = node.value;
|
|
408
394
|
const parent = this.getParentNode(route);
|
|
409
395
|
if (!parent)
|
|
410
|
-
return;
|
|
396
|
+
return false;
|
|
397
|
+
const textFormat = this.getTextFormat(route);
|
|
398
|
+
const isBitmarkText = textFormat === TextFormat.bitmarkMinusMinus || textFormat === TextFormat.bitmarkPlusPlus;
|
|
399
|
+
this.bodyJson = value.body;
|
|
400
|
+
// Set the correct body property
|
|
411
401
|
if (parent.key === NodeType.bitsValue) {
|
|
412
402
|
// Body is at the bit level
|
|
413
403
|
this.bitJson.body = this.bodyJson;
|
|
404
|
+
// Convert the body to plain text if required
|
|
405
|
+
if (this.options.textAsPlainText && isBitmarkText && this.isBitmarkText(this.bodyJson)) {
|
|
406
|
+
const textBody = this.textGenerator.generateSync(this.bodyJson, textFormat);
|
|
407
|
+
this.bitJson.body = (Breakscape.unbreakscape(textBody, {
|
|
408
|
+
textFormat: TextFormat.bitmarkMinusMinus,
|
|
409
|
+
}) || '').trim();
|
|
410
|
+
}
|
|
414
411
|
}
|
|
415
412
|
else if (parent.key === NodeType.cardBitsValue) {
|
|
416
413
|
// Body is at the list item (card bit) level
|
|
417
414
|
if (this.listItem)
|
|
418
415
|
this.listItem.body = this.bodyJson;
|
|
419
416
|
}
|
|
420
|
-
|
|
421
|
-
// bitmarkAst -> bits -> bitsValue -> * -> bodyParts (body, cardBody (e.g. cloze-list, page-footer))
|
|
422
|
-
enter_bodyParts(node, route) {
|
|
423
|
-
const bodyParts = node.value;
|
|
424
|
-
const plainText = this.options.textAsPlainText;
|
|
425
|
-
const textFormat = this.getTextFormat(route);
|
|
426
|
-
let fullBodyTextStr = '';
|
|
427
|
-
let plainBodyTextStr = '';
|
|
428
|
-
let placeholderIndex = this.startPlaceholderIndex;
|
|
429
|
-
// Function for creating the placeholder keys
|
|
430
|
-
const createPlaceholderKeys = (i) => {
|
|
431
|
-
return {
|
|
432
|
-
// Old placeholder style (for backwards compatibility) = {0}
|
|
433
|
-
legacyPlaceholderKey: `{${i}}`,
|
|
434
|
-
// New placeholder style (cannot clash as bitmark parser would have removed it) = [!0]
|
|
435
|
-
placeholderKey: `[!${i}]`,
|
|
436
|
-
};
|
|
437
|
-
};
|
|
438
|
-
// Loop the text bodyParts creating full body text with the correct placeholders
|
|
439
|
-
//
|
|
440
|
-
// For text output 'fullBodyTextStr:
|
|
441
|
-
// - is created and written to the JSON
|
|
442
|
-
// - has placeholders inserted into 'fullBodyTextStr' in the format {0}
|
|
443
|
-
//
|
|
444
|
-
// For JSON output 'fullBodyTextStr:
|
|
445
|
-
// - is created and passed into the text parser to create the body text AST
|
|
446
|
-
// - has placeholders inserted into 'fullBodyTextStr' in the format [!0] to allow the text parser to identify
|
|
447
|
-
// where the body bits should be inserted
|
|
448
|
-
//
|
|
449
|
-
for (let i = 0; i < bodyParts.length; i++) {
|
|
450
|
-
const bodyPart = bodyParts[i];
|
|
451
|
-
const isText = bodyPart.type === BodyBitType.text;
|
|
452
|
-
if (isText) {
|
|
453
|
-
const asText = bodyPart;
|
|
454
|
-
const bodyTextPart = asText.data.bodyText;
|
|
455
|
-
// Append the text part to the full text body
|
|
456
|
-
if (asText.data.isPlain) {
|
|
457
|
-
plainBodyTextStr = Breakscape.concatenate(plainBodyTextStr, bodyTextPart);
|
|
458
|
-
}
|
|
459
|
-
else {
|
|
460
|
-
fullBodyTextStr = Breakscape.concatenate(fullBodyTextStr, bodyTextPart);
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
else {
|
|
464
|
-
const { legacyPlaceholderKey, placeholderKey } = createPlaceholderKeys(placeholderIndex);
|
|
465
|
-
// Append the placeholder to the full text body
|
|
466
|
-
fullBodyTextStr = Breakscape.concatenate(fullBodyTextStr, plainText ? legacyPlaceholderKey : placeholderKey);
|
|
467
|
-
placeholderIndex++;
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
// Add string or AST to the body
|
|
471
|
-
const bodyJson = this.convertBreakscapedStringToJsonText(fullBodyTextStr, textFormat);
|
|
472
|
-
const plainTextBodyJson = this.convertBreakscapedStringToJsonText(plainBodyTextStr, TextFormat.text);
|
|
473
|
-
const bodyAst = bodyJson;
|
|
474
|
-
// Newlines will have been lost from the end of fullBodyTextStr, and start of plainBodyTextStr
|
|
475
|
-
// Count then and add them back when merging
|
|
476
|
-
const newlines = StringUtils.countOccurrencesAtEnd(fullBodyTextStr, '\n') +
|
|
477
|
-
StringUtils.countOccurrencesAtStart(plainBodyTextStr, '\n');
|
|
478
|
-
this.bodyJson = this.concatenatePlainTextWithJsonTexts(bodyJson, newlines, plainTextBodyJson);
|
|
479
|
-
// Loop the body parts again to create the body bits:
|
|
480
|
-
// - For text output the body bits are inserted into the 'placeholders' object
|
|
481
|
-
// - For JSON output the body bits are inserted into body AST, replacing the placeholders created by the text parser
|
|
482
|
-
placeholderIndex = this.startPlaceholderIndex;
|
|
483
|
-
for (let i = 0; i < bodyParts.length; i++) {
|
|
484
|
-
const bodyPart = bodyParts[i];
|
|
485
|
-
// Skip text body parts as they are handled above
|
|
486
|
-
const isText = bodyPart.type === BodyBitType.text;
|
|
487
|
-
if (isText)
|
|
488
|
-
continue;
|
|
489
|
-
const bodyBit = bodyPart;
|
|
490
|
-
let bodyBitJson;
|
|
491
|
-
const { legacyPlaceholderKey } = createPlaceholderKeys(placeholderIndex);
|
|
492
|
-
switch (bodyPart.type) {
|
|
493
|
-
case BodyBitType.gap: {
|
|
494
|
-
const gap = bodyBit;
|
|
495
|
-
bodyBitJson = this.createGapJson(gap);
|
|
496
|
-
break;
|
|
497
|
-
}
|
|
498
|
-
case BodyBitType.mark: {
|
|
499
|
-
const mark = bodyBit;
|
|
500
|
-
bodyBitJson = this.createMarkJson(mark);
|
|
501
|
-
break;
|
|
502
|
-
}
|
|
503
|
-
case BodyBitType.select: {
|
|
504
|
-
const select = bodyBit;
|
|
505
|
-
bodyBitJson = this.createSelectJson(select);
|
|
506
|
-
break;
|
|
507
|
-
}
|
|
508
|
-
case BodyBitType.highlight: {
|
|
509
|
-
const highlight = bodyBit;
|
|
510
|
-
bodyBitJson = this.createHighlightJson(highlight);
|
|
511
|
-
break;
|
|
512
|
-
}
|
|
513
|
-
}
|
|
514
|
-
// Add the gap to the placeholders
|
|
515
|
-
if (bodyBitJson) {
|
|
516
|
-
if (plainText) {
|
|
517
|
-
// Ensure placeholders exists
|
|
518
|
-
if (!this.bitJson.placeholders)
|
|
519
|
-
this.bitJson.placeholders = {};
|
|
520
|
-
// Add the body bit to the placeholders
|
|
521
|
-
this.bitJson.placeholders[legacyPlaceholderKey] = bodyBitJson;
|
|
522
|
-
}
|
|
523
|
-
else {
|
|
524
|
-
// Insert the body bit into the body AST
|
|
525
|
-
this.replacePlaceholderWithBodyBit(bodyAst, bodyBitJson, placeholderIndex);
|
|
526
|
-
}
|
|
527
|
-
}
|
|
528
|
-
placeholderIndex++;
|
|
529
|
-
}
|
|
530
|
-
// Save the current placeholder index for the next body (body, card bodies)
|
|
531
|
-
this.startPlaceholderIndex = placeholderIndex;
|
|
532
|
-
// Stop traversal of this branch for efficiency
|
|
417
|
+
// Stop traversal of this branch
|
|
533
418
|
return false;
|
|
534
419
|
}
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
this.
|
|
541
|
-
|
|
542
|
-
return
|
|
420
|
+
bodyBitCallback(bodyBit, _index, _route) {
|
|
421
|
+
// console.log('bodyBitCallback', bodyBit, index, route);
|
|
422
|
+
var _a;
|
|
423
|
+
const placeholder = `{${this.placeholderIndex}}`;
|
|
424
|
+
this.placeholderIndex++;
|
|
425
|
+
this.bitJson.placeholders = (_a = this.bitJson.placeholders) !== null && _a !== void 0 ? _a : {};
|
|
426
|
+
this.bitJson.placeholders[placeholder] = bodyBit;
|
|
427
|
+
return placeholder;
|
|
428
|
+
}
|
|
429
|
+
// bitmarkAst -> bits -> bitsValue -> footer
|
|
430
|
+
enter_footer(node, route) {
|
|
431
|
+
return this.standardHandler(node, route, undefined, { array: true, valueOverride: node.value.footer });
|
|
543
432
|
}
|
|
544
433
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> elements
|
|
545
|
-
enter_elements(node,
|
|
546
|
-
|
|
547
|
-
// Ignore elements that are not at the bit level as they are handled elsewhere as quizzes
|
|
548
|
-
// if (parent?.key !== NodeType.bitsValue) return;
|
|
549
|
-
if (elements && elements.length > 0) {
|
|
550
|
-
this.bitJson.elements = Breakscape.unbreakscape(elements);
|
|
551
|
-
}
|
|
434
|
+
enter_elements(node, route) {
|
|
435
|
+
return this.standardHandler(node, route, undefined, { array: true });
|
|
552
436
|
}
|
|
553
437
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> flashcards
|
|
554
438
|
enter_flashcards(node, route) {
|
|
555
|
-
|
|
556
|
-
const flashcards = node.value;
|
|
557
|
-
// Ignore responses that are not at the correct level as they are potentially handled elsewhere
|
|
558
|
-
const parent = this.getParentNode(route);
|
|
559
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
560
|
-
return;
|
|
561
|
-
const flashcardsJson = [];
|
|
562
|
-
if (flashcards) {
|
|
563
|
-
for (const c of flashcards) {
|
|
564
|
-
// Create the flashcard
|
|
565
|
-
const flashcardJson = Object.assign(Object.assign({ question: this.convertBreakscapedStringToJsonText((_a = c.question) !== null && _a !== void 0 ? _a : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus), answer: this.convertBreakscapedStringToJsonText((_b = c.answer) !== null && _b !== void 0 ? _b : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus), alternativeAnswers: ((_c = c.alternativeAnswers) !== null && _c !== void 0 ? _c : []).map((a) => this.convertBreakscapedStringToJsonText(a !== null && a !== void 0 ? a : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus)) }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
566
|
-
defaultExample: c.isDefaultExample,
|
|
567
|
-
isBoolean: true,
|
|
568
|
-
}));
|
|
569
|
-
// Delete unwanted properties
|
|
570
|
-
if (((_d = c.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
571
|
-
delete flashcardJson.lead;
|
|
572
|
-
flashcardsJson.push(flashcardJson);
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
if (flashcardsJson.length > 0) {
|
|
576
|
-
this.bitJson.cards = flashcardsJson;
|
|
577
|
-
}
|
|
439
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true, keyOverride: 'cards' });
|
|
578
440
|
}
|
|
579
441
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> definitions
|
|
580
442
|
enter_definitions(node, route) {
|
|
581
|
-
|
|
582
|
-
const definitionListItem = node.value;
|
|
583
|
-
// Ignore responses that are not at the correct level as they are potentially handled elsewhere
|
|
584
|
-
const parent = this.getParentNode(route);
|
|
585
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
586
|
-
return;
|
|
587
|
-
const definitionsJson = [];
|
|
588
|
-
if (definitionListItem) {
|
|
589
|
-
for (const c of definitionListItem) {
|
|
590
|
-
// Create the flashcard
|
|
591
|
-
const definitionListItemJson = Object.assign(Object.assign({ term: this.convertBreakscapedStringToJsonText((_a = c.term) !== null && _a !== void 0 ? _a : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus), description: this.convertBreakscapedStringToJsonText((_b = c.description) !== null && _b !== void 0 ? _b : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus), alternativeDefinitions: ((_c = c.alternativeDefinitions) !== null && _c !== void 0 ? _c : []).map((a) => this.convertBreakscapedStringToJsonText(a !== null && a !== void 0 ? a : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus)) }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
592
|
-
defaultExample: c.isDefaultExample,
|
|
593
|
-
isBoolean: true,
|
|
594
|
-
}));
|
|
595
|
-
// Delete unwanted properties
|
|
596
|
-
if (((_d = c.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
597
|
-
delete definitionListItemJson.lead;
|
|
598
|
-
// description-list is an alias of definition-list. Just rename the properties
|
|
599
|
-
if (Config.isOfBitType(this.getBitType(route), BitType.descriptionList)) {
|
|
600
|
-
definitionListItemJson.alternativeDescriptions = definitionListItemJson.alternativeDefinitions;
|
|
601
|
-
delete definitionListItemJson.alternativeDefinitions;
|
|
602
|
-
}
|
|
603
|
-
definitionsJson.push(definitionListItemJson);
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
if (definitionsJson.length > 0) {
|
|
607
|
-
if (Config.isOfBitType(this.getBitType(route), BitType.descriptionList)) {
|
|
608
|
-
this.bitJson.descriptions = definitionsJson;
|
|
609
|
-
}
|
|
610
|
-
else {
|
|
611
|
-
this.bitJson.definitions = definitionsJson;
|
|
612
|
-
}
|
|
613
|
-
}
|
|
443
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
614
444
|
}
|
|
615
445
|
// bitmarkAst -> bits -> bitsValue -> statement
|
|
616
446
|
enter_statement(node, route) {
|
|
@@ -621,405 +451,74 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
621
451
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
622
452
|
return;
|
|
623
453
|
if (statement) {
|
|
624
|
-
this.bitJson.statement = (_a =
|
|
454
|
+
this.bitJson.statement = (_a = statement.statement) !== null && _a !== void 0 ? _a : '';
|
|
625
455
|
this.bitJson.isCorrect = (_b = statement.isCorrect) !== null && _b !== void 0 ? _b : false;
|
|
456
|
+
this.bitJson.example = statement.example;
|
|
457
|
+
this.bitJson.isExample = statement.isExample;
|
|
626
458
|
}
|
|
627
459
|
}
|
|
628
460
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> statements -> statementsValue
|
|
629
461
|
enter_statements(node, route) {
|
|
630
|
-
|
|
631
|
-
const statements = node.value;
|
|
632
|
-
// Ignore statements that are not at the card node level as they are handled elsewhere
|
|
633
|
-
const parent = this.getParentNode(route);
|
|
634
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
635
|
-
return;
|
|
636
|
-
const statementsJson = [];
|
|
637
|
-
if (statements) {
|
|
638
|
-
for (const s of statements) {
|
|
639
|
-
// Create the statement
|
|
640
|
-
const statementJson = Object.assign(Object.assign({ statement: (_a = Breakscape.unbreakscape(s.text)) !== null && _a !== void 0 ? _a : '', isCorrect: !!s.isCorrect }, this.toItemLeadHintInstruction(s)), this.toExample(s, {
|
|
641
|
-
defaultExample: !!s.isCorrect,
|
|
642
|
-
isBoolean: true,
|
|
643
|
-
}));
|
|
644
|
-
// Delete unwanted properties
|
|
645
|
-
if (((_b = s.itemLead) === null || _b === void 0 ? void 0 : _b.item) == null)
|
|
646
|
-
delete statementJson.item;
|
|
647
|
-
if (((_c = s.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
648
|
-
delete statementJson.lead;
|
|
649
|
-
if ((s === null || s === void 0 ? void 0 : s.hint) == null)
|
|
650
|
-
delete statementJson.hint;
|
|
651
|
-
if ((s === null || s === void 0 ? void 0 : s.instruction) == null)
|
|
652
|
-
delete statementJson.instruction;
|
|
653
|
-
statementsJson.push(statementJson);
|
|
654
|
-
}
|
|
655
|
-
}
|
|
656
|
-
if (statementsJson.length > 0) {
|
|
657
|
-
this.bitJson.statements = statementsJson;
|
|
658
|
-
}
|
|
462
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
659
463
|
}
|
|
660
464
|
// bitmarkAst -> bits -> bitsValue -> choices
|
|
661
465
|
// X bitmarkAst -> bits -> bitsValue -> cardNode -> quizzes -> quizzesValue -> choices
|
|
662
466
|
enter_choices(node, route) {
|
|
663
|
-
|
|
664
|
-
const choices = node.value;
|
|
665
|
-
// Ignore choices that are not at the bit level as they are handled elsewhere as quizzes
|
|
666
|
-
const parent = this.getParentNode(route);
|
|
667
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
668
|
-
return;
|
|
669
|
-
const choicesJson = [];
|
|
670
|
-
if (choices) {
|
|
671
|
-
for (const c of choices) {
|
|
672
|
-
// Create the choice
|
|
673
|
-
const choiceJson = Object.assign(Object.assign({ choice: (_a = Breakscape.unbreakscape(c.text)) !== null && _a !== void 0 ? _a : '', isCorrect: (_b = c.isCorrect) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
674
|
-
defaultExample: !!c.isCorrect,
|
|
675
|
-
isBoolean: true,
|
|
676
|
-
}));
|
|
677
|
-
// Delete unwanted properties
|
|
678
|
-
if (((_c = c.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
679
|
-
delete choiceJson.lead;
|
|
680
|
-
choicesJson.push(choiceJson);
|
|
681
|
-
}
|
|
682
|
-
}
|
|
683
|
-
if (choicesJson.length > 0) {
|
|
684
|
-
this.bitJson.choices = choicesJson;
|
|
685
|
-
}
|
|
467
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
686
468
|
}
|
|
687
469
|
// bitmarkAst -> bits -> bitsValue -> responses
|
|
688
470
|
// X bitmarkAst -> bits -> bitsValue -> cardNode -> quizzes -> quizzesValue -> responses
|
|
689
471
|
enter_responses(node, route) {
|
|
690
|
-
|
|
691
|
-
const responses = node.value;
|
|
692
|
-
// Ignore responses that are not at the correct level as they are handled elsewhere as quizzes
|
|
693
|
-
const parent = this.getParentNode(route);
|
|
694
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
695
|
-
return;
|
|
696
|
-
const responsesJson = [];
|
|
697
|
-
if (responses) {
|
|
698
|
-
for (const r of responses) {
|
|
699
|
-
// Create the response
|
|
700
|
-
const responseJson = Object.assign(Object.assign({ response: (_a = Breakscape.unbreakscape(r.text)) !== null && _a !== void 0 ? _a : '', isCorrect: (_b = r.isCorrect) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(r)), this.toExample(r, {
|
|
701
|
-
defaultExample: !!r.isCorrect,
|
|
702
|
-
isBoolean: true,
|
|
703
|
-
}));
|
|
704
|
-
// Delete unwanted properties
|
|
705
|
-
if (((_c = r.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
706
|
-
delete responseJson.lead;
|
|
707
|
-
responsesJson.push(responseJson);
|
|
708
|
-
}
|
|
709
|
-
}
|
|
710
|
-
if (responsesJson.length > 0) {
|
|
711
|
-
this.bitJson.responses = responsesJson;
|
|
712
|
-
}
|
|
472
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
713
473
|
}
|
|
714
474
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> quizzes
|
|
715
|
-
enter_quizzes(node,
|
|
716
|
-
|
|
717
|
-
const quizzes = node.value;
|
|
718
|
-
const quizzesJson = [];
|
|
719
|
-
if (quizzes) {
|
|
720
|
-
for (const q of quizzes) {
|
|
721
|
-
// Choices
|
|
722
|
-
const choicesJson = [];
|
|
723
|
-
if (q.choices) {
|
|
724
|
-
for (const c of q.choices) {
|
|
725
|
-
// Create the choice
|
|
726
|
-
const choiceJson = Object.assign(Object.assign({ choice: (_a = Breakscape.unbreakscape(c.text)) !== null && _a !== void 0 ? _a : '', isCorrect: (_b = c.isCorrect) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
727
|
-
defaultExample: !!c.isCorrect,
|
|
728
|
-
isBoolean: true,
|
|
729
|
-
}));
|
|
730
|
-
// Delete unwanted properties
|
|
731
|
-
if (((_c = q.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
732
|
-
delete choiceJson.lead;
|
|
733
|
-
choicesJson.push(choiceJson);
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
// Responses
|
|
737
|
-
const responsesJson = [];
|
|
738
|
-
if (q.responses) {
|
|
739
|
-
for (const r of q.responses) {
|
|
740
|
-
// Create the choice
|
|
741
|
-
const responseJson = Object.assign(Object.assign({ response: (_d = Breakscape.unbreakscape(r.text)) !== null && _d !== void 0 ? _d : '', isCorrect: (_e = r.isCorrect) !== null && _e !== void 0 ? _e : false }, this.toItemLeadHintInstruction(r)), this.toExample(r, {
|
|
742
|
-
defaultExample: !!r.isCorrect,
|
|
743
|
-
isBoolean: true,
|
|
744
|
-
}));
|
|
745
|
-
// Delete unwanted properties
|
|
746
|
-
if (((_f = q.itemLead) === null || _f === void 0 ? void 0 : _f.lead) == null)
|
|
747
|
-
delete responseJson.lead;
|
|
748
|
-
responsesJson.push(responseJson);
|
|
749
|
-
}
|
|
750
|
-
}
|
|
751
|
-
// Create the quiz
|
|
752
|
-
const quizJson = Object.assign(Object.assign({}, this.toItemLeadHintInstruction(q)), { isExample: (_g = q.isExample) !== null && _g !== void 0 ? _g : false, choices: q.choices ? choicesJson : undefined, responses: q.responses ? responsesJson : undefined });
|
|
753
|
-
// Delete unwanted properties
|
|
754
|
-
if (((_h = q.itemLead) === null || _h === void 0 ? void 0 : _h.lead) == null)
|
|
755
|
-
delete quizJson.lead;
|
|
756
|
-
quizzesJson.push(quizJson);
|
|
757
|
-
}
|
|
758
|
-
}
|
|
759
|
-
if (quizzesJson.length > 0) {
|
|
760
|
-
this.bitJson.quizzes = quizzesJson;
|
|
761
|
-
}
|
|
475
|
+
enter_quizzes(node, route) {
|
|
476
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
762
477
|
}
|
|
763
478
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> heading
|
|
764
|
-
enter_heading(node,
|
|
765
|
-
|
|
766
|
-
const heading = node.value;
|
|
767
|
-
// Check if the heading is for a match or a match matrix
|
|
768
|
-
const bitType = this.getBitType(_route);
|
|
769
|
-
const isMatrix = Config.isOfBitType(bitType, BitType.matchMatrix);
|
|
770
|
-
// Create the heading
|
|
771
|
-
const headingJson = {
|
|
772
|
-
forKeys: (_a = Breakscape.unbreakscape(heading.forKeys)) !== null && _a !== void 0 ? _a : '',
|
|
773
|
-
};
|
|
774
|
-
if (isMatrix) {
|
|
775
|
-
// Matrix match, forValues is an array
|
|
776
|
-
headingJson.forValues = [];
|
|
777
|
-
if (Array.isArray(heading.forValues)) {
|
|
778
|
-
if (heading.forValues.length >= 1) {
|
|
779
|
-
headingJson.forValues = Breakscape.unbreakscape(heading.forValues);
|
|
780
|
-
}
|
|
781
|
-
}
|
|
782
|
-
}
|
|
783
|
-
else {
|
|
784
|
-
// Standard match, forValues is a string
|
|
785
|
-
headingJson.forValues = '';
|
|
786
|
-
if (Array.isArray(heading.forValues)) {
|
|
787
|
-
if (heading.forValues.length >= 1) {
|
|
788
|
-
headingJson.forValues = Breakscape.unbreakscape(heading.forValues[heading.forValues.length - 1]);
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
this.bitJson.heading = headingJson;
|
|
479
|
+
enter_heading(node, route) {
|
|
480
|
+
return this.standardHandler(node, route, undefined, { array: false });
|
|
793
481
|
}
|
|
794
482
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> pairs
|
|
795
483
|
enter_pairs(node, route) {
|
|
796
|
-
|
|
797
|
-
const pairs = node.value;
|
|
798
|
-
const pairsJson = [];
|
|
799
|
-
const bitType = this.getBitType(route);
|
|
800
|
-
if (pairs && bitType) {
|
|
801
|
-
for (const p of pairs) {
|
|
802
|
-
// Get default example
|
|
803
|
-
const defaultExample = Array.isArray(p.values) && p.values.length > 0 && p.values[0];
|
|
804
|
-
// Create the question
|
|
805
|
-
const pairJson = Object.assign(Object.assign(Object.assign({ key: (_a = Breakscape.unbreakscape(p.key)) !== null && _a !== void 0 ? _a : '', keyAudio: p.keyAudio ? this.addAudioResource(bitType, p.keyAudio) : undefined, keyImage: p.keyImage ? this.addImageResource(bitType, p.keyImage) : undefined, values: (_b = Breakscape.unbreakscape(p.values)) !== null && _b !== void 0 ? _b : [] }, this.toItemLeadHintInstruction(p)), { isCaseSensitive: (_c = p.isCaseSensitive) !== null && _c !== void 0 ? _c : true }), this.toExample(p, {
|
|
806
|
-
defaultExample,
|
|
807
|
-
isBoolean: false,
|
|
808
|
-
}));
|
|
809
|
-
// Delete unwanted properties
|
|
810
|
-
if (((_d = p.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
811
|
-
delete pairJson.lead;
|
|
812
|
-
if (pairJson.key) {
|
|
813
|
-
delete pairJson.keyAudio;
|
|
814
|
-
delete pairJson.keyImage;
|
|
815
|
-
}
|
|
816
|
-
if (pairJson.keyAudio != null) {
|
|
817
|
-
delete pairJson.key;
|
|
818
|
-
delete pairJson.keyImage;
|
|
819
|
-
}
|
|
820
|
-
if (pairJson.keyImage != null) {
|
|
821
|
-
delete pairJson.key;
|
|
822
|
-
delete pairJson.keyAudio;
|
|
823
|
-
}
|
|
824
|
-
pairsJson.push(pairJson);
|
|
825
|
-
}
|
|
826
|
-
}
|
|
827
|
-
if (pairsJson.length > 0) {
|
|
828
|
-
this.bitJson.pairs = pairsJson;
|
|
829
|
-
}
|
|
484
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
830
485
|
}
|
|
831
486
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> matrix
|
|
832
|
-
enter_matrix(node,
|
|
833
|
-
|
|
834
|
-
const matrix = node.value;
|
|
835
|
-
const matrixJsonArray = [];
|
|
836
|
-
if (matrix) {
|
|
837
|
-
for (const m of matrix) {
|
|
838
|
-
// Choices
|
|
839
|
-
const matrixCellsJson = [];
|
|
840
|
-
if (m.cells) {
|
|
841
|
-
for (const c of m.cells) {
|
|
842
|
-
// Get default example
|
|
843
|
-
const defaultExample = Array.isArray(c.values) && c.values.length > 0 && c.values[0];
|
|
844
|
-
// Create the choice
|
|
845
|
-
const matrixCellJson = Object.assign(Object.assign(Object.assign({ values: (_a = Breakscape.unbreakscape(c.values)) !== null && _a !== void 0 ? _a : [] }, this.toItemLeadHintInstruction(c)), { isCaseSensitive: (_b = c.isCaseSensitive) !== null && _b !== void 0 ? _b : true }), this.toExample(c, {
|
|
846
|
-
defaultExample,
|
|
847
|
-
isBoolean: false,
|
|
848
|
-
}));
|
|
849
|
-
// Delete unwanted properties
|
|
850
|
-
if (((_c = c.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
851
|
-
delete matrixCellJson.lead;
|
|
852
|
-
if (c.hint == null)
|
|
853
|
-
delete matrixCellJson.hint;
|
|
854
|
-
matrixCellsJson.push(matrixCellJson);
|
|
855
|
-
}
|
|
856
|
-
}
|
|
857
|
-
// Create the matrix
|
|
858
|
-
const matrixJson = Object.assign(Object.assign({ key: (_d = Breakscape.unbreakscape(m.key)) !== null && _d !== void 0 ? _d : '', cells: matrixCellsJson !== null && matrixCellsJson !== void 0 ? matrixCellsJson : [] }, this.toItemLeadHintInstruction(m)), {
|
|
859
|
-
// ...this.toExample(m.example, m.isExample),
|
|
860
|
-
isExample: (_e = m.isExample) !== null && _e !== void 0 ? _e : false });
|
|
861
|
-
// Delete unwanted properties
|
|
862
|
-
if (((_f = m.itemLead) === null || _f === void 0 ? void 0 : _f.lead) == null)
|
|
863
|
-
delete matrixJson.lead;
|
|
864
|
-
if (m.instruction == null)
|
|
865
|
-
delete matrixJson.instruction;
|
|
866
|
-
matrixJsonArray.push(matrixJson);
|
|
867
|
-
}
|
|
868
|
-
}
|
|
869
|
-
if (matrixJsonArray.length > 0) {
|
|
870
|
-
this.bitJson.matrix = matrixJsonArray;
|
|
871
|
-
}
|
|
487
|
+
enter_matrix(node, route) {
|
|
488
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
872
489
|
}
|
|
873
490
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> table
|
|
874
|
-
enter_table(node,
|
|
875
|
-
|
|
876
|
-
// const bitType = this.getBitType(route);
|
|
877
|
-
if (table) {
|
|
878
|
-
const tableJson = {
|
|
879
|
-
columns: Breakscape.unbreakscape(table.columns),
|
|
880
|
-
data: table.rows.map((row) => Breakscape.unbreakscape(row)),
|
|
881
|
-
};
|
|
882
|
-
// const isEmpty = !table.columns || table.columns.length === 0 || !table.rows || table.rows.length === 0;
|
|
883
|
-
this.bitJson.table = tableJson;
|
|
884
|
-
}
|
|
885
|
-
// Stop traversal of this branch to avoid unnecessary processing
|
|
886
|
-
return false;
|
|
491
|
+
enter_table(node, route) {
|
|
492
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: false });
|
|
887
493
|
}
|
|
888
494
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> questions
|
|
889
|
-
enter_questions(node,
|
|
890
|
-
|
|
891
|
-
const questions = node.value;
|
|
892
|
-
const questionsJson = [];
|
|
893
|
-
if (questions) {
|
|
894
|
-
for (const q of questions) {
|
|
895
|
-
// Create the question
|
|
896
|
-
const questionJson = Object.assign(Object.assign(Object.assign({ question: (_a = Breakscape.unbreakscape(q.question)) !== null && _a !== void 0 ? _a : '', partialAnswer: (_b = Breakscape.unbreakscape(ArrayUtils.asSingle(q.partialAnswer))) !== null && _b !== void 0 ? _b : '', sampleSolution: (_c = Breakscape.unbreakscape(ArrayUtils.asSingle(q.sampleSolution))) !== null && _c !== void 0 ? _c : '', additionalSolutions: (_d = Breakscape.unbreakscape(q.additionalSolutions)) !== null && _d !== void 0 ? _d : [] }, this.toItemLeadHintInstruction(q)), { reasonableNumOfChars: q.reasonableNumOfChars }), this.toExample(q, {
|
|
897
|
-
defaultExample: q.sampleSolution || '',
|
|
898
|
-
isBoolean: false,
|
|
899
|
-
}));
|
|
900
|
-
// Delete unwanted properties
|
|
901
|
-
if (((_e = q.itemLead) === null || _e === void 0 ? void 0 : _e.lead) == null)
|
|
902
|
-
delete questionJson.lead;
|
|
903
|
-
if (q.additionalSolutions == null || q.additionalSolutions.length === 0) {
|
|
904
|
-
delete questionJson.additionalSolutions;
|
|
905
|
-
}
|
|
906
|
-
questionsJson.push(questionJson);
|
|
907
|
-
}
|
|
908
|
-
}
|
|
909
|
-
if (questionsJson.length > 0) {
|
|
910
|
-
this.bitJson.questions = questionsJson;
|
|
911
|
-
}
|
|
495
|
+
enter_questions(node, route) {
|
|
496
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
912
497
|
}
|
|
913
498
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> botResponses
|
|
914
499
|
enter_botResponses(node, route) {
|
|
915
|
-
|
|
916
|
-
const botResponses = node.value;
|
|
917
|
-
// Ignore responses that are not at the cardNode level as they are handled elsewhere
|
|
918
|
-
const parent = this.getParentNode(route);
|
|
919
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
920
|
-
return;
|
|
921
|
-
const responsesJson = [];
|
|
922
|
-
if (botResponses) {
|
|
923
|
-
for (const r of botResponses) {
|
|
924
|
-
// Create the response
|
|
925
|
-
const responseJson = Object.assign({ response: (_a = Breakscape.unbreakscape(r.response)) !== null && _a !== void 0 ? _a : '', reaction: (_b = Breakscape.unbreakscape(r.reaction)) !== null && _b !== void 0 ? _b : '', feedback: (_c = Breakscape.unbreakscape(r.feedback)) !== null && _c !== void 0 ? _c : '' }, this.toItemLeadHintInstruction(r));
|
|
926
|
-
// Delete unwanted properties
|
|
927
|
-
if (((_d = r.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
928
|
-
delete responseJson.lead;
|
|
929
|
-
if (r.hint == null)
|
|
930
|
-
delete responseJson.hint;
|
|
931
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
932
|
-
delete responseJson.instruction;
|
|
933
|
-
responsesJson.push(responseJson);
|
|
934
|
-
}
|
|
935
|
-
}
|
|
936
|
-
if (responsesJson.length > 0) {
|
|
937
|
-
this.bitJson.responses = responsesJson;
|
|
938
|
-
}
|
|
500
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true, keyOverride: 'responses' });
|
|
939
501
|
}
|
|
940
502
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> ingredients -> ingredientsValue
|
|
941
503
|
enter_ingredients(node, route) {
|
|
942
|
-
|
|
943
|
-
const ingredients = node.value;
|
|
944
|
-
// Ignore statements that are not at the card node level as they are handled elsewhere
|
|
945
|
-
const parent = this.getParentNode(route);
|
|
946
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
947
|
-
return;
|
|
948
|
-
const ingredientsJson = [];
|
|
949
|
-
if (ingredients) {
|
|
950
|
-
for (const i of ingredients) {
|
|
951
|
-
// Create the ingredient
|
|
952
|
-
const ingredientJson = {
|
|
953
|
-
title: (_a = Breakscape.unbreakscape(i.title)) !== null && _a !== void 0 ? _a : '',
|
|
954
|
-
checked: (_b = i.checked) !== null && _b !== void 0 ? _b : false,
|
|
955
|
-
item: (_c = Breakscape.unbreakscape(i.item)) !== null && _c !== void 0 ? _c : '',
|
|
956
|
-
quantity: (_d = i.quantity) !== null && _d !== void 0 ? _d : 0,
|
|
957
|
-
unit: (_e = Breakscape.unbreakscape(i.unit)) !== null && _e !== void 0 ? _e : '',
|
|
958
|
-
unitAbbr: (_f = Breakscape.unbreakscape(i.unitAbbr)) !== null && _f !== void 0 ? _f : '',
|
|
959
|
-
decimalPlaces: (_g = i.decimalPlaces) !== null && _g !== void 0 ? _g : 1,
|
|
960
|
-
disableCalculation: (_h = i.disableCalculation) !== null && _h !== void 0 ? _h : false,
|
|
961
|
-
};
|
|
962
|
-
// Delete unwanted properties
|
|
963
|
-
if ((i === null || i === void 0 ? void 0 : i.title) == null)
|
|
964
|
-
delete ingredientJson.title;
|
|
965
|
-
// if (i?.unit == null) delete ingredientJson.unit;
|
|
966
|
-
if ((i === null || i === void 0 ? void 0 : i.unitAbbr) == null)
|
|
967
|
-
delete ingredientJson.unitAbbr;
|
|
968
|
-
// if (i?.instruction == null) delete ingredientJson.instruction;
|
|
969
|
-
ingredientsJson.push(ingredientJson);
|
|
970
|
-
}
|
|
971
|
-
}
|
|
972
|
-
if (ingredientsJson.length > 0) {
|
|
973
|
-
this.bitJson.ingredients = ingredientsJson;
|
|
974
|
-
}
|
|
504
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: true });
|
|
975
505
|
}
|
|
976
506
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> captionDefinitionList
|
|
977
|
-
enter_captionDefinitionList(node,
|
|
978
|
-
|
|
979
|
-
const list = node.value;
|
|
980
|
-
// const bitType = this.getBitType(route);
|
|
981
|
-
if (list) {
|
|
982
|
-
const columns = (_a = list.columns) !== null && _a !== void 0 ? _a : [];
|
|
983
|
-
const definitions = (_b = list.definitions) !== null && _b !== void 0 ? _b : [];
|
|
984
|
-
const captionDefinitionListJson = {
|
|
985
|
-
columns: Breakscape.unbreakscape(columns),
|
|
986
|
-
definitions: definitions.map((d) => {
|
|
987
|
-
var _a, _b;
|
|
988
|
-
return {
|
|
989
|
-
term: (_a = Breakscape.unbreakscape(d.term)) !== null && _a !== void 0 ? _a : '',
|
|
990
|
-
description: (_b = Breakscape.unbreakscape(d.description)) !== null && _b !== void 0 ? _b : '',
|
|
991
|
-
};
|
|
992
|
-
}),
|
|
993
|
-
};
|
|
994
|
-
// const isEmpty = !table.columns || table.columns.length === 0 || !table.rows || table.rows.length === 0;
|
|
995
|
-
this.bitJson.captionDefinitionList = captionDefinitionListJson;
|
|
996
|
-
}
|
|
997
|
-
// Stop traversal of this branch to avoid unnecessary processing
|
|
998
|
-
return false;
|
|
507
|
+
enter_captionDefinitionList(node, route) {
|
|
508
|
+
return this.standardHandler(node, route, NodeType.cardNode, { array: false });
|
|
999
509
|
}
|
|
1000
510
|
// bitmarkAst -> bits -> bitsValue -> imagePlaceholder
|
|
1001
511
|
enter_imagePlaceholder(node, route) {
|
|
1002
|
-
|
|
1003
|
-
const parent = this.getParentNode(route);
|
|
1004
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue)
|
|
1005
|
-
return;
|
|
1006
|
-
const resource = node.value;
|
|
1007
|
-
const bitType = this.getBitType(route);
|
|
1008
|
-
if (!resource || !bitType)
|
|
1009
|
-
return;
|
|
1010
|
-
const res = this.parseResourceToJson(bitType, resource);
|
|
1011
|
-
if (res && res.type === ResourceTag.image) {
|
|
1012
|
-
this.bitJson.imagePlaceholder = res;
|
|
1013
|
-
}
|
|
512
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
1014
513
|
}
|
|
1015
514
|
// bitmarkAst -> bits -> bitsValue -> resources
|
|
1016
515
|
enter_resources(node, route) {
|
|
1017
|
-
var _a;
|
|
516
|
+
var _a, _b;
|
|
1018
517
|
const resources = node.value;
|
|
1019
518
|
const bitType = this.getBitType(route);
|
|
1020
519
|
const resourceType = this.getResourceType(route);
|
|
1021
520
|
if (!resources || !bitType)
|
|
1022
|
-
return;
|
|
521
|
+
return true;
|
|
1023
522
|
let resourceJson;
|
|
1024
523
|
const bitConfig = Config.getBitConfig(bitType);
|
|
1025
524
|
const bitResourcesConfig = Config.getBitResourcesConfig(bitType, resourceType);
|
|
@@ -1033,15 +532,17 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1033
532
|
// Create the combo resource wrapper
|
|
1034
533
|
const wrapper = {
|
|
1035
534
|
type: comboTagType,
|
|
535
|
+
__typeAlias: comboTagType,
|
|
1036
536
|
};
|
|
1037
537
|
// For each of the resources in this combo resource, find the actual resource and add it to the JSON
|
|
1038
538
|
for (const rt of resourceTags) {
|
|
1039
|
-
const r = resources.find((r) => r.
|
|
539
|
+
const r = resources.find((r) => r.__typeAlias === rt);
|
|
1040
540
|
// Extract everything except the type from the resource
|
|
1041
541
|
if (r) {
|
|
1042
|
-
const tagConfig = Config.getTagConfigForTag(bitConfig.tags, r.
|
|
1043
|
-
const key = (_a = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.jsonKey) !== null && _a !== void 0 ? _a : r.
|
|
1044
|
-
const
|
|
542
|
+
const tagConfig = Config.getTagConfigForTag(bitConfig.tags, r.__typeAlias);
|
|
543
|
+
const key = (_a = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.jsonKey) !== null && _a !== void 0 ? _a : r.__typeAlias;
|
|
544
|
+
const tag = (_b = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.tag) !== null && _b !== void 0 ? _b : r.__typeAlias;
|
|
545
|
+
const json = r.__typeAlias === tag ? r : undefined;
|
|
1045
546
|
if (json) {
|
|
1046
547
|
for (const [k, v] of Object.entries(json)) {
|
|
1047
548
|
if (k !== 'type') {
|
|
@@ -1059,9 +560,8 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1059
560
|
// The resource is a logo-grave / prototpye-images resource
|
|
1060
561
|
const images = [];
|
|
1061
562
|
for (const r of resources) {
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
images.push(json);
|
|
563
|
+
if (r.type === ResourceTag.image) {
|
|
564
|
+
images.push(r);
|
|
1065
565
|
}
|
|
1066
566
|
}
|
|
1067
567
|
if (bitType === BitType.imagesLogoGrave) {
|
|
@@ -1075,93 +575,50 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1075
575
|
// This is a standard resource. If there is more than one resource, use the first one.
|
|
1076
576
|
// There should not be more than one because of validation
|
|
1077
577
|
if (resources.length >= 1) {
|
|
1078
|
-
resourceJson = this.parseResourceToJson(bitType, resources[0]);
|
|
578
|
+
resourceJson = resources[0]; // this.parseResourceToJson(bitType, resources[0]);
|
|
1079
579
|
}
|
|
1080
580
|
}
|
|
1081
581
|
this.bitJson.resource = resourceJson;
|
|
582
|
+
return false;
|
|
1082
583
|
}
|
|
1083
|
-
//
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
// bitmarkAst -> bits -> bitsValue -> title
|
|
1087
|
-
leaf_title(node, route) {
|
|
1088
|
-
// Ignore title that are not at the bit or card node level as they are handled elsewhere
|
|
1089
|
-
const parent = this.getParentNode(route);
|
|
1090
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue && (parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.cardNode)
|
|
1091
|
-
return;
|
|
1092
|
-
this.bitJson.title = this.convertBreakscapedStringToJsonText(node.value, TextFormat.bitmarkMinusMinus);
|
|
1093
|
-
}
|
|
1094
|
-
// bitmarkAst -> bits -> bitsValue -> subtitle
|
|
1095
|
-
leaf_subtitle(node, _route) {
|
|
1096
|
-
this.bitJson.subtitle = this.convertBreakscapedStringToJsonText(node.value, TextFormat.bitmarkMinusMinus);
|
|
584
|
+
// bitmarkAst -> bits -> bitsValue -> level
|
|
585
|
+
leaf_level(node, route) {
|
|
586
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
1097
587
|
}
|
|
1098
|
-
//
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
if (node.value != null)
|
|
1102
|
-
this.addProperty(this.bitJson, 'level', (_a = node.value) !== null && _a !== void 0 ? _a : 1, true);
|
|
588
|
+
// bitmarkAst -> bits -> bitsValue -> book (array)
|
|
589
|
+
enter_book(node, route) {
|
|
590
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: true });
|
|
1103
591
|
}
|
|
1104
|
-
// bitmarkAst -> bits -> bitsValue -> book
|
|
1105
|
-
leaf_book(node,
|
|
1106
|
-
|
|
1107
|
-
this.addProperty(this.bitJson, 'book', node.value, true);
|
|
592
|
+
// bitmarkAst -> bits -> bitsValue -> book (single)
|
|
593
|
+
leaf_book(node, route) {
|
|
594
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
1108
595
|
}
|
|
1109
596
|
// bitmarkAst -> bits -> bitsValue -> anchor
|
|
1110
|
-
leaf_anchor(node,
|
|
1111
|
-
|
|
1112
|
-
this.addProperty(this.bitJson, 'anchor', node.value, true);
|
|
597
|
+
leaf_anchor(node, route) {
|
|
598
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
1113
599
|
}
|
|
1114
600
|
// bitmarkAst -> bits -> bitsValue -> reference
|
|
1115
|
-
leaf_reference(node,
|
|
1116
|
-
|
|
1117
|
-
this.addProperty(this.bitJson, 'reference', node.value, true);
|
|
601
|
+
leaf_reference(node, route) {
|
|
602
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
1118
603
|
}
|
|
1119
604
|
// bitmarkAst -> bits -> bitsValue -> referenceEnd
|
|
1120
|
-
leaf_referenceEnd(node,
|
|
1121
|
-
|
|
1122
|
-
this.addProperty(this.bitJson, 'referenceEnd', node.value, true);
|
|
1123
|
-
}
|
|
1124
|
-
// bitmarkAst -> bits -> bitsValue -> caption
|
|
1125
|
-
leaf_caption(node, route) {
|
|
1126
|
-
const caption = node.value;
|
|
1127
|
-
// Ignore caption that is not at the bit level as it are handled elsewhere
|
|
1128
|
-
const parent = this.getParentNode(route);
|
|
1129
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue)
|
|
1130
|
-
return;
|
|
1131
|
-
this.bitJson.caption = this.convertBreakscapedStringToJsonText(caption, TextFormat.bitmarkMinusMinus);
|
|
1132
|
-
}
|
|
1133
|
-
// bitmarkAst -> bits -> bitsValue -> * -> hint
|
|
1134
|
-
leaf_hint(node, route) {
|
|
1135
|
-
const hint = node.value;
|
|
1136
|
-
// Ignore hint that is not at the bit level as it are handled elsewhere
|
|
1137
|
-
const parent = this.getParentNode(route);
|
|
1138
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue)
|
|
1139
|
-
return;
|
|
1140
|
-
this.bitJson.hint = this.convertBreakscapedStringToJsonText(hint, TextFormat.bitmarkMinusMinus);
|
|
1141
|
-
}
|
|
1142
|
-
// bitmarkAst -> bits -> bitsValue -> * -> instruction
|
|
1143
|
-
leaf_instruction(node, route) {
|
|
1144
|
-
const instruction = node.value;
|
|
1145
|
-
// Ignore instruction that is not at the bit level as it are handled elsewhere
|
|
1146
|
-
const parent = this.getParentNode(route);
|
|
1147
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType.bitsValue)
|
|
1148
|
-
return;
|
|
1149
|
-
this.bitJson.instruction = this.convertBreakscapedStringToJsonText(instruction, TextFormat.bitmarkMinusMinus);
|
|
1150
|
-
}
|
|
1151
|
-
// bitmarkAst -> bits -> footer -> footerText
|
|
1152
|
-
leaf_footerText(node, route) {
|
|
1153
|
-
const footer = node.value;
|
|
1154
|
-
const textFormat = this.getTextFormat(route);
|
|
1155
|
-
this.bitJson.footer = this.convertBreakscapedStringToJsonText(footer, textFormat);
|
|
605
|
+
leaf_referenceEnd(node, route) {
|
|
606
|
+
return this.standardHandler(node, route, NodeType.bitsValue, { array: false });
|
|
1156
607
|
}
|
|
1157
608
|
// bitmarkAst -> bits -> bitsValue -> markup
|
|
1158
609
|
leaf_markup(node, _route) {
|
|
1159
610
|
const bitmark = node.value;
|
|
1160
611
|
if (bitmark)
|
|
1161
612
|
this.bitWrapperJson.bitmark = bitmark;
|
|
613
|
+
// Stop traversal of this branch
|
|
614
|
+
return false;
|
|
1162
615
|
}
|
|
1163
|
-
// bitmarkAst -> bits -> bitsValue -> parser
|
|
1164
616
|
// bitmarkAst -> bits -> bitsValue -> * -> internalComment
|
|
617
|
+
enter_internalComment(_node, _route) {
|
|
618
|
+
// Stop traversal of this branch, handled in enter_parser()
|
|
619
|
+
return false;
|
|
620
|
+
}
|
|
621
|
+
// bitmarkAst -> bits -> bitsValue -> parser
|
|
1165
622
|
enter_parser(node, route) {
|
|
1166
623
|
const parser = node.value;
|
|
1167
624
|
const bitType = this.getBitType(route);
|
|
@@ -1175,13 +632,11 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1175
632
|
if (Array.isArray(parserExcessResources) && parserExcessResources.length > 0) {
|
|
1176
633
|
excessResources = [];
|
|
1177
634
|
for (const r of parserExcessResources) {
|
|
1178
|
-
|
|
1179
|
-
if (rJson)
|
|
1180
|
-
excessResources.push(rJson);
|
|
635
|
+
excessResources.push(r);
|
|
1181
636
|
}
|
|
1182
637
|
}
|
|
1183
638
|
// Extract internal comments from the AST and add to the parser
|
|
1184
|
-
const internalComments =
|
|
639
|
+
const internalComments = this.getInternalComments(route);
|
|
1185
640
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) === NodeType.bitsValue) {
|
|
1186
641
|
// Bit level parser information
|
|
1187
642
|
this.bitWrapperJson.parser = Object.assign(Object.assign({ version,
|
|
@@ -1227,32 +682,12 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1227
682
|
const propertiesConfig = Config.getRawPropertiesConfig();
|
|
1228
683
|
for (const propertyConfig of Object.values(propertiesConfig)) {
|
|
1229
684
|
const astKey = (_a = propertyConfig.astKey) !== null && _a !== void 0 ? _a : propertyConfig.tag;
|
|
1230
|
-
// Special cases (handled outside of the automatically generated handlers)
|
|
1231
|
-
if (astKey === PropertyTag.internalComment)
|
|
1232
|
-
continue;
|
|
1233
|
-
if (astKey === PropertyTag.caption)
|
|
1234
|
-
continue;
|
|
1235
|
-
if (astKey === PropertyTag.example)
|
|
1236
|
-
continue;
|
|
1237
|
-
if (astKey === PropertyTag.imageSource)
|
|
1238
|
-
continue;
|
|
1239
|
-
if (astKey === PropertyTag.person)
|
|
1240
|
-
continue;
|
|
1241
|
-
if (astKey === PropertyTag.imagePlaceholder)
|
|
1242
|
-
continue;
|
|
1243
|
-
if (astKey === PropertyTag.width)
|
|
1244
|
-
continue;
|
|
1245
|
-
if (astKey === PropertyTag.height)
|
|
1246
|
-
continue;
|
|
1247
|
-
if (astKey === PropertyAstKey.ast_markConfig)
|
|
1248
|
-
continue;
|
|
1249
|
-
if (astKey === PropertyTag.ratingLevelStart)
|
|
1250
|
-
continue;
|
|
1251
|
-
if (astKey === PropertyTag.ratingLevelEnd)
|
|
1252
|
-
continue;
|
|
1253
|
-
if (astKey === PropertyTag.productId)
|
|
1254
|
-
continue;
|
|
1255
685
|
const funcName = `enter_${astKey}`;
|
|
686
|
+
// Skip if the function already exists, allows for custom handlers
|
|
687
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
688
|
+
if (typeof this[funcName] === 'function') {
|
|
689
|
+
continue;
|
|
690
|
+
}
|
|
1256
691
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1257
692
|
this[funcName] = (node, route) => {
|
|
1258
693
|
var _a;
|
|
@@ -1267,7 +702,7 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1267
702
|
// Convert key as needed
|
|
1268
703
|
const jsonKey = (_a = propertyConfig.jsonKey) !== null && _a !== void 0 ? _a : propertyConfig.tag;
|
|
1269
704
|
// Add the property
|
|
1270
|
-
this.addProperty(this.bitJson, jsonKey, value, propertyConfig.single);
|
|
705
|
+
this.addProperty(this.bitJson, jsonKey, value, { array: !propertyConfig.single });
|
|
1271
706
|
};
|
|
1272
707
|
// Bind this
|
|
1273
708
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1278,605 +713,51 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1278
713
|
//
|
|
1279
714
|
// HELPER FUNCTIONS
|
|
1280
715
|
//
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
// Remove unwanted properties
|
|
1291
|
-
// if (!data.itemLead?.lead) delete gapJson.lead;
|
|
1292
|
-
return gapJson;
|
|
1293
|
-
}
|
|
1294
|
-
createMarkJson(mark) {
|
|
1295
|
-
const data = mark.data;
|
|
1296
|
-
// Create the mark
|
|
1297
|
-
const markJson = Object.assign(Object.assign({ type: 'mark', solution: Breakscape.unbreakscape(data.solution), mark: Breakscape.unbreakscape(data.mark) }, this.toItemLeadHintInstruction(data)), this.toExample(data, {
|
|
1298
|
-
defaultExample: true,
|
|
1299
|
-
isBoolean: true,
|
|
1300
|
-
}));
|
|
1301
|
-
// Remove unwanted properties
|
|
1302
|
-
// if (!data.itemLead?.lead) delete markJson.lead;
|
|
1303
|
-
return markJson;
|
|
1304
|
-
}
|
|
1305
|
-
createSelectJson(select) {
|
|
1306
|
-
var _a, _b, _c, _d;
|
|
1307
|
-
const data = select.data;
|
|
1308
|
-
// Create the select options
|
|
1309
|
-
const options = [];
|
|
1310
|
-
for (const option of data.options) {
|
|
1311
|
-
const optionJson = Object.assign(Object.assign({ text: Breakscape.unbreakscape(option.text), isCorrect: (_a = option.isCorrect) !== null && _a !== void 0 ? _a : false }, this.toItemLeadHintInstruction(option)), this.toExample(option, {
|
|
1312
|
-
defaultExample: !!option.isCorrect,
|
|
1313
|
-
isBoolean: true,
|
|
1314
|
-
}));
|
|
1315
|
-
// Remove unwanted properties
|
|
1316
|
-
// if (!option.itemLead?.item) delete optionJson.item;
|
|
1317
|
-
// if (!option.itemLead?.lead) delete optionJson.lead;
|
|
1318
|
-
// if (!option.instruction) delete optionJson.instruction;
|
|
1319
|
-
options.push(optionJson);
|
|
1320
|
-
}
|
|
1321
|
-
// Create the select
|
|
1322
|
-
const selectJson = Object.assign(Object.assign({ type: 'select', prefix: (_b = Breakscape.unbreakscape(data.prefix)) !== null && _b !== void 0 ? _b : '', postfix: (_c = Breakscape.unbreakscape(data.postfix)) !== null && _c !== void 0 ? _c : '' }, this.toItemLeadHintInstruction(data)), { isExample: (_d = data.isExample) !== null && _d !== void 0 ? _d : false, options });
|
|
1323
|
-
// Remove unwanted properties
|
|
1324
|
-
// if (!data.itemLead?.lead) delete selectJson.lead;
|
|
1325
|
-
return selectJson;
|
|
1326
|
-
}
|
|
1327
|
-
createHighlightJson(highlight) {
|
|
1328
|
-
var _a, _b, _c, _d, _e;
|
|
1329
|
-
const data = highlight.data;
|
|
1330
|
-
// Create the highlight options
|
|
1331
|
-
const texts = [];
|
|
1332
|
-
for (const text of data.texts) {
|
|
1333
|
-
const textJson = Object.assign(Object.assign({ text: Breakscape.unbreakscape(text.text), isCorrect: (_a = text.isCorrect) !== null && _a !== void 0 ? _a : false, isHighlighted: (_b = text.isHighlighted) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(text)), this.toExample(text, {
|
|
1334
|
-
defaultExample: !!text.isCorrect,
|
|
1335
|
-
isBoolean: true,
|
|
1336
|
-
}));
|
|
1337
|
-
// Remove unwanted properties
|
|
1338
|
-
// if (!text.itemLead?.item) delete textJson.item;
|
|
1339
|
-
// if (!text.itemLead?.lead) delete textJson.lead;
|
|
1340
|
-
// if (!text.hint) delete textJson.hint;
|
|
1341
|
-
texts.push(textJson);
|
|
1342
|
-
}
|
|
1343
|
-
// Create the select
|
|
1344
|
-
const highlightJson = Object.assign(Object.assign({ type: 'highlight', prefix: (_c = Breakscape.unbreakscape(data.prefix)) !== null && _c !== void 0 ? _c : '', postfix: (_d = Breakscape.unbreakscape(data.postfix)) !== null && _d !== void 0 ? _d : '' }, this.toItemLeadHintInstruction(data)), { isExample: (_e = data.isExample) !== null && _e !== void 0 ? _e : false, texts });
|
|
1345
|
-
// Remove unwanted properties
|
|
1346
|
-
// if (!data.itemLead?.lead) delete highlightJson.lead;
|
|
1347
|
-
return highlightJson;
|
|
1348
|
-
}
|
|
1349
|
-
parseResourceToJson(bitType, resource) {
|
|
1350
|
-
if (!resource)
|
|
1351
|
-
return undefined;
|
|
1352
|
-
// All resources should now be valid as they are validated in the AST
|
|
1353
|
-
// TODO: remove code below
|
|
1354
|
-
// // Check if a resource has a value, if not, we should not write it (or any of its chained properties)
|
|
1355
|
-
// let valid = false;
|
|
1356
|
-
// if (resource.value) {
|
|
1357
|
-
// valid = true;
|
|
1358
|
-
// }
|
|
1359
|
-
// // Resource is not valid, return undefined
|
|
1360
|
-
// if (!valid) return undefined;
|
|
1361
|
-
// // Resource is valid, write it.
|
|
1362
|
-
let resourceJson;
|
|
1363
|
-
switch (resource.type) {
|
|
1364
|
-
case ResourceTag.image:
|
|
1365
|
-
resourceJson = {
|
|
1366
|
-
type: ResourceTag.image,
|
|
1367
|
-
image: this.addImageResource(bitType, resource),
|
|
1368
|
-
};
|
|
1369
|
-
break;
|
|
1370
|
-
case ResourceTag.imageLink:
|
|
1371
|
-
resourceJson = {
|
|
1372
|
-
type: ResourceTag.imageLink,
|
|
1373
|
-
imageLink: this.addImageLinkResource(bitType, resource),
|
|
1374
|
-
};
|
|
1375
|
-
break;
|
|
1376
|
-
case ResourceTag.audio:
|
|
1377
|
-
resourceJson = {
|
|
1378
|
-
type: ResourceTag.audio,
|
|
1379
|
-
audio: this.addAudioResource(bitType, resource),
|
|
1380
|
-
};
|
|
1381
|
-
break;
|
|
1382
|
-
case ResourceTag.audioEmbed:
|
|
1383
|
-
resourceJson = {
|
|
1384
|
-
type: ResourceTag.audioEmbed,
|
|
1385
|
-
audioEmbed: this.addAudioEmbedResource(bitType, resource),
|
|
1386
|
-
};
|
|
1387
|
-
break;
|
|
1388
|
-
case ResourceTag.audioLink:
|
|
1389
|
-
resourceJson = {
|
|
1390
|
-
type: ResourceTag.audioLink,
|
|
1391
|
-
audioLink: this.addAudioLinkResource(bitType, resource),
|
|
1392
|
-
};
|
|
1393
|
-
break;
|
|
1394
|
-
case ResourceTag.video:
|
|
1395
|
-
resourceJson = {
|
|
1396
|
-
type: ResourceTag.video,
|
|
1397
|
-
video: this.addVideoResource(bitType, resource),
|
|
1398
|
-
};
|
|
1399
|
-
break;
|
|
1400
|
-
case ResourceTag.videoEmbed:
|
|
1401
|
-
resourceJson = {
|
|
1402
|
-
type: ResourceTag.videoEmbed,
|
|
1403
|
-
videoEmbed: this.addVideoEmbedResource(bitType, resource),
|
|
1404
|
-
};
|
|
1405
|
-
resourceJson.videoEmbed = this.addVideoLinkResource(bitType, resource);
|
|
1406
|
-
break;
|
|
1407
|
-
case ResourceTag.videoLink:
|
|
1408
|
-
resourceJson = {
|
|
1409
|
-
type: ResourceTag.videoLink,
|
|
1410
|
-
videoLink: this.addVideoLinkResource(bitType, resource),
|
|
1411
|
-
};
|
|
1412
|
-
break;
|
|
1413
|
-
case ResourceTag.stillImageFilmEmbed:
|
|
1414
|
-
resourceJson = {
|
|
1415
|
-
type: ResourceTag.stillImageFilmEmbed,
|
|
1416
|
-
stillImageFilmEmbed: this.addStillImageFilmEmbedResource(bitType, resource),
|
|
1417
|
-
};
|
|
1418
|
-
break;
|
|
1419
|
-
case ResourceTag.stillImageFilmLink:
|
|
1420
|
-
resourceJson = {
|
|
1421
|
-
type: ResourceTag.stillImageFilmLink,
|
|
1422
|
-
stillImageFilmLink: this.addStillImageFilmLinkResource(bitType, resource),
|
|
1423
|
-
};
|
|
1424
|
-
break;
|
|
1425
|
-
case ResourceTag.article:
|
|
1426
|
-
resourceJson = {
|
|
1427
|
-
type: ResourceTag.article,
|
|
1428
|
-
article: this.addArticleResource(bitType, resource),
|
|
1429
|
-
};
|
|
1430
|
-
break;
|
|
1431
|
-
case ResourceTag.document:
|
|
1432
|
-
resourceJson = {
|
|
1433
|
-
type: ResourceTag.document,
|
|
1434
|
-
document: this.addDocumentResource(bitType, resource),
|
|
1435
|
-
};
|
|
1436
|
-
break;
|
|
1437
|
-
case ResourceTag.documentEmbed:
|
|
1438
|
-
resourceJson = {
|
|
1439
|
-
type: ResourceTag.documentEmbed,
|
|
1440
|
-
documentEmbed: this.addDocumentEmbedResource(bitType, resource),
|
|
1441
|
-
};
|
|
1442
|
-
break;
|
|
1443
|
-
case ResourceTag.documentLink:
|
|
1444
|
-
resourceJson = {
|
|
1445
|
-
type: ResourceTag.documentLink,
|
|
1446
|
-
documentLink: this.addDocumentLinkResource(bitType, resource),
|
|
1447
|
-
};
|
|
1448
|
-
break;
|
|
1449
|
-
case ResourceTag.documentDownload:
|
|
1450
|
-
resourceJson = {
|
|
1451
|
-
type: ResourceTag.documentDownload,
|
|
1452
|
-
documentDownload: this.addDocumentDownloadResource(bitType, resource),
|
|
1453
|
-
};
|
|
1454
|
-
break;
|
|
1455
|
-
case ResourceTag.appLink:
|
|
1456
|
-
resourceJson = {
|
|
1457
|
-
type: ResourceTag.appLink,
|
|
1458
|
-
appLink: this.addAppLinkResource(bitType, resource),
|
|
1459
|
-
};
|
|
1460
|
-
break;
|
|
1461
|
-
case ResourceTag.websiteLink:
|
|
1462
|
-
resourceJson = {
|
|
1463
|
-
type: ResourceTag.websiteLink,
|
|
1464
|
-
websiteLink: this.addWebsiteLinkResource(bitType, resource),
|
|
1465
|
-
};
|
|
1466
|
-
break;
|
|
1467
|
-
default:
|
|
1468
|
-
}
|
|
1469
|
-
return resourceJson;
|
|
1470
|
-
}
|
|
1471
|
-
addImageResource(bitType, resource) {
|
|
1472
|
-
var _a, _b, _c;
|
|
1473
|
-
const resourceJson = {};
|
|
1474
|
-
if (StringUtils.isString(resource)) {
|
|
1475
|
-
const value = resource;
|
|
1476
|
-
resource = {
|
|
1477
|
-
type: ResourceTag.image,
|
|
1478
|
-
typeAlias: ResourceTag.image,
|
|
1479
|
-
value: value,
|
|
1480
|
-
format: UrlUtils.fileExtensionFromUrl(value),
|
|
1481
|
-
provider: UrlUtils.domainFromUrl(value),
|
|
1482
|
-
};
|
|
1483
|
-
}
|
|
1484
|
-
resource = resource; // Keep TS compiler happy
|
|
1485
|
-
if (resource.format != null)
|
|
1486
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1487
|
-
if (resource.provider != null)
|
|
1488
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1489
|
-
if (resource.value != null)
|
|
1490
|
-
resourceJson.src = Breakscape.unbreakscape(resource.value);
|
|
1491
|
-
if (resource.src1x != null)
|
|
1492
|
-
resourceJson.src1x = Breakscape.unbreakscape(resource.src1x);
|
|
1493
|
-
if (resource.src2x != null)
|
|
1494
|
-
resourceJson.src2x = Breakscape.unbreakscape(resource.src2x);
|
|
1495
|
-
if (resource.src3x != null)
|
|
1496
|
-
resourceJson.src3x = Breakscape.unbreakscape(resource.src3x);
|
|
1497
|
-
if (resource.src4x != null)
|
|
1498
|
-
resourceJson.src4x = Breakscape.unbreakscape(resource.src4x);
|
|
1499
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1500
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1501
|
-
resourceJson.alt = (_c = Breakscape.unbreakscape(resource.alt)) !== null && _c !== void 0 ? _c : '';
|
|
1502
|
-
resourceJson.zoomDisabled = this.getZoomDisabled(bitType, resource.zoomDisabled);
|
|
1503
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1504
|
-
return resourceJson;
|
|
1505
|
-
}
|
|
1506
|
-
addImageLinkResource(bitType, resource) {
|
|
1507
|
-
var _a, _b, _c;
|
|
1508
|
-
const resourceJson = {};
|
|
1509
|
-
if (StringUtils.isString(resource)) {
|
|
1510
|
-
const value = resource;
|
|
1511
|
-
resource = {
|
|
1512
|
-
type: ResourceTag.imageLink,
|
|
1513
|
-
typeAlias: ResourceTag.imageLink,
|
|
1514
|
-
value,
|
|
1515
|
-
format: UrlUtils.fileExtensionFromUrl(value),
|
|
1516
|
-
provider: UrlUtils.domainFromUrl(value),
|
|
1517
|
-
};
|
|
1518
|
-
}
|
|
1519
|
-
resource = resource; // Keep TS compiler happy
|
|
1520
|
-
if (resource.format != null)
|
|
1521
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1522
|
-
if (resource.provider != null)
|
|
1523
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1524
|
-
if (resource.value != null)
|
|
1525
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1526
|
-
if (resource.src1x != null)
|
|
1527
|
-
resourceJson.src1x = Breakscape.unbreakscape(resource.src1x);
|
|
1528
|
-
if (resource.src2x != null)
|
|
1529
|
-
resourceJson.src2x = Breakscape.unbreakscape(resource.src2x);
|
|
1530
|
-
if (resource.src3x != null)
|
|
1531
|
-
resourceJson.src3x = Breakscape.unbreakscape(resource.src3x);
|
|
1532
|
-
if (resource.src4x != null)
|
|
1533
|
-
resourceJson.src4x = Breakscape.unbreakscape(resource.src4x);
|
|
1534
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1535
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1536
|
-
resourceJson.alt = (_c = Breakscape.unbreakscape(resource.alt)) !== null && _c !== void 0 ? _c : '';
|
|
1537
|
-
resourceJson.zoomDisabled = this.getZoomDisabled(bitType, resource.zoomDisabled);
|
|
1538
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1539
|
-
return resourceJson;
|
|
1540
|
-
}
|
|
1541
|
-
addAudioResource(bitType, resource) {
|
|
1542
|
-
const resourceJson = {};
|
|
1543
|
-
if (resource.format != null)
|
|
1544
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1545
|
-
if (resource.provider != null)
|
|
1546
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1547
|
-
if (resource.value != null)
|
|
1548
|
-
resourceJson.src = Breakscape.unbreakscape(resource.value);
|
|
1549
|
-
if (resource.duration != null)
|
|
1550
|
-
resourceJson.duration = resource.duration;
|
|
1551
|
-
if (resource.mute != null)
|
|
1552
|
-
resourceJson.mute = resource.mute;
|
|
1553
|
-
if (resource.autoplay != null)
|
|
1554
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1555
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1556
|
-
return resourceJson;
|
|
1557
|
-
}
|
|
1558
|
-
addAudioEmbedResource(bitType, resource) {
|
|
1559
|
-
const resourceJson = {};
|
|
1560
|
-
if (resource.format != null)
|
|
1561
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1562
|
-
if (resource.provider != null)
|
|
1563
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1564
|
-
if (resource.value != null)
|
|
1565
|
-
resourceJson.src = Breakscape.unbreakscape(resource.value);
|
|
1566
|
-
if (resource.duration != null)
|
|
1567
|
-
resourceJson.duration = resource.duration;
|
|
1568
|
-
if (resource.mute != null)
|
|
1569
|
-
resourceJson.mute = resource.mute;
|
|
1570
|
-
if (resource.autoplay != null)
|
|
1571
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1572
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1573
|
-
return resourceJson;
|
|
1574
|
-
}
|
|
1575
|
-
addAudioLinkResource(bitType, resource) {
|
|
1576
|
-
const resourceJson = {};
|
|
1577
|
-
if (resource.format != null)
|
|
1578
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1579
|
-
if (resource.provider != null)
|
|
1580
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1581
|
-
if (resource.value != null)
|
|
1582
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1583
|
-
if (resource.duration != null)
|
|
1584
|
-
resourceJson.duration = resource.duration;
|
|
1585
|
-
if (resource.mute != null)
|
|
1586
|
-
resourceJson.mute = resource.mute;
|
|
1587
|
-
if (resource.autoplay != null)
|
|
1588
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1589
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson, true);
|
|
1590
|
-
return resourceJson;
|
|
1591
|
-
}
|
|
1592
|
-
addVideoResource(bitType, resource) {
|
|
1593
|
-
var _a, _b;
|
|
1594
|
-
const resourceJson = {};
|
|
1595
|
-
if (resource.format != null)
|
|
1596
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1597
|
-
if (resource.provider != null)
|
|
1598
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1599
|
-
if (resource.value != null)
|
|
1600
|
-
resourceJson.src = Breakscape.unbreakscape(resource.value);
|
|
1601
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1602
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1603
|
-
if (resource.duration != null)
|
|
1604
|
-
resourceJson.duration = resource.duration;
|
|
1605
|
-
if (resource.mute != null)
|
|
1606
|
-
resourceJson.mute = resource.mute;
|
|
1607
|
-
if (resource.autoplay != null)
|
|
1608
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1609
|
-
if (resource.allowSubtitles != null)
|
|
1610
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1611
|
-
if (resource.showSubtitles != null)
|
|
1612
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1613
|
-
if (resource.alt != null)
|
|
1614
|
-
resourceJson.alt = Breakscape.unbreakscape(resource.alt);
|
|
1615
|
-
if (resource.posterImage != null)
|
|
1616
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1617
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1618
|
-
resourceJson.thumbnails = [];
|
|
1619
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1620
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
1621
|
-
}
|
|
1622
|
-
}
|
|
1623
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1624
|
-
return resourceJson;
|
|
1625
|
-
}
|
|
1626
|
-
addVideoEmbedResource(bitType, resource) {
|
|
1627
|
-
var _a, _b;
|
|
1628
|
-
const resourceJson = {};
|
|
1629
|
-
if (resource.format != null)
|
|
1630
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1631
|
-
if (resource.provider != null)
|
|
1632
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1633
|
-
if (resource.value != null)
|
|
1634
|
-
resourceJson.src = Breakscape.unbreakscape(resource.value);
|
|
1635
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1636
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1637
|
-
if (resource.duration != null)
|
|
1638
|
-
resourceJson.duration = resource.duration;
|
|
1639
|
-
if (resource.mute != null)
|
|
1640
|
-
resourceJson.mute = resource.mute;
|
|
1641
|
-
if (resource.autoplay != null)
|
|
1642
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1643
|
-
if (resource.allowSubtitles != null)
|
|
1644
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1645
|
-
if (resource.showSubtitles != null)
|
|
1646
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1647
|
-
if (resource.alt != null)
|
|
1648
|
-
resourceJson.alt = Breakscape.unbreakscape(resource.alt);
|
|
1649
|
-
if (resource.posterImage != null)
|
|
1650
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1651
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1652
|
-
resourceJson.thumbnails = [];
|
|
1653
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1654
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
1655
|
-
}
|
|
1656
|
-
}
|
|
1657
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1658
|
-
return resourceJson;
|
|
1659
|
-
}
|
|
1660
|
-
addVideoLinkResource(bitType, resource) {
|
|
716
|
+
/**
|
|
717
|
+
* Default handler for properties.
|
|
718
|
+
*
|
|
719
|
+
* @param node the node
|
|
720
|
+
* @param route the route to the node
|
|
721
|
+
* @param parentNodeTypes the parent node types for which to handle the node
|
|
722
|
+
* @returns
|
|
723
|
+
*/
|
|
724
|
+
standardHandler(node, route, parentNodeTypes, options) {
|
|
1661
725
|
var _a, _b;
|
|
1662
|
-
|
|
1663
|
-
if (
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1669
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1670
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1671
|
-
if (resource.duration != null)
|
|
1672
|
-
resourceJson.duration = resource.duration;
|
|
1673
|
-
if (resource.mute != null)
|
|
1674
|
-
resourceJson.mute = resource.mute;
|
|
1675
|
-
if (resource.autoplay != null)
|
|
1676
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1677
|
-
if (resource.allowSubtitles != null)
|
|
1678
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1679
|
-
if (resource.showSubtitles != null)
|
|
1680
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1681
|
-
if (resource.alt != null)
|
|
1682
|
-
resourceJson.alt = Breakscape.unbreakscape(resource.alt);
|
|
1683
|
-
if (resource.posterImage != null)
|
|
1684
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1685
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1686
|
-
resourceJson.thumbnails = [];
|
|
1687
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1688
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
1689
|
-
}
|
|
726
|
+
// Ignore items not at the nodeType level
|
|
727
|
+
if (parentNodeTypes) {
|
|
728
|
+
const nodeTypeArray = Array.isArray(parentNodeTypes) ? parentNodeTypes : [parentNodeTypes];
|
|
729
|
+
const parent = this.getParentNode(route);
|
|
730
|
+
if (!(parent === null || parent === void 0 ? void 0 : parent.key) || !nodeTypeArray.includes(parent === null || parent === void 0 ? void 0 : parent.key))
|
|
731
|
+
return true;
|
|
1690
732
|
}
|
|
1691
|
-
|
|
1692
|
-
|
|
733
|
+
// Add the property
|
|
734
|
+
this.addProperty(this.bitJson, (_a = options.keyOverride) !== null && _a !== void 0 ? _a : node.key, (_b = options.valueOverride) !== null && _b !== void 0 ? _b : node.value, options);
|
|
735
|
+
// Stop traversal of this branch
|
|
736
|
+
return false;
|
|
1693
737
|
}
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
if (
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
if (resource.duration != null)
|
|
1706
|
-
resourceJson.duration = resource.duration;
|
|
1707
|
-
if (resource.mute != null)
|
|
1708
|
-
resourceJson.mute = resource.mute;
|
|
1709
|
-
if (resource.autoplay != null)
|
|
1710
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1711
|
-
if (resource.allowSubtitles != null)
|
|
1712
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1713
|
-
if (resource.showSubtitles != null)
|
|
1714
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1715
|
-
if (resource.alt != null)
|
|
1716
|
-
resourceJson.alt = Breakscape.unbreakscape(resource.alt);
|
|
1717
|
-
if (resource.posterImage != null)
|
|
1718
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1719
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1720
|
-
resourceJson.thumbnails = [];
|
|
1721
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1722
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
738
|
+
addProperty(
|
|
739
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
740
|
+
target, name, values, options) {
|
|
741
|
+
if (values !== undefined) {
|
|
742
|
+
let finalValue;
|
|
743
|
+
if (!Array.isArray(values))
|
|
744
|
+
values = [values];
|
|
745
|
+
const valuesArr = values;
|
|
746
|
+
// if (valuesArr.length > 0) {
|
|
747
|
+
if (!options.array && valuesArr.length >= 1) {
|
|
748
|
+
finalValue = valuesArr[valuesArr.length - 1];
|
|
1723
749
|
}
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
return resourceJson;
|
|
1727
|
-
}
|
|
1728
|
-
addStillImageFilmLinkResource(bitType, resource) {
|
|
1729
|
-
var _a, _b;
|
|
1730
|
-
const resourceJson = {};
|
|
1731
|
-
if (resource.format != null)
|
|
1732
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1733
|
-
if (resource.provider != null)
|
|
1734
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1735
|
-
if (resource.value != null)
|
|
1736
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1737
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1738
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1739
|
-
if (resource.duration != null)
|
|
1740
|
-
resourceJson.duration = resource.duration;
|
|
1741
|
-
if (resource.mute != null)
|
|
1742
|
-
resourceJson.mute = resource.mute;
|
|
1743
|
-
if (resource.autoplay != null)
|
|
1744
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1745
|
-
if (resource.allowSubtitles != null)
|
|
1746
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1747
|
-
if (resource.showSubtitles != null)
|
|
1748
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1749
|
-
if (resource.alt != null)
|
|
1750
|
-
resourceJson.alt = Breakscape.unbreakscape(resource.alt);
|
|
1751
|
-
if (resource.posterImage != null)
|
|
1752
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1753
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1754
|
-
resourceJson.thumbnails = [];
|
|
1755
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1756
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
750
|
+
else {
|
|
751
|
+
finalValue = valuesArr;
|
|
1757
752
|
}
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
}
|
|
1762
|
-
addArticleResource(bitType, resource) {
|
|
1763
|
-
const resourceJson = {};
|
|
1764
|
-
if (resource.format != null)
|
|
1765
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1766
|
-
if (resource.provider != null)
|
|
1767
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1768
|
-
if (resource.value != null)
|
|
1769
|
-
resourceJson.body = Breakscape.unbreakscape(resource.value);
|
|
1770
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1771
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1772
|
-
return resourceJson;
|
|
1773
|
-
}
|
|
1774
|
-
addDocumentResource(bitType, resource) {
|
|
1775
|
-
const resourceJson = {};
|
|
1776
|
-
if (resource.format != null)
|
|
1777
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1778
|
-
if (resource.provider != null)
|
|
1779
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1780
|
-
if (resource.value != null)
|
|
1781
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1782
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1783
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1784
|
-
return resourceJson;
|
|
1785
|
-
}
|
|
1786
|
-
addDocumentEmbedResource(bitType, resource) {
|
|
1787
|
-
const resourceJson = {};
|
|
1788
|
-
if (resource.format != null)
|
|
1789
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1790
|
-
if (resource.provider != null)
|
|
1791
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1792
|
-
if (resource.value != null)
|
|
1793
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1794
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1795
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1796
|
-
return resourceJson;
|
|
1797
|
-
}
|
|
1798
|
-
addDocumentLinkResource(bitType, resource) {
|
|
1799
|
-
const resourceJson = {};
|
|
1800
|
-
if (resource.format != null)
|
|
1801
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1802
|
-
if (resource.provider != null)
|
|
1803
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1804
|
-
if (resource.value != null)
|
|
1805
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1806
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1807
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1808
|
-
return resourceJson;
|
|
1809
|
-
}
|
|
1810
|
-
addDocumentDownloadResource(bitType, resource) {
|
|
1811
|
-
const resourceJson = {};
|
|
1812
|
-
if (resource.format != null)
|
|
1813
|
-
resourceJson.format = Breakscape.unbreakscape(resource.format);
|
|
1814
|
-
if (resource.provider != null)
|
|
1815
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1816
|
-
if (resource.value != null)
|
|
1817
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1818
|
-
// if (resource.href != null) resourceJson.href = resource.href; // It is never used (and doesn't exist in the AST model)
|
|
1819
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1820
|
-
return resourceJson;
|
|
1821
|
-
}
|
|
1822
|
-
addAppLinkResource(bitType, resource) {
|
|
1823
|
-
const resourceJson = {};
|
|
1824
|
-
// if (resource.format != null) resourceJson.format = BreakscapeUtils.unbreakscape(resource.format);
|
|
1825
|
-
if (resource.value != null)
|
|
1826
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1827
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1828
|
-
return resourceJson;
|
|
1829
|
-
}
|
|
1830
|
-
addWebsiteLinkResource(bitType, resource) {
|
|
1831
|
-
const resourceJson = {};
|
|
1832
|
-
// if (resource.format != null) resourceJson.format = BreakscapeUtils.unbreakscape(resource.format);
|
|
1833
|
-
if (resource.value != null)
|
|
1834
|
-
resourceJson.url = Breakscape.unbreakscape(resource.value);
|
|
1835
|
-
if (resource.siteName != null)
|
|
1836
|
-
resourceJson.siteName = Breakscape.unbreakscape(resource.siteName);
|
|
1837
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1838
|
-
return resourceJson;
|
|
1839
|
-
}
|
|
1840
|
-
addGenericResourceProperties(_bitType, resource, resourceJson, noDefaults) {
|
|
1841
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
1842
|
-
if (noDefaults) {
|
|
1843
|
-
if (resource.license != null)
|
|
1844
|
-
resourceJson.license = (_a = Breakscape.unbreakscape(resource.license)) !== null && _a !== void 0 ? _a : '';
|
|
1845
|
-
if (resource.copyright != null)
|
|
1846
|
-
resourceJson.copyright = (_b = Breakscape.unbreakscape(resource.copyright)) !== null && _b !== void 0 ? _b : '';
|
|
1847
|
-
if (resource.provider != null)
|
|
1848
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1849
|
-
if (resource.showInIndex != null)
|
|
1850
|
-
resourceJson.showInIndex = (_c = resource.showInIndex) !== null && _c !== void 0 ? _c : false;
|
|
1851
|
-
if (resource.caption != null) {
|
|
1852
|
-
resourceJson.caption = this.convertBreakscapedStringToJsonText((_d = resource.caption) !== null && _d !== void 0 ? _d : '', TextFormat.bitmarkMinusMinus);
|
|
753
|
+
// }
|
|
754
|
+
if (options.allowNull || finalValue != null) {
|
|
755
|
+
target[name] = finalValue;
|
|
1853
756
|
}
|
|
1854
|
-
if (resource.search != null)
|
|
1855
|
-
resourceJson.search = (_e = Breakscape.unbreakscape(resource.search)) !== null && _e !== void 0 ? _e : '';
|
|
1856
757
|
}
|
|
1857
|
-
else {
|
|
1858
|
-
resourceJson.license = (_f = Breakscape.unbreakscape(resource.license)) !== null && _f !== void 0 ? _f : '';
|
|
1859
|
-
resourceJson.copyright = (_g = Breakscape.unbreakscape(resource.copyright)) !== null && _g !== void 0 ? _g : '';
|
|
1860
|
-
if (resource.provider != null)
|
|
1861
|
-
resourceJson.provider = Breakscape.unbreakscape(resource.provider);
|
|
1862
|
-
resourceJson.showInIndex = (_h = resource.showInIndex) !== null && _h !== void 0 ? _h : false;
|
|
1863
|
-
resourceJson.caption = this.convertBreakscapedStringToJsonText((_j = resource.caption) !== null && _j !== void 0 ? _j : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus);
|
|
1864
|
-
if (resource.search != null)
|
|
1865
|
-
resourceJson.search = (_k = Breakscape.unbreakscape(resource.search)) !== null && _k !== void 0 ? _k : '';
|
|
1866
|
-
}
|
|
1867
|
-
return resourceJson;
|
|
1868
|
-
}
|
|
1869
|
-
toItemLeadHintInstruction(item) {
|
|
1870
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1871
|
-
return {
|
|
1872
|
-
item: this.convertBreakscapedStringToJsonText((_b = (_a = item.itemLead) === null || _a === void 0 ? void 0 : _a.item) !== null && _b !== void 0 ? _b : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus),
|
|
1873
|
-
lead: this.convertBreakscapedStringToJsonText((_d = (_c = item.itemLead) === null || _c === void 0 ? void 0 : _c.lead) !== null && _d !== void 0 ? _d : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus),
|
|
1874
|
-
hint: this.convertBreakscapedStringToJsonText((_e = item.hint) !== null && _e !== void 0 ? _e : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus),
|
|
1875
|
-
instruction: this.convertBreakscapedStringToJsonText((_f = item.instruction) !== null && _f !== void 0 ? _f : Breakscape.EMPTY_STRING, TextFormat.bitmarkMinusMinus),
|
|
1876
|
-
};
|
|
1877
758
|
}
|
|
1878
759
|
toExample(node, options) {
|
|
1879
|
-
const { isExample, example,
|
|
760
|
+
const { isExample, example, __isDefaultExample } = node;
|
|
1880
761
|
const { defaultExample, isBoolean } = options;
|
|
1881
762
|
if (!isExample) {
|
|
1882
763
|
return {
|
|
@@ -1885,7 +766,7 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1885
766
|
};
|
|
1886
767
|
}
|
|
1887
768
|
let exampleValue;
|
|
1888
|
-
if (
|
|
769
|
+
if (__isDefaultExample) {
|
|
1889
770
|
exampleValue = isBoolean
|
|
1890
771
|
? BooleanUtils.toBoolean(defaultExample)
|
|
1891
772
|
: this.convertBreakscapedStringToJsonText(defaultExample, TextFormat.bitmarkMinusMinus);
|
|
@@ -1900,53 +781,6 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
1900
781
|
example: exampleValue,
|
|
1901
782
|
};
|
|
1902
783
|
}
|
|
1903
|
-
addProperty(
|
|
1904
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1905
|
-
target, name, values, singleWithoutArray) {
|
|
1906
|
-
if (values !== undefined) {
|
|
1907
|
-
let finalValue;
|
|
1908
|
-
if (!Array.isArray(values))
|
|
1909
|
-
values = [values];
|
|
1910
|
-
if (Array.isArray(values) && values.length > 0) {
|
|
1911
|
-
// Unbreakscape values that are strings
|
|
1912
|
-
values = Breakscape.unbreakscape(values);
|
|
1913
|
-
if (Array.isArray(values) && singleWithoutArray && values.length >= 1) {
|
|
1914
|
-
finalValue = values[values.length - 1];
|
|
1915
|
-
}
|
|
1916
|
-
else {
|
|
1917
|
-
finalValue = values;
|
|
1918
|
-
}
|
|
1919
|
-
}
|
|
1920
|
-
// if (finalValue != null) {
|
|
1921
|
-
target[name] = finalValue;
|
|
1922
|
-
// }
|
|
1923
|
-
}
|
|
1924
|
-
}
|
|
1925
|
-
//
|
|
1926
|
-
// Helper functions
|
|
1927
|
-
//
|
|
1928
|
-
/**
|
|
1929
|
-
* Get the value for the zoomDisabled property, setting the appropriate default value if no value is set.
|
|
1930
|
-
*
|
|
1931
|
-
* @param bitType
|
|
1932
|
-
* @param zoomDisabled
|
|
1933
|
-
* @returns
|
|
1934
|
-
*/
|
|
1935
|
-
getZoomDisabled(bitType, zoomDisabled) {
|
|
1936
|
-
if (zoomDisabled != null)
|
|
1937
|
-
return zoomDisabled;
|
|
1938
|
-
// The default value in the JSON is hardcoded, because there is currently no good way to set a different
|
|
1939
|
-
// default per bit in the BitConfig.
|
|
1940
|
-
if (Config.isOfBitType(bitType, [
|
|
1941
|
-
BitType.imageSeparator,
|
|
1942
|
-
BitType.pageBanner,
|
|
1943
|
-
BitType.imagesLogoGrave,
|
|
1944
|
-
BitType.prototypeImages,
|
|
1945
|
-
])) {
|
|
1946
|
-
return true;
|
|
1947
|
-
}
|
|
1948
|
-
return false;
|
|
1949
|
-
}
|
|
1950
784
|
/**
|
|
1951
785
|
* Get the bit type from any node
|
|
1952
786
|
*
|
|
@@ -2036,13 +870,11 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
2036
870
|
const isBitmarkText = format === TextFormat.bitmarkMinusMinus || format === TextFormat.bitmarkPlusPlus;
|
|
2037
871
|
if (!isBitmarkText) {
|
|
2038
872
|
// Not bitmark text, so plain text, so unbreakscape only the start of bit tags
|
|
2039
|
-
return
|
|
2040
|
-
bitTagOnly: true,
|
|
2041
|
-
}) || Breakscape.EMPTY_STRING);
|
|
873
|
+
return text || '';
|
|
2042
874
|
}
|
|
2043
875
|
const asPlainText = this.options.textAsPlainText;
|
|
2044
876
|
if (asPlainText) {
|
|
2045
|
-
return
|
|
877
|
+
return text || '';
|
|
2046
878
|
}
|
|
2047
879
|
// Use the text parser to parse the text
|
|
2048
880
|
const textAst = this.textParser.toAst(text, {
|
|
@@ -2102,40 +934,22 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
2102
934
|
return `${text !== null && text !== void 0 ? text : ''}${'\n'.repeat(extraBreaks)}${textPlain !== null && textPlain !== void 0 ? textPlain : ''}`;
|
|
2103
935
|
}
|
|
2104
936
|
/**
|
|
2105
|
-
*
|
|
937
|
+
* Check if an object is bitmark text
|
|
938
|
+
* The check looks for a special tag on the array (__tag: 'text')
|
|
2106
939
|
*
|
|
2107
|
-
* @param
|
|
2108
|
-
* @
|
|
2109
|
-
* @param index the index of the placeholder to replace
|
|
940
|
+
* @param obj object that might be bitmark text
|
|
941
|
+
* @returns
|
|
2110
942
|
*/
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
const walkRecursive = (node, parent, parentKey) => {
|
|
2114
|
-
if (Array.isArray(node)) {
|
|
2115
|
-
// Walk the array of nodes
|
|
2116
|
-
for (let i = 0; i < node.length; i++) {
|
|
2117
|
-
const child = node[i];
|
|
2118
|
-
const done = walkRecursive(child, node, i);
|
|
2119
|
-
if (done)
|
|
2120
|
-
return true;
|
|
2121
|
-
}
|
|
2122
|
-
}
|
|
2123
|
-
else {
|
|
2124
|
-
if (node.type === 'bit' && node.index === index) {
|
|
2125
|
-
// Found the placeholder, replace it with the body bit
|
|
2126
|
-
parent[parentKey] = bodyBitJson;
|
|
2127
|
-
return true;
|
|
2128
|
-
}
|
|
2129
|
-
if (node.content) {
|
|
2130
|
-
// Walk the child content
|
|
2131
|
-
const done = walkRecursive(node.content, node, 'content');
|
|
2132
|
-
if (done)
|
|
2133
|
-
return true;
|
|
2134
|
-
}
|
|
2135
|
-
}
|
|
943
|
+
isBitmarkText(obj) {
|
|
944
|
+
if (obj == null)
|
|
2136
945
|
return false;
|
|
2137
|
-
|
|
2138
|
-
|
|
946
|
+
if (!Array.isArray(obj))
|
|
947
|
+
return false;
|
|
948
|
+
// Check for the hidden text tag
|
|
949
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
950
|
+
if (obj.__tag === 'text')
|
|
951
|
+
return true;
|
|
952
|
+
return false;
|
|
2139
953
|
}
|
|
2140
954
|
//
|
|
2141
955
|
// WRITE FUNCTIONS
|
|
@@ -2170,211 +984,23 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
2170
984
|
originalType: bit.isCommented ? bit.bitType : undefined,
|
|
2171
985
|
format: bit.textFormat,
|
|
2172
986
|
bitLevel: bit.bitLevel,
|
|
2173
|
-
// Properties
|
|
2174
|
-
id: undefined,
|
|
2175
|
-
internalComment: undefined,
|
|
2176
|
-
externalId: undefined,
|
|
2177
|
-
spaceId: undefined,
|
|
2178
|
-
padletId: undefined,
|
|
2179
|
-
jupyterId: undefined,
|
|
2180
|
-
jupyterExecutionCount: undefined,
|
|
2181
|
-
isPublic: undefined,
|
|
2182
|
-
aiGenerated: undefined,
|
|
2183
|
-
machineTranslated: undefined,
|
|
2184
|
-
analyticsTag: undefined,
|
|
2185
|
-
feedbackEngine: undefined,
|
|
2186
|
-
feedbackType: undefined,
|
|
2187
|
-
disableFeedback: undefined,
|
|
2188
|
-
releaseVersion: undefined,
|
|
2189
|
-
releaseKind: undefined,
|
|
2190
|
-
releaseDate: undefined,
|
|
2191
|
-
book: undefined,
|
|
2192
|
-
ageRange: undefined,
|
|
2193
|
-
lang: undefined,
|
|
2194
|
-
language: undefined,
|
|
2195
|
-
publisher: undefined,
|
|
2196
|
-
publisherName: undefined,
|
|
2197
|
-
theme: undefined,
|
|
2198
|
-
computerLanguage: undefined,
|
|
2199
|
-
target: undefined,
|
|
2200
|
-
slug: undefined,
|
|
2201
|
-
tag: undefined,
|
|
2202
|
-
reductionTag: undefined,
|
|
2203
|
-
bubbleTag: undefined,
|
|
2204
|
-
levelCEFRp: undefined,
|
|
2205
|
-
levelCEFR: undefined,
|
|
2206
|
-
levelILR: undefined,
|
|
2207
|
-
levelACTFL: undefined,
|
|
2208
|
-
icon: undefined,
|
|
2209
|
-
iconTag: undefined,
|
|
2210
|
-
colorTag: undefined,
|
|
2211
|
-
flashcardSet: undefined,
|
|
2212
|
-
subtype: undefined,
|
|
2213
|
-
bookAlias: undefined,
|
|
2214
|
-
coverImage: undefined,
|
|
2215
|
-
coverColor: undefined,
|
|
2216
|
-
publications: undefined,
|
|
2217
|
-
author: undefined,
|
|
2218
|
-
subject: undefined,
|
|
2219
|
-
date: undefined,
|
|
2220
|
-
dateEnd: undefined,
|
|
2221
|
-
location: undefined,
|
|
2222
|
-
kind: undefined,
|
|
2223
|
-
hasMarkAsDone: undefined,
|
|
2224
|
-
processHandIn: undefined,
|
|
2225
|
-
action: undefined,
|
|
2226
|
-
showInIndex: undefined,
|
|
2227
|
-
blockId: undefined,
|
|
2228
|
-
pageNo: undefined,
|
|
2229
|
-
x: undefined,
|
|
2230
|
-
y: undefined,
|
|
2231
|
-
width: undefined,
|
|
2232
|
-
height: undefined,
|
|
2233
|
-
index: undefined,
|
|
2234
|
-
classification: undefined,
|
|
2235
|
-
availableClassifications: undefined,
|
|
2236
|
-
allowedBit: undefined,
|
|
2237
|
-
tableFixedHeader: undefined,
|
|
2238
|
-
tableSearch: undefined,
|
|
2239
|
-
tableSort: undefined,
|
|
2240
|
-
tablePagination: undefined,
|
|
2241
|
-
tablePaginationLimit: undefined,
|
|
2242
|
-
tableHeight: undefined,
|
|
2243
|
-
tableWhitespaceNoWrap: undefined,
|
|
2244
|
-
tableAutoWidth: undefined,
|
|
2245
|
-
tableResizableColumns: undefined,
|
|
2246
|
-
quizCountItems: undefined,
|
|
2247
|
-
quizStrikethroughSolutions: undefined,
|
|
2248
|
-
codeLineNumbers: undefined,
|
|
2249
|
-
codeMinimap: undefined,
|
|
2250
|
-
stripePricingTableId: undefined,
|
|
2251
|
-
stripePublishableKey: undefined,
|
|
2252
|
-
thumbImage: undefined,
|
|
2253
|
-
scormSource: undefined,
|
|
2254
|
-
posterImage: undefined,
|
|
2255
|
-
focusX: undefined,
|
|
2256
|
-
focusY: undefined,
|
|
2257
|
-
pointerLeft: undefined,
|
|
2258
|
-
pointerTop: undefined,
|
|
2259
|
-
listItemIndent: undefined,
|
|
2260
|
-
backgroundWallpaper: undefined,
|
|
2261
|
-
hasBookNavigation: undefined,
|
|
2262
|
-
duration: undefined,
|
|
2263
|
-
deeplink: undefined,
|
|
2264
|
-
externalLink: undefined,
|
|
2265
|
-
externalLinkText: undefined,
|
|
2266
|
-
videoCallLink: undefined,
|
|
2267
|
-
vendorUrl: undefined,
|
|
2268
|
-
search: undefined,
|
|
2269
|
-
list: undefined,
|
|
2270
|
-
textReference: undefined,
|
|
2271
|
-
isTracked: undefined,
|
|
2272
|
-
isInfoOnly: undefined,
|
|
2273
|
-
imageFirst: undefined,
|
|
2274
|
-
activityType: undefined,
|
|
2275
|
-
labelTrue: undefined,
|
|
2276
|
-
labelFalse: undefined,
|
|
2277
|
-
content2Buy: undefined,
|
|
2278
|
-
mailingList: undefined,
|
|
2279
|
-
buttonCaption: undefined,
|
|
2280
|
-
callToActionUrl: undefined,
|
|
2281
|
-
caption: undefined,
|
|
2282
|
-
quotedPerson: undefined,
|
|
2283
|
-
reasonableNumOfChars: undefined,
|
|
2284
|
-
resolved: undefined,
|
|
2285
|
-
resolvedDate: undefined,
|
|
2286
|
-
resolvedBy: undefined,
|
|
2287
|
-
maxCreatedBits: undefined,
|
|
2288
|
-
maxDisplayLevel: undefined,
|
|
2289
|
-
page: undefined,
|
|
2290
|
-
productId: undefined,
|
|
2291
|
-
product: undefined,
|
|
2292
|
-
productVideo: undefined,
|
|
2293
|
-
productFolder: undefined,
|
|
2294
|
-
technicalTerm: undefined,
|
|
2295
|
-
servings: undefined,
|
|
2296
|
-
ratingLevelStart: undefined,
|
|
2297
|
-
ratingLevelEnd: undefined,
|
|
2298
|
-
ratingLevelSelected: undefined,
|
|
2299
|
-
// Book data
|
|
2300
|
-
title: undefined,
|
|
2301
|
-
subtitle: undefined,
|
|
2302
|
-
level: undefined,
|
|
2303
|
-
toc: undefined,
|
|
2304
|
-
progress: undefined,
|
|
2305
|
-
anchor: undefined,
|
|
2306
|
-
reference: undefined,
|
|
2307
|
-
referenceEnd: undefined,
|
|
2308
|
-
// Item, Lead, Hint, Instruction
|
|
2309
|
-
item: undefined,
|
|
2310
|
-
lead: undefined,
|
|
2311
|
-
pageNumber: undefined,
|
|
2312
|
-
marginNumber: undefined,
|
|
2313
|
-
hint: undefined,
|
|
2314
|
-
instruction: undefined,
|
|
2315
|
-
// Example
|
|
2316
|
-
isExample: undefined,
|
|
2317
|
-
example: undefined,
|
|
2318
|
-
// Person .conversion-xxx, page-person, etc
|
|
2319
|
-
person: undefined,
|
|
2320
|
-
// Marks (config)
|
|
2321
|
-
marks: undefined,
|
|
2322
|
-
// Extra Properties
|
|
2323
|
-
extraProperties: undefined,
|
|
2324
|
-
// Body
|
|
2325
|
-
body: undefined,
|
|
2326
|
-
// Resource
|
|
2327
|
-
imagePlaceholder: undefined,
|
|
2328
|
-
resource: undefined,
|
|
2329
|
-
logos: undefined,
|
|
2330
|
-
images: undefined,
|
|
2331
|
-
// Children
|
|
2332
|
-
statement: undefined,
|
|
2333
|
-
isCorrect: undefined,
|
|
2334
|
-
sampleSolution: undefined,
|
|
2335
|
-
additionalSolutions: undefined,
|
|
2336
|
-
partialAnswer: undefined,
|
|
2337
|
-
elements: undefined,
|
|
2338
|
-
cards: undefined,
|
|
2339
|
-
definitions: undefined,
|
|
2340
|
-
statements: undefined,
|
|
2341
|
-
responses: undefined,
|
|
2342
|
-
quizzes: undefined,
|
|
2343
|
-
heading: undefined,
|
|
2344
|
-
pairs: undefined,
|
|
2345
|
-
matrix: undefined,
|
|
2346
|
-
choices: undefined,
|
|
2347
|
-
questions: undefined,
|
|
2348
|
-
captionDefinitionList: undefined,
|
|
2349
|
-
listItems: undefined,
|
|
2350
|
-
sections: undefined,
|
|
2351
|
-
// Placeholders
|
|
2352
|
-
placeholders: undefined,
|
|
2353
|
-
// Footer
|
|
2354
|
-
footer: undefined,
|
|
2355
987
|
};
|
|
2356
|
-
// Add the resource template if there should be a resource (indicated by resourceType) but there is none defined.
|
|
2357
|
-
// if (bit.resourceType && !bitJson.resource) {
|
|
2358
|
-
// const jsonKey = ResourceTag.keyFromValue(bit.resourceType);
|
|
2359
|
-
// bitJson.resource = {
|
|
2360
|
-
// type: bit.resourceType,
|
|
2361
|
-
// } as ResourceJson;
|
|
2362
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2363
|
-
// if (jsonKey) (bitJson.resource as any)[jsonKey] = {};
|
|
2364
|
-
// }
|
|
2365
988
|
return bitJson;
|
|
2366
989
|
}
|
|
2367
990
|
/**
|
|
2368
991
|
* Remove wanted properties from bit json object.
|
|
2369
992
|
* - This function defines the defaults for properties in the json.
|
|
2370
993
|
*
|
|
994
|
+
* TODO: All these defaults should come from the config and be set in the Builder.
|
|
995
|
+
*
|
|
2371
996
|
* @param bit
|
|
2372
997
|
* @returns
|
|
2373
998
|
*/
|
|
2374
|
-
|
|
999
|
+
cleanBitJson(bitJson) {
|
|
1000
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2375
1001
|
const bitType = Config.getBitType(bitJson.type);
|
|
2376
|
-
const textFormat = bitJson.format;
|
|
2377
|
-
const plainText = this.options.textAsPlainText;
|
|
1002
|
+
// const textFormat = bitJson.format;
|
|
1003
|
+
// const plainText = this.options.textAsPlainText;
|
|
2378
1004
|
// Clear 'originalType' if not set
|
|
2379
1005
|
if (bitJson.originalType == null)
|
|
2380
1006
|
bitJson.originalType = undefined;
|
|
@@ -2388,8 +1014,14 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
2388
1014
|
// The properties used are a bit random sometimes?
|
|
2389
1015
|
// It would be better if this functionality was generated from the bit config
|
|
2390
1016
|
if (Config.isOfBitType(bitType, [BitType._error, BitType._comment])) {
|
|
2391
|
-
// Special
|
|
1017
|
+
// Special case for _error and _comment bits
|
|
2392
1018
|
delete bitJson.format;
|
|
1019
|
+
delete bitJson.item;
|
|
1020
|
+
delete bitJson.lead;
|
|
1021
|
+
delete bitJson.pageNumber;
|
|
1022
|
+
delete bitJson.marginNumber;
|
|
1023
|
+
delete bitJson.hint;
|
|
1024
|
+
delete bitJson.instruction;
|
|
2393
1025
|
//
|
|
2394
1026
|
}
|
|
2395
1027
|
else {
|
|
@@ -2398,6 +1030,18 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
2398
1030
|
// Most bits have these defaults, but there are special cases (not sure if that is by error or design)
|
|
2399
1031
|
if (Config.isOfBitType(bitType, [BitType.page])) {
|
|
2400
1032
|
// Bits without item, lead, etc
|
|
1033
|
+
if (bitJson.item == null || ((_a = bitJson.item) === null || _a === void 0 ? void 0 : _a.length) === 0)
|
|
1034
|
+
delete bitJson.item;
|
|
1035
|
+
if (bitJson.lead == null || ((_b = bitJson.lead) === null || _b === void 0 ? void 0 : _b.length) === 0)
|
|
1036
|
+
delete bitJson.lead;
|
|
1037
|
+
if (bitJson.pageNumber == null || ((_c = bitJson.pageNumber) === null || _c === void 0 ? void 0 : _c.length) === 0)
|
|
1038
|
+
delete bitJson.pageNumber;
|
|
1039
|
+
if (bitJson.marginNumber == null || ((_d = bitJson.marginNumber) === null || _d === void 0 ? void 0 : _d.length) === 0)
|
|
1040
|
+
delete bitJson.marginNumber;
|
|
1041
|
+
if (bitJson.hint == null || ((_e = bitJson.hint) === null || _e === void 0 ? void 0 : _e.length) === 0)
|
|
1042
|
+
delete bitJson.hint;
|
|
1043
|
+
if (bitJson.instruction == null || ((_f = bitJson.instruction) === null || _f === void 0 ? void 0 : _f.length) === 0)
|
|
1044
|
+
delete bitJson.instruction;
|
|
2401
1045
|
}
|
|
2402
1046
|
else {
|
|
2403
1047
|
// Majority of bits
|
|
@@ -2565,6 +1209,8 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
2565
1209
|
bitJson.tableAutoWidth = true;
|
|
2566
1210
|
if (bitJson.tableResizableColumns == null)
|
|
2567
1211
|
bitJson.tableResizableColumns = false;
|
|
1212
|
+
if (bitJson.tableColumnMinWidth == null)
|
|
1213
|
+
bitJson.tableColumnMinWidth = 0;
|
|
2568
1214
|
//
|
|
2569
1215
|
}
|
|
2570
1216
|
if (Config.isOfBitType(bitType, [
|
|
@@ -2705,361 +1351,42 @@ class JsonGenerator extends AstWalkerGenerator {
|
|
|
2705
1351
|
delete bitJson.example;
|
|
2706
1352
|
}
|
|
2707
1353
|
}
|
|
2708
|
-
// Remove unwanted properties
|
|
2709
|
-
// Properties
|
|
2710
|
-
if (bitJson.id == null)
|
|
2711
|
-
delete bitJson.id;
|
|
2712
|
-
if (bitJson.internalComment == null)
|
|
2713
|
-
delete bitJson.internalComment;
|
|
2714
|
-
if (bitJson.externalId == null)
|
|
2715
|
-
delete bitJson.externalId;
|
|
2716
|
-
if (bitJson.spaceId == null)
|
|
2717
|
-
delete bitJson.spaceId;
|
|
2718
|
-
if (bitJson.padletId == null)
|
|
2719
|
-
delete bitJson.padletId;
|
|
2720
|
-
if (bitJson.jupyterId == null)
|
|
2721
|
-
delete bitJson.jupyterId;
|
|
2722
|
-
if (bitJson.jupyterExecutionCount == null)
|
|
2723
|
-
delete bitJson.jupyterExecutionCount;
|
|
2724
|
-
if (bitJson.isPublic == null)
|
|
2725
|
-
delete bitJson.isPublic;
|
|
2726
|
-
if (bitJson.aiGenerated == null)
|
|
2727
|
-
delete bitJson.aiGenerated;
|
|
2728
|
-
if (bitJson.machineTranslated == null)
|
|
2729
|
-
delete bitJson.machineTranslated;
|
|
2730
|
-
if (bitJson.analyticsTag == null)
|
|
2731
|
-
delete bitJson.analyticsTag;
|
|
2732
|
-
if (bitJson.feedbackEngine == null)
|
|
2733
|
-
delete bitJson.feedbackEngine;
|
|
2734
|
-
if (bitJson.feedbackType == null)
|
|
2735
|
-
delete bitJson.feedbackType;
|
|
2736
|
-
if (bitJson.disableFeedback == null)
|
|
2737
|
-
delete bitJson.disableFeedback;
|
|
2738
|
-
if (bitJson.releaseVersion == null)
|
|
2739
|
-
delete bitJson.releaseVersion;
|
|
2740
|
-
if (bitJson.releaseKind == null)
|
|
2741
|
-
delete bitJson.releaseKind;
|
|
2742
|
-
if (bitJson.releaseDate == null)
|
|
2743
|
-
delete bitJson.releaseDate;
|
|
2744
|
-
if (bitJson.book == null)
|
|
2745
|
-
delete bitJson.book;
|
|
2746
|
-
if (bitJson.ageRange == null)
|
|
2747
|
-
delete bitJson.ageRange;
|
|
2748
|
-
if (bitJson.lang == null)
|
|
2749
|
-
delete bitJson.lang;
|
|
2750
|
-
if (bitJson.language == null)
|
|
2751
|
-
delete bitJson.language;
|
|
2752
|
-
if (bitJson.publisher == null)
|
|
2753
|
-
delete bitJson.publisher;
|
|
2754
|
-
if (bitJson.publisherName == null)
|
|
2755
|
-
delete bitJson.publisherName;
|
|
2756
|
-
if (bitJson.theme == null)
|
|
2757
|
-
delete bitJson.theme;
|
|
2758
|
-
if (bitJson.computerLanguage == null)
|
|
2759
|
-
delete bitJson.computerLanguage;
|
|
2760
|
-
if (bitJson.target == null)
|
|
2761
|
-
delete bitJson.target;
|
|
2762
|
-
if (bitJson.slug == null)
|
|
2763
|
-
delete bitJson.slug;
|
|
2764
|
-
if (bitJson.tag == null)
|
|
2765
|
-
delete bitJson.tag;
|
|
2766
|
-
if (bitJson.reductionTag == null)
|
|
2767
|
-
delete bitJson.reductionTag;
|
|
2768
|
-
if (bitJson.bubbleTag == null)
|
|
2769
|
-
delete bitJson.bubbleTag;
|
|
2770
|
-
if (bitJson.levelCEFRp == null)
|
|
2771
|
-
delete bitJson.levelCEFRp;
|
|
2772
|
-
if (bitJson.levelCEFR == null)
|
|
2773
|
-
delete bitJson.levelCEFR;
|
|
2774
|
-
if (bitJson.levelILR == null)
|
|
2775
|
-
delete bitJson.levelILR;
|
|
2776
|
-
if (bitJson.levelACTFL == null)
|
|
2777
|
-
delete bitJson.levelACTFL;
|
|
2778
|
-
if (bitJson.icon == null)
|
|
2779
|
-
delete bitJson.icon;
|
|
2780
|
-
if (bitJson.iconTag == null)
|
|
2781
|
-
delete bitJson.iconTag;
|
|
2782
|
-
if (bitJson.colorTag == null)
|
|
2783
|
-
delete bitJson.colorTag;
|
|
2784
|
-
if (bitJson.flashcardSet == null)
|
|
2785
|
-
delete bitJson.flashcardSet;
|
|
2786
|
-
if (bitJson.subtype == null)
|
|
2787
|
-
delete bitJson.subtype;
|
|
2788
|
-
if (bitJson.bookAlias == null)
|
|
2789
|
-
delete bitJson.bookAlias;
|
|
2790
|
-
if (bitJson.coverImage == null)
|
|
2791
|
-
delete bitJson.coverImage;
|
|
2792
|
-
if (bitJson.coverColor == null)
|
|
2793
|
-
delete bitJson.coverColor;
|
|
2794
|
-
if (bitJson.publications == null)
|
|
2795
|
-
delete bitJson.publications;
|
|
2796
|
-
if (bitJson.author == null)
|
|
2797
|
-
delete bitJson.author;
|
|
2798
|
-
if (bitJson.subject == null)
|
|
2799
|
-
delete bitJson.subject;
|
|
2800
|
-
if (bitJson.date == null)
|
|
2801
|
-
delete bitJson.date;
|
|
2802
|
-
if (bitJson.dateEnd == null)
|
|
2803
|
-
delete bitJson.dateEnd;
|
|
2804
|
-
if (bitJson.location == null)
|
|
2805
|
-
delete bitJson.location;
|
|
2806
|
-
if (bitJson.kind == null)
|
|
2807
|
-
delete bitJson.kind;
|
|
2808
|
-
if (bitJson.hasMarkAsDone == null)
|
|
2809
|
-
delete bitJson.hasMarkAsDone;
|
|
2810
|
-
if (bitJson.processHandIn == null)
|
|
2811
|
-
delete bitJson.processHandIn;
|
|
2812
|
-
if (bitJson.action == null)
|
|
2813
|
-
delete bitJson.action;
|
|
2814
|
-
if (bitJson.showInIndex == null)
|
|
2815
|
-
delete bitJson.showInIndex;
|
|
2816
|
-
if (bitJson.blockId == null)
|
|
2817
|
-
delete bitJson.blockId;
|
|
2818
|
-
if (bitJson.pageNo == null)
|
|
2819
|
-
delete bitJson.pageNo;
|
|
2820
|
-
if (bitJson.x == null)
|
|
2821
|
-
delete bitJson.x;
|
|
2822
|
-
if (bitJson.y == null)
|
|
2823
|
-
delete bitJson.y;
|
|
2824
|
-
if (bitJson.width == null)
|
|
2825
|
-
delete bitJson.width;
|
|
2826
|
-
if (bitJson.height == null)
|
|
2827
|
-
delete bitJson.height;
|
|
2828
|
-
if (bitJson.index == null)
|
|
2829
|
-
delete bitJson.index;
|
|
2830
|
-
if (bitJson.classification == null)
|
|
2831
|
-
delete bitJson.classification;
|
|
2832
|
-
if (bitJson.availableClassifications == null)
|
|
2833
|
-
delete bitJson.availableClassifications;
|
|
2834
|
-
if (bitJson.allowedBit == null)
|
|
2835
|
-
delete bitJson.allowedBit;
|
|
2836
|
-
if (bitJson.tableFixedHeader == null)
|
|
2837
|
-
delete bitJson.tableFixedHeader;
|
|
2838
|
-
if (bitJson.tableSearch == null)
|
|
2839
|
-
delete bitJson.tableSearch;
|
|
2840
|
-
if (bitJson.tableSort == null)
|
|
2841
|
-
delete bitJson.tableSort;
|
|
2842
|
-
if (bitJson.tablePagination == null)
|
|
2843
|
-
delete bitJson.tablePagination;
|
|
2844
|
-
if (bitJson.tablePaginationLimit == null)
|
|
2845
|
-
delete bitJson.tablePaginationLimit;
|
|
2846
|
-
if (bitJson.tableHeight == null)
|
|
2847
|
-
delete bitJson.tableHeight;
|
|
2848
|
-
if (bitJson.tableWhitespaceNoWrap == null)
|
|
2849
|
-
delete bitJson.tableWhitespaceNoWrap;
|
|
2850
|
-
if (bitJson.tableAutoWidth == null)
|
|
2851
|
-
delete bitJson.tableAutoWidth;
|
|
2852
|
-
if (bitJson.tableResizableColumns == null)
|
|
2853
|
-
delete bitJson.tableResizableColumns;
|
|
2854
|
-
if (bitJson.quizCountItems == null)
|
|
2855
|
-
delete bitJson.quizCountItems;
|
|
2856
|
-
if (bitJson.quizStrikethroughSolutions == null)
|
|
2857
|
-
delete bitJson.quizStrikethroughSolutions;
|
|
2858
|
-
if (bitJson.codeLineNumbers == null)
|
|
2859
|
-
delete bitJson.codeLineNumbers;
|
|
2860
|
-
if (bitJson.codeMinimap == null)
|
|
2861
|
-
delete bitJson.codeMinimap;
|
|
2862
|
-
if (bitJson.stripePricingTableId == null)
|
|
2863
|
-
delete bitJson.stripePricingTableId;
|
|
2864
|
-
if (bitJson.stripePublishableKey == null)
|
|
2865
|
-
delete bitJson.stripePublishableKey;
|
|
2866
|
-
if (bitJson.thumbImage == null)
|
|
2867
|
-
delete bitJson.thumbImage;
|
|
2868
|
-
if (bitJson.scormSource == null)
|
|
2869
|
-
delete bitJson.scormSource;
|
|
2870
|
-
if (bitJson.posterImage == null)
|
|
2871
|
-
delete bitJson.posterImage;
|
|
2872
|
-
if (bitJson.focusX == null)
|
|
2873
|
-
delete bitJson.focusX;
|
|
2874
|
-
if (bitJson.focusY == null)
|
|
2875
|
-
delete bitJson.focusY;
|
|
2876
|
-
if (bitJson.pointerLeft == null)
|
|
2877
|
-
delete bitJson.pointerLeft;
|
|
2878
|
-
if (bitJson.pointerTop == null)
|
|
2879
|
-
delete bitJson.pointerTop;
|
|
2880
|
-
if (bitJson.listItemIndent == null)
|
|
2881
|
-
delete bitJson.listItemIndent;
|
|
2882
|
-
if (bitJson.backgroundWallpaper == null)
|
|
2883
|
-
delete bitJson.backgroundWallpaper;
|
|
2884
|
-
if (bitJson.hasBookNavigation == null)
|
|
2885
|
-
delete bitJson.hasBookNavigation;
|
|
2886
|
-
if (bitJson.duration == null)
|
|
2887
|
-
delete bitJson.duration;
|
|
2888
|
-
if (bitJson.deeplink == null)
|
|
2889
|
-
delete bitJson.deeplink;
|
|
2890
|
-
if (bitJson.externalLink == null)
|
|
2891
|
-
delete bitJson.externalLink;
|
|
2892
|
-
if (bitJson.externalLinkText == null)
|
|
2893
|
-
delete bitJson.externalLinkText;
|
|
2894
|
-
if (bitJson.videoCallLink == null)
|
|
2895
|
-
delete bitJson.videoCallLink;
|
|
2896
|
-
if (bitJson.vendorUrl == null)
|
|
2897
|
-
delete bitJson.vendorUrl;
|
|
2898
|
-
if (bitJson.search == null)
|
|
2899
|
-
delete bitJson.search;
|
|
2900
|
-
if (bitJson.list == null)
|
|
2901
|
-
delete bitJson.list;
|
|
2902
|
-
if (bitJson.textReference == null)
|
|
2903
|
-
delete bitJson.textReference;
|
|
2904
|
-
if (bitJson.isTracked == null)
|
|
2905
|
-
delete bitJson.isTracked;
|
|
2906
|
-
if (bitJson.isInfoOnly == null)
|
|
2907
|
-
delete bitJson.isInfoOnly;
|
|
2908
|
-
if (bitJson.imageFirst == null)
|
|
2909
|
-
delete bitJson.imageFirst;
|
|
2910
|
-
if (bitJson.activityType == null)
|
|
2911
|
-
delete bitJson.activityType;
|
|
2912
|
-
if (bitJson.labelTrue == null)
|
|
2913
|
-
delete bitJson.labelTrue;
|
|
2914
|
-
if (bitJson.labelFalse == null)
|
|
2915
|
-
delete bitJson.labelFalse;
|
|
2916
|
-
if (bitJson.content2Buy == null)
|
|
2917
|
-
delete bitJson.content2Buy;
|
|
2918
|
-
if (bitJson.mailingList == null)
|
|
2919
|
-
delete bitJson.mailingList;
|
|
2920
|
-
if (bitJson.buttonCaption == null)
|
|
2921
|
-
delete bitJson.buttonCaption;
|
|
2922
|
-
if (bitJson.callToActionUrl == null)
|
|
2923
|
-
delete bitJson.callToActionUrl;
|
|
2924
|
-
if (bitJson.caption == null)
|
|
2925
|
-
delete bitJson.caption;
|
|
2926
|
-
if (bitJson.quotedPerson == null)
|
|
2927
|
-
delete bitJson.quotedPerson;
|
|
2928
|
-
if (bitJson.resolved == null)
|
|
2929
|
-
delete bitJson.resolved;
|
|
2930
|
-
if (bitJson.resolvedDate == null)
|
|
2931
|
-
delete bitJson.resolvedDate;
|
|
2932
|
-
if (bitJson.resolvedBy == null)
|
|
2933
|
-
delete bitJson.resolvedBy;
|
|
2934
|
-
if (bitJson.maxCreatedBits == null)
|
|
2935
|
-
delete bitJson.maxCreatedBits;
|
|
2936
|
-
if (bitJson.maxDisplayLevel == null)
|
|
2937
|
-
delete bitJson.maxDisplayLevel;
|
|
2938
|
-
if (bitJson.page == null)
|
|
2939
|
-
delete bitJson.page;
|
|
2940
|
-
if (bitJson.productId == null)
|
|
2941
|
-
delete bitJson.productId;
|
|
2942
|
-
if (bitJson.product == null)
|
|
2943
|
-
delete bitJson.product;
|
|
2944
|
-
if (bitJson.productVideo == null)
|
|
2945
|
-
delete bitJson.productVideo;
|
|
2946
|
-
if (bitJson.productFolder == null)
|
|
2947
|
-
delete bitJson.productFolder;
|
|
2948
|
-
if (bitJson.technicalTerm == null)
|
|
2949
|
-
delete bitJson.technicalTerm;
|
|
2950
|
-
if (bitJson.servings == null)
|
|
2951
|
-
delete bitJson.servings;
|
|
2952
|
-
if (bitJson.ratingLevelStart == null)
|
|
2953
|
-
delete bitJson.ratingLevelStart;
|
|
2954
|
-
if (bitJson.ratingLevelEnd == null)
|
|
2955
|
-
delete bitJson.ratingLevelEnd;
|
|
2956
|
-
if (bitJson.ratingLevelSelected == null)
|
|
2957
|
-
delete bitJson.ratingLevelSelected;
|
|
2958
|
-
// Book data
|
|
2959
|
-
if (bitJson.title == null)
|
|
2960
|
-
delete bitJson.title;
|
|
2961
|
-
if (bitJson.subtitle == null)
|
|
2962
|
-
delete bitJson.subtitle;
|
|
2963
|
-
if (bitJson.level == null)
|
|
2964
|
-
delete bitJson.level;
|
|
2965
|
-
if (bitJson.toc == null)
|
|
2966
|
-
delete bitJson.toc;
|
|
2967
|
-
if (bitJson.progress == null)
|
|
2968
|
-
delete bitJson.progress;
|
|
2969
|
-
if (bitJson.anchor == null)
|
|
2970
|
-
delete bitJson.anchor;
|
|
2971
|
-
if (bitJson.reference == null)
|
|
2972
|
-
delete bitJson.reference;
|
|
2973
|
-
if (bitJson.referenceEnd == null)
|
|
2974
|
-
delete bitJson.referenceEnd;
|
|
2975
|
-
// Item, Lead, Hint, Instruction
|
|
2976
|
-
if (bitJson.item == null)
|
|
2977
|
-
delete bitJson.item;
|
|
2978
|
-
if (bitJson.lead == null)
|
|
2979
|
-
delete bitJson.lead;
|
|
2980
|
-
if (bitJson.pageNumber == null)
|
|
2981
|
-
delete bitJson.pageNumber;
|
|
2982
|
-
if (bitJson.marginNumber == null)
|
|
2983
|
-
delete bitJson.marginNumber;
|
|
2984
|
-
if (bitJson.hint == null)
|
|
2985
|
-
delete bitJson.hint;
|
|
2986
|
-
if (bitJson.instruction == null)
|
|
2987
|
-
delete bitJson.instruction;
|
|
2988
|
-
// Example
|
|
2989
|
-
if (bitJson.example === undefined)
|
|
2990
|
-
delete bitJson.example;
|
|
2991
|
-
if (bitJson.isExample == null)
|
|
2992
|
-
delete bitJson.isExample;
|
|
2993
|
-
// Mark
|
|
2994
|
-
if (bitJson.marks == null)
|
|
2995
|
-
delete bitJson.marks;
|
|
2996
|
-
// Extra Properties
|
|
2997
|
-
if (bitJson.extraProperties == null)
|
|
2998
|
-
delete bitJson.extraProperties;
|
|
2999
|
-
// Body
|
|
3000
|
-
if (bitJson.body == null && textFormat !== TextFormat.json)
|
|
3001
|
-
delete bitJson.body;
|
|
3002
|
-
// Placeholders
|
|
3003
|
-
if (bitJson.placeholders == null || Object.keys(bitJson.placeholders).length === 0)
|
|
3004
|
-
delete bitJson.placeholders;
|
|
3005
|
-
// Resource
|
|
3006
|
-
if (bitJson.imagePlaceholder == null)
|
|
3007
|
-
delete bitJson.imagePlaceholder;
|
|
3008
|
-
if (bitJson.resource == null)
|
|
3009
|
-
delete bitJson.resource;
|
|
3010
|
-
if (bitJson.logos == null)
|
|
3011
|
-
delete bitJson.logos;
|
|
3012
|
-
if (bitJson.images == null)
|
|
3013
|
-
delete bitJson.images;
|
|
3014
|
-
// Children
|
|
3015
|
-
if (bitJson.statement == null)
|
|
3016
|
-
delete bitJson.statement;
|
|
3017
|
-
if (bitJson.isCorrect == null)
|
|
3018
|
-
delete bitJson.isCorrect;
|
|
3019
|
-
if (bitJson.sampleSolution == null)
|
|
3020
|
-
delete bitJson.sampleSolution;
|
|
3021
|
-
if (bitJson.additionalSolutions == null)
|
|
3022
|
-
delete bitJson.additionalSolutions;
|
|
3023
|
-
if (bitJson.partialAnswer == null)
|
|
3024
|
-
delete bitJson.partialAnswer;
|
|
3025
|
-
if (bitJson.elements == null)
|
|
3026
|
-
delete bitJson.elements;
|
|
3027
|
-
if (bitJson.cards == null)
|
|
3028
|
-
delete bitJson.cards;
|
|
3029
|
-
if (bitJson.definitions == null)
|
|
3030
|
-
delete bitJson.definitions;
|
|
3031
|
-
if (bitJson.statements == null)
|
|
3032
|
-
delete bitJson.statements;
|
|
3033
|
-
if (bitJson.responses == null)
|
|
3034
|
-
delete bitJson.responses;
|
|
3035
|
-
if (bitJson.quizzes == null)
|
|
3036
|
-
delete bitJson.quizzes;
|
|
3037
|
-
if (bitJson.heading == null)
|
|
3038
|
-
delete bitJson.heading;
|
|
3039
|
-
if (bitJson.pairs == null)
|
|
3040
|
-
delete bitJson.pairs;
|
|
3041
|
-
if (bitJson.matrix == null)
|
|
3042
|
-
delete bitJson.matrix;
|
|
3043
|
-
if (bitJson.table == null)
|
|
3044
|
-
delete bitJson.table;
|
|
3045
|
-
if (bitJson.choices == null)
|
|
3046
|
-
delete bitJson.choices;
|
|
3047
|
-
if (bitJson.questions == null)
|
|
3048
|
-
delete bitJson.questions;
|
|
3049
|
-
if (bitJson.captionDefinitionList == null)
|
|
3050
|
-
delete bitJson.captionDefinitionList;
|
|
3051
|
-
if (bitJson.listItems == null)
|
|
3052
|
-
delete bitJson.listItems;
|
|
3053
|
-
if (bitJson.sections == null)
|
|
3054
|
-
delete bitJson.sections;
|
|
3055
|
-
// Placeholders
|
|
3056
|
-
if (!plainText || bitJson.placeholders == null)
|
|
3057
|
-
delete bitJson.placeholders;
|
|
3058
|
-
// Footer
|
|
3059
|
-
if (bitJson.footer == null)
|
|
3060
|
-
delete bitJson.footer;
|
|
3061
1354
|
return bitJson;
|
|
3062
1355
|
}
|
|
1356
|
+
/**
|
|
1357
|
+
* Convert any bitmark texts to strings.
|
|
1358
|
+
*/
|
|
1359
|
+
convertAllBitmarkTextsToStringsForPlainText(json) {
|
|
1360
|
+
if (!this.options.textAsPlainText)
|
|
1361
|
+
return;
|
|
1362
|
+
const obj = json;
|
|
1363
|
+
for (const key in obj) {
|
|
1364
|
+
const val = obj[key];
|
|
1365
|
+
if (this.isBitmarkText(val)) {
|
|
1366
|
+
const s = this.textGenerator.generateSync(val, TextFormat.bitmarkMinusMinus);
|
|
1367
|
+
obj[key] = (Breakscape.unbreakscape(s) || '').trim();
|
|
1368
|
+
}
|
|
1369
|
+
else if (typeof obj[key] === 'object') {
|
|
1370
|
+
this.convertAllBitmarkTextsToStringsForPlainText(obj[key]);
|
|
1371
|
+
}
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
/**
|
|
1375
|
+
* Remove any property with a key starting with an double underscore.
|
|
1376
|
+
*
|
|
1377
|
+
* @param json
|
|
1378
|
+
*/
|
|
1379
|
+
removeTemporaryProperties(json) {
|
|
1380
|
+
const obj = json;
|
|
1381
|
+
for (const key in obj) {
|
|
1382
|
+
if (key.startsWith('__')) {
|
|
1383
|
+
delete obj[key];
|
|
1384
|
+
}
|
|
1385
|
+
else if (typeof obj[key] === 'object') {
|
|
1386
|
+
this.removeTemporaryProperties(obj[key]);
|
|
1387
|
+
}
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
3063
1390
|
//
|
|
3064
1391
|
// Writer interface
|
|
3065
1392
|
//
|