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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b3ec2f67bcca13eef0f537d478b1de348239a03c4eed0ed8930d73fc5fd36e4d
4
- data.tar.gz: c6c36d16ccfa21b674a45b1adc54e1695c92e84d75d3aa83fd18a135abac34ca
3
+ metadata.gz: 354ad61001070464826ad804ca96878fe654058272d07b4b267fc71a6edbb952
4
+ data.tar.gz: 9ad780cbc6869459adc4533709237166d1e6c5e750631e0d0f7209810d96cdd6
5
5
  SHA512:
6
- metadata.gz: 0d3ed230fd0780af979f99051f502a52d130a332ffaba1134e31b15e0d651e6138eea307da0914a811245149f70d59c2e804f7ff8f5807e89016954e3c6b3acf
7
- data.tar.gz: ff61b45deae3e5957477006042f464d64f81a9cde059f835f8de78ee2b00b33b5fb4b411f208dab4442a67bde6e573f06dbeef509fc941a16286945f284741e8
6
+ metadata.gz: 372c56ad00aace2a151d3853eb9554810bd5cab30a1c0b3b7efc2b1f931f31649c8faee9cddabd8f2659bcabceffe1a770de80f096798e559125129d4049a31b
7
+ data.tar.gz: 74cd78607206bb737c79527537d135712dcca8f5126297b566a92d6a341e8ad951aeda1a66bc96662670927615f9c1923feccdb8282dbaed91b2466599742a32
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.2.2
1
+ 3.3.1
data/README.md CHANGED
@@ -36,7 +36,7 @@ rake
36
36
 
37
37
  ## Contributing
38
38
 
39
- Bug reports and pull requests are welcome on GitHub at https://github.com/eggplants/tsumanne.
39
+ Bug reports and pull requests are welcome on GitHub at <https://github.com/eggplants/tsumanne>.
40
40
 
41
41
  ## License
42
42
 
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
- RSpec::Core::RakeTask.new(:spec)
10
+ # T.bind(self, T.all(Rake::DSL, Object))
7
11
 
8
- require "rubocop/rake_task"
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 -v")
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 -v")
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[spec rubocop:autocorrect_all sorbet:autocorrect tapioca:check_shims].each do
40
- puts ".。*゚+.*.。  #{?\s * _1.size}  ゚+..。*゚+"
41
- puts ".。*゚+.*.。  #{_1}  ゚+..。*゚+"
42
- puts ".。*゚+.*.。  #{?\s * _1.size}  ゚+..。*゚+"
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
@@ -0,0 +1,8 @@
1
+ #! /usr/bin/env ruby
2
+ # typed: strict
3
+
4
+ require "sorbet-runtime"
5
+
6
+ require_relative "../lib/tsumanne/cli"
7
+
8
+ Tsumanne::CLI.start(ARGV)
@@ -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
@@ -0,0 +1,13 @@
1
+ # typed: strict
2
+
3
+ # frozen_string_literal: true
4
+
5
+ module Tsumanne
6
+ class CLI
7
+ extend T::Sig
8
+ sig { params(args: BasicObject).returns(NilClass) }
9
+ def self.start(args)
10
+ p args
11
+ end
12
+ end
13
+ end
@@ -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
@@ -0,0 +1,11 @@
1
+ # typed: strict
2
+
3
+ require "sorbet-runtime"
4
+
5
+ class SearchThreadFromUriResponse < T::Struct
6
+ extend T::Sig
7
+
8
+ const :success, T::Boolean
9
+ const :messages, T::Array[String]
10
+ const :path, String
11
+ end
@@ -3,5 +3,5 @@
3
3
  # frozen_string_literal: true
4
4
 
5
5
  module Tsumanne
6
- VERSION = "0.0.1"
6
+ VERSION = "0.0.3"
7
7
  end
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)