gmi2latex 0.1.1 → 0.1.2

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: 8dd72e2d3b7f550abe60f7101f1c2bdc8a5fe52675511957f73a78a77bb0d225
4
+ data.tar.gz: 6760567f6a456155f81e503312ac04dd363c2cfaacd518ff0860daec9d038bd0
5
5
  SHA512:
6
- metadata.gz: 93e88eb45c3c46bca98f16527e5be784dcbce42b80c7e88c5b8155a91a845fe5d01a9768c51d570d2926db899eea7ed48fdd8fdc9a84a2f5acf2473492cb7983
7
- data.tar.gz: a6780c4062cb6a3db1920f10aa4749d35f2faa36cd55ef3b014149551bd4bfeb353f58b00cb2d222cf6f8a7dde1f36237b2d6185e744efcd077c565f8c89ecf0
6
+ metadata.gz: 785cc12f9393f13e3012d10c87f2b98454334728d117e714132f29e121511abd9c10dad7abd3722c7139aa778b65cabbd6e8b13e076beb49f78d529c987b0c66
7
+ data.tar.gz: 354036076e6b76a31f77990e784f31ede1a79d698a26801f402c6acffa159031f417a9ac0035796abbcef0068c9369d1e0d31db7cb12e6923f6b33102aa2ddd9
data/.envrc ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/sh
2
+ eval "$(guix shell --search-paths)"
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ### Changed
4
+
5
+ - Escape hash (#), percent, angle brackets, and backquotes character.
6
+ - Add linebreaks for consecutive text lines.
7
+ - Load renderer class with `require "gmi2latex"`.
8
+
3
9
  ## [0.1.1] - 2024-06-17
4
10
 
5
11
  ### Changed
@@ -12,9 +12,7 @@ module Gmi2LaTeX
12
12
 
13
13
  def render
14
14
  @header and print @header
15
- @document.nodes.each do |node|
16
- render_node(node)
17
- end
15
+ @document.nodes.each { |node| render_node(node) }
18
16
  end_itemize
19
17
  @footer and print @footer
20
18
  end
@@ -22,32 +20,29 @@ module Gmi2LaTeX
22
20
  def render_node(node)
23
21
  case node
24
22
  in Gemtext::Heading[content:]
23
+ end_text
25
24
  end_itemize
26
25
  print "\\section{#{content}}\n"
27
26
  in Gemtext::SubHeading[content:]
27
+ end_text
28
28
  end_itemize
29
29
  print "\\subsection{#{content}}\n"
30
30
  in Gemtext::SubSubHeading[content:]
31
+ end_text
31
32
  end_itemize
32
33
  print "\\subsubsection{#{content}}\n"
33
34
  in Gemtext::Whitespace
35
+ end_text
34
36
  end_itemize
35
37
  print "\n"
36
38
  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"
39
+ render_text(content)
47
40
  in Gemtext::Link[target:, description:]
41
+ end_text
48
42
  end_itemize
49
43
  print "#{description} (\\url{#{target}})\n"
50
44
  in Gemtext::Preformatted[content:]
45
+ end_text
51
46
  end_itemize
52
47
  print <<~LaTeX
53
48
  \\begin{verbatim}
@@ -55,24 +50,64 @@ module Gmi2LaTeX
55
50
  \\end{verbatim}
56
51
  LaTeX
57
52
  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
53
+ end_text
54
+ render_list_item(content)
71
55
  else
72
56
  raise node.inspect
73
57
  end
74
58
  end
75
59
 
60
+ def render_text(content)
61
+ end_itemize
62
+ if content.match(/ \A \s* \Z /x)
63
+ end_text
64
+ print content
65
+ else
66
+ @was_text and print "\\\\\n"
67
+ content.each_char do |char|
68
+ case char
69
+ in "_"
70
+ print "\\_"
71
+ in "#"
72
+ print "\\#"
73
+ in "%"
74
+ print "\\%"
75
+ in "<"
76
+ print "\\textlangle{}"
77
+ in ">"
78
+ print "\\textrangle{}"
79
+ in "`"
80
+ print "\\`{}"
81
+ else
82
+ print char
83
+ end
84
+ end
85
+ end
86
+ @was_text = true
87
+ end
88
+
89
+ def render_list_item(content)
90
+ if @listing
91
+ print <<~LaTeX
92
+ \\item{}
93
+ #{content}
94
+ LaTeX
95
+ else
96
+ print <<~LaTeX
97
+ \\begin{itemize}
98
+ \\item{}
99
+ #{content}
100
+ LaTeX
101
+ @listing = true
102
+ end
103
+ end
104
+
105
+ def end_text
106
+ @was_text or return
107
+ print "\n"
108
+ @was_text = false
109
+ end
110
+
76
111
  def end_itemize
77
112
  @listing or return
78
113
  @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.2"
5
5
  end
data/lib/gmi2latex.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "gmi2latex/version"
4
+ require_relative "gmi2latex/renderer"
4
5
 
5
6
  module Gmi2LaTeX
6
7
  Error = Class.new(StandardError)
metadata CHANGED
@@ -1,14 +1,14 @@
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.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - gemmaro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-17 00:00:00.000000000 Z
11
+ date: 2024-08-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gemtext
@@ -33,6 +33,7 @@ executables:
33
33
  extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
+ - ".envrc"
36
37
  - ".rubocop.yml"
37
38
  - CHANGELOG.md
38
39
  - LICENSE.txt