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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0fdfd20d7e0689bff840a35ce5982cd9876c5591f9efa67ad34731173795d12a
4
- data.tar.gz: 2521a4da832fe03b465d09f32f399d7ecdddeb373f703a2bb377512dd48ec1fb
3
+ metadata.gz: adcbc0a32303d293d5d1f0c06ddbf8d11979c0e3ca8eae5cfe2d4b6b46748179
4
+ data.tar.gz: ce5c2f24a782c2ad1905af6182d0f7f20642e27fa658ff27317580eb3836e36e
5
5
  SHA512:
6
- metadata.gz: 93e88eb45c3c46bca98f16527e5be784dcbce42b80c7e88c5b8155a91a845fe5d01a9768c51d570d2926db899eea7ed48fdd8fdc9a84a2f5acf2473492cb7983
7
- data.tar.gz: a6780c4062cb6a3db1920f10aa4749d35f2faa36cd55ef3b014149551bd4bfeb353f58b00cb2d222cf6f8a7dde1f36237b2d6185e744efcd077c565f8c89ecf0
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.6
2
+ TargetRubyVersion: 3.1
3
+ NewCops: enable
3
4
 
4
5
  Style/StringLiterals:
5
6
  Enabled: true
6
- EnforcedStyle: double_quotes
7
+ EnforcedStyle: single_quotes
7
8
 
8
9
  Style/StringLiteralsInInterpolation:
9
10
  Enabled: true
10
- EnforcedStyle: double_quotes
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 "bundler/gem_tasks"
4
- require "rake/testtask"
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
5
 
6
6
  Rake::TestTask.new(:test) do |t|
7
- t.libs << "test"
8
- t.libs << "lib"
9
- t.test_files = FileList["test/**/*_test.rb"]
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.test_files = FileList['test/**/*_test.rb']
10
10
  end
11
11
 
12
- require "rubocop/rake_task"
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
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- require_relative "../lib/gmi2latex/command"
2
+ # frozen_string_literal: true
3
+
4
+ require_relative '../lib/gmi2latex/command'
3
5
  Gmi2LaTeX::Command.run
@@ -1,6 +1,8 @@
1
- require "gemtext"
2
- require "optparse"
3
- require_relative "renderer"
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 = <<~LaTeX
14
+ header = <<~LATEX
13
15
  \\RequirePackage{plautopatch}
14
16
  \\documentclass[a4paper,article,dvipdfmx]{jlreq}
15
17
  \\usepackage{hyperref}
16
18
  \\begin{document}
17
- LaTeX
19
+ LATEX
18
20
  footer = "\\end{document}\n"
19
21
 
20
22
  OptionParser.new do |parser|
21
- parser.on("--header=SOURCE") { |source| header = source }
22
- parser.on("--footer=SOURCE") { |source| footer = source }
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
@@ -1,4 +1,4 @@
1
- require_relative "gemtext_refinements"
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 do |node|
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
- 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"
37
+ render_text(content)
47
38
  in Gemtext::Link[target:, description:]
48
- end_itemize
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 <<~LaTeX
43
+ print <<~LATEX
53
44
  \\begin{verbatim}
54
45
  #{content}
55
46
  \\end{verbatim}
56
- LaTeX
47
+ LATEX
57
48
  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
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Gmi2LaTeX
4
- VERSION = "0.1.1"
4
+ VERSION = '0.1.3'
5
5
  end
data/lib/gmi2latex.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "gmi2latex/version"
3
+ require_relative 'gmi2latex/version'
4
+ require_relative 'gmi2latex/renderer'
4
5
 
5
6
  module Gmi2LaTeX
6
7
  Error = Class.new(StandardError)
@@ -0,0 +1,7 @@
1
+ # TypeProf 0.21.3
2
+
3
+ # Classes
4
+ module Gmi2LaTeX
5
+ VERSION: String
6
+ Error: Class
7
+ end
data/sig/gmi2latex.rbs CHANGED
@@ -1,4 +1,62 @@
1
- module Gmi2latex
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
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
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.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: 2024-06-17 00:00:00.000000000 Z
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: '0'
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: '0'
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
- - manifest.scm
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
- post_install_message:
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: 3.3.26
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"))