71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Factor
		
	
	
		
		
			
		
	
	
			71 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Factor
		
	
	
| 
								 | 
							
								! Copyright (C) 2005, 2007 Slava Pestov.
							 | 
						||
| 
								 | 
							
								! See http://factorcode.org/license.txt for BSD license.x
							 | 
						||
| 
								 | 
							
								USING: arrays definitions generic assocs
							 | 
						||
| 
								 | 
							
								io kernel namespaces prettyprint prettyprint.sections
							 | 
						||
| 
								 | 
							
								sequences words inspector classes strings vocabs ;
							 | 
						||
| 
								 | 
							
								IN: help.topics
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TUPLE: link name ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								GENERIC: >link ( obj -- obj )
							 | 
						||
| 
								 | 
							
								M: link >link ;
							 | 
						||
| 
								 | 
							
								M: vocab-spec >link ;
							 | 
						||
| 
								 | 
							
								M: object >link link construct-boa ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								PREDICATE: link word-link link-name word? ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: link summary
							 | 
						||
| 
								 | 
							
								    [
							 | 
						||
| 
								 | 
							
								        "Link: " %
							 | 
						||
| 
								 | 
							
								        link-name dup word? [ summary ] [ unparse ] if %
							 | 
						||
| 
								 | 
							
								    ] "" make ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Help articles
							 | 
						||
| 
								 | 
							
								SYMBOL: articles
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								articles global [ H{ } assoc-like ] change-at
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								SYMBOL: article-xref
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								article-xref global [ H{ } assoc-like ] change-at
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								GENERIC: article-name ( topic -- string )
							 | 
						||
| 
								 | 
							
								GENERIC: article-parent ( topic -- parent )
							 | 
						||
| 
								 | 
							
								GENERIC: set-article-parent ( parent topic -- )
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TUPLE: article title content loc ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: <article> ( title content -- article )
							 | 
						||
| 
								 | 
							
								    f \ article construct-boa ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: article article-name article-title ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TUPLE: no-article name ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: no-article ( name -- * ) \ no-article construct-boa throw ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: no-article summary
							 | 
						||
| 
								 | 
							
								    drop "Help article does not exist" ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								: article ( name -- article )
							 | 
						||
| 
								 | 
							
								    dup articles get at* [ nip ] [ drop no-article ] if ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: object article-name article article-name ;
							 | 
						||
| 
								 | 
							
								M: object article-title article article-title ;
							 | 
						||
| 
								 | 
							
								M: object article-content article article-content ;
							 | 
						||
| 
								 | 
							
								M: object article-parent article-xref get at ;
							 | 
						||
| 
								 | 
							
								M: object set-article-parent article-xref get set-at ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								M: link article-name link-name article-name ;
							 | 
						||
| 
								 | 
							
								M: link article-title link-name article-title ;
							 | 
						||
| 
								 | 
							
								M: link article-content link-name article-content ;
							 | 
						||
| 
								 | 
							
								M: link article-parent link-name article-parent ;
							 | 
						||
| 
								 | 
							
								M: link set-article-parent link-name set-article-parent ;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								! Special case: f help
							 | 
						||
| 
								 | 
							
								M: f article-name drop \ f article-name ;
							 | 
						||
| 
								 | 
							
								M: f article-title drop \ f article-title ;
							 | 
						||
| 
								 | 
							
								M: f article-content drop \ f article-content ;
							 | 
						||
| 
								 | 
							
								M: f article-parent drop \ f article-parent ;
							 | 
						||
| 
								 | 
							
								M: f set-article-parent drop \ f set-article-parent ;
							 |