class Limarka::Cli

Essa classe é responsável por interpretar e executar os comandos de linha da ferramenta. Para compreender sua utilização recomendo consultar a documentação do [thor](whatisthor.com).

@author Eduardo de Santana Medeiros Alexandre

Public Class Methods

cv() click to toggle source
# File lib/limarka/cli.rb, line 320
def self.cv
  @@cv
end

Public Instance Methods

ask_figura_arquivo(arquivo = nil) click to toggle source
# File lib/limarka/cli.rb, line 339
def ask_figura_arquivo(arquivo = nil)
  if arquivo.nil? then
    arquivos = Dir["imagens/*"].select{ |f| File.file? f }.sort
    print_table arquivos.map.with_index{ |a, i| [i+1, *a]}
    selecao = ask("Escolha um arquivo para a Figura:").to_i
    arquivo=arquivos[selecao-1]
  end

  arquivo
end
ask_figura_dimensoes() click to toggle source
# File lib/limarka/cli.rb, line 393
def ask_figura_dimensoes
  dimensoes = ask("Forneça as dimensões separadas por espaço [100]:")
  if dimensoes.empty? then
    [100]
  else
    dimensoes.split(" ")
  end
end
ask_figura_fonte() click to toggle source
# File lib/limarka/cli.rb, line 359
def ask_figura_fonte
  fonte_padrao = "Autor."
  fonte_lida = ask("Insira o texto da fonte [#{fonte_padrao}]):")
  if fonte_lida == "" then
    fonte = fonte_padrao
  else
    fonte = fonte_lida
  end
end
ask_figura_legenda() click to toggle source
# File lib/limarka/cli.rb, line 349
def ask_figura_legenda
  legenda_padrao = "Legenda da figura."
  legenda_lida = ask("Insira o texto da legenda [#{legenda_padrao}]):")
  if legenda_lida == "" then
    legenda = legenda_padrao
  else
    legenda = legenda_lida
  end
end
ask_figura_rotulo(rotulo, arquivo) click to toggle source
# File lib/limarka/cli.rb, line 368
def ask_figura_rotulo(rotulo, arquivo)
  # http://stackoverflow.com/questions/1268289/how-to-get-rid-of-non-ascii-characters-in-ruby

  if (not rotulo) then
    rotulo_proposto = "fig:" + propoe_rotulo(File.basename arquivo, ".*")
    rotulo_lido = ask("Rótulo para referenciar a figura [#{rotulo_proposto}]. fig:" )
    if rotulo_lido.empty? then
      rotulo = rotulo_proposto
    else
      rotulo = "fig:"+rotulo_lido
    end
  end
  rotulo
end
check() click to toggle source
# File lib/limarka/cli.rb, line 30
def check
  c = Limarka::Check.new()
  c.check()
end
cronograma() click to toggle source
# File lib/limarka/cli.rb, line 231
    def cronograma
    # https://github.com/abntex/limarka/issues/90
    tex = <<TEX
\\begin{table}[htbp]
  \\centering
  \\caption{Cronograma de atividades}
  \\label{tab:cronograma}
  \\begin{tabular}{|c|c|c|c|c|c|}
    \\hline
    Fase & Março & Abril & Maio & Junho & Julho \\\\
    \\hline
    1 & \\textbullet & & & & \\\\
    2 & & \\textbullet & & & \\\\
    3 & & & \\textbullet & & \\\\
    4 & & & & \\textbullet & \\\\
    5 & & & & & \\textbullet \\\\
    \\hline
  \\end{tabular}
  \\legend{Fonte: Autor.}
\\end{table}

\\begin{table}[htbp]
  \\centering
  \\caption{Cronograma de atividades}
  \\label{tab:cronograma}
  \\begin{tabular}{|l|c|c|c|c|c|}
    \\hline
    Atividade & Março & Abril & Maio & Junho & Julho \\\\
    \\hline
    XXXXXXXXXXXXXXXX & \\textbullet & & & & \\\\
    XXXXXXXXXXXXXXXX & & \\textbullet & & & \\\\
    XXXXXXXX & & & \\textbullet & & \\\\
    XXXXXXXX & & & & \\textbullet & \\\\
    XXXXXXXX & & & & & \\textbullet \\\\
    \\hline
  \\end{tabular}
  \\legend{Fonte: Autor.}
\\end{table}
TEX
      puts tex
    end
exec() click to toggle source
# File lib/limarka/cli.rb, line 47
def exec

  if (options[:version]) then
    puts "limarka "+Limarka::VERSION
    s = `pandoc --version`
    s << `ruby --version`
    s << `pdftk --version`
    s << `latexmk --version`
    s << `xelatex --version`
    puts s
    return
  end

  #options[:output_dir] = File.absolute_path(options[:output_dir])
  Dir.chdir(options[:input_dir]) do
    t = Limarka::Trabalho.new
    t.atualiza_de_arquivos(options)
    @@cv = Limarka::Conversor.new(t,options)
    @@cv.convert
    @@cv.usa_pdftotext = false
    @@cv.compila if options[:compila_tex]
  end
