! Copyright (C) 2016 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: arrays assocs combinators combinators.short-circuit
-continuations io.encodings.utf8 io.files kernel make math
-math.order modern.paths modern.slices sequences sequences.extras
-sets splitting strings unicode vocabs.loader ;
+USING: accessors arrays assocs combinators combinators.extras
+combinators.short-circuit continuations io.encodings.utf8
+io.files kernel make math math.order modern.paths modern.slices
+sequences sequences.extras sets splitting strings unicode
+vocabs.loader ;
IN: modern
ERROR: string-expected-got-eof n string ;
: read-bracket ( n string slice -- n' string slice' ) CHAR: [ read-matched ;
: read-brace ( n string slice -- n' string slice' ) CHAR: { read-matched ;
: read-paren ( n string slice -- n' string slice' ) CHAR: ( read-matched ;
-: read-dquote-payload ( n string -- n' string )
+: advance-dquote-payload ( n string -- n' string )
over [
{ CHAR: \\ CHAR: \" } slice-til-separator-inclusive {
- { f [ drop ] }
+ { f [ to>> over string-expected-got-eof ] }
{ CHAR: \" [ drop ] }
- { CHAR: \\ [ drop next-char-from drop read-dquote-payload ] }
+ { CHAR: \\ [ drop take-char drop advance-dquote-payload ] }
} case
] [
string-expected-got-eof
] if ;
:: read-string ( n string tag -- n' string seq )
- n string read-dquote-payload drop :> n'
+ n string advance-dquote-payload drop :> n'
n' string
- n' [ n string string-expected-got-eof ] unless
+ tag
n n' 1 - string <slice>
- n' 1 - n' string <slice>
- tag -rot 3array ;
+ n' 1 - n' string <slice> 3array ;
: take-comment ( n string slice -- n' string comment )
2over ?nth CHAR: [ = [
{ [ dup section-open? ] [
[
matching-section-delimiter 1array lex-until
- ] keep swap unclip-last 3array
+ ] keep-1up unclip-last 3array
] }
! <foo/>
{ [ dup html-self-close? ] [
} cond ;
: read-acute ( n string slice -- n' string acute )
- [ matching-section-delimiter 1array lex-until ] keep swap unclip-last 3array ;
+ [ matching-section-delimiter 1array lex-until ] keep-1up unclip-last 3array ;
! Words like append! and suffix! are allowed for now.
: read-exclamation ( n string slice -- n' string obj )