]> gitweb.factorcode.org Git - factor.git/blob - extra/multiline/multiline.factor
Merge branch 'master' of git://factorcode.org/git/factor
[factor.git] / extra / multiline / multiline.factor
1 ! Copyright (C) 2007 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: namespaces parser lexer kernel sequences words quotations math ;
4 IN: multiline
5
6 : next-line-text ( -- str )
7     lexer get dup next-line lexer-line-text ;
8
9 : (parse-here) ( -- )
10     next-line-text [
11         dup ";" =
12         [ drop lexer get next-line ]
13         [ % "\n" % (parse-here) ] if
14     ] [ ";" unexpected-eof ] if* ;
15
16 : parse-here ( -- str )
17     [ (parse-here) ] "" make but-last
18     lexer get next-line ;
19
20 : STRING:
21     CREATE-WORD
22     parse-here 1quotation define-inline ; parsing
23
24 : (parse-multiline-string) ( start-index end-text -- end-index )
25     lexer get lexer-line-text [
26         2dup start
27         [ rot dupd >r >r swap subseq % r> r> length + ] [
28             rot tail % "\n" % 0
29             lexer get next-line swap (parse-multiline-string)
30         ] if*
31     ] [ nip unexpected-eof ] if* ;
32
33 : parse-multiline-string ( end-text -- str )
34     [
35         lexer get lexer-column swap (parse-multiline-string)
36         lexer get set-lexer-column
37     ] "" make rest but-last ;
38
39 : <"
40     "\">" parse-multiline-string parsed ; parsing
41
42 : /* "*/" parse-multiline-string drop ; parsing