gmi2latex 0.1.1 → 0.1.2

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