condom 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,9 @@
1
+ == 1.0.0
2
+
3
+ * Rewrote the executable, it is now simpler and allow user to change every fields (see the README).
4
+ * Renamed 'outputdir' attribute to 'directory'.
5
+ * Changed syntax according to 1.9.* Ruby versions (e.g. ':' in case), **but still doesn't work on 1.9.* Ruby versions!**
6
+
1
7
  == 0.2.0
2
8
 
3
9
  * Changed files organisation: specific documents now extend a Base class.
@@ -28,29 +28,36 @@ This command needs Rubygems (rubygems package on Ubuntu).
28
28
 
29
29
  === Executable
30
30
 
31
- Condom gem provides a condom shell command.
31
+ Condom gem provides a 'condom' shell command.
32
32
 
33
33
  $ condom --help
34
- Usage: condom [options] [destination]
34
+ Usage: condom [type] [options]
35
+
36
+ Available types:
37
+ document 'article', 'report' or other classes
38
+ presentation 'beamer' class
39
+ letter 'letter' class
35
40
 
36
41
  Available options:
37
- -m, --math Math packages
38
- -l, --listings Listings package
39
- -f, --fancyhdr Fancyhdr package
40
- -p, --pdf PDF config
41
- -g, --graphics Images packages
42
42
  -n, --filename=FILENAME Define a file name
43
43
  -a, --author=AUTHOR Define the author
44
44
  -t, --title=TITLE Define the title
45
45
  -d, --date=DATE Define the date
46
- -c, --class=CLASS Define the document class
47
- "beamer" for a presentation, "letter" for a letter
48
- -L, --language=LANGUAGE Define the language
49
- -P, --package=PACKAGE Add another package
46
+ -c, --document-class=CLASS Define the document class
47
+ -l, --language=LANGUAGE Define the language
48
+ -p, --package=PACKAGE Add another package
49
+ -o, --directory=DIRECTORY Define the output directory
50
+ -q, --quiet Don't ask any question
50
51
  -v, --version Print Condom version
51
52
 
52
- In generated files, there is a Makefile.
53
- Just use your document (from the source folder) like below.
53
+ For example, you can easily generate a set of files for a presentation in a folder named 'My Presentation' using:
54
+
55
+ condom presentation -o "My Presentation"
56
+
57
+ Unless the --quiet option is used, every options will be prompted for confirmation until the validation of the user (the type will be prompted just one time).
58
+
59
+ In generated files, there is a Makefile (see the Technique section below for more information about the file organization).
60
+ Just use your document (from the source folder) with the following commands.
54
61
 
55
62
  compile with:
56
63
  $ make
@@ -84,7 +91,7 @@ All constructors of these classes will use default values, but also accept:
84
91
  * a Hash of options. Keys of the options hash should be symbols with the same name than the attributes of the class.
85
92
  i.e.:
86
93
 
87
- doc = Condom::Document.new(:document_class => "report", :math => true, :outputdir => "here")
94
+ doc = Condom::Document.new(:document_class => "report", :math => true, :directory => "here")
88
95
 
89
96
  You can get all options with:
90
97
 
@@ -99,14 +106,14 @@ Then, once your document is ready to be generated, create it with:
99
106
 
100
107
  doc.create
101
108
 
102
- This method will generate all files in the outputdir directory.
109
+ This method will generate all files in the output directory.
103
110
 
104
111
  == Technique
105
112
 
106
113
  The following command:
107
- $ condom -mlfpg -t "Condom makes LaTeX easier" here
114
+ $ condom document -t "Condom makes LaTeX easier" -o here
108
115
 
109
- will generate:
116
+ may result the creation of these folders/files:
110
117
  $ tree here/
111
118
  here/
112
119
  ├── fig
data/bin/condom CHANGED
@@ -1,74 +1,103 @@
1
1
  # Command line tool for Condom
2
- # Author: Vivien 'v0n' Didelot.
3
-
4
- # Add ../lib to the load path
5
- #lib_dir = File.join(File.dirname(__FILE__), '..', 'lib')
6
- #$LOAD_PATH.unshift lib_dir unless $LOAD_PATH.include? lib_dir
2
+ #
3
+ # Author:: Vivien 'v0n' Didelot <vivien.didelot@gmail.com>
4
+ # See:: http://github.com/v0n/condom
7
5
 
