75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2011 John Benediktsson
 | 
						|
! See http://factorcode.org/license.txt for BSD license
 | 
						|
 | 
						|
USING: accessors assocs colors.hex io io.encodings.utf8 io.files
 | 
						|
io.pathnames io.streams.string io.styles kernel locals see
 | 
						|
sequences splitting strings vocabs vocabs.loader words
 | 
						|
xmode.catalog xmode.marker ;
 | 
						|
 | 
						|
IN: xmode.highlight
 | 
						|
 | 
						|
<PRIVATE
 | 
						|
 | 
						|
CONSTANT: STYLES H{
 | 
						|
    { "NULL"     H{ { foreground HEXCOLOR: 000000 } } }
 | 
						|
    { "COMMENT1" H{ { foreground HEXCOLOR: cc0000 } } }
 | 
						|
    { "COMMENT2" H{ { foreground HEXCOLOR: ff8400 } } }
 | 
						|
    { "COMMENT3" H{ { foreground HEXCOLOR: 6600cc } } }
 | 
						|
    { "COMMENT4" H{ { foreground HEXCOLOR: cc6600 } } }
 | 
						|
    { "DIGIT"    H{ { foreground HEXCOLOR: ff0000 } } }
 | 
						|
    { "FUNCTION" H{ { foreground HEXCOLOR: 9966ff } } }
 | 
						|
    { "INVALID"  H{ { background HEXCOLOR: ffffcc }
 | 
						|
                    { foreground HEXCOLOR: ff0066 } } }
 | 
						|
    { "KEYWORD1" H{ { foreground HEXCOLOR: 006699 }
 | 
						|
                    { font-style bold } } }
 | 
						|
    { "KEYWORD2" H{ { foreground HEXCOLOR: 009966 }
 | 
						|
                    { font-style bold } } }
 | 
						|
    { "KEYWORD3" H{ { foreground HEXCOLOR: 0099ff }
 | 
						|
                    { font-style bold } } }
 | 
						|
    { "KEYWORD4" H{ { foreground HEXCOLOR: 66ccff }
 | 
						|
                    { font-style bold } } }
 | 
						|
    { "LABEL"    H{ { foreground HEXCOLOR: 02b902 } } }
 | 
						|
    { "LITERAL1" H{ { foreground HEXCOLOR: ff00cc } } }
 | 
						|
    { "LITERAL2" H{ { foreground HEXCOLOR: cc00cc } } }
 | 
						|
    { "LITERAL3" H{ { foreground HEXCOLOR: 9900cc } } }
 | 
						|
    { "LITERAL4" H{ { foreground HEXCOLOR: 6600cc } } }
 | 
						|
    { "MARKUP"   H{ { foreground HEXCOLOR: 0000ff } } }
 | 
						|
    { "OPERATOR" H{ { foreground HEXCOLOR: 000000 }
 | 
						|
                    { font-style bold } } }
 | 
						|
}
 | 
						|
 | 
						|
CONSTANT: BASE H{
 | 
						|
    { font-name "monospace" }
 | 
						|
}
 | 
						|
 | 
						|
PRIVATE>
 | 
						|
 | 
						|
: highlight-tokens ( tokens -- )
 | 
						|
    [
 | 
						|
        [ str>> ] [ id>> ] bi
 | 
						|
        [ name>> STYLES at BASE assoc-union ] [ BASE ] if*
 | 
						|
        format
 | 
						|
    ] each nl ;
 | 
						|
 | 
						|
: highlight-lines ( lines mode -- )
 | 
						|
    [ f ] 2dip load-mode [
 | 
						|
        tokenize-line highlight-tokens
 | 
						|
    ] curry each drop ;
 | 
						|
 | 
						|
GENERIC: highlight. ( obj -- )
 | 
						|
 | 
						|
M:: string highlight. ( path -- )
 | 
						|
    path utf8 file-lines [
 | 
						|
        path over first find-mode highlight-lines
 | 
						|
    ] unless-empty ;
 | 
						|
 | 
						|
M: pathname highlight.
 | 
						|
    string>> highlight. ;
 | 
						|
 | 
						|
M: vocab highlight.
 | 
						|
    vocab-source-path highlight. ;
 | 
						|
 | 
						|
M: word highlight.
 | 
						|
    [ see ] with-string-writer string-lines
 | 
						|
    "factor" highlight-lines ;
 |