yard 0.9.16 → 0.9.17
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of yard might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.yardopts +26 -26
- data/CHANGELOG.md +728 -728
- data/LEGAL +66 -66
- data/LICENSE +22 -22
- data/README.md +328 -328
- data/Rakefile +53 -47
- data/benchmarks/builtins_vs_eval.rb +24 -24
- data/benchmarks/concat_vs_join.rb +13 -13
- data/benchmarks/erb_vs_erubis.rb +54 -54
- data/benchmarks/format_args.rb +47 -47
- data/benchmarks/generation.rb +38 -38
- data/benchmarks/marshal_vs_dbm.rb +64 -64
- data/benchmarks/parsing.rb +46 -46
- data/benchmarks/pathname_vs_string.rb +50 -50
- data/benchmarks/rdoc_vs_yardoc.rb +11 -11
- data/benchmarks/registry_store_types.rb +49 -49
- data/benchmarks/ri_vs_yri.rb +19 -19
- data/benchmarks/ripper_parser.rb +13 -13
- data/benchmarks/splat_vs_flatten.rb +13 -13
- data/benchmarks/template_erb.rb +23 -23
- data/benchmarks/template_format.rb +7 -7
- data/benchmarks/template_profile.rb +18 -18
- data/benchmarks/yri_cache.rb +20 -20
- data/bin/yard +13 -13
- data/bin/yardoc +13 -13
- data/bin/yri +13 -13
- data/docs/CodeObjects.md +115 -115
- data/docs/GettingStarted.md +679 -679
- data/docs/Handlers.md +152 -152
- data/docs/Overview.md +61 -61
- data/docs/Parser.md +191 -191
- data/docs/Tags.md +283 -283
- data/docs/TagsArch.md +123 -123
- data/docs/Templates.md +496 -496
- data/docs/WhatsNew.md +1245 -1245
- data/docs/templates/default/fulldoc/html/full_list_tag.erb +8 -8
- data/docs/templates/default/fulldoc/html/setup.rb +6 -6
- data/docs/templates/default/layout/html/setup.rb +9 -9
- data/docs/templates/default/layout/html/tag_list.erb +11 -11
- data/docs/templates/default/yard_tags/html/list.erb +18 -18
- data/docs/templates/default/yard_tags/html/setup.rb +26 -26
- data/docs/templates/plugin.rb +70 -70
- data/lib/rubygems_plugin.rb +9 -9
- data/lib/yard.rb +69 -69
- data/lib/yard/autoload.rb +303 -303
- data/lib/yard/cli/command.rb +85 -85
- data/lib/yard/cli/command_parser.rb +93 -93
- data/lib/yard/cli/config.rb +198 -198
- data/lib/yard/cli/diff.rb +270 -270
- data/lib/yard/cli/display.rb +69 -69
- data/lib/yard/cli/gems.rb +84 -84
- data/lib/yard/cli/graph.rb +125 -125
- data/lib/yard/cli/help.rb +20 -20
- data/lib/yard/cli/i18n.rb +70 -70
- data/lib/yard/cli/list.rb +23 -23
- data/lib/yard/cli/markup_types.rb +32 -32
- data/lib/yard/cli/server.rb +257 -257
- data/lib/yard/cli/stats.rb +231 -231
- data/lib/yard/cli/yardoc.rb +788 -788
- data/lib/yard/cli/yardopts_command.rb +110 -110
- data/lib/yard/cli/yri.rb +215 -215
- data/lib/yard/code_objects/base.rb +615 -610
- data/lib/yard/code_objects/class_object.rb +146 -146
- data/lib/yard/code_objects/class_variable_object.rb +11 -11
- data/lib/yard/code_objects/constant_object.rb +16 -16
- data/lib/yard/code_objects/extended_method_object.rb +24 -24
- data/lib/yard/code_objects/extra_file_object.rb +131 -131
- data/lib/yard/code_objects/macro_object.rb +172 -172
- data/lib/yard/code_objects/method_object.rb +196 -196
- data/lib/yard/code_objects/module_object.rb +21 -21
- data/lib/yard/code_objects/namespace_mapper.rb +114 -114
- data/lib/yard/code_objects/namespace_object.rb +200 -200
- data/lib/yard/code_objects/proxy.rb +240 -240
- data/lib/yard/code_objects/root_object.rb +19 -19
- data/lib/yard/config.rb +270 -270
- data/lib/yard/core_ext/array.rb +16 -16
- data/lib/yard/core_ext/file.rb +69 -69
- data/lib/yard/core_ext/hash.rb +16 -16
- data/lib/yard/core_ext/insertion.rb +63 -63
- data/lib/yard/core_ext/module.rb +20 -20
- data/lib/yard/core_ext/string.rb +68 -68
- data/lib/yard/core_ext/symbol_hash.rb +75 -75
- data/lib/yard/docstring.rb +386 -378
- data/lib/yard/docstring_parser.rb +345 -345
- data/lib/yard/gem_index.rb +29 -29
- data/lib/yard/globals.rb +22 -22
- data/lib/yard/handlers/base.rb +595 -595
- data/lib/yard/handlers/c/alias_handler.rb +16 -16
- data/lib/yard/handlers/c/attribute_handler.rb +13 -13
- data/lib/yard/handlers/c/base.rb +129 -129
- data/lib/yard/handlers/c/class_handler.rb +27 -27
- data/lib/yard/handlers/c/constant_handler.rb +13 -13
- data/lib/yard/handlers/c/handler_methods.rb +211 -211
- data/lib/yard/handlers/c/init_handler.rb +20 -20
- data/lib/yard/handlers/c/method_handler.rb +45 -36
- data/lib/yard/handlers/c/mixin_handler.rb +21 -21
- data/lib/yard/handlers/c/module_handler.rb +17 -17
- data/lib/yard/handlers/c/override_comment_handler.rb +31 -31
- data/lib/yard/handlers/c/path_handler.rb +11 -11
- data/lib/yard/handlers/c/struct_handler.rb +13 -13
- data/lib/yard/handlers/c/symbol_handler.rb +8 -8
- data/lib/yard/handlers/processor.rb +200 -200
- data/lib/yard/handlers/ruby/alias_handler.rb +44 -44
- data/lib/yard/handlers/ruby/attribute_handler.rb +87 -87
- data/lib/yard/handlers/ruby/base.rb +165 -165
- data/lib/yard/handlers/ruby/class_condition_handler.rb +92 -92
- data/lib/yard/handlers/ruby/class_handler.rb +119 -119
- data/lib/yard/handlers/ruby/class_variable_handler.rb +17 -17
- data/lib/yard/handlers/ruby/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/constant_handler.rb +59 -59
- data/lib/yard/handlers/ruby/decorator_handler_methods.rb +123 -123
- data/lib/yard/handlers/ruby/dsl_handler.rb +15 -15
- data/lib/yard/handlers/ruby/dsl_handler_methods.rb +96 -95
- data/lib/yard/handlers/ruby/exception_handler.rb +27 -27
- data/lib/yard/handlers/ruby/extend_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/alias_handler.rb +37 -37
- data/lib/yard/handlers/ruby/legacy/attribute_handler.rb +65 -65
- data/lib/yard/handlers/ruby/legacy/base.rb +245 -245
- data/lib/yard/handlers/ruby/legacy/class_condition_handler.rb +83 -83
- data/lib/yard/handlers/ruby/legacy/class_handler.rb +113 -113
- data/lib/yard/handlers/ruby/legacy/class_variable_handler.rb +15 -15
- data/lib/yard/handlers/ruby/legacy/comment_handler.rb +10 -10
- data/lib/yard/handlers/ruby/legacy/constant_handler.rb +29 -29
- data/lib/yard/handlers/ruby/legacy/dsl_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/exception_handler.rb +13 -13
- data/lib/yard/handlers/ruby/legacy/extend_handler.rb +21 -21
- data/lib/yard/handlers/ruby/legacy/method_handler.rb +90 -90
- data/lib/yard/handlers/ruby/legacy/mixin_handler.rb +39 -39
- data/lib/yard/handlers/ruby/legacy/module_function_handler.rb +19 -19
- data/lib/yard/handlers/ruby/legacy/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/legacy/private_class_method_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/private_constant_handler.rb +22 -22
- data/lib/yard/handlers/ruby/legacy/visibility_handler.rb +17 -17
- data/lib/yard/handlers/ruby/legacy/yield_handler.rb +29 -29
- data/lib/yard/handlers/ruby/method_condition_handler.rb +9 -9
- data/lib/yard/handlers/ruby/method_handler.rb +118 -118
- data/lib/yard/handlers/ruby/mixin_handler.rb +37 -37
- data/lib/yard/handlers/ruby/module_function_handler.rb +27 -27
- data/lib/yard/handlers/ruby/module_handler.rb +12 -12
- data/lib/yard/handlers/ruby/private_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/private_constant_handler.rb +43 -43
- data/lib/yard/handlers/ruby/public_class_method_handler.rb +14 -14
- data/lib/yard/handlers/ruby/struct_handler_methods.rb +143 -143
- data/lib/yard/handlers/ruby/visibility_handler.rb +22 -22
- data/lib/yard/handlers/ruby/yield_handler.rb +31 -31
- data/lib/yard/i18n/locale.rb +67 -67
- data/lib/yard/i18n/message.rb +57 -57
- data/lib/yard/i18n/messages.rb +56 -56
- data/lib/yard/i18n/po_parser.rb +61 -61
- data/lib/yard/i18n/pot_generator.rb +290 -290
- data/lib/yard/i18n/text.rb +173 -173
- data/lib/yard/logging.rb +205 -205
- data/lib/yard/options.rb +217 -217
- data/lib/yard/parser/base.rb +57 -57
- data/lib/yard/parser/c/c_parser.rb +235 -235
- data/lib/yard/parser/c/comment_parser.rb +134 -134
- data/lib/yard/parser/c/statement.rb +64 -64
- data/lib/yard/parser/ruby/ast_node.rb +540 -540
- data/lib/yard/parser/ruby/legacy/ruby_lex.rb +1354 -1354
- data/lib/yard/parser/ruby/legacy/ruby_parser.rb +32 -32
- data/lib/yard/parser/ruby/legacy/statement.rb +66 -66
- data/lib/yard/parser/ruby/legacy/statement_list.rb +394 -394
- data/lib/yard/parser/ruby/legacy/token_list.rb +74 -74
- data/lib/yard/parser/ruby/ruby_parser.rb +687 -687
- data/lib/yard/parser/ruby/token_resolver.rb +156 -156
- data/lib/yard/parser/source_parser.rb +526 -526
- data/lib/yard/rake/yardoc_task.rb +81 -81
- data/lib/yard/registry.rb +439 -439
- data/lib/yard/registry_resolver.rb +189 -189
- data/lib/yard/registry_store.rb +337 -337
- data/lib/yard/rubygems/backports.rb +10 -10
- data/lib/yard/rubygems/backports/LICENSE.txt +57 -57
- data/lib/yard/rubygems/backports/MIT.txt +20 -20
- data/lib/yard/rubygems/backports/gem.rb +10 -10
- data/lib/yard/rubygems/backports/source_index.rb +365 -365
- data/lib/yard/rubygems/doc_manager.rb +90 -90
- data/lib/yard/rubygems/hook.rb +197 -197
- data/lib/yard/rubygems/specification.rb +50 -50
- data/lib/yard/serializers/base.rb +83 -83
- data/lib/yard/serializers/file_system_serializer.rb +123 -123
- data/lib/yard/serializers/process_serializer.rb +24 -24
- data/lib/yard/serializers/stdout_serializer.rb +34 -34
- data/lib/yard/serializers/yardoc_serializer.rb +152 -152
- data/lib/yard/server.rb +13 -13
- data/lib/yard/server/adapter.rb +100 -100
- data/lib/yard/server/commands/base.rb +209 -209
- data/lib/yard/server/commands/display_file_command.rb +29 -29
- data/lib/yard/server/commands/display_object_command.rb +65 -65
- data/lib/yard/server/commands/frames_command.rb +16 -16
- data/lib/yard/server/commands/library_command.rb +187 -187
- data/lib/yard/server/commands/library_index_command.rb +28 -28
- data/lib/yard/server/commands/list_command.rb +25 -25
- data/lib/yard/server/commands/root_request_command.rb +15 -15
- data/lib/yard/server/commands/search_command.rb +79 -79
- data/lib/yard/server/commands/static_file_command.rb +23 -23
- data/lib/yard/server/commands/static_file_helpers.rb +62 -62
- data/lib/yard/server/doc_server_helper.rb +91 -91
- data/lib/yard/server/doc_server_serializer.rb +39 -39
- data/lib/yard/server/library_version.rb +277 -277
- data/lib/yard/server/rack_adapter.rb +89 -89
- data/lib/yard/server/router.rb +187 -187
- data/lib/yard/server/static_caching.rb +46 -46
- data/lib/yard/server/templates/default/fulldoc/html/css/custom.css +127 -127
- data/lib/yard/server/templates/default/fulldoc/html/js/autocomplete.js +11 -11
- data/lib/yard/server/templates/default/layout/html/breadcrumb.erb +37 -37
- data/lib/yard/server/templates/default/layout/html/script_setup.erb +7 -7
- data/lib/yard/server/templates/default/layout/html/setup.rb +8 -8
- data/lib/yard/server/templates/default/method_details/html/permalink.erb +4 -4
- data/lib/yard/server/templates/default/method_details/html/setup.rb +5 -5
- data/lib/yard/server/templates/doc_server/library_list/html/headers.erb +8 -8
- data/lib/yard/server/templates/doc_server/library_list/html/library_list.erb +14 -14
- data/lib/yard/server/templates/doc_server/library_list/html/listing.erb +13 -13
- data/lib/yard/server/templates/doc_server/library_list/html/setup.rb +6 -6
- data/lib/yard/server/templates/doc_server/library_list/html/title.erb +2 -2
- data/lib/yard/server/templates/doc_server/processing/html/processing.erb +52 -52
- data/lib/yard/server/templates/doc_server/processing/html/setup.rb +4 -4
- data/lib/yard/server/templates/doc_server/search/html/search.erb +18 -18
- data/lib/yard/server/templates/doc_server/search/html/setup.rb +9 -9
- data/lib/yard/server/webrick_adapter.rb +45 -45
- data/lib/yard/tags/default_factory.rb +191 -191
- data/lib/yard/tags/default_tag.rb +13 -13
- data/lib/yard/tags/directives.rb +616 -616
- data/lib/yard/tags/library.rb +633 -633
- data/lib/yard/tags/option_tag.rb +13 -13
- data/lib/yard/tags/overload_tag.rb +71 -71
- data/lib/yard/tags/ref_tag.rb +8 -8
- data/lib/yard/tags/ref_tag_list.rb +28 -28
- data/lib/yard/tags/tag.rb +71 -71
- data/lib/yard/tags/tag_format_error.rb +7 -7
- data/lib/yard/tags/types_explainer.rb +162 -162
- data/lib/yard/templates/engine.rb +186 -186
- data/lib/yard/templates/erb_cache.rb +23 -23
- data/lib/yard/templates/helpers/base_helper.rb +215 -215
- data/lib/yard/templates/helpers/filter_helper.rb +27 -27
- data/lib/yard/templates/helpers/html_helper.rb +646 -642
- data/lib/yard/templates/helpers/html_syntax_highlight_helper.rb +78 -78
- data/lib/yard/templates/helpers/markup/rdoc_markdown.rb +23 -23
- data/lib/yard/templates/helpers/markup/rdoc_markup.rb +109 -109
- data/lib/yard/templates/helpers/markup_helper.rb +172 -172
- data/lib/yard/templates/helpers/method_helper.rb +75 -75
- data/lib/yard/templates/helpers/module_helper.rb +21 -21
- data/lib/yard/templates/helpers/text_helper.rb +112 -112
- data/lib/yard/templates/helpers/uml_helper.rb +47 -47
- data/lib/yard/templates/section.rb +105 -105
- data/lib/yard/templates/template.rb +418 -418
- data/lib/yard/templates/template_options.rb +92 -92
- data/lib/yard/verifier.rb +151 -151
- data/lib/yard/version.rb +3 -1
- data/spec/cli/command_parser_spec.rb +43 -43
- data/spec/cli/command_spec.rb +36 -36
- data/spec/cli/config_spec.rb +148 -148
- data/spec/cli/diff_spec.rb +254 -254
- data/spec/cli/display_spec.rb +30 -30
- data/spec/cli/gems_spec.rb +81 -81
- data/spec/cli/graph_spec.rb +18 -18
- data/spec/cli/help_spec.rb +22 -22
- data/spec/cli/i18n_spec.rb +107 -107
- data/spec/cli/list_spec.rb +8 -8
- data/spec/cli/markup_types_spec.rb +22 -22
- data/spec/cli/server_spec.rb +324 -324
- data/spec/cli/stats_spec.rb +96 -96
- data/spec/cli/yard_on_yard_spec.rb +38 -38
- data/spec/cli/yardoc_spec.rb +862 -849
- data/spec/cli/yri_spec.rb +101 -101
- data/spec/code_objects/base_spec.rb +470 -460
- data/spec/code_objects/class_object_spec.rb +226 -226
- data/spec/code_objects/code_object_list_spec.rb +36 -36
- data/spec/code_objects/constants_spec.rb +116 -116
- data/spec/code_objects/extra_file_object_spec.rb +160 -160
- data/spec/code_objects/macro_object_spec.rb +150 -150
- data/spec/code_objects/method_object_spec.rb +184 -184
- data/spec/code_objects/module_object_spec.rb +142 -142
- data/spec/code_objects/namespace_object_spec.rb +171 -171
- data/spec/code_objects/proxy_spec.rb +141 -141
- data/spec/code_objects/spec_helper.rb +3 -3
- data/spec/config_spec.rb +171 -171
- data/spec/core_ext/array_spec.rb +13 -13
- data/spec/core_ext/file_spec.rb +72 -72
- data/spec/core_ext/hash_spec.rb +14 -14
- data/spec/core_ext/insertion_spec.rb +37 -37
- data/spec/core_ext/module_spec.rb +15 -15
- data/spec/core_ext/string_spec.rb +42 -42
- data/spec/core_ext/symbol_hash_spec.rb +89 -89
- data/spec/docstring_parser_spec.rb +280 -262
- data/spec/docstring_spec.rb +373 -364
- data/spec/examples.txt +1875 -1871
- data/spec/handlers/alias_handler_spec.rb +82 -82
- data/spec/handlers/attribute_handler_spec.rb +96 -96
- data/spec/handlers/base_spec.rb +216 -216
- data/spec/handlers/c/alias_handler_spec.rb +34 -34
- data/spec/handlers/c/attribute_handler_spec.rb +41 -41
- data/spec/handlers/c/class_handler_spec.rb +78 -78
- data/spec/handlers/c/constant_handler_spec.rb +71 -71
- data/spec/handlers/c/init_handler_spec.rb +48 -48
- data/spec/handlers/c/method_handler_spec.rb +325 -325
- data/spec/handlers/c/mixin_handler_spec.rb +44 -44
- data/spec/handlers/c/module_handler_spec.rb +71 -71
- data/spec/handlers/c/override_comment_handler_spec.rb +47 -47
- data/spec/handlers/c/path_handler_spec.rb +36 -36
- data/spec/handlers/c/spec_helper.rb +23 -23
- data/spec/handlers/c/struct_handler_spec.rb +16 -16
- data/spec/handlers/class_condition_handler_spec.rb +87 -87
- data/spec/handlers/class_handler_spec.rb +247 -247
- data/spec/handlers/class_method_handler_shared_examples.rb +133 -133
- data/spec/handlers/class_variable_handler_spec.rb +12 -12
- data/spec/handlers/constant_handler_spec.rb +112 -112
- data/spec/handlers/decorator_handler_methods_spec.rb +393 -393
- data/spec/handlers/dsl_handler_spec.rb +219 -219
- data/spec/handlers/examples/alias_handler_001.rb.txt +45 -45
- data/spec/handlers/examples/attribute_handler_001.rb.txt +31 -31
- data/spec/handlers/examples/class_condition_handler_001.rb.txt +68 -68
- data/spec/handlers/examples/class_handler_001.rb.txt +120 -120
- data/spec/handlers/examples/class_variable_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/constant_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/dsl_handler_001.rb.txt +154 -154
- data/spec/handlers/examples/exception_handler_001.rb.txt +58 -58
- data/spec/handlers/examples/extend_handler_001.rb.txt +15 -15
- data/spec/handlers/examples/method_condition_handler_001.rb.txt +9 -9
- data/spec/handlers/examples/method_handler_001.rb.txt +128 -128
- data/spec/handlers/examples/mixin_handler_001.rb.txt +37 -37
- data/spec/handlers/examples/module_handler_001.rb.txt +29 -29
- data/spec/handlers/examples/private_constant_handler_001.rb.txt +8 -8
- data/spec/handlers/examples/process_handler_001.rb.txt +11 -11
- data/spec/handlers/examples/visibility_handler_001.rb.txt +35 -35
- data/spec/handlers/examples/yield_handler_001.rb.txt +54 -54
- data/spec/handlers/exception_handler_spec.rb +49 -49
- data/spec/handlers/extend_handler_spec.rb +24 -24
- data/spec/handlers/legacy_base_spec.rb +128 -128
- data/spec/handlers/method_condition_handler_spec.rb +15 -15
- data/spec/handlers/method_handler_spec.rb +190 -190
- data/spec/handlers/mixin_handler_spec.rb +56 -56
- data/spec/handlers/module_function_handler_spec.rb +106 -106
- data/spec/handlers/module_handler_spec.rb +35 -35
- data/spec/handlers/private_class_method_handler_spec.rb +11 -11
- data/spec/handlers/private_constant_handler_spec.rb +25 -25
- data/spec/handlers/processor_spec.rb +35 -35
- data/spec/handlers/public_class_method_handler_spec.rb +11 -11
- data/spec/handlers/ruby/base_spec.rb +95 -95
- data/spec/handlers/ruby/legacy/base_spec.rb +84 -84
- data/spec/handlers/spec_helper.rb +33 -33
- data/spec/handlers/visibility_handler_spec.rb +44 -44
- data/spec/handlers/yield_handler_spec.rb +52 -52
- data/spec/i18n/locale_spec.rb +81 -81
- data/spec/i18n/message_spec.rb +52 -52
- data/spec/i18n/messages_spec.rb +67 -67
- data/spec/i18n/pot_generator_spec.rb +295 -295
- data/spec/i18n/text_spec.rb +184 -184
- data/spec/logging_spec.rb +44 -44
- data/spec/options_spec.rb +171 -171
- data/spec/parser/base_spec.rb +24 -24
- data/spec/parser/c_parser_spec.rb +236 -223
- data/spec/parser/examples/array.c.txt +6267 -6267
- data/spec/parser/examples/example1.rb.txt +7 -7
- data/spec/parser/examples/extrafile.c.txt +8 -8
- data/spec/parser/examples/file.c.txt +28 -0
- data/spec/parser/examples/multifile.c.txt +22 -22
- data/spec/parser/examples/namespace.cpp.txt +68 -68
- data/spec/parser/examples/override.c.txt +424 -424
- data/spec/parser/examples/parse_in_order_001.rb.txt +2 -2
- data/spec/parser/examples/parse_in_order_002.rb.txt +1 -1
- data/spec/parser/examples/tag_handler_001.rb.txt +7 -7
- data/spec/parser/ruby/ast_node_spec.rb +33 -33
- data/spec/parser/ruby/legacy/statement_list_spec.rb +299 -299
- data/spec/parser/ruby/legacy/token_list_spec.rb +79 -79
- data/spec/parser/ruby/ruby_parser_spec.rb +508 -508
- data/spec/parser/ruby/token_resolver_spec.rb +165 -165
- data/spec/parser/source_parser_spec.rb +727 -727
- data/spec/parser/tag_parsing_spec.rb +17 -17
- data/spec/rake/yardoc_task_spec.rb +118 -118
- data/spec/registry_spec.rb +463 -463
- data/spec/registry_store_spec.rb +316 -316
- data/spec/rubygems/doc_manager_spec.rb +112 -112
- data/spec/serializers/data/serialized_yardoc/checksums +1 -1
- data/spec/serializers/file_system_serializer_spec.rb +145 -145
- data/spec/serializers/spec_helper.rb +2 -2
- data/spec/serializers/yardoc_serializer_spec.rb +78 -78
- data/spec/server/adapter_spec.rb +39 -39
- data/spec/server/commands/base_spec.rb +91 -91
- data/spec/server/commands/library_command_spec.rb +39 -39
- data/spec/server/doc_server_helper_spec.rb +72 -72
- data/spec/server/doc_server_serializer_spec.rb +60 -60
- data/spec/server/rack_adapter_spec.rb +21 -21
- data/spec/server/router_spec.rb +123 -123
- data/spec/server/spec_helper.rb +22 -22
- data/spec/server/static_caching_spec.rb +47 -47
- data/spec/server/webrick_servlet_spec.rb +20 -20
- data/spec/server_spec.rb +19 -19
- data/spec/spec_helper.rb +212 -212
- data/spec/tags/default_factory_spec.rb +168 -168
- data/spec/tags/default_tag_spec.rb +11 -11
- data/spec/tags/directives_spec.rb +463 -463
- data/spec/tags/library_spec.rb +48 -48
- data/spec/tags/overload_tag_spec.rb +53 -53
- data/spec/tags/ref_tag_list_spec.rb +53 -53
- data/spec/tags/types_explainer_spec.rb +203 -203
- data/spec/templates/class_spec.rb +45 -45
- data/spec/templates/constant_spec.rb +41 -41
- data/spec/templates/engine_spec.rb +131 -131
- data/spec/templates/examples/class001.html +308 -308
- data/spec/templates/examples/class001.txt +36 -36
- data/spec/templates/examples/class002.html +39 -39
- data/spec/templates/examples/constant001.txt +24 -24
- data/spec/templates/examples/constant002.txt +6 -6
- data/spec/templates/examples/constant003.txt +10 -10
- data/spec/templates/examples/method001.html +137 -137
- data/spec/templates/examples/method001.txt +35 -35
- data/spec/templates/examples/method002.html +91 -91
- data/spec/templates/examples/method002.txt +20 -20
- data/spec/templates/examples/method003.html +165 -165
- data/spec/templates/examples/method003.txt +45 -45
- data/spec/templates/examples/method004.html +48 -48
- data/spec/templates/examples/method004.txt +10 -10
- data/spec/templates/examples/method005.html +105 -105
- data/spec/templates/examples/method005.txt +33 -33
- data/spec/templates/examples/method006.html +107 -107
- data/spec/templates/examples/method006.txt +20 -20
- data/spec/templates/examples/module001.dot +33 -33
- data/spec/templates/examples/module001.html +833 -833
- data/spec/templates/examples/module001.txt +33 -33
- data/spec/templates/examples/module002.html +341 -341
- data/spec/templates/examples/module003.html +202 -202
- data/spec/templates/examples/module004.html +394 -394
- data/spec/templates/examples/module005.html +81 -81
- data/spec/templates/examples/tag001.txt +82 -82
- data/spec/templates/helpers/base_helper_spec.rb +171 -171
- data/spec/templates/helpers/html_helper_spec.rb +668 -653
- data/spec/templates/helpers/html_syntax_highlight_helper_spec.rb +65 -65
- data/spec/templates/helpers/markup/rdoc_markup_spec.rb +84 -84
- data/spec/templates/helpers/markup_helper_spec.rb +136 -136
- data/spec/templates/helpers/method_helper_spec.rb +107 -107
- data/spec/templates/helpers/module_helper_spec.rb +35 -35
- data/spec/templates/helpers/shared_signature_examples.rb +126 -126
- data/spec/templates/helpers/text_helper_spec.rb +65 -65
- data/spec/templates/method_spec.rb +118 -118
- data/spec/templates/module_spec.rb +203 -203
- data/spec/templates/onefile_spec.rb +66 -66
- data/spec/templates/section_spec.rb +144 -144
- data/spec/templates/spec_helper.rb +76 -76
- data/spec/templates/tag_spec.rb +52 -52
- data/spec/templates/template_spec.rb +410 -410
- data/spec/verifier_spec.rb +106 -106
- data/templates/default/class/dot/setup.rb +7 -7
- data/templates/default/class/dot/superklass.erb +2 -2
- data/templates/default/class/html/constructor_details.erb +8 -8
- data/templates/default/class/html/setup.rb +2 -2
- data/templates/default/class/html/subclasses.erb +4 -4
- data/templates/default/class/setup.rb +36 -36
- data/templates/default/class/text/setup.rb +12 -12
- data/templates/default/class/text/subclasses.erb +5 -5
- data/templates/default/constant/text/header.erb +11 -11
- data/templates/default/constant/text/setup.rb +4 -4
- data/templates/default/docstring/html/abstract.erb +4 -4
- data/templates/default/docstring/html/deprecated.erb +1 -1
- data/templates/default/docstring/html/index.erb +5 -5
- data/templates/default/docstring/html/note.erb +6 -6
- data/templates/default/docstring/html/private.erb +4 -4
- data/templates/default/docstring/html/text.erb +1 -1
- data/templates/default/docstring/html/todo.erb +6 -6
- data/templates/default/docstring/setup.rb +52 -52
- data/templates/default/docstring/text/abstract.erb +2 -2
- data/templates/default/docstring/text/deprecated.erb +2 -2
- data/templates/default/docstring/text/index.erb +2 -2
- data/templates/default/docstring/text/note.erb +3 -3
- data/templates/default/docstring/text/private.erb +2 -2
- data/templates/default/docstring/text/text.erb +1 -1
- data/templates/default/docstring/text/todo.erb +3 -3
- data/templates/default/fulldoc/html/css/full_list.css +58 -58
- data/templates/default/fulldoc/html/css/style.css +496 -496
- data/templates/default/fulldoc/html/frames.erb +17 -17
- data/templates/default/fulldoc/html/full_list.erb +37 -37
- data/templates/default/fulldoc/html/full_list_class.erb +2 -2
- data/templates/default/fulldoc/html/full_list_file.erb +7 -7
- data/templates/default/fulldoc/html/full_list_method.erb +10 -10
- data/templates/default/fulldoc/html/js/app.js +292 -292
- data/templates/default/fulldoc/html/js/full_list.js +216 -216
- data/templates/default/fulldoc/html/js/jquery.js +3 -3
- data/templates/default/fulldoc/html/setup.rb +241 -241
- data/templates/default/layout/dot/header.erb +5 -5
- data/templates/default/layout/dot/setup.rb +15 -15
- data/templates/default/layout/html/breadcrumb.erb +11 -11
- data/templates/default/layout/html/files.erb +11 -11
- data/templates/default/layout/html/footer.erb +5 -5
- data/templates/default/layout/html/headers.erb +15 -15
- data/templates/default/layout/html/index.erb +2 -2
- data/templates/default/layout/html/layout.erb +23 -23
- data/templates/default/layout/html/listing.erb +4 -4
- data/templates/default/layout/html/objects.erb +32 -32
- data/templates/default/layout/html/script_setup.erb +4 -4
- data/templates/default/layout/html/search.erb +12 -12
- data/templates/default/layout/html/setup.rb +89 -89
- data/templates/default/method/html/header.erb +16 -16
- data/templates/default/method/setup.rb +4 -4
- data/templates/default/method_details/html/header.erb +2 -2
- data/templates/default/method_details/html/method_signature.erb +24 -24
- data/templates/default/method_details/html/source.erb +9 -9
- data/templates/default/method_details/setup.rb +11 -11
- data/templates/default/method_details/text/header.erb +10 -10
- data/templates/default/method_details/text/method_signature.erb +12 -12
- data/templates/default/method_details/text/setup.rb +11 -11
- data/templates/default/module/dot/child.erb +1 -1
- data/templates/default/module/dot/dependencies.erb +2 -2
- data/templates/default/module/dot/header.erb +6 -6
- data/templates/default/module/dot/info.erb +13 -13
- data/templates/default/module/dot/setup.rb +15 -15
- data/templates/default/module/html/attribute_details.erb +10 -10
- data/templates/default/module/html/attribute_summary.erb +8 -8
- data/templates/default/module/html/box_info.erb +43 -43
- data/templates/default/module/html/children.erb +8 -8
- data/templates/default/module/html/constant_summary.erb +17 -17
- data/templates/default/module/html/defines.erb +2 -2
- data/templates/default/module/html/header.erb +5 -5
- data/templates/default/module/html/inherited_attributes.erb +14 -14
- data/templates/default/module/html/inherited_constants.erb +8 -8
- data/templates/default/module/html/inherited_methods.erb +18 -18
- data/templates/default/module/html/item_summary.erb +40 -40
- data/templates/default/module/html/method_details_list.erb +9 -9
- data/templates/default/module/html/method_summary.erb +13 -13
- data/templates/default/module/html/methodmissing.erb +12 -12
- data/templates/default/module/setup.rb +167 -167
- data/templates/default/module/text/children.erb +9 -9
- data/templates/default/module/text/class_meths_list.erb +7 -7
- data/templates/default/module/text/extends.erb +7 -7
- data/templates/default/module/text/header.erb +7 -7
- data/templates/default/module/text/includes.erb +7 -7
- data/templates/default/module/text/instance_meths_list.erb +7 -7
- data/templates/default/module/text/setup.rb +13 -13
- data/templates/default/onefile/html/files.erb +4 -4
- data/templates/default/onefile/html/headers.erb +6 -6
- data/templates/default/onefile/html/layout.erb +17 -17
- data/templates/default/onefile/html/readme.erb +2 -2
- data/templates/default/onefile/html/setup.rb +62 -62
- data/templates/default/root/dot/child.erb +2 -2
- data/templates/default/root/dot/setup.rb +6 -6
- data/templates/default/root/html/setup.rb +2 -2
- data/templates/default/tags/html/example.erb +10 -10
- data/templates/default/tags/html/index.erb +2 -2
- data/templates/default/tags/html/option.erb +24 -24
- data/templates/default/tags/html/overload.erb +13 -13
- data/templates/default/tags/html/see.erb +7 -7
- data/templates/default/tags/html/tag.erb +20 -20
- data/templates/default/tags/setup.rb +57 -57
- data/templates/default/tags/text/example.erb +12 -12
- data/templates/default/tags/text/index.erb +1 -1
- data/templates/default/tags/text/option.erb +20 -20
- data/templates/default/tags/text/overload.erb +19 -19
- data/templates/default/tags/text/see.erb +11 -11
- data/templates/default/tags/text/tag.erb +13 -13
- data/templates/guide/class/html/setup.rb +2 -2
- data/templates/guide/docstring/html/setup.rb +2 -2
- data/templates/guide/fulldoc/html/css/style.css +108 -108
- data/templates/guide/fulldoc/html/js/app.js +33 -33
- data/templates/guide/fulldoc/html/setup.rb +74 -74
- data/templates/guide/layout/html/layout.erb +81 -81
- data/templates/guide/layout/html/setup.rb +25 -25
- data/templates/guide/method/html/header.erb +17 -17
- data/templates/guide/method/html/setup.rb +22 -22
- data/templates/guide/module/html/header.erb +6 -6
- data/templates/guide/module/html/method_list.erb +4 -4
- data/templates/guide/module/html/setup.rb +27 -27
- data/templates/guide/onefile/html/files.erb +4 -4
- data/templates/guide/onefile/html/setup.rb +6 -6
- data/templates/guide/onefile/html/toc.erb +3 -3
- data/templates/guide/tags/html/setup.rb +9 -9
- data/yard.gemspec +43 -43
- metadata +4 -4
@@ -1,27 +1,27 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
module YARD
|
3
|
-
module Templates::Helpers
|
4
|
-
# Helpers for various object types
|
5
|
-
module FilterHelper
|
6
|
-
# @return [Boolean] whether an object is a method
|
7
|
-
def is_method?(object)
|
8
|
-
object.type == :method
|
9
|
-
end
|
10
|
-
|
11
|
-
# @return [Boolean] whether an object is a namespace
|
12
|
-
def is_namespace?(object)
|
13
|
-
object.is_a?(CodeObjects::NamespaceObject)
|
14
|
-
end
|
15
|
-
|
16
|
-
# @return [Boolean] whether an object is a class
|
17
|
-
def is_class?(object)
|
18
|
-
object.is_a?(CodeObjects::ClassObject)
|
19
|
-
end
|
20
|
-
|
21
|
-
# @return [Boolean] whether an object is a module
|
22
|
-
def is_module?(object)
|
23
|
-
object.is_a?(CodeObjects::ModuleObject)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module YARD
|
3
|
+
module Templates::Helpers
|
4
|
+
# Helpers for various object types
|
5
|
+
module FilterHelper
|
6
|
+
# @return [Boolean] whether an object is a method
|
7
|
+
def is_method?(object)
|
8
|
+
object.type == :method
|
9
|
+
end
|
10
|
+
|
11
|
+
# @return [Boolean] whether an object is a namespace
|
12
|
+
def is_namespace?(object)
|
13
|
+
object.is_a?(CodeObjects::NamespaceObject)
|
14
|
+
end
|
15
|
+
|
16
|
+
# @return [Boolean] whether an object is a class
|
17
|
+
def is_class?(object)
|
18
|
+
object.is_a?(CodeObjects::ClassObject)
|
19
|
+
end
|
20
|
+
|
21
|
+
# @return [Boolean] whether an object is a module
|
22
|
+
def is_module?(object)
|
23
|
+
object.is_a?(CodeObjects::ModuleObject)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,642 +1,646 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'cgi'
|
3
|
-
|
4
|
-
module YARD
|
5
|
-
module Templates::Helpers
|
6
|
-
# The helper module for HTML templates.
|
7
|
-
module HtmlHelper
|
8
|
-
include MarkupHelper
|
9
|
-
include HtmlSyntaxHighlightHelper
|
10
|
-
|
11
|
-
# @private
|
12
|
-
URLMATCH = /[^\w\s~!\*'\(\):;@&=\$,\[\]<>-]/
|
13
|
-
|
14
|
-
# @
|
15
|
-
|
16
|
-
|
17
|
-
#
|
18
|
-
|
19
|
-
#
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
#
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
#
|
50
|
-
|
51
|
-
#
|
52
|
-
#
|
53
|
-
# @
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
#
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
#
|
166
|
-
#
|
167
|
-
#
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
# @
|
182
|
-
|
183
|
-
#
|
184
|
-
#
|
185
|
-
# @
|
186
|
-
#
|
187
|
-
#
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
#
|
208
|
-
|
209
|
-
#
|
210
|
-
#
|
211
|
-
#
|
212
|
-
# @
|
213
|
-
#
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
next
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
title = h(object.
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
params
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
when CodeObjects::
|
340
|
-
"#{object.name}-#{object.type}"
|
341
|
-
when CodeObjects::
|
342
|
-
object.
|
343
|
-
|
344
|
-
object.
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
#
|
353
|
-
#
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
#
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
#
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
#
|
455
|
-
#
|
456
|
-
#
|
457
|
-
#
|
458
|
-
#
|
459
|
-
#
|
460
|
-
#
|
461
|
-
#
|
462
|
-
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
467
|
-
|
468
|
-
|
469
|
-
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
#
|
477
|
-
#
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
491
|
-
|
492
|
-
|
493
|
-
type =
|
494
|
-
elsif types ==
|
495
|
-
type =
|
496
|
-
|
497
|
-
type =
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
type
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
509
|
-
|
510
|
-
#
|
511
|
-
#
|
512
|
-
# @param [
|
513
|
-
#
|
514
|
-
# @
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
#
|
556
|
-
|
557
|
-
#
|
558
|
-
#
|
559
|
-
#
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
#
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
605
|
-
|
606
|
-
|
607
|
-
#
|
608
|
-
#
|
609
|
-
#
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
#
|
625
|
-
#
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'cgi'
|
3
|
+
|
4
|
+
module YARD
|
5
|
+
module Templates::Helpers
|
6
|
+
# The helper module for HTML templates.
|
7
|
+
module HtmlHelper
|
8
|
+
include MarkupHelper
|
9
|
+
include HtmlSyntaxHighlightHelper
|
10
|
+
|
11
|
+
# @private
|
12
|
+
URLMATCH = /[^\w\s~!\*'\(\):;@&=\$,\[\]<>-]/
|
13
|
+
|
14
|
+
# @private
|
15
|
+
ASCIIDOC_ATTRIBUTES = {"env" => "yard", "env-yard" => ""}.freeze
|
16
|
+
|
17
|
+
# @group Escaping Template Data
|
18
|
+
|
19
|
+
# Escapes HTML entities
|
20
|
+
#
|
21
|
+
# @param [String] text the text to escape
|
22
|
+
# @return [String] the HTML with escaped entities
|
23
|
+
def h(text)
|
24
|
+
CGI.escapeHTML(text.to_s)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Escapes a URL
|
28
|
+
#
|
29
|
+
# @param [String] text the URL
|
30
|
+
# @return [String] the escaped URL
|
31
|
+
def urlencode(text)
|
32
|
+
text = text.dup
|
33
|
+
enc = nil
|
34
|
+
if text.respond_to?(:force_encoding)
|
35
|
+
enc = text.encoding
|
36
|
+
text = text.force_encoding('binary')
|
37
|
+
end
|
38
|
+
|
39
|
+
text = text.gsub(/%[a-z0-9]{2}|#{URLMATCH}/i) do
|
40
|
+
$&.size > 1 ? $& : "%" + $&.ord.to_s(16).upcase
|
41
|
+
end.tr(' ', '+')
|
42
|
+
|
43
|
+
text = text.force_encoding(enc) if enc
|
44
|
+
text
|
45
|
+
end
|
46
|
+
|
47
|
+
module_function :urlencode
|
48
|
+
|
49
|
+
# @group Converting Markup to HTML
|
50
|
+
|
51
|
+
# Turns text into HTML using +markup+ style formatting.
|
52
|
+
#
|
53
|
+
# @param [String] text the text to format
|
54
|
+
# @param [Symbol] markup examples are +:markdown+, +:textile+, +:rdoc+.
|
55
|
+
# To add a custom markup type, see {MarkupHelper}
|
56
|
+
# @return [String] the HTML
|
57
|
+
def htmlify(text, markup = options.markup)
|
58
|
+
markup_meth = "html_markup_#{markup}"
|
59
|
+
return text unless respond_to?(markup_meth)
|
60
|
+
return "" unless text
|
61
|
+
return text unless markup
|
62
|
+
html = send(markup_meth, text).dup
|
63
|
+
if html.respond_to?(:encode)
|
64
|
+
html = html.force_encoding(text.encoding) # for libs that mess with encoding
|
65
|
+
html = html.encode(:invalid => :replace, :replace => '?')
|
66
|
+
end
|
67
|
+
html = resolve_links(html)
|
68
|
+
unless [:text, :none, :pre].include?(markup)
|
69
|
+
html = parse_codeblocks(html)
|
70
|
+
end
|
71
|
+
html
|
72
|
+
end
|
73
|
+
|
74
|
+
# Converts Markdown to HTML
|
75
|
+
# @param [String] text input Markdown text
|
76
|
+
# @return [String] output HTML
|
77
|
+
# @since 0.6.0
|
78
|
+
def html_markup_markdown(text)
|
79
|
+
# TODO: other libraries might be more complex
|
80
|
+
provider = markup_class(:markdown)
|
81
|
+
if provider.to_s == 'RDiscount'
|
82
|
+
provider.new(text, :autolink).to_html
|
83
|
+
elsif provider.to_s == 'RedcarpetCompat'
|
84
|
+
provider.new(text, :no_intraemphasis, :gh_blockcode,
|
85
|
+
:fenced_code, :autolink, :tables,
|
86
|
+
:lax_spacing).to_html
|
87
|
+
else
|
88
|
+
provider.new(text).to_html
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
# Converts org-mode to HTML
|
93
|
+
# @param [String] text input org-mode text
|
94
|
+
# @return [String] output HTML
|
95
|
+
def html_markup_org(text)
|
96
|
+
markup_class(:org).new(text).to_html
|
97
|
+
end
|
98
|
+
|
99
|
+
# Converts Asciidoc to HTML
|
100
|
+
# @param [String] text input Asciidoc text
|
101
|
+
# @return [String] output HTML
|
102
|
+
def html_markup_asciidoc(text)
|
103
|
+
options = {:attributes => ASCIIDOC_ATTRIBUTES}
|
104
|
+
markup_class(:asciidoc).render(text, options)
|
105
|
+
end
|
106
|
+
|
107
|
+
# Converts Textile to HTML
|
108
|
+
# @param [String] text the input Textile text
|
109
|
+
# @return [String] output HTML
|
110
|
+
# @since 0.6.0
|
111
|
+
def html_markup_textile(text)
|
112
|
+
doc = markup_class(:textile).new(text)
|
113
|
+
doc.hard_breaks = false if doc.respond_to?(:hard_breaks=)
|
114
|
+
doc.to_html
|
115
|
+
end
|
116
|
+
|
117
|
+
# Converts plaintext to strict Textile (hard breaks)
|
118
|
+
# @param [String] text the input textile data
|
119
|
+
# @return [String] the output HTML
|
120
|
+
# @since 0.6.0
|
121
|
+
def html_markup_textile_strict(text)
|
122
|
+
markup_class(:textile).new(text).to_html
|
123
|
+
end
|
124
|
+
|
125
|
+
# Converts RDoc formatting (SimpleMarkup) to HTML
|
126
|
+
# @param [String] text the input RDoc formatted text
|
127
|
+
# @return [String] output HTML
|
128
|
+
# @since 0.6.0
|
129
|
+
def html_markup_rdoc(text)
|
130
|
+
doc = markup_class(:rdoc).new(text)
|
131
|
+
doc.from_path = url_for(object) if doc.respond_to?(:from_path=)
|
132
|
+
doc.to_html
|
133
|
+
end
|
134
|
+
|
135
|
+
# Converts plaintext to pre-formatted HTML
|
136
|
+
# @param [String] text the input text
|
137
|
+
# @return [String] the output HTML
|
138
|
+
# @since 0.6.0
|
139
|
+
def html_markup_pre(text)
|
140
|
+
"<pre>" + h(text) + "</pre>"
|
141
|
+
end
|
142
|
+
|
143
|
+
# Converts plaintext to regular HTML
|
144
|
+
# @param [String] text the input text
|
145
|
+
# @return [String] the output HTML
|
146
|
+
# @since 0.6.0
|
147
|
+
def html_markup_text(text)
|
148
|
+
h(text).gsub(/\r?\n/, '<br/>')
|
149
|
+
end
|
150
|
+
|
151
|
+
# @return [String] the same text with no markup
|
152
|
+
# @since 0.6.6
|
153
|
+
def html_markup_none(text)
|
154
|
+
h(text)
|
155
|
+
end
|
156
|
+
|
157
|
+
# Converts HTML to HTML
|
158
|
+
# @param [String] text input html
|
159
|
+
# @return [String] output HTML
|
160
|
+
# @since 0.6.0
|
161
|
+
def html_markup_html(text)
|
162
|
+
text
|
163
|
+
end
|
164
|
+
|
165
|
+
# Highlights Ruby source. Similar to {#html_syntax_highlight}, but
|
166
|
+
# this method is meant to be called from {#htmlify} when markup is
|
167
|
+
# set to "ruby".
|
168
|
+
#
|
169
|
+
# @param [String] source the Ruby source
|
170
|
+
# @return [String] the highlighted HTML
|
171
|
+
# @since 0.7.0
|
172
|
+
def html_markup_ruby(source)
|
173
|
+
'<pre class="code ruby">' + html_syntax_highlight(source, :ruby) + '</pre>'
|
174
|
+
end
|
175
|
+
|
176
|
+
# @return [String] HTMLified text as a single line (paragraphs removed)
|
177
|
+
def htmlify_line(*args)
|
178
|
+
"<div class='inline'>" + htmlify(*args) + "</div>"
|
179
|
+
end
|
180
|
+
|
181
|
+
# @group Syntax Highlighting Source Code
|
182
|
+
|
183
|
+
# Syntax highlights +source+ in language +type+.
|
184
|
+
#
|
185
|
+
# @note To support a specific language +type+, implement the method
|
186
|
+
# +html_syntax_highlight_TYPE+ in this class.
|
187
|
+
#
|
188
|
+
# @param [String] source the source code to highlight
|
189
|
+
# @param [Symbol, String] type the language type (:ruby, :plain, etc). Use
|
190
|
+
# :plain for no syntax highlighting.
|
191
|
+
# @return [String] the highlighted source
|
192
|
+
def html_syntax_highlight(source, type = nil)
|
193
|
+
return "" unless source
|
194
|
+
return h(source) unless options.highlight
|
195
|
+
|
196
|
+
new_type, source = parse_lang_for_codeblock(source)
|
197
|
+
type ||= new_type || :ruby
|
198
|
+
meth = "html_syntax_highlight_#{type}"
|
199
|
+
respond_to?(meth) ? send(meth, source) : h(source)
|
200
|
+
end
|
201
|
+
|
202
|
+
# @return [String] unhighlighted source
|
203
|
+
def html_syntax_highlight_plain(source)
|
204
|
+
h(source)
|
205
|
+
end
|
206
|
+
|
207
|
+
# @group Linking Objects and URLs
|
208
|
+
|
209
|
+
# Resolves any text in the form of +{Name}+ to the object specified by
|
210
|
+
# Name. Also supports link titles in the form +{Name title}+.
|
211
|
+
#
|
212
|
+
# @example Linking to an instance method
|
213
|
+
# resolve_links("{MyClass#method}") # => "<a href='...'>MyClass#method</a>"
|
214
|
+
# @example Linking to a class with a title
|
215
|
+
# resolve_links("{A::B::C the C class}") # => "<a href='...'>the c class</a>"
|
216
|
+
# @param [String] text the text to resolve links in
|
217
|
+
# @return [String] HTML with linkified references
|
218
|
+
def resolve_links(text)
|
219
|
+
code_tags = 0
|
220
|
+
text.gsub(%r{<(/)?(pre|code|tt)|(\\|!)?\{(?!\})(\S+?)(?:\s([^\}]*?\S))?\}(?=[\W<]|.+</|$)}m) do |str|
|
221
|
+
closed = $1
|
222
|
+
tag = $2
|
223
|
+
escape = $3
|
224
|
+
name = $4
|
225
|
+
title = $5
|
226
|
+
match = $&
|
227
|
+
if tag
|
228
|
+
code_tags += (closed ? -1 : 1)
|
229
|
+
next str
|
230
|
+
end
|
231
|
+
next str unless code_tags == 0
|
232
|
+
|
233
|
+
next(match[1..-1]) if escape
|
234
|
+
|
235
|
+
next(match) if name[0, 1] == '|'
|
236
|
+
|
237
|
+
if name == '<a' && title =~ %r{href=["'](.+?)["'].*>.*</a>\s*(.*)\Z}
|
238
|
+
name = $1
|
239
|
+
title = $2
|
240
|
+
title = nil if title.empty?
|
241
|
+
end
|
242
|
+
|
243
|
+
name = CGI.unescapeHTML(name)
|
244
|
+
|
245
|
+
if object.is_a?(String)
|
246
|
+
object
|
247
|
+
else
|
248
|
+
link = linkify(name, title)
|
249
|
+
if (link == name || link == title) && (name + ' ' + link !~ /\A<a\s.*>/)
|
250
|
+
match = /(.+)?(\{#{Regexp.quote name}(?:\s.*?)?\})(.+)?/.match(text)
|
251
|
+
file = (defined?(@file) && @file ? @file.filename : object.file) || '(unknown)'
|
252
|
+
line = (defined?(@file) && @file ? 1 : (object.docstring.line_range ? object.docstring.line_range.first : 1)) + (match ? $`.count("\n") : 0)
|
253
|
+
log.warn "In file `#{file}':#{line}: Cannot resolve link to #{name} from text" + (match ? ":" : ".") +
|
254
|
+
"\n\t" + (match[1] ? '...' : '') + match[2].delete("\n") + (match[3] ? '...' : '') if match
|
255
|
+
end
|
256
|
+
|
257
|
+
link
|
258
|
+
end
|
259
|
+
end
|
260
|
+
end
|
261
|
+
|
262
|
+
# (see BaseHelper#link_file)
|
263
|
+
def link_file(filename, title = nil, anchor = nil)
|
264
|
+
if CodeObjects::ExtraFileObject === filename
|
265
|
+
file = filename
|
266
|
+
else
|
267
|
+
contents = File.file?(filename) ? nil : ''
|
268
|
+
file = CodeObjects::ExtraFileObject.new(filename, contents)
|
269
|
+
end
|
270
|
+
return title || file.title unless serializer
|
271
|
+
link_url(url_for_file(file, anchor), title || file.title)
|
272
|
+
end
|
273
|
+
|
274
|
+
# (see BaseHelper#link_include_file)
|
275
|
+
def link_include_file(file)
|
276
|
+
unless file.is_a?(CodeObjects::ExtraFileObject)
|
277
|
+
file = CodeObjects::ExtraFileObject.new(file)
|
278
|
+
end
|
279
|
+
file.attributes[:markup] ||= markup_for_file('', file.filename)
|
280
|
+
insert_include(file.contents, file.attributes[:markup] || options.markup)
|
281
|
+
end
|
282
|
+
|
283
|
+
# (see BaseHelper#link_include_object)
|
284
|
+
def link_include_object(obj)
|
285
|
+
insert_include(obj.docstring)
|
286
|
+
end
|
287
|
+
|
288
|
+
# Inserts an include link while respecting inlining
|
289
|
+
def insert_include(text, markup = options.markup)
|
290
|
+
htmlify(text, markup).gsub(%r{\A\s*<p>|</p>\s*\Z}, '')
|
291
|
+
end
|
292
|
+
|
293
|
+
# (see BaseHelper#link_object)
|
294
|
+
def link_object(obj, title = nil, anchor = nil, relative = true)
|
295
|
+
return title if obj.nil?
|
296
|
+
obj = Registry.resolve(object, obj, true, true) if obj.is_a?(String)
|
297
|
+
if title
|
298
|
+
title = title.to_s
|
299
|
+
elsif object.is_a?(CodeObjects::Base)
|
300
|
+
# Check if we're linking to a class method in the current
|
301
|
+
# object. If we are, create a title in the format of
|
302
|
+
# "CurrentClass.method_name"
|
303
|
+
if obj.is_a?(CodeObjects::MethodObject) && obj.scope == :class && obj.parent == object
|
304
|
+
title = h([object.name, obj.sep, obj.name].join)
|
305
|
+
elsif obj.title != obj.path
|
306
|
+
title = h(obj.title)
|
307
|
+
else
|
308
|
+
title = h(object.relative_path(obj))
|
309
|
+
end
|
310
|
+
else
|
311
|
+
title = h(obj.title)
|
312
|
+
end
|
313
|
+
return title unless serializer
|
314
|
+
return title if obj.is_a?(CodeObjects::Proxy)
|
315
|
+
|
316
|
+
link = url_for(obj, anchor, relative)
|
317
|
+
link = link ? link_url(link, title, :title => h("#{obj.title} (#{obj.type})")) : title
|
318
|
+
"<span class='object_link'>" + link + "</span>"
|
319
|
+
end
|
320
|
+
|
321
|
+
# (see BaseHelper#link_url)
|
322
|
+
def link_url(url, title = nil, params = {})
|
323
|
+
title ||= url
|
324
|
+
title = title.gsub(/[\r\n]/, ' ')
|
325
|
+
params = SymbolHash.new(false).update(
|
326
|
+
:href => url,
|
327
|
+
:title => h(title)
|
328
|
+
).update(params)
|
329
|
+
params[:target] ||= '_parent' if url =~ %r{^(\w+)://}
|
330
|
+
"<a #{tag_attrs(params)}>#{title}</a>".gsub(/[\r\n]/, ' ')
|
331
|
+
end
|
332
|
+
|
333
|
+
# @group URL Helpers
|
334
|
+
|
335
|
+
# @param [CodeObjects::Base] object the object to get an anchor for
|
336
|
+
# @return [String] the anchor for a specific object
|
337
|
+
def anchor_for(object)
|
338
|
+
case object
|
339
|
+
when CodeObjects::MethodObject
|
340
|
+
"#{object.name}-#{object.scope}_#{object.type}"
|
341
|
+
when CodeObjects::ClassVariableObject
|
342
|
+
"#{object.name.to_s.gsub('@@', '')}-#{object.type}"
|
343
|
+
when CodeObjects::Base
|
344
|
+
"#{object.name}-#{object.type}"
|
345
|
+
when CodeObjects::Proxy
|
346
|
+
object.path
|
347
|
+
else
|
348
|
+
object.to_s
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
# Returns the URL for an object.
|
353
|
+
#
|
354
|
+
# @param [String, CodeObjects::Base] obj the object (or object path) to link to
|
355
|
+
# @param [String] anchor the anchor to link to
|
356
|
+
# @param [Boolean] relative use a relative or absolute link
|
357
|
+
# @return [String] the URL location of the object
|
358
|
+
def url_for(obj, anchor = nil, relative = true)
|
359
|
+
link = nil
|
360
|
+
return link unless serializer
|
361
|
+
return link if obj.is_a?(CodeObjects::Base) && run_verifier([obj]).empty?
|
362
|
+
|
363
|
+
if obj.is_a?(CodeObjects::Base) && !obj.is_a?(CodeObjects::NamespaceObject)
|
364
|
+
# If the obj is not a namespace obj make it the anchor.
|
365
|
+
anchor = obj
|
366
|
+
obj = obj.namespace
|
367
|
+
end
|
368
|
+
|
369
|
+
objpath = serializer.serialized_path(obj)
|
370
|
+
return link unless objpath
|
371
|
+
|
372
|
+
relative = false if object == Registry.root
|
373
|
+
if relative
|
374
|
+
fromobj = object
|
375
|
+
if object.is_a?(CodeObjects::Base) &&
|
376
|
+
!object.is_a?(CodeObjects::NamespaceObject)
|
377
|
+
fromobj = owner
|
378
|
+
end
|
379
|
+
|
380
|
+
from = serializer.serialized_path(fromobj)
|
381
|
+
link = File.relative_path(from, objpath)
|
382
|
+
else
|
383
|
+
link = objpath
|
384
|
+
end
|
385
|
+
|
386
|
+
link + (anchor ? '#' + urlencode(anchor_for(anchor)) : '')
|
387
|
+
end
|
388
|
+
|
389
|
+
alias mtime_url url_for
|
390
|
+
def mtime(_file) nil end
|
391
|
+
|
392
|
+
# Returns the URL for a specific file
|
393
|
+
#
|
394
|
+
# @param [String, CodeObjects::ExtraFileObject] filename the filename to link to
|
395
|
+
# @param [String] anchor optional anchor
|
396
|
+
# @return [String] the URL pointing to the file
|
397
|
+
def url_for_file(filename, anchor = nil)
|
398
|
+
return '' unless serializer
|
399
|
+
fromobj = object
|
400
|
+
if CodeObjects::Base === fromobj && !fromobj.is_a?(CodeObjects::NamespaceObject)
|
401
|
+
fromobj = fromobj.namespace
|
402
|
+
end
|
403
|
+
from = serializer.serialized_path(fromobj)
|
404
|
+
path = filename == options.readme ?
|
405
|
+
'index.html' : serializer.serialized_path(filename)
|
406
|
+
link = File.relative_path(from, path)
|
407
|
+
link += (anchor ? '#' + urlencode(anchor) : '')
|
408
|
+
link
|
409
|
+
end
|
410
|
+
|
411
|
+
# Returns the URL for a list type
|
412
|
+
#
|
413
|
+
# @param [String, Symbol] type the list type to generate a URL for
|
414
|
+
# @return [String] the URL pointing to the list
|
415
|
+
# @since 0.8.0
|
416
|
+
def url_for_list(type)
|
417
|
+
url_for_file("#{type}_list.html")
|
418
|
+
end
|
419
|
+
|
420
|
+
# Returns the URL for the frameset page
|
421
|
+
#
|
422
|
+
# @return [String] the URL pointing to the frames page
|
423
|
+
# @since 0.8.0
|
424
|
+
def url_for_frameset
|
425
|
+
url_for_file("frames.html")
|
426
|
+
end
|
427
|
+
|
428
|
+
# Returns the URL for the main page (README or alphabetic index)
|
429
|
+
#
|
430
|
+
# @return [String] the URL pointing to the first main page the
|
431
|
+
# user should see.
|
432
|
+
def url_for_main
|
433
|
+
url_for_file("index.html")
|
434
|
+
end
|
435
|
+
|
436
|
+
# Returns the URL for the alphabetic index page
|
437
|
+
#
|
438
|
+
# @return [String] the URL pointing to the first main page the
|
439
|
+
# user should see.
|
440
|
+
def url_for_index
|
441
|
+
url_for_file("_index.html")
|
442
|
+
end
|
443
|
+
|
444
|
+
# @group Formatting Objects and Attributes
|
445
|
+
|
446
|
+
# Formats a list of objects and links them
|
447
|
+
# @return [String] a formatted list of objects
|
448
|
+
def format_object_name_list(objects)
|
449
|
+
objects.sort_by {|o| o.name.to_s.downcase }.map do |o|
|
450
|
+
"<span class='name'>" + linkify(o, o.name) + "</span>"
|
451
|
+
end.join(", ")
|
452
|
+
end
|
453
|
+
|
454
|
+
# Formats a list of types from a tag.
|
455
|
+
#
|
456
|
+
# @param [Array<String>, FalseClass] typelist
|
457
|
+
# the list of types to be formatted.
|
458
|
+
#
|
459
|
+
# @param [Boolean] brackets omits the surrounding
|
460
|
+
# brackets if +brackets+ is set to +false+.
|
461
|
+
#
|
462
|
+
# @return [String] the list of types formatted
|
463
|
+
# as [Type1, Type2, ...] with the types linked
|
464
|
+
# to their respective descriptions.
|
465
|
+
#
|
466
|
+
def format_types(typelist, brackets = true)
|
467
|
+
return unless typelist.is_a?(Array)
|
468
|
+
list = typelist.map do |type|
|
469
|
+
type = type.gsub(/([<>])/) { h($1) }
|
470
|
+
type = type.gsub(/([\w:]+)/) { $1 == "lt" || $1 == "gt" ? $1 : linkify($1, $1) }
|
471
|
+
"<tt>" + type + "</tt>"
|
472
|
+
end
|
473
|
+
list.empty? ? "" : (brackets ? "(#{list.join(", ")})" : list.join(", "))
|
474
|
+
end
|
475
|
+
|
476
|
+
# Get the return types for a method signature.
|
477
|
+
#
|
478
|
+
# @param [CodeObjects::MethodObject] meth the method object
|
479
|
+
# @param [Boolean] link whether to link the types
|
480
|
+
# @return [String] the signature types
|
481
|
+
# @since 0.5.3
|
482
|
+
def signature_types(meth, link = true)
|
483
|
+
meth = convert_method_to_overload(meth)
|
484
|
+
if meth.respond_to?(:object) && !meth.has_tag?(:return)
|
485
|
+
meth = meth.object
|
486
|
+
end
|
487
|
+
|
488
|
+
type = options.default_return || ""
|
489
|
+
if meth.tag(:return) && meth.tag(:return).types
|
490
|
+
types = meth.tags(:return).map {|t| t.types ? t.types : [] }.flatten.uniq
|
491
|
+
first = link ? h(types.first) : format_types([types.first], false)
|
492
|
+
if types.size == 2 && types.last == 'nil'
|
493
|
+
type = first + '<sup>?</sup>'
|
494
|
+
elsif types.size == 2 && types.last =~ /^(Array)?<#{Regexp.quote types.first}>$/
|
495
|
+
type = first + '<sup>+</sup>'
|
496
|
+
elsif types.size > 2
|
497
|
+
type = [first, '...'].join(', ')
|
498
|
+
elsif types == ['void'] && options.hide_void_return
|
499
|
+
type = ""
|
500
|
+
else
|
501
|
+
type = link ? h(types.join(", ")) : format_types(types, false)
|
502
|
+
end
|
503
|
+
elsif !type.empty?
|
504
|
+
type = link ? h(type) : format_types([type], false)
|
505
|
+
end
|
506
|
+
type = "#{type} " unless type.empty?
|
507
|
+
type
|
508
|
+
end
|
509
|
+
|
510
|
+
# Formats the signature of method +meth+.
|
511
|
+
#
|
512
|
+
# @param [CodeObjects::MethodObject] meth the method object to list
|
513
|
+
# the signature of
|
514
|
+
# @param [Boolean] link whether to link the method signature to the details view
|
515
|
+
# @param [Boolean] show_extras whether to show extra meta-data (visibility, attribute info)
|
516
|
+
# @param [Boolean] full_attr_name whether to show the full attribute name
|
517
|
+
# ("name=" instead of "name")
|
518
|
+
# @return [String] the formatted method signature
|
519
|
+
def signature(meth, link = true, show_extras = true, full_attr_name = true)
|
520
|
+
meth = convert_method_to_overload(meth)
|
521
|
+
|
522
|
+
type = signature_types(meth, link)
|
523
|
+
type = "⇒ #{type}" if type && !type.empty?
|
524
|
+
scope = meth.scope == :class ? "." : "#"
|
525
|
+
name = full_attr_name ? meth.name : meth.name.to_s.gsub(/^(\w+)=$/, '\1')
|
526
|
+
blk = format_block(meth)
|
527
|
+
args = !full_attr_name && meth.writer? ? "" : format_args(meth)
|
528
|
+
extras = []
|
529
|
+
extras_text = ''
|
530
|
+
if show_extras
|
531
|
+
rw = meth.attr_info
|
532
|
+
if rw
|
533
|
+
attname = [rw[:read] ? 'read' : nil, rw[:write] ? 'write' : nil].compact
|
534
|
+
attname = attname.size == 1 ? attname.join('') + 'only' : nil
|
535
|
+
extras << attname if attname
|
536
|
+
end
|
537
|
+
extras << meth.visibility if meth.visibility != :public
|
538
|
+
extras_text = ' <span class="extras">(' + extras.join(", ") + ')</span>' unless extras.empty?
|
539
|
+
end
|
540
|
+
title = "%s<strong>%s</strong>%s %s %s" % [scope, h(name), args, blk, type]
|
541
|
+
if link
|
542
|
+
if meth.is_a?(YARD::CodeObjects::MethodObject)
|
543
|
+
link_title = "#{h meth.name(true)} (#{meth.scope} #{meth.type})"
|
544
|
+
else
|
545
|
+
link_title = "#{h name} (#{meth.type})"
|
546
|
+
end
|
547
|
+
obj = meth.respond_to?(:object) ? meth.object : meth
|
548
|
+
url = url_for(object, obj)
|
549
|
+
link_url(url, title, :title => link_title) + extras_text
|
550
|
+
else
|
551
|
+
title + extras_text
|
552
|
+
end
|
553
|
+
end
|
554
|
+
|
555
|
+
# @group Getting the Character Encoding
|
556
|
+
|
557
|
+
# Returns the current character set. The default value can be overridden
|
558
|
+
# by setting the +LANG+ environment variable or by overriding this
|
559
|
+
# method. In Ruby 1.9 you can also modify this value by setting
|
560
|
+
# +Encoding.default_external+.
|
561
|
+
#
|
562
|
+
# @return [String] the current character set
|
563
|
+
# @since 0.5.4
|
564
|
+
def charset
|
565
|
+
has_encoding = defined?(::Encoding)
|
566
|
+
if defined?(@file) && @file && has_encoding
|
567
|
+
lang = @file.contents.encoding.to_s
|
568
|
+
else
|
569
|
+
return 'utf-8' unless has_encoding || ENV['LANG']
|
570
|
+
lang =
|
571
|
+
if has_encoding
|
572
|
+
::Encoding.default_external.name.downcase
|
573
|
+
else
|
574
|
+
ENV['LANG'].downcase.split('.').last
|
575
|
+
end
|
576
|
+
end
|
577
|
+
|
578
|
+
case lang
|
579
|
+
when "ascii-8bit", "us-ascii", "ascii-7bit"; 'iso-8859-1'
|
580
|
+
when "utf8"; 'utf-8'
|
581
|
+
else; lang
|
582
|
+
end
|
583
|
+
end
|
584
|
+
|
585
|
+
# @endgroup
|
586
|
+
|
587
|
+
private
|
588
|
+
|
589
|
+
# Converts a set of hash options into HTML attributes for a tag
|
590
|
+
#
|
591
|
+
# @param [Hash{String => String}] opts the tag options
|
592
|
+
# @return [String] the tag attributes of an HTML tag
|
593
|
+
def tag_attrs(opts = {})
|
594
|
+
opts.sort_by {|k, _v| k.to_s }.map {|k, v| "#{k}=#{v.to_s.inspect}" if v }.join(" ")
|
595
|
+
end
|
596
|
+
|
597
|
+
# Converts a {CodeObjects::MethodObject} into an overload object
|
598
|
+
# @since 0.5.3
|
599
|
+
def convert_method_to_overload(meth)
|
600
|
+
# use first overload tag if it has a return type and method itself does not
|
601
|
+
if !meth.tag(:return) && meth.tags(:overload).size == 1 && meth.tag(:overload).tag(:return)
|
602
|
+
return meth.tag(:overload)
|
603
|
+
end
|
604
|
+
meth
|
605
|
+
end
|
606
|
+
|
607
|
+
# Parses !!!lang out of codeblock, returning the codeblock language
|
608
|
+
# followed by the source code.
|
609
|
+
#
|
610
|
+
# @param [String] source the source code whose language to determine
|
611
|
+
# @return [Array(String, String)] the language, if any, and the
|
612
|
+
# remaining source
|
613
|
+
# @since 0.7.5
|
614
|
+
def parse_lang_for_codeblock(source)
|
615
|
+
type = nil
|
616
|
+
if source =~ /\A(?:[ \t]*\r?\n)?[ \t]*!!!([\w.+-]+)[ \t]*\r?\n/
|
617
|
+
type = $1
|
618
|
+
source = $'
|
619
|
+
end
|
620
|
+
|
621
|
+
[type, source]
|
622
|
+
end
|
623
|
+
|
624
|
+
# Parses code blocks out of html and performs syntax highlighting
|
625
|
+
# on code inside of the blocks.
|
626
|
+
#
|
627
|
+
# @param [String] html the html to search for code in
|
628
|
+
# @return [String] highlighted html
|
629
|
+
# @see #html_syntax_highlight
|
630
|
+
def parse_codeblocks(html)
|
631
|
+
html.gsub(%r{<pre\s*(?:lang="(.+?)")?>(?:\s*<code\s*(?:class="(.+?)")?\s*>)?(.+?)(?:</code>\s*)?</pre>}m) do
|
632
|
+
string = $3
|
633
|
+
# handle !!!LANG prefix to send to html_syntax_highlight_LANG
|
634
|
+
language, = parse_lang_for_codeblock(string)
|
635
|
+
language ||= $1 || $2 || object.source_type
|
636
|
+
|
637
|
+
if options.highlight
|
638
|
+
string = html_syntax_highlight(CGI.unescapeHTML(string), language)
|
639
|
+
end
|
640
|
+
classes = ['code', language].compact.join(' ')
|
641
|
+
%(<pre class="#{classes}"><code class="#{language}">#{string}</code></pre>)
|
642
|
+
end
|
643
|
+
end
|
644
|
+
end
|
645
|
+
end
|
646
|
+
end
|