diff --git a/basis/xmode/highlight/authors.txt b/basis/xmode/highlight/authors.txt new file mode 100644 index 0000000000..e091bb8164 --- /dev/null +++ b/basis/xmode/highlight/authors.txt @@ -0,0 +1 @@ +John Benediktsson diff --git a/basis/xmode/highlight/highlight-docs.factor b/basis/xmode/highlight/highlight-docs.factor new file mode 100644 index 0000000000..06d6da45b0 --- /dev/null +++ b/basis/xmode/highlight/highlight-docs.factor @@ -0,0 +1,27 @@ +! Copyright (C) 2011 John Benediktsson +! See http://factorcode.org/license.txt for BSD license + +USING: help.markup help.syntax sequences strings xmode.catalog +xmode.highlight xmode.tokens ; + +IN: xmode.highlight + +HELP: highlight-tokens +{ $values { "tokens" sequence } } +{ $description + "Highlight a sequence of " { $link token } " objects." +} ; + +HELP: highlight-lines +{ $values { "lines" sequence } { "mode" string } } +{ $description + "Highlight lines of code, according to the specified " { $link mode } + "." +} ; + +HELP: highlight. +{ $values { "path" string } } +{ $description + "Highlight and print code from the specified file (represented by " + { $snippet "path" } "). The mode is determined using the file extension." +} ; diff --git a/basis/xmode/highlight/highlight.factor b/basis/xmode/highlight/highlight.factor new file mode 100644 index 0000000000..208abdefcb --- /dev/null +++ b/basis/xmode/highlight/highlight.factor @@ -0,0 +1,61 @@ +! 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.styles kernel locals math math.parser namespaces sequences +xmode.catalog xmode.marker ; + +IN: xmode.highlight + + + +: highlight-tokens ( tokens -- ) + [ + [ str>> ] [ id>> ] bi + [ name>> STYLES at ] [ f ] if* BASE assoc-union + format + ] each nl ; + +: highlight-lines ( lines mode -- ) + [ f ] 2dip load-mode [ + tokenize-line highlight-tokens + ] curry each drop ; + +:: highlight. ( path -- ) + path utf8 file-lines [ + path over first find-mode highlight-lines + ] unless-empty ; diff --git a/basis/xmode/highlight/summary.txt b/basis/xmode/highlight/summary.txt new file mode 100644 index 0000000000..8cb354daed --- /dev/null +++ b/basis/xmode/highlight/summary.txt @@ -0,0 +1 @@ +Syntax highlighting tool diff --git a/extra/websites/factorcode/examples.txt b/extra/websites/factorcode/examples.txt index 420035c5fb..15c77e071c 100644 --- a/extra/websites/factorcode/examples.txt +++ b/extra/websites/factorcode/examples.txt @@ -46,8 +46,8 @@ set-file-lines USING: sequences xml.syntax xml.writer ; { "three" "blind" "mice" } -[ [XML <li><-></li> XML] ] map -[XML <ul><-></ul> XML] +[ [XML
  • <->
  • XML] ] map +[XML XML] pprint-xml ---- USING: inspector io.files.info io.pathnames system tools.files ; diff --git a/extra/websites/factorcode/index.fhtml b/extra/websites/factorcode/index.fhtml index ab901eaaff..cc65dbd509 100644 --- a/extra/websites/factorcode/index.fhtml +++ b/extra/websites/factorcode/index.fhtml @@ -1,7 +1,7 @@ <% USING: namespaces http.client kernel io.files splitting random io io.encodings.utf8 sequences webapps.mason.version.data webapps.mason.backend webapps.mason.grids webapps.mason.downloads -webapps.mason.utils html.elements accessors -xml.writer ; %> +webapps.mason.utils html.elements html.streams accessors +xml.writer xmode.highlight ; %> @@ -45,12 +45,12 @@ xml.writer ; %>

    Factor belongs to the family of concatenative languages: this means that, at the lowest level, a Factor program is a series of words (functions) that manipulate a stack of references to dynamically-typed values. This gives the language a powerful foundation which allows many abstractions and paradigms to be built on top. Reload this page to see a random code example below.

    -
    -<%
    +
    <%
     "resource:extra/websites/factorcode/examples.txt" utf8 file-lines
    -{ "----" } split random "\n" join write
    -%>
    -
    +{ "----" } split random +"factor" [ highlight-lines ] with-html-writer +[ xml>string write ] each +%>

    See the example programs page on the wiki for more.