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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ce7f9ba40dcb48bedf24b8a2dd9d4f22d2ecada5
4
- data.tar.gz: d70bf893e2c183c68de5e35655bc71b980c9e4cb
3
+ metadata.gz: 23b4847f2f2578c6e369c5ccb0b9f0ec646f9b42
4
+ data.tar.gz: b9fc078a5dd6bffcd262815e14c340f92fb5ab62
5
5
  SHA512:
6
- metadata.gz: f3873b2ced1f294630ba5ec7e34b486cd952b326de95a464f92777ad652c0bfe6d2b48c9c4d63749ba1b17f0c1bf9e889bdec62b727759e6950ba2cd4f7d38f4
7
- data.tar.gz: f9eb08f9af18cb6a37c32e1eeace28876c04defcd411a6ddab172746b05c22700bdb35f5de83574b93cc33ac63389e593e8676f4e6b8f1aabed6d391c6b48b43
6
+ metadata.gz: 0b1e3182584780632ae8d3e1094287b71118697f9ac9e5ed91588f9ea8f2c438d4a00b725b325cb503e8527ed5109b68666ee30d14218e4a2b1e0030963954ca
7
+ data.tar.gz: 8e92c6e60b6c479d9bc76427e4ca1565bd9ea4caf56e1da3a48fc1d763e900cb493c5e0ab8cd793a3733c3ad1caa4e3b42da4ee91755d5197a5d0c50bdbb8ae3
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --format documentation
2
2
  --color
3
+ #--out rspec.txt
data/README.md CHANGED
@@ -25,7 +25,45 @@ Requer pandoc `v1.19.2.1`.
25
25
 
26
26
  ## Usage
27
27
 
28
- TODO: Write usage instructions here
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
- ff = PandocAbnt::FiguraFilter.new
9
+ figura_filtradas = PandocAbnt::FiguraFilter.new.filtra_json(STDIN.read)
11
10
 
12
- $stdout << ff.filtra_json(STDIN.read)
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
@@ -1,3 +1,3 @@
1
1
  module PandocAbnt
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0.pre"
3
3
  end
data/lib/pandoc_abnt.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "pandoc_abnt/version"
2
2
  require "pandoc_abnt/figura_filter"
3
+ require "pandoc_abnt/lista_filter"
3
4
 
4
5
  module PandocAbnt
5
6
  # Your code goes here...
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.2.1
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-12 00:00:00.000000000 Z
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: '0'
124
+ version: 1.3.1
124
125
  requirements: []
125
126
  rubyforge_project:
126
127
  rubygems_version: 2.5.1