gmi2latex 0.1.1 → 0.1.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/.envrc +1 -0
- data/.rubocop.yml +4 -3
- data/CHANGELOG.md +15 -0
- data/Rakefile +13 -6
- data/exe/gmi2latex +3 -1
- data/lib/gmi2latex/command.rb +9 -7
- data/lib/gmi2latex/renderer.rb +74 -33
- data/lib/gmi2latex/version.rb +1 -1
- data/lib/gmi2latex.rb +2 -1
- data/sig/gmi2latex.gen.rbs +7 -0
- data/sig/gmi2latex.rbs +60 -2
- metadata +10 -12
- data/lib/gmi2latex/gemtext_refinements.rb +0 -17
- data/manifest.scm +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: adcbc0a32303d293d5d1f0c06ddbf8d11979c0e3ca8eae5cfe2d4b6b46748179
|
|
4
|
+
data.tar.gz: ce5c2f24a782c2ad1905af6182d0f7f20642e27fa658ff27317580eb3836e36e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 05705ef468ea5d7aac3e54b0610b83be1dbae6a0a0f66efc6240b63f99cd3d65d4742edd608c5528cdf314f3f49e38fa61b10ff8cc1b1ce4b7e6eb02936a8303
|
|
7
|
+
data.tar.gz: a14e3fc7388f4c749133688d59d50754221558bcc6d57a7a249bd876e5fd1169803a5de42b1af9d5ae6825713d59a09e898adf3e5ddcda5eda1e87f9d418ed00
|
data/.envrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
use guix ruby ruby-gemtext ruby-rubocop
|
data/.rubocop.yml
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
AllCops:
|
|
2
|
-
TargetRubyVersion:
|
|
2
|
+
TargetRubyVersion: 3.1
|
|
3
|
+
NewCops: enable
|
|
3
4
|
|
|
4
5
|
Style/StringLiterals:
|
|
5
6
|
Enabled: true
|
|
6
|
-
EnforcedStyle:
|
|
7
|
+
EnforcedStyle: single_quotes
|
|
7
8
|
|
|
8
9
|
Style/StringLiteralsInInterpolation:
|
|
9
10
|
Enabled: true
|
|
10
|
-
EnforcedStyle:
|
|
11
|
+
EnforcedStyle: single_quotes
|
|
11
12
|
|
|
12
13
|
Layout/LineLength:
|
|
13
14
|
Max: 120
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
## 0.1.3 - 2026-06-08
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Added link render method
|
|
8
|
+
- Ruby signature file
|
|
9
|
+
|
|
10
|
+
## [0.1.2] - 2024-08-17
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Escape hash (#), percent, angle brackets, and backquotes character.
|
|
15
|
+
- Add linebreaks for consecutive text lines.
|
|
16
|
+
- Load renderer class with `require "gmi2latex"`.
|
|
17
|
+
|
|
3
18
|
## [0.1.1] - 2024-06-17
|
|
4
19
|
|
|
5
20
|
### Changed
|
data/Rakefile
CHANGED
|
@@ -1,16 +1,23 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
4
|
+
require 'rake/testtask'
|
|
5
5
|
|
|
6
6
|
Rake::TestTask.new(:test) do |t|
|
|
7
|
-
t.libs <<
|
|
8
|
-
t.libs <<
|
|
9
|
-
t.test_files = FileList[
|
|
7
|
+
t.libs << 'test'
|
|
8
|
+
t.libs << 'lib'
|
|
9
|
+
t.test_files = FileList['test/**/*_test.rb']
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
require
|
|
12
|
+
require 'rubocop/rake_task'
|
|
13
13
|
|
|
14
14
|
RuboCop::RakeTask.new
|
|
15
15
|
|
|
16
16
|
task default: %i[test rubocop]
|
|
17
|
+
|
|
18
|
+
hand_written_signatures = Dir['sig/**/*.rbs'] - Dir['sig/**/*.gen.rbs']
|
|
19
|
+
|
|
20
|
+
desc 'generate signatures'
|
|
21
|
+
task :sig do
|
|
22
|
+
sh 'typeprof', '-o', 'sig/gmi2latex.gen.rbs', '-r', 'gemtext', *Dir['lib/**/*.rb'], *hand_written_signatures
|
|
23
|
+
end
|
data/exe/gmi2latex
CHANGED
data/lib/gmi2latex/command.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'gemtext'
|
|
4
|
+
require 'optparse'
|
|
5
|
+
require_relative 'renderer'
|
|
4
6
|
|
|
5
7
|
module Gmi2LaTeX
|
|
6
8
|
class Command
|
|
@@ -9,17 +11,17 @@ module Gmi2LaTeX
|
|
|
9
11
|
end
|
|
10
12
|
|
|
11
13
|
def run
|
|
12
|
-
header = <<~
|
|
14
|
+
header = <<~LATEX
|
|
13
15
|
\\RequirePackage{plautopatch}
|
|
14
16
|
\\documentclass[a4paper,article,dvipdfmx]{jlreq}
|
|
15
17
|
\\usepackage{hyperref}
|
|
16
18
|
\\begin{document}
|
|
17
|
-
|
|
19
|
+
LATEX
|
|
18
20
|
footer = "\\end{document}\n"
|
|
19
21
|
|
|
20
22
|
OptionParser.new do |parser|
|
|
21
|
-
parser.on(
|
|
22
|
-
parser.on(
|
|
23
|
+
parser.on('--header=SOURCE') { |source| header = source }
|
|
24
|
+
parser.on('--footer=SOURCE') { |source| footer = source }
|
|
23
25
|
end.parse!
|
|
24
26
|
|
|
25
27
|
doc = Gemtext::Parser.new($stdin).parse
|
data/lib/gmi2latex/renderer.rb
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
module Gmi2LaTeX
|
|
4
4
|
class Renderer
|
|
@@ -8,13 +8,9 @@ module Gmi2LaTeX
|
|
|
8
8
|
@footer = footer
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
using Gmi2LaTeX::GemtextRefinements
|
|
12
|
-
|
|
13
11
|
def render
|
|
14
12
|
@header and print @header
|
|
15
|
-
@document.nodes.each
|
|
16
|
-
render_node(node)
|
|
17
|
-
end
|
|
13
|
+
@document.nodes.each { |node| render_node(node) }
|
|
18
14
|
end_itemize
|
|
19
15
|
@footer and print @footer
|
|
20
16
|
end
|
|
@@ -22,57 +18,102 @@ module Gmi2LaTeX
|
|
|
22
18
|
def render_node(node)
|
|
23
19
|
case node
|
|
24
20
|
in Gemtext::Heading[content:]
|
|
21
|
+
end_text
|
|
25
22
|
end_itemize
|
|
26
23
|
print "\\section{#{content}}\n"
|
|
27
24
|
in Gemtext::SubHeading[content:]
|
|
25
|
+
end_text
|
|
28
26
|
end_itemize
|
|
29
27
|
print "\\subsection{#{content}}\n"
|
|
30
28
|
in Gemtext::SubSubHeading[content:]
|
|
29
|
+
end_text
|
|
31
30
|
end_itemize
|
|
32
31
|
print "\\subsubsection{#{content}}\n"
|
|
33
32
|
in Gemtext::Whitespace
|
|
33
|
+
end_text
|
|
34
34
|
end_itemize
|
|
35
35
|
print "\n"
|
|
36
36
|
in Gemtext::Text[content:]
|
|
37
|
-
|
|
38
|
-
content.each_char do |char|
|
|
39
|
-
case char
|
|
40
|
-
in "_"
|
|
41
|
-
print "\\_"
|
|
42
|
-
else
|
|
43
|
-
print char
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
print "\n"
|
|
37
|
+
render_text(content)
|
|
47
38
|
in Gemtext::Link[target:, description:]
|
|
48
|
-
|
|
49
|
-
print "#{description} (\\url{#{target}})\n"
|
|
39
|
+
render_link(target, description:)
|
|
50
40
|
in Gemtext::Preformatted[content:]
|
|
41
|
+
end_text
|
|
51
42
|
end_itemize
|
|
52
|
-
print <<~
|
|
43
|
+
print <<~LATEX
|
|
53
44
|
\\begin{verbatim}
|
|
54
45
|
#{content}
|
|
55
46
|
\\end{verbatim}
|
|
56
|
-
|
|
47
|
+
LATEX
|
|
57
48
|
in Gemtext::ListItem[content:]
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
\\item{}
|
|
61
|
-
#{content}
|
|
62
|
-
LaTeX
|
|
63
|
-
else
|
|
64
|
-
print <<~LaTeX
|
|
65
|
-
\\begin{itemize}
|
|
66
|
-
\\item{}
|
|
67
|
-
#{content}
|
|
68
|
-
LaTeX
|
|
69
|
-
@listing = true
|
|
70
|
-
end
|
|
49
|
+
end_text
|
|
50
|
+
render_list_item(content)
|
|
71
51
|
else
|
|
72
52
|
raise node.inspect
|
|
73
53
|
end
|
|
74
54
|
end
|
|
75
55
|
|
|
56
|
+
def render_text(content)
|
|
57
|
+
end_itemize
|
|
58
|
+
if content.match(/ \A \s* \Z /x)
|
|
59
|
+
end_text
|
|
60
|
+
print content
|
|
61
|
+
else
|
|
62
|
+
@was_text and print "\\\\\n"
|
|
63
|
+
content.each_char do |char|
|
|
64
|
+
case char
|
|
65
|
+
in '_'
|
|
66
|
+
print '\\_'
|
|
67
|
+
in '#'
|
|
68
|
+
print '\\#'
|
|
69
|
+
in '%'
|
|
70
|
+
print '\\%'
|
|
71
|
+
in '<'
|
|
72
|
+
print '\\textlangle{}'
|
|
73
|
+
in '>'
|
|
74
|
+
print '\\textrangle{}'
|
|
75
|
+
in '`'
|
|
76
|
+
print '\\`{}'
|
|
77
|
+
else
|
|
78
|
+
print char
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
@was_text = true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def render_list_item(content)
|
|
86
|
+
if @listing
|
|
87
|
+
print <<~LATEX
|
|
88
|
+
\\item{}
|
|
89
|
+
#{content}
|
|
90
|
+
LATEX
|
|
91
|
+
else
|
|
92
|
+
print <<~LATEX
|
|
93
|
+
\\begin{itemize}
|
|
94
|
+
\\item{}
|
|
95
|
+
#{content}
|
|
96
|
+
LATEX
|
|
97
|
+
@listing = true
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def render_link(target, description:)
|
|
102
|
+
end_text
|
|
103
|
+
end_itemize
|
|
104
|
+
if description.empty?
|
|
105
|
+
print "☞ \\url{#{target}}\n"
|
|
106
|
+
else
|
|
107
|
+
print "☞ #{description} (\\url{#{target}})\n"
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def end_text
|
|
112
|
+
@was_text or return
|
|
113
|
+
print "\n"
|
|
114
|
+
@was_text = false
|
|
115
|
+
end
|
|
116
|
+
|
|
76
117
|
def end_itemize
|
|
77
118
|
@listing or return
|
|
78
119
|
@listing = false
|
data/lib/gmi2latex/version.rb
CHANGED
data/lib/gmi2latex.rb
CHANGED
data/sig/gmi2latex.rbs
CHANGED
|
@@ -1,4 +1,62 @@
|
|
|
1
|
-
module
|
|
1
|
+
module Gemtext
|
|
2
|
+
class Document
|
|
3
|
+
end
|
|
4
|
+
|
|
5
|
+
class Heading
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
class SubHeading
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
class SubSubHeading
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
class Whitespace
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class Text
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
class Link
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
class Preformatted
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
class ListItem
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module Gmi2LaTeX
|
|
2
31
|
VERSION: String
|
|
3
|
-
|
|
32
|
+
Error: Class
|
|
33
|
+
|
|
34
|
+
class Renderer
|
|
35
|
+
@document: Gemtext::Document
|
|
36
|
+
@header: String?
|
|
37
|
+
@footer: String?
|
|
38
|
+
@listing: bool
|
|
39
|
+
@was_text: bool
|
|
40
|
+
|
|
41
|
+
def initialize: (Gemtext::Document document, ?header: String?, ?footer: String?) -> void
|
|
42
|
+
def render: -> nil
|
|
43
|
+
def render_node: (Gemtext::Heading |
|
|
44
|
+
Gemtext::SubHeading |
|
|
45
|
+
Gemtext::SubSubHeading |
|
|
46
|
+
Gemtext::Whitespace |
|
|
47
|
+
Gemtext::Text |
|
|
48
|
+
Gemtext::Link |
|
|
49
|
+
Gemtext::Preformatted |
|
|
50
|
+
Gemtext::ListItem node) -> void
|
|
51
|
+
def render_text: (String content) -> void
|
|
52
|
+
def render_list_item: (String content) -> void
|
|
53
|
+
def render_link: (String target, description: String) -> void
|
|
54
|
+
def end_text: -> void
|
|
55
|
+
def end_itemize: -> void
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class Command
|
|
59
|
+
def self.run: -> void
|
|
60
|
+
def run: -> void
|
|
61
|
+
end
|
|
4
62
|
end
|
metadata
CHANGED
|
@@ -1,29 +1,28 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: gmi2latex
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- gemmaro
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: exe
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: gemtext
|
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
|
16
15
|
requirements:
|
|
17
|
-
- - "
|
|
16
|
+
- - "~>"
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
18
|
+
version: 1.0.3
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
|
-
- - "
|
|
23
|
+
- - "~>"
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
25
|
+
version: 1.0.3
|
|
27
26
|
description: Gmi2LaTeX is a Gemtext (Gemini naitive text format, suffix .gmi) to LaTeX
|
|
28
27
|
converter.
|
|
29
28
|
email:
|
|
@@ -33,6 +32,7 @@ executables:
|
|
|
33
32
|
extensions: []
|
|
34
33
|
extra_rdoc_files: []
|
|
35
34
|
files:
|
|
35
|
+
- ".envrc"
|
|
36
36
|
- ".rubocop.yml"
|
|
37
37
|
- CHANGELOG.md
|
|
38
38
|
- LICENSE.txt
|
|
@@ -41,10 +41,9 @@ files:
|
|
|
41
41
|
- exe/gmi2latex
|
|
42
42
|
- lib/gmi2latex.rb
|
|
43
43
|
- lib/gmi2latex/command.rb
|
|
44
|
-
- lib/gmi2latex/gemtext_refinements.rb
|
|
45
44
|
- lib/gmi2latex/renderer.rb
|
|
46
45
|
- lib/gmi2latex/version.rb
|
|
47
|
-
-
|
|
46
|
+
- sig/gmi2latex.gen.rbs
|
|
48
47
|
- sig/gmi2latex.rbs
|
|
49
48
|
homepage: https://codeberg.org/gemmaro/gmi2latex
|
|
50
49
|
licenses:
|
|
@@ -53,7 +52,7 @@ metadata:
|
|
|
53
52
|
homepage_uri: https://codeberg.org/gemmaro/gmi2latex
|
|
54
53
|
source_code_uri: https://codeberg.org/gemmaro/gmi2latex.git
|
|
55
54
|
changelog_uri: https://codeberg.org/gemmaro/gmi2latex/src/branch/main/CHANGELOG.md
|
|
56
|
-
|
|
55
|
+
rubygems_mfa_required: 'true'
|
|
57
56
|
rdoc_options: []
|
|
58
57
|
require_paths:
|
|
59
58
|
- lib
|
|
@@ -68,8 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
68
67
|
- !ruby/object:Gem::Version
|
|
69
68
|
version: '0'
|
|
70
69
|
requirements: []
|
|
71
|
-
rubygems_version:
|
|
72
|
-
signing_key:
|
|
70
|
+
rubygems_version: 4.0.10
|
|
73
71
|
specification_version: 4
|
|
74
72
|
summary: Gemtext to LaTeX converter
|
|
75
73
|
test_files: []
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
require "gemtext"
|
|
2
|
-
|
|
3
|
-
module Gmi2LaTeX
|
|
4
|
-
module GemtextRefinements
|
|
5
|
-
refine Gemtext::Node do
|
|
6
|
-
def deconstruct_keys(*_keys)
|
|
7
|
-
{ content: }
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
refine Gemtext::Link do
|
|
12
|
-
def deconstruct_keys(*_keys)
|
|
13
|
-
{ **super, target:, description: }
|
|
14
|
-
end
|
|
15
|
-
end
|
|
16
|
-
end
|
|
17
|
-
end
|
data/manifest.scm
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(specifications->manifest (list "ruby@3.1" "ruby-gemtext" "ruby-rubocop"))
|