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