gmi2latex 0.1.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 +7 -0
- data/.rubocop.yml +13 -0
- data/CHANGELOG.md +5 -0
- data/README.md +37 -0
- data/Rakefile +16 -0
- data/exe/gmi2html +3 -0
- data/lib/gmi2latex/command.rb +29 -0
- data/lib/gmi2latex/gemtext_refinements.rb +17 -0
- data/lib/gmi2latex/renderer.rb +82 -0
- data/lib/gmi2latex/version.rb +5 -0
- data/lib/gmi2latex.rb +7 -0
- data/manifest.scm +1 -0
- data/sig/gmi2latex.rbs +4 -0
- metadata +70 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e5fec063b892c556ebb4b07be31b10a0bf81b9426f1ded16e17c985f807288e2
|
4
|
+
data.tar.gz: af496f8febb9a9fc9d985915e388eb484bd7a5196f7bf617a97d443e0aded68f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1b96eb95d726d1d87ad1943ecd12dc42231898e696b8a3a2fec888395f6884ba1ba7f19f521b3d12d2d65b9f1a97ca8d01b944967cfbc232b6d1f179df00980a
|
7
|
+
data.tar.gz: '0058f166eac7815991d838eda3944caf26ff2d43a388b854efff5aa3cff31327643dbb3c09e2085fcd4e00485299d2fb630b3bd7006e08f58f03fd7e23929c4c'
|
data/.rubocop.yml
ADDED
data/CHANGELOG.md
ADDED
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Gmi2LaTeX
|
2
|
+
|
3
|
+
Gmi2LaTeX is a Gemtext (Gemini native text format) to LaTeX converter (renderer) library and command line tool.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install the gem and add to the application's Gemfile by executing:
|
8
|
+
|
9
|
+
$ bundle add gmi2latex
|
10
|
+
|
11
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
12
|
+
|
13
|
+
$ gem install gmi2latex
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
See its usage with `gmi2latex --help`.
|
18
|
+
|
19
|
+
## Development
|
20
|
+
|
21
|
+
After checking out the repo, run `bin/setup` to install dependencies.
|
22
|
+
Then, run `rake test` to run the tests.
|
23
|
+
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
24
|
+
|
25
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
26
|
+
|
27
|
+
## Related works
|
28
|
+
|
29
|
+
This gem uses [gemini gem][gemini] for parsing.
|
30
|
+
There are [gmi2html gem][gmi2html], the Gemini to HTML converter.
|
31
|
+
|
32
|
+
[gemini]: https://github.com/exastencil/gemtext "GitHub"
|
33
|
+
[gmi2html]: https://github.com/jebw/gmi2html/ "GitHub"
|
34
|
+
|
35
|
+
## Contributing
|
36
|
+
|
37
|
+
Bug reports and pull requests are welcome.
|
data/Rakefile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "bundler/gem_tasks"
|
4
|
+
require "rake/testtask"
|
5
|
+
|
6
|
+
Rake::TestTask.new(:test) do |t|
|
7
|
+
t.libs << "test"
|
8
|
+
t.libs << "lib"
|
9
|
+
t.test_files = FileList["test/**/*_test.rb"]
|
10
|
+
end
|
11
|
+
|
12
|
+
require "rubocop/rake_task"
|
13
|
+
|
14
|
+
RuboCop::RakeTask.new
|
15
|
+
|
16
|
+
task default: %i[test rubocop]
|
data/exe/gmi2html
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require "gemtext"
|
2
|
+
require "optparse"
|
3
|
+
require_relative "renderer"
|
4
|
+
|
5
|
+
module Gmi2LaTeX
|
6
|
+
class Command
|
7
|
+
def self.run
|
8
|
+
new.run
|
9
|
+
end
|
10
|
+
|
11
|
+
def run
|
12
|
+
header = <<~LaTeX
|
13
|
+
\\RequirePackage{plautopatch}
|
14
|
+
\\documentclass[a4paper,article,dvipdfmx]{jlreq}
|
15
|
+
\\usepackage{hyperref}
|
16
|
+
\\begin{document}
|
17
|
+
LaTeX
|
18
|
+
footer = "\\end{document}\n"
|
19
|
+
|
20
|
+
OptionParser.new do |parser|
|
21
|
+
parser.on("--header=SOURCE") { |source| header = source }
|
22
|
+
parser.on("--footer=SOURCE") { |source| footer = source }
|
23
|
+
end.parse!
|
24
|
+
|
25
|
+
doc = Gemtext::Parser.new($stdin).parse
|
26
|
+
Renderer.new(doc, header:, footer:).render
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,17 @@
|
|
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
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require_relative "gemtext_refinements"
|
2
|
+
|
3
|
+
module Gmi2LaTeX
|
4
|
+
class Renderer
|
5
|
+
def initialize(document, header: nil, footer: nil)
|
6
|
+
@document = document
|
7
|
+
@header = header
|
8
|
+
@footer = footer
|
9
|
+
end
|
10
|
+
|
11
|
+
using Gmi2LaTeX::GemtextRefinements
|
12
|
+
|
13
|
+
def render
|
14
|
+
@header and print @header
|
15
|
+
@document.nodes.each do |node|
|
16
|
+
render_node(node)
|
17
|
+
end
|
18
|
+
end_itemize
|
19
|
+
@footer and print @footer
|
20
|
+
end
|
21
|
+
|
22
|
+
def render_node(node)
|
23
|
+
case node
|
24
|
+
in Gemtext::Heading[content:]
|
25
|
+
end_itemize
|
26
|
+
print "\\section{#{content}}\n"
|
27
|
+
in Gemtext::SubHeading[content:]
|
28
|
+
end_itemize
|
29
|
+
print "\\subsection{#{content}}\n"
|
30
|
+
in Gemtext::SubSubHeading[content:]
|
31
|
+
end_itemize
|
32
|
+
print "\\subsubsection{#{content}}\n"
|
33
|
+
in Gemtext::Whitespace
|
34
|
+
end_itemize
|
35
|
+
print "\n"
|
36
|
+
in Gemtext::Text[content:]
|
37
|
+
end_itemize
|
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"
|
47
|
+
in Gemtext::Link[target:, description:]
|
48
|
+
end_itemize
|
49
|
+
print "#{description} (\\url{#{target}})\n"
|
50
|
+
in Gemtext::Preformatted[content:]
|
51
|
+
end_itemize
|
52
|
+
print <<~LaTeX
|
53
|
+
\\begin{verbatim}
|
54
|
+
#{content}
|
55
|
+
\\end{verbatim}
|
56
|
+
LaTeX
|
57
|
+
in Gemtext::ListItem[content:]
|
58
|
+
if @listing
|
59
|
+
print <<~LaTeX
|
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
|
71
|
+
else
|
72
|
+
raise node.inspect
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def end_itemize
|
77
|
+
@listing or return
|
78
|
+
@listing = false
|
79
|
+
print "\\end{itemize}\n"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
data/lib/gmi2latex.rb
ADDED
data/manifest.scm
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
(specifications->manifest (list "ruby@3.1" "ruby-gemtext" "ruby-rubocop"))
|
data/sig/gmi2latex.rbs
ADDED
metadata
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gmi2latex
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- gemmaro
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-06-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: gemtext
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Gmi2LaTeX is a Gemtext (Gemini naitive text format, suffix .gmi) to LaTeX
|
28
|
+
converter.
|
29
|
+
email:
|
30
|
+
- gemmaro.dev@gmail.com
|
31
|
+
executables:
|
32
|
+
- gmi2html
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- ".rubocop.yml"
|
37
|
+
- CHANGELOG.md
|
38
|
+
- README.md
|
39
|
+
- Rakefile
|
40
|
+
- exe/gmi2html
|
41
|
+
- lib/gmi2latex.rb
|
42
|
+
- lib/gmi2latex/command.rb
|
43
|
+
- lib/gmi2latex/gemtext_refinements.rb
|
44
|
+
- lib/gmi2latex/renderer.rb
|
45
|
+
- lib/gmi2latex/version.rb
|
46
|
+
- manifest.scm
|
47
|
+
- sig/gmi2latex.rbs
|
48
|
+
homepage:
|
49
|
+
licenses: []
|
50
|
+
metadata: {}
|
51
|
+
post_install_message:
|
52
|
+
rdoc_options: []
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: 3.1.0
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '0'
|
65
|
+
requirements: []
|
66
|
+
rubygems_version: 3.3.26
|
67
|
+
signing_key:
|
68
|
+
specification_version: 4
|
69
|
+
summary: Gemtext to LaTeX converter
|
70
|
+
test_files: []
|