bitclust-core 1.2.1 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/data/bitclust/catalog/ja_JP.UTF-8 +4 -0
- data/data/bitclust/template.lillia/layout +1 -1
- data/data/bitclust/template.offline/class +127 -34
- data/data/bitclust/template.offline/class-index +33 -6
- data/data/bitclust/template.offline/doc +41 -8
- data/data/bitclust/template.offline/function +42 -9
- data/data/bitclust/template.offline/function-index +33 -7
- data/data/bitclust/template.offline/layout +21 -14
- data/data/bitclust/template.offline/library +48 -12
- data/data/bitclust/template.offline/library-index +33 -6
- data/data/bitclust/template.offline/method +56 -11
- data/lib/bitclust/classentry.rb +13 -2
- data/lib/bitclust/compat.rb +8 -0
- data/lib/bitclust/completion.rb +1 -0
- data/lib/bitclust/docentry.rb +4 -2
- data/lib/bitclust/entry.rb +3 -0
- data/lib/bitclust/functionentry.rb +8 -7
- data/lib/bitclust/functionreferenceparser.rb +2 -0
- data/lib/bitclust/libraryentry.rb +4 -1
- data/lib/bitclust/lineinput.rb +6 -2
- data/lib/bitclust/methoddatabase.rb +3 -0
- data/lib/bitclust/methodentry.rb +10 -8
- data/lib/bitclust/methodid.rb +1 -0
- data/lib/bitclust/nameutils.rb +15 -11
- data/lib/bitclust/preprocessor.rb +26 -21
- data/lib/bitclust/rdcompiler.rb +29 -19
- data/lib/bitclust/requesthandler.rb +3 -3
- data/lib/bitclust/ridatabase.rb +2 -1
- data/lib/bitclust/rrdparser.rb +19 -20
- data/lib/bitclust/screen.rb +39 -4
- data/lib/bitclust/silent_progress_bar.rb +8 -4
- data/lib/bitclust/simplesearcher.rb +1 -1
- data/lib/bitclust/subcommand.rb +9 -0
- data/lib/bitclust/subcommands/chm_command.rb +3 -3
- data/lib/bitclust/subcommands/methods_command.rb +1 -1
- data/lib/bitclust/subcommands/server_command.rb +6 -1
- data/lib/bitclust/subcommands/setup_command.rb +2 -2
- data/lib/bitclust/subcommands/statichtml_command.rb +44 -21
- data/lib/bitclust/syntax_highlighter.rb +5 -3
- data/lib/bitclust/version.rb +1 -1
- data/test/test_bitclust.rb +1 -1
- data/test/test_entry.rb +14 -1
- data/test/test_functionreferenceparser.rb +4 -4
- data/test/test_preprocessor.rb +21 -0
- data/test/test_rdcompiler.rb +240 -0
- data/test/test_rrdparser.rb +16 -0
- data/test/test_syntax_highlighter.rb +22 -4
- data/theme/default/rurema.png +0 -0
- data/theme/default/rurema.svg +31 -0
- data/theme/default/script.js +34 -0
- data/theme/default/style.css +112 -8
- metadata +32 -19
@@ -1,25 +1,32 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html lang="ja-JP">
|
3
3
|
<head>
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
4
|
+
<%= google_tag_manager %>
|
5
|
+
<%= meta_robots %>
|
6
|
+
<meta charset="<%=h charset() %>">
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
8
|
+
<link rel="stylesheet" href="<%=h css_url() %>">
|
9
|
+
<link rel="stylesheet" href="<%=h custom_css_url("syntax-highlight.css") %>">
|
10
|
+
<link rel="icon" type="image/png" href="<%=h favicon_url() %>">
|
11
|
+
<% if @conf[:canonical_base_url] %>
|
12
|
+
<link rel="canonical" href="<%= canonical_url() %>">
|
13
|
+
<% end %>
|
14
|
+
<title><%=h @title %> (Ruby <%=h ruby_version %> リファレンスマニュアル)</title>
|
15
|
+
<meta name="description" content="<%=h @description %>">
|
16
|
+
<script src="<%=h custom_js_url('script.js') %>"></script>
|
16
17
|
</head>
|
17
18
|
<body>
|
18
19
|
<%= yield %>
|
19
|
-
<
|
20
|
+
<footer id="footer">
|
20
21
|
<a rel="license" href="https://creativecommons.org/licenses/by/3.0/">
|
21
22
|
<img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by/3.0/88x31.png" />
|
22
23
|
</a>
|
23
|
-
|
24
|
+
|
25
|
+
<a href="https://github.com/rurema/doctree/issues/new" id="feedback-link">フィードバックを送る</a>
|
26
|
+
<% if defined?(@edit_url) && @edit_url %>
|
27
|
+
/ <a href="<%= @edit_url %>">このマニュアルを編集する</a>
|
28
|
+
<% end %>
|
29
|
+
<script>if (window.URLSearchParams) { document.getElementById("feedback-link").search = new URLSearchParams({'body': document.location}); }</script>
|
30
|
+
</footer>
|
24
31
|
</body>
|
25
32
|
</html>
|
@@ -1,17 +1,49 @@
|
|
1
1
|
<%
|
2
2
|
@title = "library #{@entry.name}"
|
3
3
|
@description = @entry.description
|
4
|
+
@edit_url = edit_url(@entry.source_location) if @conf[:edit_base_url] && @entry.source_location
|
4
5
|
%>
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
6
|
+
<% if @conf[:canonical_base_url] %>
|
7
|
+
<script type="application/ld+json">
|
8
|
+
<%=
|
9
|
+
breadcrumb_json_ld(
|
10
|
+
[
|
11
|
+
{
|
12
|
+
name: manual_home_name,
|
13
|
+
url: absolute_url_to(@urlmapper.document_url('index'))
|
14
|
+
},
|
15
|
+
{
|
16
|
+
name: _('All Libraries'),
|
17
|
+
url: absolute_url_to(library_index_url),
|
18
|
+
},
|
19
|
+
{
|
20
|
+
name: friendly_library_name(@entry.name),
|
21
|
+
url: canonical_url
|
22
|
+
}
|
23
|
+
]
|
24
|
+
)
|
12
25
|
%>
|
13
|
-
|
26
|
+
</script>
|
27
|
+
<% end %>
|
28
|
+
<header>
|
29
|
+
<nav>
|
30
|
+
<ol class="inline-breadcrumb-list">
|
31
|
+
<li>
|
32
|
+
<%= manual_home_link() %>
|
33
|
+
</li>
|
34
|
+
<li>
|
35
|
+
<a href="<%= library_index_url() %>"><%= _('All Libraries') %></a>
|
36
|
+
</li>
|
37
|
+
<li>
|
38
|
+
<%= friendly_library_name(@entry.name) %>
|
39
|
+
</li>
|
40
|
+
</ol>
|
41
|
+
</nav>
|
42
|
+
<% headline_init %>
|
43
|
+
<%= headline(@entry.id == '_builtin' ? _('Builtin Library') : "library #{@entry.name}", edit_url: @edit_url) %>
|
44
|
+
</header>
|
14
45
|
|
46
|
+
<main>
|
15
47
|
<%
|
16
48
|
headline_push
|
17
49
|
all_classes = @entry.all_classes
|
@@ -66,13 +98,17 @@
|
|
66
98
|
end
|
67
99
|
%>
|
68
100
|
<%
|
69
|
-
ents = @entry.methods.
|
101
|
+
ents = @entry.methods.flat_map do |m|
|
102
|
+
c, t, n, = methodid2specparts(m.id)
|
103
|
+
prefix = (t == '$' ? '' : c) + t
|
104
|
+
m.names.map { |name| [prefix + name, c + t + n] }
|
105
|
+
end.sort
|
70
106
|
unless ents.empty? %>
|
71
107
|
<%= headline(_("Added/Redefined Methods")) %>
|
72
108
|
<p><code>
|
73
|
-
<% ents.each do |
|
74
|
-
<%=
|
109
|
+
<% ents.each do |label, spec| %>
|
110
|
+
<%= method_link(spec, label) %>
|
75
111
|
<% end %>
|
76
112
|
</code></p>
|
77
113
|
<% end %>
|
78
|
-
|
114
|
+
</main>
|
@@ -2,14 +2,40 @@
|
|
2
2
|
@title = _('Library Index')
|
3
3
|
@description = _('Library Index')
|
4
4
|
%>
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
<% if @conf[:canonical_base_url] %>
|
6
|
+
<script type="application/ld+json">
|
7
|
+
<%=
|
8
|
+
breadcrumb_json_ld(
|
9
|
+
[
|
10
|
+
{
|
11
|
+
name: manual_home_name,
|
12
|
+
url: absolute_url_to(@urlmapper.document_url('index'))
|
13
|
+
},
|
14
|
+
{
|
15
|
+
name: _('All Libraries'),
|
16
|
+
url: canonical_url
|
17
|
+
}
|
18
|
+
]
|
19
|
+
)
|
11
20
|
%>
|
21
|
+
</script>
|
22
|
+
<% end %>
|
23
|
+
<header>
|
24
|
+
<nav>
|
25
|
+
<ol class="inline-breadcrumb-list">
|
26
|
+
<li>
|
27
|
+
<%= manual_home_link() %>
|
28
|
+
</li>
|
29
|
+
<li>
|
30
|
+
<%= _('All Libraries') %>
|
31
|
+
</li>
|
32
|
+
</ol>
|
33
|
+
</nav>
|
34
|
+
<% headline_init %>
|
12
35
|
<%= headline(_("Library Index")) %>
|
36
|
+
</header>
|
37
|
+
|
38
|
+
<main>
|
13
39
|
<%
|
14
40
|
headline_push
|
15
41
|
weight = {"Builtin" => "", "" => "\x7f\x7f"}
|
@@ -48,3 +74,4 @@
|
|
48
74
|
end
|
49
75
|
headline_pop
|
50
76
|
%>
|
77
|
+
</main>
|
@@ -1,19 +1,64 @@
|
|
1
1
|
<%
|
2
2
|
entry = @entries.sort.first
|
3
|
-
@title =
|
3
|
+
@title = entry.label
|
4
4
|
@description = entry.description
|
5
|
+
@edit_url = edit_url(entry.source_location) if @conf[:edit_base_url] && entry.source_location
|
5
6
|
%>
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
<% if @conf[:canonical_base_url] %>
|
8
|
+
<script type="application/ld+json">
|
9
|
+
<%=
|
10
|
+
breadcrumb_json_ld(
|
11
|
+
[
|
12
|
+
{
|
13
|
+
name: manual_home_name,
|
14
|
+
url: absolute_url_to(@urlmapper.document_url('index'))
|
15
|
+
},
|
16
|
+
{
|
17
|
+
name: _('All Libraries'),
|
18
|
+
url: absolute_url_to(library_index_url),
|
19
|
+
},
|
20
|
+
{
|
21
|
+
name: friendly_library_name(entry.library.name),
|
22
|
+
url: absolute_url_to(@urlmapper.library_url(entry.library.name))
|
23
|
+
},
|
24
|
+
{
|
25
|
+
name: _("#{entry.klass.type} %s", entry.klass.name),
|
26
|
+
url: absolute_url_to(@urlmapper.class_url(entry.klass.name))
|
27
|
+
},
|
28
|
+
{
|
29
|
+
name: %Q<#{'$' if entry.typename == :special_variable}#{entry.name}#{" (#{entry.visibility})" unless entry.really_public?}>,
|
30
|
+
url: canonical_url
|
31
|
+
}
|
32
|
+
]
|
33
|
+
)
|
34
|
+
%>
|
35
|
+
</script>
|
36
|
+
<% end %>
|
37
|
+
<header>
|
38
|
+
<nav>
|
39
|
+
<ol class="inline-breadcrumb-list">
|
40
|
+
<li>
|
41
|
+
<%= manual_home_link() %>
|
42
|
+
</li>
|
43
|
+
<li>
|
44
|
+
<a href="<%= library_index_url() %>"><%= _('All Libraries') %></a>
|
45
|
+
</li>
|
46
|
+
<li>
|
47
|
+
<%= friendly_library_link(entry.library.name) %>
|
48
|
+
</li>
|
49
|
+
<li>
|
50
|
+
<%= class_link(entry.klass.name, _(entry.klass.type.to_s + ' %s', entry.klass.name)) %>
|
51
|
+
</li>
|
52
|
+
<li>
|
53
|
+
<% if entry.typename == :special_variable %>$<% end %><%=h entry.name %> <% unless entry.really_public? %>(<%= entry.visibility %>)<% end %>
|
54
|
+
</li>
|
55
|
+
</ol>
|
56
|
+
</nav>
|
15
57
|
<% headline_init %>
|
16
58
|
<%= headline("#{entry.type_label} #{entry.label}") %>
|
59
|
+
</header>
|
60
|
+
|
61
|
+
<main>
|
17
62
|
<dl class="methodlist">
|
18
63
|
<%
|
19
64
|
headline_push
|
@@ -25,4 +70,4 @@
|
|
25
70
|
headline_pop
|
26
71
|
%>
|
27
72
|
</dl>
|
28
|
-
|
73
|
+
</main>
|
data/lib/bitclust/classentry.rb
CHANGED
@@ -39,6 +39,7 @@ module BitClust
|
|
39
39
|
attr_reader :id
|
40
40
|
|
41
41
|
def ==(other)
|
42
|
+
return false if self.class != other.class
|
42
43
|
@id == other.id
|
43
44
|
end
|
44
45
|
|
@@ -87,6 +88,7 @@ module BitClust
|
|
87
88
|
property :aliases, '[ClassEntry]'
|
88
89
|
property :aliasof, 'ClassEntry'
|
89
90
|
property :source, 'String'
|
91
|
+
property :source_location, 'Location'
|
90
92
|
}
|
91
93
|
|
92
94
|
# FIXME: do not use superclass property aliasing (#6826)
|
@@ -209,8 +211,14 @@ module BitClust
|
|
209
211
|
|
210
212
|
def ancestors
|
211
213
|
@ancestors ||=
|
214
|
+
if self.object? && superclass()
|
215
|
+
myself, *ancestors = superclass().ancestors
|
216
|
+
[ myself, included().map {|m| m.ancestors },
|
217
|
+
ancestors ].flatten
|
218
|
+
else
|
212
219
|
[ self, included().map {|m| m.ancestors },
|
213
220
|
superclass() ? superclass().ancestors : [] ].flatten
|
221
|
+
end
|
214
222
|
end
|
215
223
|
|
216
224
|
def included_modules
|
@@ -246,7 +254,7 @@ module BitClust
|
|
246
254
|
:instance_methods, :private_instance_methods,
|
247
255
|
:module_functions,
|
248
256
|
:constants, :special_variables,
|
249
|
-
:added)
|
257
|
+
:added, :undefined)
|
250
258
|
|
251
259
|
def partitioned_entries(level = 0)
|
252
260
|
s = []; spv = []
|
@@ -254,6 +262,7 @@ module BitClust
|
|
254
262
|
mf = []
|
255
263
|
c = []; v = []
|
256
264
|
added = []
|
265
|
+
undefined = []
|
257
266
|
entries(level).sort_by(&:name).each do |m|
|
258
267
|
case m.kind
|
259
268
|
when :defined, :redefined
|
@@ -273,9 +282,11 @@ module BitClust
|
|
273
282
|
end
|
274
283
|
when :added
|
275
284
|
added.push m
|
285
|
+
when :undefined
|
286
|
+
undefined.push m
|
276
287
|
end
|
277
288
|
end
|
278
|
-
Parts.new(s,spv, i,ipv, mf, c, v, added)
|
289
|
+
Parts.new(s,spv, i,ipv, mf, c, v, added, undefined)
|
279
290
|
end
|
280
291
|
|
281
292
|
def singleton_methods(level = 0)
|
data/lib/bitclust/compat.rb
CHANGED
@@ -26,6 +26,14 @@ unless String.method_defined?(:bytesize)
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
unless String.method_defined?(:match?)
|
30
|
+
class String
|
31
|
+
def match?(pattern, pos = 0)
|
32
|
+
!match(pattern, pos).nil?
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
29
37
|
def fopen(*args, &block)
|
30
38
|
option = args[1]
|
31
39
|
if option and !Object.const_defined?(:Encoding)
|
data/lib/bitclust/completion.rb
CHANGED
data/lib/bitclust/docentry.rb
CHANGED
@@ -28,6 +28,7 @@ module BitClust
|
|
28
28
|
attr_reader :id
|
29
29
|
|
30
30
|
def ==(other)
|
31
|
+
return false if self.class != other.class
|
31
32
|
@id == other.id
|
32
33
|
end
|
33
34
|
|
@@ -56,8 +57,9 @@ module BitClust
|
|
56
57
|
end
|
57
58
|
|
58
59
|
persistent_properties {
|
59
|
-
property :title,
|
60
|
-
property :source,
|
60
|
+
property :title, 'String'
|
61
|
+
property :source, 'String'
|
62
|
+
property :source_location, 'Location'
|
61
63
|
}
|
62
64
|
|
63
65
|
def inspect
|
data/lib/bitclust/entry.rb
CHANGED
@@ -98,6 +98,7 @@ module BitClust
|
|
98
98
|
when '[LibraryEntry]' then "[]"
|
99
99
|
when '[ClassEntry]' then "[]"
|
100
100
|
when '[MethodEntry]' then "[]"
|
101
|
+
when 'Location' then "nil"
|
101
102
|
else
|
102
103
|
raise "must not happen: @type=#{@type.inspect}"
|
103
104
|
end
|
@@ -115,6 +116,7 @@ module BitClust
|
|
115
116
|
when '[LibraryEntry]' then "restore_libraries(h['#{@name}'])"
|
116
117
|
when '[ClassEntry]' then "restore_classes(h['#{@name}'])"
|
117
118
|
when '[MethodEntry]' then "restore_methods(h['#{@name}'])"
|
119
|
+
when 'Location' then "h['#{@name}']&.tap { |loc| break if loc.empty?; break Location.new(*loc.split(?:)) }"
|
118
120
|
else
|
119
121
|
raise "must not happen: @type=#{@type.inspect}"
|
120
122
|
end
|
@@ -132,6 +134,7 @@ module BitClust
|
|
132
134
|
when '[LibraryEntry]' then "serialize_entries(@#{@name})"
|
133
135
|
when '[ClassEntry]' then "serialize_entries(@#{@name})"
|
134
136
|
when '[MethodEntry]' then "serialize_entries(@#{@name})"
|
137
|
+
when 'Location' then "@#@name.to_s"
|
135
138
|
else
|
136
139
|
raise "must not happen: @type=#{@type.inspect}"
|
137
140
|
end
|
@@ -37,13 +37,14 @@ module BitClust
|
|
37
37
|
end
|
38
38
|
|
39
39
|
persistent_properties {
|
40
|
-
property :filename,
|
41
|
-
property :macro,
|
42
|
-
property :private,
|
43
|
-
property :type,
|
44
|
-
property :name,
|
45
|
-
property :params,
|
46
|
-
property :source,
|
40
|
+
property :filename, 'String'
|
41
|
+
property :macro, 'bool'
|
42
|
+
property :private, 'bool'
|
43
|
+
property :type, 'String'
|
44
|
+
property :name, 'String'
|
45
|
+
property :params, 'String'
|
46
|
+
property :source, 'String'
|
47
|
+
property :source_location, 'Location'
|
47
48
|
}
|
48
49
|
|
49
50
|
attr_reader :id
|
@@ -34,6 +34,7 @@ module BitClust
|
|
34
34
|
|
35
35
|
def parse(f, filename, params = {})
|
36
36
|
@filename = filename
|
37
|
+
@path = f.path
|
37
38
|
s = Preprocessor.read(f, params)
|
38
39
|
file_entries LineInput.for_string(s)
|
39
40
|
@db.functions
|
@@ -59,6 +60,7 @@ module BitClust
|
|
59
60
|
f.name = h.name
|
60
61
|
f.params = h.params
|
61
62
|
f.source = body.join('')
|
63
|
+
f.source_location = body[0]&.location&.tap {|loc| break Location.new(@path, loc.line - 1) }
|
62
64
|
}
|
63
65
|
end
|
64
66
|
|
@@ -35,6 +35,7 @@ module BitClust
|
|
35
35
|
@link_checked = false
|
36
36
|
end
|
37
37
|
init_properties
|
38
|
+
@all_classes = nil
|
38
39
|
end
|
39
40
|
|
40
41
|
attr_reader :id, :name
|
@@ -42,6 +43,7 @@ module BitClust
|
|
42
43
|
alias label name
|
43
44
|
|
44
45
|
def ==(other)
|
46
|
+
return false if self.class != other.class
|
45
47
|
@id == other.id
|
46
48
|
end
|
47
49
|
|
@@ -71,6 +73,7 @@ module BitClust
|
|
71
73
|
property :sublibraries, '[LibraryEntry]'
|
72
74
|
property :is_sublibrary, 'bool'
|
73
75
|
property :category, 'String'
|
76
|
+
property :source_location, 'Location'
|
74
77
|
}
|
75
78
|
|
76
79
|
def inspect
|
@@ -217,5 +220,5 @@ module BitClust
|
|
217
220
|
@db.dirty_library self
|
218
221
|
end
|
219
222
|
end
|
220
|
-
|
223
|
+
end
|
221
224
|
end
|