1.1 --- a/moinformat/parsers/common.py Tue Jul 17 19:21:38 2018 +0200
1.2 +++ b/moinformat/parsers/common.py Tue Jul 17 22:38:53 2018 +0200
1.3 @@ -300,12 +300,28 @@
1.4
1.5 self.set_region(items, region)
1.6
1.7 - # Define a block to hold text and start parsing.
1.8 + # Parse inline and opaque regions.
1.9 +
1.10 + if not region.transparent:
1.11 + pattern_names = ["regionend"]
1.12 +
1.13 + # Define a block to hold text.
1.14 +
1.15 + else:
1.16 + self.new_block(region)
1.17 + pattern_names = self.region_pattern_names
1.18
1.19 - self.new_block(region)
1.20 + # Start parsing.
1.21 +
1.22 + if pattern_names:
1.23 + self.parse_region_details(region, pattern_names)
1.24
1.25 - if self.region_pattern_names:
1.26 - self.parse_region_details(region, self.region_pattern_names)
1.27 + # Reset the type if the region was not inline.
1.28 +
1.29 + if region.type == "inline":
1.30 + first = region.nodes and region.nodes[0]
1.31 + if first and isinstance(first, Text) and first.multiline():
1.32 + region.type = None
1.33
1.34 # Top-level parser handler methods.
1.35
1.36 @@ -331,23 +347,13 @@
1.37 Use configured parsers to parse 'region' based on its type.
1.38 """
1.39
1.40 - # Handle potentially inline regions.
1.41 -
1.42 - if region.type == "inline":
1.43 - self.parse_region_inline(region)
1.44 - return
1.45 -
1.46 # Find an appropriate parser given the type.
1.47
1.48 parser = self.get_parser(region.type)
1.49 -
1.50 - if parser:
1.51 - parser.parse_region_content(self.items, region)
1.52 -
1.53 - # Otherwise, treat the section as opaque.
1.54 -
1.55 - else:
1.56 - self.parse_region_opaque(region)
1.57 + if not parser:
1.58 + region.transparent = False
1.59 + parser = parser or self.get_parser("moin")
1.60 + parser.parse_region_content(self.items, region)
1.61
1.62 def parse_region_header(self, region):
1.63
1.64 @@ -358,27 +364,6 @@
1.65 if self.read_until(["header"], False) == "": # None means no header
1.66 region.type = self.match_group("args")
1.67
1.68 - def parse_region_opaque(self, region):
1.69 -
1.70 - "Parse the data to populate an opaque 'region'."
1.71 -
1.72 - region.transparent = False
1.73 - self.parse_region_details(region, ["regionend"])
1.74 -
1.75 - def parse_region_inline(self, region):
1.76 -
1.77 - "Parse the data to populate an inline 'region'."
1.78 -
1.79 - region.transparent = False
1.80 - self.parse_region_details(region, ["regionend"])
1.81 -
1.82 - # Reset the type if the region was not inline.
1.83 -
1.84 - if region.type == "inline":
1.85 - first = region.nodes and region.nodes[0]
1.86 - if first and isinstance(first, Text) and first.multiline():
1.87 - region.type = None
1.88 -
1.89 # Parsing utilities.
1.90
1.91 def parse_region_details(self, region, pattern_names, strict=False):