# opencond.icn: Conditional scanning objects for template.icn #-- $ifndef __OPENCOND_ICN__ $define __OPENCOND_ICN__ $define OPEN_COND_REVISION "$Revision: 1.1 $" $define OPEN_COND_DATE "$Date: 1995/11/02 04:15:29 $" #================================================================ # Class OpenCond: Each instance encapsulates state associated # with the scanning of a conditional template construct such as # "%ifnext;...%end;" #---------------------------------------------------------------- # openCond := Open_Cond_New ( scan ) # [ returns a new condScan object with fields: # .lineNo := line number from the scan object # .pastElse := &null # ] #-- # Open_Cond_Else ( openCond ) # [ if openCond.pastElse is &null -> # openCond.pastElse := 1 # return &null # | else -> fail # ] #-- # Open_Cond_Line_No ( openCond ) [ returns openCond.lineNo ] #---------------------------------------------------------------- record openCondTag ( lineNo, # The line number of the "%ifwhatever;" token pastElse ) # True if we have seen an "%else;", otherwise &null # - - - O p e n _ C o n d _ N e w - - - procedure Open_Cond_New ( scan ) local openCond openCond := openCondTag ( ); openCond.lineNo := Scan_Line_Number ( scan ); openCond.pastElse := &null; return openCond end # --- Open_Cond_New --- # - - - O p e n _ C o n d _ E l s e - - - procedure Open_Cond_Else ( openCond ) if \ openCond.pastElse then fail; openCond.pastElse := 1; return; end # --- Open_Cond_Else --- # - - - O p e n _ C o n d _ L i n e _ N o - - - procedure Open_Cond_Line_No ( openCond ) return openCond.lineNo; end $endif