Class: Formatafacil::ArtigoTarefa

Inherits:
Tarefa
  • Object
show all
Defined in:
lib/formatafacil/artigo_tarefa.rb

Instance Attribute Summary collapse

Attributes inherited from Tarefa

#logger

Instance Method Summary collapse

Methods inherited from Tarefa

arquivo_configuracao

Constructor Details

#initialize(h = {}) ⇒ ArtigoTarefa

Returns a new instance of ArtigoTarefa.



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/formatafacil/artigo_tarefa.rb', line 25

def initialize(h={})
  @arquivo_texto = 'artigo.md'
  @arquivo_resumo = 'config/resumo.md'
  @arquivo_abstract = 'config/abstract.md'
  @arquivo_ingles = 'config/ingles.yaml'
  @arquivo_bibliografia ='bibliografia.md'
  @arquivo_saida_yaml = 'artigo.yaml'
  @arquivo_saida_pdf = 'artigo.pdf'
  @arquivo_saida_latex = 'artigo.tex'
  @artigo = {}
  @artigo_latex = {}
  h.each {|k,v| send("#{k}=",v)}
end

Instance Attribute Details

#arquivo_abstractObject

Returns the value of attribute arquivo_abstract.



18
19
20
# File 'lib/formatafacil/artigo_tarefa.rb', line 18

def arquivo_abstract
  @arquivo_abstract
end

#arquivo_bibliografiaObject

Returns the value of attribute arquivo_bibliografia.



20
21
22
# File 'lib/formatafacil/artigo_tarefa.rb', line 20

def arquivo_bibliografia
  @arquivo_bibliografia
end

#arquivo_inglesObject

Returns the value of attribute arquivo_ingles.



19
20
21
# File 'lib/formatafacil/artigo_tarefa.rb', line 19

def arquivo_ingles
  @arquivo_ingles
end

#arquivo_resumoObject

Returns the value of attribute arquivo_resumo.



17
18
19
# File 'lib/formatafacil/artigo_tarefa.rb', line 17

def arquivo_resumo
  @arquivo_resumo
end

#arquivo_saida_latexObject

Returns the value of attribute arquivo_saida_latex.



23
24
25
# File 'lib/formatafacil/artigo_tarefa.rb', line 23

def arquivo_saida_latex
  @arquivo_saida_latex
end

#arquivo_saida_pdfObject

Returns the value of attribute arquivo_saida_pdf.



22
23
24
# File 'lib/formatafacil/artigo_tarefa.rb', line 22

def arquivo_saida_pdf
  @arquivo_saida_pdf
end

#arquivo_saida_yamlObject

Returns the value of attribute arquivo_saida_yaml.



21
22
23
# File 'lib/formatafacil/artigo_tarefa.rb', line 21

def arquivo_saida_yaml
  @arquivo_saida_yaml
end

#arquivo_textoObject

Returns the value of attribute arquivo_texto.



16
17
18
# File 'lib/formatafacil/artigo_tarefa.rb', line 16

def arquivo_texto
  @arquivo_texto
end

#artigoObject

conteúdo lidos os arquivos



13
14
15
# File 'lib/formatafacil/artigo_tarefa.rb', line 13

def artigo
  @artigo
end

#artigo_latexObject

conteúdo convertido



14
15
16
# File 'lib/formatafacil/artigo_tarefa.rb', line 14

def artigo_latex
  @artigo_latex
end

#modeloObject

Returns the value of attribute modelo.



12
13
14
# File 'lib/formatafacil/artigo_tarefa.rb', line 12

def modelo
  @modelo
end

Instance Method Details

#converte_configuracao_para_latexObject



129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/formatafacil/artigo_tarefa.rb', line 129

def converte_configuracao_para_latex
  @artigo_latex.merge!(@artigo)
  
  ['resumo','abstract','bibliografia'].each {|key|
    Open3.popen3("pandoc --smart -f markdown -t latex") {|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_booleanObject



114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/formatafacil/artigo_tarefa.rb', line 114

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) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
# File 'lib/formatafacil/artigo_tarefa.rb', line 76

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

#executaObject



39
40
41
42
# File 'lib/formatafacil/artigo_tarefa.rb', line 39

def executa
  ler_configuracao
  executa_com_configuracao
end

#executa_com_configuracaoObject



44
45
46
47
48
49
# File 'lib/formatafacil/artigo_tarefa.rb', line 44

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_latexObject



153
154
155
156
157
158
# File 'lib/formatafacil/artigo_tarefa.rb', line 153

def executa_pandoc_salvando_latex
  t = Formatafacil::Template.new()
  data_dir = t.directory
  
  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_pdflatexObject



160
161
162
163
# File 'lib/formatafacil/artigo_tarefa.rb', line 160

def executa_pdflatex
  #system "pdflatex #{@arquivo_saida_latex}"
  #system "pdflatex #{@arquivo_saida_latex}"
end

#ler_arquivo(arquivo) ⇒ Object



108
109
110
111
112
# File 'lib/formatafacil/artigo_tarefa.rb', line 108

def ler_arquivo(arquivo)
  result = ""
  File.open(arquivo, 'r') { |f| result = f.read }
  result
end

#ler_configuracaoObject

Ler as configurações dos arquivos:



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/formatafacil/artigo_tarefa.rb', line 54

def ler_configuracao
  @artigo.merge!(YAML.load(ler_arquivo(Formatafacil::Tarefa.arquivo_configuracao)))
  converte_parametros_para_boolean
  
  @modelo = @artigo['modelo']
  
  @artigo['abstract'] = ler_arquivo(@arquivo_abstract)
  @artigo.merge!(ler_metadados_do_arquivo(@arquivo_abstract))
  @artigo['resumo'] = ler_arquivo(@arquivo_resumo)
  @artigo['bibliografia'] = ler_arquivo(@arquivo_bibliografia)
  
end

#ler_metadados_do_arquivo(arquivo) ⇒ Object



67
68
69
70
71
72
73
74
# File 'lib/formatafacil/artigo_tarefa.rb', line 67

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

#salva_configuracao_yaml_para_inclusao_em_pandocObject

Precisa gerar arquivos com quebra de linha antes e depois porque pandoc utiliza



144
145
146
147
148
149
150
# File 'lib/formatafacil/artigo_tarefa.rb', line 144

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