8
6
  require 'condom'
9
7
  require 'optparse'
10
8
 
11
- doc = Condom::Base.new
12
- ops = doc.get_options
9
+ quiet = false
10
+ types = ['document', 'presentation', 'letter']
11
+ ops = {:other_packages => []}
13
12
 
14
13
  ARGV.options do |o|
15
- o.banner = "Usage: #{File.basename $0} [options] [destination]\n"
16
- o.on_head("\nAvailable options:")
17
- o.on("-m", "--math", "Math packages") { ops[:math] = true }
18
- o.on("-l", "--listings", "Listings package") { ops[:listings] = true }
19
- o.on("-f", "--fancyhdr", "Fancyhdr package") { ops[:fancyhdr] = true }
20
- o.on("-p", "--pdf", "PDF config") { ops[:pdf] = true }
21
- o.on("-g", "--graphics", "Images packages") { ops[:graphics] = true }
22
- o.on("-n", "--filename=FILENAME", String, "Define a file name") { |v| ops[:filename] = v }
23
- o.on("-a", "--author=AUTHOR", String, "Define the author") { |v| ops[:author] = v }
24
- o.on("-t", "--title=TITLE", String, "Define the title") { |v| ops[:title] = v }
25
- o.on("-d", "--date=DATE", String, "Define the date") { |v| ops[:date] = v }
26
- o.on("-c", "--class=CLASS", String, "Define the document class",
27
- "\"beamer\" for a presentation, \"letter\" for a letter") { |v| ops[:document_class] = v }
28
- o.on("-L", "--language=LANGUAGE", String, "Define the language") { |v| ops[:language] = v }
29
- o.on("-P", "--package=PACKAGE", String, "Add another package") { |v| ops[:other_packages].push v }
30
- o.on("-v", "--version", "Print Condom version") { puts "Condom lib: version #{Condom::VERSION}" ; exit }
14
+ o.banner = "Usage: #{File.basename $0} [type] [options]\n"
15
+ o.on_head("\nAvailable types:",
16
+ " document 'article', 'report' or other classes",
17
+ " presentation 'beamer' class",
18
+ " letter 'letter' class",
19
+ "\nAvailable options:")
20
+ o.on("-n", "--filename=FILENAME", String, "Define a file name") { |v| ops[:filename] = v }
21
+ o.on("-a", "--author=AUTHOR", String, "Define the author") { |v| ops[:author] = v }
22
+ o.on("-t", "--title=TITLE", String, "Define the title") { |v| ops[:title] = v }
23
+ o.on("-d", "--date=DATE", String, "Define the date") { |v| ops[:date] = v }
24
+ o.on("-c", "--document-class=CLASS", String, "Define the document class") { |v| ops[:document_class] = v }
25
+ o.on("-l", "--language=LANGUAGE", String, "Define the language") { |v| ops[:language] = v }
26
+ o.on("-p", "--package=PACKAGE", String, "Add another package") { |v| ops[:other_packages].push v }
27
+ o.on("-o", "--directory=DIRECTORY", String, "Define the output directory") { |v| ops[:directory] = v }
28
+ o.on("-q", "--quiet", "Don't ask any question") { quiet = true }
29
+ o.on("-v", "--version", "Print Condom version") { puts "Condom lib: version #{Condom::VERSION}" ; exit }
31
30
  end
32
31
 
33
32
  begin
34
33
  ARGV.options.parse!
34
+ raise "Bad syntax. Try \`#{File.basename $0} --help' for more information." if ARGV.length > 1
35
35
 
