diff --git a/extra/modern/modern.factor b/extra/modern/modern.factor index b7bc19190a..5a45bb03b0 100644 --- a/extra/modern/modern.factor +++ b/extra/modern/modern.factor @@ -11,7 +11,6 @@ ERROR: string-expected-got-eof n string ; ERROR: long-opening-mismatch tag open n string ch ; SYMBOL: strict-upper - SYMBOL: delimiter-stack : push-delimiter-stack ( obj -- ) delimiter-stack get push ; : pop-delimiter-stack ( -- obj ) delimiter-stack get pop ; @@ -150,8 +149,18 @@ MACRO:: read-matched ( ch -- quot: ( n string tag -- n' string slice' ) ) merge-slice-til-whitespace ] if ; +: terminator? ( slice -- ? ) + { + [ ";" sequence= ] + } 1|| ; + +ERROR: token-expected n string obj ; +ERROR: unexpected-terminator n string slice ; : read-lowercase-colon ( n string slice -- n' string lowercase-colon ) - [ lex-factor ] dip swap 2array ; + [ + lex-factor dup [ token-expected ] unless + dup terminator? [ unexpected-terminator ] when + ] dip swap 2array ; : strict-upper? ( string -- ? ) [ { [ CHAR: A CHAR: Z between? ] [ ":-" member? ] } 1|| ] all? ; diff --git a/extra/modern/slices/slices.factor b/extra/modern/slices/slices.factor index 6ad44376d3..c0a250d5f1 100644 --- a/extra/modern/slices/slices.factor +++ b/extra/modern/slices/slices.factor @@ -95,7 +95,7 @@ ERROR: unexpected-end n string ; n string f f ] if ; inline -: skip-whitespace ( n string -- n' string ) +: skip-whitespace ( n/f string -- n'/f string ) slice-til-not-whitespace 2drop ; : empty-slice-end ( seq -- slice ) @@ -169,7 +169,7 @@ ERROR: unexpected-end n string ; [ [ 1 - ] change-to ] dip ] when ; -:: slice-til-either ( n string tokens -- n'/f string slice/f ch ) +:: slice-til-either ( n string tokens -- n'/f string slice/f ch/f ) n [ n string '[ tokens member? ] find-from dup "\s\r\n" member? [