tsumanne 0.0.1 → 0.0.3
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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- 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 +39 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 354ad61001070464826ad804ca96878fe654058272d07b4b267fc71a6edbb952
|
4
|
+
data.tar.gz: 9ad780cbc6869459adc4533709237166d1e6c5e750631e0d0f7209810d96cdd6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 372c56ad00aace2a151d3853eb9554810bd5cab30a1c0b3b7efc2b1f931f31649c8faee9cddabd8f2659bcabceffe1a770de80f096798e559125129d4049a31b
|
7
|
+
data.tar.gz: 74cd78607206bb737c79527537d135712dcca8f5126297b566a92d6a341e8ad951aeda1a66bc96662670927615f9c1923feccdb8282dbaed91b2466599742a32
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.3.1
|
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)
|