condom 0.2.0 → 1.0.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.
@@ -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