cvgen 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 995328ac1dfc6664b3b62d0c5d1beef9740b0853
4
+ data.tar.gz: 8be0281314e3f56ff61565b197fdadcfa7bb1048
5
+ SHA512:
6
+ metadata.gz: 61f110c5fb8f35c9a0f8c26d286594810607b1e21a410e9e833e1f59cf79ef3af9d2ac973c13c4ff0fd4a214741a1b2333e3d8babf21b6e7645b928f4395603f
7
+ data.tar.gz: 242f047e6f51701cdc1c0a410847fea35a2381769fdb82ebb1d4780074073edf39af1537272089898197f09b57401735281a29e74f37f51c7a2d92e17ca65f78
data/bin/cvgen ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ lib_dir = File.expand_path("../lib", File.dirname(__FILE__))
4
+ $LOAD_PATH.unshift lib_dir unless $LOAD_PATH.include? lib_dir
5
+
6
+ require 'cvgen/exec'
7
+
8
+ CVGen::Exec.call
@@ -0,0 +1,87 @@
1
+ require 'kramdown'
2
+ require 'prawn'
3
+
4
+ module CVGen
5
+
6
+ class Converter < Kramdown::Converter::Pdf
7
+
8
+ HEADER_SIZES = [nil, 24, 16, 16, 12, 12, 12]
9
+ HEADER_TOP_PADDING = [nil, 0, 10, 10, 0, 0, 0]
10
+ HEADER_BOTTOM_PADDING = [nil, 4, 4, 6, 0, 0, 0]
11
+
12
+ def initialize(root, options)
13
+ @current_padding = 0
14
+ super
15
+ end
16
+
17
+ def root_options(root, opts)
18
+ super.update(:font => "Helvetica", :leading => 1, :kerning => true, :header_font => @options[:'header-font'])
19
+ end
20
+
21
+ def header_options(el, opts)
22
+ h = super
23
+ h[:font] = opts[:header_font] if opts[:header_font]
24
+ h.update({
25
+ :size => HEADER_SIZES[el.options[:level]],
26
+ :styles => [],
27
+ :bottom_padding => HEADER_BOTTOM_PADDING[el.options[:level]],
28
+ :top_padding => HEADER_TOP_PADDING[el.options[:level]]})
29
+ end
30
+
31
+ def render_header(el, opts)
32
+ if el.options['date']
33
+ @pdf.float do
34
+ with_block_padding(el, opts, true) do
35
+ @pdf.formatted_text [opts.merge(:text =>el.options['date'])], :align => :right
36
+ end
37
+ end
38
+ end
39
+ super
40
+ if el.options[:level] == 2
41
+ @pdf.stroke_horizontal_rule
42
+ @pdf.move_down 12
43
+ @current_padding += 12
44
+ end
45
+ end
46
+
47
+ def ul_options(el, opts)
48
+ {}
49
+ end
50
+
51
+ def render_ul(el, opts)
52
+ @pdf.indent(15) { super }
53
+ end
54
+
55
+ def dt_options(el, opts)
56
+ super.update(:styles => [:italic])
57
+ end
58
+
59
+ def p_options(el, opts)
60
+ {:bottom_padding => 0}
61
+ end
62
+
63
+ def document_options(root)
64
+ h = super.update(:margin => 72)
65
+ h[:info].update(@options[:'document-info']) if @options[:'document-info']
66
+ h
67
+ end
68
+
69
+ def with_block_padding(el, opts, floated = false)
70
+
71
+ if opts.has_key?(:top_padding)
72
+ top = opts[:top_padding]
73
+ if top > @current_padding
74
+ @pdf.move_down(top - @current_padding)
75
+ end
76
+ end
77
+ @current_padding = 0 unless floated
78
+ yield
79
+ if opts.has_key?(:bottom_padding)
80
+ @pdf.move_down(opts[:bottom_padding])
81
+ @current_padding = opts[:bottom_padding] unless floated
82
+ end
83
+ end
84
+
85
+
86
+ end
87
+ end
data/lib/cvgen/exec.rb ADDED
@@ -0,0 +1,24 @@
1
+ require 'cvgen'
2
+ require 'yaml'
3
+
4
+ module CVGen
5
+ module Exec
6
+
7
+ def self.call
8
+ input = ARGF.read
9
+
10
+ if input.start_with? "---\n"
11
+ config, input = input.split /(?<=\.{3}\n)/, 2
12
+ end
13
+ config = YAML.load config
14
+ raise "Config must be a hash" unless config.is_a? Hash
15
+
16
+ out = CVGen.generate input, config
17
+
18
+ $stdout.write out
19
+
20
+ end
21
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,40 @@
1
+ require 'kramdown'
2
+
3
+ module CVGen
4
+
5
+ class Parser < Kramdown::Parser::Kramdown
6
+ Kramdown::Parser::Kramdown.send :remove_const, :ATX_HEADER_MATCH
7
+ Kramdown::Parser::Kramdown::ATX_HEADER_MATCH = /^(\#{1,6})(.+?(?:\\#)?)\s*?#*#{HEADER_ID}\s*?\n(?:(?:(\S.*)\s*?\n)(?:(\S.*)[ \t]*\n)?)?/
8
+
9
+ # def parse_atx_header
10
+ # return false if !after_block_boundary?
11
+
12
+ # start_line_number = @src.current_line_number
13
+ # @src.check(ATX_HEADER_MATCH)
14
+ # level, text, id = @src[1], @src[2].to_s.strip, @src[3]
15
+ # return false if text.empty?
16
+
17
+ # @src.pos += @src.matched_size
18
+ # el = new_block_el(:header, nil, nil, :level => level.length, :raw_text => text, :location => start_line_number)
19
+ # add_text(text, el)
20
+ # el.attr['id'] = id if id
21
+ # @tree.children << el
22
+ # true
23
+ # end
24
+
25
+ def parse_atx_header
26
+ rval = super
27
+
28
+ if rval
29
+ @tree.children.last.options['date'] = @src[4]
30
+ if @src[5]
31
+ @tree.children.last.children << Element.new(:br, nil, nil, :location => @src.current_line_number)
32
+ add_text(@src[5], @tree.children.last)
33
+ end
34
+ end
35
+
36
+ rval
37
+ end
38
+ end
39
+
40
+ end
data/lib/cvgen.rb ADDED
@@ -0,0 +1,14 @@
1
+ require 'cvgen/parser'
2
+ require 'cvgen/converter'
3
+
4
+ module CVGen
5
+
6
+ def self.generate source, opts={}
7
+ root, warnings = Parser.parse(source, opts)
8
+ $stderr.puts warnings if warnings
9
+ output, c_warnings = Converter.convert(root, opts)
10
+ $stderr.puts c_warnings if c_warnings
11
+ output
12
+ end
13
+
14
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cvgen
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Matt Wildig
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: kramdown
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: prawn
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: prawn-table
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
55
+ description: Because everybody hates word processors
56
+ email: matt@mattwildig.co.uk
57
+ executables:
58
+ - cvgen
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - bin/cvgen
63
+ - lib/cvgen.rb
64
+ - lib/cvgen/converter.rb
65
+ - lib/cvgen/exec.rb
66
+ - lib/cvgen/parser.rb
67
+ homepage: https://github.com/mattwildig/cvgen
68
+ licenses: []
69
+ metadata: {}
70
+ post_install_message:
71
+ rdoc_options: []
72
+ require_paths:
73
+ - lib
74
+ required_ruby_version: !ruby/object:Gem::Requirement
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ required_rubygems_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ requirements: []
85
+ rubyforge_project:
86
+ rubygems_version: 2.4.2
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: Generate CVs in PDF format from Markdown-like source
90
+ test_files: []