From 86d871d29cda15810d9d60dc1b94a07e9530e0cb Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Wed, 15 Jan 2025 11:52:40 +0900 Subject: [PATCH] Migrate rdoc as bundled gems --- gems/bundled_gems | 1 + lib/rdoc.rb | 211 - lib/rdoc/code_object.rb | 427 - lib/rdoc/code_object/alias.rb | 111 - lib/rdoc/code_object/anon_class.rb | 10 - lib/rdoc/code_object/any_method.rb | 379 - lib/rdoc/code_object/attr.rb | 175 - lib/rdoc/code_object/class_module.rb | 868 - lib/rdoc/code_object/constant.rb | 186 - lib/rdoc/code_object/context.rb | 1264 -- lib/rdoc/code_object/context/section.rb | 233 - lib/rdoc/code_object/extend.rb | 9 - lib/rdoc/code_object/ghost_method.rb | 6 - lib/rdoc/code_object/include.rb | 9 - lib/rdoc/code_object/meta_method.rb | 6 - lib/rdoc/code_object/method_attr.rb | 430 - lib/rdoc/code_object/mixin.rb | 120 - lib/rdoc/code_object/normal_class.rb | 92 - lib/rdoc/code_object/normal_module.rb | 73 - lib/rdoc/code_object/require.rb | 51 - lib/rdoc/code_object/single_class.rb | 30 - lib/rdoc/code_object/top_level.rb | 291 - lib/rdoc/code_objects.rb | 5 - lib/rdoc/comment.rb | 229 - lib/rdoc/cross_reference.rb | 228 - lib/rdoc/encoding.rb | 120 - lib/rdoc/erb_partial.rb | 18 - lib/rdoc/erbio.rb | 37 - lib/rdoc/generator.rb | 51 - lib/rdoc/generator/darkfish.rb | 828 - lib/rdoc/generator/json_index.rb | 300 - lib/rdoc/generator/markup.rb | 159 - lib/rdoc/generator/pot.rb | 99 - lib/rdoc/generator/pot/message_extractor.rb | 68 - lib/rdoc/generator/pot/po.rb | 84 - lib/rdoc/generator/pot/po_entry.rb | 141 - lib/rdoc/generator/ri.rb | 30 - .../generator/template/darkfish/.document | 0 .../generator/template/darkfish/_footer.rhtml | 5 - .../generator/template/darkfish/_head.rhtml | 43 - .../template/darkfish/_sidebar_VCS_info.rhtml | 19 - .../template/darkfish/_sidebar_classes.rhtml | 34 - .../template/darkfish/_sidebar_extends.rhtml | 15 - .../template/darkfish/_sidebar_in_files.rhtml | 9 - .../template/darkfish/_sidebar_includes.rhtml | 15 - .../darkfish/_sidebar_installed.rhtml | 15 - .../template/darkfish/_sidebar_methods.rhtml | 21 - .../darkfish/_sidebar_navigation.rhtml | 11 - .../template/darkfish/_sidebar_pages.rhtml | 32 - .../template/darkfish/_sidebar_parent.rhtml | 6 - .../template/darkfish/_sidebar_search.rhtml | 14 - .../template/darkfish/_sidebar_sections.rhtml | 11 - .../darkfish/_sidebar_table_of_contents.rhtml | 39 - .../template/darkfish/_sidebar_toggle.rhtml | 3 - .../generator/template/darkfish/class.rhtml | 206 - .../generator/template/darkfish/css/fonts.css | 167 - .../generator/template/darkfish/css/rdoc.css | 668 - .../template/darkfish/fonts/Lato-Light.ttf | Bin 94668 -> 0 bytes .../darkfish/fonts/Lato-LightItalic.ttf | Bin 94196 -> 0 bytes .../template/darkfish/fonts/Lato-Regular.ttf | Bin 96184 -> 0 bytes .../darkfish/fonts/Lato-RegularItalic.ttf | Bin 95316 -> 0 bytes .../darkfish/fonts/SourceCodePro-Bold.ttf | Bin 138268 -> 0 bytes .../darkfish/fonts/SourceCodePro-Regular.ttf | Bin 138680 -> 0 bytes .../template/darkfish/images/add.png | Bin 733 -> 0 bytes .../template/darkfish/images/arrow_up.png | Bin 372 -> 0 bytes .../template/darkfish/images/brick.png | Bin 452 -> 0 bytes .../template/darkfish/images/brick_link.png | Bin 764 -> 0 bytes .../template/darkfish/images/bug.png | Bin 774 -> 0 bytes .../template/darkfish/images/bullet_black.png | Bin 211 -> 0 bytes .../darkfish/images/bullet_toggle_minus.png | Bin 207 -> 0 bytes .../darkfish/images/bullet_toggle_plus.png | Bin 209 -> 0 bytes .../template/darkfish/images/date.png | Bin 626 -> 0 bytes .../template/darkfish/images/delete.png | Bin 715 -> 0 bytes .../template/darkfish/images/find.png | Bin 659 -> 0 bytes .../darkfish/images/loadingAnimation.gif | Bin 5886 -> 0 bytes .../template/darkfish/images/macFFBgHack.png | Bin 207 -> 0 bytes .../template/darkfish/images/package.png | Bin 853 -> 0 bytes .../template/darkfish/images/page_green.png | Bin 621 -> 0 bytes .../darkfish/images/page_white_text.png | Bin 342 -> 0 bytes .../darkfish/images/page_white_width.png | Bin 309 -> 0 bytes .../template/darkfish/images/plugin.png | Bin 591 -> 0 bytes .../template/darkfish/images/ruby.png | Bin 592 -> 0 bytes .../template/darkfish/images/tag_blue.png | Bin 1880 -> 0 bytes .../template/darkfish/images/tag_green.png | Bin 613 -> 0 bytes .../template/darkfish/images/transparent.png | Bin 97 -> 0 bytes .../template/darkfish/images/wrench.png | Bin 610 -> 0 bytes .../darkfish/images/wrench_orange.png | Bin 584 -> 0 bytes .../template/darkfish/images/zoom.png | Bin 692 -> 0 bytes .../generator/template/darkfish/index.rhtml | 23 - .../template/darkfish/js/darkfish.js | 120 - .../generator/template/darkfish/js/search.js | 110 - .../generator/template/darkfish/page.rhtml | 18 - .../template/darkfish/servlet_not_found.rhtml | 20 - .../template/darkfish/servlet_root.rhtml | 65 - .../template/darkfish/table_of_contents.rhtml | 70 - .../generator/template/json_index/.document | 1 - .../template/json_index/js/navigation.js | 105 - .../template/json_index/js/searcher.js | 229 - lib/rdoc/i18n.rb | 10 - lib/rdoc/i18n/locale.rb | 102 - lib/rdoc/i18n/text.rb | 126 - lib/rdoc/known_classes.rb | 74 - lib/rdoc/markdown.rb | 16793 ---------------- lib/rdoc/markdown/.document | 1 - lib/rdoc/markdown/entities.rb | 2131 -- lib/rdoc/markdown/literals.rb | 454 - lib/rdoc/markup.rb | 240 - lib/rdoc/markup/attr_changer.rb | 22 - lib/rdoc/markup/attr_span.rb | 35 - lib/rdoc/markup/attribute_manager.rb | 405 - lib/rdoc/markup/attributes.rb | 70 - lib/rdoc/markup/blank_line.rb | 27 - lib/rdoc/markup/block_quote.rb | 14 - lib/rdoc/markup/document.rb | 164 - lib/rdoc/markup/formatter.rb | 272 - lib/rdoc/markup/hard_break.rb | 31 - lib/rdoc/markup/heading.rb | 78 - lib/rdoc/markup/include.rb | 42 - lib/rdoc/markup/indented_paragraph.rb | 47 - lib/rdoc/markup/list.rb | 101 - lib/rdoc/markup/list_item.rb | 99 - lib/rdoc/markup/paragraph.rb | 28 - lib/rdoc/markup/parser.rb | 585 - lib/rdoc/markup/pre_process.rb | 318 - lib/rdoc/markup/raw.rb | 69 - lib/rdoc/markup/regexp_handling.rb | 40 - lib/rdoc/markup/rule.rb | 20 - lib/rdoc/markup/table.rb | 56 - lib/rdoc/markup/to_ansi.rb | 93 - lib/rdoc/markup/to_bs.rb | 102 - lib/rdoc/markup/to_html.rb | 452 - lib/rdoc/markup/to_html_crossref.rb | 226 - lib/rdoc/markup/to_html_snippet.rb | 287 - lib/rdoc/markup/to_joined_paragraph.rb | 46 - lib/rdoc/markup/to_label.rb | 74 - lib/rdoc/markup/to_markdown.rb | 191 - lib/rdoc/markup/to_rdoc.rb | 352 - lib/rdoc/markup/to_table_of_contents.rb | 88 - lib/rdoc/markup/to_test.rb | 69 - lib/rdoc/markup/to_tt_only.rb | 120 - lib/rdoc/markup/verbatim.rb | 83 - lib/rdoc/options.rb | 1397 -- lib/rdoc/parser.rb | 297 - lib/rdoc/parser/c.rb | 1260 -- lib/rdoc/parser/changelog.rb | 349 - lib/rdoc/parser/markdown.rb | 22 - lib/rdoc/parser/prism_ruby.rb | 1028 - lib/rdoc/parser/rd.rb | 22 - lib/rdoc/parser/ripper_state_lex.rb | 302 - lib/rdoc/parser/ruby.rb | 2381 --- lib/rdoc/parser/ruby_tools.rb | 165 - lib/rdoc/parser/simple.rb | 61 - lib/rdoc/parser/text.rb | 11 - lib/rdoc/rd.rb | 99 - lib/rdoc/rd/.document | 1 - lib/rdoc/rd/block_parser.rb | 1706 -- lib/rdoc/rd/inline.rb | 71 - lib/rdoc/rd/inline_parser.rb | 1854 -- lib/rdoc/rdoc.gemspec | 67 - lib/rdoc/rdoc.rb | 566 - lib/rdoc/ri.rb | 20 - lib/rdoc/ri/driver.rb | 1557 -- lib/rdoc/ri/formatter.rb | 6 - lib/rdoc/ri/paths.rb | 171 - lib/rdoc/ri/store.rb | 6 - lib/rdoc/ri/task.rb | 71 - lib/rdoc/rubygems_hook.rb | 330 - lib/rdoc/servlet.rb | 451 - lib/rdoc/stats.rb | 461 - lib/rdoc/stats/normal.rb | 58 - lib/rdoc/stats/quiet.rb | 59 - lib/rdoc/stats/verbose.rb | 44 - lib/rdoc/store.rb | 1001 - lib/rdoc/task.rb | 354 - lib/rdoc/text.rb | 322 - lib/rdoc/token_stream.rb | 118 - lib/rdoc/tom_doc.rb | 257 - lib/rdoc/version.rb | 10 - .../Amps and angle encoding.text | 21 - test/rdoc/MarkdownTest_1.0.3/Auto links.text | 13 - .../MarkdownTest_1.0.3/Backslash escapes.text | 120 - .../Blockquotes with code blocks.text | 11 - test/rdoc/MarkdownTest_1.0.3/Code Blocks.text | 14 - test/rdoc/MarkdownTest_1.0.3/Code Spans.text | 6 - ...apped paragraphs with list-like lines.text | 8 - .../MarkdownTest_1.0.3/Horizontal rules.text | 67 - .../Inline HTML (Advanced).text | 15 - .../Inline HTML (Simple).text | 69 - .../Inline HTML comments.text | 13 - .../Links, inline style.text | 12 - .../Links, reference style.text | 71 - .../Links, shortcut references.text | 20 - .../Literal quotes in titles.text | 7 - .../Markdown Documentation - Basics.text | 306 - .../Markdown Documentation - Syntax.text | 888 - .../Nested blockquotes.text | 5 - .../Ordered and unordered lists.text | 131 - .../Strong and em together.text | 7 - test/rdoc/MarkdownTest_1.0.3/Tabs.text | 21 - test/rdoc/MarkdownTest_1.0.3/Tidiness.text | 5 - test/rdoc/README | 1 - test/rdoc/binary.dat | Bin 1024 -> 0 bytes test/rdoc/helper.rb | 5 - test/rdoc/hidden.zip.txt | 1 - test/rdoc/support/formatter_test_case.rb | 764 - test/rdoc/support/test_case.rb | 217 - test/rdoc/support/text_formatter_test_case.rb | 131 - test/rdoc/test.ja.largedoc | 3 - test/rdoc/test.ja.rdoc | 10 - test/rdoc/test.ja.txt | 8 - test/rdoc/test.txt | 1 - test/rdoc/test_rdoc_alias.rb | 13 - test/rdoc/test_rdoc_any_method.rb | 609 - test/rdoc/test_rdoc_attr.rb | 190 - test/rdoc/test_rdoc_class_module.rb | 1665 -- test/rdoc/test_rdoc_code_object.rb | 440 - test/rdoc/test_rdoc_comment.rb | 506 - test/rdoc/test_rdoc_constant.rb | 182 - test/rdoc/test_rdoc_context.rb | 971 - test/rdoc/test_rdoc_context_section.rb | 146 - test/rdoc/test_rdoc_cross_reference.rb | 219 - test/rdoc/test_rdoc_encoding.rb | 184 - test/rdoc/test_rdoc_extend.rb | 94 - test/rdoc/test_rdoc_generator_darkfish.rb | 444 - test/rdoc/test_rdoc_generator_json_index.rb | 371 - test/rdoc/test_rdoc_generator_markup.rb | 59 - test/rdoc/test_rdoc_generator_pot.rb | 92 - test/rdoc/test_rdoc_generator_pot_po.rb | 52 - test/rdoc/test_rdoc_generator_pot_po_entry.rb | 140 - test/rdoc/test_rdoc_generator_ri.rb | 76 - test/rdoc/test_rdoc_i18n_locale.rb | 74 - test/rdoc/test_rdoc_i18n_text.rb | 124 - test/rdoc/test_rdoc_include.rb | 109 - test/rdoc/test_rdoc_markdown.rb | 1122 -- test/rdoc/test_rdoc_markdown_test.rb | 1883 -- test/rdoc/test_rdoc_markup.rb | 95 - .../test_rdoc_markup_attribute_manager.rb | 395 - test/rdoc/test_rdoc_markup_attributes.rb | 39 - test/rdoc/test_rdoc_markup_document.rb | 207 - test/rdoc/test_rdoc_markup_formatter.rb | 181 - test/rdoc/test_rdoc_markup_hard_break.rb | 31 - test/rdoc/test_rdoc_markup_heading.rb | 29 - test/rdoc/test_rdoc_markup_include.rb | 19 - .../test_rdoc_markup_indented_paragraph.rb | 53 - test/rdoc/test_rdoc_markup_paragraph.rb | 32 - test/rdoc/test_rdoc_markup_parser.rb | 1684 -- test/rdoc/test_rdoc_markup_pre_process.rb | 481 - test/rdoc/test_rdoc_markup_raw.rb | 22 - test/rdoc/test_rdoc_markup_to_ansi.rb | 380 - test/rdoc/test_rdoc_markup_to_bs.rb | 363 - test/rdoc/test_rdoc_markup_to_html.rb | 994 - .../rdoc/test_rdoc_markup_to_html_crossref.rb | 328 - test/rdoc/test_rdoc_markup_to_html_snippet.rb | 709 - .../test_rdoc_markup_to_joined_paragraph.rb | 32 - test/rdoc/test_rdoc_markup_to_label.rb | 112 - test/rdoc/test_rdoc_markup_to_markdown.rb | 397 - test/rdoc/test_rdoc_markup_to_rdoc.rb | 388 - .../test_rdoc_markup_to_table_of_contents.rb | 126 - test/rdoc/test_rdoc_markup_to_tt_only.rb | 246 - test/rdoc/test_rdoc_markup_verbatim.rb | 29 - test/rdoc/test_rdoc_method_attr.rb | 219 - test/rdoc/test_rdoc_normal_class.rb | 47 - test/rdoc/test_rdoc_normal_module.rb | 42 - test/rdoc/test_rdoc_options.rb | 972 - test/rdoc/test_rdoc_parser.rb | 334 - test/rdoc/test_rdoc_parser_c.rb | 2150 -- test/rdoc/test_rdoc_parser_changelog.rb | 484 - test/rdoc/test_rdoc_parser_markdown.rb | 61 - test/rdoc/test_rdoc_parser_prism_ruby.rb | 2016 -- test/rdoc/test_rdoc_parser_rd.rb | 55 - test/rdoc/test_rdoc_parser_ruby.rb | 4400 ---- test/rdoc/test_rdoc_parser_simple.rb | 115 - test/rdoc/test_rdoc_rd.rb | 30 - test/rdoc/test_rdoc_rd_block_parser.rb | 557 - test/rdoc/test_rdoc_rd_inline.rb | 63 - test/rdoc/test_rdoc_rd_inline_parser.rb | 178 - test/rdoc/test_rdoc_rdoc.rb | 583 - test/rdoc/test_rdoc_require.rb | 25 - test/rdoc/test_rdoc_ri_driver.rb | 1612 -- test/rdoc/test_rdoc_ri_paths.rb | 157 - test/rdoc/test_rdoc_rubygems_hook.rb | 317 - test/rdoc/test_rdoc_servlet.rb | 555 - test/rdoc/test_rdoc_single_class.rb | 20 - test/rdoc/test_rdoc_stats.rb | 722 - test/rdoc/test_rdoc_store.rb | 1032 - test/rdoc/test_rdoc_task.rb | 182 - test/rdoc/test_rdoc_text.rb | 585 - test/rdoc/test_rdoc_token_stream.rb | 109 - test/rdoc/test_rdoc_tom_doc.rb | 579 - test/rdoc/test_rdoc_top_level.rb | 290 - test/rdoc/xref_data.rb | 163 - test/rdoc/xref_test_case.rb | 93 - 292 files changed, 1 insertion(+), 89919 deletions(-) delete mode 100644 lib/rdoc.rb delete mode 100644 lib/rdoc/code_object.rb delete mode 100644 lib/rdoc/code_object/alias.rb delete mode 100644 lib/rdoc/code_object/anon_class.rb delete mode 100644 lib/rdoc/code_object/any_method.rb delete mode 100644 lib/rdoc/code_object/attr.rb delete mode 100644 lib/rdoc/code_object/class_module.rb delete mode 100644 lib/rdoc/code_object/constant.rb delete mode 100644 lib/rdoc/code_object/context.rb delete mode 100644 lib/rdoc/code_object/context/section.rb delete mode 100644 lib/rdoc/code_object/extend.rb delete mode 100644 lib/rdoc/code_object/ghost_method.rb delete mode 100644 lib/rdoc/code_object/include.rb delete mode 100644 lib/rdoc/code_object/meta_method.rb delete mode 100644 lib/rdoc/code_object/method_attr.rb delete mode 100644 lib/rdoc/code_object/mixin.rb delete mode 100644 lib/rdoc/code_object/normal_class.rb delete mode 100644 lib/rdoc/code_object/normal_module.rb delete mode 100644 lib/rdoc/code_object/require.rb delete mode 100644 lib/rdoc/code_object/single_class.rb delete mode 100644 lib/rdoc/code_object/top_level.rb delete mode 100644 lib/rdoc/code_objects.rb delete mode 100644 lib/rdoc/comment.rb delete mode 100644 lib/rdoc/cross_reference.rb delete mode 100644 lib/rdoc/encoding.rb delete mode 100644 lib/rdoc/erb_partial.rb delete mode 100644 lib/rdoc/erbio.rb delete mode 100644 lib/rdoc/generator.rb delete mode 100644 lib/rdoc/generator/darkfish.rb delete mode 100644 lib/rdoc/generator/json_index.rb delete mode 100644 lib/rdoc/generator/markup.rb delete mode 100644 lib/rdoc/generator/pot.rb delete mode 100644 lib/rdoc/generator/pot/message_extractor.rb delete mode 100644 lib/rdoc/generator/pot/po.rb delete mode 100644 lib/rdoc/generator/pot/po_entry.rb delete mode 100644 lib/rdoc/generator/ri.rb delete mode 100644 lib/rdoc/generator/template/darkfish/.document delete mode 100644 lib/rdoc/generator/template/darkfish/_footer.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_head.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/class.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/css/fonts.css delete mode 100644 lib/rdoc/generator/template/darkfish/css/rdoc.css delete mode 100644 lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf delete mode 100644 lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf delete mode 100644 lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf delete mode 100644 lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf delete mode 100644 lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf delete mode 100644 lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf delete mode 100644 lib/rdoc/generator/template/darkfish/images/add.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/arrow_up.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/brick.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/brick_link.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/bug.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/bullet_black.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/date.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/delete.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/find.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif delete mode 100644 lib/rdoc/generator/template/darkfish/images/macFFBgHack.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/package.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/page_green.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/page_white_text.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/page_white_width.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/plugin.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/ruby.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/tag_blue.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/tag_green.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/transparent.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/wrench.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/wrench_orange.png delete mode 100644 lib/rdoc/generator/template/darkfish/images/zoom.png delete mode 100644 lib/rdoc/generator/template/darkfish/index.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/js/darkfish.js delete mode 100644 lib/rdoc/generator/template/darkfish/js/search.js delete mode 100644 lib/rdoc/generator/template/darkfish/page.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/servlet_root.rhtml delete mode 100644 lib/rdoc/generator/template/darkfish/table_of_contents.rhtml delete mode 100644 lib/rdoc/generator/template/json_index/.document delete mode 100644 lib/rdoc/generator/template/json_index/js/navigation.js delete mode 100644 lib/rdoc/generator/template/json_index/js/searcher.js delete mode 100644 lib/rdoc/i18n.rb delete mode 100644 lib/rdoc/i18n/locale.rb delete mode 100644 lib/rdoc/i18n/text.rb delete mode 100644 lib/rdoc/known_classes.rb delete mode 100644 lib/rdoc/markdown.rb delete mode 100644 lib/rdoc/markdown/.document delete mode 100644 lib/rdoc/markdown/entities.rb delete mode 100644 lib/rdoc/markdown/literals.rb delete mode 100644 lib/rdoc/markup.rb delete mode 100644 lib/rdoc/markup/attr_changer.rb delete mode 100644 lib/rdoc/markup/attr_span.rb delete mode 100644 lib/rdoc/markup/attribute_manager.rb delete mode 100644 lib/rdoc/markup/attributes.rb delete mode 100644 lib/rdoc/markup/blank_line.rb delete mode 100644 lib/rdoc/markup/block_quote.rb delete mode 100644 lib/rdoc/markup/document.rb delete mode 100644 lib/rdoc/markup/formatter.rb delete mode 100644 lib/rdoc/markup/hard_break.rb delete mode 100644 lib/rdoc/markup/heading.rb delete mode 100644 lib/rdoc/markup/include.rb delete mode 100644 lib/rdoc/markup/indented_paragraph.rb delete mode 100644 lib/rdoc/markup/list.rb delete mode 100644 lib/rdoc/markup/list_item.rb delete mode 100644 lib/rdoc/markup/paragraph.rb delete mode 100644 lib/rdoc/markup/parser.rb delete mode 100644 lib/rdoc/markup/pre_process.rb delete mode 100644 lib/rdoc/markup/raw.rb delete mode 100644 lib/rdoc/markup/regexp_handling.rb delete mode 100644 lib/rdoc/markup/rule.rb delete mode 100644 lib/rdoc/markup/table.rb delete mode 100644 lib/rdoc/markup/to_ansi.rb delete mode 100644 lib/rdoc/markup/to_bs.rb delete mode 100644 lib/rdoc/markup/to_html.rb delete mode 100644 lib/rdoc/markup/to_html_crossref.rb delete mode 100644 lib/rdoc/markup/to_html_snippet.rb delete mode 100644 lib/rdoc/markup/to_joined_paragraph.rb delete mode 100644 lib/rdoc/markup/to_label.rb delete mode 100644 lib/rdoc/markup/to_markdown.rb delete mode 100644 lib/rdoc/markup/to_rdoc.rb delete mode 100644 lib/rdoc/markup/to_table_of_contents.rb delete mode 100644 lib/rdoc/markup/to_test.rb delete mode 100644 lib/rdoc/markup/to_tt_only.rb delete mode 100644 lib/rdoc/markup/verbatim.rb delete mode 100644 lib/rdoc/options.rb delete mode 100644 lib/rdoc/parser.rb delete mode 100644 lib/rdoc/parser/c.rb delete mode 100644 lib/rdoc/parser/changelog.rb delete mode 100644 lib/rdoc/parser/markdown.rb delete mode 100644 lib/rdoc/parser/prism_ruby.rb delete mode 100644 lib/rdoc/parser/rd.rb delete mode 100644 lib/rdoc/parser/ripper_state_lex.rb delete mode 100644 lib/rdoc/parser/ruby.rb delete mode 100644 lib/rdoc/parser/ruby_tools.rb delete mode 100644 lib/rdoc/parser/simple.rb delete mode 100644 lib/rdoc/parser/text.rb delete mode 100644 lib/rdoc/rd.rb delete mode 100644 lib/rdoc/rd/.document delete mode 100644 lib/rdoc/rd/block_parser.rb delete mode 100644 lib/rdoc/rd/inline.rb delete mode 100644 lib/rdoc/rd/inline_parser.rb delete mode 100644 lib/rdoc/rdoc.gemspec delete mode 100644 lib/rdoc/rdoc.rb delete mode 100644 lib/rdoc/ri.rb delete mode 100644 lib/rdoc/ri/driver.rb delete mode 100644 lib/rdoc/ri/formatter.rb delete mode 100644 lib/rdoc/ri/paths.rb delete mode 100644 lib/rdoc/ri/store.rb delete mode 100644 lib/rdoc/ri/task.rb delete mode 100644 lib/rdoc/rubygems_hook.rb delete mode 100644 lib/rdoc/servlet.rb delete mode 100644 lib/rdoc/stats.rb delete mode 100644 lib/rdoc/stats/normal.rb delete mode 100644 lib/rdoc/stats/quiet.rb delete mode 100644 lib/rdoc/stats/verbose.rb delete mode 100644 lib/rdoc/store.rb delete mode 100644 lib/rdoc/task.rb delete mode 100644 lib/rdoc/text.rb delete mode 100644 lib/rdoc/token_stream.rb delete mode 100644 lib/rdoc/tom_doc.rb delete mode 100644 lib/rdoc/version.rb delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Amps and angle encoding.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Auto links.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Backslash escapes.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Blockquotes with code blocks.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Code Blocks.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Code Spans.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Hard-wrapped paragraphs with list-like lines.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Horizontal rules.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Inline HTML (Advanced).text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Inline HTML (Simple).text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Inline HTML comments.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Links, inline style.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Links, reference style.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Links, shortcut references.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Literal quotes in titles.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Markdown Documentation - Basics.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Markdown Documentation - Syntax.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Nested blockquotes.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Ordered and unordered lists.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Strong and em together.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Tabs.text delete mode 100644 test/rdoc/MarkdownTest_1.0.3/Tidiness.text delete mode 100644 test/rdoc/README delete mode 100644 test/rdoc/binary.dat delete mode 100644 test/rdoc/helper.rb delete mode 100644 test/rdoc/hidden.zip.txt delete mode 100644 test/rdoc/support/formatter_test_case.rb delete mode 100644 test/rdoc/support/test_case.rb delete mode 100644 test/rdoc/support/text_formatter_test_case.rb delete mode 100644 test/rdoc/test.ja.largedoc delete mode 100644 test/rdoc/test.ja.rdoc delete mode 100644 test/rdoc/test.ja.txt delete mode 100644 test/rdoc/test.txt delete mode 100644 test/rdoc/test_rdoc_alias.rb delete mode 100644 test/rdoc/test_rdoc_any_method.rb delete mode 100644 test/rdoc/test_rdoc_attr.rb delete mode 100644 test/rdoc/test_rdoc_class_module.rb delete mode 100644 test/rdoc/test_rdoc_code_object.rb delete mode 100644 test/rdoc/test_rdoc_comment.rb delete mode 100644 test/rdoc/test_rdoc_constant.rb delete mode 100644 test/rdoc/test_rdoc_context.rb delete mode 100644 test/rdoc/test_rdoc_context_section.rb delete mode 100644 test/rdoc/test_rdoc_cross_reference.rb delete mode 100644 test/rdoc/test_rdoc_encoding.rb delete mode 100644 test/rdoc/test_rdoc_extend.rb delete mode 100644 test/rdoc/test_rdoc_generator_darkfish.rb delete mode 100644 test/rdoc/test_rdoc_generator_json_index.rb delete mode 100644 test/rdoc/test_rdoc_generator_markup.rb delete mode 100644 test/rdoc/test_rdoc_generator_pot.rb delete mode 100644 test/rdoc/test_rdoc_generator_pot_po.rb delete mode 100644 test/rdoc/test_rdoc_generator_pot_po_entry.rb delete mode 100644 test/rdoc/test_rdoc_generator_ri.rb delete mode 100644 test/rdoc/test_rdoc_i18n_locale.rb delete mode 100644 test/rdoc/test_rdoc_i18n_text.rb delete mode 100644 test/rdoc/test_rdoc_include.rb delete mode 100644 test/rdoc/test_rdoc_markdown.rb delete mode 100644 test/rdoc/test_rdoc_markdown_test.rb delete mode 100644 test/rdoc/test_rdoc_markup.rb delete mode 100644 test/rdoc/test_rdoc_markup_attribute_manager.rb delete mode 100644 test/rdoc/test_rdoc_markup_attributes.rb delete mode 100644 test/rdoc/test_rdoc_markup_document.rb delete mode 100644 test/rdoc/test_rdoc_markup_formatter.rb delete mode 100644 test/rdoc/test_rdoc_markup_hard_break.rb delete mode 100644 test/rdoc/test_rdoc_markup_heading.rb delete mode 100644 test/rdoc/test_rdoc_markup_include.rb delete mode 100644 test/rdoc/test_rdoc_markup_indented_paragraph.rb delete mode 100644 test/rdoc/test_rdoc_markup_paragraph.rb delete mode 100644 test/rdoc/test_rdoc_markup_parser.rb delete mode 100644 test/rdoc/test_rdoc_markup_pre_process.rb delete mode 100644 test/rdoc/test_rdoc_markup_raw.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_ansi.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_bs.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_html.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_html_crossref.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_html_snippet.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_joined_paragraph.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_label.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_markdown.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_rdoc.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_table_of_contents.rb delete mode 100644 test/rdoc/test_rdoc_markup_to_tt_only.rb delete mode 100644 test/rdoc/test_rdoc_markup_verbatim.rb delete mode 100644 test/rdoc/test_rdoc_method_attr.rb delete mode 100644 test/rdoc/test_rdoc_normal_class.rb delete mode 100644 test/rdoc/test_rdoc_normal_module.rb delete mode 100644 test/rdoc/test_rdoc_options.rb delete mode 100644 test/rdoc/test_rdoc_parser.rb delete mode 100644 test/rdoc/test_rdoc_parser_c.rb delete mode 100644 test/rdoc/test_rdoc_parser_changelog.rb delete mode 100644 test/rdoc/test_rdoc_parser_markdown.rb delete mode 100644 test/rdoc/test_rdoc_parser_prism_ruby.rb delete mode 100644 test/rdoc/test_rdoc_parser_rd.rb delete mode 100644 test/rdoc/test_rdoc_parser_ruby.rb delete mode 100644 test/rdoc/test_rdoc_parser_simple.rb delete mode 100644 test/rdoc/test_rdoc_rd.rb delete mode 100644 test/rdoc/test_rdoc_rd_block_parser.rb delete mode 100644 test/rdoc/test_rdoc_rd_inline.rb delete mode 100644 test/rdoc/test_rdoc_rd_inline_parser.rb delete mode 100644 test/rdoc/test_rdoc_rdoc.rb delete mode 100644 test/rdoc/test_rdoc_require.rb delete mode 100644 test/rdoc/test_rdoc_ri_driver.rb delete mode 100644 test/rdoc/test_rdoc_ri_paths.rb delete mode 100644 test/rdoc/test_rdoc_rubygems_hook.rb delete mode 100644 test/rdoc/test_rdoc_servlet.rb delete mode 100644 test/rdoc/test_rdoc_single_class.rb delete mode 100644 test/rdoc/test_rdoc_stats.rb delete mode 100644 test/rdoc/test_rdoc_store.rb delete mode 100644 test/rdoc/test_rdoc_task.rb delete mode 100644 test/rdoc/test_rdoc_text.rb delete mode 100644 test/rdoc/test_rdoc_token_stream.rb delete mode 100644 test/rdoc/test_rdoc_tom_doc.rb delete mode 100644 test/rdoc/test_rdoc_top_level.rb delete mode 100644 test/rdoc/xref_data.rb delete mode 100644 test/rdoc/xref_test_case.rb diff --git a/gems/bundled_gems b/gems/bundled_gems index dade781356..73407736bf 100644 --- a/gems/bundled_gems +++ b/gems/bundled_gems @@ -39,3 +39,4 @@ ostruct 0.6.1 https://github.com/ruby/ostruct pstore 0.1.4 https://github.com/ruby/pstore b563c4d354615e12a6fa54ffaa4ed711c3d1ba9f benchmark 0.4.0 https://github.com/ruby/benchmark logger 1.6.5 https://github.com/ruby/logger +rdoc 6.10.0 https://github.com/ruby/rdoc diff --git a/lib/rdoc.rb b/lib/rdoc.rb deleted file mode 100644 index b42059c712..0000000000 --- a/lib/rdoc.rb +++ /dev/null @@ -1,211 +0,0 @@ -# frozen_string_literal: true -$DEBUG_RDOC = nil - -## -# RDoc produces documentation for Ruby source files by parsing the source and -# extracting the definition for classes, modules, methods, includes and -# requires. It associates these with optional documentation contained in an -# immediately preceding comment block then renders the result using an output -# formatter. -# -# For a simple introduction to writing or generating documentation using RDoc -# see the README. -# -# == Roadmap -# -# If you think you found a bug in RDoc see CONTRIBUTING@Bugs -# -# If you want to use RDoc to create documentation for your Ruby source files, -# see RDoc::Markup and refer to rdoc --help for command line usage. -# -# If you want to set the default markup format see -# RDoc::Markup@Markup+Formats -# -# If you want to store rdoc configuration in your gem (such as the default -# markup format) see RDoc::Options@Saved+Options -# -# If you want to write documentation for Ruby files see RDoc::Parser::Ruby -# -# If you want to write documentation for extensions written in C see -# RDoc::Parser::C -# -# If you want to generate documentation using rake see RDoc::Task. -# -# If you want to drive RDoc programmatically, see RDoc::RDoc. -# -# If you want to use the library to format text blocks into HTML or other -# formats, look at RDoc::Markup. -# -# If you want to make an RDoc plugin such as a generator or directive handler -# see RDoc::RDoc. -# -# If you want to write your own output generator see RDoc::Generator. -# -# If you want an overview of how RDoc works see CONTRIBUTING -# -# == Credits -# -# RDoc is currently being maintained by Eric Hodel . -# -# Dave Thomas is the original author of RDoc. -# -# * The Ruby parser in rdoc/parse.rb is based heavily on the outstanding -# work of Keiju ISHITSUKA of Nippon Rational Inc, who produced the Ruby -# parser for irb and the rtags package. - -module RDoc - - ## - # Exception thrown by any rdoc error. - - class Error < RuntimeError; end - - require_relative 'rdoc/version' - - ## - # Method visibilities - - VISIBILITIES = [:public, :protected, :private] - - ## - # Name of the dotfile that contains the description of files to be processed - # in the current directory - - DOT_DOC_FILENAME = ".document" - - ## - # General RDoc modifiers - - GENERAL_MODIFIERS = %w[nodoc].freeze - - ## - # RDoc modifiers for classes - - CLASS_MODIFIERS = GENERAL_MODIFIERS - - ## - # RDoc modifiers for attributes - - ATTR_MODIFIERS = GENERAL_MODIFIERS - - ## - # RDoc modifiers for constants - - CONSTANT_MODIFIERS = GENERAL_MODIFIERS - - ## - # RDoc modifiers for methods - - METHOD_MODIFIERS = GENERAL_MODIFIERS + - %w[arg args yield yields notnew not-new not_new doc] - - ## - # Loads the best available YAML library. - - def self.load_yaml - begin - gem 'psych' - rescue NameError => e # --disable-gems - raise unless e.name == :gem - rescue Gem::LoadError - end - - begin - require 'psych' - rescue ::LoadError - ensure - require 'yaml' - end - end - - ## - # Searches and returns the directory for settings. - # - # 1. $HOME/.rdoc directory, if it exists. - # 2. The +rdoc+ directory under the path specified by the - # +XDG_DATA_HOME+ environment variable, if it is set. - # 3. $HOME/.local/share/rdoc directory. - # - # Other than the home directory, the containing directory will be - # created automatically. - - def self.home - rdoc_dir = begin - File.expand_path('~/.rdoc') - rescue ArgumentError - end - - if File.directory?(rdoc_dir) - rdoc_dir - else - require 'fileutils' - begin - # XDG - xdg_data_home = ENV["XDG_DATA_HOME"] || File.join(File.expand_path("~"), '.local', 'share') - unless File.exist?(xdg_data_home) - FileUtils.mkdir_p xdg_data_home - end - File.join xdg_data_home, "rdoc" - rescue Errno::EACCES - end - end - end - - autoload :RDoc, "#{__dir__}/rdoc/rdoc" - - autoload :CrossReference, "#{__dir__}/rdoc/cross_reference" - autoload :ERBIO, "#{__dir__}/rdoc/erbio" - autoload :ERBPartial, "#{__dir__}/rdoc/erb_partial" - autoload :Encoding, "#{__dir__}/rdoc/encoding" - autoload :Generator, "#{__dir__}/rdoc/generator" - autoload :Options, "#{__dir__}/rdoc/options" - autoload :Parser, "#{__dir__}/rdoc/parser" - autoload :Servlet, "#{__dir__}/rdoc/servlet" - autoload :RI, "#{__dir__}/rdoc/ri" - autoload :Stats, "#{__dir__}/rdoc/stats" - autoload :Store, "#{__dir__}/rdoc/store" - autoload :Task, "#{__dir__}/rdoc/task" - autoload :Text, "#{__dir__}/rdoc/text" - - autoload :Markdown, "#{__dir__}/rdoc/markdown" - autoload :Markup, "#{__dir__}/rdoc/markup" - autoload :RD, "#{__dir__}/rdoc/rd" - autoload :TomDoc, "#{__dir__}/rdoc/tom_doc" - - autoload :KNOWN_CLASSES, "#{__dir__}/rdoc/known_classes" - - autoload :TokenStream, "#{__dir__}/rdoc/token_stream" - - autoload :Comment, "#{__dir__}/rdoc/comment" - - require_relative 'rdoc/i18n' - - # code objects - # - # We represent the various high-level code constructs that appear in Ruby - # programs: classes, modules, methods, and so on. - autoload :CodeObject, "#{__dir__}/rdoc/code_object" - - autoload :Context, "#{__dir__}/rdoc/code_object/context" - autoload :TopLevel, "#{__dir__}/rdoc/code_object/top_level" - - autoload :AnonClass, "#{__dir__}/rdoc/code_object/anon_class" - autoload :ClassModule, "#{__dir__}/rdoc/code_object/class_module" - autoload :NormalClass, "#{__dir__}/rdoc/code_object/normal_class" - autoload :NormalModule, "#{__dir__}/rdoc/code_object/normal_module" - autoload :SingleClass, "#{__dir__}/rdoc/code_object/single_class" - - autoload :Alias, "#{__dir__}/rdoc/code_object/alias" - autoload :AnyMethod, "#{__dir__}/rdoc/code_object/any_method" - autoload :MethodAttr, "#{__dir__}/rdoc/code_object/method_attr" - autoload :GhostMethod, "#{__dir__}/rdoc/code_object/ghost_method" - autoload :MetaMethod, "#{__dir__}/rdoc/code_object/meta_method" - autoload :Attr, "#{__dir__}/rdoc/code_object/attr" - - autoload :Constant, "#{__dir__}/rdoc/code_object/constant" - autoload :Mixin, "#{__dir__}/rdoc/code_object/mixin" - autoload :Include, "#{__dir__}/rdoc/code_object/include" - autoload :Extend, "#{__dir__}/rdoc/code_object/extend" - autoload :Require, "#{__dir__}/rdoc/code_object/require" - -end diff --git a/lib/rdoc/code_object.rb b/lib/rdoc/code_object.rb deleted file mode 100644 index 83997c2580..0000000000 --- a/lib/rdoc/code_object.rb +++ /dev/null @@ -1,427 +0,0 @@ -# frozen_string_literal: true -## -# Base class for the RDoc code tree. -# -# We contain the common stuff for contexts (which are containers) and other -# elements (methods, attributes and so on) -# -# Here's the tree of the CodeObject subclasses: -# -# * RDoc::Context -# * RDoc::TopLevel -# * RDoc::ClassModule -# * RDoc::AnonClass (never used so far) -# * RDoc::NormalClass -# * RDoc::NormalModule -# * RDoc::SingleClass -# * RDoc::MethodAttr -# * RDoc::Attr -# * RDoc::AnyMethod -# * RDoc::GhostMethod -# * RDoc::MetaMethod -# * RDoc::Alias -# * RDoc::Constant -# * RDoc::Mixin -# * RDoc::Require -# * RDoc::Include - -class RDoc::CodeObject - - include RDoc::Text - - ## - # Our comment - - attr_reader :comment - - ## - # Do we document our children? - - attr_reader :document_children - - ## - # Do we document ourselves? - - attr_reader :document_self - - ## - # Are we done documenting (ie, did we come across a :enddoc:)? - - attr_reader :done_documenting - - ## - # Which file this code object was defined in - - attr_reader :file - - ## - # Force documentation of this CodeObject - - attr_reader :force_documentation - - ## - # Line in #file where this CodeObject was defined - - attr_accessor :line - - ## - # Hash of arbitrary metadata for this CodeObject - - attr_reader :metadata - - ## - # Sets the parent CodeObject - - attr_writer :parent - - ## - # Did we ever receive a +:nodoc:+ directive? - - attr_reader :received_nodoc - - ## - # Set the section this CodeObject is in - - attr_writer :section - - ## - # The RDoc::Store for this object. - - attr_reader :store - - ## - # We are the model of the code, but we know that at some point we will be - # worked on by viewers. By implementing the Viewable protocol, viewers can - # associated themselves with these objects. - - attr_accessor :viewer - - ## - # When mixed-in to a class, this points to the Context in which it was originally defined. - - attr_accessor :mixin_from - - ## - # Creates a new CodeObject that will document itself and its children - - def initialize - @metadata = {} - @comment = '' - @parent = nil - @parent_name = nil # for loading - @parent_class = nil # for loading - @section = nil - @section_title = nil # for loading - @file = nil - @full_name = nil - @store = nil - @track_visibility = true - @mixin_from = nil - - initialize_visibility - end - - ## - # Initializes state for visibility of this CodeObject and its children. - - def initialize_visibility # :nodoc: - @document_children = true - @document_self = true - @done_documenting = false - @force_documentation = false - @received_nodoc = false - @ignored = false - @suppressed = false - @track_visibility = true - end - - ## - # Replaces our comment with +comment+, unless it is empty. - - def comment=(comment) - @comment = case comment - when NilClass then '' - when RDoc::Markup::Document then comment - when RDoc::Comment then comment.normalize - else - if comment and not comment.empty? then - normalize_comment comment - else - # HACK correct fix is to have #initialize create @comment - # with the correct encoding - if String === @comment and @comment.empty? then - @comment = RDoc::Encoding.change_encoding @comment, comment.encoding - end - @comment - end - end - end - - ## - # Should this CodeObject be displayed in output? - # - # A code object should be displayed if: - # - # * The item didn't have a nodoc or wasn't in a container that had nodoc - # * The item wasn't ignored - # * The item has documentation and was not suppressed - - def display? - @document_self and not @ignored and - (documented? or not @suppressed) - end - - ## - # Enables or disables documentation of this CodeObject's children unless it - # has been turned off by :enddoc: - - def document_children=(document_children) - return unless @track_visibility - - @document_children = document_children unless @done_documenting - end - - ## - # Enables or disables documentation of this CodeObject unless it has been - # turned off by :enddoc:. If the argument is +nil+ it means the - # documentation is turned off by +:nodoc:+. - - def document_self=(document_self) - return unless @track_visibility - return if @done_documenting - - @document_self = document_self - @received_nodoc = true if document_self.nil? - end - - ## - # Does this object have a comment with content or is #received_nodoc true? - - def documented? - @received_nodoc or !@comment.empty? - end - - ## - # Turns documentation on/off, and turns on/off #document_self - # and #document_children. - # - # Once documentation has been turned off (by +:enddoc:+), - # the object will refuse to turn #document_self or - # #document_children on, so +:doc:+ and +:start_doc:+ directives - # will have no effect in the current file. - - def done_documenting=(value) - return unless @track_visibility - @done_documenting = value - @document_self = !value - @document_children = @document_self - end - - ## - # Yields each parent of this CodeObject. See also - # RDoc::ClassModule#each_ancestor - - def each_parent - code_object = self - - while code_object = code_object.parent do - yield code_object - end - - self - end - - ## - # File name where this CodeObject was found. - # - # See also RDoc::Context#in_files - - def file_name - return unless @file - - @file.absolute_name - end - - ## - # Force the documentation of this object unless documentation - # has been turned off by :enddoc: - #-- - # HACK untested, was assigning to an ivar - - def force_documentation=(value) - @force_documentation = value unless @done_documenting - end - - ## - # Sets the full_name overriding any computed full name. - # - # Set to +nil+ to clear RDoc's cached value - - def full_name= full_name - @full_name = full_name - end - - ## - # Use this to ignore a CodeObject and all its children until found again - # (#record_location is called). An ignored item will not be displayed in - # documentation. - # - # See github issue #55 - # - # The ignored status is temporary in order to allow implementation details - # to be hidden. At the end of processing a file RDoc allows all classes - # and modules to add new documentation to previously created classes. - # - # If a class was ignored (via stopdoc) then reopened later with additional - # documentation it should be displayed. If a class was ignored and never - # reopened it should not be displayed. The ignore flag allows this to - # occur. - - def ignore - return unless @track_visibility - - @ignored = true - - stop_doc - end - - ## - # Has this class been ignored? - # - # See also #ignore - - def ignored? - @ignored - end - - ## - # The options instance from the store this CodeObject is attached to, or a - # default options instance if the CodeObject is not attached. - # - # This is used by Text#snippet - - def options - if @store and @store.rdoc then - @store.rdoc.options - else - RDoc::Options.new - end - end - - ## - # Our parent CodeObject. The parent may be missing for classes loaded from - # legacy RI data stores. - - def parent - return @parent if @parent - return nil unless @parent_name - - if @parent_class == RDoc::TopLevel then - @parent = @store.add_file @parent_name - else - @parent = @store.find_class_or_module @parent_name - - return @parent if @parent - - begin - @parent = @store.load_class @parent_name - rescue RDoc::Store::MissingFileError - nil - end - end - end - - ## - # File name of our parent - - def parent_file_name - @parent ? @parent.base_name : '(unknown)' - end - - ## - # Name of our parent - - def parent_name - @parent ? @parent.full_name : '(unknown)' - end - - ## - # Records the RDoc::TopLevel (file) where this code object was defined - - def record_location top_level - @ignored = false - @suppressed = false - @file = top_level - end - - ## - # The section this CodeObject is in. Sections allow grouping of constants, - # attributes and methods inside a class or module. - - def section - return @section if @section - - @section = parent.add_section @section_title if parent - end - - ## - # Enable capture of documentation unless documentation has been - # turned off by :enddoc: - - def start_doc - return if @done_documenting - - @document_self = true - @document_children = true - @ignored = false - @suppressed = false - end - - ## - # Disable capture of documentation - - def stop_doc - return unless @track_visibility - - @document_self = false - @document_children = false - end - - ## - # Sets the +store+ that contains this CodeObject - - def store= store - @store = store - - return unless @track_visibility - - if :nodoc == options.visibility then - initialize_visibility - @track_visibility = false - end - end - - ## - # Use this to suppress a CodeObject and all its children until the next file - # it is seen in or documentation is discovered. A suppressed item with - # documentation will be displayed while an ignored item with documentation - # may not be displayed. - - def suppress - return unless @track_visibility - - @suppressed = true - - stop_doc - end - - ## - # Has this class been suppressed? - # - # See also #suppress - - def suppressed? - @suppressed - end - -end diff --git a/lib/rdoc/code_object/alias.rb b/lib/rdoc/code_object/alias.rb deleted file mode 100644 index 92df7e448f..0000000000 --- a/lib/rdoc/code_object/alias.rb +++ /dev/null @@ -1,111 +0,0 @@ -# frozen_string_literal: true -## -# Represent an alias, which is an old_name/new_name pair associated with a -# particular context -#-- -# TODO implement Alias as a proxy to a method/attribute, inheriting from -# MethodAttr - -class RDoc::Alias < RDoc::CodeObject - - ## - # Aliased method's name - - attr_reader :new_name - - alias name new_name - - ## - # Aliasee method's name - - attr_reader :old_name - - ## - # Is this an alias declared in a singleton context? - - attr_accessor :singleton - - ## - # Source file token stream - - attr_reader :text - - ## - # Creates a new Alias with a token stream of +text+ that aliases +old_name+ - # to +new_name+, has +comment+ and is a +singleton+ context. - - def initialize(text, old_name, new_name, comment, singleton = false) - super() - - @text = text - @singleton = singleton - @old_name = old_name - @new_name = new_name - self.comment = comment - end - - ## - # Order by #singleton then #new_name - - def <=>(other) - [@singleton ? 0 : 1, new_name] <=> [other.singleton ? 0 : 1, other.new_name] - end - - ## - # HTML fragment reference for this alias - - def aref - type = singleton ? 'c' : 'i' - "#alias-#{type}-#{html_name}" - end - - ## - # Full old name including namespace - - def full_old_name - @full_name || "#{parent.name}#{pretty_old_name}" - end - - ## - # HTML id-friendly version of +#new_name+. - - def html_name - CGI.escape(@new_name.gsub('-', '-2D')).gsub('%', '-').sub(/^-/, '') - end - - def inspect # :nodoc: - parent_name = parent ? parent.name : '(unknown)' - "#<%s:0x%x %s.alias_method %s, %s>" % [ - self.class, object_id, - parent_name, @old_name, @new_name, - ] - end - - ## - # '::' for the alias of a singleton method/attribute, '#' for instance-level. - - def name_prefix - singleton ? '::' : '#' - end - - ## - # Old name with prefix '::' or '#'. - - def pretty_old_name - "#{singleton ? '::' : '#'}#{@old_name}" - end - - ## - # New name with prefix '::' or '#'. - - def pretty_new_name - "#{singleton ? '::' : '#'}#{@new_name}" - end - - alias pretty_name pretty_new_name - - def to_s # :nodoc: - "alias: #{self.new_name} -> #{self.pretty_old_name} in: #{parent}" - end - -end diff --git a/lib/rdoc/code_object/anon_class.rb b/lib/rdoc/code_object/anon_class.rb deleted file mode 100644 index 3c2f0e1877..0000000000 --- a/lib/rdoc/code_object/anon_class.rb +++ /dev/null @@ -1,10 +0,0 @@ -# frozen_string_literal: true -## -# An anonymous class like: -# -# c = Class.new do end -# -# AnonClass is currently not used. - -class RDoc::AnonClass < RDoc::ClassModule -end diff --git a/lib/rdoc/code_object/any_method.rb b/lib/rdoc/code_object/any_method.rb deleted file mode 100644 index 465c4a4fb2..0000000000 --- a/lib/rdoc/code_object/any_method.rb +++ /dev/null @@ -1,379 +0,0 @@ -# frozen_string_literal: true -## -# AnyMethod is the base class for objects representing methods - -class RDoc::AnyMethod < RDoc::MethodAttr - - ## - # 2:: - # RDoc 4 - # Added calls_super - # Added parent name and class - # Added section title - # 3:: - # RDoc 4.1 - # Added is_alias_for - - MARSHAL_VERSION = 3 # :nodoc: - - ## - # Don't rename \#initialize to \::new - - attr_accessor :dont_rename_initialize - - ## - # The C function that implements this method (if it was defined in a C file) - - attr_accessor :c_function - - # The section title of the method (if defined in a C file via +:category:+) - attr_accessor :section_title - - # Parameters for this method - - attr_accessor :params - - ## - # If true this method uses +super+ to call a superclass version - - attr_accessor :calls_super - - include RDoc::TokenStream - - ## - # Creates a new AnyMethod with a token stream +text+ and +name+ - - def initialize text, name - super - - @c_function = nil - @dont_rename_initialize = false - @token_stream = nil - @calls_super = false - @superclass_method = nil - end - - ## - # Adds +an_alias+ as an alias for this method in +context+. - - def add_alias an_alias, context = nil - method = self.class.new an_alias.text, an_alias.new_name - - method.record_location an_alias.file - method.singleton = self.singleton - method.params = self.params - method.visibility = self.visibility - method.comment = an_alias.comment - method.is_alias_for = self - @aliases << method - context.add_method method if context - method - end - - ## - # Prefix for +aref+ is 'method'. - - def aref_prefix - 'method' - end - - ## - # The call_seq or the param_seq with method name, if there is no call_seq. - # - # Use this for displaying a method's argument lists. - - def arglists - if @call_seq then - @call_seq - elsif @params then - "#{name}#{param_seq}" - end - end - - ## - # Different ways to call this method - - def call_seq - unless call_seq = _call_seq - call_seq = is_alias_for._call_seq if is_alias_for - end - - return unless call_seq - - deduplicate_call_seq(call_seq) - end - - ## - # Sets the different ways you can call this method. If an empty +call_seq+ - # is given nil is assumed. - # - # See also #param_seq - - def call_seq= call_seq - return if call_seq.empty? - - @call_seq = call_seq - end - - ## - # Whether the method has a call-seq. - - def has_call_seq? - !!(@call_seq || is_alias_for&._call_seq) - end - - ## - # Loads is_alias_for from the internal name. Returns nil if the alias - # cannot be found. - - def is_alias_for # :nodoc: - case @is_alias_for - when RDoc::MethodAttr then - @is_alias_for - when Array then - return nil unless @store - - klass_name, singleton, method_name = @is_alias_for - - return nil unless klass = @store.find_class_or_module(klass_name) - - @is_alias_for = klass.find_method method_name, singleton - end - end - - ## - # Dumps this AnyMethod for use by ri. See also #marshal_load - - def marshal_dump - aliases = @aliases.map do |a| - [a.name, parse(a.comment)] - end - - is_alias_for = [ - @is_alias_for.parent.full_name, - @is_alias_for.singleton, - @is_alias_for.name - ] if @is_alias_for - - [ MARSHAL_VERSION, - @name, - full_name, - @singleton, - @visibility, - parse(@comment), - @call_seq, - @block_params, - aliases, - @params, - @file.relative_name, - @calls_super, - @parent.name, - @parent.class, - @section.title, - is_alias_for, - ] - end - - ## - # Loads this AnyMethod from +array+. For a loaded AnyMethod the following - # methods will return cached values: - # - # * #full_name - # * #parent_name - - def marshal_load array - initialize_visibility - - @dont_rename_initialize = nil - @token_stream = nil - @aliases = [] - @parent = nil - @parent_name = nil - @parent_class = nil - @section = nil - @file = nil - - version = array[0] - @name = array[1] - @full_name = array[2] - @singleton = array[3] - @visibility = array[4] - @comment = array[5] - @call_seq = array[6] - @block_params = array[7] - # 8 handled below - @params = array[9] - # 10 handled below - @calls_super = array[11] - @parent_name = array[12] - @parent_title = array[13] - @section_title = array[14] - @is_alias_for = array[15] - - array[8].each do |new_name, comment| - add_alias RDoc::Alias.new(nil, @name, new_name, comment, @singleton) - end - - @parent_name ||= if @full_name =~ /#/ then - $` - else - name = @full_name.split('::') - name.pop - name.join '::' - end - - @file = RDoc::TopLevel.new array[10] if version > 0 - end - - ## - # Method name - # - # If the method has no assigned name, it extracts it from #call_seq. - - def name - return @name if @name - - @name = - @call_seq[/^.*?\.(\w+)/, 1] || - @call_seq[/^.*?(\w+)/, 1] || - @call_seq if @call_seq - end - - ## - # A list of this method's method and yield parameters. +call-seq+ params - # are preferred over parsed method and block params. - - def param_list - if @call_seq then - params = @call_seq.split("\n").last - params = params.sub(/.*?\((.*)\)/, '\1') - params = params.sub(/(\{|do)\s*\|([^|]*)\|.*/, ',\2') - elsif @params then - params = @params.sub(/\((.*)\)/, '\1') - - params << ",#{@block_params}" if @block_params - elsif @block_params then - params = @block_params - else - return [] - end - - if @block_params then - # If this method has explicit block parameters, remove any explicit - # &block - params = params.sub(/,?\s*&\w+/, '') - else - params = params.sub(/\&(\w+)/, '\1') - end - - params = params.gsub(/\s+/, '').split(',').reject(&:empty?) - - params.map { |param| param.sub(/=.*/, '') } - end - - ## - # Pretty parameter list for this method. If the method's parameters were - # given by +call-seq+ it is preferred over the parsed values. - - def param_seq - if @call_seq then - params = @call_seq.split("\n").last - params = params.sub(/[^( ]+/, '') - params = params.sub(/(\|[^|]+\|)\s*\.\.\.\s*(end|\})/, '\1 \2') - elsif @params then - params = @params.gsub(/\s*\#.*/, '') - params = params.tr_s("\n ", " ") - params = "(#{params})" unless params[0] == ?( - else - params = '' - end - - if @block_params then - # If this method has explicit block parameters, remove any explicit - # &block - params = params.sub(/,?\s*&\w+/, '') - - block = @block_params.tr_s("\n ", " ") - if block[0] == ?( - block = block.sub(/^\(/, '').sub(/\)/, '') - end - params << " { |#{block}| ... }" - end - - params - end - - ## - # Whether to skip the method description, true for methods that have - # aliases with a call-seq that doesn't include the method name. - - def skip_description? - has_call_seq? && call_seq.nil? && !!(is_alias_for || !aliases.empty?) - end - - ## - # Sets the store for this method and its referenced code objects. - - def store= store - super - - @file = @store.add_file @file.full_name if @file - end - - ## - # For methods that +super+, find the superclass method that would be called. - - def superclass_method - return unless @calls_super - return @superclass_method if @superclass_method - - parent.each_ancestor do |ancestor| - if method = ancestor.method_list.find { |m| m.name == @name } then - @superclass_method = method - break - end - end - - @superclass_method - end - - protected - - ## - # call_seq without deduplication and alias lookup. - - def _call_seq - @call_seq if defined?(@call_seq) && @call_seq - end - - private - - ## - # call_seq with alias examples information removed, if this - # method is an alias method. - - def deduplicate_call_seq(call_seq) - return call_seq unless is_alias_for || !aliases.empty? - - method_name = self.name - method_name = method_name[0, 1] if method_name =~ /\A\[/ - - entries = call_seq.split "\n" - - ignore = aliases.map(&:name) - if is_alias_for - ignore << is_alias_for.name - ignore.concat is_alias_for.aliases.map(&:name) - end - ignore.map! { |n| n =~ /\A\[/ ? /\[.*\]/ : n} - ignore.delete(method_name) - ignore = Regexp.union(ignore) - - matching = entries.reject do |entry| - entry =~ /^\w*\.?#{ignore}[$\(\s]/ or - entry =~ /\s#{ignore}\s/ - end - - matching.empty? ? nil : matching.join("\n") - end -end diff --git a/lib/rdoc/code_object/attr.rb b/lib/rdoc/code_object/attr.rb deleted file mode 100644 index a403235933..0000000000 --- a/lib/rdoc/code_object/attr.rb +++ /dev/null @@ -1,175 +0,0 @@ -# frozen_string_literal: true -## -# An attribute created by \#attr, \#attr_reader, \#attr_writer or -# \#attr_accessor - -class RDoc::Attr < RDoc::MethodAttr - - ## - # 3:: - # RDoc 4 - # Added parent name and class - # Added section title - - MARSHAL_VERSION = 3 # :nodoc: - - ## - # Is the attribute readable ('R'), writable ('W') or both ('RW')? - - attr_accessor :rw - - ## - # Creates a new Attr with body +text+, +name+, read/write status +rw+ and - # +comment+. +singleton+ marks this as a class attribute. - - def initialize(text, name, rw, comment, singleton = false) - super text, name - - @rw = rw - @singleton = singleton - self.comment = comment - end - - ## - # Attributes are equal when their names, singleton and rw are identical - - def == other - self.class == other.class and - self.name == other.name and - self.rw == other.rw and - self.singleton == other.singleton - end - - ## - # Add +an_alias+ as an attribute in +context+. - - def add_alias(an_alias, context) - new_attr = self.class.new(self.text, an_alias.new_name, self.rw, - self.comment, self.singleton) - - new_attr.record_location an_alias.file - new_attr.visibility = self.visibility - new_attr.is_alias_for = self - @aliases << new_attr - context.add_attribute new_attr - new_attr - end - - ## - # The #aref prefix for attributes - - def aref_prefix - 'attribute' - end - - ## - # Attributes never call super. See RDoc::AnyMethod#calls_super - # - # An RDoc::Attr can show up in the method list in some situations (see - # Gem::ConfigFile) - - def calls_super # :nodoc: - false - end - - ## - # Returns attr_reader, attr_writer or attr_accessor as appropriate. - - def definition - case @rw - when 'RW' then 'attr_accessor' - when 'R' then 'attr_reader' - when 'W' then 'attr_writer' - end - end - - def inspect # :nodoc: - alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil - visibility = self.visibility - visibility = "forced #{visibility}" if force_documentation - "#<%s:0x%x %s %s (%s)%s>" % [ - self.class, object_id, - full_name, - rw, - visibility, - alias_for, - ] - end - - ## - # Dumps this Attr for use by ri. See also #marshal_load - - def marshal_dump - [ MARSHAL_VERSION, - @name, - full_name, - @rw, - @visibility, - parse(@comment), - singleton, - @file.relative_name, - @parent.full_name, - @parent.class, - @section.title - ] - end - - ## - # Loads this Attr from +array+. For a loaded Attr the following - # methods will return cached values: - # - # * #full_name - # * #parent_name - - def marshal_load array - initialize_visibility - - @aliases = [] - @parent = nil - @parent_name = nil - @parent_class = nil - @section = nil - @file = nil - - version = array[0] - @name = array[1] - @full_name = array[2] - @rw = array[3] - @visibility = array[4] - @comment = array[5] - @singleton = array[6] || false # MARSHAL_VERSION == 0 - # 7 handled below - @parent_name = array[8] - @parent_class = array[9] - @section_title = array[10] - - @file = RDoc::TopLevel.new array[7] if version > 1 - - @parent_name ||= @full_name.split('#', 2).first - end - - def pretty_print q # :nodoc: - q.group 2, "[#{self.class.name} #{full_name} #{rw} #{visibility}", "]" do - unless comment.empty? then - q.breakable - q.text "comment:" - q.breakable - q.pp @comment - end - end - end - - def to_s # :nodoc: - "#{definition} #{name} in: #{parent}" - end - - ## - # Attributes do not have token streams. - # - # An RDoc::Attr can show up in the method list in some situations (see - # Gem::ConfigFile) - - def token_stream # :nodoc: - end - -end diff --git a/lib/rdoc/code_object/class_module.rb b/lib/rdoc/code_object/class_module.rb deleted file mode 100644 index 33e71ab3f3..0000000000 --- a/lib/rdoc/code_object/class_module.rb +++ /dev/null @@ -1,868 +0,0 @@ -# frozen_string_literal: true -## -# ClassModule is the base class for objects representing either a class or a -# module. - -class RDoc::ClassModule < RDoc::Context - - ## - # 1:: - # RDoc 3.7 - # * Added visibility, singleton and file to attributes - # * Added file to constants - # * Added file to includes - # * Added file to methods - # 2:: - # RDoc 3.13 - # * Added extends - # 3:: - # RDoc 4.0 - # * Added sections - # * Added in_files - # * Added parent name - # * Complete Constant dump - - MARSHAL_VERSION = 3 # :nodoc: - - ## - # Constants that are aliases for this class or module - - attr_accessor :constant_aliases - - ## - # Comment and the location it came from. Use #add_comment to add comments - - attr_accessor :comment_location - - attr_accessor :diagram # :nodoc: - - ## - # Class or module this constant is an alias for - - attr_accessor :is_alias_for - - ## - # Return a RDoc::ClassModule of class +class_type+ that is a copy - # of module +module+. Used to promote modules to classes. - #-- - # TODO move to RDoc::NormalClass (I think) - - def self.from_module class_type, mod - klass = class_type.new mod.name - - mod.comment_location.each do |comment, location| - klass.add_comment comment, location - end - - klass.parent = mod.parent - klass.section = mod.section - klass.viewer = mod.viewer - - klass.attributes.concat mod.attributes - klass.method_list.concat mod.method_list - klass.aliases.concat mod.aliases - klass.external_aliases.concat mod.external_aliases - klass.constants.concat mod.constants - klass.includes.concat mod.includes - klass.extends.concat mod.extends - - klass.methods_hash.update mod.methods_hash - klass.constants_hash.update mod.constants_hash - - klass.current_section = mod.current_section - klass.in_files.concat mod.in_files - klass.sections.concat mod.sections - klass.unmatched_alias_lists = mod.unmatched_alias_lists - klass.current_section = mod.current_section - klass.visibility = mod.visibility - - klass.classes_hash.update mod.classes_hash - klass.modules_hash.update mod.modules_hash - klass.metadata.update mod.metadata - - klass.document_self = mod.received_nodoc ? nil : mod.document_self - klass.document_children = mod.document_children - klass.force_documentation = mod.force_documentation - klass.done_documenting = mod.done_documenting - - # update the parent of all children - - (klass.attributes + - klass.method_list + - klass.aliases + - klass.external_aliases + - klass.constants + - klass.includes + - klass.extends + - klass.classes + - klass.modules).each do |obj| - obj.parent = klass - obj.full_name = nil - end - - klass - end - - ## - # Creates a new ClassModule with +name+ with optional +superclass+ - # - # This is a constructor for subclasses, and must never be called directly. - - def initialize(name, superclass = nil) - @constant_aliases = [] - @diagram = nil - @is_alias_for = nil - @name = name - @superclass = superclass - @comment_location = [] # [[comment, location]] - - super() - end - - ## - # Adds +comment+ to this ClassModule's list of comments at +location+. This - # method is preferred over #comment= since it allows ri data to be updated - # across multiple runs. - - def add_comment comment, location - return unless document_self - - original = comment - - comment = case comment - when RDoc::Comment then - comment.normalize - else - normalize_comment comment - end - - if location.parser == RDoc::Parser::C - @comment_location.delete_if { |(_, l)| l == location } - end - - @comment_location << [comment, location] - - self.comment = original - end - - def add_things my_things, other_things # :nodoc: - other_things.each do |group, things| - my_things[group].each { |thing| yield false, thing } if - my_things.include? group - - things.each do |thing| - yield true, thing - end - end - end - - ## - # Ancestors list for this ClassModule: the list of included modules - # (classes will add their superclass if any). - # - # Returns the included classes or modules, not the includes - # themselves. The returned values are either String or - # RDoc::NormalModule instances (see RDoc::Include#module). - # - # The values are returned in reverse order of their inclusion, - # which is the order suitable for searching methods/attributes - # in the ancestors. The superclass, if any, comes last. - - def ancestors - includes.map { |i| i.module }.reverse - end - - def aref_prefix # :nodoc: - raise NotImplementedError, "missing aref_prefix for #{self.class}" - end - - ## - # HTML fragment reference for this module or class. See - # RDoc::NormalClass#aref and RDoc::NormalModule#aref - - def aref - "#{aref_prefix}-#{full_name}" - end - - ## - # Ancestors of this class or module only - - alias direct_ancestors ancestors - - ## - # Clears the comment. Used by the Ruby parser. - - def clear_comment - @comment = '' - end - - ## - # This method is deprecated, use #add_comment instead. - # - # Appends +comment+ to the current comment, but separated by a rule. Works - # more like +=. - - def comment= comment # :nodoc: - comment = case comment - when RDoc::Comment then - comment.normalize - else - normalize_comment comment - end - - comment = "#{@comment.to_s}\n---\n#{comment.to_s}" unless @comment.empty? - - super comment - end - - ## - # Prepares this ClassModule for use by a generator. - # - # See RDoc::Store#complete - - def complete min_visibility - update_aliases - remove_nodoc_children - embed_mixins - update_includes - remove_invisible min_visibility - end - - ## - # Does this ClassModule or any of its methods have document_self set? - - def document_self_or_methods - document_self || method_list.any?{ |m| m.document_self } - end - - ## - # Does this class or module have a comment with content or is - # #received_nodoc true? - - def documented? - return true if @received_nodoc - return false if @comment_location.empty? - @comment_location.any? { |comment, _| not comment.empty? } - end - - ## - # Iterates the ancestors of this class or module for which an - # RDoc::ClassModule exists. - - def each_ancestor # :yields: module - return enum_for __method__ unless block_given? - - ancestors.each do |mod| - next if String === mod - next if self == mod - yield mod - end - end - - ## - # Looks for a symbol in the #ancestors. See Context#find_local_symbol. - - def find_ancestor_local_symbol symbol - each_ancestor do |m| - res = m.find_local_symbol(symbol) - return res if res - end - - nil - end - - ## - # Finds a class or module with +name+ in this namespace or its descendants - - def find_class_named name - return self if full_name == name - return self if @name == name - - @classes.values.find do |klass| - next if klass == self - klass.find_class_named name - end - end - - ## - # Return the fully qualified name of this class or module - - def full_name - @full_name ||= if RDoc::ClassModule === parent then - "#{parent.full_name}::#{@name}" - else - @name - end - end - - ## - # TODO: filter included items by #display? - - def marshal_dump # :nodoc: - attrs = attributes.sort.map do |attr| - next unless attr.display? - [ attr.name, attr.rw, - attr.visibility, attr.singleton, attr.file_name, - ] - end.compact - - method_types = methods_by_type.map do |type, visibilities| - visibilities = visibilities.map do |visibility, methods| - method_names = methods.map do |method| - next unless method.display? - [method.name, method.file_name] - end.compact - - [visibility, method_names.uniq] - end - - [type, visibilities] - end - - [ MARSHAL_VERSION, - @name, - full_name, - @superclass, - parse(@comment_location), - attrs, - constants.select { |constant| constant.display? }, - includes.map do |incl| - next unless incl.display? - [incl.name, parse(incl.comment), incl.file_name] - end.compact, - method_types, - extends.map do |ext| - next unless ext.display? - [ext.name, parse(ext.comment), ext.file_name] - end.compact, - @sections.values, - @in_files.map do |tl| - tl.relative_name - end, - parent.full_name, - parent.class, - ] - end - - def marshal_load array # :nodoc: - initialize_visibility - initialize_methods_etc - @current_section = nil - @document_self = true - @done_documenting = false - @parent = nil - @temporary_section = nil - @visibility = nil - @classes = {} - @modules = {} - - @name = array[1] - @full_name = array[2] - @superclass = array[3] - @comment = array[4] - - @comment_location = if RDoc::Markup::Document === @comment.parts.first then - @comment - else - RDoc::Markup::Document.new @comment - end - - array[5].each do |name, rw, visibility, singleton, file| - singleton ||= false - visibility ||= :public - - attr = RDoc::Attr.new nil, name, rw, nil, singleton - - add_attribute attr - attr.visibility = visibility - attr.record_location RDoc::TopLevel.new file - end - - array[6].each do |constant, comment, file| - case constant - when RDoc::Constant then - add_constant constant - else - constant = add_constant RDoc::Constant.new(constant, nil, comment) - constant.record_location RDoc::TopLevel.new file - end - end - - array[7].each do |name, comment, file| - incl = add_include RDoc::Include.new(name, comment) - incl.record_location RDoc::TopLevel.new file - end - - array[8].each do |type, visibilities| - visibilities.each do |visibility, methods| - @visibility = visibility - - methods.each do |name, file| - method = RDoc::AnyMethod.new nil, name - method.singleton = true if type == 'class' - method.record_location RDoc::TopLevel.new file - add_method method - end - end - end - - array[9].each do |name, comment, file| - ext = add_extend RDoc::Extend.new(name, comment) - ext.record_location RDoc::TopLevel.new file - end if array[9] # Support Marshal version 1 - - sections = (array[10] || []).map do |section| - [section.title, section] - end - - @sections = Hash[*sections.flatten] - @current_section = add_section nil - - @in_files = [] - - (array[11] || []).each do |filename| - record_location RDoc::TopLevel.new filename - end - - @parent_name = array[12] - @parent_class = array[13] - end - - ## - # Merges +class_module+ into this ClassModule. - # - # The data in +class_module+ is preferred over the receiver. - - def merge class_module - @parent = class_module.parent - @parent_name = class_module.parent_name - - other_document = parse class_module.comment_location - - if other_document then - document = parse @comment_location - - document = document.merge other_document - - @comment = @comment_location = document - end - - cm = class_module - other_files = cm.in_files - - merge_collections attributes, cm.attributes, other_files do |add, attr| - if add then - add_attribute attr - else - @attributes.delete attr - @methods_hash.delete attr.pretty_name - end - end - - merge_collections constants, cm.constants, other_files do |add, const| - if add then - add_constant const - else - @constants.delete const - @constants_hash.delete const.name - end - end - - merge_collections includes, cm.includes, other_files do |add, incl| - if add then - add_include incl - else - @includes.delete incl - end - end - - @includes.uniq! # clean up - - merge_collections extends, cm.extends, other_files do |add, ext| - if add then - add_extend ext - else - @extends.delete ext - end - end - - @extends.uniq! # clean up - - merge_collections method_list, cm.method_list, other_files do |add, meth| - if add then - add_method meth - else - @method_list.delete meth - @methods_hash.delete meth.pretty_name - end - end - - merge_sections cm - - self - end - - ## - # Merges collection +mine+ with +other+ preferring other. +other_files+ is - # used to help determine which items should be deleted. - # - # Yields whether the item should be added or removed (true or false) and the - # item to be added or removed. - # - # merge_collections things, other.things, other.in_files do |add, thing| - # if add then - # # add the thing - # else - # # remove the thing - # end - # end - - def merge_collections mine, other, other_files, &block # :nodoc: - my_things = mine. group_by { |thing| thing.file } - other_things = other.group_by { |thing| thing.file } - - remove_things my_things, other_files, &block - add_things my_things, other_things, &block - end - - ## - # Merges the comments in this ClassModule with the comments in the other - # ClassModule +cm+. - - def merge_sections cm # :nodoc: - my_sections = sections.group_by { |section| section.title } - other_sections = cm.sections.group_by { |section| section.title } - - other_files = cm.in_files - - remove_things my_sections, other_files do |_, section| - @sections.delete section.title - end - - other_sections.each do |group, sections| - if my_sections.include? group - my_sections[group].each do |my_section| - other_section = cm.sections_hash[group] - - my_comments = my_section.comments - other_comments = other_section.comments - - other_files = other_section.in_files - - merge_collections my_comments, other_comments, other_files do |add, comment| - if add then - my_section.add_comment comment - else - my_section.remove_comment comment - end - end - end - else - sections.each do |section| - add_section group, section.comments - end - end - end - end - - ## - # Does this object represent a module? - - def module? - false - end - - ## - # Allows overriding the initial name. - # - # Used for modules and classes that are constant aliases. - - def name= new_name - @name = new_name - end - - ## - # Parses +comment_location+ into an RDoc::Markup::Document composed of - # multiple RDoc::Markup::Documents with their file set. - - def parse comment_location - case comment_location - when String then - super - when Array then - docs = comment_location.map do |comment, location| - doc = super comment - doc.file = location - doc - end - - RDoc::Markup::Document.new(*docs) - when RDoc::Comment then - doc = super comment_location.text, comment_location.format - doc.file = comment_location.location - doc - when RDoc::Markup::Document then - return comment_location - else - raise ArgumentError, "unknown comment class #{comment_location.class}" - end - end - - ## - # Path to this class or module for use with HTML generator output. - - def path - http_url @store.rdoc.generator.class_dir - end - - ## - # Name to use to generate the url: - # modules and classes that are aliases for another - # module or class return the name of the latter. - - def name_for_path - is_alias_for ? is_alias_for.full_name : full_name - end - - ## - # Returns the classes and modules that are not constants - # aliasing another class or module. For use by formatters - # only (caches its result). - - def non_aliases - @non_aliases ||= classes_and_modules.reject { |cm| cm.is_alias_for } - end - - ## - # Updates the child modules or classes of class/module +parent+ by - # deleting the ones that have been removed from the documentation. - # - # +parent_hash+ is either parent.modules_hash or - # parent.classes_hash and +all_hash+ is ::all_modules_hash or - # ::all_classes_hash. - - def remove_nodoc_children - prefix = self.full_name + '::' - - modules_hash.each_key do |name| - full_name = prefix + name - modules_hash.delete name unless @store.modules_hash[full_name] - end - - classes_hash.each_key do |name| - full_name = prefix + name - classes_hash.delete name unless @store.classes_hash[full_name] - end - end - - def remove_things my_things, other_files # :nodoc: - my_things.delete_if do |file, things| - next false unless other_files.include? file - - things.each do |thing| - yield false, thing - end - - true - end - end - - ## - # Search record used by RDoc::Generator::JsonIndex - - def search_record - [ - name, - full_name, - full_name, - '', - path, - '', - snippet(@comment_location), - ] - end - - ## - # Sets the store for this class or module and its contained code objects. - - def store= store - super - - @attributes .each do |attr| attr.store = store end - @constants .each do |const| const.store = store end - @includes .each do |incl| incl.store = store end - @extends .each do |ext| ext.store = store end - @method_list.each do |meth| meth.store = store end - end - - ## - # Get the superclass of this class. Attempts to retrieve the superclass - # object, returns the name if it is not known. - - def superclass - @store.find_class_named(@superclass) || @superclass - end - - ## - # Set the superclass of this class to +superclass+ - # - # where +superclass+ is one of: - # - # - +nil+ - # - a String containing the full name of the superclass - # - the RDoc::ClassModule representing the superclass - - def superclass=(superclass) - raise NoMethodError, "#{full_name} is a module" if module? - case superclass - when RDoc::ClassModule - @superclass = superclass.full_name - when nil, String - @superclass = superclass - else - raise TypeError, "superclass must be a String or RDoc::ClassModule, not #{superclass.class}" - end - end - - ## - # Get all super classes of this class in an array. The last element might be - # a string if the name is unknown. - - def super_classes - result = [] - parent = self - while parent = parent.superclass - result << parent - return result if parent.is_a?(String) - end - result - end - - def to_s # :nodoc: - if is_alias_for then - "#{self.class.name} #{self.full_name} -> #{is_alias_for}" - else - super - end - end - - ## - # 'module' or 'class' - - def type - module? ? 'module' : 'class' - end - - ## - # Updates the child modules & classes by replacing the ones that are - # aliases through a constant. - # - # The aliased module/class is replaced in the children and in - # RDoc::Store#modules_hash or RDoc::Store#classes_hash - # by a copy that has RDoc::ClassModule#is_alias_for set to - # the aliased module/class, and this copy is added to #aliases - # of the aliased module/class. - # - # Formatters can use the #non_aliases method to retrieve children that - # are not aliases, for instance to list the namespace content, since - # the aliased modules are included in the constants of the class/module, - # that are listed separately. - - def update_aliases - constants.each do |const| - next unless cm = const.is_alias_for - cm_alias = cm.dup - cm_alias.name = const.name - - # Don't move top-level aliases under Object, they look ugly there - unless RDoc::TopLevel === cm_alias.parent then - cm_alias.parent = self - cm_alias.full_name = nil # force update for new parent - end - - cm_alias.aliases.clear - cm_alias.is_alias_for = cm - - if cm.module? then - @store.modules_hash[cm_alias.full_name] = cm_alias - modules_hash[const.name] = cm_alias - else - @store.classes_hash[cm_alias.full_name] = cm_alias - classes_hash[const.name] = cm_alias - end - - cm.aliases << cm_alias - end - end - - ## - # Deletes from #includes those whose module has been removed from the - # documentation. - #-- - # FIXME: includes are not reliably removed, see _possible_bug test case - - def update_includes - includes.reject! do |include| - mod = include.module - !(String === mod) && @store.modules_hash[mod.full_name].nil? - end - - includes.uniq! - end - - ## - # Deletes from #extends those whose module has been removed from the - # documentation. - #-- - # FIXME: like update_includes, extends are not reliably removed - - def update_extends - extends.reject! do |ext| - mod = ext.module - - !(String === mod) && @store.modules_hash[mod.full_name].nil? - end - - extends.uniq! - end - - def embed_mixins - return unless options.embed_mixins - - includes.each do |include| - next if String === include.module - include.module.method_list.each do |code_object| - add_method(prepare_to_embed(code_object)) - end - include.module.constants.each do |code_object| - add_constant(prepare_to_embed(code_object)) - end - include.module.attributes.each do |code_object| - add_attribute(prepare_to_embed(code_object)) - end - end - - extends.each do |ext| - next if String === ext.module - ext.module.method_list.each do |code_object| - add_method(prepare_to_embed(code_object, true)) - end - ext.module.attributes.each do |code_object| - add_attribute(prepare_to_embed(code_object, true)) - end - end - end - - private - - def prepare_to_embed(code_object, singleton=false) - code_object = code_object.dup - code_object.mixin_from = code_object.parent - code_object.singleton = true if singleton - set_current_section(code_object.section.title, code_object.section.comment) - # add_method and add_attribute will reassign self's visibility back to the method/attribute - # so we need to sync self's visibility with the object's to properly retain that information - self.visibility = code_object.visibility - code_object - end -end diff --git a/lib/rdoc/code_object/constant.rb b/lib/rdoc/code_object/constant.rb deleted file mode 100644 index 12b8be775c..0000000000 --- a/lib/rdoc/code_object/constant.rb +++ /dev/null @@ -1,186 +0,0 @@ -# frozen_string_literal: true -## -# A constant - -class RDoc::Constant < RDoc::CodeObject - - MARSHAL_VERSION = 0 # :nodoc: - - ## - # Sets the module or class this is constant is an alias for. - - attr_writer :is_alias_for - - ## - # The constant's name - - attr_accessor :name - - ## - # The constant's value - - attr_accessor :value - - ## - # The constant's visibility - - attr_accessor :visibility - - ## - # Creates a new constant with +name+, +value+ and +comment+ - - def initialize(name, value, comment) - super() - - @name = name - @value = value - - @is_alias_for = nil - @visibility = :public - - self.comment = comment - end - - ## - # Constants are ordered by name - - def <=> other - return unless self.class === other - - [parent_name, name] <=> [other.parent_name, other.name] - end - - ## - # Constants are equal when their #parent and #name is the same - - def == other - self.class == other.class and - @parent == other.parent and - @name == other.name - end - - ## - # A constant is documented if it has a comment, or is an alias - # for a documented class or module. - - def documented? - return true if super - return false unless @is_alias_for - case @is_alias_for - when String then - found = @store.find_class_or_module @is_alias_for - return false unless found - @is_alias_for = found - end - @is_alias_for.documented? - end - - ## - # Full constant name including namespace - - def full_name - @full_name ||= "#{parent_name}::#{@name}" - end - - ## - # The module or class this constant is an alias for - - def is_alias_for - case @is_alias_for - when String then - found = @store.find_class_or_module @is_alias_for - @is_alias_for = found if found - @is_alias_for - else - @is_alias_for - end - end - - def inspect # :nodoc: - "#<%s:0x%x %s::%s>" % [ - self.class, object_id, - parent_name, @name, - ] - end - - ## - # Dumps this Constant for use by ri. See also #marshal_load - - def marshal_dump - alias_name = case found = is_alias_for - when RDoc::CodeObject then found.full_name - else found - end - - [ MARSHAL_VERSION, - @name, - full_name, - @visibility, - alias_name, - parse(@comment), - @file.relative_name, - parent.name, - parent.class, - section.title, - ] - end - - ## - # Loads this Constant from +array+. For a loaded Constant the following - # methods will return cached values: - # - # * #full_name - # * #parent_name - - def marshal_load array - initialize array[1], nil, array[5] - - @full_name = array[2] - @visibility = array[3] || :public - @is_alias_for = array[4] - # 5 handled above - # 6 handled below - @parent_name = array[7] - @parent_class = array[8] - @section_title = array[9] - - @file = RDoc::TopLevel.new array[6] - end - - ## - # Path to this constant for use with HTML generator output. - - def path - "#{@parent.path}##{@name}" - end - - def pretty_print q # :nodoc: - q.group 2, "[#{self.class.name} #{full_name}", "]" do - unless comment.empty? then - q.breakable - q.text "comment:" - q.breakable - q.pp @comment - end - end - end - - ## - # Sets the store for this class or module and its contained code objects. - - def store= store - super - - @file = @store.add_file @file.full_name if @file - end - - def to_s # :nodoc: - parent_name = parent ? parent.full_name : '(unknown)' - if is_alias_for - "constant #{parent_name}::#@name -> #{is_alias_for}" - else - "constant #{parent_name}::#@name" - end - end - -end diff --git a/lib/rdoc/code_object/context.rb b/lib/rdoc/code_object/context.rb deleted file mode 100644 index c688d562c3..0000000000 --- a/lib/rdoc/code_object/context.rb +++ /dev/null @@ -1,1264 +0,0 @@ -# frozen_string_literal: true -## -# A Context is something that can hold modules, classes, methods, attributes, -# aliases, requires, and includes. Classes, modules, and files are all -# Contexts. - -class RDoc::Context < RDoc::CodeObject - - include Comparable - - ## - # Types of methods - - TYPES = %w[class instance] - - ## - # If a context has these titles it will be sorted in this order. - - TOMDOC_TITLES = [nil, 'Public', 'Internal', 'Deprecated'] # :nodoc: - TOMDOC_TITLES_SORT = TOMDOC_TITLES.sort_by { |title| title.to_s } # :nodoc: - - ## - # Class/module aliases - - attr_reader :aliases - - ## - # All attr* methods - - attr_reader :attributes - - ## - # Block params to be used in the next MethodAttr parsed under this context - - attr_accessor :block_params - - ## - # Constants defined - - attr_reader :constants - - ## - # Sets the current documentation section of documentation - - attr_writer :current_section - - ## - # Files this context is found in - - attr_reader :in_files - - ## - # Modules this context includes - - attr_reader :includes - - ## - # Modules this context is extended with - - attr_reader :extends - - ## - # Methods defined in this context - - attr_reader :method_list - - ## - # Name of this class excluding namespace. See also full_name - - attr_reader :name - - ## - # Files this context requires - - attr_reader :requires - - ## - # Use this section for the next method, attribute or constant added. - - attr_accessor :temporary_section - - ## - # Hash old_name => [aliases], for aliases - # that haven't (yet) been resolved to a method/attribute. - # (Not to be confused with the aliases of the context.) - - attr_accessor :unmatched_alias_lists - - ## - # Aliases that could not be resolved. - - attr_reader :external_aliases - - ## - # Current visibility of this context - - attr_accessor :visibility - - ## - # Current visibility of this line - - attr_writer :current_line_visibility - - ## - # Hash of registered methods. Attributes are also registered here, - # twice if they are RW. - - attr_reader :methods_hash - - ## - # Params to be used in the next MethodAttr parsed under this context - - attr_accessor :params - - ## - # Hash of registered constants. - - attr_reader :constants_hash - - ## - # Creates an unnamed empty context with public current visibility - - def initialize - super - - @in_files = [] - - @name ||= "unknown" - @parent = nil - @visibility = :public - - @current_section = Section.new self, nil, nil - @sections = { nil => @current_section } - @temporary_section = nil - - @classes = {} - @modules = {} - - initialize_methods_etc - end - - ## - # Sets the defaults for methods and so-forth - - def initialize_methods_etc - @method_list = [] - @attributes = [] - @aliases = [] - @requires = [] - @includes = [] - @extends = [] - @constants = [] - @external_aliases = [] - @current_line_visibility = nil - - # This Hash maps a method name to a list of unmatched aliases (aliases of - # a method not yet encountered). - @unmatched_alias_lists = {} - - @methods_hash = {} - @constants_hash = {} - - @params = nil - - @store ||= nil - end - - ## - # Contexts are sorted by full_name - - def <=>(other) - return nil unless RDoc::CodeObject === other - - full_name <=> other.full_name - end - - ## - # Adds an item of type +klass+ with the given +name+ and +comment+ to the - # context. - # - # Currently only RDoc::Extend and RDoc::Include are supported. - - def add klass, name, comment - if RDoc::Extend == klass then - ext = RDoc::Extend.new name, comment - add_extend ext - elsif RDoc::Include == klass then - incl = RDoc::Include.new name, comment - add_include incl - else - raise NotImplementedError, "adding a #{klass} is not implemented" - end - end - - ## - # Adds +an_alias+ that is automatically resolved - - def add_alias an_alias - return an_alias unless @document_self - - method_attr = find_method(an_alias.old_name, an_alias.singleton) || - find_attribute(an_alias.old_name, an_alias.singleton) - - if method_attr then - method_attr.add_alias an_alias, self - else - add_to @external_aliases, an_alias - unmatched_alias_list = - @unmatched_alias_lists[an_alias.pretty_old_name] ||= [] - unmatched_alias_list.push an_alias - end - - an_alias - end - - ## - # Adds +attribute+ if not already there. If it is (as method(s) or attribute), - # updates the comment if it was empty. - # - # The attribute is registered only if it defines a new method. - # For instance, attr_reader :foo will not be registered - # if method +foo+ exists, but attr_accessor :foo will be registered - # if method +foo+ exists, but foo= does not. - - def add_attribute attribute - return attribute unless @document_self - - # mainly to check for redefinition of an attribute as a method - # TODO find a policy for 'attr_reader :foo' + 'def foo=()' - register = false - - key = nil - - if attribute.rw.index 'R' then - key = attribute.pretty_name - known = @methods_hash[key] - - if known then - known.comment = attribute.comment if known.comment.empty? - elsif registered = @methods_hash[attribute.pretty_name + '='] and - RDoc::Attr === registered then - registered.rw = 'RW' - else - @methods_hash[key] = attribute - register = true - end - end - - if attribute.rw.index 'W' then - key = attribute.pretty_name + '=' - known = @methods_hash[key] - - if known then - known.comment = attribute.comment if known.comment.empty? - elsif registered = @methods_hash[attribute.pretty_name] and - RDoc::Attr === registered then - registered.rw = 'RW' - else - @methods_hash[key] = attribute - register = true - end - end - - if register then - attribute.visibility = @visibility - add_to @attributes, attribute - resolve_aliases attribute - end - - attribute - end - - ## - # Adds a class named +given_name+ with +superclass+. - # - # Both +given_name+ and +superclass+ may contain '::', and are - # interpreted relative to the +self+ context. This allows handling correctly - # examples like these: - # class RDoc::Gauntlet < Gauntlet - # module Mod - # class Object # implies < ::Object - # class SubObject < Object # this is _not_ ::Object - # - # Given class Container::Item RDoc assumes +Container+ is a module - # unless it later sees class Container. +add_class+ automatically - # upgrades +given_name+ to a class in this case. - - def add_class class_type, given_name, superclass = '::Object' - # superclass +nil+ is passed by the C parser in the following cases: - # - registering Object in 1.8 (correct) - # - registering BasicObject in 1.9 (correct) - # - registering RubyVM in 1.9 in iseq.c (incorrect: < Object in vm.c) - # - # If we later find a superclass for a registered class with a nil - # superclass, we must honor it. - - # find the name & enclosing context - if given_name =~ /^:+(\w+)$/ then - full_name = $1 - enclosing = top_level - name = full_name.split(/:+/).last - else - full_name = child_name given_name - - if full_name =~ /^(.+)::(\w+)$/ then - name = $2 - ename = $1 - enclosing = @store.classes_hash[ename] || @store.modules_hash[ename] - # HACK: crashes in actionpack/lib/action_view/helpers/form_helper.rb (metaprogramming) - unless enclosing then - # try the given name at top level (will work for the above example) - enclosing = @store.classes_hash[given_name] || - @store.modules_hash[given_name] - return enclosing if enclosing - # not found: create the parent(s) - names = ename.split('::') - enclosing = self - names.each do |n| - enclosing = enclosing.classes_hash[n] || - enclosing.modules_hash[n] || - enclosing.add_module(RDoc::NormalModule, n) - end - end - else - name = full_name - enclosing = self - end - end - - # fix up superclass - if full_name == 'BasicObject' then - superclass = nil - elsif full_name == 'Object' then - superclass = '::BasicObject' - end - - # find the superclass full name - if superclass then - if superclass =~ /^:+/ then - superclass = $' #' - else - if superclass =~ /^(\w+):+(.+)$/ then - suffix = $2 - mod = find_module_named($1) - superclass = mod.full_name + '::' + suffix if mod - else - mod = find_module_named(superclass) - superclass = mod.full_name if mod - end - end - - # did we believe it was a module? - mod = @store.modules_hash.delete superclass - - upgrade_to_class mod, RDoc::NormalClass, mod.parent if mod - - # e.g., Object < Object - superclass = nil if superclass == full_name - end - - klass = @store.classes_hash[full_name] - - if klass then - # if TopLevel, it may not be registered in the classes: - enclosing.classes_hash[name] = klass - - # update the superclass if needed - if superclass then - existing = klass.superclass - existing = existing.full_name unless existing.is_a?(String) if existing - if existing.nil? || - (existing == 'Object' && superclass != 'Object') then - klass.superclass = superclass - end - end - else - # this is a new class - mod = @store.modules_hash.delete full_name - - if mod then - klass = upgrade_to_class mod, RDoc::NormalClass, enclosing - - klass.superclass = superclass unless superclass.nil? - else - klass = class_type.new name, superclass - - enclosing.add_class_or_module(klass, enclosing.classes_hash, - @store.classes_hash) - end - end - - klass.parent = self - - klass - end - - ## - # Adds the class or module +mod+ to the modules or - # classes Hash +self_hash+, and to +all_hash+ (either - # TopLevel::modules_hash or TopLevel::classes_hash), - # unless #done_documenting is +true+. Sets the #parent of +mod+ - # to +self+, and its #section to #current_section. Returns +mod+. - - def add_class_or_module mod, self_hash, all_hash - mod.section = current_section # TODO declaring context? something is - # wrong here... - mod.parent = self - mod.full_name = nil - mod.store = @store - - unless @done_documenting then - self_hash[mod.name] = mod - # this must be done AFTER adding mod to its parent, so that the full - # name is correct: - all_hash[mod.full_name] = mod - if @store.unmatched_constant_alias[mod.full_name] then - to, file = @store.unmatched_constant_alias[mod.full_name] - add_module_alias mod, mod.name, to, file - end - end - - mod - end - - ## - # Adds +constant+ if not already there. If it is, updates the comment, - # value and/or is_alias_for of the known constant if they were empty/nil. - - def add_constant constant - return constant unless @document_self - - # HACK: avoid duplicate 'PI' & 'E' in math.c (1.8.7 source code) - # (this is a #ifdef: should be handled by the C parser) - known = @constants_hash[constant.name] - - if known then - known.comment = constant.comment if known.comment.empty? - - known.value = constant.value if - known.value.nil? or known.value.strip.empty? - - known.is_alias_for ||= constant.is_alias_for - else - @constants_hash[constant.name] = constant - add_to @constants, constant - end - - constant - end - - ## - # Adds included module +include+ which should be an RDoc::Include - - def add_include include - add_to @includes, include - - include - end - - ## - # Adds extension module +ext+ which should be an RDoc::Extend - - def add_extend ext - add_to @extends, ext - - ext - end - - ## - # Adds +method+ if not already there. If it is (as method or attribute), - # updates the comment if it was empty. - - def add_method method - return method unless @document_self - - # HACK: avoid duplicate 'new' in io.c & struct.c (1.8.7 source code) - key = method.pretty_name - known = @methods_hash[key] - - if known then - if @store then # otherwise we are loading - known.comment = method.comment if known.comment.empty? - previously = ", previously in #{known.file}" unless - method.file == known.file - @store.rdoc.options.warn \ - "Duplicate method #{known.full_name} in #{method.file}#{previously}" - end - else - @methods_hash[key] = method - if @current_line_visibility - method.visibility, @current_line_visibility = @current_line_visibility, nil - else - method.visibility = @visibility - end - add_to @method_list, method - resolve_aliases method - end - - method - end - - ## - # Adds a module named +name+. If RDoc already knows +name+ is a class then - # that class is returned instead. See also #add_class. - - def add_module(class_type, name) - mod = @classes[name] || @modules[name] - return mod if mod - - full_name = child_name name - mod = @store.modules_hash[full_name] || class_type.new(name) - - add_class_or_module mod, @modules, @store.modules_hash - end - - ## - # Adds a module by +RDoc::NormalModule+ instance. See also #add_module. - - def add_module_by_normal_module(mod) - add_class_or_module mod, @modules, @store.modules_hash - end - - ## - # Adds an alias from +from+ (a class or module) to +name+ which was defined - # in +file+. - - def add_module_alias from, from_name, to, file - return from if @done_documenting - - to_full_name = child_name to.name - - # if we already know this name, don't register an alias: - # see the metaprogramming in lib/active_support/basic_object.rb, - # where we already know BasicObject is a class when we find - # BasicObject = BlankSlate - return from if @store.find_class_or_module to_full_name - - unless from - @store.unmatched_constant_alias[child_name(from_name)] = [to, file] - return to - end - - new_to = from.dup - new_to.name = to.name - new_to.full_name = nil - - if new_to.module? then - @store.modules_hash[to_full_name] = new_to - @modules[to.name] = new_to - else - @store.classes_hash[to_full_name] = new_to - @classes[to.name] = new_to - end - - # Registers a constant for this alias. The constant value and comment - # will be updated later, when the Ruby parser adds the constant - const = RDoc::Constant.new to.name, nil, new_to.comment - const.record_location file - const.is_alias_for = from - add_constant const - - new_to - end - - ## - # Adds +require+ to this context's top level - - def add_require(require) - return require unless @document_self - - if RDoc::TopLevel === self then - add_to @requires, require - else - parent.add_require require - end - end - - ## - # Returns a section with +title+, creating it if it doesn't already exist. - # +comment+ will be appended to the section's comment. - # - # A section with a +title+ of +nil+ will return the default section. - # - # See also RDoc::Context::Section - - def add_section title, comment = nil - if section = @sections[title] then - section.add_comment comment if comment - else - section = Section.new self, title, comment - @sections[title] = section - end - - section - end - - ## - # Adds +thing+ to the collection +array+ - - def add_to array, thing - array << thing if @document_self - - thing.parent = self - thing.store = @store if @store - thing.section = current_section - end - - ## - # Is there any content? - # - # This means any of: comment, aliases, methods, attributes, external - # aliases, require, constant. - # - # Includes and extends are also checked unless includes == false. - - def any_content(includes = true) - @any_content ||= !( - @comment.empty? && - @method_list.empty? && - @attributes.empty? && - @aliases.empty? && - @external_aliases.empty? && - @requires.empty? && - @constants.empty? - ) - @any_content || (includes && !(@includes + @extends).empty? ) - end - - ## - # Creates the full name for a child with +name+ - - def child_name name - if name =~ /^:+/ - $' #' - elsif RDoc::TopLevel === self then - name - else - "#{self.full_name}::#{name}" - end - end - - ## - # Class attributes - - def class_attributes - @class_attributes ||= attributes.select { |a| a.singleton } - end - - ## - # Class methods - - def class_method_list - @class_method_list ||= method_list.select { |a| a.singleton } - end - - ## - # Array of classes in this context - - def classes - @classes.values - end - - ## - # All classes and modules in this namespace - - def classes_and_modules - classes + modules - end - - ## - # Hash of classes keyed by class name - - def classes_hash - @classes - end - - ## - # The current documentation section that new items will be added to. If - # temporary_section is available it will be used. - - def current_section - if section = @temporary_section then - @temporary_section = nil - else - section = @current_section - end - - section - end - - ## - # Is part of this thing was defined in +file+? - - def defined_in?(file) - @in_files.include?(file) - end - - def display(method_attr) # :nodoc: - if method_attr.is_a? RDoc::Attr - "#{method_attr.definition} #{method_attr.pretty_name}" - else - "method #{method_attr.pretty_name}" - end - end - - ## - # Iterator for ancestors for duck-typing. Does nothing. See - # RDoc::ClassModule#each_ancestor. - # - # This method exists to make it easy to work with Context subclasses that - # aren't part of RDoc. - - def each_ancestor(&_) # :nodoc: - end - - ## - # Iterator for attributes - - def each_attribute # :yields: attribute - @attributes.each { |a| yield a } - end - - ## - # Iterator for classes and modules - - def each_classmodule(&block) # :yields: module - classes_and_modules.sort.each(&block) - end - - ## - # Iterator for constants - - def each_constant # :yields: constant - @constants.each {|c| yield c} - end - - ## - # Iterator for included modules - - def each_include # :yields: include - @includes.each do |i| yield i end - end - - ## - # Iterator for extension modules - - def each_extend # :yields: extend - @extends.each do |e| yield e end - end - - ## - # Iterator for methods - - def each_method # :yields: method - return enum_for __method__ unless block_given? - - @method_list.sort.each { |m| yield m } - end - - ## - # Iterator for each section's contents sorted by title. The +section+, the - # section's +constants+ and the sections +attributes+ are yielded. The - # +constants+ and +attributes+ collections are sorted. - # - # To retrieve methods in a section use #methods_by_type with the optional - # +section+ parameter. - # - # NOTE: Do not edit collections yielded by this method - - def each_section # :yields: section, constants, attributes - return enum_for __method__ unless block_given? - - constants = @constants.group_by do |constant| constant.section end - attributes = @attributes.group_by do |attribute| attribute.section end - - constants.default = [] - attributes.default = [] - - sort_sections.each do |section| - yield section, constants[section].select(&:display?).sort, attributes[section].select(&:display?).sort - end - end - - ## - # Finds an attribute +name+ with singleton value +singleton+. - - def find_attribute(name, singleton) - name = $1 if name =~ /^(.*)=$/ - @attributes.find { |a| a.name == name && a.singleton == singleton } - end - - ## - # Finds an attribute with +name+ in this context - - def find_attribute_named(name) - case name - when /\A#/ then - find_attribute name[1..-1], false - when /\A::/ then - find_attribute name[2..-1], true - else - @attributes.find { |a| a.name == name } - end - end - - ## - # Finds a class method with +name+ in this context - - def find_class_method_named(name) - @method_list.find { |meth| meth.singleton && meth.name == name } - end - - ## - # Finds a constant with +name+ in this context - - def find_constant_named(name) - @constants.find do |m| - m.name == name || m.full_name == name - end - end - - ## - # Find a module at a higher scope - - def find_enclosing_module_named(name) - parent && parent.find_module_named(name) - end - - ## - # Finds an external alias +name+ with singleton value +singleton+. - - def find_external_alias(name, singleton) - @external_aliases.find { |m| m.name == name && m.singleton == singleton } - end - - ## - # Finds an external alias with +name+ in this context - - def find_external_alias_named(name) - case name - when /\A#/ then - find_external_alias name[1..-1], false - when /\A::/ then - find_external_alias name[2..-1], true - else - @external_aliases.find { |a| a.name == name } - end - end - - ## - # Finds a file with +name+ in this context - - def find_file_named name - @store.find_file_named name - end - - ## - # Finds an instance method with +name+ in this context - - def find_instance_method_named(name) - @method_list.find { |meth| !meth.singleton && meth.name == name } - end - - ## - # Finds a method, constant, attribute, external alias, module or file - # named +symbol+ in this context. - - def find_local_symbol(symbol) - find_method_named(symbol) or - find_constant_named(symbol) or - find_attribute_named(symbol) or - find_external_alias_named(symbol) or - find_module_named(symbol) or - find_file_named(symbol) - end - - ## - # Finds a method named +name+ with singleton value +singleton+. - - def find_method(name, singleton) - @method_list.find { |m| - if m.singleton - m.name == name && m.singleton == singleton - else - m.name == name && !m.singleton && !singleton - end - } - end - - ## - # Finds a instance or module method with +name+ in this context - - def find_method_named(name) - case name - when /\A#/ then - find_method name[1..-1], false - when /\A::/ then - find_method name[2..-1], true - else - @method_list.find { |meth| meth.name == name } - end - end - - ## - # Find a module with +name+ using ruby's scoping rules - - def find_module_named(name) - res = @modules[name] || @classes[name] - return res if res - return self if self.name == name - find_enclosing_module_named name - end - - ## - # Look up +symbol+, first as a module, then as a local symbol. - - def find_symbol(symbol) - find_symbol_module(symbol) || find_local_symbol(symbol) - end - - ## - # Look up a module named +symbol+. - - def find_symbol_module(symbol) - result = nil - - # look for a class or module 'symbol' - case symbol - when /^::/ then - result = @store.find_class_or_module symbol - when /^(\w+):+(.+)$/ - suffix = $2 - top = $1 - searched = self - while searched do - mod = searched.find_module_named(top) - break unless mod - result = @store.find_class_or_module "#{mod.full_name}::#{suffix}" - break if result || searched.is_a?(RDoc::TopLevel) - searched = searched.parent - end - else - searched = self - while searched do - result = searched.find_module_named(symbol) - break if result || searched.is_a?(RDoc::TopLevel) - searched = searched.parent - end - end - - result - end - - ## - # The full name for this context. This method is overridden by subclasses. - - def full_name - '(unknown)' - end - - ## - # Does this context and its methods and constants all have documentation? - # - # (Yes, fully documented doesn't mean everything.) - - def fully_documented? - documented? and - attributes.all? { |a| a.documented? } and - method_list.all? { |m| m.documented? } and - constants.all? { |c| c.documented? } - end - - ## - # URL for this with a +prefix+ - - def http_url(prefix) - path = name_for_path - path = path.gsub(/<<\s*(\w*)/, 'from-\1') if path =~ /<'class' or - # 'instance') and visibility (+:public+, +:protected+, +:private+). - # - # If +section+ is provided only methods in that RDoc::Context::Section will - # be returned. - - def methods_by_type section = nil - methods = {} - - TYPES.each do |type| - visibilities = {} - RDoc::VISIBILITIES.each do |vis| - visibilities[vis] = [] - end - - methods[type] = visibilities - end - - each_method do |method| - next if section and not method.section == section - methods[method.type][method.visibility] << method - end - - methods - end - - ## - # Yields AnyMethod and Attr entries matching the list of names in +methods+. - - def methods_matching(methods, singleton = false, &block) - (@method_list + @attributes).each do |m| - yield m if methods.include?(m.name) and m.singleton == singleton - end - - each_ancestor do |parent| - parent.methods_matching(methods, singleton, &block) - end - end - - ## - # Array of modules in this context - - def modules - @modules.values - end - - ## - # Hash of modules keyed by module name - - def modules_hash - @modules - end - - ## - # Name to use to generate the url. - # #full_name by default. - - def name_for_path - full_name - end - - ## - # Changes the visibility for new methods to +visibility+ - - def ongoing_visibility=(visibility) - @visibility = visibility - end - - ## - # Record +top_level+ as a file +self+ is in. - - def record_location(top_level) - @in_files << top_level unless @in_files.include?(top_level) - end - - ## - # Should we remove this context from the documentation? - # - # The answer is yes if: - # * #received_nodoc is +true+ - # * #any_content is +false+ (not counting includes) - # * All #includes are modules (not a string), and their module has - # #remove_from_documentation? == true - # * All classes and modules have #remove_from_documentation? == true - - def remove_from_documentation? - @remove_from_documentation ||= - @received_nodoc && - !any_content(false) && - @includes.all? { |i| !i.module.is_a?(String) && i.module.remove_from_documentation? } && - classes_and_modules.all? { |cm| cm.remove_from_documentation? } - end - - ## - # Removes methods and attributes with a visibility less than +min_visibility+. - #-- - # TODO mark the visibility of attributes in the template (if not public?) - - def remove_invisible min_visibility - return if [:private, :nodoc].include? min_visibility - remove_invisible_in @method_list, min_visibility - remove_invisible_in @attributes, min_visibility - remove_invisible_in @constants, min_visibility - end - - ## - # Only called when min_visibility == :public or :private - - def remove_invisible_in array, min_visibility # :nodoc: - if min_visibility == :public then - array.reject! { |e| - e.visibility != :public and not e.force_documentation - } - else - array.reject! { |e| - e.visibility == :private and not e.force_documentation - } - end - end - - ## - # Tries to resolve unmatched aliases when a method or attribute has just - # been added. - - def resolve_aliases added - # resolve any pending unmatched aliases - key = added.pretty_name - unmatched_alias_list = @unmatched_alias_lists[key] - return unless unmatched_alias_list - unmatched_alias_list.each do |unmatched_alias| - added.add_alias unmatched_alias, self - @external_aliases.delete unmatched_alias - end - @unmatched_alias_lists.delete key - end - - ## - # Returns RDoc::Context::Section objects referenced in this context for use - # in a table of contents. - - def section_contents - used_sections = {} - - each_method do |method| - next unless method.display? - - used_sections[method.section] = true - end - - # order found sections - sections = sort_sections.select do |section| - used_sections[section] - end - - # only the default section is used - return [] if - sections.length == 1 and not sections.first.title - - sections - end - - ## - # Sections in this context - - def sections - @sections.values - end - - def sections_hash # :nodoc: - @sections - end - - ## - # Sets the current section to a section with +title+. See also #add_section - - def set_current_section title, comment - @current_section = add_section title, comment - end - - ## - # Given an array +methods+ of method names, set the visibility of each to - # +visibility+ - - def set_visibility_for(methods, visibility, singleton = false) - methods_matching methods, singleton do |m| - m.visibility = visibility - end - end - - ## - # Given an array +names+ of constants, set the visibility of each constant to - # +visibility+ - - def set_constant_visibility_for(names, visibility) - names.each do |name| - constant = @constants_hash[name] or next - constant.visibility = visibility - end - end - - ## - # Sorts sections alphabetically (default) or in TomDoc fashion (none, - # Public, Internal, Deprecated) - - def sort_sections - titles = @sections.map { |title, _| title } - - if titles.length > 1 and - TOMDOC_TITLES_SORT == - (titles | TOMDOC_TITLES).sort_by { |title| title.to_s } then - @sections.values_at(*TOMDOC_TITLES).compact - else - @sections.sort_by { |title, _| - title.to_s - }.map { |_, section| - section - } - end - end - - def to_s # :nodoc: - "#{self.class.name} #{self.full_name}" - end - - ## - # Return the TopLevel that owns us - #-- - # FIXME we can be 'owned' by several TopLevel (see #record_location & - # #in_files) - - def top_level - return @top_level if defined? @top_level - @top_level = self - @top_level = @top_level.parent until RDoc::TopLevel === @top_level - @top_level - end - - ## - # Upgrades NormalModule +mod+ in +enclosing+ to a +class_type+ - - def upgrade_to_class mod, class_type, enclosing - enclosing.modules_hash.delete mod.name - - klass = RDoc::ClassModule.from_module class_type, mod - klass.store = @store - - # if it was there, then we keep it even if done_documenting - @store.classes_hash[mod.full_name] = klass - enclosing.classes_hash[mod.name] = klass - - klass - end - - autoload :Section, "#{__dir__}/context/section" - -end diff --git a/lib/rdoc/code_object/context/section.rb b/lib/rdoc/code_object/context/section.rb deleted file mode 100644 index aecd4e0213..0000000000 --- a/lib/rdoc/code_object/context/section.rb +++ /dev/null @@ -1,233 +0,0 @@ -# frozen_string_literal: true -require 'cgi/util' - -## -# A section of documentation like: -# -# # :section: The title -# # The body -# -# Sections can be referenced multiple times and will be collapsed into a -# single section. - -class RDoc::Context::Section - - include RDoc::Text - - MARSHAL_VERSION = 0 # :nodoc: - - ## - # Section comment - - attr_reader :comment - - ## - # Section comments - - attr_reader :comments - - ## - # Context this Section lives in - - attr_reader :parent - - ## - # Section title - - attr_reader :title - - ## - # Creates a new section with +title+ and +comment+ - - def initialize parent, title, comment - @parent = parent - @title = title ? title.strip : title - - @comments = [] - - add_comment comment - end - - ## - # Sections are equal when they have the same #title - - def == other - self.class === other and @title == other.title - end - - alias eql? == - - ## - # Adds +comment+ to this section - - def add_comment comment - comment = extract_comment comment - - return if comment.empty? - - case comment - when RDoc::Comment then - @comments << comment - when RDoc::Markup::Document then - @comments.concat comment.parts - when Array then - @comments.concat comment - else - raise TypeError, "unknown comment type: #{comment.inspect}" - end - end - - ## - # Anchor reference for linking to this section - - def aref - title = @title || '[untitled]' - - CGI.escape(title).gsub('%', '-').sub(/^-/, '') - end - - ## - # Extracts the comment for this section from the original comment block. - # If the first line contains :section:, strip it and use the rest. - # Otherwise remove lines up to the line containing :section:, and look - # for those lines again at the end and remove them. This lets us write - # - # # :section: The title - # # The body - - def extract_comment comment - case comment - when Array then - comment.map do |c| - extract_comment c - end - when nil - RDoc::Comment.new '' - when RDoc::Comment then - if comment.text =~ /^#[ \t]*:section:.*\n/ then - start = $` - rest = $' - - comment.text = if start.empty? then - rest - else - rest.sub(/#{start.chomp}\Z/, '') - end - end - - comment - when RDoc::Markup::Document then - comment - else - raise TypeError, "unknown comment #{comment.inspect}" - end - end - - def inspect # :nodoc: - "#<%s:0x%x %p>" % [self.class, object_id, title] - end - - def hash # :nodoc: - @title.hash - end - - ## - # The files comments in this section come from - - def in_files - return [] if @comments.empty? - - case @comments - when Array then - @comments.map do |comment| - comment.file - end - when RDoc::Markup::Document then - @comment.parts.map do |document| - document.file - end - else - raise RDoc::Error, "BUG: unknown comment class #{@comments.class}" - end - end - - ## - # Serializes this Section. The title and parsed comment are saved, but not - # the section parent which must be restored manually. - - def marshal_dump - [ - MARSHAL_VERSION, - @title, - parse, - ] - end - - ## - # De-serializes this Section. The section parent must be restored manually. - - def marshal_load array - @parent = nil - - @title = array[1] - @comments = array[2] - end - - ## - # Parses +comment_location+ into an RDoc::Markup::Document composed of - # multiple RDoc::Markup::Documents with their file set. - - def parse - case @comments - when String then - super - when Array then - docs = @comments.map do |comment, location| - doc = super comment - doc.file = location if location - doc - end - - RDoc::Markup::Document.new(*docs) - when RDoc::Comment then - doc = super @comments.text, comments.format - doc.file = @comments.location - doc - when RDoc::Markup::Document then - return @comments - else - raise ArgumentError, "unknown comment class #{comments.class}" - end - end - - ## - # The section's title, or 'Top Section' if the title is nil. - # - # This is used by the table of contents template so the name is silly. - - def plain_html - @title || 'Top Section' - end - - ## - # Removes a comment from this section if it is from the same file as - # +comment+ - - def remove_comment comment - return if @comments.empty? - - case @comments - when Array then - @comments.delete_if do |my_comment| - my_comment.file == comment.file - end - when RDoc::Markup::Document then - @comments.parts.delete_if do |document| - document.file == comment.file.name - end - else - raise RDoc::Error, "BUG: unknown comment class #{@comments.class}" - end - end - -end diff --git a/lib/rdoc/code_object/extend.rb b/lib/rdoc/code_object/extend.rb deleted file mode 100644 index 7d57433de6..0000000000 --- a/lib/rdoc/code_object/extend.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true -## -# A Module extension to a class with \#extend -# -# RDoc::Extend.new 'Enumerable', 'comment ...' - -class RDoc::Extend < RDoc::Mixin - -end diff --git a/lib/rdoc/code_object/ghost_method.rb b/lib/rdoc/code_object/ghost_method.rb deleted file mode 100644 index 25f951e35e..0000000000 --- a/lib/rdoc/code_object/ghost_method.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true -## -# GhostMethod represents a method referenced only by a comment - -class RDoc::GhostMethod < RDoc::AnyMethod -end diff --git a/lib/rdoc/code_object/include.rb b/lib/rdoc/code_object/include.rb deleted file mode 100644 index c3e0d45e47..0000000000 --- a/lib/rdoc/code_object/include.rb +++ /dev/null @@ -1,9 +0,0 @@ -# frozen_string_literal: true -## -# A Module included in a class with \#include -# -# RDoc::Include.new 'Enumerable', 'comment ...' - -class RDoc::Include < RDoc::Mixin - -end diff --git a/lib/rdoc/code_object/meta_method.rb b/lib/rdoc/code_object/meta_method.rb deleted file mode 100644 index 8c95a0f78c..0000000000 --- a/lib/rdoc/code_object/meta_method.rb +++ /dev/null @@ -1,6 +0,0 @@ -# frozen_string_literal: true -## -# MetaMethod represents a meta-programmed method - -class RDoc::MetaMethod < RDoc::AnyMethod -end diff --git a/lib/rdoc/code_object/method_attr.rb b/lib/rdoc/code_object/method_attr.rb deleted file mode 100644 index 263780f7c7..0000000000 --- a/lib/rdoc/code_object/method_attr.rb +++ /dev/null @@ -1,430 +0,0 @@ -# frozen_string_literal: true -## -# Abstract class representing either a method or an attribute. - -class RDoc::MethodAttr < RDoc::CodeObject - - include Comparable - - ## - # Name of this method/attribute. - - attr_accessor :name - - ## - # public, protected, private - - attr_accessor :visibility - - ## - # Is this a singleton method/attribute? - - attr_accessor :singleton - - ## - # Source file token stream - - attr_reader :text - - ## - # Array of other names for this method/attribute - - attr_reader :aliases - - ## - # The method/attribute we're aliasing - - attr_accessor :is_alias_for - - #-- - # The attributes below are for AnyMethod only. - # They are left here for the time being to - # allow ri to operate. - # TODO modify ri to avoid calling these on attributes. - #++ - - ## - # Parameters yielded by the called block - - attr_reader :block_params - - ## - # Parameters for this method - - attr_accessor :params - - ## - # Different ways to call this method - - attr_accessor :call_seq - - ## - # The call_seq or the param_seq with method name, if there is no call_seq. - - attr_reader :arglists - - ## - # Pretty parameter list for this method - - attr_reader :param_seq - - - ## - # Creates a new MethodAttr from token stream +text+ and method or attribute - # name +name+. - # - # Usually this is called by super from a subclass. - - def initialize text, name - super() - - @text = text - @name = name - - @aliases = [] - @is_alias_for = nil - @parent_name = nil - @singleton = nil - @visibility = :public - @see = false - - @arglists = nil - @block_params = nil - @call_seq = nil - @param_seq = nil - @params = nil - end - - ## - # Resets cached data for the object so it can be rebuilt by accessor methods - - def initialize_copy other # :nodoc: - @full_name = nil - end - - def initialize_visibility # :nodoc: - super - @see = nil - end - - ## - # Order by #singleton then #name - - def <=>(other) - return unless other.respond_to?(:singleton) && - other.respond_to?(:name) - - [@singleton ? 0 : 1, name_ord_range, name] <=> - [other.singleton ? 0 : 1, other.name_ord_range, other.name] - end - - def == other # :nodoc: - equal?(other) or self.class == other.class and full_name == other.full_name - end - - ## - # A method/attribute is documented if any of the following is true: - # - it was marked with :nodoc:; - # - it has a comment; - # - it is an alias for a documented method; - # - it has a +#see+ method that is documented. - - def documented? - super or - (is_alias_for and is_alias_for.documented?) or - (see and see.documented?) - end - - ## - # A method/attribute to look at, - # in particular if this method/attribute has no documentation. - # - # It can be a method/attribute of the superclass or of an included module, - # including the Kernel module, which is always appended to the included - # modules. - # - # Returns +nil+ if there is no such method/attribute. - # The +#is_alias_for+ method/attribute, if any, is not included. - # - # Templates may generate a "see also ..." if this method/attribute - # has documentation, and "see ..." if it does not. - - def see - @see = find_see if @see == false - @see - end - - ## - # Sets the store for this class or module and its contained code objects. - - def store= store - super - - @file = @store.add_file @file.full_name if @file - end - - def find_see # :nodoc: - return nil if singleton || is_alias_for - - # look for the method - other = find_method_or_attribute name - return other if other - - # if it is a setter, look for a getter - return nil unless name =~ /[a-z_]=$/i # avoid == or === - return find_method_or_attribute name[0..-2] - end - - def find_method_or_attribute name # :nodoc: - return nil unless parent.respond_to? :ancestors - - searched = parent.ancestors - kernel = @store.modules_hash['Kernel'] - - searched << kernel if kernel && - parent != kernel && !searched.include?(kernel) - - searched.each do |ancestor| - next if String === ancestor - next if parent == ancestor - - other = ancestor.find_method_named('#' + name) || - ancestor.find_attribute_named(name) - - return other if other - end - - nil - end - - ## - # Abstract method. Contexts in their building phase call this - # to register a new alias for this known method/attribute. - # - # - creates a new AnyMethod/Attribute named an_alias.new_name; - # - adds +self+ as an alias for the new method or attribute - # - adds the method or attribute to #aliases - # - adds the method or attribute to +context+. - - def add_alias(an_alias, context) - raise NotImplementedError - end - - ## - # HTML fragment reference for this method - - def aref - type = singleton ? 'c' : 'i' - # % characters are not allowed in html names => dash instead - "#{aref_prefix}-#{type}-#{html_name}" - end - - ## - # Prefix for +aref+, defined by subclasses. - - def aref_prefix - raise NotImplementedError - end - - ## - # Attempts to sanitize the content passed by the Ruby parser: - # remove outer parentheses, etc. - - def block_params=(value) - # 'yield.to_s' or 'assert yield, msg' - return @block_params = '' if value =~ /^[\.,]/ - - # remove trailing 'if/unless ...' - return @block_params = '' if value =~ /^(if|unless)\s/ - - value = $1.strip if value =~ /^(.+)\s(if|unless)\s/ - - # outer parentheses - value = $1 if value =~ /^\s*\((.*)\)\s*$/ - value = value.strip - - # proc/lambda - return @block_params = $1 if value =~ /^(proc|lambda)(\s*\{|\sdo)/ - - # surrounding +...+ or [...] - value = $1.strip if value =~ /^\+(.*)\+$/ - value = $1.strip if value =~ /^\[(.*)\]$/ - - return @block_params = '' if value.empty? - - # global variable - return @block_params = 'str' if value =~ /^\$[&0-9]$/ - - # wipe out array/hash indices - value.gsub!(/(\w)\[[^\[]+\]/, '\1') - - # remove @ from class/instance variables - value.gsub!(/@@?([a-z0-9_]+)/, '\1') - - # method calls => method name - value.gsub!(/([A-Z:a-z0-9_]+)\.([a-z0-9_]+)(\s*\(\s*[a-z0-9_.,\s]*\s*\)\s*)?/) do - case $2 - when 'to_s' then $1 - when 'const_get' then 'const' - when 'new' then - $1.split('::').last. # ClassName => class_name - gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2'). - gsub(/([a-z\d])([A-Z])/, '\1_\2'). - downcase - else - $2 - end - end - - # class prefixes - value.gsub!(/[A-Za-z0-9_:]+::/, '') - - # simple expressions - value = $1 if value =~ /^([a-z0-9_]+)\s*[-*+\/]/ - - @block_params = value.strip - end - - ## - # HTML id-friendly method/attribute name - - def html_name - require 'cgi/util' - - CGI.escape(@name.gsub('-', '-2D')).gsub('%', '-').sub(/^-/, '') - end - - ## - # Full method/attribute name including namespace - - def full_name - @full_name ||= "#{parent_name}#{pretty_name}" - end - - def inspect # :nodoc: - alias_for = @is_alias_for ? " (alias for #{@is_alias_for.name})" : nil - visibility = self.visibility - visibility = "forced #{visibility}" if force_documentation - "#<%s:0x%x %s (%s)%s>" % [ - self.class, object_id, - full_name, - visibility, - alias_for, - ] - end - - ## - # '::' for a class method/attribute, '#' for an instance method. - - def name_prefix - @singleton ? '::' : '#' - end - - ## - # Name for output to HTML. For class methods the full name with a "." is - # used like +SomeClass.method_name+. For instance methods the class name is - # used if +context+ does not match the parent. - # - # This is to help prevent people from using :: to call class methods. - - def output_name context - return "#{name_prefix}#{@name}" if context == parent - - "#{parent_name}#{@singleton ? '.' : '#'}#{@name}" - end - - ## - # Method/attribute name with class/instance indicator - - def pretty_name - "#{name_prefix}#{@name}" - end - - ## - # Type of method/attribute (class or instance) - - def type - singleton ? 'class' : 'instance' - end - - ## - # Path to this method for use with HTML generator output. - - def path - "#{@parent.path}##{aref}" - end - - ## - # Name of our parent with special handling for un-marshaled methods - - def parent_name - @parent_name || super - end - - def pretty_print q # :nodoc: - alias_for = - if @is_alias_for.respond_to? :name then - "alias for #{@is_alias_for.name}" - elsif Array === @is_alias_for then - "alias for #{@is_alias_for.last}" - end - - q.group 2, "[#{self.class.name} #{full_name} #{visibility}", "]" do - if alias_for then - q.breakable - q.text alias_for - end - - if text then - q.breakable - q.text "text:" - q.breakable - q.pp @text - end - - unless comment.empty? then - q.breakable - q.text "comment:" - q.breakable - q.pp @comment - end - end - end - - ## - # Used by RDoc::Generator::JsonIndex to create a record for the search - # engine. - - def search_record - [ - @name, - full_name, - @name, - @parent.full_name, - path, - params, - snippet(@comment), - ] - end - - def to_s # :nodoc: - if @is_alias_for - "#{self.class.name}: #{full_name} -> #{is_alias_for}" - else - "#{self.class.name}: #{full_name}" - end - end - - def name_ord_range # :nodoc: - case name.ord - when 0..64 # anything below "A" - 1 - when 91..96 # the symbols between "Z" and "a" - 2 - when 123..126 # 7-bit symbols above "z": "{", "|", "}", "~" - 3 - else # everythig else can be sorted as normal - 4 - end - end -end diff --git a/lib/rdoc/code_object/mixin.rb b/lib/rdoc/code_object/mixin.rb deleted file mode 100644 index fa8faefc15..0000000000 --- a/lib/rdoc/code_object/mixin.rb +++ /dev/null @@ -1,120 +0,0 @@ -# frozen_string_literal: true -## -# A Mixin adds features from a module into another context. RDoc::Include and -# RDoc::Extend are both mixins. - -class RDoc::Mixin < RDoc::CodeObject - - ## - # Name of included module - - attr_accessor :name - - ## - # Creates a new Mixin for +name+ with +comment+ - - def initialize(name, comment) - super() - @name = name - self.comment = comment - @module = nil # cache for module if found - end - - ## - # Mixins are sorted by name - - def <=> other - return unless self.class === other - - name <=> other.name - end - - def == other # :nodoc: - self.class === other and @name == other.name - end - - alias eql? == # :nodoc: - - ## - # Full name based on #module - - def full_name - m = self.module - RDoc::ClassModule === m ? m.full_name : @name - end - - def hash # :nodoc: - [@name, self.module].hash - end - - def inspect # :nodoc: - "#<%s:0x%x %s.%s %s>" % [ - self.class, - object_id, - parent_name, self.class.name.downcase, @name, - ] - end - - ## - # Attempts to locate the included module object. Returns the name if not - # known. - # - # The scoping rules of Ruby to resolve the name of an included module are: - # - first look into the children of the current context; - # - if not found, look into the children of included modules, - # in reverse inclusion order; - # - if still not found, go up the hierarchy of names. - # - # This method has O(n!) behavior when the module calling - # include is referencing nonexistent modules. Avoid calling #module until - # after all the files are parsed. This behavior is due to ruby's constant - # lookup behavior. - # - # As of the beginning of October, 2011, no gem includes nonexistent modules. - - def module - return @module if @module - - # search the current context - return @name unless parent - full_name = parent.child_name(@name) - @module = @store.modules_hash[full_name] - return @module if @module - return @name if @name =~ /^::/ - - # search the includes before this one, in reverse order - searched = parent.includes.take_while { |i| i != self }.reverse - searched.each do |i| - inc = i.module - next if String === inc - full_name = inc.child_name(@name) - @module = @store.modules_hash[full_name] - return @module if @module - end - - # go up the hierarchy of names - up = parent.parent - while up - full_name = up.child_name(@name) - @module = @store.modules_hash[full_name] - return @module if @module - up = up.parent - end - - @name - end - - ## - # Sets the store for this class or module and its contained code objects. - - def store= store - super - - @file = @store.add_file @file.full_name if @file - end - - def to_s # :nodoc: - "#{self.class.name.downcase} #@name in: #{parent}" - end - -end diff --git a/lib/rdoc/code_object/normal_class.rb b/lib/rdoc/code_object/normal_class.rb deleted file mode 100644 index aa340b5d15..0000000000 --- a/lib/rdoc/code_object/normal_class.rb +++ /dev/null @@ -1,92 +0,0 @@ -# frozen_string_literal: true -## -# A normal class, neither singleton nor anonymous - -class RDoc::NormalClass < RDoc::ClassModule - - ## - # The ancestors of this class including modules. Unlike Module#ancestors, - # this class is not included in the result. The result will contain both - # RDoc::ClassModules and Strings. - - def ancestors - if String === superclass then - super << superclass - elsif superclass then - ancestors = super - ancestors << superclass - ancestors.concat superclass.ancestors - else - super - end - end - - def aref_prefix # :nodoc: - 'class' - end - - ## - # The definition of this class, class MyClassName - - def definition - "class #{full_name}" - end - - def direct_ancestors - superclass ? super + [superclass] : super - end - - def inspect # :nodoc: - superclass = @superclass ? " < #{@superclass}" : nil - "<%s:0x%x class %s%s includes: %p extends: %p attributes: %p methods: %p aliases: %p>" % [ - self.class, object_id, - full_name, superclass, @includes, @extends, @attributes, @method_list, @aliases - ] - end - - def to_s # :nodoc: - display = "#{self.class.name} #{self.full_name}" - if superclass - display += ' < ' + (superclass.is_a?(String) ? superclass : superclass.full_name) - end - display += ' -> ' + is_alias_for.to_s if is_alias_for - display - end - - def pretty_print q # :nodoc: - superclass = @superclass ? " < #{@superclass}" : nil - - q.group 2, "[class #{full_name}#{superclass}", "]" do - q.breakable - q.text "includes:" - q.breakable - q.seplist @includes do |inc| q.pp inc end - - q.breakable - q.text "constants:" - q.breakable - q.seplist @constants do |const| q.pp const end - - q.breakable - q.text "attributes:" - q.breakable - q.seplist @attributes do |attr| q.pp attr end - - q.breakable - q.text "methods:" - q.breakable - q.seplist @method_list do |meth| q.pp meth end - - q.breakable - q.text "aliases:" - q.breakable - q.seplist @aliases do |aliaz| q.pp aliaz end - - q.breakable - q.text "comment:" - q.breakable - q.pp comment - end - end - -end diff --git a/lib/rdoc/code_object/normal_module.rb b/lib/rdoc/code_object/normal_module.rb deleted file mode 100644 index 498ec4dde2..0000000000 --- a/lib/rdoc/code_object/normal_module.rb +++ /dev/null @@ -1,73 +0,0 @@ -# frozen_string_literal: true -## -# A normal module, like NormalClass - -class RDoc::NormalModule < RDoc::ClassModule - - def aref_prefix # :nodoc: - 'module' - end - - def inspect # :nodoc: - "#<%s:0x%x module %s includes: %p extends: %p attributes: %p methods: %p aliases: %p>" % [ - self.class, object_id, - full_name, @includes, @extends, @attributes, @method_list, @aliases - ] - end - - ## - # The definition of this module, module MyModuleName - - def definition - "module #{full_name}" - end - - ## - # This is a module, returns true - - def module? - true - end - - def pretty_print q # :nodoc: - q.group 2, "[module #{full_name}:", "]" do - q.breakable - q.text "includes:" - q.breakable - q.seplist @includes do |inc| q.pp inc end - q.breakable - - q.breakable - q.text "constants:" - q.breakable - q.seplist @constants do |const| q.pp const end - - q.text "attributes:" - q.breakable - q.seplist @attributes do |attr| q.pp attr end - q.breakable - - q.text "methods:" - q.breakable - q.seplist @method_list do |meth| q.pp meth end - q.breakable - - q.text "aliases:" - q.breakable - q.seplist @aliases do |aliaz| q.pp aliaz end - q.breakable - - q.text "comment:" - q.breakable - q.pp comment - end - end - - ## - # Modules don't have one, raises NoMethodError - - def superclass - raise NoMethodError, "#{full_name} is a module" - end - -end diff --git a/lib/rdoc/code_object/require.rb b/lib/rdoc/code_object/require.rb deleted file mode 100644 index 05e26b84b0..0000000000 --- a/lib/rdoc/code_object/require.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true -## -# A file loaded by \#require - -class RDoc::Require < RDoc::CodeObject - - ## - # Name of the required file - - attr_accessor :name - - ## - # Creates a new Require that loads +name+ with +comment+ - - def initialize(name, comment) - super() - @name = name.gsub(/'|"/, "") #' - @top_level = nil - self.comment = comment - end - - def inspect # :nodoc: - "#<%s:0x%x require '%s' in %s>" % [ - self.class, - object_id, - @name, - parent_file_name, - ] - end - - def to_s # :nodoc: - "require #{name} in: #{parent}" - end - - ## - # The RDoc::TopLevel corresponding to this require, or +nil+ if not found. - - def top_level - @top_level ||= begin - tl = RDoc::TopLevel.all_files_hash[name + '.rb'] - - if tl.nil? and RDoc::TopLevel.all_files.first.full_name =~ %r(^lib/) then - # second chance - tl = RDoc::TopLevel.all_files_hash['lib/' + name + '.rb'] - end - - tl - end - end - -end diff --git a/lib/rdoc/code_object/single_class.rb b/lib/rdoc/code_object/single_class.rb deleted file mode 100644 index dd16529648..0000000000 --- a/lib/rdoc/code_object/single_class.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true -## -# A singleton class - -class RDoc::SingleClass < RDoc::ClassModule - - ## - # Adds the superclass to the included modules. - - def ancestors - superclass ? super + [superclass] : super - end - - def aref_prefix # :nodoc: - 'sclass' - end - - ## - # The definition of this singleton class, class << MyClassName - - def definition - "class << #{full_name}" - end - - def pretty_print q # :nodoc: - q.group 2, "[class << #{full_name}", "]" do - next - end - end -end diff --git a/lib/rdoc/code_object/top_level.rb b/lib/rdoc/code_object/top_level.rb deleted file mode 100644 index b93e3802fc..0000000000 --- a/lib/rdoc/code_object/top_level.rb +++ /dev/null @@ -1,291 +0,0 @@ -# frozen_string_literal: true -## -# A TopLevel context is a representation of the contents of a single file - -class RDoc::TopLevel < RDoc::Context - - MARSHAL_VERSION = 0 # :nodoc: - - ## - # This TopLevel's File::Stat struct - - attr_accessor :file_stat - - ## - # Relative name of this file - - attr_accessor :relative_name - - ## - # Absolute name of this file - - attr_accessor :absolute_name - - ## - # All the classes or modules that were declared in - # this file. These are assigned to either +#classes_hash+ - # or +#modules_hash+ once we know what they really are. - - attr_reader :classes_or_modules - - attr_accessor :diagram # :nodoc: - - ## - # The parser class that processed this file - - attr_reader :parser - - ## - # Creates a new TopLevel for the file at +absolute_name+. If documentation - # is being generated outside the source dir +relative_name+ is relative to - # the source directory. - - def initialize absolute_name, relative_name = absolute_name - super() - @name = nil - @absolute_name = absolute_name - @relative_name = relative_name - @file_stat = File.stat(absolute_name) rescue nil # HACK for testing - @diagram = nil - @parser = nil - - @classes_or_modules = [] - end - - ## - # Sets the parser for this toplevel context, also the store. - - def parser=(val) - @parser = val - @store.update_parser_of_file(absolute_name, val) if @store - @parser - end - - ## - # An RDoc::TopLevel is equal to another with the same relative_name - - def == other - self.class === other and @relative_name == other.relative_name - end - - alias eql? == - - ## - # Adds +an_alias+ to +Object+ instead of +self+. - - def add_alias(an_alias) - object_class.record_location self - return an_alias unless @document_self - object_class.add_alias an_alias - end - - ## - # Adds +constant+ to +Object+ instead of +self+. - - def add_constant constant - object_class.record_location self - return constant unless @document_self - object_class.add_constant constant - end - - ## - # Adds +include+ to +Object+ instead of +self+. - - def add_include(include) - object_class.record_location self - return include unless @document_self - object_class.add_include include - end - - ## - # Adds +method+ to +Object+ instead of +self+. - - def add_method(method) - object_class.record_location self - return method unless @document_self - object_class.add_method method - end - - ## - # Adds class or module +mod+. Used in the building phase - # by the Ruby parser. - - def add_to_classes_or_modules mod - @classes_or_modules << mod - end - - ## - # Base name of this file - - def base_name - File.basename @relative_name - end - - alias name base_name - - ## - # Only a TopLevel that contains text file) will be displayed. See also - # RDoc::CodeObject#display? - - def display? - text? and super - end - - ## - # See RDoc::TopLevel::find_class_or_module - #-- - # TODO Why do we search through all classes/modules found, not just the - # ones of this instance? - - def find_class_or_module name - @store.find_class_or_module name - end - - ## - # Finds a class or module named +symbol+ - - def find_local_symbol(symbol) - find_class_or_module(symbol) || super - end - - ## - # Finds a module or class with +name+ - - def find_module_named(name) - find_class_or_module(name) - end - - ## - # Returns the relative name of this file - - def full_name - @relative_name - end - - ## - # An RDoc::TopLevel has the same hash as another with the same - # relative_name - - def hash - @relative_name.hash - end - - ## - # URL for this with a +prefix+ - - def http_url(prefix) - path = [prefix, @relative_name.tr('.', '_')] - - File.join(*path.compact) + '.html' - end - - def inspect # :nodoc: - "#<%s:0x%x %p modules: %p classes: %p>" % [ - self.class, object_id, - base_name, - @modules.map { |n, m| m }, - @classes.map { |n, c| c } - ] - end - - ## - # Time this file was last modified, if known - - def last_modified - @file_stat ? file_stat.mtime : nil - end - - ## - # Dumps this TopLevel for use by ri. See also #marshal_load - - def marshal_dump - [ - MARSHAL_VERSION, - @relative_name, - @parser, - parse(@comment), - ] - end - - ## - # Loads this TopLevel from +array+. - - def marshal_load array # :nodoc: - initialize array[1] - - @parser = array[2] - @comment = array[3] - - @file_stat = nil - end - - ## - # Returns the NormalClass "Object", creating it if not found. - # - # Records +self+ as a location in "Object". - - def object_class - @object_class ||= begin - oc = @store.find_class_named('Object') || add_class(RDoc::NormalClass, 'Object') - oc.record_location self - oc - end - end - - ## - # Base name of this file without the extension - - def page_name - basename = File.basename @relative_name - basename =~ /\.(rb|rdoc|txt|md)$/i - - $` || basename - end - - ## - # Path to this file for use with HTML generator output. - - def path - http_url @store.rdoc.generator.file_dir - end - - def pretty_print q # :nodoc: - q.group 2, "[#{self.class}: ", "]" do - q.text "base name: #{base_name.inspect}" - q.breakable - - items = @modules.map { |n, m| m } - items.concat @modules.map { |n, c| c } - q.seplist items do |mod| q.pp mod end - end - end - - ## - # Search record used by RDoc::Generator::JsonIndex - - def search_record - return unless @parser < RDoc::Parser::Text - - [ - page_name, - '', - page_name, - '', - path, - '', - snippet(@comment), - ] - end - - ## - # Is this TopLevel from a text file instead of a source code file? - - def text? - @parser and @parser.include? RDoc::Parser::Text - end - - def to_s # :nodoc: - "file #{full_name}" - end - -end diff --git a/lib/rdoc/code_objects.rb b/lib/rdoc/code_objects.rb deleted file mode 100644 index d5f2f920ad..0000000000 --- a/lib/rdoc/code_objects.rb +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true -# This file was used to load all the RDoc::CodeObject subclasses at once. Now -# autoload handles this. - -require_relative '../rdoc' diff --git a/lib/rdoc/comment.rb b/lib/rdoc/comment.rb deleted file mode 100644 index 04ec226436..0000000000 --- a/lib/rdoc/comment.rb +++ /dev/null @@ -1,229 +0,0 @@ -# frozen_string_literal: true -## -# A comment holds the text comment for a RDoc::CodeObject and provides a -# unified way of cleaning it up and parsing it into an RDoc::Markup::Document. -# -# Each comment may have a different markup format set by #format=. By default -# 'rdoc' is used. The :markup: directive tells RDoc which format to use. -# -# See RDoc::MarkupReference@Directive+for+Specifying+RDoc+Source+Format. - - -class RDoc::Comment - - include RDoc::Text - - ## - # The format of this comment. Defaults to RDoc::Markup - - attr_reader :format - - ## - # The RDoc::TopLevel this comment was found in - - attr_accessor :location - - ## - # Line where this Comment was written - - attr_accessor :line - - ## - # For duck-typing when merging classes at load time - - alias file location # :nodoc: - - ## - # The text for this comment - - attr_reader :text - - ## - # Alias for text - - alias to_s text - - ## - # Overrides the content returned by #parse. Use when there is no #text - # source for this comment - - attr_writer :document - - ## - # Creates a new comment with +text+ that is found in the RDoc::TopLevel - # +location+. - - def initialize text = nil, location = nil, language = nil - @location = location - @text = text.nil? ? nil : text.dup - @language = language - - @document = nil - @format = 'rdoc' - @normalized = false - end - - ## - #-- - # TODO deep copy @document - - def initialize_copy copy # :nodoc: - @text = copy.text.dup - end - - def == other # :nodoc: - self.class === other and - other.text == @text and other.location == @location - end - - ## - # Look for a 'call-seq' in the comment to override the normal parameter - # handling. The :call-seq: is indented from the baseline. All lines of the - # same indentation level and prefix are consumed. - # - # For example, all of the following will be used as the :call-seq: - # - # # :call-seq: - # # ARGF.readlines(sep=$/) -> array - # # ARGF.readlines(limit) -> array - # # ARGF.readlines(sep, limit) -> array - # # - # # ARGF.to_a(sep=$/) -> array - # # ARGF.to_a(limit) -> array - # # ARGF.to_a(sep, limit) -> array - - def extract_call_seq method - # we must handle situations like the above followed by an unindented first - # comment. The difficulty is to make sure not to match lines starting - # with ARGF at the same indent, but that are after the first description - # paragraph. - if /^(? ((?!\n)\s)*+ (?# whitespaces except newline)) - :?call-seq: - (? \g(?\n|\z) (?# trailing spaces))? - (? - (\g(?!\w)\S.*\g)* - (?> - (? \g\w+ (?# ' # ARGF' in the example above)) - .*\g)? - (\g\S.*\g (?# other non-blank line))*+ - (\g+(\k.*\g (?# ARGF.to_a lines))++)*+ - ) - (?m:^\s*$|\z) - /x =~ @text - seq = $~[:seq] - - all_start, all_stop = $~.offset(0) - @text.slice! all_start...all_stop - - seq.gsub!(/^\s*/, '') - method.call_seq = seq - end - - method - end - - ## - # A comment is empty if its text String is empty. - - def empty? - @text.empty? - end - - ## - # HACK dubious - - def encode! encoding - @text = String.new @text, encoding: encoding - self - end - - ## - # Sets the format of this comment and resets any parsed document - - def format= format - @format = format - @document = nil - end - - def inspect # :nodoc: - location = @location ? @location.relative_name : '(unknown)' - - "#<%s:%x %s %p>" % [self.class, object_id, location, @text] - end - - ## - # Normalizes the text. See RDoc::Text#normalize_comment for details - - def normalize - return self unless @text - return self if @normalized # TODO eliminate duplicate normalization - - @text = normalize_comment @text - - @normalized = true - - self - end - - ## - # Was this text normalized? - - def normalized? # :nodoc: - @normalized - end - - ## - # Parses the comment into an RDoc::Markup::Document. The parsed document is - # cached until the text is changed. - - def parse - return @document if @document - - @document = super @text, @format - @document.file = @location - @document - end - - ## - # Removes private sections from this comment. Private sections are flush to - # the comment marker and start with -- and end with ++. - # For C-style comments, a private marker may not start at the opening of the - # comment. - # - # /* - # *-- - # * private - # *++ - # * public - # */ - - def remove_private - # Workaround for gsub encoding for Ruby 1.9.2 and earlier - empty = '' - empty = RDoc::Encoding.change_encoding empty, @text.encoding - - @text = @text.gsub(%r%^\s*([#*]?)--.*?^\s*(\1)\+\+\n?%m, empty) - @text = @text.sub(%r%^\s*[#*]?--.*%m, '') - end - - ## - # Replaces this comment's text with +text+ and resets the parsed document. - # - # An error is raised if the comment contains a document but no text. - - def text= text - raise RDoc::Error, 'replacing document-only comment is not allowed' if - @text.nil? and @document - - @document = nil - @text = text.nil? ? nil : text.dup - end - - ## - # Returns true if this comment is in TomDoc format. - - def tomdoc? - @format == 'tomdoc' - end - -end diff --git a/lib/rdoc/cross_reference.rb b/lib/rdoc/cross_reference.rb deleted file mode 100644 index 4e011219e8..0000000000 --- a/lib/rdoc/cross_reference.rb +++ /dev/null @@ -1,228 +0,0 @@ -# frozen_string_literal: true - -require_relative 'markup/attribute_manager' # for PROTECT_ATTR - -## -# RDoc::CrossReference is a reusable way to create cross references for names. - -class RDoc::CrossReference - - ## - # Regular expression to match class references - # - # 1. There can be a '\\' in front of text to suppress the cross-reference - # 2. There can be a '::' in front of class names to reference from the - # top-level namespace. - # 3. The method can be followed by parenthesis (not recommended) - - CLASS_REGEXP_STR = '\\\\?((?:\:{2})?[A-Z]\w*(?:\:\:\w+)*)' - - ## - # Regular expression to match a single method argument. - - METHOD_ARG_REGEXP_STR = '[\w.+*/=<>-]+' - - ## - # Regular expression to match method arguments. - - METHOD_ARGS_REGEXP_STR = /(?:\((?:#{METHOD_ARG_REGEXP_STR}(?:,\s*#{METHOD_ARG_REGEXP_STR})*)?\))?/.source - - ## - # Regular expression to match method references. - # - # See CLASS_REGEXP_STR - - METHOD_REGEXP_STR = /( - (?!\d)[\w#{RDoc::Markup::AttributeManager::PROTECT_ATTR}]+[!?=]?| - %|=(?:==?|~)|![=~]|\[\]=?|<(?:<|=>?)?|>[>=]?|[-+!]@?|\*\*?|[\/%\`|&^~] - )#{METHOD_ARGS_REGEXP_STR}/.source.delete("\n ").freeze - - ## - # Regular expressions matching text that should potentially have - # cross-reference links generated are passed to add_regexp_handling. Note - # that these expressions are meant to pick up text for which cross-references - # have been suppressed, since the suppression characters are removed by the - # code that is triggered. - - CROSSREF_REGEXP = /(?:^|[\s()]) - ( - (?: - # A::B::C.meth - #{CLASS_REGEXP_STR}(?:[.#]|::)#{METHOD_REGEXP_STR} - - # A::B::C - # The stuff after CLASS_REGEXP_STR is a - # nasty hack. CLASS_REGEXP_STR unfortunately matches - # words like dog and cat (these are legal "class" - # names in Fortran 95). When a word is flagged as a - # potential cross-reference, limitations in the markup - # engine suppress other processing, such as typesetting. - # This is particularly noticeable for contractions. - # In order that words like "can't" not - # be flagged as potential cross-references, only - # flag potential class cross-references if the character - # after the cross-reference is a space, sentence - # punctuation, tag start character, or attribute - # marker. - | #{CLASS_REGEXP_STR}(?=[@\s).?!,;<\000]|\z) - - # Stand-alone method (preceded by a #) - | \\?\##{METHOD_REGEXP_STR} - - # Stand-alone method (preceded by ::) - | ::#{METHOD_REGEXP_STR} - - # Things that look like filenames - # The key thing is that there must be at least - # one special character (period, slash, or - # underscore). - | (?:\.\.\/)*[-\/\w]+[_\/.][-\w\/.]+ - - # Things that have markup suppressed - # Don't process things like '\<' in \, though. - # TODO: including < is a hack, not very satisfying. - | \\[^\s<] - ) - - # labels for headings - (?:@[\w+%-]+(?:\.[\w|%-]+)?)? - )/x - - ## - # Version of CROSSREF_REGEXP used when --hyperlink-all is specified. - - ALL_CROSSREF_REGEXP = / - (?:^|[\s()]) - ( - (?: - # A::B::C.meth - #{CLASS_REGEXP_STR}(?:[.#]|::)#{METHOD_REGEXP_STR} - - # A::B::C - | #{CLASS_REGEXP_STR}(?=[@\s).?!,;<\000]|\z) - - # Stand-alone method - | \\?#{METHOD_REGEXP_STR} - - # Things that look like filenames - | (?:\.\.\/)*[-\/\w]+[_\/.][-\w\/.]+ - - # Things that have markup suppressed - | \\[^\s<] - ) - - # labels for headings - (?:@[\w+%-]+)? - )/x - - ## - # Hash of references that have been looked-up to their replacements - - attr_accessor :seen - - ## - # Allows cross-references to be created based on the given +context+ - # (RDoc::Context). - - def initialize context - @context = context - @store = context.store - - @seen = {} - end - - ## - # Returns a method reference to +name+. - - def resolve_method name - ref = nil - - if /#{CLASS_REGEXP_STR}([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then - type = $2 - if '.' == type # will find either #method or ::method - method = $3 - else - method = "#{type}#{$3}" - end - container = @context.find_symbol_module($1) - elsif /^([.#]|::)#{METHOD_REGEXP_STR}/o =~ name then - type = $1 - if '.' == type - method = $2 - else - method = "#{type}#{$2}" - end - container = @context - else - type = nil - container = nil - end - - if container then - unless RDoc::TopLevel === container then - if '.' == type then - if 'new' == method then # AnyClassName.new will be class method - ref = container.find_local_symbol method - ref = container.find_ancestor_local_symbol method unless ref - else - ref = container.find_local_symbol "::#{method}" - ref = container.find_ancestor_local_symbol "::#{method}" unless ref - ref = container.find_local_symbol "##{method}" unless ref - ref = container.find_ancestor_local_symbol "##{method}" unless ref - end - else - ref = container.find_local_symbol method - ref = container.find_ancestor_local_symbol method unless ref - end - end - end - - ref - end - - ## - # Returns a reference to +name+. - # - # If the reference is found and +name+ is not documented +text+ will be - # returned. If +name+ is escaped +name+ is returned. If +name+ is not - # found +text+ is returned. - - def resolve name, text - return @seen[name] if @seen.include? name - - ref = case name - when /^\\(#{CLASS_REGEXP_STR})$/o then - @context.find_symbol $1 - else - @context.find_symbol name - end - - ref = resolve_method name unless ref - - # Try a page name - ref = @store.page name if not ref and name =~ /^[\w.]+$/ - - ref = nil if RDoc::Alias === ref # external alias, can't link to it - - out = if name == '\\' then - name - elsif name =~ /^\\/ then - # we remove the \ only in front of what we know: - # other backslashes are treated later, only outside of - ref ? $' : name - elsif ref then - if ref.display? then - ref - else - text - end - else - text - end - - @seen[name] = out - - out - end - -end diff --git a/lib/rdoc/encoding.rb b/lib/rdoc/encoding.rb deleted file mode 100644 index 67e190f782..0000000000 --- a/lib/rdoc/encoding.rb +++ /dev/null @@ -1,120 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: true - -## -# This class is a wrapper around File IO and Encoding that helps RDoc load -# files and convert them to the correct encoding. - -module RDoc::Encoding - - HEADER_REGEXP = /^ - (?: - \A\#!.*\n - | - ^\#\s+frozen[-_]string[-_]literal[=:].+\n - | - ^\#[^\n]+\b(?:en)?coding[=:]\s*(?[^\s;]+).*\n - | - <\?xml[^?]*encoding=(?["'])(?.*?)\k.*\n - )+ - /xi # :nodoc: - - ## - # Reads the contents of +filename+ and handles any encoding directives in - # the file. - # - # The content will be converted to the +encoding+. If the file cannot be - # converted a warning will be printed and nil will be returned. - # - # If +force_transcode+ is true the document will be transcoded and any - # unknown character in the target encoding will be replaced with '?' - - def self.read_file filename, encoding, force_transcode = false - content = File.open filename, "rb" do |f| f.read end - content.gsub!("\r\n", "\n") if RUBY_PLATFORM =~ /mswin|mingw/ - - utf8 = content.sub!(/\A\xef\xbb\xbf/, '') - - enc = RDoc::Encoding.detect_encoding content - content = RDoc::Encoding.change_encoding content, enc if enc - - begin - encoding ||= Encoding.default_external - orig_encoding = content.encoding - - if not orig_encoding.ascii_compatible? then - content = content.encode encoding - elsif utf8 then - content = RDoc::Encoding.change_encoding content, Encoding::UTF_8 - content = content.encode encoding - else - # assume the content is in our output encoding - content = RDoc::Encoding.change_encoding content, encoding - end - - unless content.valid_encoding? then - # revert and try to transcode - content = RDoc::Encoding.change_encoding content, orig_encoding - content = content.encode encoding - end - - unless content.valid_encoding? then - warn "unable to convert #{filename} to #{encoding}, skipping" - content = nil - end - rescue Encoding::InvalidByteSequenceError, - Encoding::UndefinedConversionError => e - if force_transcode then - content = RDoc::Encoding.change_encoding content, orig_encoding - content = content.encode(encoding, - :invalid => :replace, - :undef => :replace, - :replace => '?') - return content - else - warn "unable to convert #{e.message} for #{filename}, skipping" - return nil - end - end - - content - rescue ArgumentError => e - raise unless e.message =~ /unknown encoding name - (.*)/ - warn "unknown encoding name \"#{$1}\" for #{filename}, skipping" - nil - rescue Errno::EISDIR, Errno::ENOENT - nil - end - - ## - # Detects the encoding of +string+ based on the magic comment - - def self.detect_encoding string - result = HEADER_REGEXP.match string - name = result && result[:name] - - name ? Encoding.find(name) : nil - end - - ## - # Removes magic comments and shebang - - def self.remove_magic_comment string - string.sub HEADER_REGEXP do |s| - s.gsub(/[^\n]/, '') - end - end - - ## - # Changes encoding based on +encoding+ without converting and returns new - # string - - def self.change_encoding text, encoding - if text.kind_of? RDoc::Comment - text.encode! encoding - else - String.new text, encoding: encoding - end - end - -end diff --git a/lib/rdoc/erb_partial.rb b/lib/rdoc/erb_partial.rb deleted file mode 100644 index 043d763db1..0000000000 --- a/lib/rdoc/erb_partial.rb +++ /dev/null @@ -1,18 +0,0 @@ -# frozen_string_literal: true -## -# Allows an ERB template to be rendered in the context (binding) of an -# existing ERB template evaluation. - -class RDoc::ERBPartial < ERB - - ## - # Overrides +compiler+ startup to set the +eoutvar+ to an empty string only - # if it isn't already set. - - def set_eoutvar compiler, eoutvar = '_erbout' - super - - compiler.pre_cmd = ["#{eoutvar} ||= +''"] - end - -end diff --git a/lib/rdoc/erbio.rb b/lib/rdoc/erbio.rb deleted file mode 100644 index 0f98eaedee..0000000000 --- a/lib/rdoc/erbio.rb +++ /dev/null @@ -1,37 +0,0 @@ -# frozen_string_literal: true -require 'erb' - -## -# A subclass of ERB that writes directly to an IO. Credit to Aaron Patterson -# and Masatoshi SEKI. -# -# To use: -# -# erbio = RDoc::ERBIO.new '<%= "hello world" %>', nil, nil -# -# File.open 'hello.txt', 'w' do |io| -# erbio.result binding -# end -# -# Note that binding must enclose the io you wish to output on. - -class RDoc::ERBIO < ERB - - ## - # Defaults +eoutvar+ to 'io', otherwise is identical to ERB's initialize - - def initialize str, trim_mode: nil, eoutvar: 'io' - super(str, trim_mode: trim_mode, eoutvar: eoutvar) - end - - ## - # Instructs +compiler+ how to write to +io_variable+ - - def set_eoutvar compiler, io_variable - compiler.put_cmd = "#{io_variable}.write" - compiler.insert_cmd = "#{io_variable}.write" - compiler.pre_cmd = [] - compiler.post_cmd = [] - end - -end diff --git a/lib/rdoc/generator.rb b/lib/rdoc/generator.rb deleted file mode 100644 index a769cf8ac0..0000000000 --- a/lib/rdoc/generator.rb +++ /dev/null @@ -1,51 +0,0 @@ -# frozen_string_literal: true -## -# RDoc uses generators to turn parsed source code in the form of an -# RDoc::CodeObject tree into some form of output. RDoc comes with the HTML -# generator RDoc::Generator::Darkfish and an ri data generator -# RDoc::Generator::RI. -# -# == Registering a Generator -# -# Generators are registered by calling RDoc::RDoc.add_generator with the class -# of the generator: -# -# class My::Awesome::Generator -# RDoc::RDoc.add_generator self -# end -# -# == Adding Options to +rdoc+ -# -# Before option processing in +rdoc+, RDoc::Options will call ::setup_options -# on the generator class with an RDoc::Options instance. The generator can -# use RDoc::Options#option_parser to add command-line options to the +rdoc+ -# tool. See RDoc::Options@Custom+Options for an example and see OptionParser -# for details on how to add options. -# -# You can extend the RDoc::Options instance with additional accessors for your -# generator. -# -# == Generator Instantiation -# -# After parsing, RDoc::RDoc will instantiate a generator by calling -# #initialize with an RDoc::Store instance and an RDoc::Options instance. -# -# The RDoc::Store instance holds documentation for parsed source code. In -# RDoc 3 and earlier the RDoc::TopLevel class held this data. When upgrading -# a generator from RDoc 3 and earlier you should only need to replace -# RDoc::TopLevel with the store instance. -# -# RDoc will then call #generate on the generator instance. You can use the -# various methods on RDoc::Store and in the RDoc::CodeObject tree to create -# your desired output format. - -module RDoc::Generator - - autoload :Markup, "#{__dir__}/generator/markup" - - autoload :Darkfish, "#{__dir__}/generator/darkfish" - autoload :JsonIndex, "#{__dir__}/generator/json_index" - autoload :RI, "#{__dir__}/generator/ri" - autoload :POT, "#{__dir__}/generator/pot" - -end diff --git a/lib/rdoc/generator/darkfish.rb b/lib/rdoc/generator/darkfish.rb deleted file mode 100644 index 08f2b85e3b..0000000000 --- a/lib/rdoc/generator/darkfish.rb +++ /dev/null @@ -1,828 +0,0 @@ -# frozen_string_literal: true -# -*- mode: ruby; ruby-indent-level: 2; tab-width: 2 -*- - -require 'erb' -require 'fileutils' -require 'pathname' -require_relative 'markup' - -## -# Darkfish RDoc HTML Generator -# -# $Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $ -# -# == Author/s -# * Michael Granger (ged@FaerieMUD.org) -# -# == Contributors -# * Mahlon E. Smith (mahlon@martini.nu) -# * Eric Hodel (drbrain@segment7.net) -# -# == License -# -# Copyright (c) 2007, 2008, Michael Granger. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# * Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# * Neither the name of the author/s, nor the names of the project's -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# == Attributions -# -# Darkfish uses the {Silk Icons}[http://www.famfamfam.com/lab/icons/silk/] set -# by Mark James. - -class RDoc::Generator::Darkfish - - RDoc::RDoc.add_generator self - - include ERB::Util - - ## - # Stylesheets, fonts, etc. that are included in RDoc. - - BUILTIN_STYLE_ITEMS = # :nodoc: - %w[ - css/fonts.css - fonts/Lato-Light.ttf - fonts/Lato-LightItalic.ttf - fonts/Lato-Regular.ttf - fonts/Lato-RegularItalic.ttf - fonts/SourceCodePro-Bold.ttf - fonts/SourceCodePro-Regular.ttf - css/rdoc.css - ] - - ## - # Path to this file's parent directory. Used to find templates and other - # resources. - - GENERATOR_DIR = File.join 'rdoc', 'generator' - - ## - # Release Version - - VERSION = '3' - - ## - # Description of this generator - - DESCRIPTION = 'HTML generator, written by Michael Granger' - - ## - # The relative path to style sheets and javascript. By default this is set - # the same as the rel_prefix. - - attr_accessor :asset_rel_path - - ## - # The path to generate files into, combined with --op from the - # options for a full path. - - attr_reader :base_dir - - ## - # Classes and modules to be used by this generator, not necessarily - # displayed. See also #modsort - - attr_reader :classes - - ## - # No files will be written when dry_run is true. - - attr_accessor :dry_run - - ## - # When false the generate methods return a String instead of writing to a - # file. The default is true. - - attr_accessor :file_output - - ## - # Files to be displayed by this generator - - attr_reader :files - - ## - # The JSON index generator for this Darkfish generator - - attr_reader :json_index - - ## - # Methods to be displayed by this generator - - attr_reader :methods - - ## - # Sorted list of classes and modules to be displayed by this generator - - attr_reader :modsort - - ## - # The RDoc::Store that is the source of the generated content - - attr_reader :store - - ## - # The directory where the template files live - - attr_reader :template_dir # :nodoc: - - ## - # The output directory - - attr_reader :outputdir - - ## - # Initialize a few instance variables before we start - - def initialize store, options - @store = store - @options = options - - @asset_rel_path = '' - @base_dir = Pathname.pwd.expand_path - @dry_run = @options.dry_run - @file_output = true - @template_dir = Pathname.new options.template_dir - @template_cache = {} - - @classes = nil - @context = nil - @files = nil - @methods = nil - @modsort = nil - - @json_index = RDoc::Generator::JsonIndex.new self, options - end - - ## - # Output progress information if debugging is enabled - - def debug_msg *msg - return unless $DEBUG_RDOC - $stderr.puts(*msg) - end - - ## - # Directory where generated class HTML files live relative to the output - # dir. - - def class_dir - nil - end - - ## - # Directory where generated class HTML files live relative to the output - # dir. - - def file_dir - nil - end - - ## - # Create the directories the generated docs will live in if they don't - # already exist. - - def gen_sub_directories - @outputdir.mkpath - end - - ## - # Copy over the stylesheet into the appropriate place in the output - # directory. - - def write_style_sheet - debug_msg "Copying static files" - options = { :verbose => $DEBUG_RDOC, :noop => @dry_run } - - BUILTIN_STYLE_ITEMS.each do |item| - install_rdoc_static_file @template_dir + item, "./#{item}", options - end - - unless @options.template_stylesheets.empty? - FileUtils.cp @options.template_stylesheets, '.', **options - end - - Dir[(@template_dir + "{js,images}/**/*").to_s].each do |path| - next if File.directory? path - next if File.basename(path) =~ /^\./ - - dst = Pathname.new(path).relative_path_from @template_dir - - install_rdoc_static_file @template_dir + path, dst, options - end - end - - ## - # Build the initial indices and output objects based on an array of TopLevel - # objects containing the extracted information. - - def generate - setup - - write_style_sheet - generate_index - generate_class_files - generate_file_files - generate_table_of_contents - @json_index.generate - @json_index.generate_gzipped - - copy_static - - rescue => e - debug_msg "%s: %s\n %s" % [ - e.class.name, e.message, e.backtrace.join("\n ") - ] - - raise - end - - ## - # Copies static files from the static_path into the output directory - - def copy_static - return if @options.static_path.empty? - - fu_options = { :verbose => $DEBUG_RDOC, :noop => @dry_run } - - @options.static_path.each do |path| - unless File.directory? path then - FileUtils.install path, @outputdir, **fu_options.merge(:mode => 0644) - next - end - - Dir.chdir path do - Dir[File.join('**', '*')].each do |entry| - dest_file = @outputdir + entry - - if File.directory? entry then - FileUtils.mkdir_p entry, **fu_options - else - FileUtils.install entry, dest_file, **fu_options.merge(:mode => 0644) - end - end - end - end - end - - ## - # Return a list of the documented modules sorted by salience first, then - # by name. - - def get_sorted_module_list classes - classes.select do |klass| - klass.display? - end.sort - end - - ## - # Generate an index page which lists all the classes which are documented. - - def generate_index - setup - - template_file = @template_dir + 'index.rhtml' - return unless template_file.exist? - - debug_msg "Rendering the index page..." - - out_file = @base_dir + @options.op_dir + 'index.html' - rel_prefix = @outputdir.relative_path_from out_file.dirname - search_index_rel_prefix = rel_prefix - search_index_rel_prefix += @asset_rel_path if @file_output - - asset_rel_prefix = rel_prefix + @asset_rel_path - - @title = @options.title - - render_template template_file, out_file do |io| - here = binding - # suppress 1.9.3 warning - here.local_variable_set(:asset_rel_prefix, asset_rel_prefix) - here - end - rescue => e - error = RDoc::Error.new \ - "error generating index.html: #{e.message} (#{e.class})" - error.set_backtrace e.backtrace - - raise error - end - - ## - # Generates a class file for +klass+ - - def generate_class klass, template_file = nil - setup - - current = klass - - template_file ||= @template_dir + 'class.rhtml' - - debug_msg " working on %s (%s)" % [klass.full_name, klass.path] - out_file = @outputdir + klass.path - rel_prefix = @outputdir.relative_path_from out_file.dirname - search_index_rel_prefix = rel_prefix - search_index_rel_prefix += @asset_rel_path if @file_output - - asset_rel_prefix = rel_prefix + @asset_rel_path - svninfo = get_svninfo(current) - - @title = "#{klass.type} #{klass.full_name} - #{@options.title}" - - debug_msg " rendering #{out_file}" - render_template template_file, out_file do |io| - here = binding - # suppress 1.9.3 warning - here.local_variable_set(:asset_rel_prefix, asset_rel_prefix) - here.local_variable_set(:svninfo, svninfo) - here - end - end - - ## - # Generate a documentation file for each class and module - - def generate_class_files - setup - - template_file = @template_dir + 'class.rhtml' - template_file = @template_dir + 'classpage.rhtml' unless - template_file.exist? - return unless template_file.exist? - debug_msg "Generating class documentation in #{@outputdir}" - - current = nil - - @classes.each do |klass| - current = klass - - generate_class klass, template_file - end - rescue => e - error = RDoc::Error.new \ - "error generating #{current.path}: #{e.message} (#{e.class})" - error.set_backtrace e.backtrace - - raise error - end - - ## - # Generate a documentation file for each file - - def generate_file_files - setup - - page_file = @template_dir + 'page.rhtml' - fileinfo_file = @template_dir + 'fileinfo.rhtml' - - # for legacy templates - filepage_file = @template_dir + 'filepage.rhtml' unless - page_file.exist? or fileinfo_file.exist? - - return unless - page_file.exist? or fileinfo_file.exist? or filepage_file.exist? - - debug_msg "Generating file documentation in #{@outputdir}" - - out_file = nil - current = nil - - @files.each do |file| - current = file - - if file.text? and page_file.exist? then - generate_page file - next - end - - template_file = nil - out_file = @outputdir + file.path - debug_msg " working on %s (%s)" % [file.full_name, out_file] - rel_prefix = @outputdir.relative_path_from out_file.dirname - search_index_rel_prefix = rel_prefix - search_index_rel_prefix += @asset_rel_path if @file_output - - asset_rel_prefix = rel_prefix + @asset_rel_path - - unless filepage_file then - if file.text? then - next unless page_file.exist? - template_file = page_file - @title = file.page_name - else - next unless fileinfo_file.exist? - template_file = fileinfo_file - @title = "File: #{file.base_name}" - end - end - - @title += " - #{@options.title}" - template_file ||= filepage_file - - render_template template_file, out_file do |io| - here = binding - # suppress 1.9.3 warning - here.local_variable_set(:asset_rel_prefix, asset_rel_prefix) - here.local_variable_set(:current, current) - here - end - end - rescue => e - error = - RDoc::Error.new "error generating #{out_file}: #{e.message} (#{e.class})" - error.set_backtrace e.backtrace - - raise error - end - - ## - # Generate a page file for +file+ - - def generate_page file - setup - - template_file = @template_dir + 'page.rhtml' - - out_file = @outputdir + file.path - debug_msg " working on %s (%s)" % [file.full_name, out_file] - rel_prefix = @outputdir.relative_path_from out_file.dirname - search_index_rel_prefix = rel_prefix - search_index_rel_prefix += @asset_rel_path if @file_output - - current = file - asset_rel_prefix = rel_prefix + @asset_rel_path - - @title = "#{file.page_name} - #{@options.title}" - - debug_msg " rendering #{out_file}" - render_template template_file, out_file do |io| - here = binding - # suppress 1.9.3 warning - here.local_variable_set(:current, current) - here.local_variable_set(:asset_rel_prefix, asset_rel_prefix) - here - end - end - - ## - # Generates the 404 page for the RDoc servlet - - def generate_servlet_not_found message - setup - - template_file = @template_dir + 'servlet_not_found.rhtml' - return unless template_file.exist? - - debug_msg "Rendering the servlet 404 Not Found page..." - - rel_prefix = rel_prefix = '' - search_index_rel_prefix = rel_prefix - search_index_rel_prefix += @asset_rel_path if @file_output - - asset_rel_prefix = '' - - @title = 'Not Found' - - render_template template_file do |io| - here = binding - # suppress 1.9.3 warning - here.local_variable_set(:asset_rel_prefix, asset_rel_prefix) - here - end - rescue => e - error = RDoc::Error.new \ - "error generating servlet_not_found: #{e.message} (#{e.class})" - error.set_backtrace e.backtrace - - raise error - end - - ## - # Generates the servlet root page for the RDoc servlet - - def generate_servlet_root installed - setup - - template_file = @template_dir + 'servlet_root.rhtml' - return unless template_file.exist? - - debug_msg 'Rendering the servlet root page...' - - rel_prefix = '.' - asset_rel_prefix = rel_prefix - search_index_rel_prefix = asset_rel_prefix - search_index_rel_prefix += @asset_rel_path if @file_output - - @title = 'Local RDoc Documentation' - - render_template template_file do |io| binding end - rescue => e - error = RDoc::Error.new \ - "error generating servlet_root: #{e.message} (#{e.class})" - error.set_backtrace e.backtrace - - raise error - end - - ## - # Generate an index page which lists all the classes which are documented. - - def generate_table_of_contents - setup - - template_file = @template_dir + 'table_of_contents.rhtml' - return unless template_file.exist? - - debug_msg "Rendering the Table of Contents..." - - out_file = @outputdir + 'table_of_contents.html' - rel_prefix = @outputdir.relative_path_from out_file.dirname - search_index_rel_prefix = rel_prefix - search_index_rel_prefix += @asset_rel_path if @file_output - - asset_rel_prefix = rel_prefix + @asset_rel_path - - @title = "Table of Contents - #{@options.title}" - - render_template template_file, out_file do |io| - here = binding - # suppress 1.9.3 warning - here.local_variable_set(:asset_rel_prefix, asset_rel_prefix) - here - end - rescue => e - error = RDoc::Error.new \ - "error generating table_of_contents.html: #{e.message} (#{e.class})" - error.set_backtrace e.backtrace - - raise error - end - - def install_rdoc_static_file source, destination, options # :nodoc: - return unless source.exist? - - begin - FileUtils.mkdir_p File.dirname(destination), **options - - begin - FileUtils.ln source, destination, **options - rescue Errno::EEXIST - FileUtils.rm destination - retry - end - rescue - FileUtils.cp source, destination, **options - end - end - - ## - # Prepares for generation of output from the current directory - - def setup - return if instance_variable_defined? :@outputdir - - @outputdir = Pathname.new(@options.op_dir).expand_path @base_dir - - return unless @store - - @classes = @store.all_classes_and_modules.sort - @files = @store.all_files.sort - @methods = @classes.flat_map { |m| m.method_list }.sort - @modsort = get_sorted_module_list @classes - end - - ## - # Return a string describing the amount of time in the given number of - # seconds in terms a human can understand easily. - - def time_delta_string seconds - return 'less than a minute' if seconds < 60 - return "#{seconds / 60} minute#{seconds / 60 == 1 ? '' : 's'}" if - seconds < 3000 # 50 minutes - return 'about one hour' if seconds < 5400 # 90 minutes - return "#{seconds / 3600} hours" if seconds < 64800 # 18 hours - return 'one day' if seconds < 86400 # 1 day - return 'about one day' if seconds < 172800 # 2 days - return "#{seconds / 86400} days" if seconds < 604800 # 1 week - return 'about one week' if seconds < 1209600 # 2 week - return "#{seconds / 604800} weeks" if seconds < 7257600 # 3 months - return "#{seconds / 2419200} months" if seconds < 31536000 # 1 year - return "#{seconds / 31536000} years" - end - - # %q$Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $" - SVNID_PATTERN = / - \$Id:\s - (\S+)\s # filename - (\d+)\s # rev - (\d{4}-\d{2}-\d{2})\s # Date (YYYY-MM-DD) - (\d{2}:\d{2}:\d{2}Z)\s # Time (HH:MM:SSZ) - (\w+)\s # committer - \$$ - /x - - ## - # Try to extract Subversion information out of the first constant whose - # value looks like a subversion Id tag. If no matching constant is found, - # and empty hash is returned. - - def get_svninfo klass - constants = klass.constants or return {} - - constants.find { |c| c.value =~ SVNID_PATTERN } or return {} - - filename, rev, date, time, committer = $~.captures - commitdate = Time.parse "#{date} #{time}" - - return { - :filename => filename, - :rev => Integer(rev), - :commitdate => commitdate, - :commitdelta => time_delta_string(Time.now - commitdate), - :committer => committer, - } - end - - ## - # Creates a template from its components and the +body_file+. - # - # For backwards compatibility, if +body_file+ contains " - - - -#{head_file.read} - -#{body} - TEMPLATE - end - - ## - # Renders the ERb contained in +file_name+ relative to the template - # directory and returns the result based on the current context. - - def render file_name - template_file = @template_dir + file_name - - template = template_for template_file, false, RDoc::ERBPartial - - template.filename = template_file.to_s - - template.result @context - end - - ## - # Load and render the erb template in the given +template_file+ and write - # it out to +out_file+. - # - # Both +template_file+ and +out_file+ should be Pathname-like objects. - # - # An io will be yielded which must be captured by binding in the caller. - - def render_template template_file, out_file = nil # :yield: io - io_output = out_file && !@dry_run && @file_output - erb_klass = io_output ? RDoc::ERBIO : ERB - - template = template_for template_file, true, erb_klass - - if io_output then - debug_msg "Outputting to %s" % [out_file.expand_path] - - out_file.dirname.mkpath - out_file.open 'w', 0644 do |io| - io.set_encoding @options.encoding - - @context = yield io - - template_result template, @context, template_file - end - else - @context = yield nil - - output = template_result template, @context, template_file - - debug_msg " would have written %d characters to %s" % [ - output.length, out_file.expand_path - ] if @dry_run - - output - end - end - - ## - # Creates the result for +template+ with +context+. If an error is raised a - # Pathname +template_file+ will indicate the file where the error occurred. - - def template_result template, context, template_file - template.filename = template_file.to_s - template.result context - rescue NoMethodError => e - raise RDoc::Error, "Error while evaluating %s: %s" % [ - template_file.expand_path, - e.message, - ], e.backtrace - end - - ## - # Retrieves a cache template for +file+, if present, or fills the cache. - - def template_for file, page = true, klass = ERB - template = @template_cache[file] - - return template if template - - if page then - template = assemble_template file - erbout = 'io' - else - template = file.read - template = template.encode @options.encoding - - file_var = File.basename(file).sub(/\..*/, '') - - erbout = "_erbout_#{file_var}" - end - - template = klass.new template, trim_mode: '-', eoutvar: erbout - @template_cache[file] = template - template - end - - # Returns an excerpt of the content for usage in meta description tags - def excerpt(content) - text = case content - when RDoc::Comment - content.text - when RDoc::Markup::Document - # This case is for page files that are not markdown nor rdoc - # We convert them to markdown for now as it's easier to extract the text - formatter = RDoc::Markup::ToMarkdown.new - formatter.start_accepting - formatter.accept_document(content) - formatter.end_accepting - else - content - end - - # Match from a capital letter to the first period, discarding any links, so - # that we don't end up matching badges in the README - first_paragraph_match = text.match(/[A-Z][^\.:\/]+\./) - return text[0...150].gsub(/\n/, " ").squeeze(" ") unless first_paragraph_match - - extracted_text = first_paragraph_match[0] - second_paragraph = first_paragraph_match.post_match.match(/[A-Z][^\.:\/]+\./) - extracted_text << " " << second_paragraph[0] if second_paragraph - - extracted_text[0...150].gsub(/\n/, " ").squeeze(" ") - end - - def generate_ancestor_list(ancestors, klass) - return '' if ancestors.empty? - - ancestor = ancestors.shift - content = +'
  • ' - - if ancestor.is_a?(RDoc::NormalClass) - content << "#{ancestor.full_name}" - else - content << ancestor.to_s - end - - # Recursively call the method for the remaining ancestors - content << generate_ancestor_list(ancestors, klass) - - content << '
