pandoc_abnt 1.0.4 → 1.1.0.pre

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
  SHA1:
3
- metadata.gz: d326f6a0e4134fcb2e3b31bf1de4ddc7ada5dd96
4
- data.tar.gz: 449e63c501d7799a3b644f00a4c40d8df9dbd684
3
+ metadata.gz: 921431824a229e948ccdfd38e1fa88723d960a30
4
+ data.tar.gz: 230daed2edf5d96681378d3a836f98458dc19dc5
5
5
  SHA512:
6
- metadata.gz: e28532e8cce804d620c5958f1d45286366f3769c83cfb57b33f26336b77f62842b9a76d44361d61642af4cd3ddf27f75eef6c4a4488f49bdf26d7158256459f8
7
- data.tar.gz: 5ca5858f39a4f359fb21601ce7b61558ec8ccc99ee86a375bfb509f75da01a62cbd90045cff42a100f0e8c81d88692cce953b6922c18f7c5158f8207903d2c4e
6
+ metadata.gz: 4c37058463e763d9d3fc4d245fe2519abdf462a71f9dbe5a3a114702e8551dd9431de70577c50b54ca28ad0afa7ed3f8b401240e8e9bcc0dc6118399414a9e00
7
+ data.tar.gz: d5790e28cbb3c7be73763f0b47b8d5ff867324c8039fd64bf5d86f791863a1e92088e9220ece99b23f8b77c9c98eccff4120a07c4fe0c7abf114570961cd2aca
data/Rakefile CHANGED
@@ -10,12 +10,11 @@ task :fixtures do
10
10
 
11
11
  Dir.chdir("spec/fixtures/files/figuras") do
12
12
 
13
- originais = ["p-fig-caption-largura-p-fonte.md"]
14
- originais.each do |original|
15
- system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
16
- system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
17
-
18
- end
13
+ #originais = ["p-fig-caption-largura-p-fonte.md"]
14
+ #originais.each do |original|
15
+ #system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
16
+ #system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
17
+ #end
19
18
 
20
19
  end
21
20
 
@@ -71,8 +70,18 @@ task :fixtures do
71
70
  original = "alineas-texto-sem-indentado.md"
72
71
  system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
73
72
  system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
74
-
75
-
73
+ end
74
+
75
+ Dir.chdir("spec/fixtures/files/quadros") do
76
+ original = "quadro-com-id-titulo-e-fonte.md"
77
+ system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
78
+ system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
79
+
80
+ system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.apenas-tabela.md')} -o #{original.ext('.apenas-tabela.json')}"
81
+ system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.apenas-tabela.md')} -o #{original.ext('.apenas-tabela.tex')}"
82
+
83
+
84
+
76
85
  end
77
86
 
78
87
  end
data/lib/pandoc_abnt.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "pandoc_abnt/version"
2
2
  require "pandoc_abnt/figura_filter"
3
3
  require "pandoc_abnt/lista_filter"
4
+ require "pandoc_abnt/quadro_filter"
4
5
 
5
6
  module PandocAbnt
6
7
  # Your code goes here...
@@ -0,0 +1,156 @@
1
+ require 'json'
2
+ require 'open3'
3
+
4
+ module PandocAbnt
5
+
6
+ # Reconhece a sintaxe de quadro e converte para o código latex de um quadro segundo o abnTeX2.
7
+ class QuadroFilter
8
+
9
+ def transforma_em_quadro(latex_code, id, titulo, fonte)
10
+ #inicio = latex_code.lines[0..-2].join ""
11
+ abntex_code = <<LATEX
12
+ \\begin{quadro}
13
+ \\caption{#{titulo.strip}\\label{#{id}}}
14
+ #{latex_code.strip}
15
+ \\legend{#{fonte.strip}}
16
+ \\end{quadro}
17
+ LATEX
18
+ abntex_code.strip
19
+ end
20
+
21
+ # Verifica se node é um parágrafo que inicia com "Fonte:"
22
+ def fonte?(node)
23
+ # {"t":"Para","c":[{"t":"Str","c":"Fonte:"},{"t":"Space","c":[]},{"t":"Str","c":"Autor."}]}
24
+ node["t"] == "Para" and node["c"][0]["c"] == "Fonte:"
25
+ end
26
+
27
+ # Verifica se node contém apenas uma imagem
28
+ def imagem?(node)
29
+ # {"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"]]],[{"t":"Str","c":"Título"}],["imagem.png","fig:"]]}]}
30
+
31
+ node["t"] == "Para" and node["c"][0]["t"] == "Image"
32
+ end
33
+
34
+ # Verifica se node é uma tabela
35
+ def tabela?(node)
36
+ # {"t":"Table","c":[[{"t":"Str","c":"Demonstration"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"simple"},{"t":"Space"},{"t":"Str","c":"table"},{"t":"Space"},{"t":"Str","c":"syntax."},{"t":"Space"},{"t":"RawInline","c":["tex","\\label{mytable}"]}],[{"t":"AlignRight"},{"t":"AlignLeft"},{"t":"AlignCenter"},{"t":"AlignDefault"}],[0,0,0,0],[[{"t":"Plain","c":[{"t":"Str","c":"Right"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Left"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Center"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Default"}]}]],[[[{"t":"Plain","c":[{"t":"Str","c":"12"}]}],[{"t":"Plain","c":[{"t":"Str","c":"12"}]}],[{"t":"Plain","c":[{"t":"Str","c":"12"}]}],[{"t":"Plain","c":[{"t":"Str","c":"12"}]}]],[[{"t":"Plain","c":[{"t":"Str","c":"123"}]}],[{"t":"Plain","c":[{"t":"Str","c":"123"}]}],[{"t":"Plain","c":[{"t":"Str","c":"123"}]}],[{"t":"Plain","c":[{"t":"Str","c":"123"}]}]],[[{"t":"Plain","c":[{"t":"Str","c":"1"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1"}]}]]]]}
37
+ node["t"] == "Table"
38
+ end
39
+
40
+ # Verifica se node é um parágrafo que inicia com "Quadro #id: título"
41
+ def quadro?(node)
42
+ # Texto original:
43
+ # Quadro #perfil: Perfil dos voluntários do experimento
44
+ #
45
+ # Depois do parse:
46
+ #
47
+ # {"t"=>"Para","c"=>[{"t"=>"Str","c"=>"Quadro"},{"t"=>"Space"},{"t"=>"Str","c"=>"#perfil:"},{"t"=>"Space"},{"t"=>"Str","c"=>"Perfil"},{"t"=>"Space"},{"t"=>"Str","c"=>"dos"},{"t"=>"Space"},{"t"=>"Str","c"=>"voluntários"},{"t"=>"Space"},{"t"=>"Str","c"=>"do"},{"t"=>"Space"},{"t"=>"Str","c"=>"experimento"}]}
48
+ para = node["c"]
49
+
50
+ node["t"] == "Para" and node["c"].length>=5 and string_contendo?("Quadro",para[0]) and space?(para[1]) and quadro_id?(para[2]) and space?(para[3]) and string?(para[4])
51
+ end
52
+
53
+ def string_contendo?(string, node)
54
+ node["t"] == "Str" and node["c"]==string
55
+ end
56
+
57
+ # Verifica se o node_p contém um string que poderia representar o id de um quadro
58
+ #
59
+ # Ex: {"t"=>"Str","c"=>"#perfil2:"}
60
+ def quadro_id?(node)
61
+ node["t"] == "Str" and node["c"].match(/\#[[:alpha:]]+\w*\:/)
62
+ end
63
+
64
+ # Verifica se o node (parágrafo) contém uma descrição de Quadro, e extrai o id e título.
65
+ def extrai_id_titulo_do_quadro(node, apimeta)
66
+ # {"t"=>"Para","c"=>[{"t"=>"Str","c"=>"Quadro"},{"t"=>"Space"},{"t"=>"Str","c"=>"#perfil:"},{"t"=>"Space"},{"t"=>"Str","c"=>"Perfil"},{"t"=>"Space"},{"t"=>"Str","c"=>"dos"},{"t"=>"Space"},{"t"=>"Str","c"=>"voluntários"},{"t"=>"Space"},{"t"=>"Str","c"=>"do"},{"t"=>"Space"},{"t"=>"Str","c"=>"experimento"}]}
67
+ return nil unless quadro?(node)
68
+
69
+ id = node["c"][2]["c"][1..-2]
70
+ titulo_nodes = node["c"][4..-1]
71
+ para = {"t" => "Para", "c" => titulo_nodes}
72
+
73
+ titulo = convert_to_latex(apimeta.merge("blocks"=>[para]))
74
+ return id, titulo
75
+ end
76
+
77
+ def space?(node)
78
+ node["t"] == "Space"
79
+ end
80
+
81
+ def string?(node)
82
+ node["t"] == "Str"
83
+ end
84
+
85
+
86
+ # Converte node para latex
87
+ def convert_to_latex(node)
88
+ latex_code = nil
89
+ Open3.popen3("pandoc -f json -t latex --wrap=none") {|stdin, stdout, stderr, wait_thr|
90
+ stdin.write(node.to_json)
91
+ stdin.close # stdin, stdout and stderr should be closed explicitly in this form.
92
+ latex_code = stdout.read
93
+
94
+ pid = wait_thr.pid # pid of the started process.
95
+ exit_status = wait_thr.value # Process::Status object returned.
96
+ }
97
+ latex_code
98
+ end
99
+
100
+ def atualiza_imagem_width(node)
101
+ # {"t"=>"Para", "c"=>[{"t"=>"Image", "c"=>[["id", [], [["largura", "30%"]]], [{"t"=>"Str", "c"=>"Título"}], ["imagem.png", "fig:"]]}]}
102
+ # node["c"][0]["c"][2] << ["width","30%"]
103
+ atributos = node["c"][0]["c"][0][2]
104
+ atributos.each_with_index do |att, index|
105
+ if att[0] == "largura" then
106
+ atributos[index][0] = "width"
107
+ break
108
+ end
109
+ end
110
+ node
111
+ end
112
+
113
+ def filtra_json(pandoc_json_tree)
114
+ # Exemplo de código:
115
+ # [{"unMeta":{}},[{"t":"Para","c":[{"t":"Image","c":[["id",[],[["width","30%"]]],[{"t":"Str","c":"Título"}],["imagem.png","fig:"]]}]},{"t":"Para","c":[{"t":"Str","c":"Fonte:"},{"t":"Space","c":[]},{"t":"Str","c":"Autor."}]}]]
116
+ tree = JSON.parse(pandoc_json_tree)
117
+ meta = tree["meta"]
118
+ blocks = tree["blocks"]
119
+ api = tree["pandoc-api-version"]
120
+
121
+ filtrados = []
122
+ anterior = nil
123
+
124
+ if not blocks
125
+ raise ArgumentError, "Problema no argumento passado: #{pandoc_json_tree}"
126
+ end
127
+
128
+ blocks.each do |node|
129
+
130
+ if (fonte?(node) and tabela?(anterior) and quadro?(filtrados[-2])) then
131
+
132
+ tabela_latex = convert_to_latex({"blocks"=>[anterior], "pandoc-api-version" => api, "meta" => meta})
133
+ fonte_latex = convert_to_latex({"blocks"=>[node], "pandoc-api-version" => api, "meta" => meta})
134
+ id, titulo = extrai_id_titulo_do_quadro(filtrados[-2], {"pandoc-api-version" => api, "meta" => meta})
135
+ texcode = transforma_em_quadro(tabela_latex, id, titulo, fonte_latex)
136
+ raw_tex = {"t"=>"RawBlock","c"=>["latex",texcode]}
137
+
138
+ filtrados.pop # remove tabela
139
+ filtrados.pop # remove quadro parágrafo
140
+ filtrados << raw_tex
141
+ else
142
+ filtrados << node
143
+ end
144
+
145
+ anterior = node
146
+ end
147
+
148
+ JSON.generate({"blocks"=>filtrados, "pandoc-api-version" => api, "meta" => meta})
149
+
150
+
151
+ # result = <<-LATEX [{"unMeta":{}},[{"t":"RawBlock","c":["latex","\\begin{figure}[htbp]\n\\caption{Legenda da figura}\\label{id}\n\\begin{center}\n\\includegraphics[width=0.30000\\textwidth]{imagem.png}\n\\end{center}\n\\legend{Fonte: Autor.}\n\\end{figure}"]}]]
152
+
153
+ end
154
+
155
+ end
156
+ end
@@ -1,3 +1,3 @@
1
1
  module PandocAbnt
2
- VERSION = "1.0.4"
2
+ VERSION = "1.1.0.pre"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pandoc_abnt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.1.0.pre
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eduardo de Santana Medeiros Alexandre
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-02-24 00:00:00.000000000 Z
11
+ date: 2017-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -102,6 +102,7 @@ files:
102
102
  - lib/pandoc_abnt.rb
103
103
  - lib/pandoc_abnt/figura_filter.rb
104
104
  - lib/pandoc_abnt/lista_filter.rb
105
+ - lib/pandoc_abnt/quadro_filter.rb
105
106
  - lib/pandoc_abnt/version.rb
106
107
  - pandoc_abnt.gemspec
107
108
  homepage: https://github.com/edusantana/pandoc_abnt
@@ -119,9 +120,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
120
  version: '0'
120
121
  required_rubygems_version: !ruby/object:Gem::Requirement
121
122
  requirements:
122
- - - ">="
123
+ - - ">"
123
124
  - !ruby/object:Gem::Version
124
- version: '0'
125
+ version: 1.3.1
125
126
  requirements: []
126
127
  rubyforge_project:
127
128
  rubygems_version: 2.5.1