bitclust-core 1.3.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -0
  3. data/README.md +65 -0
  4. data/Rakefile +32 -0
  5. data/data/bitclust/catalog/ja_JP.UTF-8 +19 -1
  6. data/data/bitclust/searchpage/index.html +90 -0
  7. data/data/bitclust/template/class +69 -8
  8. data/data/bitclust/template/function +2 -2
  9. data/data/bitclust/template/layout +11 -3
  10. data/data/bitclust/template/method +2 -2
  11. data/data/bitclust/template/search +1 -1
  12. data/data/bitclust/template.epub/class +22 -1
  13. data/data/bitclust/template.epub/function +2 -2
  14. data/data/bitclust/template.epub/layout +1 -3
  15. data/data/bitclust/template.epub/method +2 -2
  16. data/data/bitclust/template.lillia/class +26 -5
  17. data/data/bitclust/template.lillia/layout +1 -3
  18. data/data/bitclust/template.lillia/method +2 -2
  19. data/data/bitclust/template.offline/class +48 -4
  20. data/data/bitclust/template.offline/function +2 -2
  21. data/data/bitclust/template.offline/layout +27 -3
  22. data/data/bitclust/template.offline/method +2 -2
  23. data/lib/bitclust/app.rb +16 -17
  24. data/lib/bitclust/capi_converter.rb +20 -0
  25. data/lib/bitclust/classentry.rb +67 -17
  26. data/lib/bitclust/compat.rb +2 -2
  27. data/lib/bitclust/completion.rb +58 -27
  28. data/lib/bitclust/crossrubyutils.rb +8 -5
  29. data/lib/bitclust/database.rb +28 -8
  30. data/lib/bitclust/doc_converter.rb +63 -0
  31. data/lib/bitclust/docentry.rb +1 -1
  32. data/lib/bitclust/entity_splitter.rb +221 -0
  33. data/lib/bitclust/entry.rb +47 -7
  34. data/lib/bitclust/functiondatabase.rb +13 -1
  35. data/lib/bitclust/functionentry.rb +5 -1
  36. data/lib/bitclust/functionreferenceparser.rb +4 -4
  37. data/lib/bitclust/generators/epub.rb +10 -3
  38. data/lib/bitclust/htmlutils.rb +1 -1
  39. data/lib/bitclust/include_graph.rb +375 -0
  40. data/lib/bitclust/include_pruner.rb +144 -0
  41. data/lib/bitclust/interface.rb +1 -1
  42. data/lib/bitclust/libraryentry.rb +8 -7
  43. data/lib/bitclust/lineinput.rb +7 -5
  44. data/lib/bitclust/link_checker.rb +179 -0
  45. data/lib/bitclust/markdown_bridge.rb +186 -0
  46. data/lib/bitclust/markdown_orchestrator.rb +267 -0
  47. data/lib/bitclust/markdown_to_rrd.rb +824 -0
  48. data/lib/bitclust/markdown_tree.rb +217 -0
  49. data/lib/bitclust/mdcompiler.rb +883 -0
  50. data/lib/bitclust/mdparser.rb +347 -0
  51. data/lib/bitclust/messagecatalog.rb +3 -3
  52. data/lib/bitclust/method_since_calculator.rb +117 -0
  53. data/lib/bitclust/methoddatabase.rb +124 -14
  54. data/lib/bitclust/methodentry.rb +125 -7
  55. data/lib/bitclust/methodid.rb +12 -11
  56. data/lib/bitclust/methodsignature.rb +10 -4
  57. data/lib/bitclust/nameutils.rb +41 -22
  58. data/lib/bitclust/preprocessor.rb +66 -29
  59. data/lib/bitclust/rdcompiler.rb +195 -95
  60. data/lib/bitclust/refsdatabase.rb +23 -8
  61. data/lib/bitclust/reloadable_request_handler.rb +72 -0
  62. data/lib/bitclust/requesthandler.rb +21 -16
  63. data/lib/bitclust/ridatabase.rb +10 -4
  64. data/lib/bitclust/rrd_to_markdown.rb +925 -0
  65. data/lib/bitclust/rrdparser.rb +196 -30
  66. data/lib/bitclust/runner.rb +17 -2
  67. data/lib/bitclust/screen.rb +80 -11
  68. data/lib/bitclust/search_index_generator.rb +288 -0
  69. data/lib/bitclust/searcher.rb +69 -20
  70. data/lib/bitclust/simplesearcher.rb +24 -12
  71. data/lib/bitclust/subcommand.rb +7 -1
  72. data/lib/bitclust/subcommands/ancestors_command.rb +9 -2
  73. data/lib/bitclust/subcommands/checklink_command.rb +54 -0
  74. data/lib/bitclust/subcommands/chm_command.rb +15 -7
  75. data/lib/bitclust/subcommands/classes_command.rb +5 -0
  76. data/lib/bitclust/subcommands/extract_command.rb +5 -0
  77. data/lib/bitclust/subcommands/htmlfile_command.rb +21 -7
  78. data/lib/bitclust/subcommands/init_command.rb +4 -1
  79. data/lib/bitclust/subcommands/list_command.rb +12 -4
  80. data/lib/bitclust/subcommands/lookup_command.rb +28 -9
  81. data/lib/bitclust/subcommands/methods_command.rb +10 -2
  82. data/lib/bitclust/subcommands/methodsince_command.rb +80 -0
  83. data/lib/bitclust/subcommands/preproc_command.rb +5 -0
  84. data/lib/bitclust/subcommands/property_command.rb +2 -1
  85. data/lib/bitclust/subcommands/searchpage_command.rb +102 -0
  86. data/lib/bitclust/subcommands/server_command.rb +10 -8
  87. data/lib/bitclust/subcommands/setup_command.rb +24 -10
  88. data/lib/bitclust/subcommands/statichtml_command.rb +129 -6
  89. data/lib/bitclust/subcommands/update_command.rb +110 -2
  90. data/lib/bitclust/syntax_highlighter.rb +48 -4
  91. data/lib/bitclust/textutils.rb +3 -3
  92. data/lib/bitclust/version.rb +1 -1
  93. data/lib/bitclust/version_badges.rb +90 -0
  94. data/lib/bitclust/whole_file_gate.rb +137 -0
  95. data/test/test_app.rb +269 -0
  96. data/test/test_bitclust.rb +2 -0
  97. data/test/test_capi_converter.rb +91 -0
  98. data/test/test_class_screen.rb +413 -0
  99. data/test/test_copy_doc_md.rb +53 -0
  100. data/test/test_doc_converter.rb +78 -0
  101. data/test/test_entity_splitter.rb +231 -0
  102. data/test/test_entry.rb +207 -2
  103. data/test/test_eol_warning.rb +43 -0
  104. data/test/test_functionreferenceparser.rb +11 -0
  105. data/test/test_include_graph.rb +640 -0
  106. data/test/test_include_pruner.rb +133 -0
  107. data/test/test_link_checker.rb +114 -0
  108. data/test/test_lookup_command.rb +135 -0
  109. data/test/test_markdown_bridge.rb +217 -0
  110. data/test/test_markdown_orchestrator.rb +478 -0
  111. data/test/test_markdown_to_rrd.rb +757 -0
  112. data/test/test_markdown_tree.rb +369 -0
  113. data/test/test_mdcompiler.rb +1276 -0
  114. data/test/test_mdparser.rb +538 -0
  115. data/test/test_method_screen.rb +166 -0
  116. data/test/test_method_since_calculator.rb +290 -0
  117. data/test/test_methoddatabase.rb +16 -0
  118. data/test/test_methodentry.rb +328 -0
  119. data/test/test_methodsignature.rb +3 -1
  120. data/test/test_methodsince_command.rb +168 -0
  121. data/test/test_nameutils.rb +22 -0
  122. data/test/test_preprocessor.rb +215 -0
  123. data/test/test_rdcompiler.rb +401 -30
  124. data/test/test_refsdatabase.rb +32 -0
  125. data/test/test_rrd_to_markdown.rb +968 -0
  126. data/test/test_rrdparser.rb +295 -2
  127. data/test/test_run_ruby_wasm.rb +54 -0
  128. data/test/test_run_worker_prelude.rb +83 -0
  129. data/test/test_runner.rb +51 -0
  130. data/test/test_search_index_generator.rb +513 -0
  131. data/test/test_search_screen.rb +48 -0
  132. data/test/test_searcher.rb +132 -0
  133. data/test/test_searchpage_command.rb +167 -0
  134. data/test/test_simplesearcher.rb +28 -0
  135. data/test/test_statichtml_command.rb +204 -0
  136. data/test/test_syntax_highlighter.rb +60 -0
  137. data/test/test_whole_file_gate.rb +175 -0
  138. data/theme/default/js/NOTICE +42 -0
  139. data/theme/default/js/run-worker.js +111 -0
  140. data/theme/default/js/run.js +350 -0
  141. data/theme/default/js/search_controller.js +134 -0
  142. data/theme/default/js/search_init.js +176 -0
  143. data/theme/default/js/search_navigation.js +110 -0
  144. data/theme/default/js/search_page.js +202 -0
  145. data/theme/default/js/search_ranker.js +244 -0
  146. data/theme/default/script.js +91 -18
  147. data/theme/default/search.css +149 -0
  148. data/theme/default/style.css +193 -21
  149. data/theme/default/syntax-highlight.css +8 -0
  150. data/theme/lillia/style.css +45 -1
  151. metadata +161 -20
  152. data/README +0 -32