' - end -end diff --git a/lib/rdoc/generator/json_index.rb b/lib/rdoc/generator/json_index.rb deleted file mode 100644 index c454910d5c..0000000000 --- a/lib/rdoc/generator/json_index.rb +++ /dev/null @@ -1,300 +0,0 @@ -# frozen_string_literal: true -require 'json' -begin - require 'zlib' -rescue LoadError -end - -## -# The JsonIndex generator is designed to complement an HTML generator and -# produces a JSON search index. This generator is derived from sdoc by -# Vladimir Kolesnikov and contains verbatim code written by him. -# -# This generator is designed to be used with a regular HTML generator: -# -# class RDoc::Generator::Darkfish -# def initialize options -# # ... -# @base_dir = Pathname.pwd.expand_path -# -# @json_index = RDoc::Generator::JsonIndex.new self, options -# end -# -# def generate -# # ... -# @json_index.generate -# end -# end -# -# == Index Format -# -# The index is output as a JSON file assigned to the global variable -# +search_data+. The structure is: -# -# var search_data = { -# "index": { -# "searchIndex": -# ["a", "b", ...], -# "longSearchIndex": -# ["a", "a::b", ...], -# "info": [ -# ["A", "A", "A.html", "", ""], -# ["B", "A::B", "A::B.html", "", ""], -# ... -# ] -# } -# } -# -# The same item is described across the +searchIndex+, +longSearchIndex+ and -# +info+ fields. The +searchIndex+ field contains the item's short name, the -# +longSearchIndex+ field contains the full_name (when appropriate) and the -# +info+ field contains the item's name, full_name, path, parameters and a -# snippet of the item's comment. -# -# == LICENSE -# -# Copyright (c) 2009 Vladimir Kolesnikov -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -class RDoc::Generator::JsonIndex - - include RDoc::Text - - ## - # Where the search index lives in the generated output - - SEARCH_INDEX_FILE = File.join 'js', 'search_index.js' - - attr_reader :index # :nodoc: - - ## - # Creates a new generator. +parent_generator+ is used to determine the - # class_dir and file_dir of links in the output index. - # - # +options+ are the same options passed to the parent generator. - - def initialize parent_generator, options - @parent_generator = parent_generator - @store = parent_generator.store - @options = options - - @template_dir = File.expand_path '../template/json_index', __FILE__ - @base_dir = @parent_generator.base_dir - - @classes = nil - @files = nil - @index = nil - end - - ## - # Builds the JSON index as a Hash. - - def build_index - reset @store.all_files.sort, @store.all_classes_and_modules.sort - - index_classes - index_methods - index_pages - - { :index => @index } - end - - ## - # Output progress information if debugging is enabled - - def debug_msg *msg - return unless $DEBUG_RDOC - $stderr.puts(*msg) - end - - ## - # Writes the JSON index to disk - - def generate - debug_msg "Generating JSON index" - - debug_msg " writing search index to %s" % SEARCH_INDEX_FILE - data = build_index - - return if @options.dry_run - - out_dir = @base_dir + @options.op_dir - index_file = out_dir + SEARCH_INDEX_FILE - - FileUtils.mkdir_p index_file.dirname, :verbose => $DEBUG_RDOC - - index_file.open 'w', 0644 do |io| - io.set_encoding Encoding::UTF_8 - io.write 'var search_data = ' - - JSON.dump data, io, 0 - end - unless ENV['SOURCE_DATE_EPOCH'].nil? - index_file.utime index_file.atime, Time.at(ENV['SOURCE_DATE_EPOCH'].to_i).gmtime - end - - Dir.chdir @template_dir do - Dir['**/*.js'].each do |source| - dest = File.join out_dir, source - - FileUtils.install source, dest, :mode => 0644, :preserve => true, :verbose => $DEBUG_RDOC - end - end - end - - ## - # Compress the search_index.js file using gzip - - def generate_gzipped - return if @options.dry_run or not defined?(Zlib) - - debug_msg "Compressing generated JSON index" - out_dir = @base_dir + @options.op_dir - - search_index_file = out_dir + SEARCH_INDEX_FILE - outfile = out_dir + "#{search_index_file}.gz" - - debug_msg "Reading the JSON index file from %s" % search_index_file - search_index = search_index_file.read(mode: 'r:utf-8') - - debug_msg "Writing gzipped search index to %s" % outfile - - Zlib::GzipWriter.open(outfile) do |gz| - gz.mtime = File.mtime(search_index_file) - gz.orig_name = search_index_file.basename.to_s - gz.write search_index - gz.close - end - - # GZip the rest of the js files - Dir.chdir @template_dir do - Dir['**/*.js'].each do |source| - dest = out_dir + source - outfile = out_dir + "#{dest}.gz" - - debug_msg "Reading the original js file from %s" % dest - data = dest.read - - debug_msg "Writing gzipped file to %s" % outfile - - Zlib::GzipWriter.open(outfile) do |gz| - gz.mtime = File.mtime(dest) - gz.orig_name = dest.basename.to_s - gz.write data - gz.close - end - end - end - end - - ## - # Adds classes and modules to the index - - def index_classes - debug_msg " generating class search index" - - documented = @classes.uniq.select do |klass| - klass.document_self_or_methods - end - - documented.each do |klass| - debug_msg " #{klass.full_name}" - record = klass.search_record - @index[:searchIndex] << search_string(record.shift) - @index[:longSearchIndex] << search_string(record.shift) - @index[:info] << record - end - end - - ## - # Adds methods to the index - - def index_methods - debug_msg " generating method search index" - - list = @classes.uniq.flat_map do |klass| - klass.method_list - end.sort_by do |method| - [method.name, method.parent.full_name] - end - - list.each do |method| - debug_msg " #{method.full_name}" - record = method.search_record - @index[:searchIndex] << "#{search_string record.shift}()" - @index[:longSearchIndex] << "#{search_string record.shift}()" - @index[:info] << record - end - end - - ## - # Adds pages to the index - - def index_pages - debug_msg " generating pages search index" - - pages = @files.select do |file| - file.text? - end - - pages.each do |page| - debug_msg " #{page.page_name}" - record = page.search_record - @index[:searchIndex] << search_string(record.shift) - @index[:longSearchIndex] << '' - record.shift - @index[:info] << record - end - end - - ## - # The directory classes are written to - - def class_dir - @parent_generator.class_dir - end - - ## - # The directory files are written to - - def file_dir - @parent_generator.file_dir - end - - def reset files, classes # :nodoc: - @files = files - @classes = classes - - @index = { - :searchIndex => [], - :longSearchIndex => [], - :info => [] - } - end - - ## - # Removes whitespace and downcases +string+ - - def search_string string - string.downcase.gsub(/\s/, '') - end - -end diff --git a/lib/rdoc/generator/markup.rb b/lib/rdoc/generator/markup.rb deleted file mode 100644 index 76b7d458aa..0000000000 --- a/lib/rdoc/generator/markup.rb +++ /dev/null @@ -1,159 +0,0 @@ -# frozen_string_literal: true -## -# Handle common RDoc::Markup tasks for various CodeObjects -# -# This module is loaded by generators. It allows RDoc's CodeObject tree to -# avoid loading generator code to improve startup time for +ri+. - -module RDoc::Generator::Markup - - ## - # Generates a relative URL from this object's path to +target_path+ - - def aref_to(target_path) - RDoc::Markup::ToHtml.gen_relative_url path, target_path - end - - ## - # Generates a relative URL from +from_path+ to this object's path - - def as_href(from_path) - RDoc::Markup::ToHtml.gen_relative_url from_path, path - end - - ## - # Handy wrapper for marking up this object's comment - - def description - markup @comment - end - - ## - # Creates an RDoc::Markup::ToHtmlCrossref formatter - - def formatter - return @formatter if defined? @formatter - - options = @store.rdoc.options - this = RDoc::Context === self ? self : @parent - - @formatter = RDoc::Markup::ToHtmlCrossref.new options, this.path, this - @formatter.code_object = self - @formatter - end - - ## - # Build a webcvs URL starting for the given +url+ with +full_path+ appended - # as the destination path. If +url+ contains '%s' +full_path+ will be - # will replace the %s using sprintf on the +url+. - - def cvs_url(url, full_path) - if /%s/ =~ url then - sprintf url, full_path - else - url + full_path - end - end - -end - -class RDoc::CodeObject - - include RDoc::Generator::Markup - -end - -class RDoc::MethodAttr - - ## - # Prepend +src+ with line numbers. Relies on the first line of a source - # code listing having: - # - # # File xxxxx, line dddd - # - # If it has this comment then line numbers are added to +src+ and the , - # line dddd portion of the comment is removed. - - def add_line_numbers(src) - return unless src.sub!(/\A(.*)(, line (\d+))/, '\1') - first = $3.to_i - 1 - last = first + src.count("\n") - size = last.to_s.length - - line = first - src.gsub!(/^/) do - res = if line == first then - " " * (size + 1) - else - "%2$*1$d " % [size, line] - end - - line += 1 - res - end - end - - ## - # Turns the method's token stream into HTML. - # - # Prepends line numbers if +options.line_numbers+ is true. - - def markup_code - return '' unless @token_stream - - src = RDoc::TokenStream.to_html @token_stream - - # dedent the source - indent = src.length - lines = src.lines.to_a - lines.shift if src =~ /\A.*#\ *File/i # remove '# File' comment - lines.each do |line| - if line =~ /^ *(?=\S)/ - n = $~.end(0) - indent = n if n < indent - break if n == 0 - end - end - src.gsub!(/^#{' ' * indent}/, '') if indent > 0 - - add_line_numbers(src) if options.line_numbers - - src - end - -end - -class RDoc::ClassModule - - ## - # Handy wrapper for marking up this class or module's comment - - def description - markup @comment_location - end - -end - -class RDoc::Context::Section - - include RDoc::Generator::Markup - -end - -class RDoc::TopLevel - - ## - # Returns a URL for this source file on some web repository. Use the -W - # command line option to set. - - def cvs_url - url = @store.rdoc.options.webcvs - - if /%s/ =~ url then - url % @relative_name - else - url + @relative_name - end - end - -end diff --git a/lib/rdoc/generator/pot.rb b/lib/rdoc/generator/pot.rb deleted file mode 100644 index b0b7c07179..0000000000 --- a/lib/rdoc/generator/pot.rb +++ /dev/null @@ -1,99 +0,0 @@ -# frozen_string_literal: true -## -# Generates a POT file. -# -# Here is a translator work flow with the generator. -# -# == Create .pot -# -# You create .pot file by pot formatter: -# -# % rdoc --format pot -# -# It generates doc/rdoc.pot. -# -# == Create .po -# -# You create .po file from doc/rdoc.pot. This operation is needed only -# the first time. This work flow assumes that you are a translator -# for Japanese. -# -# You create locale/ja/rdoc.po from doc/rdoc.pot. You can use msginit -# provided by GNU gettext or rmsginit provided by gettext gem. This -# work flow uses gettext gem because it is more portable than GNU -# gettext for Rubyists. Gettext gem is implemented by pure Ruby. -# -# % gem install gettext -# % mkdir -p locale/ja -# % rmsginit --input doc/rdoc.pot --output locale/ja/rdoc.po --locale ja -# -# Translate messages in .po -# -# You translate messages in .po by a PO file editor. po-mode.el exists -# for Emacs users. There are some GUI tools such as GTranslator. -# There are some Web services such as POEditor and Tansifex. You can -# edit by your favorite text editor because .po is a text file. -# Generate localized documentation -# -# You can generate localized documentation with locale/ja/rdoc.po: -# -# % rdoc --locale ja -# -# You can find documentation in Japanese in doc/. Yay! -# -# == Update translation -# -# You need to update translation when your application is added or -# modified messages. -# -# You can update .po by the following command lines: -# -# % rdoc --format pot -# % rmsgmerge --update locale/ja/rdoc.po doc/rdoc.pot -# -# You edit locale/ja/rdoc.po to translate new messages. - -class RDoc::Generator::POT - - RDoc::RDoc.add_generator self - - ## - # Description of this generator - - DESCRIPTION = 'creates .pot file' - - ## - # Set up a new .pot generator - - def initialize store, options #:not-new: - @options = options - @store = store - end - - ## - # Writes .pot to disk. - - def generate - po = extract_messages - pot_path = 'rdoc.pot' - File.open(pot_path, "w") do |pot| - pot.print(po.to_s) - end - end - - # :nodoc: - def class_dir - nil - end - - private - def extract_messages - extractor = MessageExtractor.new(@store) - extractor.extract - end - - require_relative 'pot/message_extractor' - require_relative 'pot/po' - require_relative 'pot/po_entry' - -end diff --git a/lib/rdoc/generator/pot/message_extractor.rb b/lib/rdoc/generator/pot/message_extractor.rb deleted file mode 100644 index 4938858bdc..0000000000 --- a/lib/rdoc/generator/pot/message_extractor.rb +++ /dev/null @@ -1,68 +0,0 @@ -# frozen_string_literal: true -## -# Extracts message from RDoc::Store - -class RDoc::Generator::POT::MessageExtractor - - ## - # Creates a message extractor for +store+. - - def initialize store - @store = store - @po = RDoc::Generator::POT::PO.new - end - - ## - # Extracts messages from +store+, stores them into - # RDoc::Generator::POT::PO and returns it. - - def extract - @store.all_classes_and_modules.each do |klass| - extract_from_klass(klass) - end - @po - end - - private - - def extract_from_klass klass - extract_text(klass.comment_location, klass.full_name) - - klass.each_section do |section, constants, attributes| - extract_text(section.title, "#{klass.full_name}: section title") - section.comments.each do |comment| - extract_text(comment, "#{klass.full_name}: #{section.title}") - end - end - - klass.each_constant do |constant| - extract_text(constant.comment, constant.full_name) - end - - klass.each_attribute do |attribute| - extract_text(attribute.comment, attribute.full_name) - end - - klass.each_method do |method| - extract_text(method.comment, method.full_name) - end - end - - def extract_text text, comment, location = nil - return if text.nil? - - options = { - :extracted_comment => comment, - :references => [location].compact, - } - i18n_text = RDoc::I18n::Text.new(text) - i18n_text.extract_messages do |part| - @po.add(entry(part[:paragraph], options)) - end - end - - def entry msgid, options - RDoc::Generator::POT::POEntry.new(msgid, options) - end - -end diff --git a/lib/rdoc/generator/pot/po.rb b/lib/rdoc/generator/pot/po.rb deleted file mode 100644 index 37d45e5258..0000000000 --- a/lib/rdoc/generator/pot/po.rb +++ /dev/null @@ -1,84 +0,0 @@ -# frozen_string_literal: true -## -# Generates a PO format text - -class RDoc::Generator::POT::PO - - ## - # Creates an object that represents PO format. - - def initialize - @entries = {} - add_header - end - - ## - # Adds a PO entry to the PO. - - def add entry - existing_entry = @entries[entry.msgid] - if existing_entry - entry = existing_entry.merge(entry) - end - @entries[entry.msgid] = entry - end - - ## - # Returns PO format text for the PO. - - def to_s - po = '' - sort_entries.each do |entry| - po += "\n" unless po.empty? - po += entry.to_s - end - po - end - - private - - def add_header - add(header_entry) - end - - def header_entry - comment = <<-COMMENT -SOME DESCRIPTIVE TITLE. -Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -This file is distributed under the same license as the PACKAGE package. -FIRST AUTHOR , YEAR. - COMMENT - - content = <<-CONTENT -Project-Id-Version: PACKAGE VERSEION -Report-Msgid-Bugs-To: -PO-Revision-Date: YEAR-MO_DA HO:MI+ZONE -Last-Translator: FULL NAME -Language-Team: LANGUAGE -Language: -MIME-Version: 1.0 -Content-Type: text/plain; charset=CHARSET -Content-Transfer-Encoding: 8bit -Plural-Forms: nplurals=INTEGER; plural=EXPRESSION; - CONTENT - - options = { - :msgstr => content, - :translator_comment => comment, - :flags => ['fuzzy'], - } - RDoc::Generator::POT::POEntry.new('', options) - end - - def sort_entries - headers, messages = @entries.values.partition do |entry| - entry.msgid.empty? - end - # TODO: sort by location - sorted_messages = messages.sort_by do |entry| - entry.msgid - end - headers + sorted_messages - end - -end diff --git a/lib/rdoc/generator/pot/po_entry.rb b/lib/rdoc/generator/pot/po_entry.rb deleted file mode 100644 index 7454b29273..0000000000 --- a/lib/rdoc/generator/pot/po_entry.rb +++ /dev/null @@ -1,141 +0,0 @@ -# frozen_string_literal: true -## -# A PO entry in PO - -class RDoc::Generator::POT::POEntry - - # The msgid content - attr_reader :msgid - - # The msgstr content - attr_reader :msgstr - - # The comment content created by translator (PO editor) - attr_reader :translator_comment - - # The comment content extracted from source file - attr_reader :extracted_comment - - # The locations where the PO entry is extracted - attr_reader :references - - # The flags of the PO entry - attr_reader :flags - - ## - # Creates a PO entry for +msgid+. Other values can be specified by - # +options+. - - def initialize msgid, options = {} - @msgid = msgid - @msgstr = options[:msgstr] || "" - @translator_comment = options[:translator_comment] - @extracted_comment = options[:extracted_comment] - @references = options[:references] || [] - @flags = options[:flags] || [] - end - - ## - # Returns the PO entry in PO format. - - def to_s - entry = '' - entry += format_translator_comment - entry += format_extracted_comment - entry += format_references - entry += format_flags - entry += <<-ENTRY -msgid #{format_message(@msgid)} -msgstr #{format_message(@msgstr)} - ENTRY - end - - ## - # Merges the PO entry with +other_entry+. - - def merge other_entry - options = { - :extracted_comment => merge_string(@extracted_comment, - other_entry.extracted_comment), - :translator_comment => merge_string(@translator_comment, - other_entry.translator_comment), - :references => merge_array(@references, - other_entry.references), - :flags => merge_array(@flags, - other_entry.flags), - } - self.class.new(@msgid, options) - end - - private - - def format_comment mark, comment - return '' unless comment - return '' if comment.empty? - - formatted_comment = '' - comment.each_line do |line| - formatted_comment += "#{mark} #{line}" - end - formatted_comment += "\n" unless formatted_comment.end_with?("\n") - formatted_comment - end - - def format_translator_comment - format_comment('#', @translator_comment) - end - - def format_extracted_comment - format_comment('#.', @extracted_comment) - end - - def format_references - return '' if @references.empty? - - formatted_references = '' - @references.sort.each do |file, line| - formatted_references += "\#: #{file}:#{line}\n" - end - formatted_references - end - - def format_flags - return '' if @flags.empty? - - formatted_flags = flags.join(",") - "\#, #{formatted_flags}\n" - end - - def format_message message - return "\"#{escape(message)}\"" unless message.include?("\n") - - formatted_message = '""' - message.each_line do |line| - formatted_message += "\n" - formatted_message += "\"#{escape(line)}\"" - end - formatted_message - end - - def escape string - string.gsub(/["\\\t\n]/) do |special_character| - case special_character - when "\t" - "\\t" - when "\n" - "\\n" - else - "\\#{special_character}" - end - end - end - - def merge_string string1, string2 - [string1, string2].compact.join("\n") - end - - def merge_array array1, array2 - (array1 + array2).uniq - end - -end diff --git a/lib/rdoc/generator/ri.rb b/lib/rdoc/generator/ri.rb deleted file mode 100644 index 1c2f018f97..0000000000 --- a/lib/rdoc/generator/ri.rb +++ /dev/null @@ -1,30 +0,0 @@ -# frozen_string_literal: true -## -# Generates ri data files - -class RDoc::Generator::RI - - RDoc::RDoc.add_generator self - - ## - # Description of this generator - - DESCRIPTION = 'creates ri data files' - - ## - # Set up a new ri generator - - def initialize store, options #:not-new: - @options = options - @store = store - @store.path = '.' - end - - ## - # Writes the parsed data store to disk for use by ri. - - def generate - @store.save - end - -end diff --git a/lib/rdoc/generator/template/darkfish/.document b/lib/rdoc/generator/template/darkfish/.document deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/lib/rdoc/generator/template/darkfish/_footer.rhtml b/lib/rdoc/generator/template/darkfish/_footer.rhtml deleted file mode 100644 index 9791b42901..0000000000 --- a/lib/rdoc/generator/template/darkfish/_footer.rhtml +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/lib/rdoc/generator/template/darkfish/_head.rhtml b/lib/rdoc/generator/template/darkfish/_head.rhtml deleted file mode 100644 index 9e6fb4f94c..0000000000 --- a/lib/rdoc/generator/template/darkfish/_head.rhtml +++ /dev/null @@ -1,43 +0,0 @@ - - - -<%= h @title %> - -<%- if defined?(klass) -%> - "> - - <%- if klass.comment.empty? -%> - "> - <%- else -%> - "> - <%- end -%> -<%- elsif defined?(file) -%> - - "> -<%- elsif @title -%> - - - <%- if @options.main_page and - main_page = @files.find { |f| f.full_name == @options.main_page } then %> - "> - <%- else -%> - - <%- end -%> -<%- end -%> - - - - - - - - - - - -<%- @options.template_stylesheets.each do |stylesheet| -%> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml deleted file mode 100644 index 22a12d9e95..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +++ /dev/null @@ -1,19 +0,0 @@ -<%- if !svninfo.empty? then %> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml deleted file mode 100644 index 06b5542fa1..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +++ /dev/null @@ -1,34 +0,0 @@ - diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml deleted file mode 100644 index 7602076c96..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +++ /dev/null @@ -1,15 +0,0 @@ -<%- unless klass.extends.empty? then %> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml deleted file mode 100644 index 74869a4b51..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +++ /dev/null @@ -1,9 +0,0 @@ - diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml deleted file mode 100644 index 5b600e5975..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +++ /dev/null @@ -1,15 +0,0 @@ -<%- unless klass.includes.empty? then %> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml deleted file mode 100644 index faed7e0a94..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml deleted file mode 100644 index d09216a0f6..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +++ /dev/null @@ -1,21 +0,0 @@ -<% if (class_methods = klass.class_method_list.sort).any? %> - -<% end %> - -<% if (instance_methods = klass.instance_methods.sort).any? %> - -<% end %> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml deleted file mode 100644 index d7f330840a..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +++ /dev/null @@ -1,11 +0,0 @@ - diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml deleted file mode 100644 index 3f68f0c0dc..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +++ /dev/null @@ -1,32 +0,0 @@ -<%- simple_files = @files.select { |f| f.text? } %> -<%- if defined?(current) -%> - <%- dir = current.full_name[%r{\A[^/]+(?=/)}] || current.page_name -%> -<%- end -%> -<%- unless simple_files.empty? then -%> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml deleted file mode 100644 index 6808b2bf87..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +++ /dev/null @@ -1,6 +0,0 @@ -<%- if klass.type == 'class' && (ancestors = klass.super_classes).any? -%> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml deleted file mode 100644 index afc7f7b88d..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml deleted file mode 100644 index 6dcd2ae81f..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +++ /dev/null @@ -1,11 +0,0 @@ -<%- unless klass.sections.length == 1 then %> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml deleted file mode 100644 index b1e047b5f7..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +++ /dev/null @@ -1,39 +0,0 @@ -<%- comment = if current.respond_to? :comment_location then - current.comment_location - else - current.comment - end - table = current.parse(comment).table_of_contents.dup - - if table.length > 1 then %> - -<%- end -%> diff --git a/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml b/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml deleted file mode 100644 index ed2cbe31a0..0000000000 --- a/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/lib/rdoc/generator/template/darkfish/class.rhtml b/lib/rdoc/generator/template/darkfish/class.rhtml deleted file mode 100644 index 0bec9fc9ce..0000000000 --- a/lib/rdoc/generator/template/darkfish/class.rhtml +++ /dev/null @@ -1,206 +0,0 @@ - -<%= render '_sidebar_toggle.rhtml' %> - - - -
-

