python-oracle-apex 0.0.3__tar.gz → 0.0.5__tar.gz

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.
Files changed (36) hide show
  1. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/PKG-INFO +1 -1
  2. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/pyproject.toml +1 -1
  3. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/pyproject.toml.orig +1 -1
  4. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/__init__.py +1 -1
  5. python_oracle_apex-0.0.5/src/python_oracle_apex/grammar-24.0.peg +1 -0
  6. python_oracle_apex-0.0.3/src/python_oracle_apex/apexlang-26.1.peg → python_oracle_apex-0.0.5/src/python_oracle_apex/grammar-26.1.peg +134 -24
  7. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/__init__.py +2 -1
  8. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/region.py +18 -5
  9. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/parser.py +1 -1
  10. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/region.py +30 -1
  11. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/README.md +0 -0
  12. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/action_c.py +0 -0
  13. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/base.py +0 -0
  14. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/button.py +0 -0
  15. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/computation_a.py +0 -0
  16. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/dynamic_action.py +0 -0
  17. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/page.py +0 -0
  18. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/page_item.py +0 -0
  19. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/objects/process.py +0 -0
  20. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/reader/__init__.py +0 -0
  21. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/reader/button.py +0 -0
  22. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/reader/page.py +0 -0
  23. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/reader/page_item.py +0 -0
  24. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/reader/parse.py +0 -0
  25. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/reader/region.py +0 -0
  26. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/reader/utils.py +0 -0
  27. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/__init__.py +0 -0
  28. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/action_c.py +0 -0
  29. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/button.py +0 -0
  30. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/computation_a.py +0 -0
  31. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/dynamic_action.py +0 -0
  32. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/exception.py +0 -0
  33. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/page.py +0 -0
  34. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/page_item.py +0 -0
  35. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/process.py +0 -0
  36. {python_oracle_apex-0.0.3 → python_oracle_apex-0.0.5}/src/python_oracle_apex/visitor/visitor.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: python-oracle-apex
3
- Version: 0.0.3
3
+ Version: 0.0.5
4
4
  Summary: Parsing files exported from Oracle APEX
5
5
  Author: Maurice Koster
6
6
  Author-email: Maurice Koster <maurice@mauricekoster.com>
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-oracle-apex"
3
- version = "0.0.3"
3
+ version = "0.0.5"
4
4
  description = "Parsing files exported from Oracle APEX"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.13"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-oracle-apex"
3
- version = "0.0.3"
3
+ version = "0.0.5"
4
4
  description = "Parsing files exported from Oracle APEX"
5
5
  readme = "README.md"
