|
Wil Baden 2000-04-04 2001-07-05
Quote in string and LEXEME
Double quote to get a single quote in S"."
Now the feature is loaded when needed, with names S"".""
LEXEME
LEXEMENEXT-STRING
http://home.earthlink.net/~neilbawd/
S"" ( "text" -- str len )
S"""""."" ( "text" -- )
.""""","" ( "text" -- )
,"""""NEXT-STRING ( "name" -- str len )
"Examples for NEXT-STRING
Hello ==> Hello
"Hello" ==> "Hello"
" Hello World" ==> Hello World
" ""Hello World""" ==> "Hello World"
" """ ==> "
: INCLUDE NEXT-STRING INCLUDED ;
Program Text 1 CREATE String-Pad 128 CHARS ALLOT
: Parse-for-Single-Quote ( "string<single-quote>" -- str len )
0 >R
SOURCE >IN @ /STRING ( src len)
BEGIN
OVER C@ [CHAR] " = NOT
ORIF OVER 1+ C@ [CHAR] " = THEN
WHILE
OVER C@ [CHAR] " = IF
1 /STRING 1 >IN +!
THEN
OVER C@ String-Pad R> DUP 1+ >R + C!
1 /STRING 1 >IN +!
REPEAT
2DROP 1 >IN +! ( )
String-Pad R> ( src len)
;
: S"" ( "string<single-quote>" -- str len )
Parse-for-Single-Quote ( str len)
STATE @ IF POSTPONE SLITERAL THEN
; IMMEDIATE
: ."" ( "string<single-quote>" -- )
POSTPONE S"" ( str len)
STATE @ IF POSTPONE TYPE
ELSE TYPE
THEN ; IMMEDIATE
: ,"" ( "string<single-quote>" -- )
POSTPONE S"" STRING, ; IMMEDIATE
: NEXT-STRING ( "string" -- str len )
PARSE-WORD ( str len)
2dup S"" """ COMPARE 0= IF
2DROP Parse-for-Single-Quote
THEN ;