pandoc_abnt 1.0.4 → 1.1.0.pre

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
  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