@@ -268,16 +268,18 @@ class CaseAction:
268268 indent : int | None = None
269269 content : Optional [str | tuple [Region , int | None ]] = None
270270
271+ class LineFilter :
272+ pass
271273
272274@dataclass
273- class CaseStatement :
275+ class CaseStatement ( LineFilter ) :
274276 """Represents a CASE statement with when-then pairs and optional else"""
275277 cases : list [tuple [CaseWhen , CaseAction ]]
276278 else_action : Optional [CaseAction ] = None
277279
278280
279281@dataclass
280- class EdScript :
282+ class EdScript ( LineFilter ) :
281283 """Represents an ED script content"""
282284 script : str
283285
@@ -643,7 +645,7 @@ def parse_relative_indentation(self, node) -> int | None:
643645
644646 def parse_content (self , node ) -> str | tuple [Region , int | None ] | None :
645647 content = self .find_first_by_type (node .named_children , [
646- 'content_literal' , 'content_from_segment' , 'ed_stmt' , 'case_stmt '
648+ 'content_literal' , 'content_from_segment' , 'line_filter '
647649 ])
648650 if not content :
649651 return None
@@ -652,13 +654,27 @@ def parse_content(self, node) -> str | tuple[Region, int | None] | None:
652654 return self .parse_content_literal (content ) # str
653655 case 'content_from_segment' :
654656 return self .parse_content_from_segment_clause (content ) # tuple[Region, int]
655- case 'ed_stmt' :
656- return self .parse_ed_stmt (content ) # EdScript
657- case 'case_stmt' :
658- return self .parse_case_stmt (content ) # CaseStatement
657+ case 'line_filter' :
658+ return self .parse_line_filter (content )
659659 case _:
660660 raise ValueError (f"Invalid content type: { content .type } " )
661661
662+ def parse_line_filter (self , node ) -> LineFilter :
663+ node = node .named_children [0 ]
664+ match node .type :
665+ case 'ed_stmt' :
666+ return self .parse_ed_stmt (node ) # EdScript
667+ case 'case_stmt' :
668+ return self .parse_case_stmt (node ) # CaseStatement
669+
670+
671+ def parse_ed_stmt (self , node ) -> EdScript :
672+ """Parse an ED script statement"""
673+ ed_script = self .find_first_by_type (node .children , 'string' )
674+ if ed_script is None :
675+ raise ValueError ("No ED script found in ed_stmt" )
676+ return EdScript (script = self .parse_string (ed_script ))
677+
662678 def parse_case_stmt (self , node ) -> CaseStatement :
663679 """Parse a CASE statement"""
664680 cases = []
@@ -738,13 +754,6 @@ def parse_case_action(self, node) -> CaseAction:
738754
739755 return action
740756
741- def parse_ed_stmt (self , node ) -> EdScript :
742- """Parse an ED script statement"""
743- ed_script = self .find_first_by_type (node .children , 'string' )
744- if ed_script is None :
745- raise ValueError ("No ED script found in ed_stmt" )
746- return EdScript (script = self .parse_string (ed_script ))
747-
748757 def parse_singlefile_clause (self , node ):
749758 if node is None or node .type != 'singlefile_clause' :
750759 raise ValueError ("Expected singlefile_clause node" )
0 commit comments