end
fig(arquivo=nil) click to toggle source
# File lib/limarka/cli.rb, line 92
    def fig(arquivo=nil)

      if (options[:clipboard]) then
        arquivo = Clipboard.paste         # Ler do clipboard, requer xclip: sudo apt-get install xclip
      end

      if (arquivo) then
        if arquivo.start_with?("file://") then
          arquivo = arquivo[7,-1]
        end
      end


      if (options[:interativo]) then
        arquivo =   ask_figura_arquivo(arquivo)
        valida_figura_arquivo(arquivo) # antecipando validação issue #78
        legenda =   ask_figura_legenda
        fonte =     ask_figura_fonte
        rotulo =    ask_figura_rotulo(rotulo, arquivo)
        valida_figura_rotulo(rotulo)   # antecipando validação issue #78
        dimensoes = ask_figura_dimensoes
      else
        legenda = options[:legenda]
        fonte = options[:fonte]
        rotulo = options[:rotulo]
        if (not arquivo) then
          arquivo = ask_figura_arquivo(nil)
        end
        valida_figura_arquivo(arquivo) # antecipando validação issue #78
        rotulo = "fig:" + propoe_rotulo(File.basename arquivo, ".*") if rotulo.nil?
        valida_figura_rotulo(rotulo)   # antecipando validação issue #78
        dimensoes = options[:dimensoes]
      end




      dimensoes.each do |dim|

        escala = (dim.to_f)/100

        figura_tex = <<TEX

\\begin{figure}[htbp]
\\caption{\\label{#{rotulo}}#{legenda}}
\\begin{center}
\\includegraphics[width=#{escala}\\textwidth]{#{arquivo}}
\\end{center}
\\legend{Fonte: #{fonte}}
\\end{figure}
TEX

        say figura_tex
      end
      say "\n<!--Para referenciar a figura acima no texto utilize: Figura \\ref\{#{rotulo}} \n-->\n"
    end
importa(arquivo) click to toggle source
# File lib/limarka/cli.rb, line 74
def importa(arquivo)
  diretorio = File.dirname(arquivo)
  system "pandoc", "-t", "markdown", "-o", "#{diretorio}/trabalho-academico.md", arquivo
end
menu() click to toggle source
propoe_rotulo(string_base) click to toggle source
# File lib/limarka/cli.rb, line 383
def propoe_rotulo(string_base)
  encoding_options = {
    :invalid           => :replace,  # Replace invalid byte sequences
    :undef             => :replace,  # Replace anything not defined in ASCII
    :replace           => '-',        # Use a blank for those replacements
  }

  rotulo_proposto = string_base.gsub(/\s+/, '-').encode(Encoding.find('ASCII'), encoding_options)
end
tab() click to toggle source
# File lib/limarka/cli.rb, line 158
    def tab
      legenda = options[:legenda]
      fonte = options[:fonte]
      rotulo_lido = options[:rotulo]
      if rotulo_lido then
        rotulo = rotulo_lido
      else
        rotulo = "tab:"+(Time.now.to_i % 100000).to_s
      end

      nota = options[:nota]
      if nota then
        nota_linha = "  \\nota{#{nota}}%\n"
      else
        nota_linha = ""
      end

      valida_tabela_rotulo(rotulo)

      say <<TEX

\\begin{table}[htb]
\\ABNTEXfontereduzida
\\caption{#{legenda}}
\\label{#{rotulo}}
\\begin{tabular}{p{2.6cm}|p{6.0cm}|p{2.25cm}|p{3.40cm}}
  %\\hline
   \\textbf{Nível de Investigação} & \\textbf{Insumos}  & \\textbf{Sistemas de Investigação}  & \\textbf{Produtos}  \\\\
    \\hline
    Meta-nível & Filosofia\\index{filosofia} da Ciência  & Epistemologia &
    Paradigma  \\\\
    \\hline
    Nível do objeto & Paradigmas do metanível e evidências do nível inferior &
    Ciência  & Teorias e modelos \\\\
    \\hline
    Nível inferior & Modelos e métodos do nível do objeto e problemas do nível inferior & Prática & Solução de problemas  \\\\
   % \\hline
\\end{tabular}
\\legend{Fonte: #{fonte}}
\\end{table}

\\begin{table}[htb]
\\IBGEtab{%
  \\caption{#{legenda}}%
  \\label{#{rotulo}}
}{%
  \\begin{tabular}{ccc}
  \\toprule
   Nome & Nascimento & Documento \\\\
  \\midrule \\midrule
   Maria da Silva & 11/11/1111 & 111.111.111-11 \\\\
  \\midrule
   João Souza & 11/11/2111 & 211.111.111-11 \\\\
  \\midrule
   Laura Vicuña & 05/04/1891 & 3111.111.111-11 \\\\
  \\bottomrule
\\end{tabular}%
}{%
  \\fonte{#{fonte}}%
#{nota_linha}}
\\end{table}

<!--
Para referenciar a tabela acima no texto utilize: Tabela \\ref\{#{rotulo}}
-->
TEX

#        say tabela_tex


    end
valida_figura_arquivo(arquivo) click to toggle source
# File lib/limarka/cli.rb, line 335
def valida_figura_arquivo(arquivo)
  raise RuntimeError, "Arquivo especificado para a figura não existe: '#{arquivo}'." unless File.file?(arquivo)
end
valida_figura_rotulo(rotulo) click to toggle source
# File lib/limarka/cli.rb, line 324
def valida_figura_rotulo (rotulo)
  if (not rotulo =~ (/^[a-zA-Z][\w\-:]*$/)) then
    raise RuntimeError, "O rótulo não deve conter caracteres especiais. Forneça um rótulo ou remova os caracteres especiais do nome do arquivo. Rótulo atual: '#{rotulo}'"
  end
end
valida_tabela_rotulo(rotulo) click to toggle source
# File lib/limarka/cli.rb, line 329
def valida_tabela_rotulo (rotulo)
  if (not rotulo =~ (/^[a-zA-Z][\w\-:]*$/)) then
    raise RuntimeError, "O rótulo não deve conter caracteres especiais, rótulo atual: #{rotulo}"
  end
end