36
- raise "Bad syntax." if ARGV.length > 1
37
- if ARGV.length == 1
38
- ops[:outputdir] = (ARGV.first == ".") ? Dir.getwd : ARGV.first
39
- end
40
-
41
- # Ask for confirmation
42
- ops.each do |key, val|
43
- value = case val
44
- when true: "yes"
45
- when false: "no"
46
- when Array: val.join(", ")
47
- else val
48
- end
49
- printf "%-15s=> %s\n", key, value
50
- end
51
- print "\nContinue [Y/n/h]? "
52
- case STDIN.gets.strip
53
- when 'Y', 'y', ''
54
- when 'h'
55
- puts ARGV.options
56
- exit
36
+ if ARGV.size == 1
37
+ doc = case ARGV.first
38
+ when 'document' then Condom::Document.new
39
+ when 'presentation' then Condom::Presentation.new
40
+ when 'letter' then Condom::Letter.new
41
+ else raise "Bad syntax. Try \`#{File.basename $0} --help' for more information."
42
+ end
43
+ elsif ops.has_key? :document_class
44
+ doc = case ops[:document_class]
45
+ when 'beamer' then Condom::Presentation.new
46
+ when 'letter' then Condom::Letter.new
47
+ else Condom::Document.new
48
+ end
57
49
  else
58
- puts "Cancel."
59
- exit
50
+ doc = Condom::Document.new
60
51
  end
61
52
 
62
- doc = case ops[:document_class]
63
- when 'beamer': Condom::Presentation.new
64
- when 'letter': Condom::Letter.new
65
- else Condom::Document.new
66
- end
67
53
  doc.set_options(ops)
54
+
55
+ unless quiet
56
+ # Ask for confirmation
57
+ puts "Enter the new value, or press ENTER for the default"
58
+
59
+ doc_type = doc.class.to_s.split('::').last.downcase
60
+ printf " type [%s]: ", doc_type
61
+ type = STDIN.gets.strip
62
+ doc = case type
63
+ when 'document' then Condom::Document.new(ops)
64
+ when 'presentation' then Condom::Presentation.new(ops)
65
+ when 'letter' then Condom::Letter.new(ops)
66
+ else raise "Bad syntax. Try \`#{File.basename $0} --help' for more information."
67
+ end unless type.empty? || type == doc_type
68
+ puts
69
+
70
+ loop do
71
+ ops = Hash.new
72
+ doc.get_options.each do |key, value|
73
+ displayed_value = case value
74
+ when true then "yes"
75
+ when false then "no"
76
+ when Array then value.join(', ')
77
+ else value
78
+ end
79
+ printf " %-17s [%s]: ", key, displayed_value
80
+ new_value = STDIN.gets.strip
81
+ ops[key] = if value.is_a?(FalseClass) && new_value == "yes" then true
82
+ elsif value.is_a?(TrueClass) && new_value == "no" then false
83
+ elsif key == :other_packages then new_value.split(/\s*,\s*/)
84
+ else new_value
85
+ end unless new_value.empty?
86
+ end
87
+ doc.set_options(ops) unless ops.empty?
88
+
89
+ print "\nIs the information correct? [Y/n/q] "
90
+ case STDIN.gets.strip
91
+ when /^Y?$/i then break
92
+ when 'q' then exit
93
+ end
94
+ end
95
+ end
96
+
68
97
  doc.create
69
- puts "Files created in #{doc.outputdir}."
98
+ puts "info: Files created in #{doc.directory}."
70
99
  rescue => e
71
- STDERR.puts "error: #{e}"
100
+ STDERR.puts "fail: #{e}"
72
101
  end
73
102
 
74
103
  exit
@@ -1,3 +1,8 @@
1
+ # Condom, a Ruby lib for LaTeX document.
2
+ #
3
+ # Author:: Vivien 'v0n' Didelot <vivien.didelot@gmail.com>
4
+ # See:: http://github.com/v0n/condom
5
+
1
6
  require "condom/base"
2
7
  require "condom/letter"
3
8
  require "condom/document"
@@ -7,7 +12,7 @@ require "etc"
7
12
 
8
13
  module Condom
9
14
  # Lib version
10
- VERSION = '0.2.0'
15
+ VERSION = '1.0.0'
11
16
 
12
17
  # Constant views directory
13
18
  VIEWS_DIR = File.join(File.expand_path(File.dirname(__FILE__)), 'views')
