webgen 0.5.17 → 1.0.0.beta1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/API.rdoc +143 -0
- data/AUTHORS +0 -1
- data/COPYING +17 -8
- data/ChangeLog +4456 -0
- data/GPL +623 -289
- data/README.md +71 -0
- data/Rakefile +87 -99
- data/VERSION +1 -1
- data/bin/webgen +1 -7
- data/data/webgen/basic_website_template/ext/init.rb +15 -0
- data/data/webgen/basic_website_template/webgen.config +18 -0
- data/data/webgen/bundle_template_files/README.md.erb +24 -0
- data/data/webgen/bundle_template_files/Rakefile.erb +36 -0
- data/data/webgen/bundle_template_files/info.yaml.erb +16 -0
- data/data/webgen/bundle_template_files/init.rb.erb +1 -0
- data/data/webgen/passive_sources/default.metainfo +32 -0
- data/data/webgen/passive_sources/stylesheets/coderay-default.css +109 -118
- data/data/webgen/passive_sources/templates/feed.template +62 -0
- data/data/webgen/passive_sources/templates/sitemap.template +3 -6
- data/data/webgen/passive_sources/templates/tag.template +42 -0
- data/data/webgen/website_bundles/default/README +2 -2
- data/lib/webgen/blackboard.rb +15 -51
- data/lib/webgen/bundle/built-in-show-changes/init.rb +54 -0
- data/lib/webgen/bundle/built-in/init.rb +366 -0
- data/lib/webgen/bundle_loader.rb +126 -0
- data/lib/webgen/cache.rb +9 -18
- data/lib/webgen/cli.rb +131 -58
- data/lib/webgen/cli/bundle_command.rb +30 -0
- data/lib/webgen/cli/create_bundle_command.rb +46 -0
- data/lib/webgen/cli/create_command.rb +48 -60
- data/lib/webgen/cli/generate_command.rb +25 -0
- data/lib/webgen/cli/install_bundle_command.rb +34 -0
- data/lib/webgen/cli/list_bundle_command.rb +108 -0
- data/lib/webgen/cli/logger.rb +45 -0
- data/lib/webgen/cli/show_command.rb +30 -0
- data/lib/webgen/cli/show_config_command.rb +63 -0
- data/lib/webgen/cli/show_dependencies_command.rb +103 -0
- data/lib/webgen/cli/show_extensions_command.rb +74 -0
- data/lib/webgen/cli/utils.rb +68 -95
- data/lib/webgen/configuration.rb +143 -105
- data/lib/webgen/content_processor.rb +160 -0
- data/lib/webgen/content_processor/blocks.rb +96 -0
- data/lib/webgen/content_processor/builder.rb +25 -0
- data/lib/webgen/content_processor/erb.rb +25 -0
- data/lib/webgen/content_processor/erubis.rb +31 -0
- data/lib/webgen/content_processor/fragments.rb +82 -0
- data/lib/webgen/content_processor/haml.rb +25 -0
- data/lib/webgen/content_processor/html_head.rb +157 -0
- data/lib/webgen/content_processor/kramdown.rb +49 -0
- data/lib/webgen/content_processor/maruku.rb +39 -0
- data/lib/webgen/content_processor/r_discount.rb +21 -0
- data/lib/webgen/content_processor/rdoc.rb +22 -0
- data/lib/webgen/content_processor/redcloth.rb +23 -0
- data/lib/webgen/content_processor/ruby.rb +20 -0
- data/lib/webgen/content_processor/sass.rb +145 -0
- data/lib/webgen/content_processor/scss.rb +23 -0
- data/lib/webgen/content_processor/tags.rb +30 -0
- data/lib/webgen/content_processor/tidy.rb +32 -0
- data/lib/webgen/content_processor/tikz.rb +116 -0
- data/lib/webgen/content_processor/xmllint.rb +31 -0
- data/lib/webgen/context.rb +57 -29
- data/lib/webgen/context/html_head.rb +60 -0
- data/lib/webgen/context/nodes.rb +32 -27
- data/lib/webgen/context/rendering.rb +39 -0
- data/lib/webgen/context/webgen_tags.rb +25 -0
- data/lib/webgen/core_ext.rb +25 -0
- data/lib/webgen/destination.rb +151 -0
- data/lib/webgen/destination/file_system.rb +62 -0
- data/lib/webgen/error.rb +59 -49
- data/lib/webgen/extension_manager.rb +121 -0
- data/lib/webgen/item_tracker.rb +237 -0
- data/lib/webgen/item_tracker/file.rb +39 -0
- data/lib/webgen/item_tracker/missing_node.rb +61 -0
- data/lib/webgen/item_tracker/node_content.rb +40 -0
- data/lib/webgen/item_tracker/node_meta_info.rb +53 -0
- data/lib/webgen/item_tracker/nodes.rb +92 -0
- data/lib/webgen/logger.rb +26 -82
- data/lib/webgen/node.rb +122 -367
- data/lib/webgen/node_finder.rb +336 -0
- data/lib/webgen/page.rb +48 -85
- data/lib/webgen/path.rb +218 -156
- data/lib/webgen/path_handler.rb +400 -0
- data/lib/webgen/path_handler/base.rb +220 -0
- data/lib/webgen/path_handler/copy.rb +78 -0
- data/lib/webgen/path_handler/directory.rb +21 -0
- data/lib/webgen/path_handler/feed.rb +82 -0
- data/lib/webgen/path_handler/meta_info.rb +84 -0
- data/lib/webgen/path_handler/page.rb +38 -0
- data/lib/webgen/path_handler/page_utils.rb +79 -0
- data/lib/webgen/path_handler/sitemap.rb +52 -0
- data/lib/webgen/path_handler/template.rb +96 -0
- data/lib/webgen/path_handler/virtual.rb +85 -0
- data/lib/webgen/{webgentask.rb → rake_task.rb} +31 -27
- data/lib/webgen/source.rb +106 -24
- data/lib/webgen/source/file_system.rb +41 -0
- data/lib/webgen/source/stacked.rb +49 -53
- data/lib/webgen/source/tar_archive.rb +59 -0
- data/lib/webgen/tag.rb +250 -19
- data/lib/webgen/tag/breadcrumb_trail.rb +65 -0
- data/lib/webgen/tag/coderay.rb +32 -35
- data/lib/webgen/tag/date.rb +9 -9
- data/lib/webgen/tag/execute_command.rb +31 -0
- data/lib/webgen/tag/include_file.rb +32 -0
- data/lib/webgen/tag/langbar.rb +31 -47
- data/lib/webgen/tag/link.rb +17 -18
- data/lib/webgen/tag/menu.rb +27 -189
- data/lib/webgen/tag/meta_info.rb +31 -0
- data/lib/webgen/tag/relocatable.rb +48 -39
- data/lib/webgen/tag/tikz.rb +24 -100
- data/lib/webgen/task.rb +99 -0
- data/lib/webgen/task/create_bundle.rb +73 -0
- data/lib/webgen/task/create_website.rb +94 -0
- data/lib/webgen/task/generate_website.rb +47 -0
- data/lib/webgen/test_helper.rb +183 -0
- data/lib/webgen/tree.rb +95 -46
- data/lib/webgen/utils.rb +39 -0
- data/lib/webgen/utils/external_command.rb +27 -0
- data/lib/webgen/utils/tag_parser.rb +124 -0
- data/lib/webgen/version.rb +1 -1
- data/lib/webgen/website.rb +134 -296
- data/setup.rb +1 -1
- data/test/test_documentation.rb +43 -0
- data/test/webgen/cli/test_logger.rb +41 -0
- data/test/{test_contentprocessor_blocks.rb → webgen/content_processor/test_blocks.rb} +30 -28
- data/test/webgen/content_processor/test_builder.rb +25 -0
- data/test/webgen/content_processor/test_erb.rb +21 -0
- data/test/webgen/content_processor/test_erubis.rb +33 -0
- data/test/webgen/content_processor/test_fragments.rb +96 -0
- data/test/webgen/content_processor/test_haml.rb +24 -0
- data/test/webgen/content_processor/test_html_head.rb +78 -0
- data/test/webgen/content_processor/test_kramdown.rb +49 -0
- data/test/webgen/content_processor/test_maruku.rb +30 -0
- data/test/webgen/content_processor/test_r_discount.rb +18 -0
- data/test/webgen/content_processor/test_rdoc.rb +18 -0
- data/test/webgen/content_processor/test_redcloth.rb +23 -0
- data/test/webgen/content_processor/test_ruby.rb +24 -0
- data/test/webgen/content_processor/test_sass.rb +44 -0
- data/test/webgen/content_processor/test_scss.rb +23 -0
- data/test/webgen/content_processor/test_tags.rb +44 -0
- data/test/webgen/content_processor/test_tidy.rb +31 -0
- data/test/webgen/content_processor/test_tikz.rb +33 -0
- data/test/webgen/content_processor/test_xmllint.rb +32 -0
- data/test/webgen/destination/test_file_system.rb +54 -0
- data/test/webgen/item_tracker/test_file.rb +31 -0
- data/test/webgen/item_tracker/test_missing_node.rb +70 -0
- data/test/webgen/item_tracker/test_node_content.rb +42 -0
- data/test/webgen/item_tracker/test_node_meta_info.rb +44 -0
- data/test/webgen/item_tracker/test_nodes.rb +61 -0
- data/test/webgen/path_handler/test_base.rb +153 -0
- data/test/webgen/path_handler/test_copy.rb +56 -0
- data/test/webgen/path_handler/test_feed.rb +85 -0
- data/test/webgen/path_handler/test_meta_info.rb +98 -0
- data/test/webgen/path_handler/test_page.rb +25 -0
- data/test/webgen/path_handler/test_page_utils.rb +59 -0
- data/test/webgen/path_handler/test_sitemap.rb +95 -0
- data/test/webgen/path_handler/test_template.rb +64 -0
- data/test/webgen/path_handler/test_virtual.rb +87 -0
- data/test/webgen/source/test_file_system.rb +51 -0
- data/test/webgen/source/test_stacked.rb +35 -0
- data/test/{test_source_tararchive.rb → webgen/source/test_tar_archive.rb} +10 -25
- data/test/webgen/tag/test_breadcrumb_trail.rb +66 -0
- data/test/webgen/tag/test_coderay.rb +34 -0
- data/test/webgen/tag/test_date.rb +18 -0
- data/test/webgen/tag/test_execute_command.rb +36 -0
- data/test/webgen/tag/test_include_file.rb +35 -0
- data/test/webgen/tag/test_langbar.rb +50 -0
- data/test/webgen/tag/test_link.rb +40 -0
- data/test/webgen/tag/test_menu.rb +61 -0
- data/test/webgen/tag/test_meta_info.rb +25 -0
- data/test/webgen/tag/test_relocatable.rb +50 -0
- data/test/webgen/tag/test_tikz.rb +41 -0
- data/test/webgen/task/test_create_website.rb +46 -0
- data/test/webgen/test_blackboard.rb +31 -0
- data/test/webgen/test_bundle_loader.rb +55 -0
- data/test/{test_cache.rb → webgen/test_cache.rb} +3 -15
- data/test/webgen/test_cli.rb +41 -0
- data/test/webgen/test_configuration.rb +131 -0
- data/test/webgen/test_content_processor.rb +86 -0
- data/test/webgen/test_context.rb +73 -0
- data/test/webgen/test_core_ext.rb +20 -0
- data/test/webgen/test_destination.rb +48 -0
- data/test/webgen/test_error.rb +121 -0
- data/test/webgen/test_extension_manager.rb +70 -0
- data/test/webgen/test_item_tracker.rb +106 -0
- data/test/{test_languages.rb → webgen/test_languages.rb} +4 -4
- data/test/webgen/test_logger.rb +46 -0
- data/test/webgen/test_node.rb +178 -0
- data/test/webgen/test_node_finder.rb +127 -0
- data/test/{test_page.rb → webgen/test_page.rb} +44 -48
- data/test/webgen/test_path.rb +271 -0
- data/test/{test_webgentask.rb → webgen/test_rake_task.rb} +4 -4
- data/test/webgen/test_source.rb +59 -0
- data/test/webgen/test_tag.rb +137 -0
- data/test/webgen/test_task.rb +40 -0
- data/test/webgen/test_tree.rb +147 -0
- data/test/webgen/test_utils.rb +16 -0
- data/test/webgen/test_website.rb +45 -0
- data/test/webgen/utils/test_tag_parser.rb +99 -0
- metadata +292 -344
- data/data/webgen/passive_sources/templates/atom_feed.template +0 -39
- data/data/webgen/passive_sources/templates/rss_feed.template +0 -28
- data/data/webgen/resources.yaml +0 -4
- data/data/webgen/webgui/app.rb +0 -11
- data/data/webgen/webgui/controller/main.rb +0 -135
- data/data/webgen/webgui/layout/default.xhtml +0 -40
- data/data/webgen/webgui/overrides/win32console.rb +0 -0
- data/data/webgen/webgui/public/css/jquery.autocomplete.css +0 -50
- data/data/webgen/webgui/public/css/ramaze_error.css +0 -90
- data/data/webgen/webgui/public/css/style.css +0 -55
- data/data/webgen/webgui/public/img/headerbg.jpg +0 -0
- data/data/webgen/webgui/public/img/webgen_logo.png +0 -0
- data/data/webgen/webgui/public/js/jquery.autocomplete.js +0 -15
- data/data/webgen/webgui/public/js/jquery.js +0 -32
- data/data/webgen/webgui/start.rb +0 -9
- data/data/webgen/webgui/view/create_website.xhtml +0 -14
- data/data/webgen/webgui/view/error.xhtml +0 -64
- data/data/webgen/webgui/view/index.xhtml +0 -22
- data/data/webgen/webgui/view/manage_website.xhtml +0 -18
- data/data/webgen/website_skeleton/README +0 -10
- data/data/webgen/website_skeleton/Rakefile +0 -69
- data/data/webgen/website_skeleton/config.yaml +0 -35
- data/data/webgen/website_skeleton/ext/init.rb +0 -10
- data/doc/contentprocessor.template +0 -11
- data/doc/contentprocessor/blocks.page +0 -129
- data/doc/contentprocessor/builder.page +0 -79
- data/doc/contentprocessor/erb.page +0 -60
- data/doc/contentprocessor/erubis.page +0 -46
- data/doc/contentprocessor/fragments.page +0 -26
- data/doc/contentprocessor/haml.page +0 -46
- data/doc/contentprocessor/head.page +0 -31
- data/doc/contentprocessor/kramdown.page +0 -49
- data/doc/contentprocessor/less.page +0 -34
- data/doc/contentprocessor/maruku.page +0 -44
- data/doc/contentprocessor/rdiscount.page +0 -37
- data/doc/contentprocessor/rdoc.page +0 -36
- data/doc/contentprocessor/redcloth.page +0 -41
- data/doc/contentprocessor/sass.page +0 -31
- data/doc/contentprocessor/scss.page +0 -39
- data/doc/contentprocessor/tags.page +0 -73
- data/doc/contentprocessor/tidy.page +0 -14
- data/doc/contentprocessor/xmllint.page +0 -14
- data/doc/extensions.metainfo +0 -29
- data/doc/extensions.page +0 -15
- data/doc/extensions.template +0 -17
- data/doc/faq.page +0 -222
- data/doc/getting_started.page +0 -135
- data/doc/index.page +0 -71
- data/doc/manual.page +0 -727
- data/doc/reference_configuration.page +0 -1254
- data/doc/reference_metainfo.page +0 -265
- data/doc/reference_website_styles.page +0 -32
- data/doc/source/filesystem.page +0 -41
- data/doc/source/tararchive.page +0 -40
- data/doc/sourcehandler.template +0 -23
- data/doc/sourcehandler/copy.page +0 -19
- data/doc/sourcehandler/directory.page +0 -27
- data/doc/sourcehandler/feed.page +0 -102
- data/doc/sourcehandler/metainfo.page +0 -48
- data/doc/sourcehandler/page.page +0 -14
- data/doc/sourcehandler/sitemap.page +0 -46
- data/doc/sourcehandler/template.page +0 -45
- data/doc/sourcehandler/virtual.page +0 -49
- data/doc/tag.template +0 -25
- data/doc/tag/breadcrumbtrail.page +0 -40
- data/doc/tag/coderay.page +0 -53
- data/doc/tag/date.page +0 -31
- data/doc/tag/executecommand.page +0 -26
- data/doc/tag/includefile.page +0 -32
- data/doc/tag/langbar.page +0 -47
- data/doc/tag/link.page +0 -44
- data/doc/tag/menu.page +0 -109
- data/doc/tag/metainfo.page +0 -29
- data/doc/tag/relocatable.page +0 -38
- data/doc/tag/sitemap.page +0 -31
- data/doc/tag/tikz.page +0 -159
- data/doc/upgrading.page +0 -138
- data/doc/webgen_page_format.page +0 -129
- data/doc/website_styles.metainfo +0 -8
- data/lib/webgen/cli/apply_command.rb +0 -66
- data/lib/webgen/cli/run_command.rb +0 -22
- data/lib/webgen/cli/webgui_command.rb +0 -68
- data/lib/webgen/common.rb +0 -27
- data/lib/webgen/common/sitemap.rb +0 -83
- data/lib/webgen/contentprocessor.rb +0 -117
- data/lib/webgen/contentprocessor/blocks.rb +0 -92
- data/lib/webgen/contentprocessor/builder.rb +0 -29
- data/lib/webgen/contentprocessor/erb.rb +0 -26
- data/lib/webgen/contentprocessor/erubis.rb +0 -39
- data/lib/webgen/contentprocessor/fragments.rb +0 -25
- data/lib/webgen/contentprocessor/haml.rb +0 -34
- data/lib/webgen/contentprocessor/head.rb +0 -128
- data/lib/webgen/contentprocessor/kramdown.rb +0 -27
- data/lib/webgen/contentprocessor/kramdown/html.rb +0 -36
- data/lib/webgen/contentprocessor/less.rb +0 -35
- data/lib/webgen/contentprocessor/maruku.rb +0 -36
- data/lib/webgen/contentprocessor/rdiscount.rb +0 -19
- data/lib/webgen/contentprocessor/rdoc.rb +0 -20
- data/lib/webgen/contentprocessor/redcloth.rb +0 -21
- data/lib/webgen/contentprocessor/sass.rb +0 -22
- data/lib/webgen/contentprocessor/scss.rb +0 -22
- data/lib/webgen/contentprocessor/tags.rb +0 -170
- data/lib/webgen/contentprocessor/tidy.rb +0 -38
- data/lib/webgen/contentprocessor/xmllint.rb +0 -37
- data/lib/webgen/context/render.rb +0 -32
- data/lib/webgen/context/tags.rb +0 -20
- data/lib/webgen/coreext.rb +0 -13
- data/lib/webgen/default_config.rb +0 -240
- data/lib/webgen/loggable.rb +0 -25
- data/lib/webgen/output.rb +0 -86
- data/lib/webgen/output/filesystem.rb +0 -69
- data/lib/webgen/source/filesystem.rb +0 -61
- data/lib/webgen/source/resource.rb +0 -45
- data/lib/webgen/source/tararchive.rb +0 -78
- data/lib/webgen/sourcehandler.rb +0 -275
- data/lib/webgen/sourcehandler/base.rb +0 -281
- data/lib/webgen/sourcehandler/copy.rb +0 -44
- data/lib/webgen/sourcehandler/directory.rb +0 -30
- data/lib/webgen/sourcehandler/feed.rb +0 -92
- data/lib/webgen/sourcehandler/fragment.rb +0 -70
- data/lib/webgen/sourcehandler/memory.rb +0 -42
- data/lib/webgen/sourcehandler/metainfo.rb +0 -128
- data/lib/webgen/sourcehandler/page.rb +0 -64
- data/lib/webgen/sourcehandler/sitemap.rb +0 -60
- data/lib/webgen/sourcehandler/template.rb +0 -66
- data/lib/webgen/sourcehandler/virtual.rb +0 -117
- data/lib/webgen/tag/base.rb +0 -170
- data/lib/webgen/tag/breadcrumbtrail.rb +0 -70
- data/lib/webgen/tag/executecommand.rb +0 -31
- data/lib/webgen/tag/includefile.rb +0 -42
- data/lib/webgen/tag/metainfo.rb +0 -27
- data/lib/webgen/tag/sitemap.rb +0 -41
- data/lib/webgen/websiteaccess.rb +0 -31
- data/lib/webgen/websitemanager.rb +0 -125
- data/misc/default.css +0 -403
- data/misc/default.template +0 -76
- data/misc/htmldoc.metainfo +0 -26
- data/misc/htmldoc.virtual +0 -17
- data/misc/images/arrow.gif +0 -0
- data/misc/images/error.png +0 -0
- data/misc/images/headerbg.jpg +0 -0
- data/misc/images/important.png +0 -0
- data/misc/images/information.png +0 -0
- data/misc/images/quote.gif +0 -0
- data/misc/images/warning.png +0 -0
- data/misc/logo.svg +0 -313
- data/misc/style.page +0 -33
- data/test/helper.rb +0 -61
- data/test/test_blackboard.rb +0 -60
- data/test/test_cli.rb +0 -119
- data/test/test_common_sitemap.rb +0 -58
- data/test/test_configuration.rb +0 -68
- data/test/test_contentprocessor.rb +0 -39
- data/test/test_contentprocessor_builder.rb +0 -41
- data/test/test_contentprocessor_erb.rb +0 -33
- data/test/test_contentprocessor_erubis.rb +0 -62
- data/test/test_contentprocessor_fragments.rb +0 -43
- data/test/test_contentprocessor_haml.rb +0 -39
- data/test/test_contentprocessor_head.rb +0 -96
- data/test/test_contentprocessor_kramdown.rb +0 -56
- data/test/test_contentprocessor_less.rb +0 -40
- data/test/test_contentprocessor_maruku.rb +0 -33
- data/test/test_contentprocessor_rdiscount.rb +0 -21
- data/test/test_contentprocessor_rdoc.rb +0 -22
- data/test/test_contentprocessor_redcloth.rb +0 -26
- data/test/test_contentprocessor_sass.rb +0 -28
- data/test/test_contentprocessor_scss.rb +0 -28
- data/test/test_contentprocessor_tags.rb +0 -122
- data/test/test_contentprocessor_tidy.rb +0 -34
- data/test/test_contentprocessor_xmllint.rb +0 -38
- data/test/test_context.rb +0 -81
- data/test/test_error.rb +0 -93
- data/test/test_loggable.rb +0 -32
- data/test/test_logger.rb +0 -94
- data/test/test_node.rb +0 -469
- data/test/test_output_filesystem.rb +0 -60
- data/test/test_path.rb +0 -241
- data/test/test_source_filesystem.rb +0 -76
- data/test/test_source_resource.rb +0 -28
- data/test/test_source_stacked.rb +0 -49
- data/test/test_sourcehandler_base.rb +0 -136
- data/test/test_sourcehandler_copy.rb +0 -47
- data/test/test_sourcehandler_directory.rb +0 -38
- data/test/test_sourcehandler_feed.rb +0 -88
- data/test/test_sourcehandler_fragment.rb +0 -70
- data/test/test_sourcehandler_main.rb +0 -39
- data/test/test_sourcehandler_memory.rb +0 -44
- data/test/test_sourcehandler_metainfo.rb +0 -127
- data/test/test_sourcehandler_page.rb +0 -73
- data/test/test_sourcehandler_sitemap.rb +0 -68
- data/test/test_sourcehandler_template.rb +0 -68
- data/test/test_sourcehandler_virtual.rb +0 -106
- data/test/test_tag_base.rb +0 -62
- data/test/test_tag_breadcrumbtrail.rb +0 -91
- data/test/test_tag_coderay.rb +0 -45
- data/test/test_tag_date.rb +0 -18
- data/test/test_tag_executecommand.rb +0 -41
- data/test/test_tag_includefile.rb +0 -50
- data/test/test_tag_langbar.rb +0 -71
- data/test/test_tag_link.rb +0 -70
- data/test/test_tag_menu.rb +0 -207
- data/test/test_tag_metainfo.rb +0 -26
- data/test/test_tag_relocatable.rb +0 -60
- data/test/test_tag_sitemap.rb +0 -47
- data/test/test_tag_tikz.rb +0 -69
- data/test/test_tree.rb +0 -70
- data/test/test_website.rb +0 -130
- data/test/test_websiteaccess.rb +0 -25
- data/test/test_websitemanager.rb +0 -65
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
require 'cgi'
|
|
3
|
+
|
|
4
|
+
module Webgen
|
|
5
|
+
class Tag
|
|
6
|
+
|
|
7
|
+
# Provides easy access to the meta information of a node.
|
|
8
|
+
module MetaInfo
|
|
9
|
+
|
|
10
|
+
# Treat +tag+ as a meta information key and return its value from the content node.
|
|
11
|
+
def self.call(tag, body, context)
|
|
12
|
+
output = ''
|
|
13
|
+
if tag == 'lang'
|
|
14
|
+
output = context.content_node.lang
|
|
15
|
+
elsif context.content_node[tag]
|
|
16
|
+
output = context.content_node[tag].to_s
|
|
17
|
+
output = CGI::escapeHTML(output) if context[:config]['tag.meta_info.escape_html']
|
|
18
|
+
else
|
|
19
|
+
context.website.logger.error do
|
|
20
|
+
["No meta info key '#{tag}' found in <#{context.content_node}> (referenced in <#{context.ref_node}>)",
|
|
21
|
+
"Add the meta info key '#{tag}' to <#{context.content_node}> or remove the" +
|
|
22
|
+
" reference in <#{context.ref_node}> to fix this error."]
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
output
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -2,49 +2,58 @@
|
|
|
2
2
|
|
|
3
3
|
require 'uri'
|
|
4
4
|
|
|
5
|
-
module Webgen
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
5
|
+
module Webgen
|
|
6
|
+
class Tag
|
|
7
|
+
|
|
8
|
+
# Makes a path relative.
|
|
9
|
+
#
|
|
10
|
+
# For example, you normally include a stylesheet in a template. If you specify the path name of
|
|
11
|
+
# the stylesheet directly, the reference to the stylesheet in the output file of a page file
|
|
12
|
+
# that is not in the same directory as the template would be invalid.
|
|
13
|
+
#
|
|
14
|
+
# By using the relocatable tag you ensure that the path stays valid.
|
|
15
|
+
module Relocatable
|
|
16
|
+
|
|
17
|
+
# Return the relativized path for the path provided in the tag definition.
|
|
18
|
+
def self.call(tag, body, context)
|
|
19
|
+
path = context[:config]['tag.relocatable.path']
|
|
20
|
+
result = ''
|
|
21
|
+
begin
|
|
22
|
+
result = (Webgen::Path.url(path, false).absolute? ? path : resolve_path(path, context))
|
|
23
|
+
rescue URI::InvalidURIError => e
|
|
24
|
+
context.website.logger.warn do
|
|
25
|
+
["Could not parse path '#{path}' for tag.relocatable in <#{context.ref_node}>",
|
|
26
|
+
e.message]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
result
|
|
26
30
|
end
|
|
27
|
-
result
|
|
28
|
-
end
|
|
29
31
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
32
|
+
# Resolve the path using the reference node and return the correct relative path from the
|
|
33
|
+
# destination node.
|
|
34
|
+
def self.resolve_path(path, context)
|
|
35
|
+
fragment = ''
|
|
36
|
+
|
|
37
|
+
if context[:config]['tag.relocatable.ignore_unknown_fragment']
|
|
38
|
+
file, *fragments = path.split('#')
|
|
39
|
+
fragment = '#' << fragments.join('#') unless fragments.empty?
|
|
40
|
+
dest_node = context.ref_node.resolve(file, context.dest_node.lang, true)
|
|
41
|
+
context.website.logger.vinfo do
|
|
42
|
+
"Ignoring unknown fragment part of path '#{path}' for tag.relocatable in <#{context.ref_node}>"
|
|
43
|
+
end if dest_node && fragment.length > 0
|
|
44
|
+
else
|
|
45
|
+
dest_node = context.ref_node.resolve(path, context.dest_node.lang, true)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
if dest_node
|
|
49
|
+
context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, dest_node.alcn)
|
|
50
|
+
context.dest_node.route_to(dest_node) + fragment
|
|
51
|
+
else
|
|
52
|
+
''
|
|
53
|
+
end
|
|
45
54
|
end
|
|
55
|
+
|
|
46
56
|
end
|
|
47
57
|
|
|
48
58
|
end
|
|
49
|
-
|
|
50
59
|
end
|
data/lib/webgen/tag/tikz.rb
CHANGED
|
@@ -1,116 +1,40 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
require '
|
|
4
|
-
require 'tempfile'
|
|
5
|
-
require 'fileutils'
|
|
3
|
+
require 'webgen/path'
|
|
6
4
|
|
|
7
|
-
module Webgen
|
|
5
|
+
module Webgen
|
|
6
|
+
class Tag
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
# This tag allows you to create and use complex graphics using the PGF/TikZ library of LaTeX. It
|
|
9
|
+
# uses Webgen::ContentProcessor::Tikz for doing the hard work.
|
|
10
|
+
module Tikz
|
|
12
11
|
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
# Create a graphic (i.e. an HTML img tag) from the commands in the body of the tag.
|
|
13
|
+
def self.call(tag, body, context)
|
|
14
|
+
path = Webgen::Path.append(context.ref_node.parent.alcn, context[:config]['tag.tikz.path'])
|
|
15
|
+
path = Webgen::Path.new(path)
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
\\nonstopmode \\documentclass{article} \\usepackage{tikz} \\pagestyle{empty}
|
|
18
|
-
<% if param('tag.tikz.libraries') %>
|
|
19
|
-
\\usetikzlibrary{<%= param('tag.tikz.libraries').join(',') %>}
|
|
20
|
-
<% end %>
|
|
21
|
-
\\begin{document}
|
|
22
|
-
<% if param('tag.tikz.opts') %>
|
|
23
|
-
\\begin{tikzpicture}[<%= param('tag.tikz.opts') %>]
|
|
24
|
-
<% else %>
|
|
25
|
-
\\begin{tikzpicture}
|
|
26
|
-
<% end %>
|
|
27
|
-
<%= body %>
|
|
28
|
-
\\end{tikzpicture}
|
|
29
|
-
\\end{document}
|
|
30
|
-
EOF
|
|
17
|
+
add_tikz_options!(path, context)
|
|
31
18
|
|
|
32
|
-
|
|
33
|
-
def call(tag, body, context)
|
|
34
|
-
path = param('tag.tikz.path')
|
|
35
|
-
path = Webgen::Path.make_absolute(context.ref_node.parent.alcn, path)
|
|
19
|
+
node = context.website.ext.path_handler.create_secondary_nodes(path, body, 'copy', context.ref_node.alcn).first
|
|
36
20
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
node = website.blackboard.invoke(:create_nodes, Webgen::Path.new(path, src_path), mem_handler) do |node_path|
|
|
43
|
-
mem_handler.create_node(node_path, context.ref_node.alcn) do |pic_node|
|
|
44
|
-
set_params(params)
|
|
45
|
-
document = ERB.new(LATEX_TEMPLATE).result(binding)
|
|
46
|
-
pic_path = compile(document, File.extname(path), context)
|
|
47
|
-
set_params(nil)
|
|
48
|
-
if pic_path
|
|
49
|
-
io = Webgen::Path::SourceIO.new { File.open(pic_path, 'rb') }
|
|
50
|
-
else
|
|
51
|
-
pic_node.flag(:dirty)
|
|
52
|
-
nil
|
|
53
|
-
end
|
|
54
|
-
end
|
|
55
|
-
end.first
|
|
56
|
-
attrs = {'alt' => ''}.merge(param('tag.tikz.img_attr')).collect {|name,value| "#{name.to_s}=\"#{value}\"" }.sort.unshift('').join(' ')
|
|
57
|
-
"<img src=\"#{context.dest_node.route_to(node)}\"#{attrs} />"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
#######
|
|
61
|
-
private
|
|
62
|
-
#######
|
|
63
|
-
|
|
64
|
-
# Compile the LaTeX +document+ and convert the resulting PDF to the correct output image format
|
|
65
|
-
# specified by +ext+ (the extension needs to include the dot).
|
|
66
|
-
def compile(document, ext, context)
|
|
67
|
-
file = Tempfile.new('webgen-tikz')
|
|
68
|
-
file.write(document)
|
|
69
|
-
file.close
|
|
70
|
-
|
|
71
|
-
FileUtils.mv(file.path, file.path + '.tex')
|
|
72
|
-
cmd_prefix = "cd #{File.dirname(file.path)}; "
|
|
73
|
-
output = `#{cmd_prefix} pdflatex --shell-escape -interaction=batchmode #{File.basename(file.path)}.tex`
|
|
74
|
-
if $?.exitstatus != 0
|
|
75
|
-
errors = output.scan(/^!(.*\n.*)/).join("\n")
|
|
76
|
-
raise Webgen::RenderError.new("Error while creating a TikZ picture: #{errors}",
|
|
77
|
-
self.class.name, context.dest_node, context.ref_node)
|
|
78
|
-
else
|
|
79
|
-
cmd = cmd_prefix + "pdfcrop #{File.basename(file.path)}.pdf #{File.basename(file.path)}.pdf; "
|
|
80
|
-
return unless run_command(cmd, context)
|
|
81
|
-
|
|
82
|
-
render_res, output_res = param('tag.tikz.resolution').split(' ')
|
|
83
|
-
if param('tag.tikz.transparent') && ext =~ /\.png/i
|
|
84
|
-
cmd = cmd_prefix +
|
|
85
|
-
"gs -dSAFER -dBATCH -dNOPAUSE -r#{render_res} -sDEVICE=pngalpha -dGraphicsAlphaBits=4 -dTextAlphaBits=4 " +
|
|
86
|
-
"-sOutputFile=#{File.basename(file.path)}#{ext} #{File.basename(file.path)}.pdf"
|
|
87
|
-
else
|
|
88
|
-
cmd = cmd_prefix + "convert -density #{render_res} #{File.basename(file.path)}.pdf #{File.basename(file.path)}#{ext}"
|
|
89
|
-
end
|
|
90
|
-
return unless run_command(cmd, context)
|
|
21
|
+
attrs = {'alt' => ''}.merge(context[:config]['tag.tikz.img_attr']).collect do |name, value|
|
|
22
|
+
"#{name.to_s}=\"#{value}\""
|
|
23
|
+
end.sort.unshift('').join(' ')
|
|
24
|
+
"<img src=\"#{context.dest_node.route_to(node)}\"#{attrs} />"
|
|
25
|
+
end
|
|
91
26
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
return unless run_command(cmd, context)
|
|
27
|
+
# Add all needed options for Webgen::ContentProcessor::Tikz to the given path.
|
|
28
|
+
def self.add_tikz_options!(path, context)
|
|
29
|
+
%w[content_processor.tikz.resolution content_processor.tikz.transparent
|
|
30
|
+
content_processor.tikz.libraries content_processor.tikz.opts].each do |opt|
|
|
31
|
+
path.meta_info[opt] = context[:config][opt]
|
|
98
32
|
end
|
|
99
|
-
|
|
33
|
+
path.meta_info['pipeline'] = 'tikz'
|
|
100
34
|
end
|
|
101
|
-
|
|
35
|
+
private_class_method :add_tikz_options!
|
|
102
36
|
|
|
103
|
-
# Runs the command +cmd+ and returns it's output if successful or +nil+ otherwise.
|
|
104
|
-
def run_command(cmd, context)
|
|
105
|
-
output = `#{cmd}`
|
|
106
|
-
if $?.exitstatus != 0
|
|
107
|
-
raise Webgen::RenderError.new("Error while running a command for a TikZ picture: #{output}",
|
|
108
|
-
self.class.name, context.dest_node, context.ref_node)
|
|
109
|
-
else
|
|
110
|
-
output
|
|
111
|
-
end
|
|
112
37
|
end
|
|
113
38
|
|
|
114
39
|
end
|
|
115
|
-
|
|
116
40
|
end
|
data/lib/webgen/task.rb
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/extension_manager'
|
|
4
|
+
|
|
5
|
+
module Webgen
|
|
6
|
+
|
|
7
|
+
# Namespace for all tasks.
|
|
8
|
+
#
|
|
9
|
+
# == About
|
|
10
|
+
#
|
|
11
|
+
# Tasks provide the main entrance point for doing things with a website, like creating it,
|
|
12
|
+
# generating it, and much more.
|
|
13
|
+
#
|
|
14
|
+
# == Implementing a task
|
|
15
|
+
#
|
|
16
|
+
# A task object only needs to respond to one method called +call+ which takes the website as first
|
|
17
|
+
# parameter and may take an arbitrary number of additional arguments. The method should return
|
|
18
|
+
# +true+ if the task was executed sucessfully or else +false+.
|
|
19
|
+
#
|
|
20
|
+
# Due to this there are basically two ways to implement a task since: Either as a class with a
|
|
21
|
+
# class method called +call+. Or as a Proc object.
|
|
22
|
+
#
|
|
23
|
+
# If the task needs to be configured to work correctly, use additional parameters or configuration
|
|
24
|
+
# options.
|
|
25
|
+
#
|
|
26
|
+
# The task has to be registered so that webgen knows about it, see #register for more information.
|
|
27
|
+
#
|
|
28
|
+
# == Sample Task
|
|
29
|
+
#
|
|
30
|
+
# The following sample task just outputs the value of its configuration option:
|
|
31
|
+
#
|
|
32
|
+
# class OutputTask
|
|
33
|
+
#
|
|
34
|
+
# def self.call(website, options)
|
|
35
|
+
# website.logger.vinfo("The output task configuration value follows")
|
|
36
|
+
# website.logger.info(website.config['task.output.option'])
|
|
37
|
+
# true
|
|
38
|
+
# end
|
|
39
|
+
#
|
|
40
|
+
# end
|
|
41
|
+
#
|
|
42
|
+
# website.config.define_option('task.output.option', nil, 'The configuration option')
|
|
43
|
+
# website.ext.task.register OutputTask, :name => 'output'
|
|
44
|
+
#
|
|
45
|
+
class Task
|
|
46
|
+
|
|
47
|
+
include Webgen::ExtensionManager
|
|
48
|
+
|
|
49
|
+
# Create a new task manager for the given website.
|
|
50
|
+
def initialize(website)
|
|
51
|
+
super()
|
|
52
|
+
@website = website
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Register a task.
|
|
56
|
+
#
|
|
57
|
+
# The parameter +klass+ can either be a String containing the name of a class/module (which has
|
|
58
|
+
# to respond to :call) or an object that responds to :call. If the class is located under this
|
|
59
|
+
# namespace, only the class name without the hierarchy part is needed, otherwise the full
|
|
60
|
+
# class/module name including parent module/class names is needed.
|
|
61
|
+
#
|
|
62
|
+
# Instead of registering an object that responds to :call, you can also provide a block.
|
|
63
|
+
#
|
|
64
|
+
# === Options:
|
|
65
|
+
#
|
|
66
|
+
# [:name] The name for the task. If not set, it defaults to the snake-case version of the class
|
|
67
|
+
# name (without the hierarchy part). It should only contain letters.
|
|
68
|
+
#
|
|
69
|
+
# [:data] Associates arbitrary data with the task object. This data can be retrieved using the
|
|
70
|
+
# #data method.
|
|
71
|
+
#
|
|
72
|
+
# === Examples:
|
|
73
|
+
#
|
|
74
|
+
# task.register('CreateWebsite') # registers Webgen::Task::CreateWebsite
|
|
75
|
+
#
|
|
76
|
+
# task.register('::CreateWebsite') # registers CreateWebsite !!!
|
|
77
|
+
#
|
|
78
|
+
# task.register('doit') do |website|
|
|
79
|
+
# # task commands go here
|
|
80
|
+
# end
|
|
81
|
+
#
|
|
82
|
+
def register(klass, options={}, &block)
|
|
83
|
+
name = do_register(klass, options, true, &block)
|
|
84
|
+
ext_data(name).data = options[:data]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Execute the task identified by the given name.
|
|
88
|
+
def execute(name, *options)
|
|
89
|
+
extension(name).call(@website, *options)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
# Return the task data for the given task.
|
|
93
|
+
def data(name)
|
|
94
|
+
ext_data(name).data
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/task'
|
|
4
|
+
require 'webgen/utils'
|
|
5
|
+
require 'fileutils'
|
|
6
|
+
|
|
7
|
+
module Webgen
|
|
8
|
+
class Task
|
|
9
|
+
|
|
10
|
+
# Creates an extension bundle.
|
|
11
|
+
#
|
|
12
|
+
# An extension bundle is a collection of webgen extensions. This task can either create a local
|
|
13
|
+
# bundle (in the +ext+ directory of the current website) or a bundle which can be distributed
|
|
14
|
+
# via Rubygems.
|
|
15
|
+
#
|
|
16
|
+
module CreateBundle
|
|
17
|
+
|
|
18
|
+
TEMPLATE_DIR = 'bundle_template_files'
|
|
19
|
+
|
|
20
|
+
# Create an extension bundle with the given name and of the given type (either :local or :gem).
|
|
21
|
+
#
|
|
22
|
+
# If the type is :gem, the directory in which the bundle should be created can optionally be
|
|
23
|
+
# specified.
|
|
24
|
+
#
|
|
25
|
+
# Returns +true+ if the bundle has been created.
|
|
26
|
+
def self.call(website, name, type, directory = name)
|
|
27
|
+
dir = if type == :gem
|
|
28
|
+
create_distribution_bundle(website, directory, name)
|
|
29
|
+
else
|
|
30
|
+
create_local_bundle(website, name)
|
|
31
|
+
end
|
|
32
|
+
website.logger.info { "Bundle '#{name}' of type '#{type}' created at <#{dir}>" }
|
|
33
|
+
|
|
34
|
+
true
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def self.create_distribution_bundle(website, directory, bundle_name) #:nodoc:
|
|
38
|
+
bundle_dir = File.join(directory, 'lib', 'webgen', 'bundle', bundle_name)
|
|
39
|
+
|
|
40
|
+
create_directory(directory)
|
|
41
|
+
create_directory(bundle_dir)
|
|
42
|
+
create_file(File.join(directory, 'Rakefile'), 'Rakefile.erb', bundle_name)
|
|
43
|
+
create_file(File.join(directory, 'README.md'), 'README.md.erb', bundle_name)
|
|
44
|
+
create_file(File.join(bundle_dir, 'info.yaml'), 'info.yaml.erb', bundle_name)
|
|
45
|
+
create_file(File.join(bundle_dir, 'init.rb'), 'init.rb.erb', bundle_name)
|
|
46
|
+
directory
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def self.create_local_bundle(website, bundle_name) #:nodoc:
|
|
50
|
+
bundle_dir = File.join(website.directory, 'ext', bundle_name)
|
|
51
|
+
|
|
52
|
+
create_directory(bundle_dir)
|
|
53
|
+
create_file(File.join(bundle_dir, 'info.yaml'), 'info.yaml.erb', bundle_name)
|
|
54
|
+
create_file(File.join(bundle_dir, 'init.rb'), 'init.rb.erb', bundle_name)
|
|
55
|
+
bundle_dir
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def self.create_directory(dir) #:nodoc:
|
|
59
|
+
raise "The directory '#{dir}' does already exist" if File.exist?(dir)
|
|
60
|
+
FileUtils.mkdir_p(dir)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def self.create_file(dest, source, bundle_name) #:nodoc:
|
|
64
|
+
File.open(dest, 'w+') do |f|
|
|
65
|
+
erb = ERB.new(File.read(File.join(Webgen::Utils.data_dir, TEMPLATE_DIR, source)))
|
|
66
|
+
f.write(erb.result(binding))
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/website'
|
|
4
|
+
require 'webgen/task'
|
|
5
|
+
require 'webgen/error'
|
|
6
|
+
require 'tmpdir'
|
|
7
|
+
|
|
8
|
+
module Webgen
|
|
9
|
+
class Task
|
|
10
|
+
|
|
11
|
+
#
|
|
12
|
+
# == About
|
|
13
|
+
#
|
|
14
|
+
# Creates the website.
|
|
15
|
+
#
|
|
16
|
+
# This task assumes that the website directory does not exist and populates it from a specified
|
|
17
|
+
# template. webgen extensions can provide additional website templates, see below.
|
|
18
|
+
#
|
|
19
|
+
# For each created file a verbose log message is recorded in the format used when webgen
|
|
20
|
+
# generates a website (because, actually, webgen's website generating facilities are used to
|
|
21
|
+
# create the website structure).
|
|
22
|
+
#
|
|
23
|
+
# == Creating a website template
|
|
24
|
+
#
|
|
25
|
+
# A website template is just a directory holding all the files necessary for a webgen website
|
|
26
|
+
# and therefore looks very similar to an actual webgen website directory. However, the template
|
|
27
|
+
# is not just copied but processed ('generated') by webgen itself.
|
|
28
|
+
#
|
|
29
|
+
# What this means is:
|
|
30
|
+
#
|
|
31
|
+
# * A Webgen::Website object is created for a temporary directory.
|
|
32
|
+
# * The 'destination' configuration option is set to the to-be-created website directory (ie. to
|
|
33
|
+
# Website#directory of the current website).
|
|
34
|
+
# * The 'sources' configuration option is set to use the website template directory.
|
|
35
|
+
# * All path handlers are deactivated except Webgen::PathHandler::Copy and the latter is used
|
|
36
|
+
# for processing all source paths.
|
|
37
|
+
#
|
|
38
|
+
# Thus one can use Erb or any other supported content processor to customize the generated
|
|
39
|
+
# files!
|
|
40
|
+
#
|
|
41
|
+
# Once a website template has been created, it needs to be registered with a template name, like
|
|
42
|
+
# this:
|
|
43
|
+
#
|
|
44
|
+
# website.ext.task.data(:create_website)[:templates][TEMPLATE_NAME] = ABSOLUTE_DIR_PATH
|
|
45
|
+
#
|
|
46
|
+
module CreateWebsite
|
|
47
|
+
|
|
48
|
+
# This error is raised when there is a problem creating the website.
|
|
49
|
+
class Error < Webgen::Error; end
|
|
50
|
+
|
|
51
|
+
# Create the website from the given template.
|
|
52
|
+
#
|
|
53
|
+
# This actually uses webgen's file copying/generating facilities to populate the website
|
|
54
|
+
# directory. Kind of bootstrapping really.
|
|
55
|
+
#
|
|
56
|
+
# Returns +true+ if the website has been created.
|
|
57
|
+
def self.call(website, template = nil)
|
|
58
|
+
if File.exists?(website.directory)
|
|
59
|
+
raise Error.new("Directory <#{website.directory}> does already exist!")
|
|
60
|
+
end
|
|
61
|
+
if template && !website.ext.task.data(:create_website)[:templates].has_key?(template)
|
|
62
|
+
raise Error.new("Unknown template '#{template}' specified!")
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
begin
|
|
66
|
+
Dir.mktmpdir do |tmpdir|
|
|
67
|
+
ws = Webgen::Website.new(tmpdir) do |ws|
|
|
68
|
+
ws.config['sources'] = [['/', :file_system, File.join(Webgen::Utils.data_dir, 'basic_website_template')]]
|
|
69
|
+
if template
|
|
70
|
+
ws.config['sources'] = [(['/', :file_system, website.ext.task.data(:create_website)[:templates][template]])]
|
|
71
|
+
end
|
|
72
|
+
ws.config['destination'] = [:file_system, File.expand_path(website.directory)]
|
|
73
|
+
ws.ext.path_handler.registered_extensions.each do |name, data|
|
|
74
|
+
data.patterns = []
|
|
75
|
+
end
|
|
76
|
+
ws.ext.path_handler.registered_extensions[:copy].patterns = ['**/*', '**/']
|
|
77
|
+
ws.logger.level = ::Logger::INFO
|
|
78
|
+
ws.logger.formatter = Proc.new do |severity, timestamp, progname, msg|
|
|
79
|
+
website.logger.vinfo(msg) if msg =~ /\[create\]/
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
ws.execute_task(:generate_website)
|
|
83
|
+
end
|
|
84
|
+
rescue Webgen::Error => e
|
|
85
|
+
raise Error.new("Could not create website from template: #{e.message}")
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
true
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
end
|