kramdown-syntax_tree_sitter 0.2.0 → 0.3.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.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09858b648cc381cb603b21a3ed091b1d96a25b55264f4dd2c4e8fe7436d68288'
|
4
|
+
data.tar.gz: 9ceeb8b78ac8cea098cbb329abbdc9e650202e676b042b647b3f0ca55665c3ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a3a7cf735cab71d863433b3be34e8b1dd537cca412bfddb611b56d4ff8292b74f0f45283da701510d928d432ad4aa39224316a012eb07cbd524cc1977bfb3a2e
|
7
|
+
data.tar.gz: 23197c154c12ca2e97534829179dd2785c9907760f89205a7a7be3e80f3cca7f8f6dd2c6314897a887e1c45b55eaddbd05a2937321017378caa0d03e33e450a5
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Kramdown Tree-sitter Highlighter
|
2
2
|
|
3
|
-
[](https://github.com/andrewtbiehl/kramdown-syntax_tree_sitter/actions/workflows/quality-control.yml)
|
4
4
|
[](https://rubygems.org/gems/kramdown-syntax_tree_sitter)
|
5
5
|
|
6
6
|
***Syntax highlight code with [Tree-sitter](https://tree-sitter.github.io/tree-sitter)
|
@@ -22,8 +22,8 @@ essentially an adapter for the
|
|
22
22
|
hence also requires a compatible [Rust](https://www.rust-lang.org) installation to
|
23
23
|
function. It is officially compatible with the following environments:
|
24
24
|
|
25
|
-
- **Ruby**: 2.7, 3.0, 3.1
|
26
|
-
- **Rust**: 1.
|
25
|
+
- **Ruby**: 2.7, 3.0, 3.1, 3.2
|
26
|
+
- **Rust**: 1.62, 1.63, 1.64, 1.65, 1.66
|
27
27
|
- **Platforms**: MacOS, Linux
|
28
28
|
|
29
29
|
### Installation
|
@@ -56,7 +56,7 @@ require 'kramdown'
|
|
56
56
|
require 'kramdown/syntax_tree_sitter'
|
57
57
|
|
58
58
|
text = <<~MARKDOWN
|
59
|
-
~~~
|
59
|
+
~~~python
|
60
60
|
print('Hello, World!')
|
61
61
|
~~~
|
62
62
|
MARKDOWN
|
@@ -64,6 +64,13 @@ MARKDOWN
|
|
64
64
|
Kramdown::Document.new(text, syntax_highlighter: :'tree-sitter').to_html
|
65
65
|
```
|
66
66
|
|
67
|
+
### General usage
|
68
|
+
|
69
|
+
To successfully highlight input text via Kramdown with this plugin enabled, make sure
|
70
|
+
that every language referenced has a corresponding Tree-sitter parser library installed.
|
71
|
+
See the subsequent ['Language identifiers'](#language-identifiers) and
|
72
|
+
['Tree-sitter parsers'](#tree-sitter-parsers) sections for more information.
|
73
|
+
|
67
74
|
### Usage with Jekyll
|
68
75
|
|
69
76
|
This plugin can be used with the popular static site generator
|
@@ -82,11 +89,9 @@ kramdown:
|
|
82
89
|
# Other Kramdown options...
|
83
90
|
```
|
84
91
|
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
subsequent ['Language identifiers'](#language-identifiers) and
|
89
|
-
['Tree-sitter parsers'](#tree-sitter-parsers) sections for more information.
|
92
|
+
Note that this plugin's general usage prerequisites (described in the previous
|
93
|
+
['General usage'](#general-usage) section) still apply when using this plugin with
|
94
|
+
Jekyll.
|
90
95
|
|
91
96
|
Also, there are multiple ways to render highlighted code blocks with Jekyll, as
|
92
97
|
illustrated in the following table:
|
@@ -103,13 +108,13 @@ illustrated in the following table:
|
|
103
108
|
|
104
109
|
---
|
105
110
|
````
|
106
|
-
```
|
111
|
+
```python
|
107
112
|
print('Hello, World!')
|
108
113
|
```
|
109
114
|
|
110
115
|
or
|
111
116
|
|
112
|
-
~~~
|
117
|
+
~~~python
|
113
118
|
print('Hello, World!')
|
114
119
|
~~~
|
115
120
|
````
|
@@ -125,7 +130,7 @@ print('Hello, World!')
|
|
125
130
|
---
|
126
131
|
```
|
127
132
|
print('Hello, World!')
|
128
|
-
{: class="language-
|
133
|
+
{: class="language-python" }
|
129
134
|
```
|
130
135
|
---
|
131
136
|
|
@@ -138,7 +143,7 @@ print('Hello, World!')
|
|
138
143
|
|
139
144
|
---
|
140
145
|
```
|
141
|
-
{% highlight
|
146
|
+
{% highlight python %}
|
142
147
|
print('Hello, World!')
|
143
148
|
{% endhighlight %}
|
144
149
|
```
|
@@ -171,12 +176,18 @@ can be found on
|
|
171
176
|
|
172
177
|
### Language identifiers
|
173
178
|
|
174
|
-
|
175
|
-
|
176
|
-
'
|
177
|
-
|
178
|
-
|
179
|
-
|
179
|
+
For most popular languages, this plugin recognizes the same language identifiers as used
|
180
|
+
by the popular highlighter [Rouge](https://github.com/rouge-ruby/rouge). For example,
|
181
|
+
both 'python' and 'py' may be used to identify a code block written in Python. For the
|
182
|
+
complete list of Rouge language identifiers recognized by this plugin, see
|
183
|
+
[`lib/kramdown/syntax_tree_sitter/languages.rb`](https://github.com/andrewtbiehl/kramdown-syntax_tree_sitter/blob/main/lib/kramdown/syntax_tree_sitter/languages.rb).
|
184
|
+
|
185
|
+
This plugin also automatically supports the language identifier format used by
|
186
|
+
Tree-sitter, known as as the 'scope' name. For example, the scope name for Python is
|
187
|
+
'source.python', whereas for HTML it is 'text.html.basic'.
|
188
|
+
|
189
|
+
For any identifiers currently supported by Rouge but not by this plugin, feel free to
|
190
|
+
open an issue or pull request on GitHub to have them included.
|
180
191
|
|
181
192
|
### CSS styling
|
182
193
|
|
@@ -31,9 +31,9 @@ dependencies = [
|
|
31
31
|
|
32
32
|
[[package]]
|
33
33
|
name = "anyhow"
|
34
|
-
version = "1.0.
|
34
|
+
version = "1.0.68"
|
35
35
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
36
|
-
checksum = "
|
36
|
+
checksum = "2cb2f989d18dd141ab8ae82f64d1a8cdd37e0840f73a406896cf5e99502fab61"
|
37
37
|
|
38
38
|
[[package]]
|
39
39
|
name = "ascii"
|
@@ -3,6 +3,8 @@
|
|
3
3
|
require 'kramdown'
|
4
4
|
require 'tree_sitter_adapter'
|
5
5
|
|
6
|
+
require_relative '../../syntax_tree_sitter/languages'
|
7
|
+
|
6
8
|
module Kramdown
|
7
9
|
module Converter # rubocop:disable Style/Documentation
|
8
10
|
module SyntaxHighlighter
|
@@ -13,13 +15,14 @@ module Kramdown
|
|
13
15
|
module TreeSitter
|
14
16
|
DEFAULT_PARSERS_DIR = '~/tree_sitter_parsers'
|
15
17
|
|
16
|
-
def self.call(converter, raw_text,
|
17
|
-
return nil unless
|
18
|
+
def self.call(converter, raw_text, language_alias, type, _)
|
19
|
+
return nil unless language_alias
|
18
20
|
|
21
|
+
language_scope = LANGUAGE_SCOPES.fetch(language_alias, language_alias)
|
19
22
|
rendered_text = TreeSitterAdapter.highlight(
|
20
23
|
raw_text,
|
21
24
|
get_parsers_dir(converter),
|
22
|
-
|
25
|
+
language_scope,
|
23
26
|
get_use_css_classes(converter)
|
24
27
|
)
|
25
28
|
# Code blocks are additionally wrapped in HTML code tags
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kramdown
|
4
|
+
module Converter
|
5
|
+
module SyntaxHighlighter
|
6
|
+
module TreeSitter
|
7
|
+
# Maps each recognized language alias to its corresponding Tree-sitter scope
|
8
|
+
LANGUAGE_SCOPES =
|
9
|
+
{
|
10
|
+
'source.R' => %w[R S r s],
|
11
|
+
'source.bash' => %w[bash ksh sh shell zsh],
|
12
|
+
'source.c' => %w[c],
|
13
|
+
'source.cpp' => %w[c++ cpp],
|
14
|
+
'source.cs' => %w[c# cs csharp],
|
15
|
+
'source.css' => %w[css],
|
16
|
+
'source.d' => %w[d dlang],
|
17
|
+
'source.dot' => %w[dot],
|
18
|
+
'source.elixir' => %w[elixir exs],
|
19
|
+
'source.elm' => %w[elm],
|
20
|
+
'source.emacs.lisp' => %w[elisp emacs-lisp],
|
21
|
+
'source.go' => %w[go golang],
|
22
|
+
'source.hack' => %w[hack hh],
|
23
|
+
'source.haskell' => %w[haskell hs],
|
24
|
+
'source.hcl' => %w[hcl],
|
25
|
+
'source.java' => %w[java],
|
26
|
+
'source.js' => %w[javascript js],
|
27
|
+
'source.json' => %w[json],
|
28
|
+
'source.julia' => %w[jl julia],
|
29
|
+
'source.lua' => %w[lua],
|
30
|
+
'source.mk' => %w[bsdmake gnumake make makefile mf],
|
31
|
+
'source.nix' => %w[nix nixos],
|
32
|
+
'source.objc' => %w[obj-c obj_c objc objective_c objectivec],
|
33
|
+
'source.ocaml' => %w[ocaml],
|
34
|
+
'source.perl' => %w[perl pl],
|
35
|
+
'source.php' => %w[php php3 php4 php5],
|
36
|
+
'source.proto' => %w[proto protobuf],
|
37
|
+
'source.python' => %w[py python],
|
38
|
+
'source.racket' => %w[racket],
|
39
|
+
'source.ruby' => %w[rb ruby],
|
40
|
+
'source.rust' => %w[rs rust],
|
41
|
+
'source.scala' => %w[scala],
|
42
|
+
'source.sparql' => %w[sparql],
|
43
|
+
'source.sql' => %w[sql],
|
44
|
+
'source.swift' => %w[swift],
|
45
|
+
'source.toml' => %w[toml],
|
46
|
+
'source.ts' => %w[ts typescript],
|
47
|
+
'source.vhd' => %w[vhdl],
|
48
|
+
'text.html.basic' => %w[html],
|
49
|
+
'text.html.erb' => %w[erb eruby rhtml]
|
50
|
+
}
|
51
|
+
.map { |scope, aliases| aliases.map { |alias_| [alias_, scope] } }
|
52
|
+
.flatten(1)
|
53
|
+
.to_h
|
54
|
+
.freeze
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kramdown-syntax_tree_sitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew T. Biehl
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: kramdown
|
@@ -139,6 +139,7 @@ files:
|
|
139
139
|
- ext/tree_sitter_adapter/src/tree_sitter_adapter.rs
|
140
140
|
- lib/kramdown/converter/syntax_highlighter/tree_sitter.rb
|
141
141
|
- lib/kramdown/syntax_tree_sitter.rb
|
142
|
+
- lib/kramdown/syntax_tree_sitter/languages.rb
|
142
143
|
- lib/kramdown/syntax_tree_sitter/version.rb
|
143
144
|
- lib/tree_sitter_adapter.rb
|
144
145
|
homepage: https://github.com/andrewtbiehl/kramdown-syntax_tree_sitter
|
@@ -161,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
161
162
|
- !ruby/object:Gem::Version
|
162
163
|
version: '0'
|
163
164
|
requirements: []
|
164
|
-
rubygems_version: 3.
|
165
|
+
rubygems_version: 3.4.1
|
165
166
|
signing_key:
|
166
167
|
specification_version: 4
|
167
168
|
summary: Syntax highlight code with Tree-sitter via Kramdown.
|