@@ -59,22 +59,25 @@ module BitClust
59
59
  end
60
60
 
61
61
  def handle_library(req)
62
- return library_index() unless req.library_name
63
- lib = @db.fetch_library(req.library_name)
62
+ library_name = req.library_name
63
+ return library_index() unless library_name
64
+ lib = @db.fetch_library(library_name)
64
65
  @screenmanager.library_screen(lib, @conf).response
65
66
  end
66
67
 
67
68
  def handle_class(req)
68
- return class_index() unless req.class_name
69
- c = @db.fetch_class(req.class_name)
70
- h = @conf.dup
69
+ class_name = req.class_name
70
+ return class_index() unless class_name
71
+ c = @db.fetch_class(class_name)
72
+ h = @conf.dup #: RequestHandler::conf_class
71
73
  h[:level] = req.ancestors_level
72
74
  @screenmanager.class_screen(c, h).response
73
75
  end
74
76
 
75
77
  def handle_method(req)
76
- ms = @db.fetch_methods(req.method_spec)
77
- raise MethodNotFound.new(req.method_spec.to_s) if ms.nil? || ms.empty?
78
+ method_spec = req.method_spec or raise RequestError, 'method request but method_spec is nil'
79
+ ms = @db.fetch_methods(method_spec)
80
+ raise MethodNotFound.new(method_spec.to_s) if ms.nil? || ms.empty?
78
81
  @screenmanager.method_screen(ms, @conf).response
