/media/bill/PROJECTS/Qnial/code develop_test/symExtract_string IS OP str.txt #******************************* # symExtract_decisonTable IS - logic table of expressions (IS" included to put out with grep, actually is ":=") # flags = in_sym in_[chrs_symbols_HFLN,valid_unicode] in_paren # 02Jun2018 WWARNING: if symbol separated from parenthetical expression by blanks, the latter are not treated as arguments! symExtract_decisonTable := 2 2 2 reshape '(0 0 0) ; null ; ' '(0 0 1) ; write ''symExtract_string ; error with flags@2'' ; ' '(0 1 0) ; symNew := link symNew chr_new ; flags@0 := 1 ; ' '(0 1 1) ; write ''symExtract_string ; error with flags@2'' ; ' '(1 0 0) ; symList := link symList (solitary symNew) ; symNew := null ; flags@0 := 0 ; ' '(1 0 1) ; symNew := link symNew chr_new ; ' '(1 1 0) ; symNew := link symNew chr_new ; ' '(1 1 1) ; symNew := link symNew chr_new ; ' ; #******************************* # symExtract_string IS OP str - decides whether [normal, protected] lines are extracted, or if null is simply returned # 21May2018 missing checks on index for unicode stuff # 02Jun2018 WWARNING: if symbol separated from parenthetical expression by blanks, the latter are not treated as arguments! symExtractString_recurLevel := -1 ; symExtract_string IS OP str { LOCAL chr_code chr_code1 chr_code2 chr_code3 chr_new dim_flags flags i jump len n_paren symExStr_List symParenList symList symNew ; NONLOCAL chrs_symbols_HFLN chrs_stop_paren chrs_strt_paren symExtract_decisonTable symExtractString_recurLevel ; symExtractString_recurLevel := symExtractString_recurLevel + 1 ; %----------write link 'symExtractString_recurLevel: ' (string symExtractString_recurLevel) ; % ; %------------ ; %stops recursive callS ; IF (isstring str) THEN % ; symNew := '' ; symList := null ; dim_flags := gage shape shape symExtract_decisonTable ; flags := dim_flags reshape 0 ; n_paren := 0 ; len := gage shape str ; i := 0 ; % ; WHILE (i < len) DO chr_new jump := chrStr_get 1 i str ; IF (in_string chr_new chrs_blank) THEN flags@1 := 0 ; execute symExtract_decisonTable@(flags) ; ELSEIF (in chr_new chrs_symbols_HFLN) THEN flags@1 := 1 ; execute symExtract_decisonTable@(flags) ; ELSEIF (in_string chr_new chrs_strt_paren) THEN flags@1 := 0 ; IF (= 1 flags@0) THEN n_paren := n_paren + 1 ; flags@2 := 1 ; ENDIF ; execute symExtract_decisonTable@(flags) ; ELSEIF (in_string chr_new chrs_stop_paren) THEN flags@1 := 0 ; execute symExtract_decisonTable@(flags) ; IF (= 1 flags@0) THEN n_paren := n_paren - 1 ; IF (0 < n_paren) THEN flags@2 := 1 ; ELSE flags@2 := 0 ; ENDIF ; ENDIF ; ELSE % non-[chrs_blank,chrs_symbols_HFLN,chrs_[strt,stop]_paren] characters ; flags@1 := 0 ; execute symExtract_decisonTable@(flags) ; ENDIF ; i := i + jump + 1 ; ENDWHILE ; % ; %capture the symNew at the end of the line (if there is one) ; IF (= 1 flags@0) THEN symList := link symList (solitary symNew) ; ENDIF ; symParenList := syms_inParens symList ; symExStr_List := EACH symExtract_string symParenList ; symList := link symList (link symExStr_List) ; % ; %------------ ; %stops recursive calls ; ELSE symList := null ; %write link 'symExtractstring recurLevel null string input: ' (string symExtractString_recurLevel) ; ENDIF ; % ; symList }