| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | ! Copyright (C) 2008 Doug Coleman. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2008-12-15 02:13:35 -05:00
										 |  |  | USING: assocs io.files io.pathnames io.directories | 
					
						
							|  |  |  | io.encodings.utf8 hashtables kernel namespaces sequences | 
					
						
							| 
									
										
										
										
											2010-02-19 19:25:26 -05:00
										 |  |  | vocabs.loader vocabs.metadata io combinators calendar accessors | 
					
						
							|  |  |  | math.parser io.streams.string ui.tools.operations quotations | 
					
						
							|  |  |  | strings arrays prettyprint words vocabs sorting sets classes | 
					
						
							| 
									
										
										
										
											2010-06-10 17:39:13 -04:00
										 |  |  | math alien urls splitting ascii combinators.short-circuit timers | 
					
						
							| 
									
										
										
										
											2010-02-19 19:25:26 -05:00
										 |  |  | words.symbol system summary ;
 | 
					
						
							| 
									
										
										
										
											2010-05-09 19:49:21 -04:00
										 |  |  | FROM: sets => members ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | IN: tools.scaffold | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: developer-name | 
					
						
							| 
									
										
										
										
											2008-09-03 21:08:39 -04:00
										 |  |  | SYMBOL: using | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | ERROR: not-a-vocab-root string ;
 | 
					
						
							| 
									
										
										
										
											2008-09-04 02:29:46 -04:00
										 |  |  | ERROR: vocab-name-contains-separator path ;
 | 
					
						
							|  |  |  | ERROR: vocab-name-contains-dot path ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-04 02:50:26 -04:00
										 |  |  | <PRIVATE
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:03:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-21 14:06:09 -04:00
										 |  |  | : vocab-root? ( string -- ? )
 | 
					
						
							|  |  |  |     trim-tail-separators | 
					
						
							|  |  |  |     vocab-roots get member? ;
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:03:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 16:23:54 -05:00
										 |  |  | : contains-dot? ( string -- ? ) ".." swap subseq? ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-01-29 23:19:07 -05:00
										 |  |  | : contains-separator? ( string -- ? ) [ path-separator? ] any? ;
 | 
					
						
							| 
									
										
										
										
											2008-10-21 22:03:37 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-18 00:24:41 -04:00
										 |  |  | : ensure-vocab-exists ( string -- string )
 | 
					
						
							|  |  |  |     dup vocabs member? [ no-vocab ] unless ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-02 16:23:54 -05:00
										 |  |  | : check-vocab-name ( string -- string )
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  |     [ ] | 
					
						
							|  |  |  |     [ contains-dot? [ vocab-name-contains-dot ] when ] | 
					
						
							|  |  |  |     [ contains-separator? [ vocab-name-contains-separator ] when ] tri ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  | : check-root ( string -- string )
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  |     dup vocab-root? [ not-a-vocab-root ] unless ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : check-vocab-root/vocab ( vocab-root string -- vocab-root string )
 | 
					
						
							|  |  |  |     [ check-root ] [ check-vocab-name ] bi* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : replace-vocab-separators ( vocab -- path )
 | 
					
						
							|  |  |  |     path-separator first CHAR: . associate substitute ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : vocab-root/vocab>path ( vocab-root vocab -- path )
 | 
					
						
							|  |  |  |     check-vocab-root/vocab | 
					
						
							|  |  |  |     [ ] [ replace-vocab-separators ] bi* append-path ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : vocab>path ( vocab -- path )
 | 
					
						
							|  |  |  |     check-vocab | 
					
						
							|  |  |  |     [ find-vocab-root ] keep vocab-root/vocab>path ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : vocab-root/vocab/file>path ( vocab-root vocab file -- path )
 | 
					
						
							|  |  |  |     [ vocab-root/vocab>path ] dip append-path ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : vocab-root/vocab/suffix>path ( vocab-root vocab suffix -- path )
 | 
					
						
							|  |  |  |     [ vocab-root/vocab>path dup file-name append-path ] dip append ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-21 06:34:08 -05:00
										 |  |  | : vocab/file>path ( vocab file -- path )
 | 
					
						
							|  |  |  |     [ vocab>path ] dip append-path ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : vocab/suffix>path ( vocab suffix -- path )
 | 
					
						
							|  |  |  |     [ vocab>path dup file-name append-path ] dip append ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | : directory-exists ( path -- )
 | 
					
						
							|  |  |  |     "Not creating a directory, it already exists: " write print ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : scaffold-directory ( vocab-root vocab -- )
 | 
					
						
							|  |  |  |     vocab-root/vocab>path | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     dup exists? [ directory-exists ] [ make-directories ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  | : not-scaffolding ( path -- path )
 | 
					
						
							|  |  |  |     "Not creating scaffolding for " write dup <pathname> . ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  | : scaffolding ( path -- path )
 | 
					
						
							|  |  |  |     "Creating scaffolding for " write dup <pathname> . ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : scaffolding? ( path -- path ? )
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  |     dup exists? [ not-scaffolding f ] [ scaffolding t ] if ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : scaffold-copyright ( -- )
 | 
					
						
							|  |  |  |     "! Copyright (C) " write now year>> number>string write
 | 
					
						
							|  |  |  |     developer-name get [ "Your name" ] unless* bl write "." print
 | 
					
						
							|  |  |  |     "! See http://factorcode.org/license.txt for BSD license." print ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  | : main-file-string ( vocab -- string )
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     [ | 
					
						
							|  |  |  |         scaffold-copyright | 
					
						
							|  |  |  |         "USING: ;" print
 | 
					
						
							|  |  |  |         "IN: " write print
 | 
					
						
							|  |  |  |     ] with-string-writer ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : set-scaffold-main-file ( vocab path -- )
 | 
					
						
							| 
									
										
										
										
											2010-02-22 23:39:45 -05:00
										 |  |  |     [ main-file-string 1array ] dip utf8 set-file-lines ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : scaffold-main ( vocab-root vocab -- )
 | 
					
						
							| 
									
										
										
										
											2009-11-05 18:03:24 -05:00
										 |  |  |     [ ".factor" vocab-root/vocab/suffix>path ] keep swap scaffolding? [ | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  |         set-scaffold-main-file | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         2drop
 | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-21 06:34:08 -05:00
										 |  |  | : scaffold-metadata ( vocab file contents -- )
 | 
					
						
							|  |  |  |     [ ensure-vocab-exists ] 2dip
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2010-02-22 23:39:45 -05:00
										 |  |  |         [ vocab/file>path ] dip 1array swap scaffolding? [ | 
					
						
							|  |  |  |             utf8 set-file-lines | 
					
						
							| 
									
										
										
										
											2009-04-29 20:06:06 -04:00
										 |  |  |         ] [ | 
					
						
							| 
									
										
										
										
											2010-02-21 06:34:08 -05:00
										 |  |  |             2drop
 | 
					
						
							| 
									
										
										
										
											2009-04-29 20:06:06 -04:00
										 |  |  |         ] if
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     ] [ | 
					
						
							| 
									
										
										
										
											2009-04-29 20:06:06 -04:00
										 |  |  |         2drop
 | 
					
						
							| 
									
										
										
										
											2010-02-21 06:34:08 -05:00
										 |  |  |     ] if* ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : lookup-type ( string -- object/string ? )
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  |     "new" ?head drop [ { [ CHAR: ' = ] [ digit? ] } 1|| ] trim-tail
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     H{ | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |         { "object" object } { "obj" object } | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  |         { "quot" quotation } | 
					
						
							|  |  |  |         { "string" string } | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |         { "str" string } | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |         { "hash" hashtable } | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |         { "hashtable" hashtable } | 
					
						
							| 
									
										
										
										
											2009-07-24 19:09:14 -04:00
										 |  |  |         { "?" boolean } | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |         { "ch" "a character" } | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |         { "word" word } | 
					
						
							|  |  |  |         { "array" array } | 
					
						
							| 
									
										
										
										
											2010-06-10 17:39:13 -04:00
										 |  |  |         { "timers" timer } | 
					
						
							| 
									
										
										
										
											2008-09-05 18:41:14 -04:00
										 |  |  |         { "duration" duration } | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |         { "path" "a pathname string" } | 
					
						
							|  |  |  |         { "vocab" "a vocabulary specifier" } | 
					
						
							|  |  |  |         { "vocab-root" "a vocabulary root string" } | 
					
						
							| 
									
										
										
										
											2008-09-05 18:41:14 -04:00
										 |  |  |         { "c-ptr" c-ptr } | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  |         { "seq" sequence } | 
					
						
							|  |  |  |         { "assoc" assoc } | 
					
						
							| 
									
										
										
										
											2008-09-05 18:41:14 -04:00
										 |  |  |         { "alist" "an array of key/value pairs" } | 
					
						
							|  |  |  |         { "keys" sequence } { "values" sequence } | 
					
						
							| 
									
										
										
										
											2008-09-08 10:28:30 -04:00
										 |  |  |         { "class" class } { "tuple" tuple } | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  |         { "url" url } | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     } at* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:08:39 -04:00
										 |  |  | : add-using ( object -- )
 | 
					
						
							| 
									
										
										
										
											2013-03-10 13:02:53 -04:00
										 |  |  |     vocabulary>> using get [ adjoin ] [ drop ] if* ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:08:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | : ($values.) ( array -- )
 | 
					
						
							| 
									
										
										
										
											2009-03-28 17:40:34 -04:00
										 |  |  |     [ bl ] [ | 
					
						
							| 
									
										
										
										
											2009-03-14 11:51:38 -04:00
										 |  |  |         "{ " write
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |         dup array? [ first ] when
 | 
					
						
							|  |  |  |         dup lookup-type [ | 
					
						
							|  |  |  |             [ unparse write bl ] | 
					
						
							| 
									
										
										
										
											2008-09-03 22:38:16 -04:00
										 |  |  |             [ [ pprint ] [ dup string? [ drop ] [ add-using ] if ] bi ] bi*
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |         ] [ | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |             drop unparse write bl null pprint | 
					
						
							|  |  |  |             null add-using | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |         ] if
 | 
					
						
							|  |  |  |         " }" write
 | 
					
						
							| 
									
										
										
										
											2009-03-28 17:40:34 -04:00
										 |  |  |     ] interleave ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  | : 4bl ( -- )
 | 
					
						
							|  |  |  |     "    " write ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-09 19:52:46 -04:00
										 |  |  | : ?print-nl ( seq1 seq2 -- )
 | 
					
						
							| 
									
										
										
										
											2010-08-02 20:50:59 -04:00
										 |  |  |     [ empty? ] either? [ nl ] unless ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | : $values. ( word -- )
 | 
					
						
							|  |  |  |     "declared-effect" word-prop [ | 
					
						
							|  |  |  |         [ in>> ] [ out>> ] bi
 | 
					
						
							| 
									
										
										
										
											2011-10-15 22:19:44 -04:00
										 |  |  |         2dup [ empty? ] both? [ | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |             2drop
 | 
					
						
							|  |  |  |         ] [ | 
					
						
							| 
									
										
										
										
											2010-05-09 19:49:21 -04:00
										 |  |  |             [ members ] dip over diff | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |             "{ $values" print
 | 
					
						
							| 
									
										
										
										
											2010-05-09 19:52:46 -04:00
										 |  |  |             [ drop 4bl ($values.) ] | 
					
						
							|  |  |  |             [ ?print-nl ] | 
					
						
							|  |  |  |             [ nip 4bl ($values.) ] 2tri
 | 
					
						
							| 
									
										
										
										
											2008-11-11 14:04:20 -05:00
										 |  |  |             nl "}" print
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:30:38 -04:00
										 |  |  |         ] if
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     ] when* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-14 11:36:24 -04:00
										 |  |  | : symbol-description. ( word -- )
 | 
					
						
							|  |  |  |     drop
 | 
					
						
							|  |  |  |     "{ $var-description \"\" } ;" print ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | : $description. ( word -- )
 | 
					
						
							|  |  |  |     drop
 | 
					
						
							| 
									
										
										
										
											2008-09-04 13:37:50 -04:00
										 |  |  |     "{ $description \"\" } ;" print ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-03-14 11:36:24 -04:00
										 |  |  | : docs-body. ( word/symbol -- )
 | 
					
						
							|  |  |  |     dup symbol? [ | 
					
						
							|  |  |  |         symbol-description. | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         [ $values. ] [ $description. ] bi
 | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : docs-header. ( word -- )
 | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  |     "HELP: " write name>> print ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 11:03:37 -05:00
										 |  |  | : (help.) ( word -- )
 | 
					
						
							| 
									
										
										
										
											2009-03-14 11:36:24 -04:00
										 |  |  |     [ docs-header. ] [ docs-body. ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-04 13:36:47 -04:00
										 |  |  | : interesting-words ( vocab -- array )
 | 
					
						
							|  |  |  |     words | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  |     [ { [ "help" word-prop ] [ predicate? ] } 1|| not ] filter
 | 
					
						
							| 
									
										
										
										
											2008-09-04 13:36:47 -04:00
										 |  |  |     natural-sort ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : interesting-words. ( vocab -- )
 | 
					
						
							| 
									
										
										
										
											2009-02-22 11:03:37 -05:00
										 |  |  |     interesting-words [ (help.) nl ] each ;
 | 
					
						
							| 
									
										
										
										
											2008-09-04 13:36:47 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : docs-file-string ( vocab -- str2 )
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2008-09-05 20:29:14 -04:00
										 |  |  |         { | 
					
						
							|  |  |  |             [ "IN: " write print nl ] | 
					
						
							|  |  |  |             [ interesting-words. ] | 
					
						
							| 
									
										
										
										
											2008-09-07 01:13:05 -04:00
										 |  |  |             [ | 
					
						
							|  |  |  |                 [ "ARTICLE: " write unparse dup write bl print ] | 
					
						
							|  |  |  |                 [ "{ $vocab-link " write pprint " }" print ] bi
 | 
					
						
							|  |  |  |                 ";" print nl
 | 
					
						
							|  |  |  |             ] | 
					
						
							| 
									
										
										
										
											2008-09-05 20:29:14 -04:00
										 |  |  |             [ "ABOUT: " write unparse print ] | 
					
						
							|  |  |  |         } cleave
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     ] with-string-writer ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  | : write-using ( vocab -- )
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:08:39 -04:00
										 |  |  |     "USING:" write
 | 
					
						
							| 
									
										
										
										
											2013-03-10 13:02:53 -04:00
										 |  |  |     using get members | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  |     { "help.markup" "help.syntax" } append natural-sort remove
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:08:39 -04:00
										 |  |  |     [ bl write ] each
 | 
					
						
							|  |  |  |     " ;" print ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : set-scaffold-docs-file ( vocab path -- )
 | 
					
						
							|  |  |  |     utf8 <file-writer> [ | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  |         scaffold-copyright | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  |         [ docs-file-string ] [ write-using ] bi
 | 
					
						
							| 
									
										
										
										
											2008-09-24 20:05:03 -04:00
										 |  |  |         write
 | 
					
						
							| 
									
										
										
										
											2008-09-03 21:08:39 -04:00
										 |  |  |     ] with-output-stream ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-04 01:43:18 -04:00
										 |  |  | : with-scaffold ( quot -- )
 | 
					
						
							| 
									
										
										
										
											2013-03-10 13:02:53 -04:00
										 |  |  |     [ HS{ } clone using ] dip with-variable ; inline
 | 
					
						
							| 
									
										
										
										
											2008-09-04 02:34:01 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-04 03:03:04 -04:00
										 |  |  | : link-vocab ( vocab -- )
 | 
					
						
							|  |  |  |     check-vocab | 
					
						
							|  |  |  |     "Edit documentation: " write
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  |     "-docs.factor" vocab/suffix>path <pathname> . ;
 | 
					
						
							| 
									
										
										
										
											2008-09-04 03:03:04 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:33:00 -05:00
										 |  |  | PRIVATE>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 11:03:37 -05:00
										 |  |  | : help. ( word -- )
 | 
					
						
							|  |  |  |     [ (help.) ] [ nl vocabulary>> link-vocab ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-07-27 18:24:30 -04:00
										 |  |  | : scaffold-docs ( vocab -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-18 00:24:41 -04:00
										 |  |  |     ensure-vocab-exists | 
					
						
							| 
									
										
										
										
											2008-09-04 01:43:18 -04:00
										 |  |  |     [ | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  |         dup "-docs.factor" vocab/suffix>path scaffolding? [ | 
					
						
							|  |  |  |             set-scaffold-docs-file | 
					
						
							|  |  |  |         ] [ | 
					
						
							|  |  |  |             2drop
 | 
					
						
							|  |  |  |         ] if
 | 
					
						
							| 
									
										
										
										
											2008-09-04 01:43:18 -04:00
										 |  |  |     ] with-scaffold ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : scaffold-undocumented ( string -- )
 | 
					
						
							| 
									
										
										
										
											2008-09-04 13:36:47 -04:00
										 |  |  |     [ interesting-words. ] [ link-vocab ] bi ;
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-21 06:34:08 -05:00
										 |  |  | : scaffold-authors ( vocab -- )
 | 
					
						
							|  |  |  |     "authors.txt" developer-name get scaffold-metadata ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : scaffold-tags ( vocab tags -- )
 | 
					
						
							|  |  |  |     [ "tags.txt" ] dip scaffold-metadata ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : scaffold-summary ( vocab summary -- )
 | 
					
						
							|  |  |  |     [ "summary.txt" ] dip scaffold-metadata ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-02-22 23:17:49 -05:00
										 |  |  | : scaffold-platforms ( vocab platforms -- )
 | 
					
						
							|  |  |  |     [ "platforms.txt" ] dip scaffold-metadata ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:33:00 -05:00
										 |  |  | : scaffold-vocab ( vocab-root string -- )
 | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  |         [ scaffold-directory ] | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |         [ scaffold-main ] | 
					
						
							| 
									
										
										
										
											2008-09-03 23:21:09 -04:00
										 |  |  |         [ nip require ] | 
					
						
							| 
									
										
										
										
											2010-02-21 06:34:08 -05:00
										 |  |  |         [ nip scaffold-authors ] | 
					
						
							| 
									
										
										
										
											2008-09-03 20:43:36 -04:00
										 |  |  |     } 2cleave ;
 | 
					
						
							| 
									
										
										
										
											2008-09-05 18:41:14 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-21 01:59:06 -04:00
										 |  |  | : scaffold-core ( string -- ) "resource:core" swap scaffold-vocab ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : scaffold-basis ( string -- ) "resource:basis" swap scaffold-vocab ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : scaffold-extra ( string -- ) "resource:extra" swap scaffold-vocab ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : scaffold-work ( string -- ) "resource:work" swap scaffold-vocab ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:33:00 -05:00
										 |  |  | <PRIVATE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : tests-file-string ( vocab -- string )
 | 
					
						
							|  |  |  |     [ | 
					
						
							|  |  |  |         scaffold-copyright | 
					
						
							|  |  |  |         "USING: tools.test " write dup write " ;" print
 | 
					
						
							|  |  |  |         "IN: " write write ".tests" print
 | 
					
						
							|  |  |  |     ] with-string-writer ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : set-scaffold-tests-file ( vocab path -- )
 | 
					
						
							|  |  |  |     [ tests-file-string ] dip utf8 set-file-contents ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:33:00 -05:00
										 |  |  | PRIVATE>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  | : scaffold-tests ( vocab -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-18 00:24:41 -04:00
										 |  |  |     ensure-vocab-exists | 
					
						
							| 
									
										
										
										
											2009-02-22 01:19:10 -05:00
										 |  |  |     dup "-tests.factor" vocab/suffix>path | 
					
						
							|  |  |  |     scaffolding? [ | 
					
						
							|  |  |  |         set-scaffold-tests-file | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         2drop
 | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-09-05 18:41:14 -04:00
										 |  |  | SYMBOL: examples-flag | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : example ( -- )
 | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         "{ $example \"\" \"USING: prettyprint ;\"" | 
					
						
							|  |  |  |         "           \"\"" | 
					
						
							|  |  |  |         "           \"\"" | 
					
						
							|  |  |  |         "}" | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  |     } [ examples-flag get [ 4bl ] when print ] each ;
 | 
					
						
							| 
									
										
										
										
											2008-09-05 18:41:14 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : examples ( n -- )
 | 
					
						
							|  |  |  |     t \ examples-flag [ | 
					
						
							|  |  |  |         "{ $examples " print
 | 
					
						
							|  |  |  |         [ example ] times
 | 
					
						
							|  |  |  |         "}" print
 | 
					
						
							|  |  |  |     ] with-variable ;
 | 
					
						
							| 
									
										
										
										
											2008-11-13 15:27:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-29 19:22:54 -04:00
										 |  |  | : touch. ( path -- )
 | 
					
						
							|  |  |  |     [ touch-file ] | 
					
						
							|  |  |  |     [ "Click to edit: " write <pathname> . ] bi ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-11-13 15:27:28 -05:00
										 |  |  | : scaffold-rc ( path -- )
 | 
					
						
							| 
									
										
										
										
											2009-04-29 19:22:54 -04:00
										 |  |  |     [ home ] dip append-path touch. ;
 | 
					
						
							| 
									
										
										
										
											2008-11-13 15:27:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-18 19:28:09 -04:00
										 |  |  | : scaffold-factor-boot-rc ( -- )
 | 
					
						
							| 
									
										
										
										
											2011-05-15 01:05:34 -04:00
										 |  |  |     ".factor-boot-rc" scaffold-rc ;
 | 
					
						
							| 
									
										
										
										
											2009-02-21 23:18:02 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-04-18 19:28:09 -04:00
										 |  |  | : scaffold-factor-rc ( -- )
 | 
					
						
							| 
									
										
										
										
											2011-05-15 01:05:34 -04:00
										 |  |  |     ".factor-rc" scaffold-rc ;
 | 
					
						
							| 
									
										
										
										
											2008-11-13 15:27:28 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-04-15 22:01:43 -04:00
										 |  |  | : scaffold-mason-rc ( -- )
 | 
					
						
							|  |  |  |     ".factor-mason-rc" scaffold-rc ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-29 02:03:41 -04:00
										 |  |  | : scaffold-factor-roots ( -- )
 | 
					
						
							|  |  |  |     ".factor-roots" scaffold-rc ;
 | 
					
						
							| 
									
										
										
										
											2009-04-29 19:22:54 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | HOOK: scaffold-emacs os ( -- )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: unix scaffold-emacs ( -- ) ".emacs" scaffold-rc ;
 |