REBOL [
    Title: "Checklister (HTML)"
    Date: 15-Sep-1999
    File: %checklist.r
    Usage: {
        Text indentation is used to determine the level of items
        in the list. Items that begin with a "+" are marked as
        done. Items that begin with a ";" are plain text
        comments.  An example text input file would be:

        item
            subitem 
            subitem
                subsubitem
        item
            subitem
            +subitem
            ;above subitem is done

        The first line of the file is used as the title.
    }
    Purpose: "Creates a checklist in HTML from a text file."
    library: [
        level: 'advanced 
        platform: none 
        type: none 
        domain: [cgi markup text-processing file-handling] 
        tested-under: none 
        support: none 
        license: none 
        see-also: none
    ]
]

html: make string! 10000
emit: func [data] [append html reduce data append html newline]
indent: func [level] [loop (level - 1) * 8 [append html " "]]

file: to-file ask "Filename? %"

outline: read file
file: head change clear find file "." ".html"

emit ""
emit 

parse/all outline [
    copy text to newline skip (emit [

text

now

]) any [ (level: 1 cmt: done: false) any [[4 " " | tab] (level: level + 1)] (if level = 1 [emit

]) [any " " [";" (cmt: true) | "+" (done: true)] | none] copy text to newline skip ( if text [ indent level emit either cmt [ [text
] ][ [ {} "[" pick "x_" done "] " text
] ] ] ) ] ] emit "
" write file html quit