@gmb/bitmark-parser-generator 5.19.0 → 5.20.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.
@@ -836,8 +836,6 @@ var AbstractTagConfig = class {
836
836
  __publicField(this, "chain");
837
837
  __publicField(this, "jsonKey");
838
838
  // If the json key is different from the tag
839
- __publicField(this, "secondaryJsonKey");
840
- // Heading card alternate path
841
839
  __publicField(this, "deprecated");
842
840
  this.type = params.type;
843
841
  this.configKey = params.configKey;
@@ -846,7 +844,6 @@ var AbstractTagConfig = class {
846
844
  this.minCount = params.minCount;
847
845
  this.chain = params.chain;
848
846
  this.jsonKey = params.jsonKey;
849
- this.secondaryJsonKey = params.secondaryJsonKey;
850
847
  this.deprecated = params.deprecated;
851
848
  }
852
849
  };
@@ -1007,12 +1004,14 @@ ${tag.toString(opts)}`;
1007
1004
 
1008
1005
  // src/model/config/CardSideConfig.ts
1009
1006
  var CardSideConfig = class {
1010
- constructor(name, repeat, variants) {
1007
+ constructor(name, repeat, variants, jsonKey) {
1011
1008
  __publicField(this, "name");
1012
1009
  __publicField(this, "repeat");
1010
+ __publicField(this, "jsonKey");
1013
1011
  __publicField(this, "variants");
1014
1012
  this.name = name;
1015
1013
  this.repeat = repeat;
1014
+ this.jsonKey = jsonKey;
1016
1015
  this.variants = variants;
1017
1016
  }
1018
1017
  toString(options) {
@@ -1034,15 +1033,13 @@ var CardSideConfig = class {
1034
1033
 
1035
1034
  // src/model/config/CardSetConfig.ts
1036
1035
  var CardSetConfig = class {
1037
- constructor(configKey, jsonKey, itemType, sections, sides) {
1036
+ constructor(configKey, jsonKey, sections, sides) {
1038
1037
  __publicField(this, "configKey");
1039
1038
  __publicField(this, "jsonKey");
1040
- __publicField(this, "itemType");
1041
1039
  __publicField(this, "sections");
1042
1040
  __publicField(this, "sides");
1043
1041
  this.configKey = configKey;
1044
1042
  this.jsonKey = jsonKey;
1045
- this.itemType = itemType;
1046
1043
  this.sections = sections;
1047
1044
  this.sides = sides;
1048
1045
  }
@@ -1057,8 +1054,6 @@ var CardSetConfig = class {
1057
1054
  s += `[CardSet: ${this.configKey}]`;
1058
1055
  s += `
1059
1056
  jsonKey: ${this.jsonKey}`;
1060
- s += `
1061
- itemType: ${this.itemType}`;
1062
1057
  for (const side of this.sides) {
1063
1058
  s += `
