| 
									
										
										
										
											2010-09-29 05:08:31 -04:00
										 |  |  | ! Copyright (C) 2010 Anton Gorenko. | 
					
						
							| 
									
										
										
										
											2010-05-09 13:21:12 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							| 
									
										
										
										
											2018-03-03 19:14:48 -05:00
										 |  |  | USING: accessors combinators environment | 
					
						
							|  |  |  | gobject-introspection.common gobject-introspection.ffi | 
					
						
							|  |  |  | gobject-introspection.loader gobject-introspection.types io | 
					
						
							|  |  |  | io.files io.pathnames kernel lexer locals make namespaces parser | 
					
						
							|  |  |  | sequences splitting summary vocabs vocabs.parser xdg xml ;
 | 
					
						
							| 
									
										
										
										
											2010-07-17 07:17:03 -04:00
										 |  |  | IN: gobject-introspection | 
					
						
							| 
									
										
										
										
											2010-05-09 13:21:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-09 04:37:48 -05:00
										 |  |  | ERROR: gir-not-found name paths ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: gir-not-found summary | 
					
						
							|  |  |  |     [ name>> "“" "” file not found on paths:\n" surround ] | 
					
						
							|  |  |  |     [ paths>> "\n" join ] bi
 | 
					
						
							|  |  |  |     "\n\nUse the existing path or declare GIR_DIRS environment variable" | 
					
						
							|  |  |  |     3append ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-29 05:08:31 -04:00
										 |  |  | <PRIVATE
 | 
					
						
							| 
									
										
										
										
											2010-05-09 13:21:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-09 04:37:48 -05:00
										 |  |  | : system-gir-dirs ( -- dirs )
 | 
					
						
							| 
									
										
										
										
											2018-03-03 19:13:23 -05:00
										 |  |  |     xdg-data-dirs [ "gir-1.0" append-path ] map ;
 | 
					
						
							| 
									
										
										
										
											2011-03-09 04:37:48 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | : custom-gir-dirs ( -- dirs )
 | 
					
						
							|  |  |  |     "GIR_DIRS" os-env ":" split ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-15 12:38:51 -04:00
										 |  |  | : current-vocab-path ( -- path )
 | 
					
						
							|  |  |  |     current-vocab vocab-name "." split "/" join vocab-path ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-09 04:37:48 -05:00
										 |  |  | : current-vocab-dirs ( -- dirs )
 | 
					
						
							|  |  |  |     [ | 
					
						
							| 
									
										
										
										
											2011-03-15 12:38:51 -04:00
										 |  |  |         current-vocab-path | 
					
						
							|  |  |  |         [ , ] [ "/ffi" ?tail [ , ] [ drop ] if ] bi
 | 
					
						
							| 
									
										
										
										
											2011-03-09 04:37:48 -05:00
										 |  |  |     ] { } make ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :: resolve-gir-path ( path -- path )
 | 
					
						
							|  |  |  |     path exists? | 
					
						
							|  |  |  |     [ path ] [ | 
					
						
							|  |  |  |         current-vocab-dirs custom-gir-dirs system-gir-dirs | 
					
						
							|  |  |  |         3append sift :> paths | 
					
						
							|  |  |  |         paths [ path append-path exists? ] find nip
 | 
					
						
							| 
									
										
										
										
											2015-08-13 19:13:05 -04:00
										 |  |  |         [ path append-path ] [ path paths gir-not-found ] if*
 | 
					
						
							| 
									
										
										
										
											2011-03-09 04:37:48 -05:00
										 |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : define-gir-vocab ( path -- )
 | 
					
						
							| 
									
										
										
										
											2011-08-30 12:42:18 -04:00
										 |  |  |     resolve-gir-path dup "Loading " write print
 | 
					
						
							| 
									
										
										
										
											2011-03-09 04:37:48 -05:00
										 |  |  |     file>xml xml>repository | 
					
						
							| 
									
										
										
										
											2010-05-09 13:21:12 -04:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2010-09-29 05:08:31 -04:00
										 |  |  |         [ namespace>> name>> current-namespace-name set-global ] | 
					
						
							|  |  |  |         [ def-ffi-repository ] | 
					
						
							| 
									
										
										
										
											2010-05-11 13:31:35 -04:00
										 |  |  |     } cleave
 | 
					
						
							| 
									
										
										
										
											2010-09-29 05:08:31 -04:00
										 |  |  |     V{ } clone implement-structs set-global ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PRIVATE>
 | 
					
						
							| 
									
										
										
										
											2010-05-09 13:21:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-27 16:20:07 -04:00
										 |  |  | SYNTAX: GIR: scan-token define-gir-vocab ;
 | 
					
						
							| 
									
										
										
										
											2010-05-11 13:31:35 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | SYNTAX: IMPLEMENT-STRUCTS: | 
					
						
							| 
									
										
										
										
											2010-07-25 12:18:32 -04:00
										 |  |  |     ";" parse-tokens | 
					
						
							|  |  |  |     implement-structs [ swap append! ] change-global ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-05 03:11:26 -05:00
										 |  |  | SYNTAX: FOREIGN-ATOMIC-TYPE: | 
					
						
							|  |  |  |     scan-token scan-object swap register-atomic-type ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-29 05:08:31 -04:00
										 |  |  | SYNTAX: FOREIGN-ENUM-TYPE: | 
					
						
							|  |  |  |     scan-token scan-object swap register-enum-type ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SYNTAX: FOREIGN-RECORD-TYPE: | 
					
						
							|  |  |  |     scan-token scan-object swap register-record-type ;
 |