przn 0.1.6 → 0.3.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.
data/lib/przn.rb CHANGED
@@ -10,21 +10,41 @@ require_relative "przn/terminal"
10
10
  require_relative "przn/renderer"
11
11
  require_relative "przn/controller"
12
12
  require_relative "przn/pdf_exporter"
13
+ require_relative "przn/screenshot_pdf_exporter"
13
14
  require_relative "przn/theme"
14
15
 
15
16
  module Przn
16
17
  class Error < StandardError; end
17
18
 
18
- def self.start(file, theme: nil)
19
+ def self.start(file, theme: nil, start_at: nil)
19
20
  markdown = File.read(file)
20
21
  presentation = Parser.parse(markdown)
22
+ presentation.go_to(start_at - 1) if start_at
21
23
  terminal = Terminal.new
22
24
  base_dir = File.dirname(File.expand_path(file))
23
25
  renderer = Renderer.new(terminal, base_dir: base_dir, theme: theme)
24
26
  Controller.new(presentation, terminal, renderer)
25
27
  end
26
28
 
29
+ # Default PDF export: drives the live renderer, asks the terminal to save
30
+ # each rendered slide as a one-page vector PDF via OSC 7772 `capture`,
31
+ # then concatenates the per-slide PDFs into a single multi-page PDF.
32
+ # Requires Echoes (or any terminal that implements the same capture
33
+ # command); use `export_pdf_prawn` instead for environments where that's
34
+ # not possible (CI, headless).
27
35
  def self.export_pdf(file, output, theme: nil)
36
+ markdown = File.read(file)
37
+ presentation = Parser.parse(markdown)
38
+ base_dir = File.dirname(File.expand_path(file))
39
+ ScreenshotPdfExporter.new(presentation, base_dir: base_dir, theme: theme).export(output)
40
+ puts "Generated: #{output}"
41
+ end
42
+
43
+ # Legacy PDF export via Prawn — renders the deck directly into a vector
44
+ # PDF without touching the terminal. Diverges from what's on screen for
45
+ # any feature the live renderer adds (OSC 66 sized text, OSC 7772
46
+ # backgrounds, proportional fonts) but works headlessly.
47
+ def self.export_pdf_prawn(file, output, theme: nil)
28
48
  markdown = File.read(file)
29
49
  presentation = Parser.parse(markdown)
30
50
  base_dir = File.dirname(File.expand_path(file))
metadata CHANGED
@@ -1,76 +1,96 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: przn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
- - Akira Matsuda
7
+ - Akira Matsuda
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: prawn
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - ">="
17
- - !ruby/object:Gem::Version
18
- version: '0'
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - ">="
24
- - !ruby/object:Gem::Version
25
- version: '0'
26
- description: A terminal-based presentation tool that renders Markdown slides with
27
- Kitty text sizing protocol support for beautifully scaled headers
12
+ - !ruby/object:Gem::Dependency
13
+ name: prawn
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ -
17
+ - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: "0"
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ -
25
+ - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: "0"
28
+ - !ruby/object:Gem::Dependency
29
+ name: hexapdf
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ -
33
+ - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ -
41
+ - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ description: A terminal-based presentation tool that renders Markdown slides with Kitty text sizing protocol support for beautifully scaled headers
28
45
  email:
29
- - ronnie@dio.jp
46
+ - ronnie@dio.jp
30
47
  executables:
31
- - przn
48
+ - przn
32
49
  extensions: []
33
50
  extra_rdoc_files: []
34
51
  files:
35
- - LICENSE.txt
36
- - README.md
37
- - Rakefile
38
- - default_theme.yml
39
- - exe/przn
40
- - lib/przn.rb
41
- - lib/przn/controller.rb
42
- - lib/przn/image_util.rb
43
- - lib/przn/kitty_text.rb
44
- - lib/przn/parser.rb
45
- - lib/przn/pdf_exporter.rb
46
- - lib/przn/presentation.rb
47
- - lib/przn/renderer.rb
48
- - lib/przn/slide.rb
49
- - lib/przn/terminal.rb
50
- - lib/przn/theme.rb
51
- - lib/przn/version.rb
52
- - sample/sample.md
53
- - sig/przn.rbs
54
- homepage: https://github.com/amatsuda/przn
52
+ - LICENSE.txt
53
+ - README.md
54
+ - Rakefile
55
+ - default_theme.yml
56
+ - exe/przn
57
+ - lib/przn.rb
58
+ - lib/przn/controller.rb
59
+ - lib/przn/image_util.rb
60
+ - lib/przn/kitty_text.rb
61
+ - lib/przn/parser.rb
62
+ - lib/przn/pdf_exporter.rb
63
+ - lib/przn/presentation.rb
64
+ - lib/przn/renderer.rb
65
+ - lib/przn/screenshot_pdf_exporter.rb
66
+ - lib/przn/slide.rb
67
+ - lib/przn/terminal.rb
68
+ - lib/przn/theme.rb
69
+ - lib/przn/version.rb
70
+ - sample/sample.md
71
+ - sig/przn.rbs
72
+ homepage: "https://github.com/amatsuda/przn"
55
73
  licenses:
56
- - MIT
74
+ - MIT
57
75
  metadata:
58
- allowed_push_host: https://rubygems.org
59
- source_code_uri: https://github.com/amatsuda/przn
60
- homepage_uri: https://github.com/amatsuda/przn
76
+ allowed_push_host: "https://rubygems.org"
77
+ source_code_uri: "https://github.com/amatsuda/przn"
78
+ homepage_uri: "https://github.com/amatsuda/przn"
61
79
  rdoc_options: []
62
80
  require_paths:
63
- - lib
81
+ - lib
64
82
  required_ruby_version: !ruby/object:Gem::Requirement
65
83
  requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- version: '0'
84
+ -
85
+ - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
69
88
  required_rubygems_version: !ruby/object:Gem::Requirement
70
89
  requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- version: '0'
90
+ -
91
+ - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: "0"
74
94
  requirements: []
75
95
  rubygems_version: 4.1.0.dev
76
96
  specification_version: 4