tsumanne 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/Rakefile +22 -8
- data/exe/tsumanne +8 -0
- data/lib/tsumanne/api.rb +124 -0
- data/lib/tsumanne/cli.rb +13 -0
- data/lib/tsumanne/models/get_threads.rb +34 -0
- data/lib/tsumanne/models/register_thread.rb +18 -0
- data/lib/tsumanne/models/search_indexes.rb +18 -0
- data/lib/tsumanne/models/search_thread_from_uri.rb +11 -0
- data/lib/tsumanne/version.rb +1 -1
- data/lib/tsumanne.rb +1 -106
- data/sorbet/config +15 -0
- data/sorbet/rbi/gems/chef-utils@18.2.7.rbi +8 -0
- data/sorbet/rbi/gems/concurrent-ruby@1.2.2.rbi +8 -0
- data/sorbet/rbi/gems/kramdown-parser-gfm@1.1.0.rbi +127 -0
- data/sorbet/rbi/gems/kramdown@2.4.0.rbi +3271 -0
- data/sorbet/rbi/gems/mdl@0.12.0.rbi +401 -0
- data/sorbet/rbi/gems/mixlib-cli@2.1.8.rbi +313 -0
- data/sorbet/rbi/gems/mixlib-config@3.0.27.rbi +580 -0
- data/sorbet/rbi/gems/mixlib-shellout@3.2.7.rbi +628 -0
- data/sorbet/rbi/gems/rbi@0.0.17.rbi +2 -2
- data/sorbet/rbi/gems/spoom@1.2.3.rbi +15 -15
- data/sorbet/rbi/gems/tapioca@0.11.8.rbi +4 -4
- data/sorbet/rbi/gems/tomlrb@2.0.3.rbi +8 -0
- data/sorbet/rbi/gems/yard-sorbet@0.8.1.rbi +1 -1
- metadata +34 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 752ff6fe9658226339a08a115d6cce82cd8923b31a04908f81828a8f29b7cbd2
|
4
|
+
data.tar.gz: 2b5c2b610ff91d998c1dc21f991d8896bdf55d303c006c542a21ef5e0da3f3d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1fccf450ca71ee827218be4b2d4fd3633bd3e7183eb0847dedc015f293d303f2614a5c27bfa8351868b6105fbe381de7dc22f9bad591ad3ff23d1eaa6b89d0c7
|
7
|
+
data.tar.gz: 9a12be921f3d1d4acfe4b3253035fed4072d9c3ca9983e70e1399bb6b594dccb592590b36920a1dca900f63a7bb7031b720ec9a01d4fbf973359ad6905f9e059
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -1,25 +1,37 @@
|
|
1
|
+
# typed: ignore
|
2
|
+
|
1
3
|
# frozen_string_literal: true
|
2
4
|
|
3
5
|
require "bundler/gem_tasks"
|
4
6
|
require "rspec/core/rake_task"
|
7
|
+
require "rubocop/rake_task"
|
8
|
+
# require "sorbet-runtime"
|
5
9
|
|
6
|
-
|
10
|
+
# T.bind(self, T.all(Rake::DSL, Object))
|
7
11
|
|
8
|
-
|
12
|
+
RSpec::Core::RakeTask.new(:spec)
|
9
13
|
|
10
14
|
RuboCop::RakeTask.new do |task|
|
11
15
|
task.requires << 'rubocop-sorbet'
|
12
16
|
end
|
13
17
|
|
18
|
+
namespace :mdl do
|
19
|
+
desc 'Format markdown files with markdownlint'
|
20
|
+
task :format do
|
21
|
+
system("bundle exec mdl #{Dir.glob("**/*.md") * ?\s}")
|
22
|
+
puts "#{$?.success? ? :no : :some} errors found"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
14
26
|
namespace :sorbet do
|
15
27
|
desc 'Type-checking with sorbet'
|
16
28
|
task :check do
|
17
|
-
system("bundle exec srb tc
|
29
|
+
system("bundle exec srb tc")
|
18
30
|
end
|
19
31
|
|
20
32
|
desc 'Type-checking and auto-fix correctable errors with sorbet'
|
21
33
|
task :autocorrect do
|
22
|
-
system("bundle exec srb tc --autocorrect
|
34
|
+
system("bundle exec srb tc --autocorrect")
|
23
35
|
end
|
24
36
|
end
|
25
37
|
|
@@ -36,10 +48,12 @@ namespace :tapioca do
|
|
36
48
|
end
|
37
49
|
|
38
50
|
task :default do
|
39
|
-
%i[
|
40
|
-
puts
|
41
|
-
|
42
|
-
|
51
|
+
%i[mdl:format rubocop:autocorrect_all sorbet:autocorrect tapioca:check_shims spec].each do
|
52
|
+
puts <<~EOS
|
53
|
+
.。*゚+.*.。 #{padding = ?= * _1.size} ゚+..。*゚+
|
54
|
+
.。*゚+.*.。 #{_1} ゚+..。*゚+
|
55
|
+
.。*゚+.*.。 #{padding} ゚+..。*゚+
|
56
|
+
EOS
|
43
57
|
Rake::Task[_1].execute
|
44
58
|
end
|
45
59
|
end
|
data/exe/tsumanne
ADDED
data/lib/tsumanne/api.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require "net/http"
|
6
|
+
require "uri"
|
7
|
+
require "json"
|
8
|
+
require "zlib"
|
9
|
+
|
10
|
+
require "mhtml"
|
11
|
+
require "sorbet-runtime"
|
12
|
+
|
13
|
+
require_relative "models/get_threads"
|
14
|
+
require_relative "models/search_thread_from_uri"
|
15
|
+
require_relative "models/search_indexes"
|
16
|
+
require_relative "models/register_thread"
|
17
|
+
|
18
|
+
# API module for tsumanne.net includes knowledge as const.
|
19
|
+
module Tsumanne
|
20
|
+
class API
|
21
|
+
extend T::Sig
|
22
|
+
|
23
|
+
sig{ returns(String) }
|
24
|
+
attr_reader :board_id
|
25
|
+
|
26
|
+
sig { params(board_id: Symbol).void }
|
27
|
+
def initialize(board_id:)
|
28
|
+
@board_id = T.let(T.must(BOARD_IDS[board_id]), String)
|
29
|
+
end
|
30
|
+
|
31
|
+
sig { params(index: String, page: Integer).returns(GetThreadsResponse) }
|
32
|
+
def get_threads(index: "all", page: 1)
|
33
|
+
# https://tsumanne.net/si/all/1
|
34
|
+
# https://tsumanne.net/si/hoge/1
|
35
|
+
GetThreadsResponse.from_hash(fetch_json(paths: [index, page.to_s]))
|
36
|
+
end
|
37
|
+
|
38
|
+
sig { params(thread_id: String).returns(Mhtml::RootDocument) }
|
39
|
+
def get_thread_mht(thread_id)
|
40
|
+
# https://tsumanne.net/si/mht.php?id=129691
|
41
|
+
res = fetch_json(paths: ["mht.php"], query: { id: thread_id }, method: :get_response)
|
42
|
+
mht_gz = fetch(paths: [T.let(res["path"], String)])
|
43
|
+
# https://ksef-3go.hatenadiary.org/entry/20070924/1190563143
|
44
|
+
# https://docs.ruby-lang.org/ja/latest/method/Zlib=3a=3aInflate/s/new.html
|
45
|
+
zstream = Zlib::Inflate.new(Zlib::MAX_WBITS + 32)
|
46
|
+
buf = zstream.inflate(mht_gz)
|
47
|
+
zstream.finish
|
48
|
+
zstream.close
|
49
|
+
Mhtml::RootDocument.new(buf)
|
50
|
+
end
|
51
|
+
|
52
|
+
sig { params(thread_path: String).returns(T.nilable(Mhtml::RootDocument)) }
|
53
|
+
def get_thread_from_path(thread_path)
|
54
|
+
# https://tsumanne.net/si/data/2023/08/30/8883354/
|
55
|
+
match_data = %r{^\d{4}/\d{2}/\d{2}/(?<thread_id>\d+)$}.match(thread_path)
|
56
|
+
return if match_data.nil?
|
57
|
+
get_thread_mht(T.must(match_data[:thread_id]))
|
58
|
+
end
|
59
|
+
|
60
|
+
sig { params(uri: URI).returns(SearchThreadFromUriResponse) }
|
61
|
+
def search_thread_from_uri(uri)
|
62
|
+
# https://tsumanne.net/si/indexes.php?format=json&w=...&sbmt=URL
|
63
|
+
# https://tsumanne.net/si/indexes.php?format=json&w=https%3A%2F%2Fimg.2chan.net%2Fb%2Fres%2F86279902.htm&sbmt=URL
|
64
|
+
SearchThreadFromUriResponse.from_hash(
|
65
|
+
fetch_json(paths: ["indexes.php"], query: { w: uri, sbmt: :URL })
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
sig { params(keyword: T.nilable(String), order: Symbol, page: Integer).returns(SearchIndexesResponse) }
|
70
|
+
def search_indexes(keyword: nil, order: :newer, page: 1)
|
71
|
+
# https://tsumanne.net/si/indexes.php?format=json&w=&sbmt=%E2%86%93%E6%96%B0
|
72
|
+
SearchIndexesResponse.from_hash(
|
73
|
+
fetch_json(paths: ["indexes.php"], query: { w: keyword, sbmt: INDEXES_ORDERS[order], p: page })
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
sig { params(uri: URI, indexes: T.nilable(T::Array[String])).returns(RegisterThreadResponse) }
|
78
|
+
def register_thread(uri, indexes: nil)
|
79
|
+
# post, https://tsumanne.net/si/input.php?format=json&url=...&category=...
|
80
|
+
RegisterThreadResponse.from_hash(
|
81
|
+
fetch_json(paths: ["input.php?format=json"], query: { url: uri, category: (indexes || []).join(",") }, method: :post)
|
82
|
+
)
|
83
|
+
end
|
84
|
+
|
85
|
+
private
|
86
|
+
|
87
|
+
sig do
|
88
|
+
params(paths: T.nilable(T::Array[String]),
|
89
|
+
query: T.nilable(T::Hash[Symbol, T.any(Integer, String, Symbol)]),
|
90
|
+
method: Symbol).returns(T.nilable(String))
|
91
|
+
end
|
92
|
+
def fetch(paths: nil, query: nil, method: :get)
|
93
|
+
uri = join_paths(BASE_URL, [@board_id] + (paths || []))
|
94
|
+
query = URI.encode_www_form(query || {})
|
95
|
+
|
96
|
+
case method
|
97
|
+
when :get
|
98
|
+
uri.query = query
|
99
|
+
Net::HTTP.get(uri)
|
100
|
+
when :get_response
|
101
|
+
uri.query = query
|
102
|
+
Net::HTTP.get_response(uri).body
|
103
|
+
when :post
|
104
|
+
Net::HTTP.post(uri, query).body
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
sig do
|
109
|
+
params(paths: T.nilable(T::Array[String]),
|
110
|
+
query: T.nilable(T::Hash[Symbol, T.any(Integer, String, Symbol)]),
|
111
|
+
method: Symbol).returns(T::Hash[String, T.untyped])
|
112
|
+
end
|
113
|
+
def fetch_json(paths: nil, query: nil, method: :get)
|
114
|
+
query ||= {}
|
115
|
+
json = fetch(paths:, query: query.merge({ format: :json }), method:)
|
116
|
+
JSON.parse(T.must(json))
|
117
|
+
end
|
118
|
+
|
119
|
+
sig { params(base: String, paths: T::Array[String]).returns(URI::Generic) }
|
120
|
+
def join_paths(base, *paths)
|
121
|
+
URI.parse(T.must(([base] + paths).reduce { File.join(_1, _2) }))
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
data/lib/tsumanne/cli.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
require "sorbet-runtime"
|
4
|
+
|
5
|
+
class GetThreadsResponse < T::Struct
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
class Log < T::Struct
|
9
|
+
extend T::Sig
|
10
|
+
|
11
|
+
const :id, Integer
|
12
|
+
const :url, String # URI
|
13
|
+
const :date, String # Time
|
14
|
+
const :close, T::Boolean
|
15
|
+
const :res, Integer
|
16
|
+
const :files, Integer
|
17
|
+
const :access, Integer
|
18
|
+
const :public, T::Boolean
|
19
|
+
const :text, String
|
20
|
+
const :thumb, String
|
21
|
+
const :del, Integer
|
22
|
+
const :atid, T::Boolean
|
23
|
+
const :last, String # Time
|
24
|
+
const :path, String
|
25
|
+
const :category, T::Array[String]
|
26
|
+
end
|
27
|
+
|
28
|
+
const :success, T::Boolean
|
29
|
+
const :messages, T::Array[String]
|
30
|
+
const :lastpage, Integer
|
31
|
+
const :count, Integer
|
32
|
+
const :cid, Integer
|
33
|
+
const :logs, T::Array[Log]
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
require "sorbet-runtime"
|
4
|
+
|
5
|
+
class RegisterThreadResponse < T::Struct
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
class Tags < T::Struct
|
9
|
+
extend T::Sig
|
10
|
+
|
11
|
+
const :success, T::Boolean
|
12
|
+
const :messages, T::Array[String]
|
13
|
+
end
|
14
|
+
|
15
|
+
const :success, T::Boolean
|
16
|
+
const :messages, T::Array[String]
|
17
|
+
const :tags, Tags
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# typed: strict
|
2
|
+
|
3
|
+
require "sorbet-runtime"
|
4
|
+
|
5
|
+
class SearchIndexesResponse < T::Struct
|
6
|
+
extend T::Sig
|
7
|
+
|
8
|
+
class Tag < T::Struct
|
9
|
+
extend T::Sig
|
10
|
+
|
11
|
+
const :tag, String
|
12
|
+
end
|
13
|
+
|
14
|
+
const :success, T::Boolean
|
15
|
+
const :messages, T::Array[String]
|
16
|
+
const :count, Integer
|
17
|
+
const :tags, T::Array[Tag]
|
18
|
+
end
|
data/lib/tsumanne/version.rb
CHANGED
data/lib/tsumanne.rb
CHANGED
@@ -2,14 +2,9 @@
|
|
2
2
|
|
3
3
|
# frozen_string_literal: true
|
4
4
|
|
5
|
-
require "net/http"
|
6
|
-
require "uri"
|
7
|
-
require "json"
|
8
|
-
require "zlib"
|
9
|
-
|
10
|
-
require "mhtml"
|
11
5
|
require "sorbet-runtime"
|
12
6
|
|
7
|
+
require_relative "tsumanne/api"
|
13
8
|
require_relative "tsumanne/version"
|
14
9
|
|
15
10
|
# API module for tsumanne.net includes knowledge as const.
|
@@ -25,104 +20,4 @@ module Tsumanne
|
|
25
20
|
INDEXES_ORDERS = T.let({ hira: "↓あ", newer: "↓新" }.freeze, T::Hash[Symbol, String])
|
26
21
|
|
27
22
|
class Error < StandardError; end
|
28
|
-
|
29
|
-
# API to get information fron tsumanne.net
|
30
|
-
class API
|
31
|
-
extend T::Sig
|
32
|
-
|
33
|
-
sig{ returns(String) }
|
34
|
-
attr_reader :board_id
|
35
|
-
|
36
|
-
sig { params(board_id: Symbol).void }
|
37
|
-
def initialize(board_id:)
|
38
|
-
@board_id = T.let(T.must(BOARD_IDS[board_id]), String)
|
39
|
-
end
|
40
|
-
|
41
|
-
sig { params(index: String, page: Integer).returns(T::Hash[String, T.untyped]) }
|
42
|
-
def get_threads(index: "all", page: 1)
|
43
|
-
# https://tsumanne.net/si/all/1
|
44
|
-
# https://tsumanne.net/si/hoge/1
|
45
|
-
fetch_json(paths: [index, page.to_s])
|
46
|
-
end
|
47
|
-
|
48
|
-
sig { params(thread_id: String).returns(Mhtml::RootDocument) }
|
49
|
-
def get_thread_mht(thread_id)
|
50
|
-
# https://tsumanne.net/si/mht.php?id=129691
|
51
|
-
res = fetch_json(paths: ["mht.php"], query: { id: thread_id }, method: :get_response)
|
52
|
-
mht_gz = fetch(paths: [T.let(res["path"], String)])
|
53
|
-
# https://ksef-3go.hatenadiary.org/entry/20070924/1190563143
|
54
|
-
# https://docs.ruby-lang.org/ja/latest/method/Zlib=3a=3aInflate/s/new.html
|
55
|
-
zstream = Zlib::Inflate.new(Zlib::MAX_WBITS + 32)
|
56
|
-
buf = zstream.inflate(mht_gz)
|
57
|
-
zstream.finish
|
58
|
-
zstream.close
|
59
|
-
Mhtml::RootDocument.new(buf)
|
60
|
-
end
|
61
|
-
|
62
|
-
sig { params(thread_path: String).returns(T.nilable(Mhtml::RootDocument)) }
|
63
|
-
def get_thread_from_path(thread_path)
|
64
|
-
# https://tsumanne.net/si/data/2023/08/30/8883354/
|
65
|
-
match_data = %r{^\d{4}/\d{2}/\d{2}/(?<thread_id>\d+)$}.match(thread_path)
|
66
|
-
return if match_data.nil?
|
67
|
-
get_thread_mht(T.must(match_data[:thread_id]))
|
68
|
-
end
|
69
|
-
|
70
|
-
sig { params(uri: URI).returns(T::Hash[String, T.untyped]) }
|
71
|
-
def search_thread_from_uri(uri)
|
72
|
-
# https://tsumanne.net/si/indexes.php?format=json&w=&sbmt=URL
|
73
|
-
fetch_json(paths: ["indexes.php"], query: { w: uri, sbmt: :URL })
|
74
|
-
end
|
75
|
-
|
76
|
-
sig { params(keyword: T.nilable(String), order: Symbol, page: Integer).returns(T::Hash[String, T.untyped]) }
|
77
|
-
def search_indexes(keyword: nil, order: :newer, page: 1)
|
78
|
-
# https://tsumanne.net/si/indexes.php?format=json&w=&sbmt=URL
|
79
|
-
# https://tsumanne.net/si/indexes.php?format=json&w=&sbmt=%E2%86%93%E6%96%B0
|
80
|
-
fetch_json(paths: ["indexes.php"], query: { w: keyword, sbmt: INDEXES_ORDERS[order], p: page })
|
81
|
-
end
|
82
|
-
|
83
|
-
sig { params(uri: URI, indexes: T.nilable(T::Array[String])).returns(T::Hash[String, T.untyped]) }
|
84
|
-
def register_thread(uri, indexes: nil)
|
85
|
-
# post, https://tsumanne.net/si/input.php?format=json&url=...&category=...
|
86
|
-
fetch_json(paths: ["input.php?format=json"], query: { url: uri, category: (indexes || []).join(",") }, method: :post)
|
87
|
-
end
|
88
|
-
|
89
|
-
private
|
90
|
-
|
91
|
-
sig do
|
92
|
-
params(paths: T.nilable(T::Array[String]),
|
93
|
-
query: T.nilable(T::Hash[Symbol, T.any(Integer, String, Symbol)]),
|
94
|
-
method: Symbol).returns(T.nilable(String))
|
95
|
-
end
|
96
|
-
def fetch(paths: nil, query: nil, method: :get)
|
97
|
-
uri = join_paths(BASE_URL, [@board_id] + (paths || []))
|
98
|
-
query = URI.encode_www_form(query || {})
|
99
|
-
|
100
|
-
case method
|
101
|
-
when :get
|
102
|
-
uri.query = query
|
103
|
-
Net::HTTP.get(uri)
|
104
|
-
when :get_response
|
105
|
-
uri.query = query
|
106
|
-
Net::HTTP.get_response(uri).body
|
107
|
-
when :post
|
108
|
-
Net::HTTP.post(uri, query).body
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
sig do
|
113
|
-
params(paths: T.nilable(T::Array[String]),
|
114
|
-
query: T.nilable(T::Hash[Symbol, T.any(Integer, String, Symbol)]),
|
115
|
-
method: Symbol).returns(T::Hash[String, T.untyped])
|
116
|
-
end
|
117
|
-
def fetch_json(paths: nil, query: nil, method: :get)
|
118
|
-
query ||= {}
|
119
|
-
json = fetch(paths:, query: query.merge({ format: :json }), method:)
|
120
|
-
JSON.parse(T.must(json))
|
121
|
-
end
|
122
|
-
|
123
|
-
sig { params(base: String, paths: T::Array[String]).returns(URI::Generic) }
|
124
|
-
def join_paths(base, *paths)
|
125
|
-
URI.parse(T.must(([base] + paths).reduce { File.join(_1, _2) }))
|
126
|
-
end
|
127
|
-
end
|
128
23
|
end
|
data/sorbet/config
CHANGED
@@ -1,4 +1,19 @@
|
|
1
1
|
--dir
|
2
2
|
.
|
3
|
+
|
4
|
+
bin/console
|
5
|
+
bin/tapioca
|
6
|
+
exe/tsumanne
|
7
|
+
|
8
|
+
Gemfile
|
9
|
+
Rakefile
|
10
|
+
|
3
11
|
--ignore=tmp/
|
4
12
|
--ignore=vendor/
|
13
|
+
|
14
|
+
--allowed-extension=.rb
|
15
|
+
--allowed-extension=.rbi
|
16
|
+
--allowed-extension=.gemspec
|
17
|
+
--allowed-extension=.rake
|
18
|
+
|
19
|
+
--enable-experimental-requires-ancestor
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# typed: true
|
2
|
+
|
3
|
+
# DO NOT EDIT MANUALLY
|
4
|
+
# This is an autogenerated file for types exported from the `chef-utils` gem.
|
5
|
+
# Please instead update this file by running `bin/tapioca gem chef-utils`.
|
6
|
+
|
7
|
+
# THIS IS AN EMPTY RBI FILE.
|
8
|
+
# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# typed: true
|
2
|
+
|
3
|
+
# DO NOT EDIT MANUALLY
|
4
|
+
# This is an autogenerated file for types exported from the `concurrent-ruby` gem.
|
5
|
+
# Please instead update this file by running `bin/tapioca gem concurrent-ruby`.
|
6
|
+
|
7
|
+
# THIS IS AN EMPTY RBI FILE.
|
8
|
+
# see https://github.com/Shopify/tapioca#manually-requiring-parts-of-a-gem
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# typed: true
|
2
|
+
|
3
|
+
# DO NOT EDIT MANUALLY
|
4
|
+
# This is an autogenerated file for types exported from the `kramdown-parser-gfm` gem.
|
5
|
+
# Please instead update this file by running `bin/tapioca gem kramdown-parser-gfm`.
|
6
|
+
|
7
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm/options.rb#10
|
8
|
+
module Kramdown
|
9
|
+
class << self
|
10
|
+
# source://kramdown/2.4.0/lib/kramdown/document.rb#49
|
11
|
+
def data_dir; end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm/options.rb#11
|
16
|
+
module Kramdown::Options
|
17
|
+
class << self
|
18
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#72
|
19
|
+
def defaults; end
|
20
|
+
|
21
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#51
|
22
|
+
def define(name, type, default, desc, &block); end
|
23
|
+
|
24
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#67
|
25
|
+
def defined?(name); end
|
26
|
+
|
27
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#62
|
28
|
+
def definitions; end
|
29
|
+
|
30
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#82
|
31
|
+
def merge(hash); end
|
32
|
+
|
33
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#96
|
34
|
+
def parse(name, data); end
|
35
|
+
|
36
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#141
|
37
|
+
def simple_array_validator(val, name, size = T.unsafe(nil)); end
|
38
|
+
|
39
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#158
|
40
|
+
def simple_hash_validator(val, name); end
|
41
|
+
|
42
|
+
# source://kramdown/2.4.0/lib/kramdown/options.rb#122
|
43
|
+
def str_to_sym(data); end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#16
|
48
|
+
module Kramdown::Parser; end
|
49
|
+
|
50
|
+
# This class provides a parser implementation for the GFM dialect of Markdown.
|
51
|
+
#
|
52
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#19
|
53
|
+
class Kramdown::Parser::GFM < ::Kramdown::Parser::Kramdown
|
54
|
+
# @return [GFM] a new instance of GFM
|
55
|
+
#
|
56
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#25
|
57
|
+
def initialize(source, options); end
|
58
|
+
|
59
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#108
|
60
|
+
def generate_gfm_header_id(text); end
|
61
|
+
|
62
|
+
# Returns the value of attribute paragraph_end.
|
63
|
+
#
|
64
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#23
|
65
|
+
def paragraph_end; end
|
66
|
+
|
67
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#55
|
68
|
+
def parse; end
|
69
|
+
|
70
|
+
# Copied from kramdown/parser/kramdown/header.rb, removed the first line
|
71
|
+
#
|
72
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#125
|
73
|
+
def parse_atx_header_gfm_quirk; end
|
74
|
+
|
75
|
+
# To handle task-lists we override the parse method for lists, converting matching text into
|
76
|
+
# checkbox input elements where necessary (as well as applying classes to the ul/ol and li
|
77
|
+
# elements).
|
78
|
+
#
|
79
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#163
|
80
|
+
def parse_list; end
|
81
|
+
|
82
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#142
|
83
|
+
def parse_strikethrough_gfm; end
|
84
|
+
|
85
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#60
|
86
|
+
def update_elements(element); end
|
87
|
+
|
88
|
+
# Update the raw text for automatic ID generation.
|
89
|
+
#
|
90
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#77
|
91
|
+
def update_raw_text(item); end
|
92
|
+
|
93
|
+
private
|
94
|
+
|
95
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#200
|
96
|
+
def update_text_type(element, child); end
|
97
|
+
end
|
98
|
+
|
99
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#120
|
100
|
+
Kramdown::Parser::GFM::ATX_HEADER_START = T.let(T.unsafe(nil), Regexp)
|
101
|
+
|
102
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#190
|
103
|
+
Kramdown::Parser::GFM::ESCAPED_CHARS_GFM = T.let(T.unsafe(nil), Regexp)
|
104
|
+
|
105
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#135
|
106
|
+
Kramdown::Parser::GFM::FENCED_CODEBLOCK_MATCH = T.let(T.unsafe(nil), Regexp)
|
107
|
+
|
108
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#134
|
109
|
+
Kramdown::Parser::GFM::FENCED_CODEBLOCK_START = T.let(T.unsafe(nil), Regexp)
|
110
|
+
|
111
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#158
|
112
|
+
Kramdown::Parser::GFM::LIST_TYPES = T.let(T.unsafe(nil), Array)
|
113
|
+
|
114
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#106
|
115
|
+
Kramdown::Parser::GFM::NON_WORD_RE = T.let(T.unsafe(nil), Regexp)
|
116
|
+
|
117
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#193
|
118
|
+
Kramdown::Parser::GFM::PARAGRAPH_END_GFM = T.let(T.unsafe(nil), Regexp)
|
119
|
+
|
120
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#138
|
121
|
+
Kramdown::Parser::GFM::STRIKETHROUGH_DELIM = T.let(T.unsafe(nil), Regexp)
|
122
|
+
|
123
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#139
|
124
|
+
Kramdown::Parser::GFM::STRIKETHROUGH_MATCH = T.let(T.unsafe(nil), Regexp)
|
125
|
+
|
126
|
+
# source://kramdown-parser-gfm//lib/kramdown/parser/gfm.rb#21
|
127
|
+
Kramdown::Parser::GFM::VERSION = T.let(T.unsafe(nil), String)
|