79
82
  end
80
83
 
@@ -91,13 +94,12 @@ module BitClust
91
94
  end
92
95
 
93
96
  def handle_search(req)
94
- ret = []
95
- q0 = req.query['q'] || ''
96
- q = URI.unescape(q0)
97
+ q0 = req.query['q'].to_s
98
+ q = URI.decode_www_form_component(q0)
97
99
  start = Time.now.to_i
98
100
  ret = SimpleSearcher.search_pattern(@db, q)
99
101
  elapsed_time = Time.now.to_f - start.to_f
100
- c = @conf.dup
102
+ c = @conf.dup #: RequestHandler::conf_search
101
103
  c[:q] = q0
102
104
  c[:elapsed_time] = elapsed_time
103
105
  @screenmanager.search_screen(ret, c).response
@@ -107,10 +109,11 @@ module BitClust
107
109
  d = @db.fetch_doc(req.doc_name || 'index' )
108
110
  @screenmanager.doc_screen(d, @conf).response
109
111
  end
110
-
112
+
111
113
  def handle_function(req)
112
- return function_index() unless req.function_name
113
- f = @cdb.fetch_function(req.function_name)
114
+ function_name = req.function_name
115
+ return function_index() unless function_name
116
+ f = @cdb.fetch_function(function_name)
114
117
  @screenmanager.function_screen(f, @conf).response