- <%= klass.type %> <%= klass.full_name %> -

- -
- <%= klass.description %> -
- - <%- klass.each_section do |section, constants, attributes| -%> - -<%- end -%> -
diff --git a/lib/rdoc/generator/template/darkfish/css/fonts.css b/lib/rdoc/generator/template/darkfish/css/fonts.css deleted file mode 100644 index 57302b5183..0000000000 --- a/lib/rdoc/generator/template/darkfish/css/fonts.css +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), - * with Reserved Font Name "Source". All Rights Reserved. Source is a - * trademark of Adobe Systems Incorporated in the United States and/or other - * countries. - * - * This Font Software is licensed under the SIL Open Font License, Version - * 1.1. - * - * This license is copied below, and is also available with a FAQ at: - * http://scripts.sil.org/OFL - */ - -@font-face { - font-family: "Source Code Pro"; - font-style: normal; - font-weight: 400; - src: local("Source Code Pro"), - local("SourceCodePro-Regular"), - url("../fonts/SourceCodePro-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Source Code Pro"; - font-style: normal; - font-weight: 700; - src: local("Source Code Pro Bold"), - local("SourceCodePro-Bold"), - url("../fonts/SourceCodePro-Bold.ttf") format("truetype"); -} - -/* - * Copyright (c) 2010, Łukasz Dziedzic (dziedzic@typoland.com), - * with Reserved Font Name Lato. - * - * This Font Software is licensed under the SIL Open Font License, Version - * 1.1. - * - * This license is copied below, and is also available with a FAQ at: - * http://scripts.sil.org/OFL - */ - -@font-face { - font-family: "Lato"; - font-style: normal; - font-weight: 300; - src: local("Lato Light"), - local("Lato-Light"), - url("../fonts/Lato-Light.ttf") format("truetype"); -} - -@font-face { - font-family: "Lato"; - font-style: italic; - font-weight: 300; - src: local("Lato Light Italic"), - local("Lato-LightItalic"), - url("../fonts/Lato-LightItalic.ttf") format("truetype"); -} - -@font-face { - font-family: "Lato"; - font-style: normal; - font-weight: 700; - src: local("Lato Regular"), - local("Lato-Regular"), - url("../fonts/Lato-Regular.ttf") format("truetype"); -} - -@font-face { - font-family: "Lato"; - font-style: italic; - font-weight: 700; - src: local("Lato Italic"), - local("Lato-Italic"), - url("../fonts/Lato-RegularItalic.ttf") format("truetype"); -} - -/* - * ----------------------------------------------------------- - * SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 - * ----------------------------------------------------------- - * - * PREAMBLE - * The goals of the Open Font License (OFL) are to stimulate worldwide - * development of collaborative font projects, to support the font creation - * efforts of academic and linguistic communities, and to provide a free and - * open framework in which fonts may be shared and improved in partnership - * with others. - * - * The OFL allows the licensed fonts to be used, studied, modified and - * redistributed freely as long as they are not sold by themselves. The - * fonts, including any derivative works, can be bundled, embedded, - * redistributed and/or sold with any software provided that any reserved - * names are not used by derivative works. The fonts and derivatives, - * however, cannot be released under any other type of license. The - * requirement for fonts to remain under this license does not apply - * to any document created using the fonts or their derivatives. - * - * DEFINITIONS - * "Font Software" refers to the set of files released by the Copyright - * Holder(s) under this license and clearly marked as such. This may - * include source files, build scripts and documentation. - * - * "Reserved Font Name" refers to any names specified as such after the - * copyright statement(s). - * - * "Original Version" refers to the collection of Font Software components as - * distributed by the Copyright Holder(s). - * - * "Modified Version" refers to any derivative made by adding to, deleting, - * or substituting -- in part or in whole -- any of the components of the - * Original Version, by changing formats or by porting the Font Software to a - * new environment. - * - * "Author" refers to any designer, engineer, programmer, technical - * writer or other person who contributed to the Font Software. - * - * PERMISSION & CONDITIONS - * Permission is hereby granted, free of charge, to any person obtaining - * a copy of the Font Software, to use, study, copy, merge, embed, modify, - * redistribute, and sell modified and unmodified copies of the Font - * Software, subject to the following conditions: - * - * 1) Neither the Font Software nor any of its individual components, - * in Original or Modified Versions, may be sold by itself. - * - * 2) Original or Modified Versions of the Font Software may be bundled, - * redistributed and/or sold with any software, provided that each copy - * contains the above copyright notice and this license. These can be - * included either as stand-alone text files, human-readable headers or - * in the appropriate machine-readable metadata fields within text or - * binary files as long as those fields can be easily viewed by the user. - * - * 3) No Modified Version of the Font Software may use the Reserved Font - * Name(s) unless explicit written permission is granted by the corresponding - * Copyright Holder. This restriction only applies to the primary font name as - * presented to the users. - * - * 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font - * Software shall not be used to promote, endorse or advertise any - * Modified Version, except to acknowledge the contribution(s) of the - * Copyright Holder(s) and the Author(s) or with their explicit written - * permission. - * - * 5) The Font Software, modified or unmodified, in part or in whole, - * must be distributed entirely under this license, and must not be - * distributed under any other license. The requirement for fonts to - * remain under this license does not apply to any document created - * using the Font Software. - * - * TERMINATION - * This license becomes null and void if any of the above conditions are - * not met. - * - * DISCLAIMER - * THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT - * OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE - * COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL - * DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM - * OTHER DEALINGS IN THE FONT SOFTWARE. - */ - diff --git a/lib/rdoc/generator/template/darkfish/css/rdoc.css b/lib/rdoc/generator/template/darkfish/css/rdoc.css deleted file mode 100644 index ed9b3e9c3b..0000000000 --- a/lib/rdoc/generator/template/darkfish/css/rdoc.css +++ /dev/null @@ -1,668 +0,0 @@ -/* - * "Darkfish" RDoc CSS - * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $ - * - * Author: Michael Granger - * - */ - -/* vim: ft=css et sw=2 ts=2 sts=2 */ - -/* 1. Variables and Root Styles */ -:root { - --sidebar-width: 300px; - --highlight-color: #cc342d; /* Reddish color for accents and headings */ - --secondary-highlight-color: #c83045; /* Darker reddish color for secondary highlights */ - --text-color: #505050; /* Dark bluish-grey for text */ - --background-color: #fefefe; /* Near white background */ - --code-block-background-color: #f6f6f3; /* Slightly darker grey for code blocks */ - --link-color: #42405F; /* Dark bluish-grey for links */ - --link-hover-color: var(--highlight-color); /* Reddish color on hover */ - --border-color: #e0e0e0;; /* General border color */ - --source-code-toggle-color: var(--secondary-highlight-color); - --scrollbar-thumb-hover-background: #505050; /* Hover color for scrollbar thumb */ - --table-header-background-color: #eceaed; - --table-td-background-color: #f5f4f6; - - /* Font family variables */ - --font-primary: 'Segoe UI', 'Verdana', 'Arial', sans-serif; - --font-heading: 'Helvetica', 'Arial', sans-serif; - --font-code: monospace; -} - -/* 2. Global Styles */ -body { - background: var(--background-color); - font-family: var(--font-primary); - font-weight: 400; - color: var(--text-color); - line-height: 1.6; - - /* Layout */ - display: flex; - flex-direction: column; - min-height: 100vh; - margin: 0; -} - -/* 3. Typography */ -h1 span, -h2 span, -h3 span, -h4 span, -h5 span, -h6 span { - position: relative; - - display: none; - padding-left: 1em; - line-height: 0; - vertical-align: baseline; - font-size: 10px; -} - -h1 span { top: -1.3em; } -h2 span { top: -1.2em; } -h3 span { top: -1.0em; } -h4 span { top: -0.8em; } -h5 span { top: -0.5em; } -h6 span { top: -0.5em; } - -h1:hover span, -h2:hover span, -h3:hover span, -h4:hover span, -h5:hover span, -h6:hover span { - display: inline; -} - -h1:target, -h2:target, -h3:target, -h4:target, -h5:target, -h6:target { - margin-left: -10px; - border-left: 10px solid var(--border-color); - scroll-margin-top: 1rem; -} - -main .anchor-link:target { - scroll-margin-top: 1rem; -} - -/* 4. Links */ -a { - color: var(--link-color); - transition: color 0.3s ease; -} - -a:hover { - color: var(--link-hover-color); -} - -a code:hover { - color: var(--link-hover-color); -} - -/* 5. Code and Pre */ -code, -pre { - font-family: var(--font-code); - background-color: var(--code-block-background-color); - border: 1px solid var(--border-color); - border-radius: 6px; - padding: 16px; - overflow-x: auto; - font-size: 15px; - line-height: 1.5; - margin: 1em 0; -} - -code { - background-color: var(--code-block-background-color); - padding: 0.1em 0.3em; - border-radius: 3px; - font-size: 85%; -} - -/* Tables */ -table { - margin: 0; - border-spacing: 0; - border-collapse: collapse; -} - -table tr th, table tr td { - padding: 0.2em 0.4em; - border: 1px solid var(--border-color); -} - -table tr th { - background-color: var(--table-header-background-color); -} - -table tr:nth-child(even) td { - background-color: var(--table-td-background-color); -} - -/* 7. Navigation and Sidebar */ -nav { - font-family: var(--font-heading); - font-size: 16px; - border-right: 1px solid var(--border-color); - position: fixed; - top: 0; - bottom: 0; - left: 0; - width: var(--sidebar-width); - background: var(--background-color); /* It needs an explicit background for toggling narrow screens */ - overflow-y: auto; - z-index: 10; - display: flex; - flex-direction: column; - color: var(--text-color); -} - -nav[hidden] { - display: none; -} - -nav footer { - padding: 1em; - border-top: 1px solid var(--border-color); -} - -nav footer a { - color: var(--secondary-highlight-color); -} - -nav .nav-section { - margin-top: 1em; - padding: 0 1em; -} - -nav h2, nav h3 { - margin: 0 0 0.5em; - padding: 0.5em 0; - color: var(--highlight-color); - border-bottom: 1px solid var(--border-color); -} - -nav h2 { - font-size: 1.2em; -} - -nav h3, -#table-of-contents-navigation { - font-size: 1em; -} - -nav ul, -nav dl, -nav p { - padding: 0; - list-style: none; - margin: 0.5em 0; -} - -nav ul li { - margin-bottom: 0.3em; -} - -nav ul ul { - padding-left: 1em; -} - -nav ul ul ul { - padding-left: 1em; -} - -nav ul ul ul ul { - padding-left: 1em; -} - -nav a { - color: var(--link-color); - text-decoration: none; -} - -nav a:hover { - color: var(--link-hover-color); - text-decoration: underline; -} - -#navigation-toggle { - z-index: 1000; - font-size: 2em; - display: block; - position: fixed; - top: 10px; - left: 20px; - cursor: pointer; -} - -#navigation-toggle[aria-expanded="true"] { - top: 10px; - left: 250px; -} - -nav ul li details { - position: relative; - padding-right: 1.5em; /* Add space for the marker on the right */ -} - -nav ul li details > summary { - list-style: none; /* Remove the default marker */ - position: relative; /* So that the open/close triangle can position itself absolutely inside */ -} - -nav ul li details > summary::-webkit-details-marker { - display: none; /* Removes the default marker, in Safari 18. */ -} - -nav ul li details > summary::after { - content: '▶'; /* Unicode right-pointing triangle */ - position: absolute; - font-size: 0.8em; - bottom: 0.1em; - margin-left: 0.3em; - transition: transform 0.2s ease; -} - -nav ul li details[open] > summary::after { - transform: rotate(90deg); /* Rotate the triangle when open */ -} - -/* 8. Main Content */ -main { - flex: 1; - display: block; - margin: 3em auto; - padding: 0 2em; - max-width: 800px; - font-size: 16px; - line-height: 1.6; - color: var(--text-color); - box-sizing: border-box; -} - -@media (min-width: 1024px) { - main { - margin-left: var(--sidebar-width); - } - - .table-of-contents main { - margin-left: 20em; - } - - #navigation-toggle { - display: none; - } -} - -main h1[class] { - margin-top: 0; - margin-bottom: 1em; - font-size: 2.5em; - color: var(--highlight-color); -} - -main h1, -main h2, -main h3, -main h4, -main h5, -main h6 { - font-family: var(--font-heading); - color: var(--highlight-color); -} - -/* Search */ -#search-section { - padding: 1em; - background-color: var(--background-color); - border-bottom: 1px solid var(--border-color); -} - -#search-field-wrapper { - position: relative; - display: flex; - align-items: center; -} - -#search-field { - width: 100%; - padding: 0.5em 1em 0.5em 2.5em; - border: 1px solid var(--border-color); - border-radius: 20px; - font-size: 14px; - outline: none; - transition: border-color 0.3s ease; - color: var(--text-color); -} - -#search-field:focus { - border-color: var(--highlight-color); -} - -#search-field::placeholder { - color: var(--text-color); -} - -#search-field-wrapper::before { - content: "\1F50D"; - position: absolute; - left: 0.75em; - top: 50%; - transform: translateY(-50%); - font-size: 14px; - color: var(--text-color); - opacity: 0.6; -} - -/* Search Results */ -#search-results { - font-family: var(--font-primary); - font-weight: 300; -} - -#search-results .search-match { - font-family: var(--font-heading); - font-weight: normal; -} - -#search-results .search-selected { - background: var(--code-block-background-color); - border-bottom: 1px solid transparent; -} - -#search-results li { - list-style: none; - border-bottom: 1px solid var(--border-color); - margin-bottom: 0.5em; -} - -#search-results li:last-child { - border-bottom: none; - margin-bottom: 0; -} - -#search-results li p { - padding: 0; - margin: 0.5em; -} - -#search-results .search-namespace { - font-weight: bold; -} - -#search-results li em { - background-color: rgba(224, 108, 117, 0.1); - font-style: normal; -} - -#search-results pre { - margin: 0.5em; - font-family: var(--font-code); -} - -/* Syntax Highlighting - Gruvbox Light Scheme */ - -.ruby-constant { color: #AF3A03; } /* Dark Orange */ -.ruby-keyword { color: #9D0006; } /* Dark Red */ -.ruby-ivar { color: #B57614; } /* Brown */ -.ruby-operator { color: #427B58; } /* Dark Teal */ -.ruby-identifier { color: #076678; } /* Deep Teal */ -.ruby-node { color: #8F3F71; } /* Plum */ -.ruby-comment { color: #928374; font-style: italic; } /* Gray */ -.ruby-regexp { color: #8F3F71; } /* Plum */ -.ruby-value { color: #AF3A03; } /* Dark Orange */ -.ruby-string { color: #79740E; } /* Olive */ - -/* Emphasis */ -em { - text-decoration-color: rgba(52, 48, 64, 0.25); - text-decoration-line: underline; - text-decoration-style: dotted; -} - -strong, -em { - color: var(--highlight-color); - background-color: rgba(255, 111, 97, 0.1); /* Light red background for emphasis */ -} - -/* Paragraphs */ -main p { - line-height: 1.5em; - font-weight: 400; -} - -/* Preformatted Text */ -main pre { - margin: 1.2em 0.5em; - padding: 1em; - font-size: 0.8em; -} - -/* Horizontal Rules */ -main hr { - margin: 1.5em 1em; - border: 2px solid var(--border-color); -} - -/* Blockquotes */ -main blockquote { - margin: 0 2em 1.2em 1.2em; - padding-left: 0.5em; - border-left: 2px solid var(--border-color); -} - -/* Lists */ -main li > p { - margin: 0.5em; -} - -/* Definition Lists */ -main dl { - margin: 1em 0.5em; -} - -main dt { - line-height: 1.5; /* matches `main p` */ - font-weight: bold; -} - -main dl.note-list dt { - margin-right: 1em; - float: left; -} - -main dl.note-list dt:has(+ dt) { - margin-right: 0.25em; -} - -main dl.note-list dt:has(+ dt)::after { - content: ', '; - font-weight: normal; -} - -main dd { - margin: 0 0 1em 1em; -} - -main dd p:first-child { - margin-top: 0; -} - -/* Headers within Main */ -main header h2 { - margin-top: 2em; - border-width: 0; - border-top: 4px solid var(--border-color); - font-size: 130%; -} - -main header h3 { - margin: 2em 0 1.5em; - border-width: 0; - border-top: 3px solid var(--border-color); - font-size: 120%; -} - -/* Utility Classes */ -.hide { display: none !important; } -.initially-hidden { display: none; } - -/* Table of Contents */ -.table-of-contents ul { - margin: 1em; - list-style: none; -} - -.table-of-contents ul ul { - margin-top: 0.25em; -} - -.table-of-contents ul :link, -.table-of-contents ul :visited { - font-size: 16px; -} - -.table-of-contents li { - margin-bottom: 0.25em; -} - -/* Method Details */ -main .method-source-code { - visibility: hidden; - max-height: 0; - overflow: auto; - transition-duration: 200ms; - transition-delay: 0ms; - transition-property: all; - transition-timing-function: ease-in-out; -} - -main .method-source-code pre { - border-color: var(--source-code-toggle-color); -} - -main .method-source-code.active-menu { - visibility: visible; - max-height: 100vh; -} - -main .method-description .method-calls-super { - color: var(--text-color); - font-weight: bold; -} - -main .method-detail { - margin-bottom: 2.5em; -} - -main .method-detail:target { - margin-left: -10px; - border-left: 10px solid var(--border-color); -} - -main .method-header { - display: inline-block; -} - -main .method-heading { - position: relative; - font-family: var(--font-code); - font-size: 110%; - font-weight: bold; -} - -main .method-heading::after { - content: '¶'; - position: absolute; - visibility: hidden; - color: var(--highlight-color); - font-size: 0.5em; -} - -main .method-heading:hover::after { - visibility: visible; -} - -main .method-controls { - line-height: 20px; - float: right; - color: var(--source-code-toggle-color); - cursor: pointer; -} - -main .method-description, -main .aliases { - margin-top: 0.75em; - color: var(--text-color); -} - -main .aliases { - padding-top: 4px; - font-style: italic; - cursor: default; -} - -main .aliases a { - color: var(--secondary-highlight-color); -} - -main .mixin-from { - font-size: 80%; - font-style: italic; - margin-bottom: 0.75em; -} - -main .method-description ul { - margin-left: 1.5em; -} - -main #attribute-method-details .method-detail:hover { - background-color: transparent; - cursor: default; -} - -main .attribute-access-type { - text-transform: uppercase; -} - -/* Responsive Adjustments */ -@media (max-width: 480px) { - nav { - width: 100%; - } - - main { - margin: 1em auto; - padding: 0 1em; - max-width: 100%; - } - - #navigation-toggle { - right: 10px; - left: auto; - } - - #navigation-toggle[aria-expanded="true"] { - left: auto; - } - - table { - display: block; - overflow-x: auto; - white-space: nowrap; - } - - main .method-controls { - margin-top: 10px; - float: none; - } -} diff --git a/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf b/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf deleted file mode 100644 index b49dd43729d456e489a8f4c8ec323a47ab8b9ae8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94668 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

