typst 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +8 -1
- data/README.typ +8 -1
- data/Rakefile +7 -0
- data/lib/typst.rb +58 -31
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f77a7d7e2a7130f282f136e290f924e4bc85915a787731d2a43c5907ad28c9f5
|
4
|
+
data.tar.gz: 1225f0ba1f3acfae310faccff69a4a623272bc3ec4af817cc2a4f65ac987167c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e0797e3299103e8e8623a505ba191661c7cdd1738377218c2e3d0553d20d75000424acad0d617524e0c87d42453dacdbedfbf17a17320165de23c17fb2e2f553
|
7
|
+
data.tar.gz: 8cc01bc1a9198949208be7a31dc212a455a733a9a5b653a294799b25a2992ff9535515675da45f8322f5e5ec9b5d61c55d264cc9d2b84216957b67976b879d7b
|
data/README.md
CHANGED
@@ -36,7 +36,7 @@ pages = Typst::Svg.new("readme.typ").pages
|
|
36
36
|
Typst::Html.new("readme.typ", "README").write("readme.html")
|
37
37
|
|
38
38
|
# Or return HTML content
|
39
|
-
markup = Typst::Html.new("readme.typ", "README").markup
|
39
|
+
markup = Typst::Html.new("readme.typ", title: "README").markup
|
40
40
|
# => "\n<!DOCTYPE html>\n<html>\n<head>\n<title>README</title>\n</head>\n<bo..."
|
41
41
|
|
42
42
|
# Compile from a string to PDF
|
@@ -70,6 +70,13 @@ icon = File.read("icon.svg")
|
|
70
70
|
font_bytes = File.read("Example.ttf")
|
71
71
|
|
72
72
|
t = Typst::Pdf.from_s(main, dependencies: { "template.typ" => template, "icon.svg" => icon }, fonts: { "Example.ttf" => font_bytes })
|
73
|
+
|
74
|
+
# From a zip file that includes a main.typ
|
75
|
+
# zip file include flat dependencies included and a fonts directory
|
76
|
+
Typst::Pdf::from_zip("working_directory.zip")
|
77
|
+
|
78
|
+
# From a zip with a named main typst file
|
79
|
+
Typst::Pdf::from_zip("working_directory.zip", "hello.typ")
|
73
80
|
```
|
74
81
|
|
75
82
|
## Contributors & Acknowledgements
|
data/README.typ
CHANGED
@@ -39,7 +39,7 @@ pages = Typst::Svg.new("readme.typ").pages
|
|
39
39
|
Typst::Html.new("readme.typ", "README").write("readme.html")
|
40
40
|
|
41
41
|
# Or return HTML content
|
42
|
-
markup = Typst::Html.new("readme.typ", "README").markup
|
42
|
+
markup = Typst::Html.new("readme.typ", title: "README").markup
|
43
43
|
# => "\n<!DOCTYPE html>\n<html>\n<head>\n<title>README</title>\n</head>\n<bo..."
|
44
44
|
|
45
45
|
# Compile from a string to PDF
|
@@ -73,6 +73,13 @@ icon = File.read("icon.svg")
|
|
73
73
|
font_bytes = File.read("Example.ttf")
|
74
74
|
|
75
75
|
t = Typst::Pdf.from_s(main, dependencies: { "template.typ" => template, "icon.svg" => icon }, fonts: { "Example.ttf" => font_bytes })
|
76
|
+
|
77
|
+
# From a zip file that includes a main.typ
|
78
|
+
# zip file include flat dependencies included and a fonts directory
|
79
|
+
Typst::Pdf::from_zip("working_directory.zip")
|
80
|
+
|
81
|
+
# From a zip with a named main typst file
|
82
|
+
Typst::Pdf::from_zip("working_directory.zip", "hello.typ")
|
76
83
|
```
|
77
84
|
|
78
85
|
== Contributors & Acknowledgements
|
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require "bundler/gem_tasks"
|
2
2
|
require "rake/extensiontask"
|
3
|
+
require "rake/testtask"
|
3
4
|
require "rubygems/package_task"
|
4
5
|
require "bundler"
|
5
6
|
|
@@ -22,3 +23,9 @@ Rake::ExtensionTask.new("typst", spec) do |ext|
|
|
22
23
|
ext.cross_compile = true
|
23
24
|
ext.cross_platform = CROSS_PLATFORMS
|
24
25
|
end
|
26
|
+
|
27
|
+
Rake::TestTask.new do |t|
|
28
|
+
t.libs << "test"
|
29
|
+
t.test_files = FileList['test/*_test.rb']
|
30
|
+
t.verbose = true
|
31
|
+
end
|
data/lib/typst.rb
CHANGED
@@ -2,10 +2,27 @@ require_relative "typst/typst"
|
|
2
2
|
require "cgi"
|
3
3
|
require "pathname"
|
4
4
|
require "tmpdir"
|
5
|
+
require "zip/filesystem"
|
5
6
|
|
6
7
|
module Typst
|
7
8
|
class Base
|
9
|
+
attr_accessor :input
|
10
|
+
attr_accessor :root
|
11
|
+
attr_accessor :font_paths
|
12
|
+
|
13
|
+
def initialize(input, root: ".", font_paths: [])
|
14
|
+
self.input = input
|
15
|
+
self.root = Pathname.new(root).expand_path.to_s
|
16
|
+
self.font_paths = font_paths.collect{ |fp| Pathname.new(fp).expand_path.to_s }
|
17
|
+
end
|
18
|
+
|
19
|
+
def write(output)
|
20
|
+
File.open(output, "w"){ |f| f.write(document) }
|
21
|
+
end
|
22
|
+
|
8
23
|
def self.from_s(main_source, dependencies: {}, fonts: {})
|
24
|
+
dependencies = {} if dependencies.nil?
|
25
|
+
fonts = {} if fonts.nil?
|
9
26
|
Dir.mktmpdir do |tmp_dir|
|
10
27
|
tmp_main_file = Pathname.new(tmp_dir).join("main.typ")
|
11
28
|
File.write(tmp_main_file, main_source)
|
@@ -16,7 +33,6 @@ module Typst
|
|
16
33
|
end
|
17
34
|
|
18
35
|
relative_font_path = Pathname.new(tmp_dir).join("fonts")
|
19
|
-
puts fonts
|
20
36
|
fonts.each do |font_name, font_bytes|
|
21
37
|
Pathname.new(relative_font_path).mkpath
|
22
38
|
tmp_font_file = relative_font_path.join(font_name)
|
@@ -26,43 +42,56 @@ module Typst
|
|
26
42
|
new(tmp_main_file, root: tmp_dir, font_paths: [relative_font_path])
|
27
43
|
end
|
28
44
|
end
|
45
|
+
|
46
|
+
def self.from_zip(zip_file_path, main_file = nil)
|
47
|
+
dependencies = {}
|
48
|
+
fonts = {}
|
49
|
+
|
50
|
+
Zip::File.open(zip_file_path) do |zipfile|
|
51
|
+
file_names = zipfile.dir.glob("*").collect{ |f| f.name }
|
52
|
+
case
|
53
|
+
when file_names.include?(main_file) then tmp_main_file = main_file
|
54
|
+
when file_names.include?("main.typ") then tmp_main_file = "main.typ"
|
55
|
+
when file_names.size == 1 then tmp_main_file = file_names.first
|
56
|
+
else raise "no main file found"
|
57
|
+
end
|
58
|
+
main_source = zipfile.file.read(tmp_main_file)
|
59
|
+
file_names.delete(tmp_main_file)
|
60
|
+
file_names.delete("fonts/")
|
61
|
+
|
62
|
+
file_names.each do |dep_name|
|
63
|
+
dependencies[dep_name] = zipfile.file.read(dep_name)
|
64
|
+
end
|
65
|
+
|
66
|
+
font_file_names = zipfile.dir.glob("fonts/*").collect{ |f| f.name }
|
67
|
+
font_file_names.each do |font_name|
|
68
|
+
fonts[Pathname.new(font_name).basename.to_s] = zipfile.file.read(font_name)
|
69
|
+
end
|
70
|
+
|
71
|
+
from_s(main_source, dependencies: dependencies, fonts: fonts)
|
72
|
+
end
|
73
|
+
end
|
29
74
|
end
|
30
75
|
|
31
76
|
class Pdf < Base
|
32
|
-
attr_accessor :input
|
33
|
-
attr_accessor :root
|
34
|
-
attr_accessor :font_paths
|
35
77
|
attr_accessor :bytes
|
36
78
|
|
37
|
-
def initialize(input, root: ".", font_paths: [
|
38
|
-
|
39
|
-
self.root
|
40
|
-
self.font_paths = font_paths
|
41
|
-
|
42
|
-
@bytes = Typst::_to_pdf(input, root, font_paths, File.dirname(__FILE__))
|
79
|
+
def initialize(input, root: ".", font_paths: [])
|
80
|
+
super(input, root: root, font_paths: font_paths)
|
81
|
+
@bytes = Typst::_to_pdf(self.input, self.root, self.font_paths, File.dirname(__FILE__))
|
43
82
|
end
|
44
83
|
|
45
84
|
def document
|
46
85
|
bytes.pack("C*").to_s
|
47
86
|
end
|
48
|
-
|
49
|
-
def write(output)
|
50
|
-
File.open(output, "w"){ |f| f.write(document) }
|
51
|
-
end
|
52
87
|
end
|
53
88
|
|
54
89
|
class Svg < Base
|
55
|
-
attr_accessor :input
|
56
|
-
attr_accessor :root
|
57
|
-
attr_accessor :font_paths
|
58
90
|
attr_accessor :pages
|
59
91
|
|
60
|
-
def initialize(input, root: ".", font_paths: [
|
61
|
-
|
62
|
-
self.root
|
63
|
-
self.font_paths = font_paths
|
64
|
-
|
65
|
-
@pages = Typst::_to_svg(input, root, font_paths, File.dirname(__FILE__))
|
92
|
+
def initialize(input, root: ".", font_paths: [])
|
93
|
+
super(input, root: root, font_paths: font_paths)
|
94
|
+
@pages = Typst::_to_svg(self.input, self.root, self.font_paths, File.dirname(__FILE__))
|
66
95
|
end
|
67
96
|
|
68
97
|
def write(output)
|
@@ -88,12 +117,13 @@ module Typst
|
|
88
117
|
attr_accessor :svg
|
89
118
|
attr_accessor :html
|
90
119
|
|
91
|
-
def initialize(input, title
|
120
|
+
def initialize(input, title: nil, root: ".", font_paths: [])
|
121
|
+
super(input, root: root, font_paths: font_paths)
|
92
122
|
title = title || File.basename(input, File.extname(input))
|
93
|
-
|
94
|
-
|
123
|
+
self.title = CGI::escapeHTML(title)
|
124
|
+
self.svg = Svg.new(self.input, root: self.root, font_paths: self.font_paths)
|
95
125
|
end
|
96
|
-
|
126
|
+
|
97
127
|
def markup
|
98
128
|
%{
|
99
129
|
<!DOCTYPE html>
|
@@ -107,9 +137,6 @@ module Typst
|
|
107
137
|
</html>
|
108
138
|
}
|
109
139
|
end
|
110
|
-
|
111
|
-
def write(output)
|
112
|
-
File.open(output, "w"){ |f| f.write(markup) }
|
113
|
-
end
|
140
|
+
alias_method :document, :markup
|
114
141
|
end
|
115
142
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: typst
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Flinn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-11-
|
11
|
+
date: 2023-11-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rb_sys
|
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
79
|
- !ruby/object:Gem::Version
|
80
80
|
version: '0'
|
81
81
|
requirements: []
|
82
|
-
rubygems_version: 3.
|
82
|
+
rubygems_version: 3.4.22
|
83
83
|
signing_key:
|
84
84
|
specification_version: 4
|
85
85
|
summary: Ruby binding to typst, a new markup-based typesetting system that is powerful
|