limarka 0.3.0 → 0.4.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/CHANGELOG.md +10 -2
- data/README.md +43 -8
- data/lib/limarka/cli.rb +155 -0
- data/lib/limarka/version.rb +1 -1
- data/limarka.gemspec +2 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa1896b0e71ab909e97ba9c80795702b4adb45af
|
4
|
+
data.tar.gz: 4977d97a73b3fd227dae4049bdad1be25ba5010f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f6928663dd2c372bd139691c3d703f443dac9adc44c9f47bd235786d3d3b5ee6122d6b6212ef3984b11cfa20309322e901b00c75f2c3673c27a7e1da3e4c2298
|
7
|
+
data.tar.gz: d81246bb185e683269733b24e29ec4c4907ba317eb774aab39e5a29f0b7a2a894a89fb372d0f2438cabe74f442c76163b6fd46b4b483ba55e30bddc2a1f923eb
|
data/CHANGELOG.md
CHANGED
@@ -1,7 +1,15 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
-
## [0.
|
4
|
-
[Full Changelog](https://github.com/abntex/limarka/compare/
|
3
|
+
## [0.4.0](https://github.com/abntex/limarka/tree/0.4.0) (2016-11-16)
|
4
|
+
[Full Changelog](https://github.com/abntex/limarka/compare/v0.3.0...0.4.0)
|
5
|
+
|
6
|
+
**Implemented enhancements:**
|
7
|
+
|
8
|
+
- Indicar a versão de utilização do limarka [\#64](https://github.com/abntex/limarka/issues/64)
|
9
|
+
- Aumentar o provisionamento de inclusão de Figura [\#39](https://github.com/abntex/limarka/issues/39)
|
10
|
+
|
11
|
+
## [v0.3.0](https://github.com/abntex/limarka/tree/v0.3.0) (2016-11-02)
|
12
|
+
[Full Changelog](https://github.com/abntex/limarka/compare/0.2.0...v0.3.0)
|
5
13
|
|
6
14
|
**Fixed bugs:**
|
7
15
|
|
data/README.md
CHANGED
@@ -1,18 +1,53 @@
|
|
1
|
-
#
|
1
|
+
# O que é o limarka?
|
2
2
|
|
3
|
-
|
3
|
+
O limarka é uma ferramenta que possibilita o usuário escrever o seu trabalho de conclusão de curso (monografia, dissertação ou teste) em Markdown e produzir PDFs em conformidade com as normas da ABNT.
|
4
4
|
|
5
|
-
#
|
5
|
+
# Por que escrever em Markdown ao invés de Latex?
|
6
6
|
|
7
|
-
|
8
|
-
- O texto será convertido em Latex, através da ferramenta [pandoc](http://pandoc.org) e templates baseados no [abntex2](http://www.abntex.net.br)
|
9
|
-
- O código Latex é compilado e gerado o PDF em conformidade com as normas mais recentes da ABNT.
|
7
|
+
O LaTeX é ótimo e bastante útil para quem deseja percorrer uma carreira de Pesquisador. Muitos *journals* disponibilizam modelos somente em LaTeX para produção de artigos, aprender LaTeX irá ser útil nessa carreira.
|
10
8
|
|
9
|
+
Mas se você não pretende utilizar LaTeX após a conclusão do seu curso, por que investir na longa curva de aprendizado do LaTeX?
|
11
10
|
|
12
|
-
|
11
|
+
> Uma reposta seria: *Com o Latex e abnTeX eu serei capaz de produzir um trabalho em conformidade com as normas da ABNT, isso por si só já compensaria o investimento*.
|
12
|
+
|
13
|
+
|
14
|
+
## Markdown como alternativa de aprendizado
|
15
|
+
|
16
|
+
Com o limarka você agora possui outra escolha de investimento para elaborar um trabalho de conclusão do curso em conformidade com as Normas da ABNT: *aprender Markdown*.
|
17
|
+
|
18
|
+
O [Markdown](https://pt.wikipedia.org/wiki/Markdown) é uma [linguagem simples de marcação](https://en.wikipedia.org/wiki/Lightweight_markup_language). Os princípios das linguagem simples de marcação estão sendo popularizados em diversas ferramentas de interação social, veja alguns exemplos: [Github](https://help.github.com/articles/basic-writing-and-formatting-syntax/), [Moodle](https://docs.moodle.org/23/en/Markdown), [WhatsApp](https://www.whatsapp.com/faq/en/general/26000002), [Facebook](http://wersm.com/facebook-is-testing-rich-text-formatting-with-markdown/) [Google Plus](https://plus.google.com/+SarahHill/posts/TWYwPctEpJp), [Jekyll](http://jekyllrb.com), etc.
|
19
|
+
|
20
|
+
Após ou durante conclusão do seu curso, você pretende:
|
21
|
+
|
22
|
+
- Interagir através da escrita em redes sociais ou fóruns de discussão?
|
23
|
+
- Editar Wikis ou formatar mensagens?
|
24
|
+
- Participar em projetos no Github?
|
25
|
+
- Escrever documentações de softwares?
|
26
|
+
- Gerar código HTML a partir de texto?
|
27
|
+
- Elaborar *ebooks*?
|
28
|
+
|
29
|
+
Se você respondeu afirmativamente a algumas dessas perguntas, aprender uma linguagem simples de marcação (como o Markdown) é um investimento que provavelmente agilizará as realizações destas ações.
|
30
|
+
|
31
|
+
**OBS:** A implementação atual do limarka ainda exige conhecimentos mínimos do Latex.
|
13
32
|
|
14
|
-
A documentação do projeto será mantida no [wiki](https://github.com/abntex/limarka/wiki)
|
15
33
|
|
34
|
+
# Qual a relação do limarka com o abnTeX?
|
35
|
+
|
36
|
+
O [abnTeX](https://github.com/abntex) provém uma suíte para LaTeX que atende os requisitos das normas da ABNT (Associação Brasileira de Normas Técnicas) para elaboração de trabalhos acadêmicos como teses, dissertações, projetos de pesquisa e outros documentos do gênero.
|
37
|
+
|
38
|
+
O limarka converte os textos produzidos em Markdown para LaTeX, utilizando os modelos do abnTeX2 que são extensivamente testados e incrementados pela comunidade nacional. O limarka é um projeto pertencente ao grupo do [abnTeX](https://github.com/abntex).
|
39
|
+
|
40
|
+
|
41
|
+
# Informações técnicas
|
42
|
+
|
43
|
+
- Escreva o texto utilizando a linguagem Markdown;
|
44
|
+
- Configure diversos aspectos do trabalho através de um formulário PDF;
|
45
|
+
- O texto será convertido em Latex, através da ferramenta [pandoc](http://pandoc.org), templates baseados no [abntex2](http://www.abntex.net.br) e as configurações do formulário;
|
46
|
+
- Um PDF em conformidade com as normas mais recentes da ABNT é gerado através da compilação do código Latex.
|
47
|
+
|
48
|
+
# Documentação
|
49
|
+
|
50
|
+
A documentação do limarka será mantida no [wiki do projeto](https://github.com/abntex/limarka/wiki).
|
16
51
|
|
17
52
|
# Origem do projeto
|
18
53
|
|
data/lib/limarka/cli.rb
CHANGED
@@ -7,10 +7,13 @@ require 'open3'
|
|
7
7
|
|
8
8
|
require 'limarka/configuracao'
|
9
9
|
require 'limarka/conversor'
|
10
|
+
require 'clipboard'
|
10
11
|
|
11
12
|
module Limarka
|
12
13
|
|
13
14
|
class Cli < Thor
|
15
|
+
include Thor::Actions
|
16
|
+
|
14
17
|
default_command :exec
|
15
18
|
|
16
19
|
method_option :configuracao_yaml, :aliases => '-y', :type => :boolean, :desc => 'Ler configuração exportada (configuracao.yaml) em vez de configuracao.pdf', :default => false
|
@@ -19,8 +22,16 @@ module Limarka
|
|
19
22
|
method_option :compila_tex, :aliases => '-c', :desc => 'Compila arquivo tex gerando um PDF', :default => true, :type => :boolean
|
20
23
|
method_option :templates_dir, :aliases => '-t', :desc => 'Diretório que contem a pasta templates (pandoc --data-dir)', :default => Dir.pwd
|
21
24
|
method_option :verbose, :aliases => '-v', :desc => 'Imprime mais detalhes da execução', :default => false, :type => :boolean
|
25
|
+
method_option :version, :desc => 'Imprime a versão do limarka', :default => false, :type => :boolean
|
26
|
+
|
22
27
|
desc "exec", "Executa o sistema para geração do documento latex e compilação"
|
23
28
|
def exec
|
29
|
+
|
30
|
+
if (options[:version]) then
|
31
|
+
puts "limarka "+Limarka::VERSION
|
32
|
+
return
|
33
|
+
end
|
34
|
+
|
24
35
|
#options[:output_dir] = File.absolute_path(options[:output_dir])
|
25
36
|
Dir.chdir(options[:input_dir]) do
|
26
37
|
t = Limarka::Trabalho.new
|
@@ -39,6 +50,150 @@ module Limarka
|
|
39
50
|
system "pandoc", "-t", "markdown", "-o", "#{diretorio}/trabalho-academico.md", arquivo
|
40
51
|
end
|
41
52
|
|
53
|
+
method_option :interativo, :aliases => '-i', :desc => 'Solicita os parâmetros de forma interativa.', :type => :boolean, :default => false
|
54
|
+
method_option :clipboard, :aliases => '-c', :desc => 'Utiliza o conteúdo da área de transferência como o nome do arquivo.', :type => :boolean, :default => false
|
55
|
+
|
56
|
+
# method_option :arquivo, :aliases => '-a', :desc => 'Caminho completo ou apenas o nome do arquivo na pasta imagens. Somente arquivos existêntes são válidos. Se não for especificado e o nome do arquivo esteja copiado (na área de transferência), e o arquivo existir, ele será utilizado.'
|
57
|
+
method_option :legenda, :aliases => '-l', :desc => 'Legenda da figura.', :default => "Legenda da figura."
|
58
|
+
method_option :fonte, :aliases => '-f', :desc => 'Fonte da imagem.', :default => "Autor."
|
59
|
+
method_option :rotulo, :aliases => '-r', :desc => 'Rótulo para ser utilizado na referenciação da figura, caso não especificado um será proposto.'
|
60
|
+
method_option :dimensoes, :aliases => '-d', :desc => 'Dimensões percentuais para redimencionar a figura. Se mais de uma dimensão for especificada será apresentado um código para inclusão da imagem para cada dimensão. Útil quando deseja experimentar diversas dimensões para a Figura. Ex: 80 90 100', :default => [100], :type => :array
|
61
|
+
|
62
|
+
long_desc <<-DESC
|
63
|
+
Esse comando imprime (1) o código para inclusão de uma figura (2) e como referenciá-la no texto. Para as figuras serem apresentadas, em conformidade com as Normas da ABNT, elas precisam serem incluídas como código Latex (abnTeX2).
|
64
|
+
DESC
|
65
|
+
desc "fig ARQUIVO", "Imprime códigos para inclusão de imagens em conformidade com ABNT (em LaTeX)"
|
66
|
+
def fig(arquivo=nil)
|
67
|
+
|
68
|
+
if (options[:clipboard]) then
|
69
|
+
arquivo = Clipboard.paste # Ler do clipboard, requer xclip: sudo apt-get install xclip
|
70
|
+
end
|
71
|
+
|
72
|
+
if (arquivo) then
|
73
|
+
if arquivo.start_with?("file://") then
|
74
|
+
arquivo = arquivo[7,-1]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
if (options[:interativo]) then
|
80
|
+
arquivo = ask_figura_arquivo(arquivo)
|
81
|
+
legenda = ask_figura_legenda
|
82
|
+
fonte = ask_figura_fonte
|
83
|
+
rotulo = ask_figura_rotulo(rotulo, arquivo)
|
84
|
+
dimensoes = ask_figura_dimensoes
|
85
|
+
else
|
86
|
+
legenda = options[:legenda]
|
87
|
+
fonte = options[:fonte]
|
88
|
+
rotulo = options[:rotulo]
|
89
|
+
if (not arquivo) then
|
90
|
+
arquivo = ask_figura_arquivo(nil)
|
91
|
+
end
|
92
|
+
rotulo = "fig:" + propoe_rotulo(File.basename arquivo, ".*") if rotulo.nil?
|
93
|
+
dimensoes = options[:dimensoes]
|
94
|
+
end
|
95
|
+
|
96
|
+
valida_figura_arquivo(arquivo)
|
97
|
+
valida_figura_rotulo(rotulo)
|
98
|
+
|
99
|
+
say "\n<!--\nPara referenciar essa figura no texto utilize: Figura \\ref\{#{rotulo}} \n-->\n"
|
100
|
+
dimensoes.each do |dim|
|
101
|
+
|
102
|
+
legenda = options[:legenda]
|
103
|
+
escala = (dim.to_f)/100
|
104
|
+
|
105
|
+
figura_tex = <<TEX
|
106
|
+
\\begin{figure}[htbp]
|
107
|
+
\\caption{\\label{#{rotulo}}#{legenda}}
|
108
|
+
\\begin{center}
|
109
|
+
\\includegraphics[width=#{escala}\\textwidth]{#{arquivo}}
|
110
|
+
\\end{center}
|
111
|
+
\\legend{Fonte: #{fonte}}
|
112
|
+
\\end{figure}
|
113
|
+
|
114
|
+
TEX
|
115
|
+
|
116
|
+
say figura_tex
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
no_commands do
|
121
|
+
def valida_figura_rotulo (rotulo)
|
122
|
+
if (not rotulo =~ (/^[a-zA-Z][\w\-:]*$/)) then
|
123
|
+
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}"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
def valida_figura_arquivo(arquivo)
|
128
|
+
raise RuntimeError, "Arquivo especificado para a figura não existe: '#{arquivo}'." unless File.file?(arquivo)
|
129
|
+
end
|
130
|
+
|
131
|
+
def ask_figura_arquivo(arquivo = nil)
|
132
|
+
if arquivo.nil? then
|
133
|
+
arquivos = Dir["imagens/*"].select{ |f| File.file? f }.sort
|
134
|
+
print_table arquivos.map.with_index{ |a, i| [i+1, *a]}
|
135
|
+
selecao = ask("Escolha um arquivo para a Figura:").to_i
|
136
|
+
arquivo=arquivos[selecao-1]
|
137
|
+
end
|
138
|
+
|
139
|
+
arquivo
|
140
|
+
end
|
141
|
+
def ask_figura_legenda
|
142
|
+
legenda_padrao = "Legenda da figura."
|
143
|
+
legenda_lida = ask("Insira o texto da legenda [#{legenda_padrao}]):")
|
144
|
+
if legenda_lida == "" then
|
145
|
+
legenda = legenda_padrao
|
146
|
+
else
|
147
|
+
legenda = legenda_lida
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
def ask_figura_fonte
|
152
|
+
fonte_padrao = "Autor."
|
153
|
+
fonte_lida = ask("Insira o texto da fonte [#{fonte_padrao}]):")
|
154
|
+
if fonte_lida == "" then
|
155
|
+
fonte = fonte_padrao
|
156
|
+
else
|
157
|
+
fonte = fonte_lida
|
158
|
+
end
|
159
|
+
end
|
160
|
+
def ask_figura_rotulo(rotulo, arquivo)
|
161
|
+
# http://stackoverflow.com/questions/1268289/how-to-get-rid-of-non-ascii-characters-in-ruby
|
162
|
+
|
163
|
+
if (not rotulo) then
|
164
|
+
rotulo_proposto = "fig:" + propoe_rotulo(File.basename arquivo, ".*")
|
165
|
+
rotulo_lido = ask("Rótulo para referenciar a figura [#{rotulo_proposto}]. fig:" )
|
166
|
+
if rotulo_lido.empty? then
|
167
|
+
rotulo = rotulo_proposto
|
168
|
+
else
|
169
|
+
rotulo = "fig:"+rotulo_lido
|
170
|
+
end
|
171
|
+
end
|
172
|
+
rotulo
|
173
|
+
end
|
174
|
+
|
175
|
+
def propoe_rotulo(string_base)
|
176
|
+
encoding_options = {
|
177
|
+
:invalid => :replace, # Replace invalid byte sequences
|
178
|
+
:undef => :replace, # Replace anything not defined in ASCII
|
179
|
+
:replace => '-', # Use a blank for those replacements
|
180
|
+
}
|
181
|
+
|
182
|
+
rotulo_proposto = string_base.gsub(/\s+/, '-').encode(Encoding.find('ASCII'), encoding_options)
|
183
|
+
end
|
184
|
+
|
185
|
+
def ask_figura_dimensoes
|
186
|
+
dimensoes = ask("Forneça as dimensões separadas por espaço [100]:")
|
187
|
+
if dimensoes.empty? then
|
188
|
+
[100]
|
189
|
+
else
|
190
|
+
dimensoes.split(" ")
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
|
42
197
|
=begin
|
43
198
|
method_option :entrada, :default => "configuracao.pdf", :aliases => "-i", :banner => "FILE"
|
44
199
|
method_option :saida, :default => "templates/configuracao.yaml", :aliases => "-o", :banner => "FILE"
|
data/lib/limarka/version.rb
CHANGED
data/limarka.gemspec
CHANGED
@@ -22,8 +22,9 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake", "~> 11.0"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.5"
|
24
24
|
spec.add_development_dependency "pry-byebug"
|
25
|
-
spec.
|
25
|
+
spec.add_development_dependency "github_changelog_generator"
|
26
26
|
|
27
|
+
spec.add_dependency "clipboard"
|
27
28
|
spec.add_dependency "colorize"
|
28
29
|
spec.add_dependency "pdf-forms", "~> 1.1.1"
|
29
30
|
spec.add_dependency "pandoc-ruby"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: limarka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.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: 2016-11-
|
11
|
+
date: 2016-11-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -68,6 +68,20 @@ dependencies:
|
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: github_changelog_generator
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: clipboard
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - ">="
|