@@ -9,7 +9,7 @@ module Condom
9
9
  # This is the main class of the condom lib.
10
10
  # It will contain all common attributes and methods to every LaTeX document.
11
11
  class Base
12
- attr_accessor :outputdir, :filename,
12
+ attr_accessor :directory, :filename,
13
13
  :author, :title, :date, :document_class, :language,
14
14
  :other_packages
15
15
 
@@ -20,11 +20,11 @@ module Condom
20
20
  # * a hash of options.
21
21
  def initialize(args = nil)
22
22
  # Need to initialize each variables else they won't exist in instance_variables.
23
- @outputdir = @filename = @author = @title = @date = @document_class = @language = @other_packages = nil
23
+ @directory = @filename = @author = @title = @date = @document_class = @language = @other_packages = nil
24
24
 
25
25
  # The default options
26
26
  set_options({
27
- :outputdir => Dir.getwd,
27
+ :directory => Dir.getwd,
28
28
  :filename => 'main',
29
29
  :author => Condom.get_user_name,
30
30
  :title => 'Document \LaTeX',
@@ -62,7 +62,7 @@ module Condom
62
62
 
63
63
  # This method will create in output directory all needed files.
64
64
  def create
65
- in_outputdir do
65
+ in_directory do
66
66
  raise("Please use a specific Condom class, not Base.")
67
67
  end
68
68
  end
@@ -71,14 +71,14 @@ module Condom
71
71
 
72
72
  # This method creates the output directory (if needed)
73
73
  # and execute the block given in parameter.
74
- def in_outputdir
74
+ def in_directory
75
75
  # Verify output
76
- FileUtils.makedirs @outputdir
76
+ FileUtils.makedirs @directory
77
77
  raise(ArgumentError, "A block should be given") unless block_given?
78
78
 
79
- Dir.chdir @outputdir do
80
- raise("#{@outputdir}: it already exists a main.tex file") if File.exist? "main.tex"
81
- raise("#{@outputdir}: it already exists a Makefile") if File.exist? "Makefile"
79
+ Dir.chdir @directory do
80
+ raise("#{@directory}: it already exists a main.tex file") if File.exist? "main.tex"
81
+ raise("#{@directory}: it already exists a Makefile") if File.exist? "Makefile"
82
82
 
83
83
  # Call the given instructions block
84
84
  yield
@@ -35,7 +35,7 @@ module Condom
35
35
 
36
36
  # This method will write in the output directory all needed files.
37
37
  def create
38
- in_outputdir do
38
+ in_directory do
39
39
  # Create files
40
40
  build "main.tex"
41
41
  build "Makefile"
@@ -35,7 +35,7 @@ module Condom
35
35
 
36
36
  # This method will write in the output directory all needed files.
37
37
  def create
38
- in_outputdir do
38
+ in_directory do
39
39
  # Create files
40
40
  build "letter.tex"
41
41
  File.rename("letter.tex", "main.tex")
@@ -17,7 +17,7 @@ module Condom
17
17
  # The default options
18
18
  options = {
19
19
  :document_class => 'beamer',
20
- :title => 'Présentation \LaTeX',
20
+ :title => 'Presentation \LaTeX',
21
21
  :filename => 'presentation',
22
22
  :listings => false,
23
23
  :graphics => true,
@@ -35,7 +35,7 @@ module Condom
35
35
 
36
36
  # This method will write in the output directory all needed files.
37
37
  def create
38
- in_outputdir do
38
+ in_directory do
39
39
  # Create files
40
40
  build "presentation.tex"
41
41
  File.rename("presentation.tex", "main.tex")
metadata CHANGED
@@ -4,10 +4,10 @@ version: !ruby/object:Gem::Version
4
4
  hash: 23
5
5
  prerelease: false
6
6
  segments:
7
+ - 1
7
8
  - 0
8
- - 2
9
9
  - 0
10
- version: 0.2.0
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Vivien Didelot
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-08-18 00:00:00 +10:00
18
+ date: 2010-08-19 00:00:00 +10:00
19
19
  default_executable:
20
20
  dependencies: []
21
21