htmlbook 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 10f3f8845485c92b7a57f88b8590e52d24d7725cb9ec455666f96151c175b5dc
4
+ data.tar.gz: 0c306002be7f38ec4c10dad2c3e1471ecea5df015ff89d2a5c9356f004595fc8
5
+ SHA512:
6
+ metadata.gz: 1ba7edfed7e6258889739411a15e3641913ae7af599eaaba186f01e1f787db115060d7ef3fe5adaf4449d5f46fa6e00134cfca5cc0b58241e0d4311a4bad393d
7
+ data.tar.gz: a91da212f1c25dfd0b2815ca5fdb60ecf8e00ab79ce05e15edb759802054e258d25210fe66d62427943bb797d7e399278e0c21dc5a22bba95e53a87fe59de21c
checksums.yaml.gz.sig ADDED
@@ -0,0 +1,5 @@
1
+ ��s�AB茇��Hr|��
2
+ c���cb;��t� y��F6��7�
3
+ 0���r`P�A"� �*Xua�Tc�� s���cPC%������[��;���o��4>h�̍�Aܕo�
4
+ ��!�䫖���W�ѵT+9�RO�ma��z�CҊJ���'��4wH���u����t�qT��
5
+ ��j��>�r�Kt��]HU@�V�7�(��i�'��Em8��!����}{�����>�?�X״�>83V�T�yVmT��C�� ��R�9��u,��Z��r2w�,\T���\e�x��yu��o���~��}�_�� �>�ڗ_f���G����!$��̆%��T~
data.tar.gz.sig ADDED
Binary file
data/lib/htmlbook.rb ADDED
@@ -0,0 +1,147 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # file: htmlbook.rb
4
+
5
+
6
+ require 'rexle-builder'
7
+ require 'qnd_html2page'
8
+
9
+
10
+
11
+ class HtmlBook
12
+
13
+ attr_reader :to_html
14
+ attr_accessor :pages
15
+
16
+
17
+ def initialize(filename='page.html', pg_height: 740, width: '700px',
18
+ debug: false)
19
+
20
+ @filename, @pg_height, @width, @debug = filename, pg_height, width, debug
21
+ @doc = build()
22
+ @to_html = @doc.root.xml pretty: true
23
+
24
+ end
25
+
26
+ def build()
27
+
28
+ doc = Rexle.new(RXFHelper.read(@filename).first)
29
+
30
+ style = Rexle::Element.new('style').add_text css
31
+ style.attributes[:id] = 'tmpcss'
32
+ doc.root.element('head').add style
33
+ puts 'doc: ' + doc.xml.inspect if @debug
34
+
35
+ pages = QndHtml2Page.new(doc, pg_height: @pg_height, debug: @debug).to_pages
36
+ doc.at_css('#tmpcss').delete
37
+ build_html doc, collate(pages)
38
+
39
+ end
40
+
41
+ def save(filename=@filename.sub(/\.\w+$/,'2\0'))
42
+
43
+ css_filename = filename.sub(/\.html$/, '.css')
44
+ @doc.root.element('head/link').attributes[:href] = css_filename
45
+ File.write css_filename, css()
46
+ File.write filename, @doc.xml(pretty: true)
47
+
48
+ end
49
+
50
+ protected
51
+
52
+ def collate(pages)
53
+ pages.map.with_index {|pg, pg_no| [pg, pg_no+1]}
54
+ end
55
+
56
+
57
+ def build_html(doc, pages)
58
+
59
+ xml = RexleBuilder.new
60
+
61
+ a = xml.body do
62
+
63
+ pages.each do |page, pg_no|
64
+
65
+ puts 'page: ' + page.inspect if @debug
66
+
67
+ xml.div({class: 'page '}) do
68
+ xml.article page.children.join
69
+ xml.footer do
70
+ xml.p({class: 'n'+ (pg_no.odd? ? 'odd' : 'even')},
71
+ 'pg ' + pg_no.to_s)
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
79
+ body = Rexle.new(a).root
80
+ puts 'after body' if @debug
81
+ doc.root.element('body').delete
82
+ doc.root.add body
83
+
84
+ attr = Attributes.new( { rel: "stylesheet", type: "text/css", \
85
+ href: @filename.sub(/\.html$/, '.css'), media: \
86
+ "screen, projection, tv, print" })
87
+ link = Rexle::Element.new('link', attributes: attr)
88
+
89
+ doc.root.element('head').add link
90
+ puts 'returning the doc' if @debug
91
+ return doc
92
+
93
+ end
94
+
95
+ def css()
96
+ <<CSS
97
+ html,
98
+ body {
99
+ height: 100%;
100
+ margin: 0;
101
+ padding: 0;
102
+ max-width: 700px;
103
+ }
104
+
105
+ span {font-size: 0.01em; margin: 0; padding: 0;}
106
+
107
+ .page {
108
+ display: flex;
109
+ flex-direction: column;
110
+ min-height: 100%;
111
+ }
112
+
113
+ article {
114
+ flex: 1;
115
+ }
116
+
117
+ @media print {
118
+ .page {page-break-after: always;}
119
+ }
120
+
121
+ .page {
122
+
123
+ margin: 0; padding: 0;
124
+ border: 1px solid black;
125
+ /* height: 98vh; */
126
+
127
+ display: -webkit-box;
128
+ display: -ms-flexbox;
129
+ display: flex;
130
+ -webkit-box-orient: vertical;
131
+ -webkit-box-direction: normal;
132
+ -ms-flex-direction: column;
133
+ flex-direction: column;
134
+ min-height: 88%;
135
+ }
136
+ article {
137
+ -webkit-box-flex: 1;
138
+ -ms-flex: 1;
139
+ flex: 1;
140
+ }
141
+
142
+
143
+ footer p.nodd {text-align: right;}
144
+ CSS
145
+ end
146
+
147
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: htmlbook
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - James Robertson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIEXjCCAsagAwIBAgIBATANBgkqhkiG9w0BAQsFADAsMSowKAYDVQQDDCFnZW1t
14
+ YXN0ZXIvREM9amFtZXNyb2JlcnRzb24vREM9ZXUwHhcNMTkxMTE2MTUyMjAyWhcN
15
+ MjAxMTE1MTUyMjAyWjAsMSowKAYDVQQDDCFnZW1tYXN0ZXIvREM9amFtZXNyb2Jl
16
+ cnRzb24vREM9ZXUwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQDi9Sru
17
+ HD3vHQ+YTPitbpUhw/tAZMnq1G1lVUuLajG/ik/15c5kTSBVAxuWU4dHQzyNXX0U
18
+ 2DLZz91jwOxNJ0MIIlJH+Xq+OU2RSYOBeAntLYvjEBtoI+zmfu2U/hfaF/RKc7tl
19
+ 4huuaYuQv/IqHCGkfI5F9j6mrCKQ1GSqx38dUHsBn/DDdQuTZRRrj2Yw5ZL+jsEX
20
+ tqPAYuaTi4EyXTrn+IluwX0xDFKWv6dGZMWJN8ffQrc91SiTNlxtPYF/l7/NgL3b
21
+ igHrpgFVz+absPuoyBQkXCvsTB3PqT77bqF4eyxAnv7lvR9JrVZM6w9Oi9wiRj00
22
+ SegBjDh/Dg8aFOrTjnS13t/0F2T5YZfkWBZ1JietT9UrJ7fCwm+sm0f9v6NETQcm
23
+ 29LXjMQxhBlF85bbpm84Ck3DCnv7CYuoMNnmQgLvw+4hMVLe96oRCNEnyhWSoq5n
24
+ TQVonZ5mdlG7MRHGVdEbPeI5nh7VKsnZEwJQ+ux1WhTd/L50RiLXyikDQRECAwEA
25
+ AaOBijCBhzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUDaEn/0Sq
26
+ 5kuX6NHDetH437zML0MwJgYDVR0RBB8wHYEbZ2VtbWFzdGVyQGphbWVzcm9iZXJ0
27
+ c29uLmV1MCYGA1UdEgQfMB2BG2dlbW1hc3RlckBqYW1lc3JvYmVydHNvbi5ldTAN
28
+ BgkqhkiG9w0BAQsFAAOCAYEAROPQEh/ihps3RJBkIToRvXnRcGMxDhlfrNdpMOZ7
29
+ cHbnuOlBvNxid/mQwUlhUk1rE9DDJFj6nPVi7xsrfJ9CrOEnJjIdeTdChSQySqhv
30
+ Qwsi4ZaFewzFy0FsO0mSQfmnE2PTUUqxD4rS0M2g5hIhG+v2OBdGjoFjI0oC5t0T
31
+ qGX38tGPcRCNSFSunuZ6DyWLOjpXnX6Z20ezCuDEWnvTj7APEBqlF/HfLsjsTULb
32
+ cEWwbBcEhMSgNznU9vNgwfabV4OTpmwvpur6rZ15CkgKaHm2aatptMapCAbTB5DX
33
+ QaxfoCpYIF+yJtlsE3sGEN6TEfQZIMVVicvYj0Do0nvamm9Vw4iqorC6q9u7S3jC
34
+ 8diuZ2ZUZXcLEREquZpYqSJbitPMoyFOYe104yhKE1WhKYUpARFFH2SmQ7t3SDKp
35
+ JzJ+vVK2nBBwLjr8nzpnfLRIxq24kWw0fnDGw6Fmo9YgOBgYF1ILms0yUtG5Djbw
36
+ HYHAFbWFozHFF3iNasmW1GoT
37
+ -----END CERTIFICATE-----
38
+ date: 2019-11-16 00:00:00.000000000 Z
39
+ dependencies:
40
+ - !ruby/object:Gem::Dependency
41
+ name: qnd_html2page
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 0.2.0
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '0.2'
50
+ type: :runtime
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.2.0
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.2'
60
+ description:
61
+ email: james@jamesrobertson.eu
62
+ executables: []
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - lib/htmlbook.rb
67
+ homepage: https://github.com/jrobertson/htmlbook
68
+ licenses:
69
+ - MIT
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubygems_version: 3.0.3
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: Splits HTML content into pages suitable for printing.
90
+ test_files: []
metadata.gz.sig ADDED
Binary file