FsulxL_Yn=fqW!JSYn4UZz_VI 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 diff --git a/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf b/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf deleted file mode 100644 index 7959fef0756e905627298817d86513fdf26d6922..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94196 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 Sv(kH?wp@?o-S`p3*#7{ysOP%? diff --git a/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf b/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf deleted file mode 100644 index 839cd589dc5eba0da98b43451b4ec6c328ca48b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96184 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

ucu-&%9a>XM7550A4YWv99%x~0LA&?HZ)eRytM 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 diff --git a/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf b/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf deleted file mode 100644 index bababa09e3fad2aa3e788898e7753ff8d80a8e8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95316 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 Zdy6Gm=sD%RPg|bPWWD$h#s3t#{x=NUkZJ$` diff --git a/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf b/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf deleted file mode 100644 index dd00982d4952a7f6b7725fafc1e648128fb250ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138268 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 diff --git a/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf b/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf deleted file mode 100644 index 1decfb95af634f6e44fb1ba6d56fa342656dce60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138680 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 VPoPKO>nq%T(TdfN`-7hl{|8{rQ_BDV diff --git a/lib/rdoc/generator/template/darkfish/images/add.png b/lib/rdoc/generator/template/darkfish/images/add.png deleted file mode 100644 index 6332fefea4be19eeadf211b0b202b272e8564898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmV<30wVp1P)9VHk(~TedF+gQSL8D5xnVSSWAVY>J9b+m>@{iq7_KE}go~11+5s4;8hc+i0Xa zI1j@EX5!S+Me6HNqKzU5YQwL;-W5$p%ZMKMeR<%zp69-~?<4?8|C8S?bklXr4v&Ov zb&06v2|-x?qB`90yn>Qi%Sh2^G4n)$ZdyvTPf9}1)_buUT7>`e2G&2VU@~Bb(o+Mz zi4)>IxlSY${Dj4k={-9RzU^W5g9|2V5RZ2ZulL9s2xQbZ@r6eP9Ra5u(s|C0Nj#&4>wTSkb?%#=9?@ z^oxDy-O@tyN{L@by(WWvQ3%CyEu8x{+#Jb4-h&K9Owi)2pgg+heWDyked|3R$$kL@A z#sp1v-r+=G4B8D6DqsDH0@7OztA7aT9qc1Py{()w`m``?Y0&gi2=ROcc-9+nU^I6< zT=e_Y=vSnG@?3Ue{BW5ONFttcE!R-R_W4O01|0-|K-YNXLo2`4Qv z`r1LxR6#yf3FB%T95gJnaKKivA~Z}S9A(ZxEDK}O3T04USJ P00000NkvXXu0mjf^IS-S diff --git a/lib/rdoc/generator/template/darkfish/images/arrow_up.png b/lib/rdoc/generator/template/darkfish/images/arrow_up.png deleted file mode 100644 index 1ebb193243780b8eb1919a51ef27c2a0d36ccec2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 372 zcmV-)0gL{LP)6w#wHUuW*nL5>vZR zlg{G&%mT~|kL3ei%GW0*UOHUMs5XI$4uxe-L?I@SAefq*207}Iqtjm#e5*fP53AiC z)C|RQfwzxx<#_WfANRGZx{+tFDl8~Q?;~Ve=lM^*8UTTnVL?HTDz8uta0D@d28E9S z_)i8aLz^UE6PPKymi;2GJ`34{eIia-CtfAt0H61rk0 SPTNud0000Pdwe5?6tW?r-ok|b$oDQj8FV%kZPq;(MWOV8?8;<)(iP}>hNMU> z7fbz%jjlr7h8uuoQ~J6}n}@Y@PdTk=)PxO{%7zmL?dchpZX*~n;I{!C>*(8cU;q(~ zAS%Po_@naEU!xidrBXD?;hN|x^%W|Ij)0y*r5vi|?W&Fub(NqJ@z0o=O&SR3v>A``^efOSo-hEdApp;^Jd;9y!%1UfzX6Bh- z%-mbG|0Na{7Ruai_Y+DEb1s+b!*9k%Q!whMxjtZKA*?o;i1g&jy0@( zaU=-@d-h+o%gal6JRXEXA&L3`d2 z%jIxzZ~*p9O-;EJp_Ds0If38rM<5W8ic~K>FOK&2_p!CLg^i63OioVb6k$)zWHLx3 z5;!|M!}<9+#QSi1dRlbEcxPt^;cysUuU8@%3}RwpLRIGG<|IKnoyP6$Eh3SKw7a*r zSDXP=IYc&YZf;7@?fCe($^l9ORaJ3wbAx0uiC8QqRr$2t-Cfy8%XCI3B%pxJW>XdM zw~zPt_s}#A@pxQ5Ly)4szaMtH9lgE1SXx@b+S(fW`ub$fYPE8J7#bSNDzme*Ub07{ zQKV8SjEs!%0@v5ql8ggm!@$6Rbi^E8vBqpRM-}l+@5OSMrl+TWj*gC^qoV@>u{fQb zov5v?g~?>X@bEC&+uLPaQ&Ypn-y~^mZA}+f(&2EFH8eE%dU|@ENpN*_1-)L6_4Rc* zFuq@`IjX9vp1QiaK9ZojyZhnQURP99d=u;%37VRkpwsD4U0sd3x;hEQB&e^i|3QN0 z=H|Os1fRqaw!?#igLmS4HE!G3*ce(`TF} zlgUq0Q544c8(ae&UR$8ps&snq6^bPY3v3xAmMW74Di$h~GCH6E3TaYs2#6A<7K*gC z777H71_Wa;(dfp+g-drPCSWu)#PInZi72LJ;o?i~$-U=y&UbQ89Dul3%3P+Axkzc* zbH-y;QF=hR{qLItf%ci2_&e5wNo0gnVatG?ul6Zw=o$I9Ljfn*ic3`U?>IfEim3g{ zujU&$-hy6wn;w(xme|zJm;lWJxtTFfM)q0`kX!Vu0+d${$}LCddK1<^htTe-fUYL3 zB`SdNsZD>RgvLj1<^@h6_+cDRK2Brcr2~>%$*5S)hyV33PV^teac3%|4lz@8p4?)5 z?t5o^?q+%^%)Yygo~I^U4VR!bTnWuE35hcWrfCDR3q+sxJ79e7Fg`&)RCqLA^2^y^ z0laVfadW90_Fz8Brm|r47sB^u1VgI>kanj)Z4`zMSfHlm8>CwXa$JVM`$2RrmZB-3 zN10m-!;BvH*Br3V8t`DH7m`jf#2upVDXl{5ff18_pzCPK1Zu$$CKKvd8FGeFf)+K<|x33pc7P&S#3GZT4mEw;nr(Ze*F z3&*?-4U-lm*#tber5 z%S_ceqB`b3ko6r~BbvDwdohTvP(3a(pq{x#T$yQsu#OKwEe}KuH^Mh@nxg_(Nw136 zq#a^3xNBke)In+!?qk3%4wB69{pF`Tzg`07*qoM6N<$ Eg55P&8UO$Q diff --git a/lib/rdoc/generator/template/darkfish/images/bullet_black.png b/lib/rdoc/generator/template/darkfish/images/bullet_black.png deleted file mode 100644 index 57619706d10d9736b1849a83f2c5694fbe09c53b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-$h^>lFz(Kw&{<9vg>5sw~gS5O!4 zr|{HuUFIBKiQyL}eBJ-L{`UVT|6_O~L{G%N{Wbre{kQtZ_0LvEhC#5QQ<|d}62BjvZR2H60wE-$h^mK6y(Kw&{<9vg>(S^W+6Zii9 z|Nhthr~iNb*Z!}6uiN$Dz5neG3a-`baBX8yz1H+_;eX)`ni0%X8XBDc-`=Ph(Uan2 zYsR{H!kvIN--9isvHznRsC#5QQ<|d}62BjvZR2H60wE-$h_H=O!(Kw&{<9vg>(S^W+6Zii9 z|Nhthr~iNb*Z!}6uiN$Dz5neG3a-`baBX8yz4q@v|B?28{s)#N@CGn3@%_y|zAV9T z66e<&B4?b6oF&azg|C(V&1ZbI_D}pL`}(^FT2yXwG1Ph~$Q@h8mJYOz!PC{xWt~$( F699+YQR)By diff --git a/lib/rdoc/generator/template/darkfish/images/date.png b/lib/rdoc/generator/template/darkfish/images/date.png deleted file mode 100644 index 783c83357fdf90a1c7c024358e1d768b5c09c135..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 626 zcmV-&0*(ENP)5OC%H;f`~O(q$Q#t2<^v$A>fbmv%e#dKTwK=Ku{5lS|}<-`a#7b zzTCOnnT>at)D}AMFuOZ5&%EqFN(lyumd$2ASF6=;nM~%2?gqc@U=#|4PqkX@EBo-9 z7pD#bO_RUa>*faM`8;MYfVi$JnB-zcBFc6gjl$d!bF98Q!!!(Z1_R~P?e!pt#6CHJ9S&n_n&@=9 z%GP;!@Co4c*at+6vNz7o(6en^Q1%qHrc;1)9IRaz-$@S$Z-qdC^ds3X0NvQH;KS)D z-dh&rW&@X;1cS(45z)J&BVt+tv&GMVJ%!EiW) zLBGZW)#Z+gl-Lih&?>X3SS-S#ujQ;9JRXmIB7X)8`d6ETj)D#Q2+$s|<_b7-B9Xvq zwNfqlEp%y3$uY`h{Y$(Gn5@}sqEsq95lpAkFO5dyBmP6^H-51G4J|rN2Ujt<`2YX_ M07*qoM6N<$fC4}Mrzlg<+1Y8PEBfUp0jJpx4B>@E+cy3`^(Gw`Mf+2&yxZm<$to~Vpgvg&QKNR z_f#1(r6svZt%iF?s+n<8X?B&!h3g9Dbb8_=MX}!;HiQSAh`bp^WMl~Z-44teO7W_Y zV4thSL{h;rJY7!l3%5J4H1!tIzB`Dv+YxO(haWeausGZYkI8^hWj6mzo=L0{%;yxzh{5!Htr?51 zvG|W62MzC8BZ76hRpCyO2zOn<%e)K>NHge!-~)Ap33OdWw6hsLYbCxGNt0%wk_2z7 zfyYvXheSG)5HRK1VB~%mq7Dmurw#bi@hEcOr3&G1ZiF*$M=&9nB#VNf&Q^r$4G5kp zTURh&s)E0%5&hyVD}sp<72~zmAY`Y(9aqO6CXF%=zFHGzO-A&I(pE}v70YQxCPJ{Y z4L+?5-crdLn3ZRPEs!A4ehEY3ZRpL~w9>@aMN+{F4dI@v&>(QDHQum!mG~E^$OS8l z!7?%Uwib*ROP67Hw`ika)gX-(8Ia`-u_IEhxG7U<13kSsMW+$lbb2dUMm5p6pa}cjgA+U$^mJ^AjD?&bdi)8~y+Q002ovPDHLkV1g8IMc@Dc diff --git a/lib/rdoc/generator/template/darkfish/images/find.png b/lib/rdoc/generator/template/darkfish/images/find.png deleted file mode 100644 index 1547479646722bda4647df52cf3e8bc9b77428c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 659 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 Dl)1NK diff --git a/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png b/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png deleted file mode 100644 index c6473b324ee1dae1faaacc0826639833f551116c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIEX7WqAsj$Z!;#Vf4nJ za0`Jjl>Qs8<JF;+Fd5q0wCR k?u=~bH}2*0f`J3~k>FVdQ&MBb@0BAfpf&c&j diff --git a/lib/rdoc/generator/template/darkfish/images/package.png b/lib/rdoc/generator/template/darkfish/images/package.png deleted file mode 100644 index da3c2a2d74bab159ba0f65d7db601768258afcb2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 853 zcmV-b1FHOqP)5TQ^(M5v$(QKVE?W+9X! z*o}&~6c?_FreF)9NJB7b5Nbn{G0n4+%uJhR9(V5R|NFTpb|HgjefT!tIhLx@DR+N) zV+fHiR5Yt19}k|KnCsND{tH-`IMJ)3AE?OtyZ4>Un|6(d%h#JK`i&a7^xW9>`yBy` zS4SOHeOpC7$?hH5-#7Rswiue_8Ju*2N@$58=a#2OTA3png`w3v->gWif7t%e$ z$NLVS!tFT#8WL|Wa&K~+{%4P2cRfwesYV1_!F=3OaRVHl(>=`%&{x*s30c}#CNE@&;ItrAv!f!)Oy$Q9t$uS=(sD$-J{T*^(8Eez1E-l3}} zPrfHZ1`qsIFe&gipuL8-IZbo2Yg{lFGKs?ZZWcOaOdk*3`5T;$?AjbG1#`B510Er^h2)2r3Y{!8_2Gj=$KzuN5 zaErtW8W_Y2iJJjY)5pmTVJoPJYpanPOEuYHclM^C1F>${hFRpdi8a<2H|Xudf78bm(zwJ9`K%6I?q*Ua~ fW9JvIbn5*B+_J)rUMBs>00000NkvXXu0mjfH&TkY diff --git a/lib/rdoc/generator/template/darkfish/images/page_green.png b/lib/rdoc/generator/template/darkfish/images/page_green.png deleted file mode 100644 index de8e003f9fb8752c09e7f3655d5d8664b5c62fc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 621 zcmV-z0+RiSP)QqUjAtB;_Vvt6}AS_5YgM`Uqu`yva+H8^=4U$e4gHb}u zAQ2N{V3A%pO|?Pv?tb6z=jC}SiRa$G^v3q?*6XcYz$p|cq{uLj@#~Fi`J(>5{@&&N zy%T^+;>8cXx%|o77anP?&W1?1A(>-T49z9pyeCl@7YI+Si zKti7=B~``}TImz(G{0PnlQA3P#MAd}sorMjkP!50B7$nAkU^%#nl{Q9lW0@}9fE-> zN(q7tRuiC_T1r|BBtVBTlQ2+70$Rf;eF`Z;lx46Cpu-rEgb)EBKq(b^W8l<^We(`D z43?0=01z<3G6+UUv6`CsWCk6^93!#+<;ws7007{zS3k2k9-zZKFO~(k`>s0y006+1 zgF_jyIhsL-`FMf~JL~C=cV75(CrJ|q;MVO961G=O zm9d)YpJg5g(4i_HKL75eSE}mq$Y}r}hyVdcV~p>6a}oXr80q`oj%+s700000NkvXX Hu0mjfPs|!l diff --git a/lib/rdoc/generator/template/darkfish/images/page_white_text.png b/lib/rdoc/generator/template/darkfish/images/page_white_text.png deleted file mode 100644 index 813f712f726c935f9adf8d2f2dd0d7683791ef11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^zbpD<_bdI{u9mbgZg z1m~xflqVLYGB~E>C#5QQ<|d}62BjvZR2H60wE-%6;pyTSA|c6o&@eC9QG)Hj&ExYL zO&oVL^)+cM^qd@ApywS>pwx0H@RDN}hq;7mU-SKczYQ-hnrr=;iDAQMZQ+*g=YOM= z!QlMQEn7FbaD->uKAYgo_j9)W&$$zS*W9}m(ey0q$&7l-XEWO0Y(9M=SnhLbwy;d>@~SY$Ku*0xPvIOQeV1x7u_z-2-X>_74(yfh7C znXL|3GZ+d2`3re2hs?MKC#5QQ<|d}62BjvZR2H60wE-$R?&;zfqH(@;q9b3Efq-lM(nr^( z=EYR73-9e)UYMWsXy%?aZsD68Yyv^2$~6QgEcljw%kx>O(f-gQ?@fOOx3A-0+Qw?O zRx~W)kn~Qe2d6f9nMG#g9Q04Mk==M~N!Dglvxk!fgVh#w@ZV$IY1+Xc`d{d2UcaP~ zfWp)_Ivqj}l2SPy^9ZWy6rG9Yx4v67_uA&&9|XA~5-#3)W3%em1peD8RWH^#O%XoM zxMPud%}GTj#~*+7JMxTd!`{^Q+>(D3*|@KV`*G2;{QnANOxu1$r2xIe;OXk;vd$@? F2>@zac~<}c diff --git a/lib/rdoc/generator/template/darkfish/images/plugin.png b/lib/rdoc/generator/template/darkfish/images/plugin.png deleted file mode 100644 index 6187b15aec001b7080b51a5f944f07591f26cc15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 591 zcmV-V0eEcNHZMNv|IbJ-M`( zKwWL~opzjJe^WpCmV9E;(0&ut2;4va_(#>M8)>9$R5viQnf(Nkh~VM$y>J(jqb$cj z+nL1Nm|mV)Gm|9MnHf*7Ja4OEAQz__^LRKOLEwqpiGV^^A*T=#&inGm-62Xs;dnSp zKj&H9T*boh2i)W+(n27l!C)>fq|L%VB1i ziC4p;NwV_}ZjW7$LRW#(_bKF#hp=!IqNO26Z*w2+LEwx{PVnZ&Sn}T;mtzb$;qA*nT@@+ zV5uQ@iXDTPoTbV#FRr~z04|PPh`wXTNoCm9*tG&?e3+fYl>K6+&3|Cc$KOpL`ER+_ dcRl5U#9zn6ZO}GFk7R5;7c zlif>`Q5?tj7Yw@ZCMtTF^Q|ZedeJhM%QPCR*bs8V79p$QTo7e94yQNXRs-{0?hOn_-8n0AMO@u1Ts zNl8QzJs1#rz%RBt?ux>l+amAvh+J!{$lkaqv}+Erb-6j2xp>K4GLQnNB*W`hFg*?P z^AL@~(h~Z+wfcWEXHqV^Tq-#z$7Y#o0;yFxA!00F}F2dX# zjE$iOgT#G4*1TR6kB1Gnn@>$meCh2a>c5YuIvFn-R2W@>4@M*m@-|jiDV?b)bccgA zyPfsMM!rjy>+1O2)5Eg29Z_*2p&qGnmS!OH?vZ(4>QB01d>j%9n4QINxkyT(Dos?I zjaWF$*IQmh`SF-?xU%xMEfjq1=6qY*g&lgG_cXv$BGoIWyfO5 zp>pdV*O+y=&6@N2WWFo(%RtT`Q(H^6zn^a%epE~Kx^mEJ{c8`luC$nc*z9j|4Ms8aJK-ladKLpnAK z!yd|CC&>l1b7`m$MH$ScEIP@XgT41O>|DzL{-38CH68OyX#u=G?d7;y&_o&o)f@3U z2(tr%Ok88caOL`xiQA8o;Vzr-$A$SOu6o|$&0DQAJ1Z7?OACaeoy+)PWu&~aueW<| z*KW^(^2}#30u*~<_mXScFNd6U&sxh5*GGMNytZGxkIGqL%v6329^u`FD6T?b?K!4B z@Hzh?O2Au=((Gu;rvgLMt^pS|u1rEkBgC8$oH%zgT`TvZiK#VDrVG?-i~6a_+WZb> zc1>>lb)xcuo^Cl8k%q3c_d*It_Vtj>RSovF&w;hS=6uYrT2e@-@l@P~uBN`zu!v>e zTm(is&jcQ6vuP?|;!e+(n8w)-Xjd!hwk@r2D0i00ygdKo2Xvs?&w_lajj5DHS@9I! z;_&ji2e{!uusGnVn};Pu|dl5x-FhQyC8^-4Uo_;BLiOXzcE z&4PS2TBWSC=hsw0og;z#(mly@Ed2E1E$_VDaM?kloE4ob2XK&K;OS~-nhIGlA4~UZrJu6*|}wi#TT?|yWUH+_&n($t0xta zBwTzSfE)uAw*L0>+`pTps}L-$jIP5Q_E$Am+l|{XfsKr0Vi~`Em?SJQ#0y)8vsxb1 zMdxJl^){_CDwI^}>)Pw${G?Ajc@P}x{Fvhoi0jbY^427?KPmoA_G)sqK}u$2(79Xg zC%}xm5JDcrsm5^vQEQpGEdJDc^yfuNAlqV1pZQVkOSceV<|{=|=@?=o4i_1RFUZth zC7cu<6%V3dVCI}P6DL4iUgTc@&(nXY)ox}HZ z(a#EgiNj%{kjRLL2t?{m_aKN`{5-&u+HAtQ-Qq#@!I@<(M+B3i@|g=LY6 z90tpW!JuMn_Lcy1q7g&LUSuLE3XS}K#P^nHVUmL`L)dbP| z0bt(+Cp#M-bH!LM*DzJ0Lfn;eTBV@|JvGSgpdoc1RhhV>(G-2(vE|>MrVgA9+?+0m4OzUqbT>-U-jg|v zLZMntq`r?fy1UCMh>z2Koi1SL-~N2ZrIf+dZW|;SWszsde}Dl!HOMc1Fa>K9)e&RI z)A?aK zcviCdKDUg_%#u7YAE`A`Y3$(P4&m^@fEWAvjAwVmRWeUnmkrxA;E!fKoc{9Vi=lvFL}KmoS;g* zdjL?Y!VHUFq63aLj6VZE+tHts?Z1pFkiO9^k*5pGpFpU&5#5G4ATd{t>a&9zKBVB9=Ns^HFU|DTGH8C+Xr2UqOU`Zxe)!|%j4=-QojGePq)pRGe;!f)Czk!u3vP_Jxu8(e6 zf4Q`F$Qio2Jw@N*E@k?c`+Sw}AYQjkT+x)OAe6eq(AT!iRuksKQn%Ao_Ac1T-p#Js I_CnHs0qX}mlmGw# diff --git a/lib/rdoc/generator/template/darkfish/images/tag_green.png b/lib/rdoc/generator/template/darkfish/images/tag_green.png deleted file mode 100644 index 83ec984bd73364134da0f98d27a800c5d3264180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 613 zcmV-r0-F7aP)^5T)AZ%#@G{_P{NCN^P z(J0zvSn~SSm(Ur);-M~8^*;61*VRI`T1BN&LAhK;sZ>I-SVW;vfUfJv=ko^ugnc0x zhJodBxe>iyk3%w<%wC8holUJ4(iv>tL{`DQt zPOsyUbO_Cmc&*iHkqbm3ku`|GcC^OhF>jj9W*GkH;^g!iUVpib_h*=@udp4h(P+e*zL_~ZmJjh(y^BxULwq>9zXoYE8sq{#pN~U0C6!8vY)5N2 z9P*}mw}7X$O^qTtJef1ACWvJT9^wt-)Zh0r~j#0bT`f;-zv6 z^Tmw22!%rMcs!TaUX<-8s;X-B`+Xbo+_uWuFa z1yIPc?DTrQ7KvRhmt*TG|L=EYQ=LqFX;=Lp`4}jx6BE-@00000NkvXXu0mjf=s_29 diff --git a/lib/rdoc/generator/template/darkfish/images/transparent.png b/lib/rdoc/generator/template/darkfish/images/transparent.png deleted file mode 100644 index d665e179efd797451084235f105425247fea0a14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!D3?x-;bCrM;bAV5X>;M1%mmiTn0pv241o;Is pI6S+N2ITN~x;Tb#$R;N!@B(=T42&&nK2`x)44$rjF6*2UngG277DE64 diff --git a/lib/rdoc/generator/template/darkfish/images/wrench.png b/lib/rdoc/generator/template/darkfish/images/wrench.png deleted file mode 100644 index 5c8213fef5ab969f03189d4367e32e597e38bd7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 610 zcmV-o0-gPdP)^jb z4`0v}DG1te)wmeb(>p90leRz?_mO+^JKy=v&2<29Od6?F%9%(c8los#f*@G`-%W&* z$)uBj2i@u-@SgX}gtyWPe6d*|w6h%R? zScK2#Yn%$sum0cy>90DmY*i{1XqpClEtktsRTZ)lCUe z<FogV^*tm>8*AlX za4oiR!&85LrobG57qUHUX#{>Vz(RHpB5|@>9O6N$jqB8>%($0wxE5R3)b>Y~xtCo$ zCgEk&A?_#IxHdN)9tqre^o{ho4{?hmPuf@^@I3-wncaRd%|~O3xbrKY=&TiwPYkJroM{;WUQTuMY8vpg}f4o)2%U3C;eEDoiEh?94d(rV57VIF#8VqzW$HrDC|#U`x@QDbgi zVl)t9GGz&YY#D?gc%>hISA+_EBpnXt#pnC`p6@xw0$8TCbULjhlgVx(kuc)%xbgqq zR5+DNDFRN0!y)7Gm}oT0i39}h4h928qY?Rho^UvPGJ#kuW|-Amtrn`Pmd&+bFo@sp z$LI4IQw7BG?|#2ewOS<<3VjL$0=lMY^m;wqZujv5kx1l%Sl;V&Iy4#$ip3&@LV2!7vhhN=PCz%^9v24`qb(+m4W?!q-&~=?ssf5GfnAmJKV;3bvpDm0(NhahZ=&^sqo6Odj6>)Dq_3p~4~ zvb`d3Mydwjt&Df^hVmLtI2x=U&h9(JVYX-!y~z3zi;1>=LY;o(bL$(Yf$lf)dMf0-u^0HrpTG Wk@)HE*94aU0000m+BBgry{~j2fHLegbHP( zrgXNbr0}2;^nywdjLjZe?uxtrd3D(pZH@fFFc0{BW_~jxoO1w7-VX;6vK@ROA$$R6 zEmo;Ht-Mj|>5jUy{bQ^V5@53LRI8AgLpUm|m+15sqcz@QtVSo|oz7ArM8?pIn+>gN z0b=4_b5O|4A*;Q+vc9Vqr~%3V155*NV~@gTz}KSUiKB-uJzjMZ>5%Q#n24H!V{ zTY(LLAE*NAHZ}C#wnj%Bw5OFIkRhkkAW#kDC3j9Wm0YXRaXlyyp>#mVfYG)eC;@ab zDb=T-BCAY4LI(Z@GOTr2V_A{pRwSmz+8Be>CjAw(=gnbVWAeguvZa93JmL(EDxv1m z0OP4q=fpAK1Mq!C2`OkEn37o;m#wF#(t(8Pu#S?2f#x<~4EO{@fmm`p9veD6RZ_jp z@Au4};q&`XuKEYgIiB4((kgxOs#YdqJw0fY>9^K_agEu5+$#k;w#%I2N>n_?)YIqu z`tq&#_^p?-%K*U0^}|7+9U(&k0?s;=r=uCZ%)H9_edH8wK}gB(nUB1FFk+2Ol%BXV zHoFY`D~2x|2 -<%= render '_sidebar_toggle.rhtml' %> - -

- -
-<%- if @options.main_page and - main_page = @files.find { |f| f.full_name == @options.main_page } then %> -<%= main_page.description %> -<%- else -%> -

This is the API documentation for <%= h @title %>. -<%- end -%> -

diff --git a/lib/rdoc/generator/template/darkfish/js/darkfish.js b/lib/rdoc/generator/template/darkfish/js/darkfish.js deleted file mode 100644 index 4c15efde66..0000000000 --- a/lib/rdoc/generator/template/darkfish/js/darkfish.js +++ /dev/null @@ -1,120 +0,0 @@ -/** - * - * Darkfish Page Functions - * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $ - * - * Author: Michael Granger - * - */ - -/* Provide console simulation for firebug-less environments */ -/* -if (!("console" in window) || !("firebug" in console)) { - var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", - "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; - - window.console = {}; - for (var i = 0; i < names.length; ++i) - window.console[names[i]] = function() {}; -}; -*/ - - -function showSource( e ) { - var target = e.target; - while (!target.classList.contains('method-detail')) { - target = target.parentNode; - } - if (typeof target !== "undefined" && target !== null) { - target = target.querySelector('.method-source-code'); - } - if (typeof target !== "undefined" && target !== null) { - target.classList.toggle('active-menu') - } -}; - -function hookSourceViews() { - document.querySelectorAll('.method-source-toggle').forEach(function (codeObject) { - codeObject.addEventListener('click', showSource); - }); -}; - -function hookSearch() { - var input = document.querySelector('#search-field'); - var result = document.querySelector('#search-results'); - result.classList.remove("initially-hidden"); - - var search_section = document.querySelector('#search-section'); - search_section.classList.remove("initially-hidden"); - - var search = new Search(search_data, input, result); - - search.renderItem = function(result) { - var li = document.createElement('li'); - var html = ''; - - // TODO add relative path to >, yield_arg' - @attr = RDoc::Attr.new nil, 'attr', 'RW', '' - - @klass.add_method @meth - @klass.add_method @meth_bang - @klass.add_method @meth_with_html_tag_yield - @klass.add_attribute @attr - - @ignored = @top_level.add_class RDoc::NormalClass, 'Ignored' - @ignored.ignore - - @store.complete :private - - @object = @store.find_class_or_module 'Object' - @klass_alias = @store.find_class_or_module 'Klass::A' - end - - def teardown - super - - $LOAD_PATH.shift - Dir.chdir @pwd - FileUtils.rm_rf @tmpdir - end - - def test_generate - top_level = @store.add_file 'file.rb' - top_level.add_class @klass.class, @klass.name - @klass.add_class RDoc::NormalClass, 'Inner' - @klass.add_comment <<~RDOC, top_level - = Heading 1 - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod - == Heading 1.1 - tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, - === Heading 1.1.1 - quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo - ==== Heading 1.1.1.1 - consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse - == Heading 1.2 - cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat - == Heading 1.3 - non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. - === Heading 1.3.1 - etc etc... - RDOC - - @g.generate - - assert_file 'index.html' - assert_file 'Object.html' - assert_file 'Klass.html' - assert_file 'Klass/Inner.html' - assert_file 'table_of_contents.html' - assert_file 'js/search_index.js' - - assert_hard_link 'css/rdoc.css' - assert_hard_link 'css/fonts.css' - - assert_hard_link 'fonts/SourceCodePro-Bold.ttf' - assert_hard_link 'fonts/SourceCodePro-Regular.ttf' - - encoding = Regexp.escape Encoding::UTF_8.name - - assert_match %r%%, File.binread('index.html') - assert_match %r%%, File.binread('Object.html') - - refute_match(/Ignored/, File.binread('index.html')) - summary = File.binread('index.html')[%r[.*]m] - assert_match(%r[Klass/Inner\.html".*>Inner<], summary) - - klass = File.binread('Klass.html') - klassnav = klass[%r[