pandoc_abnt 0.2.1 → 0.3.0.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rspec +1 -0
- data/README.md +39 -1
- data/Rakefile +46 -0
- data/exe/pandoc_abnt +2 -3
- data/lib/pandoc_abnt/lista_filter.rb +132 -0
- data/lib/pandoc_abnt/version.rb +1 -1
- data/lib/pandoc_abnt.rb +1 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 23b4847f2f2578c6e369c5ccb0b9f0ec646f9b42
|
4
|
+
data.tar.gz: b9fc078a5dd6bffcd262815e14c340f92fb5ab62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0b1e3182584780632ae8d3e1094287b71118697f9ac9e5ed91588f9ea8f2c438d4a00b725b325cb503e8527ed5109b68666ee30d14218e4a2b1e0030963954ca
|
7
|
+
data.tar.gz: 8e92c6e60b6c479d9bc76427e4ca1565bd9ea4caf56e1da3a48fc1d763e900cb493c5e0ab8cd793a3733c3ad1caa4e3b42da4ee91755d5197a5d0c50bdbb8ae3
|
data/.rspec
CHANGED
data/README.md
CHANGED
@@ -25,7 +25,45 @@ Requer pandoc `v1.19.2.1`.
|
|
25
25
|
|
26
26
|
## Usage
|
27
27
|
|
28
|
-
|
28
|
+
O pandoc_abnt foi elaborado para ser utilizado com o [limarka](https://github.com/abntex/limarka), mas projetado para ser utilizado separadamente:
|
29
|
+
|
30
|
+
pandoc --wrap=none --filter exe/pandoc_abnt documento.md -o documento.pdf
|
31
|
+
|
32
|
+
## Funcionalidades
|
33
|
+
|
34
|
+
### Fonte de Figuras e Tabelas
|
35
|
+
|
36
|
+
Para adicionar uma fonte a figura ou tabela, basta adicionar no parágrafo seguinte: `Fonte: texto da fonte`.
|
37
|
+
|
38
|
+
Exemplo de Figura:
|
39
|
+
|
40
|
+
```markdown
|
41
|
+
![Título](imagem.png){#id width=30%}
|
42
|
+
|
43
|
+
Fonte: Autor.
|
44
|
+
```
|
45
|
+
|
46
|
+
Exemplo de Tabela:
|
47
|
+
|
48
|
+
```
|
49
|
+
Right Left Center Default
|
50
|
+
------- ------ ---------- -------
|
51
|
+
12 12 12 12
|
52
|
+
123 123 123 123
|
53
|
+
1 1 1 1
|
54
|
+
|
55
|
+
: Demonstration of simple table syntax. \label{mytable}
|
56
|
+
|
57
|
+
Fonte: Autor.
|
58
|
+
```
|
59
|
+
|
60
|
+
Você pode utilizar [qualquer uma das sintaxes de tabela suportadas pelo pandoc](http://pandoc.org/MANUAL.html#tables).
|
61
|
+
|
62
|
+
**OBS**: O comando `\label{}` é necessário para permitir refenciar a tabela no Latex.
|
63
|
+
|
64
|
+
### Correção de listas
|
65
|
+
|
66
|
+
A ABNT especifica que o texto das seções podem ser divididos em *Alíneas*, na prática
|
29
67
|
|
30
68
|
## Development
|
31
69
|
|
data/Rakefile
CHANGED
@@ -5,11 +5,57 @@ RSpec::Core::RakeTask.new(:spec)
|
|
5
5
|
|
6
6
|
task :default => :spec
|
7
7
|
|
8
|
+
desc "Cria/recria as fixtures"
|
8
9
|
task :fixtures do
|
9
10
|
Dir.chdir("spec/fixtures/files/tabelas") do
|
11
|
+
|
10
12
|
system "pandoc -f markdown+raw_tex simple_tables-with-footnote.md -o simple_tables-with-footnote.pandoc.json"
|
11
13
|
system "pandoc -f markdown+raw_tex simple_tables-with-footnote.md -o simple_tables-with-footnote.pandoc.tex"
|
12
14
|
system "pandoc -f markdown+raw_tex simple_tables-with-footnote.abntex.tex -o simple_tables-with-footnote.abntex.json"
|
15
|
+
|
16
|
+
original = "pipe_tables-cronograma.md"
|
17
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
18
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.tex')}"
|
19
|
+
# criar original.ext('.pandoc-tabela.tex') : Código latex da tabela que será formatada (remove a fonte de pandoc.tex)
|
20
|
+
# criar original.ext('.abntex.tex') : Código esperado para o arquivo final (inclui fonte como legenda)
|
21
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.abntex.tex')} -o #{original.ext('.abntex.json')}"
|
22
|
+
end
|
23
|
+
|
24
|
+
Dir.chdir("spec/fixtures/files/listas") do
|
25
|
+
original = "lista-letras-termiando-com-ponto.md"
|
26
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
27
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
|
28
|
+
|
29
|
+
original = "lista-letras-termiando-com-ponto-e-virgula.md"
|
30
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
31
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
|
32
|
+
|
33
|
+
|
34
|
+
original = "lista-letras-termiando-com-ponto-e-virgula-mix.md"
|
35
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
36
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
|
37
|
+
|
38
|
+
original = "lista-numerica-termiando-com-ponto-e-virgula-mix.md"
|
39
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
40
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
|
41
|
+
|
42
|
+
original = "lista-letras-separada-por-ponto-mix.md"
|
43
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
44
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
|
45
|
+
|
46
|
+
original = "lista-nao-ordenada-mix.md"
|
47
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
48
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
|
49
|
+
|
50
|
+
original = "lista-nao-ordenada-terminando-com-letra-mix.md"
|
51
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.json')}"
|
52
|
+
system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.transformacao-esperada.md')} -o #{original.ext('.transformacao-esperada.json')}"
|
53
|
+
|
54
|
+
|
55
|
+
#system "pandoc -f markdown+raw_tex --wrap=none #{original} -o #{original.ext('.pandoc.tex')}"
|
56
|
+
# criar original.ext('.pandoc-tabela.tex') : Código latex da tabela que será formatada (remove a fonte de pandoc.tex)
|
57
|
+
# criar original.ext('.abntex.tex') : Código esperado para o arquivo final (inclui fonte como legenda)
|
58
|
+
#system "pandoc -f markdown+raw_tex --wrap=none #{original.ext('.abntex.tex')} -o #{original.ext('.abntex.json')}"
|
13
59
|
end
|
14
60
|
|
15
61
|
end
|
data/exe/pandoc_abnt
CHANGED
@@ -4,10 +4,9 @@
|
|
4
4
|
Encoding.default_external = Encoding::UTF_8
|
5
5
|
Encoding.default_internal = Encoding::UTF_8
|
6
6
|
|
7
|
-
|
8
7
|
require 'pandoc_abnt'
|
9
8
|
|
10
|
-
|
9
|
+
figura_filtradas = PandocAbnt::FiguraFilter.new.filtra_json(STDIN.read)
|
11
10
|
|
12
|
-
$stdout <<
|
11
|
+
$stdout << PandocAbnt::ListaFilter.new.filtra_json(figura_filtradas)
|
13
12
|
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'open3'
|
3
|
+
|
4
|
+
module PandocAbnt
|
5
|
+
|
6
|
+
# Essa classe é responsável por filtrar as listas para adaptá-las as normas da ABNT.
|
7
|
+
class ListaFilter
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
# Verifica se node é um parágrafo que inicia com "Fonte:"
|
12
|
+
def lista?(node)
|
13
|
+
lista_ordenada?(node) or lista_nao_ordenada?(node)
|
14
|
+
end
|
15
|
+
|
16
|
+
def lista_ordenada?(node)
|
17
|
+
node["t"] == "OrderedList"
|
18
|
+
end
|
19
|
+
|
20
|
+
def lista_nao_ordenada?(node)
|
21
|
+
node["t"] == "BulletList"
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
#
|
26
|
+
# Converte a seguinte lista:
|
27
|
+
#
|
28
|
+
# a) item 1.
|
29
|
+
# b) item 2.
|
30
|
+
# c) item 3.
|
31
|
+
#
|
32
|
+
# Para:
|
33
|
+
#
|
34
|
+
# a) item 1;
|
35
|
+
# b) item 2;
|
36
|
+
# c) item 3.
|
37
|
+
|
38
|
+
def filtra_json(pandoc_json_tree)
|
39
|
+
# Exemplo de código:
|
40
|
+
|
41
|
+
# {"blocks":[{"t":"OrderedList","c":[[1,{"t":"LowerAlpha"},{"t":"OneParen"}],[[{"t":"Plain","c":[{"t":"Str","c":"item"},{"t":"Space"},{"t":"Str","c":"1."}]}],[{"t":"Plain","c":[{"t":"Str","c":"item"},{"t":"Space"},{"t":"Str","c":"2."}]}],[{"t":"Plain","c":[{"t":"Str","c":"item"},{"t":"Space"},{"t":"Str","c":"3."}]}]]]}],"pandoc-api-version":[1,17,0,4],"meta":{}}
|
42
|
+
tree = JSON.parse(pandoc_json_tree)
|
43
|
+
meta = tree["meta"]
|
44
|
+
blocks = tree["blocks"]
|
45
|
+
api = tree["pandoc-api-version"]
|
46
|
+
|
47
|
+
filtrados = []
|
48
|
+
anterior = nil
|
49
|
+
|
50
|
+
if not blocks
|
51
|
+
raise ArgumentError, "Problema no argumento passado: #{pandoc_json_tree}"
|
52
|
+
end
|
53
|
+
|
54
|
+
blocks.each do |node|
|
55
|
+
if (lista?(node)) then
|
56
|
+
lista_modificada = processa_items_da_lista(node)
|
57
|
+
filtrados << lista_modificada
|
58
|
+
else
|
59
|
+
filtrados << node
|
60
|
+
end
|
61
|
+
end
|
62
|
+
JSON.generate({"blocks"=>filtrados, "pandoc-api-version" => api, "meta" => meta})
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def processa_items_da_lista(lista)
|
68
|
+
# lista["c"][0]: [1,{"t":"LowerAlpha"},{"t":"OneParen"}]
|
69
|
+
|
70
|
+
utiliza_parenteses!(lista) if utiliza_ponto?(lista)
|
71
|
+
|
72
|
+
itens = lista["c"][1] if lista_ordenada?(lista)
|
73
|
+
itens = lista["c"] if lista_nao_ordenada?(lista)
|
74
|
+
# byebug
|
75
|
+
itens.each do |item|
|
76
|
+
# último item da lista
|
77
|
+
if item == itens.last then
|
78
|
+
# adiciona ou troca último caracter (';') para ponto final
|
79
|
+
last_token = ultimo_tolken_do_item(lista, item)
|
80
|
+
next unless last_token
|
81
|
+
if last_token["t"] == "Str" then
|
82
|
+
str = last_token["c"]
|
83
|
+
if str.end_with?(";") then
|
84
|
+
last_token["c"] = str.gsub(/;$/,'.')
|
85
|
+
elsif /[[:alnum:]]$/ =~ str
|
86
|
+
last_token["c"] << '.'
|
87
|
+
end
|
88
|
+
end
|
89
|
+
else
|
90
|
+
# itens internos, troca . por ';'
|
91
|
+
last_token = ultimo_tolken_do_item(lista, item)
|
92
|
+
next unless last_token
|
93
|
+
if last_token["t"] == "Str" then
|
94
|
+
str = last_token["c"]
|
95
|
+
if str.end_with?(".") then
|
96
|
+
last_token["c"] = str.gsub(/\.$/,';')
|
97
|
+
elsif /[[:alnum:]]$/ =~ str
|
98
|
+
last_token["c"] << ';'
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
lista
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
|
110
|
+
def ultimo_tolken_do_item(lista, item)
|
111
|
+
# [{"t"=>"Plain", "c"=>[{"t"=>"Str", "c"=>"item"}, {"t"=>"Space"}, {"t"=>"Str", "c"=>"1."}]}]
|
112
|
+
if lista_ordenada?(lista) and item[0]["t"] == "Plain" then
|
113
|
+
item[0]["c"].last
|
114
|
+
elsif lista_nao_ordenada?(lista)
|
115
|
+
item[0]["c"].last
|
116
|
+
else
|
117
|
+
nil
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def utiliza_ponto?(lista)
|
122
|
+
# lista["c"][0]: [1,{"t":"LowerAlpha"},{"t":"Period"}]
|
123
|
+
lista_ordenada?(lista) and lista["c"][0][2]["t"] == "Period"
|
124
|
+
end
|
125
|
+
|
126
|
+
def utiliza_parenteses!(lista)
|
127
|
+
lista["c"][0][2]["t"] = "OneParen"
|
128
|
+
end
|
129
|
+
|
130
|
+
|
131
|
+
end
|
132
|
+
end
|
data/lib/pandoc_abnt/version.rb
CHANGED
data/lib/pandoc_abnt.rb
CHANGED
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: 0.
|
4
|
+
version: 0.3.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-
|
11
|
+
date: 2017-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -101,6 +101,7 @@ files:
|
|
101
101
|
- exe/pandoc_abnt
|
102
102
|
- lib/pandoc_abnt.rb
|
103
103
|
- lib/pandoc_abnt/figura_filter.rb
|
104
|
+
- lib/pandoc_abnt/lista_filter.rb
|
104
105
|
- lib/pandoc_abnt/version.rb
|
105
106
|
- pandoc_abnt.gemspec
|
106
107
|
homepage: https://github.com/edusantana/pandoc_abnt
|
@@ -118,9 +119,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
119
|
version: '0'
|
119
120
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
121
|
requirements:
|
121
|
-
- - "
|
122
|
+
- - ">"
|
122
123
|
- !ruby/object:Gem::Version
|
123
|
-
version:
|
124
|
+
version: 1.3.1
|
124
125
|
requirements: []
|
125
126
|
rubyforge_project:
|
126
127
|
rubygems_version: 2.5.1
|