1064
1059
  ${side.toString(opts)}`;
@@ -1186,6 +1181,7 @@ var import_superenum14 = require("@ncoderz/superenum");
1186
1181
  var import_superenum10 = require("@ncoderz/superenum");
1187
1182
  var groupKeys = {
1188
1183
  group_standardAllBits: "group_standardAllBits",
1184
+ group_standardItemLead: "group_standardItemLead",
1189
1185
  group_standardItemLeadInstructionHint: "group_standardItemLeadInstructionHint",
1190
1186
  group_standardTags: "group_standardTags",
1191
1187
  group_imageSource: "group_imageSource",
@@ -1269,6 +1265,7 @@ var propertyKeys = {
1269
1265
  property_bot: "@bot",
1270
1266
  property_bubbleTag: "@bubbleTag",
1271
1267
  property_extractorTag: "@extractorTag",
1268
+ property_extractorInternal: "@extractorInternal",
1272
1269
  property_buttonCaption: "@buttonCaption",
1273
1270
  property_callToActionUrl: "@callToActionUrl",
1274
1271
  property_caption: "@caption",
@@ -1483,6 +1480,7 @@ var propertyKeys = {
1483
1480
  property_subject: "@subject",
1484
1481
  property_subtype: "@subtype",
1485
1482
  property_tableAutoWidth: "@tableAutoWidth",
1483
+ property_tableColWidth: "@tableColWidth",
1486
1484
  property_tableColumnMinWidth: "@tableColumnMinWidth",
1487
1485
  property_tableFixedHeader: "@tableFixedHeader",
1488
1486
  property_tableHeaderWhitespaceNoWrap: "@tableHeaderWhitespaceNoWrap",
@@ -2308,7 +2306,7 @@ var CARDSETS = {
2308
2306
  {
2309
2307
  key: ConfigKey.tag_title,
2310
2308
  description: "Title of the definition.",
2311
- secondaryJsonKey: "heading.forKeys"
2309
+ jsonKey: "^heading.forKeys"
2312
2310
  },
2313
2311
  {
2314
2312
  key: ConfigKey.group_resourceIcon,
@@ -2332,7 +2330,7 @@ var CARDSETS = {
2332
2330
  {
2333
2331
  key: ConfigKey.tag_title,
2334
2332
  description: "Title of the definition.",
2335
- secondaryJsonKey: "heading.forValues"
2333
+ jsonKey: "^heading.forValues"
2336
2334
  },
2337
2335
  {
2338
2336
  key: ConfigKey.group_resourceIcon,
@@ -2382,7 +2380,7 @@ var CARDSETS = {
2382
2380
  {
2383
2381
  key: ConfigKey.tag_title,
2384
2382
  description: "Title of the match pair.",
2385
- secondaryJsonKey: "heading.forKeys"
2383
+ jsonKey: "^heading.forKeys"
2386
2384
  },
2387
2385
  {
2388
2386
  key: ConfigKey.property_isCaseSensitive,
@@ -2417,7 +2415,7 @@ var CARDSETS = {
2417
2415
  {
2418
2416
  key: ConfigKey.tag_title,
2419
2417
  description: "Title of the match pair.",
2420
- secondaryJsonKey: "heading.forValues"
2418
+ jsonKey: "^heading.forValues"
2421
2419
  },
2422
2420
  {
2423
2421
  key: ConfigKey.property_isCaseSensitive,
@@ -2450,7 +2448,7 @@ var CARDSETS = {
2450
2448
  {
2451
2449
  key: ConfigKey.tag_title,
2452
2450
  description: "Title of the audio match pair.",
2453
- secondaryJsonKey: "heading.forKeys"
2451
+ jsonKey: "^heading.forKeys"
2454
2452
  },
2455
2453
  {
2456
2454
  key: ConfigKey.resource_audio,
@@ -2475,7 +2473,7 @@ var CARDSETS = {
2475
2473
  {
2476
2474
  key: ConfigKey.tag_title,
2477
2475
  description: "Title of the audio match pair.",
2478
- secondaryJsonKey: "heading.forValues"
2476
+ jsonKey: "^heading.forValues"
2479
2477
  },
2480
2478
  {
2481
2479
  key: ConfigKey.resource_audio,
@@ -2507,7 +2505,7 @@ var CARDSETS = {
2507
2505
  {
2508
2506
  key: ConfigKey.tag_title,
2509
2507
  description: "Title of the image match pair.",
2510
- secondaryJsonKey: "heading.forKeys"
2508
+ jsonKey: "^heading.forKeys"
2511
2509
  },
2512
2510
  {
2513
2511
  key: ConfigKey.resource_image,
@@ -2532,7 +2530,7 @@ var CARDSETS = {
2532
2530
  {
2533
2531
  key: ConfigKey.tag_title,
2534
2532
  description: "Title of the image match pair.",
2535
- secondaryJsonKey: "heading.forValues"
2533
+ jsonKey: "^heading.forValues"
2536
2534
  },
2537
2535
  {
2538
2536
  key: ConfigKey.resource_image,
@@ -2569,7 +2567,7 @@ var CARDSETS = {
2569
2567
  {
2570
2568
  key: ConfigKey.tag_title,
2571
2569
  description: "Title of the match matrix.",
2572
- secondaryJsonKey: "heading.forKeys"
2570
+ jsonKey: "^heading.forKeys"
2573
2571
  },
2574
2572
  {
2575
2573
  key: ConfigKey.property_isCaseSensitive,
@@ -2599,7 +2597,7 @@ var CARDSETS = {
2599
2597
  {
2600
2598
  key: ConfigKey.tag_title,
2601
2599
  description: "Title of the match matrix.",
2602
- secondaryJsonKey: "heading.forValues"
2600
+ jsonKey: "^heading.forValues"
2603
2601
  },
2604
2602
  {
2605
2603
  key: ConfigKey.property_isCaseSensitive,
@@ -2628,11 +2626,13 @@ var CARDSETS = {
2628
2626
  {
2629
2627
  key: ConfigKey.tag_true,
2630
2628
  description: "Tag for true statements.",
2629
+ jsonKey: "statement|set(isCorrect=true)",
2631
2630
  maxCount: 1
2632
2631
  },
2633
2632
  {
2634
2633
  key: ConfigKey.tag_false,
2635
2634
  description: "Tag for false statements.",
2635
+ jsonKey: "statement|set(isCorrect=false)",
2636
2636
  maxCount: 1
2637
2637
  },
2638
2638
  {
@@ -2696,7 +2696,7 @@ var CARDSETS = {
2696
2696
  {
2697
2697
  key: ConfigKey.tag_title,
2698
2698
  description: "Title of the feedback.",
2699
- secondaryJsonKey: "heading.forKeys"
2699
+ jsonKey: "^heading.forKeys"
2700
2700
  }
2701
2701
  ],
2702
2702
  bodyAllowed: false
@@ -2726,7 +2726,7 @@ var CARDSETS = {
2726
2726
  {
2727
2727
  key: ConfigKey.tag_title,
2728
2728
  description: "Title of the feedback.",
2729
- secondaryJsonKey: "heading.forValues"
2729
+ jsonKey: "^heading.forValues"
2730
2730
  }
2731
2731
  ],
2732
2732
  bodyAllowed: true
@@ -2816,7 +2816,6 @@ var CARDSETS = {
2816
2816
  //
2817
2817
  [CardSetConfigKey.table]: {
2818
2818
  jsonKey: "table.data",
2819
- itemType: "array",
2820
2819
  sides: [
2821
2820
  {
2822
2821
  name: "cell",
@@ -2831,8 +2830,8 @@ var CARDSETS = {
2831
2830
  },
2832
2831
  {
2833
2832
  key: ConfigKey.tag_title,
2834
- description: "Title of the table.",
2835
- secondaryJsonKey: "table.columns[]"
2833
+ jsonKey: "^table.columns[]",
2834
+ description: "Title of the table."
2836
2835
  },
2837
2836
  {
2838
2837
  key: ConfigKey.property_tableCellType,
@@ -2853,6 +2852,11 @@ var CARDSETS = {
2853
2852
  key: ConfigKey.property_tableScope,
2854
2853
  description: "Scope attribute for header cells.",
2855
2854
  format: TagFormat.plainText
2855
+ },
2856
+ {
2857
+ key: ConfigKey.property_tableColWidth,
2858
+ description: "Width for the column.",
2859
+ format: TagFormat.number
2856
2860
  }
2857
2861
  ],
2858
2862
  repeatCount: Count.infinity
@@ -2867,14 +2871,15 @@ var CARDSETS = {
2867
2871
  [CardSetConfigKey.tableExtended]: {
2868
2872
  jsonKey: null,
2869
2873
  sections: {
2870
- default: { jsonKey: "tableExtended.body.rows" },
2871
- "table-header": { jsonKey: "tableExtended.header.rows" },
2872
- "table-footer": { jsonKey: "tableExtended.footer.rows" }
2874
+ "table-header": { jsonKey: "table.header.rows", sideJsonKey: "cells[{s}]|set(title=true)" },
2875
+ "table-body": { jsonKey: "table.body.rows", isDefault: true },
2876
+ "table-footer": { jsonKey: "table.footer.rows", sideJsonKey: "cells[{s}]|set(title=true)" }
2873
2877
  },
2874
2878
  sides: [
2875
2879
  {
2876
2880
  name: "cell",
2877
2881
  repeat: true,
2882
+ jsonKey: "cells[{s}]",
2878
2883
  variants: [
2879
2884
  {
2880
2885
  jsonKey: "content",
@@ -2885,27 +2890,37 @@ var CARDSETS = {
2885
2890
  },
2886
2891
  {
2887
2892
  key: ConfigKey.tag_title,
2893
+ jsonKey: ".",
2888
2894
  description: "Title of the table cell."
2889
2895
  },
2890
2896
  {
2891
2897
  key: ConfigKey.property_tableCellType,
2898
+ jsonKey: "title|bool(th)",
2892
2899
  description: "Table cell type (th/td).",
2893
2900
  format: TagFormat.plainText
2894
2901
  },
2895
2902
  {
2896
2903
  key: ConfigKey.property_tableRowSpan,
2904
+ jsonKey: "rowspan",
2897
2905
  description: "Number of rows the cell spans.",
2898
2906
  format: TagFormat.number
2899
2907
  },
2900
2908
  {
2901
2909
  key: ConfigKey.property_tableColSpan,
2910
+ jsonKey: "colspan",
2902
2911
  description: "Number of columns the cell spans.",
2903
2912
  format: TagFormat.number
2904
2913
  },
2905
2914
  {
2906
2915
  key: ConfigKey.property_tableScope,
2916
+ jsonKey: "scope",
2907
2917
  description: "Scope attribute for header cells.",
2908
2918
  format: TagFormat.plainText
2919
+ },
2920
+ {
2921
+ key: ConfigKey.property_tableColWidth,
2922
+ description: "Width for the column.",
2923
+ format: TagFormat.number
2909
2924
  }
2910
2925
  ],
2911
2926
  repeatCount: Count.infinity
@@ -2919,7 +2934,6 @@ var CARDSETS = {
2919
2934
  //
2920
2935
  [CardSetConfigKey.pronunciationTable]: {
2921
2936
  jsonKey: "pronunciationTable.data",
2922
- itemType: "array",
2923
2937
  sides: [
2924
2938
  {
2925
2939
  name: "cell",
@@ -2966,15 +2980,8 @@ var CARDSETS = {
2966
2980
  format: TagFormat.plainText
2967
2981
  },
2968
2982
  {
2969
- key: ConfigKey.tag_item,
2970
- description: "The item for the bot action response.",
2971
- chain: [
2972
- {
2973
- key: ConfigKey.tag_item,
2974
- description: "The lead, page number, source page number, and margin number.",
2975
- maxCount: 4
2976
- }
2977
- ]
2983
+ key: ConfigKey.group_standardItemLead,
2984
+ description: "Item, lead, page number, and margin number for the bot action response."
2978
2985
  },
2979
2986
  {
2980
2987
  key: ConfigKey.tag_instruction,
@@ -3061,19 +3068,20 @@ var CARDSETS = {
3061
3068
  description: "Title of the ingredient."
3062
3069
  },
3063
3070
  {
3064
- key: ConfigKey.group_trueFalse,
3065
- description: "Group for true/false properties of the ingredient."
3071
+ key: ConfigKey.tag_true,
3072
+ description: "Checked state for the ingredient.",
3073
+ jsonKey: "ingredient|set(checked=true)",
3074
+ maxCount: 1
3066
3075
  },
3067
3076
  {
3068
- key: ConfigKey.tag_item,
3069
- description: "The item for the ingredient.",
3070
- chain: [
3071
- {
3072
- key: ConfigKey.tag_item,
3073
- description: "Lead, page number, source page number, and margin number.",
3074
- maxCount: 4
3075
- }
3076
- ]
3077
+ key: ConfigKey.tag_false,
3078
+ description: "Unchecked state for the ingredient.",
3079
+ jsonKey: "ingredient|set(checked=false)",
3080
+ maxCount: 1
3081
+ },
3082
+ {
3083
+ key: ConfigKey.group_standardItemLead,
3084
+ description: "Item, lead, page number, and margin number for the ingredient."
3077
3085
  },
3078
3086
  {
3079
3087
  key: ConfigKey.tag_instruction,
@@ -3212,8 +3220,7 @@ var GROUPS = {
3212
3220
  {
3213
3221
  key: ConfigKey.property_validationDate,
3214
3222
  description: "The date when the bit was validated",
3215
- format: TagFormat.plainText,
3216
- defaultValue: ""
3223
+ format: TagFormat.plainText
3217
3224
  },
3218
3225
  {
3219
3226
  key: ConfigKey.property_aiGenerated,
@@ -3358,6 +3365,7 @@ var GROUPS = {
3358
3365
  },
3359
3366
  {
3360
3367
  key: ConfigKey.property_groupTag,
3368
+ jsonKey: "groupTag.name",
3361
3369
  description: "The group tag(s) for the bit",
3362
3370
  format: TagFormat.plainText,
3363
3371
  maxCount: Count.infinity,
@@ -3388,6 +3396,12 @@ var GROUPS = {
3388
3396
  format: TagFormat.plainText,
3389
3397
  maxCount: Count.infinity
3390
3398
  },
3399
+ {
3400
+ key: ConfigKey.property_extractorInternal,
3401
+ description: "Internal metadata used by the extractor for processing purposes",
3402
+ format: TagFormat.plainText,
3403
+ maxCount: Count.infinity
3404
+ },
3391
3405
  {
3392
3406
  key: ConfigKey.property_levelCEFRp,
3393
3407
  description: "The CEFRp level for the bit",
@@ -3454,20 +3468,48 @@ var GROUPS = {
3454
3468
  }
3455
3469
  ]
3456
3470
  },
3457
- [ConfigKey.group_standardItemLeadInstructionHint]: {
3471
+ [ConfigKey.group_standardItemLead]: {
3458
3472
  type: GroupConfigType.standard,
3459
- description: "Standard group for item, lead, page number, source page number, margin number, instruction and hint tags",
3473
+ description: "Standard group for item, lead, page number, and margin number tags",
3460
3474
  tags: [
3461
3475
  {
3462
3476
  key: ConfigKey.tag_item,
3477
+ jsonKey: "item",
3463
3478
  description: "The item for the bit",
3464
3479
  chain: [
3465
3480
  {
3466
3481
  key: ConfigKey.tag_item,
3467
- description: "The lead, page number, source page number, and margin number for the bit",
3468
- maxCount: 4
3482
+ jsonKey: "lead",
3483
+ description: "The lead for the bit",
3484
+ maxCount: 1,
3485
+ chain: [
3486
+ {
3487
+ key: ConfigKey.tag_item,
3488
+ jsonKey: "pageNumber",
3489
+ description: "The page number for the bit",
3490
+ maxCount: 1,
3491
+ chain: [
3492
+ {
3493
+ key: ConfigKey.tag_item,
3494
+ jsonKey: "marginNumber",
3495
+ description: "The margin number for the bit",
3496
+ maxCount: 1
3497
+ }
3498
+ ]
3499
+ }
3500
+ ]
3469
3501
  }
3470
3502
  ]
3503
+ }
3504
+ ]
3505
+ },
3506
+ [ConfigKey.group_standardItemLeadInstructionHint]: {
3507
+ type: GroupConfigType.standard,
3508
+ description: "Standard group for item, lead, page number, margin number, instruction and hint tags",
3509
+ tags: [
3510
+ {
3511
+ key: ConfigKey.group_standardItemLead,
3512
+ description: "Item, lead, page number, and margin number tags"
3471
3513
  },
3472
3514
  {
3473
3515
  key: ConfigKey.tag_instruction,
@@ -3506,6 +3548,7 @@ var GROUPS = {
3506
3548
  tags: [
3507
3549
  {
3508
3550
  key: ConfigKey.property_imageSource,
3551
+ jsonKey: "imageSource.url",
3509
3552
  description: "The source of an image",
3510
3553
  format: TagFormat.plainText,
3511
3554
  chain: [
@@ -3539,6 +3582,7 @@ var GROUPS = {
3539
3582
  tags: [
3540
3583
  {
3541
3584
  key: ConfigKey.property_technicalTerm,
3585
+ jsonKey: "technicalTerm.technicalTerm",
3542
3586
  description: "The technical term",
3543
3587
  format: TagFormat.plainText,
3544
3588
  chain: [
@@ -3557,6 +3601,7 @@ var GROUPS = {
3557
3601
  tags: [
3558
3602
  {
3559
3603
  key: ConfigKey.property_person,
3604
+ jsonKey: "person.name",
3560
3605
  description: "A person",
3561
3606
  format: TagFormat.plainText,
3562
3607
  chain: [
@@ -3574,6 +3619,7 @@ var GROUPS = {
3574
3619
  {
3575
3620
  // Deprecated (parter renamed to person)
3576
3621
  key: ConfigKey.property_partner,
3622
+ jsonKey: "partner.name",
3577
3623
  description: "A partner",
3578
3624
  format: TagFormat.plainText,
3579
3625
  chain: [
@@ -3601,6 +3647,7 @@ var GROUPS = {
3601
3647
  chain: [
3602
3648
  {
3603
3649
  key: ConfigKey.tag_gap,
3650
+ jsonKey: "solutions[]",
3604
3651
  description: "Alternative values for the gaps in the content",
3605
3652
  maxCount: Count.infinity
3606
3653
  },
@@ -3610,13 +3657,16 @@ var GROUPS = {
3610
3657
  },
3611
3658
  {
3612
3659
  key: ConfigKey.property_example,
3660
+ jsonKey: "example",
3613
3661
  description: "An example for the gap",
3614
3662
  format: TagFormat.plainText
3615
3663
  },
3616
3664
  {
3617
3665
  key: ConfigKey.property_isCaseSensitive,
3666
+ jsonKey: "isCaseSensitive",
3618
3667
  description: "If true, the gap text is case sensitive",
3619
- format: TagFormat.boolean
3668
+ format: TagFormat.boolean,
3669
+ defaultValue: "true"
3620
3670
  }
3621
3671
  ]
3622
3672
  }
@@ -3633,11 +3683,13 @@ var GROUPS = {
3633
3683
  chain: [
3634
3684
  {
3635
3685
  key: ConfigKey.tag_true,
3686
+ jsonKey: "choices[]|set(isCorrect=true)",
3636
3687
  description: "True values for a true/false statement/question",
3637
3688
  maxCount: Count.infinity
3638
3689
  },
3639
3690
  {
3640
3691
  key: ConfigKey.tag_false,
3692
+ jsonKey: "choices[]|set(isCorrect=false)",
3641
3693
  description: "False values for a true/false statement/question",
3642
3694
  maxCount: Count.infinity
3643
3695
  },
@@ -3647,6 +3699,7 @@ var GROUPS = {
3647
3699
  },
3648
3700
  {
3649
3701
  key: ConfigKey.property_example,
3702
+ jsonKey: "example",
3650
3703
  description: "An example for the true/false statement/question",
3651
3704
  format: TagFormat.plainText
3652
3705
  }
@@ -3659,11 +3712,13 @@ var GROUPS = {
3659
3712
  chain: [
3660
3713
  {
3661
3714
  key: ConfigKey.tag_true,
3715
+ jsonKey: "choices[]|set(isCorrect=true)",
3662
3716
  description: "True values for a true/false statement/question",
3663
3717
  maxCount: Count.infinity
3664
3718
  },
3665
3719
  {
3666
3720
  key: ConfigKey.tag_false,
3721
+ jsonKey: "choices[]|set(isCorrect=false)",
3667
3722
  description: "False values for a true/false statement/question",
3668
3723
  maxCount: Count.infinity
3669
3724
  },
@@ -3673,6 +3728,7 @@ var GROUPS = {
3673
3728
  },
3674
3729
  {
3675
3730
  key: ConfigKey.property_example,
3731
+ jsonKey: "example",
3676
3732
  description: "An example for the true/false statement/question",
3677
3733
  format: TagFormat.plainText
3678
3734
  }
@@ -3686,6 +3742,7 @@ var GROUPS = {
3686
3742
  tags: [
3687
3743
  {
3688
3744
  key: ConfigKey.property_mark,
3745
+ jsonKey: "marks.mark",
3689
3746
  description: "The mark configuration",
3690
3747
  format: TagFormat.plainText,
3691
3748
  maxCount: Count.infinity,
@@ -3715,11 +3772,13 @@ var GROUPS = {
3715
3772
  chain: [
3716
3773
  {
3717
3774
  key: ConfigKey.property_mark,
3775
+ jsonKey: "mark",
3718
3776
  description: "The mark configuration",
3719
3777
  format: TagFormat.plainText
3720
3778
  },
3721
3779
  {
3722
3780
  key: ConfigKey.property_example,
3781
+ jsonKey: "example",
3723
3782
  description: "An example for the marked content",
3724
3783
  format: TagFormat.plainText
3725
3784
  }
@@ -3890,7 +3949,8 @@ var GROUPS = {
3890
3949
  {
3891
3950
  key: ConfigKey.property_maxTocChapterLevel,
3892
3951
  description: "The maximum table of contents chapter level",
3893
- format: TagFormat.number
3952
+ format: TagFormat.number,
3953
+ defaultValue: "-1"
3894
3954
  },
3895
3955
  {
3896
3956
  key: ConfigKey.property_sourceDocument,
@@ -3972,12 +4032,14 @@ var GROUPS = {
3972
4032
  {
3973
4033
  key: ConfigKey.property_isTracked,
3974
4034
  description: "If true, the learning path is tracked",
3975
- format: TagFormat.boolean
4035
+ format: TagFormat.boolean,
4036
+ defaultValue: "true"
3976
4037
  },
3977
4038
  {
3978
4039
  key: ConfigKey.property_isInfoOnly,
3979
4040
  description: "If true, the learning path is info only",
3980
- format: TagFormat.boolean
4041
+ format: TagFormat.boolean,
4042
+ defaultValue: "false"
3981
4043
  },
3982
4044
  {
3983
4045
  key: ConfigKey.property_deeplink,
@@ -4321,6 +4383,7 @@ var GROUPS = {
4321
4383
  },
4322
4384
  {
4323
4385
  key: ConfigKey.property_posterImage,
4386
+ jsonKey: "posterImage.src",
4324
4387
  description: "The poster image for the video",
4325
4388
  format: TagFormat.plainText,
4326
4389
  chain: [
@@ -4846,27 +4909,24 @@ var ConfigHydrator = class {
4846
4909
  const v = this.hydrateCardVariantConfig(_variant);
4847
4910
  variantsOfSide.push(v);
4848
4911
  }
4849
- const sideConfig = new CardSideConfig(_side.name, _side.repeat ?? false, variantsOfSide);
4912
+ const sideConfig = new CardSideConfig(
4913
+ _side.name,
4914
+ _side.repeat ?? false,
4915
+ variantsOfSide,
4916
+ _side.jsonKey
4917
+ );
4850
4918
  sides.push(sideConfig);
4851
4919
  }
4852
4920
  const cardSetConfig = new CardSetConfig(
4853
4921
  _cardSet,
4854
4922
  _cardSetConfig.jsonKey,
4855
- _cardSetConfig.itemType ?? "object",
4856
4923
  _cardSetConfig.sections,
4857
4924
  sides
4858
4925
  );
4859
4926
  return cardSetConfig;
4860
4927
  }
4861
4928
  hydrateTagConfig(_tag) {
4862
- const {
4863
- key: _configKey,
4864
- maxCount,
4865
- minCount,
4866
- chain: _chain,
4867
- secondaryJsonKey,
4868
- deprecated
4869
- } = _tag;
4929
+ const { key: _configKey, maxCount, minCount, chain: _chain, deprecated } = _tag;
4870
4930
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4871
4931
  if (!configKey) throw new Error(`No tag key found for config key '${configKey}'`);
4872
4932
  const tag = (0, import_superenum15.Enum)(Tag).fromValue(configKey);
@@ -4881,7 +4941,6 @@ var ConfigHydrator = class {
4881
4941
  maxCount: maxCount ?? MAX_COUNT_DEFAULT,
4882
4942
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4883
4943
  chain,
4884
- secondaryJsonKey,
4885
4944
  deprecated
4886
4945
  });
4887
4946
  return {
@@ -4900,8 +4959,7 @@ var ConfigHydrator = class {
4900
4959
  format,
4901
4960
  values,
4902
4961
  defaultValue,
4903
- jsonKey,
4904
- secondaryJsonKey
4962
+ jsonKey
4905
4963
  } = _tag;
4906
4964
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4907
4965
  if (!configKey) throw new Error(`No property key found for config key '${configKey}'`);
@@ -4917,7 +4975,6 @@ var ConfigHydrator = class {
4917
4975
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4918
4976
  chain,
4919
4977
  jsonKey,
4920
- secondaryJsonKey,
4921
4978
  format,
4922
4979
  values,
4923
4980
  defaultValue,
@@ -4930,15 +4987,7 @@ var ConfigHydrator = class {
4930
4987
  };
4931
4988
  }
4932
4989
  hydrateResourceTagConfig(_tag) {
4933
- const {
4934
- key: _configKey,
4935
- maxCount,
4936
- minCount,
4937
- chain: _chain,
4938
- deprecated,
4939
- jsonKey,
4940
- secondaryJsonKey
4941
- } = _tag;
4990
+ const { key: _configKey, maxCount, minCount, chain: _chain, deprecated, jsonKey } = _tag;
4942
4991
  const configKey = (0, import_superenum15.Enum)(ConfigKey).fromValue(_configKey) || ConfigKey._unknown;
4943
4992
  if (!configKey) throw new Error(`No resource key found for config key '${configKey}'`);
4944
4993
  const tag = _configKey.substring(1);
@@ -4953,7 +5002,6 @@ var ConfigHydrator = class {
4953
5002
  minCount: minCount ?? MIN_COUNT_DEFAULT,
4954
5003
  chain,
4955
5004
  jsonKey,
4956
- secondaryJsonKey,
4957
5005
  deprecated
4958
5006
  });
4959
5007
  return {
@@ -6254,7 +6302,8 @@ var BITS = {
6254
6302
  {
6255
6303
  key: ConfigKey.property_isCaseSensitive,
6256
6304
  description: "If the cloze answers are case sensitive",
6257
- format: TagFormat.boolean
6305
+ format: TagFormat.boolean,
6306
+ defaultValue: "true"
6258
6307
  },
6259
6308
  {
6260
6309
  key: ConfigKey.property_quizCountItems,
@@ -6700,6 +6749,7 @@ var BITS = {
6700
6749
  },
6701
6750
  {
6702
6751
  key: ConfigKey.property_servings,
6752
+ jsonKey: "servings.servings",
6703
6753
  description: "The number of servings for the ingredients",
6704
6754
  format: TagFormat.number,
6705
6755
  chain: [
@@ -8955,7 +9005,8 @@ var BITS = {
8955
9005
  {
8956
9006
  key: ConfigKey.property_isCaseSensitive,
8957
9007
  description: "Case sensitivity for matching pairs, used to define if matches are case-sensitive",
8958
- format: TagFormat.boolean
9008
+ format: TagFormat.boolean,
9009
+ defaultValue: "true"
8959
9010
  }
8960
9011
  ],
8961
9012
  cardSet: CardSetConfigKey.matchPairs
@@ -9405,7 +9456,8 @@ var BITS = {
9405
9456
  {
9406
9457
  key: ConfigKey.property_platformBrandTarget,
9407
9458
  description: 'The platform brand target (typically "light", "dark" or "none")',
9408
- format: TagFormat.plainText
9459
+ format: TagFormat.plainText,
9460
+ defaultValue: "none"
9409
9461
  }
9410
9462
  ]
9411
9463
  },
@@ -9428,7 +9480,8 @@ var BITS = {
9428
9480
  {
9429
9481
  key: ConfigKey.property_platformLogoMaxHeight,
9430
9482
  description: "Maximum height for the platform logo",
9431
- format: TagFormat.number
9483
+ format: TagFormat.number,
9484
+ defaultValue: "40"
9432
9485
  },
9433
9486
  {
9434
9487
  key: ConfigKey.group_platformStylesCommon,
@@ -9601,7 +9654,8 @@ var BITS = {
9601
9654
  {
9602
9655
  key: ConfigKey.property_resolved,
9603
9656
  description: "Resolved status for the review note, used to indicate if the note is resolved",
9604
- format: TagFormat.boolean
9657
+ format: TagFormat.boolean,
9658
+ defaultValue: "false"
9605
9659
  },
9606
9660
  {
9607
9661
  key: ConfigKey.property_resolvedDate,
@@ -9788,6 +9842,7 @@ var BITS = {
9788
9842
  tags: [
9789
9843
  {
9790
9844
  key: ConfigKey.property_ratingLevelStart,
9845
+ jsonKey: "ratingLevelStart.level",
9791
9846
  description: "Start level for the rating survey, used to define the lowest rating",
9792
9847
  format: TagFormat.number,
9793
9848
  chain: [
@@ -9800,6 +9855,7 @@ var BITS = {
9800
9855
  },
9801
9856
  {
9802
9857
  key: ConfigKey.property_ratingLevelEnd,
9858
+ jsonKey: "ratingLevelEnd.level",
9803
9859
  description: "End level for the rating survey, used to define the highest rating",
9804
9860
  format: TagFormat.number,
9805
9861
  chain: [
@@ -9868,28 +9924,32 @@ var BITS = {
9868
9924
  {
9869
9925
  key: ConfigKey.property_tableFixedHeader,
9870
9926
  description: "Fixed header for the table, used to keep the header visible while scrolling",
9871
- format: TagFormat.boolean
9927
+ format: TagFormat.boolean,
9928
+ defaultValue: "false"
9872
9929
  },
9873
9930
  {
9874
9931
  key: ConfigKey.property_tableHeaderWhitespaceNoWrap,
9875
9932
  description: "No wrap for table header whitespace, used to prevent header text wrapping",
9876
- format: TagFormat.boolean
9877
- // defaultValue: 'false',
9933
+ format: TagFormat.boolean,
9934
+ defaultValue: "false"
9878
9935
  },
9879
9936
  {
9880
9937
  key: ConfigKey.property_tableSearch,
9881
9938
  description: "Search functionality for the table, used to enable searching within the table",
9882
- format: TagFormat.boolean
9939
+ format: TagFormat.boolean,
9940
+ defaultValue: "false"
9883
9941
  },
9884
9942
  {
9885
9943
  key: ConfigKey.property_tableSort,
9886
9944
  description: "Sorting functionality for the table, used to enable sorting of table columns",
9887
- format: TagFormat.boolean
9945
+ format: TagFormat.boolean,
9946
+ defaultValue: "false"
9888
9947
  },
9889
9948
  {
9890
9949
  key: ConfigKey.property_tablePagination,
9891
9950
  description: "Pagination for the table, used to limit the number of rows displayed at once",
9892
- format: TagFormat.boolean
9951
+ format: TagFormat.boolean,
9952
+ defaultValue: "false"
9893
9953
  },
9894
9954
  {
9895
9955
  key: ConfigKey.property_tablePaginationLimit,
@@ -9906,24 +9966,26 @@ var BITS = {
9906
9966
  {
9907
9967
  key: ConfigKey.property_tableWhitespaceNoWrap,
9908
9968
  description: "No wrap for table whitespace, used to prevent text wrapping in table cells",
9909
- format: TagFormat.boolean
9910
- // defaultValue: 'false',
9969
+ format: TagFormat.boolean,
9970
+ defaultValue: "false"
9911
9971
  },
9912
9972
  {
9913
9973
  key: ConfigKey.property_tableAutoWidth,
9914
9974
  description: "Auto width for table columns, used to automatically adjust column widths",
9915
- format: TagFormat.boolean
9916
- // defaultValue: 'true',
9975
+ format: TagFormat.boolean,
9976
+ defaultValue: "true"
9917
9977
  },
9918
9978
  {
9919
9979
  key: ConfigKey.property_tableResizableColumns,
9920
9980
  description: "Resizable columns for the table, used to allow users to resize table columns",
9921
- format: TagFormat.boolean
9981
+ format: TagFormat.boolean,
9982
+ defaultValue: "false"
9922
9983
  },
9923
9984
  {
9924
9985
  key: ConfigKey.property_tableColumnMinWidth,
9925
9986
  description: "Minimum width for table columns, used to define the minimum width of columns",
9926
- format: TagFormat.number
9987
+ format: TagFormat.number,
9988
+ defaultValue: "0"
9927
9989
  }
9928
9990
  ],
9929
9991
  cardSet: CardSetConfigKey.table
@@ -9931,7 +9993,8 @@ var BITS = {
9931
9993
  [BitType2.tableExtended]: {
9932
9994
  since: "4.14.0",
9933
9995
  baseBitType: BitType2.table,
9934
- description: "Extended table bit, used to create complex tables with all HTML table features"
9996
+ description: "Extended table bit, used to create complex tables with all HTML table features",
9997
+ cardSet: CardSetConfigKey.tableExtended
9935
9998
  },
9936
9999
  [BitType2.tableExtendedImage]: {
9937
10000
  since: "5.13.0",
@@ -10897,7 +10960,6 @@ var Config = class {
10897
10960
  maxCount: 1,
10898
10961
  chain: tag.chain,
10899
10962
  jsonKey: tag.jsonKey,
10900
- secondaryJsonKey: tag.secondaryJsonKey,
10901
10963
  deprecated: tag.deprecated
10902
10964
  });
10903
10965
  finalResourceTags[k] = newTag;
@@ -11002,7 +11064,7 @@ var instance2 = new Config();
11002
11064
  // src/generated/package_info.ts
11003
11065
  var PACKAGE_INFO = {
11004
11066
  "name": "@gmb/bitmark-parser-generator",
11005
- "version": "5.19.0",
11067
+ "version": "5.20.0",
11006
11068
  "author": "Get More Brain Ltd",
11007
11069
  "license": "ISC",
11008
11070
  "description": "A bitmark parser and generator using Peggy.js"
@@ -11563,6 +11625,8 @@ var NodeType = {
11563
11625
  extractorExtractionTimestampValue: "extractorExtractionTimestampValue",
11564
11626
  extractorTag: "extractorTag",
11565
11627
  extractorTagValue: "extractorTagValue",
11628
+ extractorInternal: "extractorInternal",
11629
+ extractorInternalValue: "extractorInternalValue",
11566
11630
  extraProperties: "extraProperties",
11567
11631
  feedback: "feedback",
11568
11632
  feedbackEngine: "feedbackEngine",
@@ -11968,6 +12032,8 @@ var NodeType = {
11968
12032
  table: "table",
11969
12033
  tableAutoWidth: "tableAutoWidth",
11970
12034
  tableAutoWidthValue: "tableAutoWidthValue",
12035
+ tableColWidth: "tableColWidth",
12036
+ tableColWidthValue: "tableColWidthValue",
11971
12037
  tableColumnMinWidth: "tableColumnMinWidth",
11972
12038
  tableColumnMinWidthValue: "tableColumnMinWidthValue",
11973
12039
  tableFixedHeader: "tableFixedHeader",
@@ -24960,6 +25026,12 @@ var Builder = class extends BaseBuilder {
24960
25026
  data.extractorTag,
24961
25027
  options
24962
25028
  ),
25029
+ extractorInternal: this.toAstProperty(
25030
+ bitType,
25031
+ ConfigKey.property_extractorInternal,
25032
+ data.extractorInternal,
25033
+ options
25034
+ ),
24963
25035
  levelCEFRp: this.toAstProperty(
24964
25036
  bitType,
24965
25037
  ConfigKey.property_levelCEFRp,
@@ -26447,6 +26519,7 @@ var Builder = class extends BaseBuilder {
26447
26519
  if (cell.rowspan != null) tableCell.rowspan = cell.rowspan;
26448
26520
  if (cell.colspan != null) tableCell.colspan = cell.colspan;
26449
26521
  if (cell.scope) tableCell.scope = cell.scope;
26522
+ if (cell.colwidth != null) tableCell.colwidth = cell.colwidth;
26450
26523
  return tableCell;
26451
26524
  });
26452
26525
  return {
@@ -28742,6 +28815,10 @@ var BitmarkGenerator = class extends AstWalkerGenerator {
28742
28815
  this.writeTableCellProperty("tableScope", cell.scope);
28743
28816
  this.writeNL();
28744
28817
  }
28818
+ if (cell.colwidth && cell.colwidth > 0) {
28819
+ this.writeTableCellProperty("tableColWidth", cell.colwidth);
28820
+ this.writeNL();
28821
+ }
28745
28822
  const content = cell.content ?? instance3.EMPTY_STRING;
28746
28823
  this.writeTextOrValue(content, this.textFormat, TextLocation2.body);
28747
28824
  }
@@ -31304,7 +31381,8 @@ var JsonGenerator = class extends AstWalkerGenerator {
31304
31381
  if (bitJson.isTracked == null) bitJson.isTracked = true;
31305
31382
  if (bitJson.isInfoOnly == null) bitJson.isInfoOnly = false;
31306
31383
  }
31307
- if (instance2.isOfBitType(bitType, BitType2.table) && !instance2.isOfBitType(bitType, BitType2.tableImage)) {
31384
+ const tableImageHasTable = instance2.isOfBitType(bitType, BitType2.tableImage) && !this.tableIsEmpty(bitJson.table);
31385
+ if (instance2.isOfBitType(bitType, BitType2.table) && !instance2.isOfBitType(bitType, BitType2.tableImage) || tableImageHasTable) {
31308
31386
  if (bitJson.tableFixedHeader == null) bitJson.tableFixedHeader = false;
31309
31387
  if (bitJson.tableHeaderWhitespaceNoWrap == null) {
31310
31388
  bitJson.tableHeaderWhitespaceNoWrap = false;
@@ -31319,10 +31397,8 @@ var JsonGenerator = class extends AstWalkerGenerator {
31319
31397
  if (bitJson.tableResizableColumns == null) bitJson.tableResizableColumns = false;
31320
31398
  if (bitJson.tableColumnMinWidth == null) bitJson.tableColumnMinWidth = 0;
31321
31399
  }
31322
- if (instance2.isOfBitType(bitType, BitType2.tableImage)) {
31323
- if (this.tableIsEmpty(bitJson.table)) {
31324
- delete bitJson.table;
31325
- }
31400
+ if (instance2.isOfBitType(bitType, BitType2.tableImage) && !tableImageHasTable) {
31401
+ delete bitJson.table;
31326
31402
  }
31327
31403
  if (instance2.isOfBitType(bitType, BitType2.bookReference)) {
31328
31404
  if (bitJson.refAuthor == null) bitJson.refAuthor = [];
@@ -34122,11 +34198,19 @@ function parseTable(context, _bitType, cardSet) {
34122
34198
  const rowSpanRaw = tags2.tableRowSpan ?? readExtraProperty(tags2.extraProperties, "tableRowSpan");
34123
34199
  const colSpanRaw = tags2.tableColSpan ?? readExtraProperty(tags2.extraProperties, "tableColSpan");
34124
34200
  const scopeRaw = tags2.tableScope ?? readExtraProperty(tags2.extraProperties, "tableScope");
34125
- cleanupExtraProperties(tags2, ["tableCellType", "tableRowSpan", "tableColSpan", "tableScope"]);
34201
+ const colWidthRaw = tags2.tableColWidth ?? readExtraProperty(tags2.extraProperties, "tableColWidth");
34202
+ cleanupExtraProperties(tags2, [
34203
+ "tableCellType",
34204
+ "tableRowSpan",
34205
+ "tableColSpan",
34206
+ "tableScope",
34207
+ "tableColWidth"
34208
+ ]);
34126
34209
  const cellType = normalizeCellType(cellTypeRaw, section);
34127
34210
  const rowspan = normalizeSpan(rowSpanRaw, "rowspan");
34128
34211
  const colspan = normalizeSpan(colSpanRaw, "colspan");
34129
34212
  const scope = normalizeScope(scopeRaw);
34213
+ const colwidth = instance6.asNumber(colWidthRaw) ?? 0;
34130
34214
  const cell = {
34131
34215
  content
34132
34216
  };
@@ -34134,6 +34218,7 @@ function parseTable(context, _bitType, cardSet) {
34134
34218
  if (rowspan > 1) cell.rowspan = rowspan;
34135
34219
  if (colspan > 1) cell.colspan = colspan;
34136
34220
  if (scope) cell.scope = scope;
34221
+ if (colwidth > 0) cell.colwidth = colwidth;
34137
34222
  return cell;
34138
34223
  };
34139
34224
  const resolveSectionQualifier = (card) => {
@@ -34520,6 +34605,15 @@ function itemLeadTagContentProcessor(context, _contentDepth, _tagsConfig, conten
34520
34605
  }
34521
34606
 
34522
34607
  // src/parser/bitmark/peg/contentProcessors/ItemLeadChainContentProcessor.ts
34608
+ function flattenChainContent(content) {
34609
+ const result = [content];
34610
+ if (content.chain) {
34611
+ for (const child of content.chain) {
34612
+ result.push(...flattenChainContent(child));
34613
+ }
34614
+ }
34615
+ return result;
34616
+ }
34523
34617
  function itemLeadChainContentProcessor(context, contentDepth, tagsConfig, content, target) {
34524
34618
  if (contentDepth === ContentDepth.Chain) {
34525
34619
  itemLeadTagContentProcessor(context, contentDepth, tagsConfig, content, target);
@@ -34530,7 +34624,7 @@ function itemLeadChainContentProcessor(context, contentDepth, tagsConfig, conten
34530
34624
  function buildItemLead(context, _contentDepth, tagsConfig, content, target) {
34531
34625
  if (context.DEBUG_CHAIN_CONTENT) context.debugPrint("item lead content", content);
34532
34626
  const itemLeadConfig = instance2.getTagConfigForTag(tagsConfig, (0, import_superenum43.Enum)(Tag).fromValue(content.type));
34533
- const chainContent = [content, ...content.chain ?? []];
34627
+ const chainContent = flattenChainContent(content);
34534
34628
  const chainTags = context.bitContentProcessor(
34535
34629
  ContentDepth.Chain,
34536
34630
  itemLeadConfig?.chain,
@@ -35087,7 +35181,6 @@ function propertyContentProcessor(context, contentDepth, tagsConfig, content, ta
35087
35181
  minCount: 1,
35088
35182
  chain: void 0,
35089
35183
  jsonKey: void 0,
35090
- secondaryJsonKey: void 0,
35091
35184
  format: TagFormat.bitmarkText,
35092
35185
  values: void 0,
35093
35186
  defaultValue: void 0,