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,59 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'open-uri'
|
|
4
|
+
require 'zlib'
|
|
5
|
+
require 'set'
|
|
6
|
+
|
|
7
|
+
require 'webgen/source'
|
|
8
|
+
require 'webgen/path'
|
|
9
|
+
webgen_require 'archive/tar/minitar', 'archive-tar-minitar'
|
|
10
|
+
|
|
11
|
+
module Webgen
|
|
12
|
+
class Source
|
|
13
|
+
|
|
14
|
+
# This class is used to read source paths from a (gzipped) tar archive. The archive can be remote
|
|
15
|
+
# (http(s) or ftp) or local.
|
|
16
|
+
#
|
|
17
|
+
# For example, the following are all valid URIs:
|
|
18
|
+
# http://example.com/directory/file.tgz
|
|
19
|
+
# /home/test/my.tar.gz
|
|
20
|
+
# ftp://ftp.example.com/archives/archive.tar
|
|
21
|
+
#
|
|
22
|
+
class TarArchive
|
|
23
|
+
|
|
24
|
+
# The URI of the tar archive.
|
|
25
|
+
attr_reader :uri
|
|
26
|
+
|
|
27
|
+
# The glob (see File.fnmatch for details) that is used to specify which paths in the archive should
|
|
28
|
+
# be returned by #paths.
|
|
29
|
+
attr_reader :glob
|
|
30
|
+
|
|
31
|
+
# Create a new tar archive source for the URI string +uri+.
|
|
32
|
+
def initialize(website, uri, glob = '**/*')
|
|
33
|
+
@uri = uri
|
|
34
|
+
@glob = glob
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Return all paths in the tar archive available at #uri.
|
|
38
|
+
def paths
|
|
39
|
+
if !defined?(@paths)
|
|
40
|
+
stream = open(@uri)
|
|
41
|
+
stream = Zlib::GzipReader.new(stream) if @uri =~ /(\.tar\.gz|\.tgz)$/
|
|
42
|
+
Archive::Tar::Minitar::Input.open(stream) do |input|
|
|
43
|
+
@paths = input.collect do |entry|
|
|
44
|
+
path = entry.full_name
|
|
45
|
+
next unless File.fnmatch(@glob, path, File::FNM_DOTMATCH|File::FNM_CASEFOLD|File::FNM_PATHNAME)
|
|
46
|
+
path += '/' if entry.directory? && path[-1] != ?/
|
|
47
|
+
path = '/' + path unless path[0] == ?/
|
|
48
|
+
data = entry.read.to_s
|
|
49
|
+
Path.new(path, 'modified_at' => Time.at(entry.mtime)) {|mode| StringIO.new(data, mode) }
|
|
50
|
+
end.compact.to_set
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
@paths
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
data/lib/webgen/tag.rb
CHANGED
|
@@ -1,26 +1,257 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
|
+
require 'webgen/extension_manager'
|
|
4
|
+
require 'webgen/error'
|
|
5
|
+
require 'webgen/utils/tag_parser'
|
|
6
|
+
|
|
3
7
|
module Webgen
|
|
4
8
|
|
|
5
|
-
# Namespace for all
|
|
6
|
-
#
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
9
|
+
# Namespace for all webgen tags.
|
|
10
|
+
#
|
|
11
|
+
# == About
|
|
12
|
+
#
|
|
13
|
+
# A tag object is a webgen extension that handles specific webgen tags. webgen tags are used to
|
|
14
|
+
# add dynamic content to page and template files (or any other file for that matter) and are made
|
|
15
|
+
# for ease of use.
|
|
16
|
+
#
|
|
17
|
+
# == Implementing a tag
|
|
18
|
+
#
|
|
19
|
+
# A tag object only needs to respond to the method +call+ which needs to accept three parameters:
|
|
20
|
+
#
|
|
21
|
+
# [tag]: The name of the tag which should be processed (useful for tag objects which can process
|
|
22
|
+
# different tags).
|
|
23
|
+
#
|
|
24
|
+
# [body]: Holds the body value for the tag if any.
|
|
25
|
+
#
|
|
26
|
+
# [context]: Holds all relevant information for processing -- have a look at the Webgen::Context
|
|
27
|
+
# class to see what is available. The special key :config is set to an
|
|
28
|
+
# Webgen::Configuration object that should be used to retrieve configuration option
|
|
29
|
+
# values because the values might be changed due to options set directly via the tag
|
|
30
|
+
# syntax.
|
|
31
|
+
#
|
|
32
|
+
# The method has to return the result of the processing and, optionally, a boolean value
|
|
33
|
+
# specifying if the result should further be processed (ie. webgen tags replaced).
|
|
34
|
+
#
|
|
35
|
+
# This allows one to implement a tag object as a class with a class method called +call+. Or as a
|
|
36
|
+
# Proc object.
|
|
37
|
+
#
|
|
38
|
+
# The tag object has to be registered so that webgen knows about it, see #register for more
|
|
39
|
+
# information.
|
|
40
|
+
#
|
|
41
|
+
# == Tag options
|
|
42
|
+
#
|
|
43
|
+
# webgen tags allow the specification of options in the tag definition. When registering a tag,
|
|
44
|
+
# one can specify which options are mandatory, i.e. which options always have to be set directly
|
|
45
|
+
# for the tag. The value of the option :config_base for the #register method is used to resolve
|
|
46
|
+
# partially stated configuration entries.
|
|
47
|
+
#
|
|
48
|
+
# == Sample Tag
|
|
49
|
+
#
|
|
50
|
+
# Following is a simple tag class example which just reverses the body text and adds some
|
|
51
|
+
# information about the context to the result.
|
|
52
|
+
#
|
|
53
|
+
# class Reverser
|
|
54
|
+
#
|
|
55
|
+
# def self.call(tag, body, context)
|
|
56
|
+
# result = context[:config]['do_reverse'] ? body.reverse : body
|
|
57
|
+
# result << "Node: " << context.content_node.alcn << " (" << context.content_node['title'] << ")"
|
|
58
|
+
# result << "Reference node: " << context.ref_node.alcn
|
|
59
|
+
# result
|
|
60
|
+
# end
|
|
61
|
+
#
|
|
62
|
+
# end
|
|
63
|
+
#
|
|
64
|
+
# website.config.define_option('reverser.do_reverse', nil, 'Actually do reverse the text')
|
|
65
|
+
# website.ext.tag.register Reverser, :names => 'reverse', :mandatory => ['do_reverse']
|
|
66
|
+
#
|
|
67
|
+
class Tag
|
|
68
|
+
|
|
69
|
+
include Webgen::ExtensionManager
|
|
70
|
+
|
|
71
|
+
# Render the tag template for the given tag and return the result.
|
|
72
|
+
#
|
|
73
|
+
# The value of the configuration option 'tag.<TAG>.template' (where '<TAG>' is replaced with
|
|
74
|
+
# +tag+) is used as template path.
|
|
75
|
+
#
|
|
76
|
+
# If the template node cannot be found, an empty string is returned.
|
|
77
|
+
def self.render_tag_template(context, tag)
|
|
78
|
+
path = context[:config]["tag.#{tag}.template"]
|
|
79
|
+
template_node = context.ref_node.resolve(path, context.dest_node.lang, true)
|
|
80
|
+
if template_node
|
|
81
|
+
context.render_block(:name => "tag.#{tag}", :node => 'first',
|
|
82
|
+
:chain => [*template_node.template_chain, template_node, context.content_node])
|
|
83
|
+
else
|
|
84
|
+
''
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def initialize(website) # :nodoc:
|
|
90
|
+
super()
|
|
91
|
+
website.blackboard.add_listener(:website_initialized, self) do
|
|
92
|
+
@parser = Webgen::Utils::TagParser.new(website.config['tag.prefix'])
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
# Register a tag.
|
|
97
|
+
#
|
|
98
|
+
# The parameter +klass+ can either be a String containing the name of a class/module (which has
|
|
99
|
+
# to respond to :call) or an object that responds to :call. If the class is located under this
|
|
100
|
+
# namespace, only the class name without the hierarchy part is needed, otherwise the full
|
|
101
|
+
# class/module name including parent module/class names is needed.
|
|
102
|
+
#
|
|
103
|
+
# Instead of registering an object that responds to :call, you can also provide a block that
|
|
104
|
+
# processes a tag.
|
|
105
|
+
#
|
|
106
|
+
# === Options:
|
|
107
|
+
#
|
|
108
|
+
# [:names] The tag name or an array of tag names. If not set, it defaults to the lowercase
|
|
109
|
+
# version of the class name (without the hierarchy part).
|
|
110
|
+
#
|
|
111
|
+
# The name :default is used for specifying the default tag which is called if an
|
|
112
|
+
# unknown tag name is encountered.
|
|
113
|
+
#
|
|
114
|
+
# [:config_base] The configuration base, i.e. the part of a configuration option name that does
|
|
115
|
+
# not need to be specified. Defaults to the full class name without the Webgen
|
|
116
|
+
# module downcased and all "::" substituted with "." (e.g. Webgen::Tag::Menu →
|
|
117
|
+
# tag.menu). Needs to be specified when a block is used!
|
|
118
|
+
#
|
|
119
|
+
# [:mandatory] A list of configuration option names whose values always need to be provided. The
|
|
120
|
+
# first configuration option name is used as the default mandatory option (used
|
|
121
|
+
# when only a string is provided in the tag definition).
|
|
122
|
+
#
|
|
123
|
+
# === Examples:
|
|
124
|
+
#
|
|
125
|
+
# tag.register('Date') # registers Webgen::Tag::Date
|
|
126
|
+
#
|
|
127
|
+
# tag.register('::Date') # registers Date !!!
|
|
128
|
+
#
|
|
129
|
+
# tag.register('MyModule::Date', names: ['mydate', 'date'])
|
|
130
|
+
#
|
|
131
|
+
# tag.register('date', config_base: 'tag.date') do |tag, body, context|
|
|
132
|
+
# Time.now.strftime(param('tag.date.format'))
|
|
133
|
+
# end
|
|
134
|
+
#
|
|
135
|
+
def register(klass, options = {}, &block)
|
|
136
|
+
if block_given? && !options[:config_base]
|
|
137
|
+
raise ArgumentError, "The option :config_base needs to be specified when using a block"
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
names = [options.delete(:names)].flatten.compact
|
|
141
|
+
options[:name] = names.shift
|
|
142
|
+
name = do_register(klass, options, true, &block)
|
|
143
|
+
ext_data(name).mandatory = options[:mandatory] || []
|
|
144
|
+
ext_data(name).config_base = options[:config_base] ||
|
|
145
|
+
Webgen::Utils.snake_case(ext_data(name).object.to_s.gsub(/::/, '.').gsub(/^Webgen\./, ''))
|
|
146
|
+
ext_data(name).initialized = false
|
|
147
|
+
names.each {|n| @extensions[n.to_sym] = @extensions[name]}
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
# Process the +tag+ and return the result.
|
|
151
|
+
#
|
|
152
|
+
# The parameter +params+ (can be a Hash, a String or nil) needs to contain the parameters for
|
|
153
|
+
# the tag and +body+ is the optional body for the tag. +context+ needs to be a valid
|
|
154
|
+
# Webgen::Context object.
|
|
155
|
+
def call(tag, params, body, context)
|
|
156
|
+
result = ''
|
|
157
|
+
tdata = tag_data(tag, context)
|
|
158
|
+
if !tdata.nil?
|
|
159
|
+
context[:config] = create_config(tag, params, tdata, context)
|
|
160
|
+
result, process_output = tdata.object.call(tag, body, context)
|
|
161
|
+
result = context.website.ext.content_processor.call('tags', context.clone(:content => result)).content if process_output
|
|
162
|
+
else
|
|
163
|
+
raise Webgen::RenderError.new("No tag processor for '#{tag}' found", self.class.name,
|
|
164
|
+
context.dest_node, context.ref_node)
|
|
165
|
+
end
|
|
166
|
+
result
|
|
167
|
+
rescue Webgen::Error => e
|
|
168
|
+
e.path = context.dest_node if e.path.to_s.empty?
|
|
169
|
+
raise
|
|
170
|
+
rescue Exception => e
|
|
171
|
+
raise Webgen::RenderError.new(e, (tdata && tdata.object.respond_to?(:name) ? tdata.object.name : "tag '#{tag}'"),
|
|
172
|
+
context.dest_node, context.ref_node)
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# See Webgen::Utils::TagParser#replace_tags.
|
|
176
|
+
def replace_tags(str, &block) #:yields: tag_name, params, body
|
|
177
|
+
@parser.replace_tags(str, &block)
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
#######
|
|
181
|
+
private
|
|
182
|
+
#######
|
|
183
|
+
|
|
184
|
+
# Create the Webgen::Configuration object from the parameters and the given configuration
|
|
185
|
+
# base.
|
|
186
|
+
def create_config(tag, params, tdata, context)
|
|
187
|
+
values = case params
|
|
188
|
+
when Hash then values_from_hash(tag, params, tdata, context)
|
|
189
|
+
when String then values_from_string(tag, params, tdata, context)
|
|
190
|
+
when NilClass then {}
|
|
191
|
+
else
|
|
192
|
+
raise Webgen::RenderError.new("Invalid parameter type (#{params.class})",
|
|
193
|
+
self.class.name, context.dest_node, context.ref_node)
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
if !tdata.mandatory.all? {|k| values.has_key?(k)}
|
|
197
|
+
raise Webgen::RenderError.new("Not all mandatory parameters set", self.class.name, context.dest_node, context.ref_node)
|
|
198
|
+
end
|
|
199
|
+
config = context.website.config.dup
|
|
200
|
+
config.set_values(values)
|
|
201
|
+
config.freeze
|
|
202
|
+
config
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# Return a hash containing valid configuration options by taking key-value pairs from +params+.
|
|
206
|
+
def values_from_hash(tag, params, tdata, context)
|
|
207
|
+
result = {}
|
|
208
|
+
params.each do |key, value|
|
|
209
|
+
if context.website.config.option?(key)
|
|
210
|
+
result[key] = value
|
|
211
|
+
elsif context.website.config.option?(tdata.config_base + '.' + key)
|
|
212
|
+
result[tdata.config_base + '.' + key] = value
|
|
213
|
+
else
|
|
214
|
+
context.website.logger.warn do
|
|
215
|
+
["Invalid configuration option '#{key}' for tag '#{tag}' found in <#{context.ref_node}>",
|
|
216
|
+
"Remove the invalid key '#{key}' to fix the warning."]
|
|
217
|
+
end
|
|
218
|
+
end
|
|
219
|
+
end
|
|
220
|
+
result
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
# Return a hash containing valid configuration options by setting the default mandatory
|
|
224
|
+
# parameter for +tag+ to +str+.
|
|
225
|
+
def values_from_string(tag, str, tdata, context)
|
|
226
|
+
if tdata.mandatory.first.nil?
|
|
227
|
+
context.website.logger.error do
|
|
228
|
+
["No default mandatory option specified for tag '#{tag}' but set in <#{context.ref_node}>",
|
|
229
|
+
"Use the {key: value} syntax for assigning the value '#{str}' to the intended tag option!"]
|
|
230
|
+
end
|
|
231
|
+
{}
|
|
232
|
+
else
|
|
233
|
+
{tdata.mandatory.first => str}
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
# Return the tag data for +tag+ or +nil+ if +tag+ is unknown.
|
|
238
|
+
def tag_data(tag, context)
|
|
239
|
+
tdata = @extensions[tag.to_sym] || @extensions[:default]
|
|
240
|
+
if tdata && !tdata.initialized
|
|
241
|
+
tdata.object = resolve_class(tdata.object)
|
|
242
|
+
tdata.mandatory.each_with_index do |o, index|
|
|
243
|
+
next if context.website.config.option?(o)
|
|
244
|
+
o = tdata.config_base + '.' + o
|
|
245
|
+
if context.website.config.option?(o)
|
|
246
|
+
tdata.mandatory[index] = o
|
|
247
|
+
else
|
|
248
|
+
raise ArgumentError, "Invalid configuration option name '#{o}' specified as mandatory option for tag '#{tag}'"
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
tdata.initialized = true
|
|
252
|
+
end
|
|
253
|
+
tdata
|
|
254
|
+
end
|
|
24
255
|
|
|
25
256
|
end
|
|
26
257
|
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/tag'
|
|
4
|
+
|
|
5
|
+
module Webgen
|
|
6
|
+
class Tag
|
|
7
|
+
|
|
8
|
+
# Generates a breadcrumb trail for the page. Such a breadcrumb trail is especially useful when
|
|
9
|
+
# pages are in deep hierarchies of directories.
|
|
10
|
+
module BreadcrumbTrail
|
|
11
|
+
|
|
12
|
+
# Create the breadcrumb trail.
|
|
13
|
+
def self.call(tag, body, context)
|
|
14
|
+
options = {
|
|
15
|
+
:alcn => context.content_node.alcn,
|
|
16
|
+
:start_level => context[:config]['tag.breadcrumb_trail.start_level'],
|
|
17
|
+
:end_level => context[:config]['tag.breadcrumb_trail.end_level'],
|
|
18
|
+
:omit_dir_index => context[:config]['tag.breadcrumb_trail.omit_dir_index']
|
|
19
|
+
}
|
|
20
|
+
context.website.ext.item_tracker.add(context.dest_node, :nodes,
|
|
21
|
+
['Webgen::Tag::BreadcrumbTrail', 'nodes'], options, :meta_info)
|
|
22
|
+
|
|
23
|
+
context[:nodes] = nodes(context.website, options)
|
|
24
|
+
Webgen::Tag.render_tag_template(context, 'breadcrumb_trail')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
# Return the list of nodes that make up the breadcrumb trail of a node while respecting the
|
|
28
|
+
# parameters.
|
|
29
|
+
#
|
|
30
|
+
# The options hash needs to include the following keys:
|
|
31
|
+
#
|
|
32
|
+
# [:alcn]
|
|
33
|
+
# The alcn of the node for which the breadcrumb trail should be generated.
|
|
34
|
+
#
|
|
35
|
+
# [:start_level]
|
|
36
|
+
# The start level (an index into an array).
|
|
37
|
+
#
|
|
38
|
+
# [:end_level]
|
|
39
|
+
# The end level (an index into an array).
|
|
40
|
+
#
|
|
41
|
+
# [:omit_dir_index]
|
|
42
|
+
# If set, omits the last path component if it is a directory index.
|
|
43
|
+
#
|
|
44
|
+
def self.nodes(website, options)
|
|
45
|
+
node = website.tree[options[:alcn]]
|
|
46
|
+
nodes = []
|
|
47
|
+
omit_dir_index = if node.meta_info.has_key?('omit_dir_index')
|
|
48
|
+
node['omit_dir_index']
|
|
49
|
+
else
|
|
50
|
+
options[:omit_dir_index]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
node = node.parent if omit_dir_index && node.parent.proxy_node(node.lang) == node
|
|
54
|
+
|
|
55
|
+
until node == website.tree.dummy_root
|
|
56
|
+
nodes.unshift(node)
|
|
57
|
+
node = node.parent
|
|
58
|
+
end
|
|
59
|
+
nodes[options[:start_level]..options[:end_level]].to_a
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
end
|
|
65
|
+
end
|
data/lib/webgen/tag/coderay.rb
CHANGED
|
@@ -1,42 +1,39 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
class
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
options
|
|
3
|
+
webgen_require 'coderay'
|
|
4
|
+
|
|
5
|
+
module Webgen
|
|
6
|
+
class Tag
|
|
7
|
+
|
|
8
|
+
# Provides syntax highlighting via the +coderay+ library.
|
|
9
|
+
module Coderay
|
|
10
|
+
|
|
11
|
+
# Highlight the body of the block.
|
|
12
|
+
def self.call(tag, body, context)
|
|
13
|
+
config = context[:config]
|
|
14
|
+
|
|
15
|
+
options = {}
|
|
16
|
+
if config['tag.coderay.css'].to_s == 'other'
|
|
17
|
+
options[:css] = :class
|
|
18
|
+
elsif config['tag.coderay.css'].to_s == 'class'
|
|
19
|
+
options[:css] = :class
|
|
20
|
+
context.html_head.link_file(:css, '/stylesheets/coderay-default.css')
|
|
21
|
+
else
|
|
22
|
+
options[:css] = :style
|
|
23
|
+
end
|
|
24
|
+
options.merge!(:wrap => config['tag.coderay.wrap'].to_sym,
|
|
25
|
+
:line_numbers => (config['tag.coderay.line_numbers'] ? :inline : nil),
|
|
26
|
+
:line_number_start => config['tag.coderay.line_number_start'],
|
|
27
|
+
:tab_width => config['tag.coderay.tab_width'],
|
|
28
|
+
:bold_every => config['tag.coderay.bold_every'])
|
|
29
|
+
|
|
30
|
+
if config['tag.coderay.process_body']
|
|
31
|
+
body = context.website.ext.content_processor.call('tags', context.clone(:content => body)).content
|
|
32
|
+
end
|
|
33
|
+
CodeRay.scan(body, config['tag.coderay.lang'].to_sym).html(options)
|
|
25
34
|
end
|
|
26
|
-
|
|
27
|
-
:line_numbers => (param('tag.coderay.line_numbers') ? :inline : nil),
|
|
28
|
-
:line_number_start => param('tag.coderay.line_number_start'),
|
|
29
|
-
:tab_width => param('tag.coderay.tab_width'),
|
|
30
|
-
:bold_every => param('tag.coderay.bold_every'))
|
|
31
|
-
|
|
32
|
-
if param('tag.coderay.process_body')
|
|
33
|
-
body = website.blackboard.invoke(:content_processor, 'tags').call(context.clone(:content => body)).content
|
|
34
|
-
end
|
|
35
|
-
CodeRay.scan(body, param('tag.coderay.lang').to_sym).html(options)
|
|
36
|
-
rescue LoadError
|
|
37
|
-
raise Webgen::LoadError.new('coderay', self.class.name, context.dest_node, 'coderay')
|
|
35
|
+
|
|
38
36
|
end
|
|
39
37
|
|
|
40
38
|
end
|
|
41
|
-
|
|
42
39
|
end
|