diff --git a/basis/vocabs/metadata/resources/resources-docs.factor b/basis/vocabs/metadata/resources/resources-docs.factor index a20775e937..cb3e53c670 100644 --- a/basis/vocabs/metadata/resources/resources-docs.factor +++ b/basis/vocabs/metadata/resources/resources-docs.factor @@ -1,7 +1,11 @@ ! (c)2010 Joe Groff bsd license -USING: help.markup help.syntax kernel ; +USING: help.markup help.syntax strings ; IN: vocabs.metadata.resources +HELP: copy-vocab-resources +{ $values { "dir" string } { "vocab" string } } +{ $description "Copies all the vocabs resource files to the given directory." } ; + HELP: expand-vocab-resource-files { $values { "vocab" "a vocabulary specifier" } { "resource-glob-strings" "a sequence of glob patterns" } diff --git a/basis/vocabs/metadata/resources/resources-tests.factor b/basis/vocabs/metadata/resources/resources-tests.factor index 96ff25a696..afb0d2ad73 100644 --- a/basis/vocabs/metadata/resources/resources-tests.factor +++ b/basis/vocabs/metadata/resources/resources-tests.factor @@ -1,18 +1,28 @@ ! (c)2010 Joe Groff bsd license -USING: sorting tools.test vocabs.metadata.resources ; +USING: arrays globs sorting tools.test vocabs.metadata.resources ; IN: vocabs.metadata.resources.tests +! filter-resources +{ { "hello.txt" } } [ + "*.txt" 1array { "hello.txt" } filter-resources +] unit-test + +! vocab-resource-files { { "bar" "bas" "foo" } } [ "vocabs.metadata.resources.test.1" vocab-resource-files natural-sort ] unit-test { { "bar.wtf" "foo.wtf" } } [ "vocabs.metadata.resources.test.2" vocab-resource-files natural-sort ] unit-test -{ { - "resource-dir" - "resource-dir/bar" - "resource-dir/bas" - "resource-dir/bas/zang" - "resource-dir/bas/zim" - "resource-dir/foo" -} } [ "vocabs.metadata.resources.test.3" vocab-resource-files natural-sort ] unit-test +{ + { + "resource-dir" + "resource-dir/bar" + "resource-dir/bas" + "resource-dir/bas/zang" + "resource-dir/bas/zim" + "resource-dir/foo" + } +} [ + "vocabs.metadata.resources.test.3" vocab-resource-files natural-sort +] unit-test diff --git a/basis/vocabs/metadata/resources/resources.factor b/basis/vocabs/metadata/resources/resources.factor index 4872068e58..635bd4cc3f 100644 --- a/basis/vocabs/metadata/resources/resources.factor +++ b/basis/vocabs/metadata/resources/resources.factor @@ -1,19 +1,10 @@ ! (c)2010 Joe Groff bsd license -USING: arrays fry globs io.directories io.directories.hierarchy -io.files.info io.pathnames kernel regexp sequences vocabs.loader -vocabs.metadata ; +USING: globs io.directories io.directories.hierarchy io.files.info +io.pathnames kernel regexp sequences vocabs.loader vocabs.metadata ; IN: vocabs.metadata.resources : vocab-dir-in-root ( vocab -- dir ) - [ find-vocab-root ] [ vocab-dir ] bi append-path ; + vocab-source-path parent-directory ; -: expand-vocab-resource-files ( vocab resource-glob-strings -- filenames ) - [ vocab-dir-in-root ] dip [ ] map '[ - _ filter-resources - [ (expand-vocab-resource) ] map concat - ] with-directory-tree-files ; +: expand-resource ( resource-path -- filenames ) + dup dup file-info directory? [ + dup directory-tree-files [ append-path ] with map + ] [ drop { } ] if swap prefix ; + +: filter-resources ( resource-globs vocab-files -- vocab-files' ) + [ swap [ matches? ] with any? ] with filter ; : vocab-resource-files ( vocab -- filenames ) - dup vocab-resources - [ drop f ] [ expand-vocab-resource-files ] if-empty ; + [ vocab-resources [ ] map ] [ vocab-dir-in-root ] bi + [ + filter-resources [ expand-resource ] map concat + ] with-directory-files ; : copy-vocab-resources ( dir vocab -- ) dup vocab-resource-files