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
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Inserts additional links to CSS/JS files and other HTML head meta info directly before the HTML
|
|
6
|
-
# head end tag.
|
|
7
|
-
#
|
|
8
|
-
# The data used by this content processor is taken from the Context object. Therefore this
|
|
9
|
-
# processor should be the last in the processing pipeline so that all other processors have been
|
|
10
|
-
# able to set the data.
|
|
11
|
-
#
|
|
12
|
-
# The key <tt>:cp_head</tt> of <tt>context.persistent</tt> is used (the normal
|
|
13
|
-
# <tt>context.options</tt> won't do because the data needs to be shared 'backwards' during the
|
|
14
|
-
# rendering) and it has to be a Hash with the following values:
|
|
15
|
-
#
|
|
16
|
-
# [:js_file] An array of already resolved relative or absolute paths to Javascript files.
|
|
17
|
-
# [:js_inline] An array of Javascript fragments to be inserted directly into the head section.
|
|
18
|
-
# [:css_file] An array of already resolved relative or absolute paths to CSS files.
|
|
19
|
-
# [:css_inline] An array of CSS fragments to be inserted directly into the head section.
|
|
20
|
-
# [:meta] A hash with key-value pairs from which <tt>meta</tt> tags are generated. The keys and
|
|
21
|
-
# the values will be properly escaped before insertion. The entries in the meta
|
|
22
|
-
# information <tt>meta</tt> of the content node are also used and take precedence over
|
|
23
|
-
# these entries.
|
|
24
|
-
#
|
|
25
|
-
# Duplicate values will be removed from the above mentioned arrays before generating the output.
|
|
26
|
-
class Head
|
|
27
|
-
|
|
28
|
-
include Webgen::Loggable
|
|
29
|
-
|
|
30
|
-
HTML_HEAD_END_RE = /<\/head\s*>/i #:nodoc:
|
|
31
|
-
|
|
32
|
-
LINK_DOCUMENT_ATTRS = {'type' => 'text/html'} #:nodoc:
|
|
33
|
-
LINK_DOCUMENT_TYPES = %w{start next prev contents index glossary chapter section subsection appendix help} #:nodoc:
|
|
34
|
-
|
|
35
|
-
# Insert the additional header information.
|
|
36
|
-
def call(context)
|
|
37
|
-
require 'erb'
|
|
38
|
-
context.content.sub!(HTML_HEAD_END_RE) do |match|
|
|
39
|
-
result = ''
|
|
40
|
-
|
|
41
|
-
# add content set programmatically
|
|
42
|
-
if context.persistent[:cp_head].kind_of?(Hash)
|
|
43
|
-
context.persistent[:cp_head][:js_file].uniq.each do |js_file|
|
|
44
|
-
result += "\n<script type=\"text/javascript\" src=\"#{js_file}\"></script>"
|
|
45
|
-
end if context.persistent[:cp_head][:js_file].kind_of?(Array)
|
|
46
|
-
|
|
47
|
-
context.persistent[:cp_head][:js_inline].uniq.each do |content|
|
|
48
|
-
result += "\n<script type=\"text/javascript\">\n#{content}\n</script>"
|
|
49
|
-
end if context.persistent[:cp_head][:js_inline].kind_of?(Array)
|
|
50
|
-
|
|
51
|
-
context.persistent[:cp_head][:css_file].uniq.each do |css_file|
|
|
52
|
-
result += "\n<link rel=\"stylesheet\" href=\"#{css_file}\" type=\"text/css\"/>"
|
|
53
|
-
end if context.persistent[:cp_head][:css_file].kind_of?(Array)
|
|
54
|
-
|
|
55
|
-
context.persistent[:cp_head][:css_inline].uniq.each do |content|
|
|
56
|
-
result += "\n<style type=\"text/css\"><![CDATA[/\n#{content}\n]]></style>"
|
|
57
|
-
end if context.persistent[:cp_head][:css_inline].kind_of?(Array)
|
|
58
|
-
end
|
|
59
|
-
((context.persistent[:cp_head] || {})[:meta] || {}).merge(context.node['meta'] || {}).each do |name, content|
|
|
60
|
-
result += "\n<meta name=\"#{ERB::Util.h(name)}\" content=\"#{ERB::Util.h(content)}\" />"
|
|
61
|
-
end
|
|
62
|
-
|
|
63
|
-
# add links to other languages of same page
|
|
64
|
-
context.dest_node.tree.node_access[:acn][context.dest_node.acn].
|
|
65
|
-
select {|n| n.alcn != context.dest_node.alcn}.each do |node|
|
|
66
|
-
context.dest_node.node_info[:used_meta_info_nodes] << node.alcn
|
|
67
|
-
result += "\n<link type=\"text/html\" rel=\"alternate\" hreflang=\"#{node.lang}\" "
|
|
68
|
-
result += "href=\"#{context.dest_node.route_to(node)}\" "
|
|
69
|
-
if node['title'] && !node['title'].empty?
|
|
70
|
-
result += "lang=\"#{node.lang}\" title=\"#{ERB::Util.h(node['title'])}\" "
|
|
71
|
-
end
|
|
72
|
-
result += "/>"
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
link = Marshal.load(Marshal.dump(context.node['link'] || {}))
|
|
76
|
-
|
|
77
|
-
handle_files = lambda do |files|
|
|
78
|
-
[files].flatten.compact.collect do |file|
|
|
79
|
-
if !Webgen::Node.url(file, false).absolute?
|
|
80
|
-
file = context.node.resolve(file, context.dest_node.lang)
|
|
81
|
-
if file
|
|
82
|
-
context.dest_node.node_info[:used_meta_info_nodes] << file.alcn
|
|
83
|
-
file = context.dest_node.route_to(file)
|
|
84
|
-
else
|
|
85
|
-
log(:error) { "Could not resolve path '#{file}' used in 'link' meta information in <#{context.node}>" }
|
|
86
|
-
context.dest_node.flag(:dirty)
|
|
87
|
-
end
|
|
88
|
-
end
|
|
89
|
-
file
|
|
90
|
-
end.compact
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
# Add user defined javascript and CSS links
|
|
94
|
-
handle_files.call(link.delete('javascript')).each do |file|
|
|
95
|
-
result += "\n<script type=\"text/javascript\" src=\"#{file}\"></script>"
|
|
96
|
-
end
|
|
97
|
-
handle_files.call(link.delete('css')).each do |file|
|
|
98
|
-
result += "\n<link rel=\"stylesheet\" href=\"#{file}\" type=\"text/css\" />"
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# add generic links specified via the +link+ meta information
|
|
102
|
-
link.sort.each do |link_type, vals|
|
|
103
|
-
link_type = link_type.downcase
|
|
104
|
-
[vals].flatten.each do |val|
|
|
105
|
-
val = {'href' => val} if val.kind_of?(String)
|
|
106
|
-
val['rel'] ||= link_type
|
|
107
|
-
val = LINK_DOCUMENT_ATTRS.merge(val) if LINK_DOCUMENT_TYPES.include?(link_type)
|
|
108
|
-
if href = val.delete('href')
|
|
109
|
-
href = handle_files.call(href).first
|
|
110
|
-
else
|
|
111
|
-
log(:error) { "No link target specified for link type '#{link_type}' in 'link' meta information in <#{context.node}>" }
|
|
112
|
-
end
|
|
113
|
-
if href
|
|
114
|
-
s = "\n<link href=\"#{href}\" "
|
|
115
|
-
val.sort.each {|k,v| s += "#{k}=\"#{ERB::Util.h(v)}\" "}
|
|
116
|
-
result += s + "/>"
|
|
117
|
-
end
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
result + match
|
|
122
|
-
end
|
|
123
|
-
context
|
|
124
|
-
end
|
|
125
|
-
|
|
126
|
-
end
|
|
127
|
-
|
|
128
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Processes content in kramdown format (based on Markdown) using the +kramdown+ library.
|
|
6
|
-
class Kramdown
|
|
7
|
-
|
|
8
|
-
include Webgen::Loggable
|
|
9
|
-
|
|
10
|
-
# Convert the content in +context+ to HTML.
|
|
11
|
-
def call(context)
|
|
12
|
-
require 'kramdown'
|
|
13
|
-
require 'webgen/contentprocessor/kramdown/html'
|
|
14
|
-
doc = ::Kramdown::Document.new(context.content,
|
|
15
|
-
context.website.config['contentprocessor.kramdown.options'].merge(context.options['contentprocessor.kramdown.options'] || {}))
|
|
16
|
-
context.content = KramdownHtmlConverter.convert(doc.root, doc.options, context)
|
|
17
|
-
doc.warnings.each do |warn|
|
|
18
|
-
log(:warn) { "Warning while parsing <#{context.ref_node}> with kramdown: #{warn}" }
|
|
19
|
-
end
|
|
20
|
-
context
|
|
21
|
-
rescue LoadError
|
|
22
|
-
raise Webgen::LoadError.new('kramdown', self.class.name, context.dest_node, 'kramdown')
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'kramdown'
|
|
4
|
-
|
|
5
|
-
module Webgen::ContentProcessor
|
|
6
|
-
|
|
7
|
-
class KramdownHtmlConverter < ::Kramdown::Converter::Html
|
|
8
|
-
|
|
9
|
-
def initialize(root, options, context) #:nodoc:
|
|
10
|
-
super(root, options)
|
|
11
|
-
@context = context
|
|
12
|
-
@do_convert = if context.options.has_key?('contentprocessor.kramdown.handle_links')
|
|
13
|
-
context.options['contentprocessor.kramdown.handle_links']
|
|
14
|
-
else
|
|
15
|
-
context.website.config['contentprocessor.kramdown.handle_links']
|
|
16
|
-
end
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
# Convert the element tree under +root+ to HTML using the webgen +context+ object.
|
|
20
|
-
def self.convert(root, options, context)
|
|
21
|
-
new(root, options, context).convert(root)
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def convert_a(el, indent)
|
|
25
|
-
el.attr['href'] = @context.tag('relocatable', {'path' => el.attr['href']}) if @do_convert
|
|
26
|
-
"<a#{html_attributes(el.attr)}>#{inner(el, indent)}</a>"
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def convert_img(el, indent)
|
|
30
|
-
el.attr['src'] = @context.tag('relocatable', {'path' => el.attr['src']}) if @do_convert
|
|
31
|
-
"<img#{html_attributes(el.attr)} />"
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Generates valid CSS from CSS-like input, supporting variables, nesting and mixins.
|
|
6
|
-
class Less
|
|
7
|
-
|
|
8
|
-
include Webgen::Loggable
|
|
9
|
-
|
|
10
|
-
# Convert the content in +context+ to valid CSS.
|
|
11
|
-
def call(context)
|
|
12
|
-
require 'less'
|
|
13
|
-
context.content = ::Less.parse(context.content)
|
|
14
|
-
context
|
|
15
|
-
rescue LoadError
|
|
16
|
-
raise Webgen::LoadError.new('less', self.class.name, context.dest_node, 'less')
|
|
17
|
-
rescue ::Less::SyntaxError => e
|
|
18
|
-
line = e.message.scan(/on line (\d+):/).first.first.to_i rescue nil
|
|
19
|
-
raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node, line)
|
|
20
|
-
rescue ::Less::MixedUnitsError => e
|
|
21
|
-
raise Webgen::RenderError.new("Can't mix different units together: #{e}",
|
|
22
|
-
self.class.name, context.dest_node, context.ref_node)
|
|
23
|
-
rescue ::Less::VariableNameError => e
|
|
24
|
-
raise Webgen::RenderError.new("Variable name is undefined: #{e}",
|
|
25
|
-
self.class.name, context.dest_node, context.ref_node)
|
|
26
|
-
rescue ::Less::MixinNameError => e
|
|
27
|
-
raise Webgen::RenderError.new("Mixin name is undefined: #{e}",
|
|
28
|
-
self.class.name, context.dest_node, context.ref_node)
|
|
29
|
-
rescue ::Less::ImportError => e
|
|
30
|
-
raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
end
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'rexml/parsers/baseparser'
|
|
4
|
-
|
|
5
|
-
class REXML::Parsers::BaseParser
|
|
6
|
-
|
|
7
|
-
alias :"old_stream=" :"stream="
|
|
8
|
-
|
|
9
|
-
def stream=(source)
|
|
10
|
-
self.old_stream=(source)
|
|
11
|
-
@nsstack << Set.new(['webgen'])
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
module Webgen::ContentProcessor
|
|
18
|
-
|
|
19
|
-
# Processes content in Markdown format using the +maruku+ library.
|
|
20
|
-
class Maruku
|
|
21
|
-
|
|
22
|
-
# Convert the content in +context+ to HTML.
|
|
23
|
-
def call(context)
|
|
24
|
-
require 'maruku'
|
|
25
|
-
$uid = 0 #fix for invalid fragment ids on second run
|
|
26
|
-
context.content = ::Maruku.new(context.content, :on_error => :raise).to_html
|
|
27
|
-
context
|
|
28
|
-
rescue LoadError
|
|
29
|
-
raise Webgen::LoadError.new('maruku', self.class.name, context.dest_node, 'maruku')
|
|
30
|
-
rescue Exception => e
|
|
31
|
-
raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
end
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Processes content in Markdown markup with the fast +rdiscount+ library.
|
|
6
|
-
class RDiscount
|
|
7
|
-
|
|
8
|
-
# Convert the content in +context+ to HTML.
|
|
9
|
-
def call(context)
|
|
10
|
-
require 'rdiscount'
|
|
11
|
-
context.content = ::RDiscount.new(context.content).to_html
|
|
12
|
-
context
|
|
13
|
-
rescue LoadError
|
|
14
|
-
raise Webgen::LoadError.new('rdiscount', self.class.name, context.dest_node, 'rdiscount')
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Converts content in RDoc markup (the native Ruby documentation format) to HTML. Needs the newer
|
|
6
|
-
# RDoc implementation provided as +rdoc+ gem!
|
|
7
|
-
class RDoc
|
|
8
|
-
|
|
9
|
-
# Convert the content in RDoc markup to HTML.
|
|
10
|
-
def call(context)
|
|
11
|
-
require 'rdoc/markup/to_html'
|
|
12
|
-
context.content = ::RDoc::Markup::ToHtml.new.convert(context.content)
|
|
13
|
-
context
|
|
14
|
-
rescue LoadError
|
|
15
|
-
raise Webgen::LoadError.new('rdoc/markup/to_html', self.class.name, context.dest_node, 'rdoc')
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Processes content in Textile format using the +redcloth+ library.
|
|
6
|
-
class RedCloth
|
|
7
|
-
|
|
8
|
-
# Convert the content in +context+ to HTML.
|
|
9
|
-
def call(context)
|
|
10
|
-
require 'redcloth'
|
|
11
|
-
doc = ::RedCloth.new(context.content)
|
|
12
|
-
doc.hard_breaks = context.website.config['contentprocessor.redcloth.hard_breaks']
|
|
13
|
-
context.content = doc.to_html
|
|
14
|
-
context
|
|
15
|
-
rescue LoadError
|
|
16
|
-
raise Webgen::LoadError.new('redcloth', self.class.name, context.dest_node, 'RedCloth')
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Processes content in Sass markup (used for writing CSS files) using the +haml+ library.
|
|
6
|
-
class Sass
|
|
7
|
-
|
|
8
|
-
# Convert the content in +sass+ markup to CSS.
|
|
9
|
-
def call(context)
|
|
10
|
-
require 'sass'
|
|
11
|
-
|
|
12
|
-
context.content = ::Sass::Engine.new(context.content, :filename => context.ref_node.alcn).render
|
|
13
|
-
context
|
|
14
|
-
rescue LoadError
|
|
15
|
-
raise Webgen::LoadError.new('sass', self.class.name, context.dest_node, 'haml')
|
|
16
|
-
rescue ::Sass::SyntaxError => e
|
|
17
|
-
raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node, (e.sass_line if e.sass_line))
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
end
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
module Webgen::ContentProcessor
|
|
4
|
-
|
|
5
|
-
# Processes content in sassy CSS markup (used for writing CSS files) using the +haml+ library.
|
|
6
|
-
class Scss
|
|
7
|
-
|
|
8
|
-
# Convert the content in +scss+ markup to CSS.
|
|
9
|
-
def call(context)
|
|
10
|
-
require 'sass'
|
|
11
|
-
|
|
12
|
-
context.content = ::Sass::Engine.new(context.content, :filename => context.ref_node.alcn, :syntax => :scss).render
|
|
13
|
-
context
|
|
14
|
-
rescue LoadError
|
|
15
|
-
raise Webgen::LoadError.new('sass', self.class.name, context.dest_node, 'haml')
|
|
16
|
-
rescue ::Sass::SyntaxError => e
|
|
17
|
-
raise Webgen::RenderError.new(e, self.class.name, context.dest_node, context.ref_node, (e.sass_line if e.sass_line))
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
end
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require 'yaml'
|
|
4
|
-
require 'strscan'
|
|
5
|
-
require 'webgen/tag'
|
|
6
|
-
|
|
7
|
-
module Webgen::ContentProcessor
|
|
8
|
-
|
|
9
|
-
# Processes special webgen tags to provide dynamic content.
|
|
10
|
-
#
|
|
11
|
-
# webgen tags are an easy way to add dynamically generated content to websites, for example menus
|
|
12
|
-
# or breadcrumb trails.
|
|
13
|
-
class Tags
|
|
14
|
-
|
|
15
|
-
include Webgen::WebsiteAccess
|
|
16
|
-
include Webgen::Loggable
|
|
17
|
-
|
|
18
|
-
def initialize #:nodoc:
|
|
19
|
-
@start_re = /(\\*)\{#{website.config['contentprocessor.tags.prefix']}(\w+)(::?)/
|
|
20
|
-
@end_re = /(\\*)\{#{website.config['contentprocessor.tags.prefix']}(\w+)\}/
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
# Replace all webgen tags in the content of +context+ with the rendered content.
|
|
24
|
-
def call(context)
|
|
25
|
-
replace_tags(context) do |tag, param_string, body|
|
|
26
|
-
log(:debug) { "Replacing tag #{tag} with data '#{param_string}' and body '#{body}' in <#{context.ref_node}>" }
|
|
27
|
-
process_tag(tag, param_string, body, context)
|
|
28
|
-
end
|
|
29
|
-
context
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
# Process the +tag+ and return the result. The parameter +params+ needs to be a Hash holding all
|
|
33
|
-
# needed and optional parameters for the tag or a parameter String in YAML format and +body+ is
|
|
34
|
-
# the optional body for the tag. +context+ needs to be a valid Webgen::Context object.
|
|
35
|
-
def process_tag(tag, params, body, context)
|
|
36
|
-
result = ''
|
|
37
|
-
processor = processor_for_tag(tag)
|
|
38
|
-
if !processor.nil?
|
|
39
|
-
params = if params.kind_of?(String)
|
|
40
|
-
processor.create_tag_params(params, context.ref_node)
|
|
41
|
-
else
|
|
42
|
-
processor.create_params_hash(params, context.ref_node)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
processor.set_params(params)
|
|
46
|
-
result, process_output = processor.call(tag, body, context)
|
|
47
|
-
processor.set_params(nil)
|
|
48
|
-
result = call(context.clone(:content => result)).content if process_output
|
|
49
|
-
else
|
|
50
|
-
raise Webgen::RenderError.new("No tag processor for '#{tag}' found", self.class.name,
|
|
51
|
-
context.dest_node, context.ref_node)
|
|
52
|
-
end
|
|
53
|
-
result
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
#######
|
|
58
|
-
private
|
|
59
|
-
#######
|
|
60
|
-
|
|
61
|
-
BRACKETS_RE = /([{}])/
|
|
62
|
-
ProcessingStruct = Struct.new(:state, :tag, :simple_tag, :backslashes, :brackets, :start_pos, :end_pos,
|
|
63
|
-
:params_start_pos, :params_end_pos, :body_end_pos)
|
|
64
|
-
|
|
65
|
-
# Return the <tt>context.content</tt> provided by <tt>context.ref_node</tt> with all webgen tags
|
|
66
|
-
# replaced. When a webgen tag is encountered by the parser, the method yields all found
|
|
67
|
-
# information and substitutes the returned string for the tag.
|
|
68
|
-
def replace_tags(context) #:yields: tag_name, param_string, body
|
|
69
|
-
scanner = StringScanner.new(context.content)
|
|
70
|
-
data = ProcessingStruct.new(:before_tag)
|
|
71
|
-
while true
|
|
72
|
-
case data.state
|
|
73
|
-
when :before_tag
|
|
74
|
-
if scanner.skip_until(@start_re)
|
|
75
|
-
data.state = :in_start_tag
|
|
76
|
-
data.backslashes = scanner[1].length
|
|
77
|
-
data.brackets = 1
|
|
78
|
-
data.tag = scanner[2]
|
|
79
|
-
data.simple_tag = (scanner[3] == ':')
|
|
80
|
-
data.params_start_pos = scanner.pos
|
|
81
|
-
data.start_pos = scanner.pos - scanner.matched.length
|
|
82
|
-
else
|
|
83
|
-
data.state = :done
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
when :in_start_tag
|
|
87
|
-
data.brackets += (scanner[1] == '{' ? 1 : -1) while data.brackets != 0 && scanner.skip_until(BRACKETS_RE)
|
|
88
|
-
if data.brackets != 0
|
|
89
|
-
raise Webgen::RenderError.new("Unbalanced curly brackets for tag '#{data.tag}'", self.class.name,
|
|
90
|
-
context.dest_node, context.ref_node)
|
|
91
|
-
else
|
|
92
|
-
data.params_end_pos = data.body_end_pos = data.end_pos = scanner.pos - 1
|
|
93
|
-
data.state = (data.simple_tag ? :process : :in_body)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
when :process
|
|
97
|
-
if RUBY_VERSION >= '1.9'
|
|
98
|
-
begin
|
|
99
|
-
enc = scanner.string.encoding
|
|
100
|
-
scanner.string.force_encoding('ASCII-8BIT')
|
|
101
|
-
if data.backslashes % 2 == 0
|
|
102
|
-
result = yield(data.tag, scanner.string[data.params_start_pos...data.params_end_pos].force_encoding(enc),
|
|
103
|
-
scanner.string[(data.params_end_pos+1)...data.body_end_pos].to_s.force_encoding(enc)).to_s
|
|
104
|
-
scanner.string[data.start_pos..data.end_pos] = "\\" * (data.backslashes / 2) + result.force_encoding('ASCII-8BIT')
|
|
105
|
-
scanner.pos = data.start_pos + result.length
|
|
106
|
-
else
|
|
107
|
-
scanner.string[data.start_pos, 1 + data.backslashes / 2] = ''
|
|
108
|
-
scanner.pos -= 1 + data.backslashes / 2
|
|
109
|
-
end
|
|
110
|
-
ensure
|
|
111
|
-
scanner.string.force_encoding(enc) if RUBY_VERSION >= '1.9'
|
|
112
|
-
end
|
|
113
|
-
else
|
|
114
|
-
if data.backslashes % 2 == 0
|
|
115
|
-
result = yield(data.tag, scanner.string[data.params_start_pos...data.params_end_pos],
|
|
116
|
-
scanner.string[(data.params_end_pos+1)...data.body_end_pos]).to_s
|
|
117
|
-
scanner.string[data.start_pos..data.end_pos] = "\\" * (data.backslashes / 2) + result
|
|
118
|
-
scanner.pos = data.start_pos + result.length
|
|
119
|
-
else
|
|
120
|
-
scanner.string[data.start_pos, 1 + data.backslashes / 2] = ''
|
|
121
|
-
scanner.pos -= 1 + data.backslashes / 2
|
|
122
|
-
end
|
|
123
|
-
end
|
|
124
|
-
data.state = :before_tag
|
|
125
|
-
|
|
126
|
-
when :in_body
|
|
127
|
-
while (result = scanner.skip_until(@end_re))
|
|
128
|
-
next unless scanner[2] == data.tag
|
|
129
|
-
if scanner[1].length % 2 == 1
|
|
130
|
-
scanner.string[(scanner.pos - scanner.matched.length), 1 + scanner[1].length / 2] = ''
|
|
131
|
-
scanner.pos -= 1 + scanner[1].length / 2
|
|
132
|
-
else
|
|
133
|
-
break
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
if result
|
|
137
|
-
data.state = :process
|
|
138
|
-
data.end_pos = scanner.pos - 1
|
|
139
|
-
data.body_end_pos = scanner.pos - scanner.matched.length + scanner[1].length / 2
|
|
140
|
-
else
|
|
141
|
-
raise Webgen::RenderError.new("Invalid body part - no end tag found for '#{data.tag}'", self.class.name,
|
|
142
|
-
context.dest_node, context.ref_node)
|
|
143
|
-
end
|
|
144
|
-
|
|
145
|
-
when :done
|
|
146
|
-
break
|
|
147
|
-
end
|
|
148
|
-
end
|
|
149
|
-
scanner.string
|
|
150
|
-
rescue Webgen::RenderError => e
|
|
151
|
-
e.line = scanner.string[0...scanner.pos].scan("\n").size + 1 unless e.line
|
|
152
|
-
raise
|
|
153
|
-
end
|
|
154
|
-
|
|
155
|
-
# Return the tag processor for +tag+ or +nil+ if +tag+ is unknown.
|
|
156
|
-
def processor_for_tag(tag)
|
|
157
|
-
map = website.config['contentprocessor.tags.map']
|
|
158
|
-
klass = if map.has_key?(tag)
|
|
159
|
-
map[tag]
|
|
160
|
-
elsif map.has_key?(:default)
|
|
161
|
-
map[:default]
|
|
162
|
-
else
|
|
163
|
-
nil
|
|
164
|
-
end
|
|
165
|
-
klass.nil? ? nil : website.cache.instance(klass)
|
|
166
|
-
end
|
|
167
|
-
|
|
168
|
-
end
|
|
169
|
-
|
|
170
|
-
end
|