pandoc_abnt 0.2.1 → 0.3.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 +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
|
+
{#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
|