| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! Copyright (C) 2005, 2007 Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: parser kernel namespaces sequences definitions io.files | 
					
						
							| 
									
										
										
										
											2007-11-25 04:33:46 -05:00
										 |  |  | inspector continuations tuples tools.crossref tools.browser  | 
					
						
							|  |  |  | io prettyprint source-files assocs vocabs vocabs.loader ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: editors | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: no-edit-hook ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-25 04:33:46 -05:00
										 |  |  | M: no-edit-hook summary | 
					
						
							|  |  |  |     drop "You must load one of the below vocabularies before using editor integration:" ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | SYMBOL: edit-hook | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-11-25 04:33:46 -05:00
										 |  |  | : available-editors ( -- seq )
 | 
					
						
							|  |  |  |     "editors" all-child-vocabs | 
					
						
							|  |  |  |     values concat [ vocab-name ] map ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : editor-restarts ( -- alist )
 | 
					
						
							|  |  |  |     available-editors | 
					
						
							|  |  |  |     [ "Load " over append swap ] { } map>assoc ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : no-edit-hook ( -- )
 | 
					
						
							|  |  |  |     \ no-edit-hook construct-empty | 
					
						
							|  |  |  |     editor-restarts throw-restarts
 | 
					
						
							|  |  |  |     require ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | : edit-location ( file line -- )
 | 
					
						
							| 
									
										
										
										
											2007-11-25 04:33:46 -05:00
										 |  |  |     edit-hook get [ | 
					
						
							|  |  |  |         >r >r ?resource-path r> r> call
 | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         no-edit-hook edit-location | 
					
						
							|  |  |  |     ] if* ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : edit ( defspec -- )
 | 
					
						
							|  |  |  |     where [ first2 edit-location ] when* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-24 18:40:28 -05:00
										 |  |  | : edit-vocab ( name -- )
 | 
					
						
							|  |  |  |     vocab-source-path 1 edit-location ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | : :edit ( -- )
 | 
					
						
							|  |  |  |     error get delegates [ parse-error? ] find-last nip [ | 
					
						
							|  |  |  |         dup parse-error-file source-file-path ?resource-path | 
					
						
							|  |  |  |         swap parse-error-line edit-location | 
					
						
							|  |  |  |     ] when* ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : fix ( word -- )
 | 
					
						
							|  |  |  |     "Fixing " write dup pprint " and all usages..." print nl
 | 
					
						
							| 
									
										
										
										
											2008-02-23 23:29:29 -05:00
										 |  |  |     dup usage swap add* [ | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |         "Editing " write dup .
 | 
					
						
							|  |  |  |         "RETURN moves on to the next usage, C+d stops." print
 | 
					
						
							|  |  |  |         flush
 | 
					
						
							|  |  |  |         edit | 
					
						
							|  |  |  |         readln
 | 
					
						
							|  |  |  |     ] all? drop ;
 |