gmi2latex 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|