help.html: simplify html by saving styles as classes.
We store the CSS classes in the HTML <style> tag.db4
							parent
							
								
									eaa65bc66f
								
							
						
					
					
						commit
						74d8e43312
					
				| 
						 | 
				
			
			@ -1,11 +1,13 @@
 | 
			
		|||
! Copyright (C) 2008, 2011 Slava Pestov.
 | 
			
		||||
! See http://factorcode.org/license.txt for BSD license.
 | 
			
		||||
USING: accessors arrays assocs debugger fry help help.home
 | 
			
		||||
help.topics help.vocabs html html.streams io.directories
 | 
			
		||||
io.encodings.binary io.encodings.utf8 io.files io.files.temp
 | 
			
		||||
io.pathnames kernel make math.parser memoize namespaces
 | 
			
		||||
sequences serialize splitting tools.completion vocabs
 | 
			
		||||
vocabs.hierarchy words xml.syntax xml.writer ;
 | 
			
		||||
USING: accessors arrays assocs combinators.short-circuit
 | 
			
		||||
debugger fry help help.home help.topics help.vocabs html
 | 
			
		||||
html.streams io.directories io.encodings.binary
 | 
			
		||||
io.encodings.utf8 io.files io.files.temp io.pathnames kernel
 | 
			
		||||
locals make math math.parser memoize namespaces sequences
 | 
			
		||||
sequences.deep serialize sorting splitting tools.completion
 | 
			
		||||
vocabs vocabs.hierarchy words xml.data xml.syntax xml.traversal
 | 
			
		||||
xml.writer ;
 | 
			
		||||
FROM: io.encodings.ascii => ascii ;
 | 
			
		||||
FROM: ascii => ascii? ;
 | 
			
		||||
IN: help.html
 | 
			
		||||
| 
						 | 
				
			
			@ -65,9 +67,9 @@ M: pathname url-of
 | 
			
		|||
        prepend
 | 
			
		||||
    ] [ drop f ] if ;
 | 
			
		||||
 | 
			
		||||
: help-stylesheet ( -- xml )
 | 
			
		||||
: help-stylesheet ( stylesheet -- xml )
 | 
			
		||||
    "vocab:help/html/stylesheet.css" ascii file-contents
 | 
			
		||||
    [XML <style><-></style> XML] ;
 | 
			
		||||
    swap "\n" glue [XML <style><-></style> XML] ;
 | 
			
		||||
 | 
			
		||||
: help-navbar ( -- xml )
 | 
			
		||||
    "conventions" >link topic>filename
 | 
			
		||||
| 
						 | 
				
			
			@ -84,15 +86,42 @@ M: pathname url-of
 | 
			
		|||
        </div>
 | 
			
		||||
     XML] ;
 | 
			
		||||
 | 
			
		||||
: bijective-base26 ( n -- name )
 | 
			
		||||
    [ dup 0 > ] [ 1 - 26 /mod CHAR: a + ] "" produce-as nip reverse! ;
 | 
			
		||||
 | 
			
		||||
: css-class ( style classes -- name )
 | 
			
		||||
    dup '[ drop _ assoc-size 1 + bijective-base26 ] cache ;
 | 
			
		||||
 | 
			
		||||
: css-classes ( classes -- stylesheet )
 | 
			
		||||
    [
 | 
			
		||||
        [ " { " " }" surround ] [ "." prepend ] bi* prepend
 | 
			
		||||
    ] { } assoc>map "\n" join ;
 | 
			
		||||
 | 
			
		||||
:: css-styles-to-classes ( body -- stylesheet body )
 | 
			
		||||
    H{ } clone :> classes
 | 
			
		||||
    body [
 | 
			
		||||
        dup xml-chunk? [
 | 
			
		||||
            seq>> [ tag? ] filter
 | 
			
		||||
            "span" "div" [ deep-tags-named ] bi-curry@ bi append
 | 
			
		||||
            [
 | 
			
		||||
                dup {
 | 
			
		||||
                    [ "style" attr ]
 | 
			
		||||
                    [ "class" attr not ]
 | 
			
		||||
                } 1&& [
 | 
			
		||||
                    attrs>> [ V{ } like ] change-alist
 | 
			
		||||
                    "style" over delete-at* drop classes css-class
 | 
			
		||||
                    "class" rot set-at
 | 
			
		||||
                ] [ drop ] if
 | 
			
		||||
            ] each
 | 
			
		||||
        ] [ drop ] if
 | 
			
		||||
    ] each classes sort-values css-classes body ;
 | 
			
		||||
 | 
			
		||||
: help>html ( topic -- xml )
 | 
			
		||||
    [ article-title " - Factor Documentation" append ]
 | 
			
		||||
    [ drop help-stylesheet ]
 | 
			
		||||
    [
 | 
			
		||||
        [ help-navbar ]
 | 
			
		||||
        [ [ print-topic ] with-html-writer ]
 | 
			
		||||
        bi* append
 | 
			
		||||
    ] tri
 | 
			
		||||
    simple-page ;
 | 
			
		||||
        [ print-topic ] with-html-writer css-styles-to-classes
 | 
			
		||||
        [ help-stylesheet ] [ help-navbar prepend ] bi*
 | 
			
		||||
    ] bi simple-page ;
 | 
			
		||||
 | 
			
		||||
: generate-help-file ( topic -- )
 | 
			
		||||
    dup topic>filename utf8 [ help>html write-xml ] with-file-writer ;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue