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,157 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'erb'
|
|
4
|
+
|
|
5
|
+
module Webgen
|
|
6
|
+
class ContentProcessor
|
|
7
|
+
|
|
8
|
+
# == General information
|
|
9
|
+
#
|
|
10
|
+
# Inserts additional links to CSS/JS files and other HTML head meta info directly before the
|
|
11
|
+
# HTML head end tag.
|
|
12
|
+
#
|
|
13
|
+
# The data used by this content processor is taken from the Context object. Therefore this
|
|
14
|
+
# processor should be the last in the processing pipeline so that all other processors have been
|
|
15
|
+
# able to set the data.
|
|
16
|
+
#
|
|
17
|
+
# Use the methods defined on the special Context#html_head object to provide values.
|
|
18
|
+
#
|
|
19
|
+
# == Internal details
|
|
20
|
+
#
|
|
21
|
+
# The key ':cp_html_head' of 'context.persistent' is used (the normal 'context.options' won't do
|
|
22
|
+
# because the data needs to be shared 'backwards' during the rendering) and it has to be a Hash
|
|
23
|
+
# with the following values:
|
|
24
|
+
#
|
|
25
|
+
# [:js_file] An array of already resolved relative or absolute paths to Javascript files.
|
|
26
|
+
# [:js_inline] An array of Javascript fragments to be inserted directly into the head section.
|
|
27
|
+
# [:css_file] An array of already resolved relative or absolute paths to CSS files.
|
|
28
|
+
# [:css_inline] An array of CSS fragments to be inserted directly into the head section.
|
|
29
|
+
# [:meta] A hash with key-value pairs from which 'meta' tags are generated. The keys and the
|
|
30
|
+
# values will be properly escaped before insertion. The entries in the meta information
|
|
31
|
+
# 'meta' of the content node are also used and take precedence over these entries.
|
|
32
|
+
#
|
|
33
|
+
# Duplicate values will be removed from the above mentioned arrays before generating the output.
|
|
34
|
+
#
|
|
35
|
+
module HtmlHead
|
|
36
|
+
|
|
37
|
+
HTML_HEAD_END_RE = /<\/head\s*>/i #:nodoc:
|
|
38
|
+
|
|
39
|
+
# Insert the additional header information.
|
|
40
|
+
def self.call(context)
|
|
41
|
+
context.content.sub!(HTML_HEAD_END_RE) do |match|
|
|
42
|
+
result = ''
|
|
43
|
+
result << tags_from_context_data(context)
|
|
44
|
+
result << links_to_translations(context)
|
|
45
|
+
result << links_from_link_meta_info(context)
|
|
46
|
+
result << match
|
|
47
|
+
end
|
|
48
|
+
context
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Return a string containing the HTML tags corresponding to the information set in the given
|
|
52
|
+
# Context object and the values of the meta info key +meta+ of the content node.
|
|
53
|
+
def self.tags_from_context_data(context)
|
|
54
|
+
result = ''
|
|
55
|
+
if context.persistent[:cp_html_head].kind_of?(Hash)
|
|
56
|
+
process_data_array(context, :js_file) do |js_file|
|
|
57
|
+
result += "\n<script type=\"text/javascript\" src=\"#{js_file}\"></script>"
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
process_data_array(context, :js_inline) do |content|
|
|
61
|
+
result += "\n<script type=\"text/javascript\">//<![CDATA[\n#{content}\n//]]></script>"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
process_data_array(context, :css_file) do |css_file|
|
|
65
|
+
result += "\n<link rel=\"stylesheet\" href=\"#{css_file}\" type=\"text/css\"/>"
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
process_data_array(context, :css_inline) do |content|
|
|
69
|
+
result += "\n<style type=\"text/css\">/*<![CDATA[/*/\n#{content}\n/*]]>*/</style>"
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
(context.persistent[:cp_html_head][:meta] || {}).merge(context.content_node['meta'] || {}).each do |name, content|
|
|
73
|
+
result += "\n<meta name=\"#{ERB::Util.h(name)}\" content=\"#{ERB::Util.h(content)}\" />"
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
result
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# Yield the values of the specified array.
|
|
80
|
+
def self.process_data_array(context, array_name, &block)
|
|
81
|
+
(context.persistent[:cp_html_head][array_name] || []).uniq.each(&block)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
# Return a string containing HTML link tags to translations of the destination node.
|
|
85
|
+
def self.links_to_translations(context)
|
|
86
|
+
context.website.tree.translations(context.dest_node).map do |node|
|
|
87
|
+
next '' if node.alcn == context.dest_node.alcn
|
|
88
|
+
context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, node.alcn)
|
|
89
|
+
|
|
90
|
+
result = "\n<link type=\"text/html\" rel=\"alternate\" hreflang=\"#{node.lang}\" "
|
|
91
|
+
result << "href=\"#{context.dest_node.route_to(node)}\" "
|
|
92
|
+
if node['title'] && !node['title'].empty?
|
|
93
|
+
result << "lang=\"#{node.lang}\" title=\"#{ERB::Util.h(node['title'])}\" "
|
|
94
|
+
end
|
|
95
|
+
result << "/>"
|
|
96
|
+
end.join('')
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# Given an array of path names, add tracker information for the resolved nodes (reference node
|
|
100
|
+
# is the content node) and return the relative paths to them.
|
|
101
|
+
def self.resolve_paths(context, paths)
|
|
102
|
+
[paths].flatten.compact.collect do |path|
|
|
103
|
+
next path if Webgen::Path.url(path, false).absolute?
|
|
104
|
+
node = context.content_node.resolve(path, context.dest_node.lang, true)
|
|
105
|
+
if node
|
|
106
|
+
context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, node.alcn)
|
|
107
|
+
context.dest_node.route_to(node)
|
|
108
|
+
else
|
|
109
|
+
nil
|
|
110
|
+
end
|
|
111
|
+
end.compact
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
LINK_DOCUMENT_ATTRS = {'type' => 'text/html'} #:nodoc:
|
|
115
|
+
LINK_DOCUMENT_TYPES = %w{start next prev contents index glossary chapter section subsection appendix help} #:nodoc:
|
|
116
|
+
|
|
117
|
+
# Return a string containing HTML link tags to the links from the 'link' meta information.
|
|
118
|
+
def self.links_from_link_meta_info(context)
|
|
119
|
+
link_mi = Marshal.load(Marshal.dump(context.content_node['link'] || {}))
|
|
120
|
+
result = ''
|
|
121
|
+
|
|
122
|
+
# Add user defined javascript and CSS links
|
|
123
|
+
resolve_paths(context, link_mi.delete('javascript')).each do |file|
|
|
124
|
+
result += "\n<script type=\"text/javascript\" src=\"#{file}\"></script>"
|
|
125
|
+
end
|
|
126
|
+
resolve_paths(context, link_mi.delete('css')).each do |file|
|
|
127
|
+
result += "\n<link rel=\"stylesheet\" href=\"#{file}\" type=\"text/css\" />"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# add generic links
|
|
131
|
+
link_mi.sort.each do |link_type, vals|
|
|
132
|
+
link_type = link_type.downcase
|
|
133
|
+
[vals].flatten.each do |val|
|
|
134
|
+
val = {'href' => val} if val.kind_of?(String)
|
|
135
|
+
val['rel'] ||= link_type
|
|
136
|
+
val = LINK_DOCUMENT_ATTRS.merge(val) if LINK_DOCUMENT_TYPES.include?(link_type)
|
|
137
|
+
href = val.delete('href')
|
|
138
|
+
href = resolve_paths(context, href).first if href
|
|
139
|
+
if href
|
|
140
|
+
result << "\n<link href=\"#{href}\" "
|
|
141
|
+
val.sort.each {|k,v| result << "#{k}=\"#{ERB::Util.h(v)}\" "}
|
|
142
|
+
result << "/>"
|
|
143
|
+
else
|
|
144
|
+
context.website.logger.error do
|
|
145
|
+
"No link target specified for link type '#{link_type}' in 'link' meta information in <#{context.content_node}>"
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
result
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
|
157
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/content_processor'
|
|
4
|
+
webgen_require 'kramdown'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class ContentProcessor
|
|
8
|
+
|
|
9
|
+
# Processes content in kramdown format (based on Markdown) using the +kramdown+ library.
|
|
10
|
+
module Kramdown
|
|
11
|
+
|
|
12
|
+
class CustomHtmlConverter < ::Kramdown::Converter::Html #:nodoc:
|
|
13
|
+
public_class_method(:new)
|
|
14
|
+
|
|
15
|
+
def initialize(root, options, context)
|
|
16
|
+
super(root, options)
|
|
17
|
+
@context = context
|
|
18
|
+
@do_convert = context.website.config['content_processor.kramdown.handle_links']
|
|
19
|
+
@ignore_fragments = context.website.config['content_processor.kramdown.ignore_unknown_fragments']
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def convert_a(el, indent)
|
|
23
|
+
el.attr['href'] = @context.tag('relocatable', {'path' => el.attr['href'],
|
|
24
|
+
'ignore_unknown_fragment' => @ignore_fragments}) if @do_convert
|
|
25
|
+
super
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def convert_img(el, indent)
|
|
29
|
+
el.attr['src'] = @context.tag('relocatable', {'path' => el.attr['src'],
|
|
30
|
+
'ignore_unknown_fragment' => @ignore_fragments}) if @do_convert
|
|
31
|
+
super
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Convert the content in +context+ to HTML.
|
|
37
|
+
def self.call(context)
|
|
38
|
+
doc = ::Kramdown::Document.new(context.content, context.website.config['content_processor.kramdown.options'])
|
|
39
|
+
context.content = CustomHtmlConverter.new(doc.root, doc.options, context).convert(doc.root)
|
|
40
|
+
doc.warnings.each do |warn|
|
|
41
|
+
context.website.logger.warn { "kramdown warning while parsing <#{context.ref_node}>: #{warn}" }
|
|
42
|
+
end
|
|
43
|
+
context
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/content_processor'
|
|
4
|
+
require 'rexml/parsers/baseparser'
|
|
5
|
+
webgen_require 'maruku'
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
# :stopdoc:
|
|
9
|
+
# Fixes a problem when parsing Markdown with <webgen>-tags in Maruku.
|
|
10
|
+
class REXML::Parsers::BaseParser
|
|
11
|
+
|
|
12
|
+
alias_method :"old_stream=", :"stream="
|
|
13
|
+
|
|
14
|
+
def stream=(source)
|
|
15
|
+
self.old_stream = source
|
|
16
|
+
@nsstack << Set.new(['webgen'])
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
# :startdoc:
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
module Webgen
|
|
24
|
+
class ContentProcessor
|
|
25
|
+
|
|
26
|
+
# Processes content in Markdown format using the +maruku+ library.
|
|
27
|
+
module Maruku
|
|
28
|
+
|
|
29
|
+
# Convert the content in +context+ to HTML.
|
|
30
|
+
def self.call(context)
|
|
31
|
+
$uid = 0 # fix for invalid fragment IDs on second run
|
|
32
|
+
context.content = ::Maruku.new(context.content, :on_error => :raise).to_html
|
|
33
|
+
context
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/content_processor'
|
|
4
|
+
webgen_require 'rdiscount'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class ContentProcessor
|
|
8
|
+
|
|
9
|
+
# Processes content in Markdown markup with the fast +rdiscount+ library.
|
|
10
|
+
module RDiscount
|
|
11
|
+
|
|
12
|
+
# Convert the content in +context+ to HTML.
|
|
13
|
+
def self.call(context)
|
|
14
|
+
context.content = ::RDiscount.new(context.content).to_html
|
|
15
|
+
context
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/content_processor'
|
|
4
|
+
webgen_require 'rdoc/markup/to_html', 'rdoc'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class ContentProcessor
|
|
8
|
+
|
|
9
|
+
# Converts content in RDoc markup (the native Ruby documentation format) to HTML. Needs the newer
|
|
10
|
+
# RDoc implementation (version >= 2.4.x).
|
|
11
|
+
module RDoc
|
|
12
|
+
|
|
13
|
+
# Convert the content in RDoc markup to HTML.
|
|
14
|
+
def self.call(context)
|
|
15
|
+
context.content = ::RDoc::Markup::ToHtml.new.convert(context.content)
|
|
16
|
+
context
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/content_processor'
|
|
4
|
+
webgen_require 'redcloth', 'RedCloth'
|
|
5
|
+
|
|
6
|
+
module Webgen
|
|
7
|
+
class ContentProcessor
|
|
8
|
+
|
|
9
|
+
# Processes content in Textile format using the +redcloth+ library.
|
|
10
|
+
module RedCloth
|
|
11
|
+
|
|
12
|
+
# Convert the content in +context+ to HTML.
|
|
13
|
+
def self.call(context)
|
|
14
|
+
doc = ::RedCloth.new(context.content)
|
|
15
|
+
doc.hard_breaks = context.website.config['content_processor.redcloth.hard_breaks']
|
|
16
|
+
context.content = doc.to_html
|
|
17
|
+
context
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/content_processor'
|
|
4
|
+
|
|
5
|
+
module Webgen
|
|
6
|
+
class ContentProcessor
|
|
7
|
+
|
|
8
|
+
# Processes the content that is valid Ruby to generate new content.
|
|
9
|
+
module Ruby
|
|
10
|
+
|
|
11
|
+
# Process the content of +context+ which needs to be valid Ruby code.
|
|
12
|
+
def self.call(context)
|
|
13
|
+
eval(context.content, binding, context.ref_node.alcn)
|
|
14
|
+
context
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
|
|
3
|
+
require 'webgen/content_processor'
|
|
4
|
+
require 'webgen/path'
|
|
5
|
+
webgen_require 'sass'
|
|
6
|
+
|
|
7
|
+
module Webgen
|
|
8
|
+
class ContentProcessor
|
|
9
|
+
|
|
10
|
+
# Processes content in Sass markup (used for writing CSS files).
|
|
11
|
+
module Sass
|
|
12
|
+
|
|
13
|
+
# Custom importer for Sass to load files from the file system but resolves absolute paths from
|
|
14
|
+
# the given root directory and not from the filesystem root!
|
|
15
|
+
class FileSystemImporter < ::Sass::Importers::Filesystem
|
|
16
|
+
|
|
17
|
+
def find_real_file(dir, name, options = {}) #:nodoc:
|
|
18
|
+
for (f,s) in possible_files(remove_root(name))
|
|
19
|
+
if full_path = Dir["#{dir}/#{f}"].first
|
|
20
|
+
full_path.gsub!(REDUNDANT_DIRECTORY,File::SEPARATOR)
|
|
21
|
+
return full_path, s
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
nil
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Custom importer for Sass to load files by resolving them in the node tree.
|
|
30
|
+
class NodeTreeImporter < ::Sass::Importers::Base
|
|
31
|
+
|
|
32
|
+
# Creates a new importer that imports files from the node tree relative to the given node alcn.
|
|
33
|
+
def initialize(website, alcn)
|
|
34
|
+
@website = website
|
|
35
|
+
@alcn = alcn
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# @see Base#find_relative
|
|
39
|
+
def find_relative(name, base, options)
|
|
40
|
+
_find(base, name, options)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# @see Base#find
|
|
44
|
+
def find(name, options)
|
|
45
|
+
_find(@alcn, name, options)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def mtime(name, options) #:nodoc:
|
|
49
|
+
node = resolve_node(@alcn, name)
|
|
50
|
+
node['modified_at'] if node
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def key(name, options) #:nodoc:
|
|
54
|
+
["webgen:", name]
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def to_s #:nodoc:
|
|
58
|
+
"webgen: #{@alcn}"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
#######
|
|
62
|
+
private
|
|
63
|
+
#######
|
|
64
|
+
|
|
65
|
+
# Find the @import-ed name under the given base filename.
|
|
66
|
+
#
|
|
67
|
+
# Returns a Sass::Engine object if found or +nil+ otherwise.
|
|
68
|
+
def _find(base, name, options)
|
|
69
|
+
node, syntax = resolve_node(base, name)
|
|
70
|
+
return unless node
|
|
71
|
+
|
|
72
|
+
options[:syntax] = syntax
|
|
73
|
+
options[:filename] = node.alcn
|
|
74
|
+
options[:importer] = self
|
|
75
|
+
::Sass::Engine.new(node.node_info[:path].data, options)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
# Resolve the path using the given base filename.
|
|
79
|
+
#
|
|
80
|
+
# Returns [node, syntax] if a node was found or nil otherwise
|
|
81
|
+
def resolve_node(base, path)
|
|
82
|
+
possible_filenames(path).each do |filename, syntax|
|
|
83
|
+
node = @website.tree.resolve_node(Webgen::Path.append(base, filename), nil)
|
|
84
|
+
return [node, syntax] if node
|
|
85
|
+
end
|
|
86
|
+
nil
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Return an array of all possible (filename, syntax) pairs for the given path.
|
|
90
|
+
def possible_filenames(path)
|
|
91
|
+
dirname, basename = File.split(path)
|
|
92
|
+
basename, ext = basename.scan(/^(.*?)(?:\.(sass|scss))?$/).first
|
|
93
|
+
(ext.nil? ? %w{sass scss} : [ext]).map do |ext|
|
|
94
|
+
[["#{dirname}/_#{basename}.#{ext}", ext.to_sym], ["#{dirname}/#{basename}.#{ext}", ext.to_sym]]
|
|
95
|
+
end.flatten(1)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
module ::Sass::Script::Functions
|
|
101
|
+
|
|
102
|
+
# Return the correct relative path for the given path.
|
|
103
|
+
def relocatable(path)
|
|
104
|
+
assert_type(path, :String)
|
|
105
|
+
context = options[:webgen_context]
|
|
106
|
+
path = path.value
|
|
107
|
+
|
|
108
|
+
dest_node = context.website.tree[options[:filename]].resolve(path, context.dest_node.lang, true)
|
|
109
|
+
if dest_node
|
|
110
|
+
context.website.ext.item_tracker.add(context.dest_node, :node_meta_info, dest_node.alcn)
|
|
111
|
+
result = context.dest_node.route_to(dest_node)
|
|
112
|
+
else
|
|
113
|
+
result = path
|
|
114
|
+
end
|
|
115
|
+
::Sass::Script::String.new("url(\"#{result}\")")
|
|
116
|
+
end
|
|
117
|
+
declare :relocatable, [:string]
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
# Convert the content in +sass+ markup to CSS.
|
|
122
|
+
def self.call(context)
|
|
123
|
+
context.content = ::Sass::Engine.new(context.content, default_options(context)).render
|
|
124
|
+
context
|
|
125
|
+
rescue ::Sass::SyntaxError => e
|
|
126
|
+
raise Webgen::RenderError.new(e, self.class.name, context.dest_node, nil, (e.sass_line if e.sass_line))
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def self.default_options(context) # :nodoc:
|
|
130
|
+
opts = context.website.config['content_processor.sass.options']
|
|
131
|
+
load_paths = context.website.ext.sass_load_paths + [NodeTreeImporter.new(context.website, '/')]
|
|
132
|
+
opts.merge({
|
|
133
|
+
:filename => context.ref_node.alcn,
|
|
134
|
+
:syntax => :sass,
|
|
135
|
+
:cache_store => ::Sass::CacheStores::Filesystem.new(context.website.tmpdir('sass')),
|
|
136
|
+
:filesystem_importer => FileSystemImporter,
|
|
137
|
+
:load_paths => load_paths,
|
|
138
|
+
:webgen_context => context
|
|
139
|
+
})
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
end
|
|
145
|
+
end
|