115
118
  end
116
119
 
@@ -151,7 +154,7 @@ module BitClust
151
154
  end
152
155
 
153
156
  def doc_name
154
- name = path_info.sub(%r!\A/!, '')
157
+ name = (path_info || raise).sub(%r!\A/!, '')
155
158
  name unless name.empty?
156
159
  end
157
160
 
@@ -188,6 +191,7 @@ module BitClust
188
191
  unless typechar?(typechar)
189
192
  raise InvalidKey, "invalid method-type ID: #{typechar.inspect}"
190
193
  end
194
+ # @type var typechar: NameUtils::typechar
191
195
  cname = classid2name(cid)
192
196
  tmark = typechar2mark(typechar)
193
197
  mname = decodename_url(mencoded)
@@ -309,7 +313,8 @@ module BitClust
309
313
  end
310
314
 
311
315
  def update(webrick_res)
312
- webrick_res.status = @screen.status if @screen.status
316
+ status = @screen.status
317
+ webrick_res.status = status if status
313
318
  webrick_res['Content-Type'] = @screen.content_type
314
319
  # webrick_res['Last-Modified'] = @screen.last_modified
315
320
  body = @screen.body
@@ -169,7 +169,7 @@ module RI
169
169
  name = full_name()
170
170
  unless /\#/ =~ name
171
171
  components = name.split('::')
172
- m = components.pop
172
+ m = components.pop || raise
173
173
  components.join('::') + '.' + m
174
174
  else
175
175
  name
@@ -237,7 +237,7 @@ class Formatter
237
237
  line "--- #{m.full_name}#{trim_space(m.params)}"
238
238
  else
239
239
  m.params.lines.each do |sig|
240
- line "--- #{trim_sig(sig)}\#@todo\n"
240
+ line "--- #{trim_sig(sig)}#%todo\n"
241
241
  end
242
242
  end
243
243
  unless m.aliases.empty?
@@ -259,15 +259,17 @@ class Formatter
259
259
  s = trim_space(s)
260
260
  s.sub!(/\A[a-z]\w+\./, '')
261
261
  s.sub!(/=>/, '->')
262
+ # steep:ignore:start
262
263
  s.sub!(/(->.*)\bstr(ing)?\b/){ $1 + 'String' }
263
264
  s.sub!(/(->.*)\bint(eger)?\b/){ $1 + 'Integer' }
264
265
  s.sub!(/(->.*)\b(an_)?obj\b/){ $1 + 'object' }
265
266
  s.sub!(/(->.*)\b(a_)?hash\b/){ $1 + 'Hash' }
266
267
  s.sub!(/(->.*)\b(an_)?array\b/){ $1 + 'Array' }
267
- s.sub!(/ or /, ' | ')
268
+ # steep:ignore:end
269
+ s.sub!(/ or /, ' | ')
268
270
  s
269
271
  end
270
-
272
+
271
273
  def format_elements(elems)
272
274
  return "" unless elems
273
275
  return "" if elems.empty?
@@ -275,6 +277,7 @@ class Formatter
275
277
  end
276
278
 
277
279
  def format_element(e)
280
+ # steep:ignore:start
278
281
  case e
279
282
  when SM::Flow::P, SM::Flow::LI
280
283
  paragraph(e)
@@ -289,6 +292,7 @@ class Formatter
289
292
  else
290
293
  raise "unkwnown markup: #{e.class}"
291
294
  end
295
+ # steep:ignore:end
292
296
  end
293
297
 
294
298
  def headline(e)
@@ -306,6 +310,7 @@ class Formatter
306
310
  end
307
311
 
308
312
  def list(e)
313
+ # steep:ignore:start
309
314
  case e.type
310
315
  when SM::ListBase::BULLET
311
316
  e.contents.map {|item| "* #{format_element(e)}" }.join("\n")
@@ -329,6 +334,7 @@ class Formatter
329
334
  else
330
335
  raise "unknown list type: #{e.type.inspect}"
331
336
  end
337
+ # steep:ignore:end
332
338
  end
333
339
 
334
340
  def remove_inline(str)