formatafacil 0.1.6 → 0.2.0
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/.gitignore +1 -0
- data/README.md +3 -1
- data/Rakefile +6 -0
- data/exe/formatafacil +47 -23
- data/formatafacil.gemspec +3 -4
- data/lib/formatafacil/artigo_tarefa.rb +197 -49
- data/lib/formatafacil/tarefa.rb +2 -8
- data/lib/formatafacil/tarefa_chooser.rb +23 -5
- data/lib/formatafacil/tarefa_modelos.rb +19 -0
- data/lib/formatafacil/template.rb +32 -8
- data/lib/formatafacil/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0c096c752a0a20eb444229017b59b49407a1210
|
4
|
+
data.tar.gz: e2faf09f89169c392d85e53970e5fe076ca0bdfb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5646799638b07ae838c50dfe1c3d711197725cd4416b9195779cb43d4533eb210bcab6202c75b059529ac991ef96fae0a1a4075a53c5f60b8de1be627f0e8509
|
7
|
+
data.tar.gz: e34642c90598f4528495cb2b1513f5d72cb143097c374c744665a8666c809b965713db058f8dcbb74369b75b98b9b4fa99a594eeadb15c2fc569fca1664d46ef
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -19,6 +19,8 @@ Or install it yourself as:
|
|
19
19
|
|
20
20
|
## Dependência
|
21
21
|
|
22
|
+
- `pandoc` para gerar os códigos latex
|
23
|
+
- `pdflatex` - para compilar texto em pdf
|
22
24
|
- `qpdf` se deseja compilar pdf otimizados para web
|
23
25
|
|
24
26
|
## Usage
|
@@ -60,7 +62,7 @@ Cria um diretório e estrutura de um artigo no formato do sbc:
|
|
60
62
|
|
61
63
|
## make configuration easy for advanced users
|
62
64
|
|
63
|
-
TODO
|
65
|
+
TODO
|
64
66
|
|
65
67
|
## install and distribute painlessly
|
66
68
|
|
data/Rakefile
CHANGED
data/exe/formatafacil
CHANGED
@@ -7,6 +7,7 @@ require "formatafacil"
|
|
7
7
|
require 'formatafacil/template'
|
8
8
|
require 'formatafacil/artigo_tarefa'
|
9
9
|
require 'formatafacil/tarefa_chooser'
|
10
|
+
require 'formatafacil/tarefa_modelos'
|
10
11
|
require 'formatafacil/compila'
|
11
12
|
require 'formatafacil/otimizador_para_web'
|
12
13
|
|
@@ -24,13 +25,13 @@ switch :logfile
|
|
24
25
|
|
25
26
|
desc 'Gera artigos em latex e compila para pdf'
|
26
27
|
command :artigo do |c|
|
27
|
-
|
28
|
+
|
28
29
|
c.desc 'Gera o arquivo pdf compilando o arquivo latex'
|
29
30
|
c.switch :pdf
|
30
|
-
|
31
|
+
|
31
32
|
c.desc 'Seleciona o modelo do artigo'
|
32
33
|
c.flag [:m,:modelo]
|
33
|
-
|
34
|
+
|
34
35
|
c.action do |global,options,args|
|
35
36
|
if (global['logfile'])
|
36
37
|
logger = Logger.new('formatafacil.log')
|
@@ -38,7 +39,7 @@ command :artigo do |c|
|
|
38
39
|
logger = Logger.new(STDERR)
|
39
40
|
end
|
40
41
|
logger.level = Logger::WARN
|
41
|
-
|
42
|
+
|
42
43
|
begin
|
43
44
|
tarefa = Formatafacil::ArtigoTarefa.new()
|
44
45
|
tarefa.logger = logger
|
@@ -47,11 +48,11 @@ command :artigo do |c|
|
|
47
48
|
logger.error {e.message}
|
48
49
|
end
|
49
50
|
end
|
50
|
-
|
51
|
+
|
51
52
|
end
|
52
53
|
|
53
54
|
|
54
|
-
desc '
|
55
|
+
desc 'Compila artigo para pdf'
|
55
56
|
command :compila do |c|
|
56
57
|
|
57
58
|
c.desc 'Possíveis valores: artigo'
|
@@ -59,46 +60,43 @@ command :compila do |c|
|
|
59
60
|
|
60
61
|
c.desc 'Linealiza o pdf otimizando-o para web'
|
61
62
|
c.switch [:w, 'otimiza-para-web']
|
62
|
-
|
63
|
-
|
63
|
+
|
64
|
+
|
64
65
|
c.action do |global,options,args|
|
65
|
-
|
66
|
+
|
66
67
|
if (global['logfile'])
|
67
68
|
logger = Logger.new('formatafacil.log')
|
68
69
|
else
|
69
70
|
logger = Logger.new(STDOUT)
|
70
71
|
end
|
71
|
-
|
72
|
+
|
72
73
|
begin
|
73
74
|
Formatafacil::Compila.new().compila_artigo
|
74
75
|
if (options['w'])
|
75
76
|
logger.info "Otimizando para web: #{Formatafacil::ARTIGO_PDF}"
|
76
|
-
Formatafacil::OtimizadorParaWeb.new(Formatafacil::ARTIGO_PDF).otimiza
|
77
|
+
Formatafacil::OtimizadorParaWeb.new(Formatafacil::ARTIGO_PDF).otimiza
|
77
78
|
end
|
78
79
|
rescue Exception => e
|
79
80
|
logger.error {e.message}
|
80
81
|
end
|
81
|
-
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
82
|
|
83
|
+
end
|
87
84
|
|
85
|
+
end
|
88
86
|
|
89
87
|
desc 'Auto detecta o comando com base no arquivo de configuração'
|
90
88
|
command :auto do |c|
|
91
|
-
|
92
|
-
|
89
|
+
|
90
|
+
|
93
91
|
c.action do |global,options,args|
|
94
|
-
|
92
|
+
|
95
93
|
if (global['logfile'])
|
96
94
|
logger = Logger.new('formatafacil.log')
|
97
95
|
else
|
98
96
|
logger = Logger.new(STDERR)
|
99
97
|
end
|
100
98
|
logger.level = Logger::WARN
|
101
|
-
|
99
|
+
|
102
100
|
begin
|
103
101
|
tarefa = Formatafacil::TarefaChooser.new().escolhe_tarefa
|
104
102
|
tarefa.logger = logger
|
@@ -106,10 +104,36 @@ command :auto do |c|
|
|
106
104
|
rescue Exception => e
|
107
105
|
logger.error {e.message}
|
108
106
|
end
|
109
|
-
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
desc 'Lista modelos disponíveis'
|
115
|
+
command :modelos do |c|
|
116
|
+
|
117
|
+
c.action do |global,options,args|
|
118
|
+
|
119
|
+
if (global['logfile'])
|
120
|
+
logger = Logger.new('formatafacil.log')
|
121
|
+
else
|
122
|
+
logger = Logger.new(STDERR)
|
123
|
+
end
|
124
|
+
logger.level = Logger::WARN
|
125
|
+
|
126
|
+
begin
|
127
|
+
tarefa = Formatafacil::TarefaModelos.new()
|
128
|
+
tarefa.logger = logger
|
129
|
+
tarefa.executa
|
130
|
+
rescue Exception => e
|
131
|
+
logger.error {e.message}
|
132
|
+
end
|
133
|
+
|
110
134
|
end
|
111
|
-
|
135
|
+
|
112
136
|
end
|
113
137
|
|
114
138
|
|
115
|
-
exit run(ARGV)
|
139
|
+
exit run(ARGV)
|
data/formatafacil.gemspec
CHANGED
@@ -8,11 +8,11 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.version = Formatafacil::VERSION
|
9
9
|
spec.authors = ["Eduardo de Santana Medeiros Alexandre"]
|
10
10
|
spec.email = ["eduardo.ufpb@gmail.com"]
|
11
|
-
|
11
|
+
|
12
12
|
if spec.respond_to?(:metadata)
|
13
13
|
#spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com' to prevent pushes to rubygems.org, or delete to allow pushes to any server."
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
spec.summary = %q{Compila arquivos escritos em Markdown para formatos.}
|
17
17
|
spec.description = %q{Com essa ferramenta você poderá compilar trabalhos de conclusão de curso (monografia, dissertação ou tese) ou artigos com as normas da ABNT ou outra específica }
|
18
18
|
spec.homepage = "https://github.com/formatafacil/formatafacil"
|
@@ -25,9 +25,8 @@ Gem::Specification.new do |spec|
|
|
25
25
|
|
26
26
|
spec.add_development_dependency "bundler", "~> 1.8"
|
27
27
|
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
-
|
29
28
|
spec.add_development_dependency "rspec"
|
30
|
-
|
29
|
+
|
31
30
|
spec.add_dependency "gli"
|
32
31
|
spec.add_dependency "formatafacil-templates"
|
33
32
|
|
@@ -7,63 +7,77 @@ require 'yaml'
|
|
7
7
|
require 'json'
|
8
8
|
|
9
9
|
module Formatafacil
|
10
|
-
|
10
|
+
|
11
11
|
class ArtigoTarefa < Tarefa
|
12
12
|
attr_accessor 'modelo'
|
13
|
+
attr_accessor 'metadados'
|
14
|
+
attr_accessor 'bibliografia'
|
15
|
+
attr_accessor 'texto'
|
16
|
+
attr_accessor 'resumo'
|
17
|
+
attr_accessor 'abstract'
|
18
|
+
|
13
19
|
attr_accessor 'artigo' # conteúdo lidos os arquivos
|
14
20
|
attr_accessor 'artigo_latex' # conteúdo convertido
|
15
|
-
|
21
|
+
# conteúdo convertido
|
22
|
+
|
16
23
|
attr_accessor 'arquivo_texto'
|
17
24
|
attr_accessor 'arquivo_resumo'
|
18
25
|
attr_accessor 'arquivo_abstract'
|
19
|
-
attr_accessor 'arquivo_ingles'
|
20
26
|
attr_accessor 'arquivo_bibliografia'
|
27
|
+
# Arquivo padrão de leitura dos metadados: metadados.yaml
|
28
|
+
attr_accessor 'arquivo_metadados'
|
21
29
|
attr_accessor 'arquivo_saida_yaml'
|
22
30
|
attr_accessor 'arquivo_saida_pdf'
|
23
31
|
attr_accessor 'arquivo_saida_latex'
|
24
32
|
|
33
|
+
##
|
34
|
+
# Um parâmetro obrigatório é o modelo do artigo
|
35
|
+
#
|
25
36
|
def initialize(h={})
|
26
|
-
@
|
27
|
-
@
|
28
|
-
@arquivo_abstract = 'config/abstract.md'
|
29
|
-
@arquivo_ingles = 'config/ingles.yaml'
|
37
|
+
@arquivo_resumo = 'resumo.md'
|
38
|
+
@arquivo_abstract = 'abstract.md'
|
30
39
|
@arquivo_bibliografia ='bibliografia.md'
|
40
|
+
@arquivo_metadados = 'metadados.yaml'
|
31
41
|
@arquivo_saida_yaml = 'artigo.yaml'
|
32
42
|
@arquivo_saida_pdf = 'artigo.pdf'
|
33
43
|
@arquivo_saida_latex = 'artigo.tex'
|
34
44
|
@artigo = {}
|
35
45
|
@artigo_latex = {}
|
46
|
+
@metadados = {}
|
36
47
|
h.each {|k,v| send("#{k}=",v)}
|
48
|
+
@arquivo_texto = "#{modelo}.md"
|
37
49
|
end
|
38
|
-
|
50
|
+
|
39
51
|
def executa
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
converte_configuracao_para_latex
|
46
|
-
salva_configuracao_yaml_para_inclusao_em_pandoc
|
47
|
-
executa_pandoc_salvando_latex
|
48
|
-
executa_pdflatex
|
52
|
+
verifica_conteudos
|
53
|
+
unifica_metadados
|
54
|
+
escreve_artigo_latex
|
55
|
+
#ler_configuracao
|
56
|
+
#executa_com_configuracao
|
49
57
|
end
|
50
|
-
|
58
|
+
|
59
|
+
##
|
51
60
|
# Ler as configurações dos arquivos:
|
52
61
|
#
|
53
62
|
# @arquivo_resumo
|
54
63
|
def ler_configuracao
|
55
|
-
|
56
|
-
converte_parametros_para_boolean
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
64
|
+
#@artigo.merge!(YAML.load(ler_arquivo(Formatafacil::Tarefa.arquivo_configuracao)))
|
65
|
+
#converte_parametros_para_boolean
|
66
|
+
|
67
|
+
#@modelo = @artigo['modelo']
|
68
|
+
if File.exist?(@arquivo_abstract) then
|
69
|
+
@artigo['abstract'] = ler_arquivo(@arquivo_abstract)
|
70
|
+
@artigo.merge!(ler_metadados_do_arquivo(@arquivo_abstract))
|
71
|
+
end
|
72
|
+
if File.exist?(@arquivo_resumo) then
|
73
|
+
@artigo['resumo'] = ler_arquivo(@arquivo_resumo)
|
74
|
+
end
|
75
|
+
@artigo['bibliografia'] = ler_arquivo(@arquivo_bibliografia) if File.exist?(@arquivo_bibliografia)
|
76
|
+
|
77
|
+
#unifica_metadados
|
78
|
+
|
79
|
+
end
|
80
|
+
|
67
81
|
def ler_metadados_do_arquivo(arquivo)
|
68
82
|
result = {}
|
69
83
|
meta = JSON.parse(`pandoc -t json #{arquivo}`)[0]['unMeta']
|
@@ -72,7 +86,119 @@ module Formatafacil
|
|
72
86
|
end
|
73
87
|
result
|
74
88
|
end
|
75
|
-
|
89
|
+
|
90
|
+
##
|
91
|
+
# Converte os arquivos secundários para latex, e salva junto com os
|
92
|
+
# blocos yaml no hash +metadados+.
|
93
|
+
#
|
94
|
+
def unifica_metadados
|
95
|
+
#salva_resumo_em_metadados
|
96
|
+
#salva_blocos_de_metadados
|
97
|
+
@metadados['resumo'] = converte_conteudo_para_latex(@resumo)
|
98
|
+
@metadados['abstract'] = converte_conteudo_para_latex(@abstract)
|
99
|
+
@metadados['bibliografia'] = converte_conteudo_para_latex(@bibliografia)
|
100
|
+
@metadados.merge!(extrai_blocos_yaml(@abstract))
|
101
|
+
end
|
102
|
+
|
103
|
+
def modelos
|
104
|
+
Formatafacil::Template.new().artigo_modelos
|
105
|
+
end
|
106
|
+
|
107
|
+
def exporta_conteudo_markdown
|
108
|
+
"#{@texto}\n#{@metadados.to_yaml}---\n"
|
109
|
+
end
|
110
|
+
|
111
|
+
def converte_artigo_para_latex
|
112
|
+
result = ""
|
113
|
+
t = Formatafacil::Template.new()
|
114
|
+
Open3.popen3("pandoc --smart --standalone --no-wrap --data-dir=#{t.directory} --template=#{modelo} -f markdown -t latex") {|stdin, stdout, stderr, wait_thr|
|
115
|
+
pid = wait_thr.pid # pid of the started process.
|
116
|
+
stdin.write exporta_conteudo_markdown
|
117
|
+
stdin.close
|
118
|
+
result = stdout.read
|
119
|
+
}
|
120
|
+
result
|
121
|
+
end
|
122
|
+
|
123
|
+
def converte_conteudo_para_latex(conteudo)
|
124
|
+
result = ""
|
125
|
+
Open3.popen3("pandoc --smart -f markdown -t latex") {|stdin, stdout, stderr, wait_thr|
|
126
|
+
pid = wait_thr.pid # pid of the started process.
|
127
|
+
stdin.write conteudo
|
128
|
+
stdin.close
|
129
|
+
result = stdout.read
|
130
|
+
}
|
131
|
+
result.strip
|
132
|
+
end
|
133
|
+
|
134
|
+
private
|
135
|
+
|
136
|
+
def escreve_artigo_latex
|
137
|
+
#File.open('artigo.tex', 'w'){|f| f.write('Primeira seção aqui')}
|
138
|
+
#File.open(@arquivo_saida_latex, 'w') {|f| f.write (converte_artigo_para_latex)}
|
139
|
+
File.open('artigo.tex', 'w') {|f| f.write (converte_artigo_para_latex)}
|
140
|
+
end
|
141
|
+
|
142
|
+
# Se não houver conteúdos, tentar ler dos arquivos correspondentes
|
143
|
+
def verifica_conteudos
|
144
|
+
identifica_modelo
|
145
|
+
File.open(@arquivo_texto, 'r') {|f| @texto = f.read} if @texto.nil?
|
146
|
+
File.open(@arquivo_resumo, 'r') {|f| @resumo = f.read} if @resumo.nil?
|
147
|
+
File.open(@arquivo_abstract, 'r') {|f| @abstract = f.read} if @abstract.nil?
|
148
|
+
File.open(@arquivo_bibliografia, 'r') {|f| @bibliografia = f.read} if @bibliografia.nil?
|
149
|
+
File.open(@arquivo_metadados, 'r') {|f| @metadados = YAML.load(f.read)} if @metadados.empty?
|
150
|
+
end
|
151
|
+
|
152
|
+
def identifica_modelo
|
153
|
+
if (@modelo.nil?) then
|
154
|
+
t = Formatafacil::Template.new()
|
155
|
+
@modelo = t.procura_modelo_de_artigo
|
156
|
+
if (@modelo.nil?) then
|
157
|
+
raise "Modelo não encontrado. Modelos disponíveis: #{t.list_names}"
|
158
|
+
end
|
159
|
+
end
|
160
|
+
@arquivo_texto = "#{@modelo}.md"
|
161
|
+
end
|
162
|
+
|
163
|
+
##
|
164
|
+
# Returna um hash contendo os conteúdos lidos dos blocos yaml.
|
165
|
+
#
|
166
|
+
def extrai_blocos_yaml(conteudo)
|
167
|
+
result = {}
|
168
|
+
Open3.popen3("pandoc -t json") {|stdin, stdout, stderr, wait_thr|
|
169
|
+
pid = wait_thr.pid # pid of the started process.
|
170
|
+
stdin.write conteudo
|
171
|
+
stdin.close
|
172
|
+
meta = JSON.parse(stdout.read)[0]['unMeta']
|
173
|
+
meta.each do |k,v|
|
174
|
+
result[k]=converte_valor_da_arvore_pandoc(v)
|
175
|
+
end
|
176
|
+
}
|
177
|
+
result
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
def salva_blocos_de_metadados
|
182
|
+
[@resumo].each {|texto|
|
183
|
+
Open3.popen3("pandoc -t json -f markdown") {|stdin, stdout, stderr, wait_thr|
|
184
|
+
pid = wait_thr.pid # pid of the started process.
|
185
|
+
stdin.write texto
|
186
|
+
|
187
|
+
stdin.close
|
188
|
+
|
189
|
+
conteudo = stdout.read
|
190
|
+
meta = JSON.parse(conteudo)[0]['unMeta']
|
191
|
+
puts "\nMeta: #{meta}"
|
192
|
+
puts "\nmetadados: #{@metadados}"
|
193
|
+
meta.each do |k,v|
|
194
|
+
#result[k]=converte_valor_da_arvore_pandoc(v)
|
195
|
+
#@metadados[k] = converte_valor_da_arvore_pandoc(v)
|
196
|
+
@metadados[k] = v
|
197
|
+
end
|
198
|
+
}
|
199
|
+
}
|
200
|
+
end
|
201
|
+
|
76
202
|
def converte_valor_da_arvore_pandoc(node)
|
77
203
|
# {"boo_false"=>{"t"=>"MetaBool", "c"=>false}, "boo_true"=>{"t"=>"MetaBool", "c"=>true}, "nome_do_parametro"=>{"t"=>"MetaInlines", "c"=>[{"t"=>"Str", "c"=>"valor"}, {"t"=>"Space", "c"=>[]}, {"t"=>"Str", "c"=>"do"}, {"t"=>"Space", "c"=>[]}, {"t"=>"Str", "c"=>"parâmetro"}]}, "numero"=>{"t"=>"MetaString", "c"=>"15"}}
|
78
204
|
result = nil
|
@@ -104,13 +230,13 @@ module Formatafacil
|
|
104
230
|
end
|
105
231
|
result
|
106
232
|
end
|
107
|
-
|
233
|
+
|
108
234
|
def ler_arquivo(arquivo)
|
109
235
|
result = ""
|
110
236
|
File.open(arquivo, 'r') { |f| result = f.read }
|
111
237
|
result
|
112
238
|
end
|
113
|
-
|
239
|
+
|
114
240
|
def converte_parametros_para_boolean
|
115
241
|
['incluir_abstract'].each do |param|
|
116
242
|
case @artigo[param]
|
@@ -125,12 +251,15 @@ module Formatafacil
|
|
125
251
|
end
|
126
252
|
end
|
127
253
|
end
|
128
|
-
|
254
|
+
|
255
|
+
##
|
256
|
+
# Converte os arquivos de texto markdown para texto latex
|
257
|
+
#
|
129
258
|
def converte_configuracao_para_latex
|
130
259
|
@artigo_latex.merge!(@artigo)
|
131
|
-
|
260
|
+
|
132
261
|
['resumo','abstract','bibliografia'].each {|key|
|
133
|
-
Open3.popen3("pandoc --smart -f markdown -t latex") {|stdin, stdout, stderr, wait_thr|
|
262
|
+
Open3.popen3("pandoc --smart -f markdown -t latex --no-wrap") {|stdin, stdout, stderr, wait_thr|
|
134
263
|
pid = wait_thr.pid # pid of the started process.
|
135
264
|
stdin.write @artigo[key]
|
136
265
|
stdin.close
|
@@ -139,28 +268,47 @@ module Formatafacil
|
|
139
268
|
}
|
140
269
|
end
|
141
270
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
file.write @artigo_latex.to_yaml
|
148
|
-
file.write("---\n")
|
149
|
-
}
|
271
|
+
def executa_com_configuracao
|
272
|
+
converte_configuracao_para_latex
|
273
|
+
salva_configuracao_yaml_para_inclusao_em_pandoc
|
274
|
+
executa_pandoc_salvando_latex
|
275
|
+
executa_pdflatex
|
150
276
|
end
|
151
277
|
|
152
|
-
|
153
278
|
def executa_pandoc_salvando_latex
|
154
279
|
t = Formatafacil::Template.new()
|
155
280
|
data_dir = t.directory
|
156
|
-
|
157
|
-
|
281
|
+
|
282
|
+
Open3.popen3("pandoc --smart --standalone --data-dir=#{data_dir} --template=#{modelo} -f markdown -t latex -o #{@arquivo_saida_latex}") {|stdin, stdout, stderr, wait_thr|
|
283
|
+
pid = wait_thr.pid # pid of the started process.
|
284
|
+
stdin.write @texto
|
285
|
+
# yaml com metados:
|
286
|
+
stdin.write "\n"
|
287
|
+
stdin.write @artigo_latex.to_yaml
|
288
|
+
stdin.write("---\n")
|
289
|
+
|
290
|
+
stdin.close
|
291
|
+
# stdout.read
|
292
|
+
}
|
293
|
+
# system "pandoc --smart -s #{@arquivo_texto} #{@arquivo_saida_yaml} --data-dir=#{data_dir} --template=#{modelo} -f markdown -t latex -o #{@arquivo_saida_latex}"
|
158
294
|
end
|
159
|
-
|
295
|
+
|
160
296
|
def executa_pdflatex
|
161
297
|
#system "pdflatex #{@arquivo_saida_latex}"
|
162
298
|
#system "pdflatex #{@arquivo_saida_latex}"
|
163
299
|
end
|
164
|
-
|
300
|
+
|
301
|
+
# Precisa gerar arquivos com quebra de linha antes e depois
|
302
|
+
# porque pandoc utiliza
|
303
|
+
def salva_configuracao_yaml_para_inclusao_em_pandoc
|
304
|
+
File.open(@arquivo_saida_yaml, 'w'){ |file|
|
305
|
+
file.write("\n")
|
306
|
+
file.write @artigo_latex.to_yaml
|
307
|
+
file.write("---\n")
|
308
|
+
}
|
309
|
+
end
|
310
|
+
|
311
|
+
|
312
|
+
|
165
313
|
end
|
166
314
|
end
|
data/lib/formatafacil/tarefa.rb
CHANGED
@@ -3,19 +3,13 @@
|
|
3
3
|
module Formatafacil
|
4
4
|
class Tarefa
|
5
5
|
attr_accessor :logger
|
6
|
-
|
6
|
+
|
7
7
|
def initialize(h={})
|
8
8
|
h.each {|k,v| send("#{k}=",v)}
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
def executa
|
12
12
|
end
|
13
|
-
|
14
|
-
|
15
|
-
def self.arquivo_configuracao
|
16
|
-
'config/1-configuracoes-gerais.yaml'
|
17
|
-
end
|
18
13
|
|
19
|
-
|
20
14
|
end
|
21
15
|
end
|
@@ -7,15 +7,33 @@ module Formatafacil
|
|
7
7
|
class ArquivoConfiguracaoAusenteException < Exception
|
8
8
|
end
|
9
9
|
|
10
|
+
##
|
11
|
+
# Não encontrou um arquivo de texto com base nos modelos disponíveis.
|
12
|
+
#
|
13
|
+
class ArquivoDeTextoNaoEncontradoException < Exception
|
14
|
+
end
|
15
|
+
|
16
|
+
|
10
17
|
class TarefaChooser
|
11
18
|
|
12
19
|
def escolhe_tarefa
|
13
|
-
|
14
|
-
|
20
|
+
Formatafacil::TarefaModelos.new().modelos_disponiveis.each do |modelo|
|
21
|
+
if existe_arquivo_de_texto?(markdown_file(modelo)) then
|
22
|
+
return Formatafacil::ArtigoTarefa.new(modelo: modelo)
|
23
|
+
else
|
24
|
+
raise ArquivoDeTextoNaoEncontradoException
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def markdown_file(file)
|
30
|
+
"#{file}.md"
|
31
|
+
end
|
32
|
+
|
33
|
+
def existe_arquivo_de_texto?(arquivo)
|
34
|
+
File.exist?(arquivo)
|
15
35
|
end
|
16
|
-
|
36
|
+
|
17
37
|
end
|
18
|
-
|
19
|
-
|
20
38
|
|
21
39
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'formatafacil/tarefa'
|
4
|
+
|
5
|
+
module Formatafacil
|
6
|
+
|
7
|
+
class TarefaModelos < Tarefa
|
8
|
+
|
9
|
+
def executa
|
10
|
+
modelos_disponiveis.each {|n| puts n}
|
11
|
+
end
|
12
|
+
|
13
|
+
def modelos_disponiveis
|
14
|
+
Formatafacil::Template.new().list_names()
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
@@ -4,18 +4,18 @@ require 'formatafacil/tarefa'
|
|
4
4
|
|
5
5
|
module Formatafacil
|
6
6
|
class Template
|
7
|
-
|
7
|
+
|
8
8
|
attr_accessor 'modelos'
|
9
9
|
# Derectory of templates
|
10
10
|
attr_accessor 'directory'
|
11
|
-
|
11
|
+
|
12
12
|
def initialize()
|
13
13
|
@modelos = {}
|
14
14
|
|
15
15
|
# ler os templates do projeto formatafacil-templates
|
16
|
-
$LOAD_PATH.each { |dir|
|
16
|
+
$LOAD_PATH.each { |dir|
|
17
17
|
files = Dir["#{dir}/formatafacil/templates/*.latex"]
|
18
|
-
files.each { |file|
|
18
|
+
files.each { |file|
|
19
19
|
if file
|
20
20
|
@modelos[File.basename(file, '.tex')] = file
|
21
21
|
@directory = "#{dir}/formatafacil"
|
@@ -24,14 +24,38 @@ module Formatafacil
|
|
24
24
|
}
|
25
25
|
|
26
26
|
end
|
27
|
-
|
28
|
-
|
27
|
+
|
28
|
+
# Procura por um arquivo que possua o mesmo nome de um modelo.
|
29
|
+
# Retorna o modelo com base no arquivo encontrado ou nil se não encontrou.
|
30
|
+
# O nome do arquivo procurado será: "#{modelo}.md"
|
31
|
+
def procura_modelo_de_artigo
|
32
|
+
arquivo = nil
|
33
|
+
artigo_modelos.each do |modelo|
|
34
|
+
return modelo if File.exist?("#{modelo}.md")
|
35
|
+
end
|
36
|
+
arquivo
|
29
37
|
end
|
30
|
-
|
38
|
+
|
31
39
|
# $LOAD_PATH.each { |dir| ... look for resources relative to dir ... }
|
32
40
|
def list
|
33
41
|
modelos.keys
|
34
42
|
end
|
43
|
+
|
44
|
+
def artigo_modelos
|
45
|
+
modelos_de_artigos = []
|
46
|
+
list_names.each do |modelo|
|
47
|
+
modelos_de_artigos << modelo if modelo.start_with?('artigo')
|
48
|
+
end
|
49
|
+
modelos_de_artigos
|
50
|
+
end
|
51
|
+
|
52
|
+
def list_names
|
53
|
+
names = []
|
54
|
+
modelos.keys.each do |file|
|
55
|
+
names << File.basename(file, ".latex")
|
56
|
+
end
|
57
|
+
names
|
58
|
+
end
|
35
59
|
end
|
36
|
-
|
60
|
+
|
37
61
|
end
|
data/lib/formatafacil/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: formatafacil
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
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: 2015-
|
11
|
+
date: 2015-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -116,6 +116,7 @@ files:
|
|
116
116
|
- lib/formatafacil/otimizador_para_web.rb
|
117
117
|
- lib/formatafacil/tarefa.rb
|
118
118
|
- lib/formatafacil/tarefa_chooser.rb
|
119
|
+
- lib/formatafacil/tarefa_modelos.rb
|
119
120
|
- lib/formatafacil/template.rb
|
120
121
|
- lib/formatafacil/version.rb
|
121
122
|
homepage: https://github.com/formatafacil/formatafacil
|
@@ -138,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
139
|
version: '0'
|
139
140
|
requirements: []
|
140
141
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.4.
|
142
|
+
rubygems_version: 2.4.8
|
142
143
|
signing_key:
|
143
144
|
specification_version: 4
|
144
145
|
summary: Compila arquivos escritos em Markdown para formatos.
|