class Formatafacil::ArtigoTarefa
Attributes
abstract[RW]
arquivo_abstract[RW]
arquivo_bibliografia[RW]
arquivo_metadados[RW]
Arquivo padrão de leitura dos metadados: metadados.yaml
arquivo_resumo[RW]
arquivo_saida_latex[RW]
arquivo_saida_pdf[RW]
arquivo_saida_yaml[RW]
arquivo_texto[RW]
conteúdo convertido
artigo[RW]
artigo_latex[RW]
bibliografia[RW]
compilador[RW]
Tarefa
que pode ser encadeada para compilar o artigo para pdf
metadados[RW]
modelo[RW]
resumo[RW]
texto[RW]
Public Class Methods
new(h={})
click to toggle source
Um parâmetro obrigatório é o modelo do artigo
# File lib/formatafacil/artigo_tarefa.rb, line 46 def initialize(h={}) @arquivo_resumo = 'resumo.md' @arquivo_abstract = 'abstract.md' @arquivo_bibliografia ='bibliografia.md' @arquivo_metadados = 'metadados.yaml' @arquivo_saida_yaml = 'artigo.yaml' @arquivo_saida_pdf = 'artigo.pdf' @arquivo_saida_latex = 'artigo.tex' @artigo = {} @artigo_latex = {} @metadados = {} h.each {|k,v| send("#{k}=",v)} @arquivo_texto = "#{modelo}.md" end
Public Instance Methods
converte_artigo_para_latex()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 122 def converte_artigo_para_latex result = "" t = Formatafacil::Template.new() Open3.popen3("pandoc --smart --standalone --no-wrap --data-dir=#{t.directory} --template=#{modelo} -f markdown -t latex") {|stdin, stdout, stderr, wait_thr| pid = wait_thr.pid # pid of the started process. stdin.write exporta_conteudo_markdown stdin.close result = stdout.read } result end
converte_conteudo_para_latex(conteudo)
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 134 def converte_conteudo_para_latex(conteudo) result = "" Open3.popen3("pandoc --smart -f markdown -t latex") {|stdin, stdout, stderr, wait_thr| pid = wait_thr.pid # pid of the started process. stdin.write conteudo stdin.close result = stdout.read } result.strip end
executa()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 61 def executa verifica_conteudos unifica_metadados escreve_artigo_latex compila_pdf #ler_configuracao #executa_com_configuracao end
exporta_conteudo_markdown()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 118 def exporta_conteudo_markdown "#{@texto}\n#{@metadados.to_yaml}---\n" end
ler_configuracao()
click to toggle source
Ler as configurações dos arquivos:
@arquivo_resumo
# File lib/formatafacil/artigo_tarefa.rb, line 74 def ler_configuracao #@artigo.merge!(YAML.load(ler_arquivo(Formatafacil::Tarefa.arquivo_configuracao))) #converte_parametros_para_boolean #@modelo = @artigo['modelo'] if File.exist?(@arquivo_abstract) then @artigo['abstract'] = ler_arquivo(@arquivo_abstract) @artigo.merge!(ler_metadados_do_arquivo(@arquivo_abstract)) end if File.exist?(@arquivo_resumo) then @artigo['resumo'] = ler_arquivo(@arquivo_resumo) end @artigo['bibliografia'] = ler_arquivo(@arquivo_bibliografia) if File.exist?(@arquivo_bibliografia) #unifica_metadados end
ler_metadados_do_arquivo(arquivo)
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 92 def ler_metadados_do_arquivo(arquivo) result = {} meta = JSON.parse(`pandoc -t json #{arquivo}`)[0]['unMeta'] meta.each do |k,v| result[k]=converte_valor_da_arvore_pandoc(v) end result end
modelos()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 114 def modelos Formatafacil::Template.new().artigo_modelos end
unifica_metadados()
click to toggle source
Converte os arquivos secundários para latex, e salva junto com os blocos yaml no hash metadados
.
# File lib/formatafacil/artigo_tarefa.rb, line 105 def unifica_metadados #salva_resumo_em_metadados #salva_blocos_de_metadados @metadados['resumo'] = converte_conteudo_para_latex(@resumo) @metadados['abstract'] = converte_conteudo_para_latex(@abstract) @metadados['bibliografia'] = converte_conteudo_para_latex(@bibliografia) @metadados.merge!(extrai_blocos_yaml(@abstract)) end
Private Instance Methods
compila_pdf()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 348 def compila_pdf @compilador.compila_artigo unless @compilador.nil? end
converte_configuracao_para_latex()
click to toggle source
Converte os arquivos de texto markdown para texto latex
# File lib/formatafacil/artigo_tarefa.rb, line 295 def converte_configuracao_para_latex @artigo_latex.merge!(@artigo) ['resumo','abstract','bibliografia'].each {|key| Open3.popen3("pandoc --smart -f markdown -t latex --no-wrap") {|stdin, stdout, stderr, wait_thr| pid = wait_thr.pid # pid of the started process. stdin.write @artigo[key] stdin.close @artigo_latex[key] = stdout.read } } end
converte_parametros_para_boolean()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 277 def converte_parametros_para_boolean ['incluir_abstract'].each do |param| case @artigo[param] when true @artigo[param] = true when 'sim' @artigo[param] = true when 'Sim' @artigo[param] = true else @artigo[param] = false end end end
converte_valor_da_arvore_pandoc(node)
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 239 def converte_valor_da_arvore_pandoc(node) # {"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"}} result = nil case node['t'] when "MetaString" result = node['c'] when "MetaBool" result = node['c'] when "MetaInlines" string = "" node['c'].each do |node| case node['t'] when 'Str' string += node['c'] when 'Space' string += " " end end if "sim".casecmp(string).zero? result = true elsif "não".casecmp(string).zero? result = false else result = string end else result = node end result end
escreve_artigo_latex()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 147 def escreve_artigo_latex #File.open('artigo.tex', 'w'){|f| f.write('Primeira seção aqui')} #File.open(@arquivo_saida_latex, 'w') {|f| f.write (converte_artigo_para_latex)} File.open('artigo.tex', 'w') {|f| f.write (converte_artigo_para_latex)} end
executa_com_configuracao()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 308 def executa_com_configuracao converte_configuracao_para_latex salva_configuracao_yaml_para_inclusao_em_pandoc executa_pandoc_salvando_latex executa_pdflatex end
executa_pandoc_salvando_latex()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 315 def executa_pandoc_salvando_latex t = Formatafacil::Template.new() data_dir = t.directory Open3.popen3("pandoc --smart --standalone --data-dir=#{data_dir} --template=#{modelo} -f markdown -t latex -o #{@arquivo_saida_latex}") {|stdin, stdout, stderr, wait_thr| pid = wait_thr.pid # pid of the started process. stdin.write @texto # yaml com metados: stdin.write "\n" stdin.write @artigo_latex.to_yaml stdin.write("---\n") stdin.close # stdout.read } # system "pandoc --smart -s #{@arquivo_texto} #{@arquivo_saida_yaml} --data-dir=#{data_dir} --template=#{modelo} -f markdown -t latex -o #{@arquivo_saida_latex}" end
executa_pdflatex()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 333 def executa_pdflatex #system "pdflatex #{@arquivo_saida_latex}" #system "pdflatex #{@arquivo_saida_latex}" end
extrai_blocos_yaml(conteudo)
click to toggle source
Returna um hash contendo os conteúdos lidos dos blocos yaml.
# File lib/formatafacil/artigo_tarefa.rb, line 203 def extrai_blocos_yaml(conteudo) result = {} Open3.popen3("pandoc -t json") {|stdin, stdout, stderr, wait_thr| pid = wait_thr.pid # pid of the started process. stdin.write conteudo stdin.close meta = JSON.parse(stdout.read)[0]['unMeta'] meta.each do |k,v| result[k]=converte_valor_da_arvore_pandoc(v) end } result end
identifica_modelo()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 187 def identifica_modelo if (@modelo.nil?) then t = Formatafacil::Template.new() @modelo = t.procura_modelo_de_artigo if (@modelo.nil?) then #raise "Modelo não encontrado. Modelos disponíveis: #{t.list_names}" nomes_dos_arquivos = t.list_names.map { |n| "#{n}.md" } raise ArquivoNaoEncontradoError, "Não possível encontrar um arquivo de artigo: #{nomes_dos_arquivos}. Crie o arquivo com o nome do modelo apropriado e tente novamente." end end @arquivo_texto = "#{@modelo}.md" end
ler_arquivo(arquivo)
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 271 def ler_arquivo(arquivo) result = "" File.open(arquivo, 'r') { |f| result = f.read } result end
salva_blocos_de_metadados()
click to toggle source
# File lib/formatafacil/artigo_tarefa.rb, line 218 def salva_blocos_de_metadados [@resumo].each {|texto| Open3.popen3("pandoc -t json -f markdown") {|stdin, stdout, stderr, wait_thr| pid = wait_thr.pid # pid of the started process. stdin.write texto stdin.close conteudo = stdout.read meta = JSON.parse(conteudo)[0]['unMeta'] puts "\nMeta: #{meta}" puts "\nmetadados: #{@metadados}" meta.each do |k,v| #result[k]=converte_valor_da_arvore_pandoc(v) #@metadados[k] = converte_valor_da_arvore_pandoc(v) @metadados[k] = v end } } end
salva_configuracao_yaml_para_inclusao_em_pandoc()
click to toggle source
Precisa gerar arquivos com quebra de linha antes e depois porque pandoc utiliza
# File lib/formatafacil/artigo_tarefa.rb, line 340 def salva_configuracao_yaml_para_inclusao_em_pandoc File.open(@arquivo_saida_yaml, 'w'){ |file| file.write("\n") file.write @artigo_latex.to_yaml file.write("---\n") } end
verifica_conteudos()
click to toggle source
Se não houver conteúdos, tentar ler dos arquivos correspondentes
# File lib/formatafacil/artigo_tarefa.rb, line 154 def verifica_conteudos identifica_modelo File.open(@arquivo_texto, 'r') {|f| @texto = f.read} if @texto.nil? begin File.open(@arquivo_resumo, 'r') {|f| @resumo = f.read } if @resumo.nil? rescue Errno::ENOENT => e raise Formatafacil::ArquivoNaoEncontradoError, "Não possível encontrar o arquivo 'resumo.md'. Crie o arquivo com o nome apropriado e tente novamente." end begin File.open(@arquivo_abstract, 'r') { |f| @abstract = f.read } if @abstract.nil? rescue Errno::ENOENT => e raise Formatafacil::ArquivoNaoEncontradoError, "Não possível encontrar o arquivo 'abstract.md'. Crie o arquivo com o nome apropriado e tente novamente." end begin File.open(@arquivo_bibliografia, 'r') {|f| @bibliografia = f.read} if @bibliografia.nil? rescue Errno::ENOENT raise Formatafacil::ArquivoNaoEncontradoError, "Não possível encontrar o arquivo 'bibliografia.md'. Crie o arquivo com o nome apropriado e tente novamente." end begin if @metadados.empty? then File.open(@arquivo_metadados, 'r') do |f| metadados_lido = YAML.load(f.read) @metadados = if metadados_lido.nil? or !metadados_lido then {} else metadados_lido end end end rescue Errno::ENOENT raise Formatafacil::ArquivoNaoEncontradoError, "Não possível encontrar o arquivo '#{@arquivo_metadados}'. Crie o arquivo com o nome apropriado e tente novamente." rescue Psych::SyntaxError raise Formatafacil::MetadadosError, "Erro no arquivo 'metadados.yaml'. Atualize o arquivo e tente novamente." end end