6
6
  authors = [
@@ -1,4 +1,4 @@
1
1
  from .parser import parse_apex_file, parse_apex
2
- from .reader import parse_page_file
2
+ from .reader.parse import parse_page_file
3
3
  from .objects import *
4
4
 
@@ -3,9 +3,7 @@ component = page_object blank_lines
3
3
  / process blank_lines
4
4
  / button blank_lines
5
5
  / computation_a blank_lines
6
-
7
-
8
-
6
+ / facet blank_lines
9
7
  page_object = indent "page" (required_ws component_id)? ws "(" page_body_line* indent ")" line_end
10
8
  page_body_line = page_direct_property_line
11
9
  / page_group_block
@@ -17,6 +15,7 @@ page_direct_property = "page" ":" ws number
17
15
  / "name" ":" ws string_like_value
18
16
  / "alias" ":" ws string_like_value
19
17
  / "title" ":" ws string_like_value
18
+ / "pageGroup" ":" ws reference
20
19
 
21
20
  page_group_block = page_appearance
22
21
  / page_navigation
@@ -74,10 +73,14 @@ page_child_component = region
74
73
  / dynamic_action
75
74
  / process
76
75
  / computation_a
76
+ #####
77
+ # REGION
78
+ #####
77
79
 
78
80
  region = indent "region" (required_ws component_id)? ws "(" line_end region_body_line* indent ")" line_end
79
81
  region_body_line = region_direct_property_line
80
82
  / region_group_block
83
+ / region_child_component
81
84
  / blank_lines
82
85
 
83
86
  region_direct_property_line = indent region_direct_property line_end
@@ -91,6 +94,11 @@ region_group_block = region_layout
91
94
  / region_advanced
92
95
  / region_source
93
96
  / region_component_appearance
97
+ / region_settings
98
+ / region_accessibility
99
+ / region_plugin_avatar
100
+ / region_plugin_badge
101
+ / region_pagination
94
102
 
95
103
  region_layout = indent "layout" ws "{" line_end region_layout_property_line* indent "}" line_end
96
104
  region_layout_property_line = indent region_layout_property line_end
@@ -134,13 +142,13 @@ region_advanced_property = "savedReportMappingIdentifier" ":" ws stri
134
142
 
135
143
  region_source = indent "source" ws "{" line_end region_source_property_line* indent "}" line_end
136
144
  region_source_property_line = indent region_source_property line_end
137
- region_source_property = "sqlQuery" ":" ws multiline_string
138
- / "plsqlCode" ":" ws multiline_string
139
- / "plsqlFunctionBody" ":" ws multiline_string
140
- / "htmlCode" ":" ws multiline_string
145
+ region_source_property = "sqlQuery" ":" ws code_block
146
+ / "plsqlCode" ":" ws code_block
147
+ / "plsqlFunctionBody" ":" ws code_block
148
+ / "htmlCode" ":" ws code_block
141
149
  / "text" ":" ws multiline_string
142
150
  / "language" ":" ws ( "plsql" / "javaScript-mle" )
143
- / "javaScriptFunctionBody" ":" ws multiline_string
151
+ / "javaScriptFunctionBody" ":" ws code_block
144
152
  / "location" ":" ws ( "localDatabase" / "restEnabledSql" / "restSource" / "jsonDualityView" / "jsonSource" / "sampleData" )
145
153
  / "remoteServer" ":" ws reference
146
154
  / "sampleData" ":" ws ( "employees" / "tasks" / "products" / "projects" )
@@ -174,7 +182,7 @@ region_component_appearance_property = "display" ":" ws string_like_value
174
182
  / "listTemplate" ":" ws reference
175
183
  / "breadcrumbTemplate" ":" ws reference
176
184
  / "cssClasses" ":" ws array_of_string_like_value
177
- / "templateOptions" ":" ws array_of_string_like_value
185
+ / "templateOptions" ":" ws (array_of_string_like_value / string_like_value)
178
186
  / "templateType" ":" ws ( "theme" / "predefined" )
179
187
  / "template" ":" ws ( "html" / "verticalReport" / "csv" / "xml" / reference )
180
188
  / "customAttributes" ":" ws string_like_value
@@ -182,7 +190,66 @@ region_component_appearance_property = "display" ":" ws string_like_value
182
190
  / "selectFirstRow" ":" ws boolean
183
191
  / "fixedRowHeight" ":" ws boolean
184
192
 
193
+ region_settings = indent "settings" ws "{" line_end region_settings_property_line* indent "}" line_end
194
+ region_settings_property_line = indent region_settings_property line_end
195
+ region_settings_property = "timeAxisType" ":" ws ( "auto" / "disabled" / "enabled" / "mixedFrequency" / "skipGaps" )
196
+ / "zoomAndScroll" ":" ws ( "false" / "delayed" / "delayedScrollOnly" / "live" / "liveScrollOnly" )
197
+ / "zoomDirection" ":" ws ( "bothAxes" / "xAxis" / "yAxis" )
198
+ / "initialZooming" ":" ws ( "first" / "last" / "none" )
199
+ / "showHorizontalGrid" ":" ws ( "auto" / "true" / "false" )
200
+ / "showVerticalGrid" ":" ws ( "auto" / "true" / "false" )
201
+ / "showRowAxis" ":" ws boolean
202
+ / "axisPosition" ":" ws ( "top" / "bottom" )
203
+ / "pieSelectionEffect" ":" ws ( "explode" / "highlightAndExplode" / "highlight" )
204
+ / "renderAs" ":" ws ( "area" / "bar" / "candlestick" / "line" / "lineWithArea" )
205
+
206
+ # UNDOCUMENTED! used in brookstrut page 2 (type: Faceted Search)
207
+ / "compactNosThreshold" ":" ws number
208
+ / "showCurrentFacets" ":" ws ( "selector" )
209
+ / "currentFacetsSelector" ":" ws string_like_value
210
+ / "displayChartForTopNValues" ":" ws number
185
211
 
212
+ / "title" ":" ws string_like_value
213
+ / "description" ":" ws code_block
214
+ / "miscellaneous" ":" ws code_block
215
+ / "displayAvatar" ":" ws boolean
216
+ / "displayBadge" ":" ws boolean
217
+
218
+ region_plugin_avatar = indent "plugin-avatar" ws "{" line_end region_plugin_avatar_property_line* indent "}" line_end
219
+ region_plugin_avatar_property_line = indent region_plugin_avatar_property line_end
220
+ region_plugin_avatar_property = "icon" ":" ws string_like_value
221
+
222
+ region_plugin_badge = indent "plugin-badge" ws "{" line_end region_plugin_badge_property_line* indent "}" line_end
223
+ region_plugin_badge_property_line = indent region_plugin_badge_property line_end
224
+ region_plugin_badge_property = "label" ":" ws string_like_value
225
+ / "value" ":" ws string_like_value
226
+
227
+ region_accessibility = indent "accessibility" ws "{" line_end region_accessibility_property_line* indent "}" line_end
228
+ region_accessibility_property_line = indent region_accessibility_property line_end
229
+ region_accessibility_property = "useLandmark" ":" ws boolean
230
+ / "landmarkType" ":" ws ( "banner" / "complementary" / "contentInfo" / "form" / "main" / "navigation" / "region" / "search" )
231
+ / "landmarkLabel" ":" ws string_like_value
232
+
233
+ region_pagination = indent "pagination" ws "{" line_end region_pagination_property_line* indent "}" line_end
234
+ region_pagination_property_line = indent region_pagination_property line_end
235
+ region_pagination_property = "type" ":" ws ( "rowRangesXToYNoPagination" / "rowRangesXToYOfZNoPagination" /
236
+ "rowRangesXToYOfZWithPagination" / "setPaginationLinks" /
237
+ "setPaginationSelectList" / "setPaginationSearchEngine" /
238
+ "externalPaginationButtons" / "nextAndPreviousLinks" /
239
+ "page" / "scroll"
240
+ )
241
+ / "type" ":" ws string_like_value
242
+ / "displayPosition" ":" ws ( "bottomLeft" / "bottomRight" / "topLeft" / "topRight" /
243
+ "topAndBottomLeft" / "topAndBottomRight" )
244
+ / "partialPageRefresh" ":" ws boolean
245
+ / "showTotalCount" ":" ws boolean
246
+ / "maxRowsToDisplay" ":" ws string_like_value
247
+ / "cardsPerPage" ":" ws number
248
+ / "entitiesPerPage" ":" ws number
249
+ / "initialEntitiesCount" ":" ws number
250
+
251
+
252
+ region_child_component = facet
186
253
  page_item = indent "pageItem" (required_ws component_id)? ws "(" line_end page_item_body_line* indent ")" line_end
187
254
  page_item_body_line = page_item_direct_property_line
188
255
  / page_item_group_block
@@ -268,9 +335,6 @@ page_item_security_property = "authorizationScheme" ":" ws reference
268
335
  / "encryptSessionState" ":" ws boolean
269
336
  / "escapeSpecialChars" ":" ws boolean
270
337
  / "restrictedChars" ":" ws ( "alphanumWithSpace" / "webSafe" / "noSpecialChar" / "noSpecialCharNoNewline" / "workspaceSchema" / "workspaceUserSchema" / "workspaceUserSchemaId" )
271
-
272
-
273
-
274
338
  button = indent "button" (required_ws component_id)? ws "(" line_end button_body_line* indent ")" line_end
275
339
  button_body_line = button_direct_property_line
276
340
  / button_group_block
@@ -321,7 +385,6 @@ button_behavior_property = "type" ":" ws string_like_value
321
385
  / "warnOnUnsavedChanges" ":" ws ( "doNotCheck" )
322
386
  / "databaseAction" ":" ws ( "insert" / "update" / "delete" )
323
387
  / "requiresConfirmation" ":" ws boolean
324
-
325
388
  process = indent "process" (required_ws component_id)? ws "(" line_end process_body_line* indent ")" line_end
326
389
  process_body_line = process_direct_property_line
327
390
  / process_group_block
@@ -358,8 +421,6 @@ process_advanced = indent "advanced" ws "{" line_end process_
358
421
  process_advanced_property_line = indent process_advanced_property line_end
359
422
  process_advanced_property = "staticId" ":" ws string_like_value
360
423
  / "executionMappingIdentifier" ":" ws string_like_value
361
-
362
-
363
424
  computation_a = indent "computation" (required_ws component_id)? ws "(" line_end computation_a_body_line* indent ")" line_end
364
425
  computation_a_body_line = computation_a_direct_property_line
365
426
  / computation_a_group_block
@@ -388,9 +449,6 @@ computation_a_computation_property = "type" ":" ws ( "staticValue" / "item" / "
388
449
  / "javaScriptFunctionBody" ":" ws multiline_string
389
450
  / "itemName" ":" ws string_like_value
390
451
  / "preference" ":" ws string_like_value
391
-
392
-
393
-
394
452
  dynamic_action = indent "dynamicAction" (required_ws component_id)? ws "(" line_end dynamic_action_body_line* indent ")" line_end
395
453
  dynamic_action_body_line = dynamic_action_direct_property_line
396
454
  / dynamic_action_group_block
@@ -440,8 +498,6 @@ dynamic_action_client_side_condition_property = "type" ":" ws ( "item=value" / "
440
498
  / "column" ":" ws string_like_value
441
499
 
442
500
  dynamic_action_child_component = action_c
443
-
444
-
445
501
  action_c = indent "action" (required_ws component_id)? ws "(" line_end action_c_body_line* indent ")" line_end
446
502
  action_c_body_line = action_c_direct_property_line
447
503
  / action_c_group_block
@@ -473,10 +529,64 @@ action_c_execution_property = "sequence" ":" ws number
473
529
  / "fireOnInit" ":" ws boolean
474
530
  / "stopExecutionOnError" ":" ws boolean
475
531
  / "waitForResult" ":" ws boolean
476
-
477
-
478
-
479
-
532
+ facet = indent "facet" (required_ws component_id)? ws "(" line_end facet_body_line* indent ")" line_end
533
+ facet_body_line = facet_direct_property_line
534
+ / facet_group_block
535
+
536
+ facet_direct_property_line = indent facet_direct_property line_end
537
+ facet_direct_property = "name" ":" ws string_like_value
538
+ / "type" ":" ws string_like_value
539
+
540
+ facet_group_block = facet_label
541
+
542
+ facet_group_block = facet_label
543
+ / facet_layout
544
+ / facet_source
545
+ / facet_lov
546
+ / facet_list_entries
547
+
548
+ facet_label = indent "label" ws "{" line_end facet_label_property_line* indent "}" line_end
549
+ facet_label_property_line = indent facet_label_property line_end
550
+ facet_label_property = "label" ":" ws string_like_value
551
+ / "showLabelForCurrentFacet" ":" ws boolean
552
+
553
+ facet_layout = indent "layout" ws "{" line_end facet_layout_property_line* indent "}" line_end
554
+ facet_layout_property_line = indent facet_layout_property line_end
555
+ facet_layout_property = "sequence" ":" ws number
556
+ / "maxHeight" ":" ws number
557
+
558
+ facet_source = indent "source" ws "{" line_end facet_source_property_line* indent "}" line_end
559
+ facet_source_property_line = indent facet_source_property line_end
560
+ facet_source_property = "databaseColumn" ":" ws string_like_value
561
+ / "dbColumns" ":" ws string_like_value
562
+ / "dataType" ":" ws ( "varchar2" / "number" / "date" / "timestamp" /
563
+ "timestampWithTimeZone" / "timestampWithLocalTimeZone" /
564
+ "intervalYearToMonth" / "intervalDayToSecond" /
565
+ "clob" / "blob" / "boolean" / "rowid" / "bfile" / "sdoGeometry" )
566
+
567
+ facet_lov = indent "lov" ws "{" line_end* facet_lov_property_line* indent "}" line_end
568
+ facet_lov_property_line = indent facet_lov_property line_end
569
+ facet_lov_property = "type" ":" ws string_like_value
570
+ / "lov" ":" ws reference
571
+ / "sqlQuery" ":" ws code_block
572
+ / "staticValues" ":" ws code_block
573
+ / "language" ":" ws ( "plsql" / "javaScript-mle" )
574
+ / "plsqlFunctionBody" ":" ws code_block
575
+ / "javaScriptFunctionBody" ":" ws code_block
576
+ / "sortDirection" ":" ws ( "asc" / "desc" )
577
+ / "includeNullOption" ":" ws boolean
578
+ / "nullDisplayValue" ":" ws string_like_value
579
+
580
+ facet_list_entries = indent "listEntries" ws "{" line_end facet_list_entries_property_line* indent "}" line_end
581
+ facet_list_entries_property_line = indent facet_list_entries_property line_end
582
+ facet_list_entries_property = "computeCounts" ":" ws boolean
583
+ / "showCounts" ":" ws boolean
584
+ / "zeroCountEntries" ":" ws ( "hide" / "disable" / "showLast" )
585
+ / "sortByTopCounts" ":" ws boolean
586
+ / "showSelectedFirst" ":" ws boolean
587
+ / "maxDisplayedEntries" ":" ws number
588
+ / "allowToExclude" ":" ws boolean
589
+ / "displayFilterInitially" ":" ws boolean
480
590
 
481
591
  reference = "@" reference_character*
482
592
  component_id = string / identifier / number
@@ -46,7 +46,8 @@ from .region import (
46
46
  RegionAdvanced,
47
47
  RegionComponentAppearance,
48
48
  RegionImage,
49
- RegionSource
49
+ RegionSource,
50
+ RegionSettings
50
51
  )
51
52
  from .page import (
52
53
  Page,
@@ -13,12 +13,12 @@ class RegionLayout(ApexGroup):
13
13
  return self.properties.get('parentRegion', None)
14
14
 
15
15
  class RegionAppearance(ApexGroup):
16
- def __init__(self, initial_data={}):
17
- super().__init__(initial_data)
18
-
16
+ pass
19
17
 
20
18
  class RegionSource(ApexGroup):
21
- pass
19
+ @property
20
+ def list(self):
21
+ return self.properties.get('list', None)
22
22
 
23
23
 
24
24
  class RegionAdvanced(ApexGroup):
@@ -32,6 +32,10 @@ class RegionComponentAppearance(ApexGroup):
32
32
  class RegionImage(ApexGroup):
33
33
  pass
34
34
 
35
+ class RegionSettings(ApexGroup):
36
+ pass
37
+
38
+
35
39
  class Region(ApexObject):
36
40
  def __init__(self, component_id=None, initial_data={}):
37
41
  super().__init__(component_id, initial_data)
@@ -55,4 +59,13 @@ class Region(ApexObject):
55
59
  @property
56
60
  def appearance(self):
57
61
  return self.groups.get('appearance', RegionAppearance())
58
-
62
+
63
+ @property
64
+ def settings(self):
65
+ return self.groups.get('settings', RegionSettings())
66
+
67
+ @property
68
+ def source(self):
69
+ return self.groups.get('source', RegionSource())
70
+
71
+
@@ -10,7 +10,7 @@ from .visitor import ApxNodeVisitor
10
10
 
11
11
  class ApexParser:
12
12
  def __init__(self, apex_version : str ="26.1"):
13
- inp_file = impresources.files(python_oracle_apex) / f'apexlang-{apex_version}.peg'
13
+ inp_file = impresources.files(python_oracle_apex) / f'grammar-{apex_version}.peg'
14
14
  with inp_file.open("rt") as f:
15
15
  template = f.read()
16
16
 
@@ -17,8 +17,12 @@ class RegionVisitor:
17
17
  if type(item) is tuple:
18
18
  if type(item[1]) is dict:
19
19
  region.add_group(item[0], item[1])
20
+ elif isinstance(item[1], ApexGroup):
21
+ region.add_group(item[0], item[1])
20
22
  else:
21
23
  region.add_property(item[0], item[1])
24
+ elif isinstance(item, ApexObject):
25
+ region.add_child(item)
22
26
  elif item is None:
23
27
  # blanklines
24
28
  continue
@@ -171,7 +175,32 @@ class RegionVisitor:
171
175
  def visit_region_component_appearance_property(self, node, visited_children):
172
176
  v = visited_children[0]
173
177
  match v[0].text:
174
- case 'listTemplate' | 'templateOptions':
178
+ case 'listTemplate' :
175
179
  return (v[0].text, v[3])
180
+ case 'templateOptions':
181
+ return (v[0].text, v[3][0])
176
182
  case _:
177
183
  raise RuleNotImplemented()
184
+
185
+ def visit_region_settings(self, node, visited_children):
186
+ parts = visited_children[5]
187
+ d = {}
188
+ for item in parts:
189
+ if type(item) is tuple:
190
+ d[item[0]] = item[1]
191
+ else:
192
+ raise RuleNotImplemented()
193
+ return ('settings', RegionSettings(d))
194
+
195
+ def visit_region_settings_property_line(self, node, visited_children):
196
+ return visited_children[1]
197
+
198
+ def visit_region_csettings_property(self, node, visited_children):
199
+ v = visited_children[0]
200
+ match v[0].text:
201
+ # case 'listTemplate' :
202
+ # return (v[0].text, v[3])
203
+ # case 'templateOptions':
204
+ # return (v[0].text, v[3][0])
205
+ case _:
206
+ raise RuleNotImplemented()