asciidoctor-p2e 0.1.1 → 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.
@@ -1,11 +1,46 @@
1
+ /* Fonts */
2
+ /* devanagari */
3
+ @font-face {
4
+ font-family: 'Eczar';
5
+ font-style: normal;
6
+ font-weight: 800;
7
+ src: url(BXRovF3Pi-DLmzWCKvt80WrNWA.woff2) format('woff2');
8
+ unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
9
+ }
10
+ /* latin-ext */
11
+ @font-face {
12
+ font-family: 'Eczar';
13
+ font-style: normal;
14
+ font-weight: 800;
15
+ src: url(BXRovF3Pi-DLmzWCKvtz0WrNWA.woff2) format('woff2');
16
+ unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
17
+ }
18
+ /* latin */
19
+ @font-face {
20
+ font-family: 'Eczar';
21
+ font-style: normal;
22
+ font-weight: 800;
23
+ src: url(BXRovF3Pi-DLmzWCKvt90Wo.woff2) format('woff2');
24
+ unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
25
+ }
26
+
27
+ /* Stat blocks */
1
28
  .statblock {
2
29
  width: 500px;
3
30
  border: 1px solid black;
4
- margin: 20px;
31
+ /* margin: 20px;*/
5
32
  padding: 20px;
6
33
  font-family: "Roboto", Geneva, sans-serif;
7
34
  font-size: 16px;
8
35
  line-height: 24px;
36
+ display: block;
37
+ background: #f7f7f8;
38
+ }
39
+ .statblock.left {
40
+ margin-right: 20px;
41
+ }
42
+ .statblock.right {
43
+ margin-left: 20px;
9
44
  }
10
45
  .statblock-title {
11
46
  font-size: 23px;
@@ -16,13 +51,12 @@
16
51
  .statblock-name {
17
52
  float: left;
18
53
  }
19
- .statblock-creature {
54
+ .statblock-type {
20
55
  float: right;
21
56
  text-align: right;
22
57
  }
23
58
  .statblock-tags {
24
59
  height: 26px;
25
- /*background-color: BurlyWood;*/
26
60
  width: fit-content;
27
61
  }
28
62
  .statblock-info-block {
@@ -126,3 +160,92 @@
126
160
  background-repeat: no-repeat;
127
161
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABHNCSVQICAgIfAhkiAAAA8BJREFUSImdlUlsHEUUht/rWrp6lp7unnHPjJ2MgxNWgyKWA6AEC5BsQUBRpCAOKBcIAoGPIG7ABS4sEgpwgguXnBIPxgbFCOUQcQBFiVgiDnC3PYsjHHdVLzNdXGxr0p6QOP/x1d/1Vb3X7xXADYSI1HPcDznjB27kGbTfgmdXIhXPOzXRGE8bY2N/M8YmbmRkjO2tV2sLlNK9twMyhsXKrvuRXSi+iYjIKDtQH/EXGWONrJFSWqv71XM5IY7U/eoPhJD6MAgiskK+8NIwHskGPMf9wLHttxBxO62EkIolrGml1Hyapuub8OqoX/2RMTa56fFzljUdSHlGax0MwkfK5a/cUuk9NIycCsOf/jcD/X7/H611ko1zxiZrI/4ipbQKAFAsFF5kjN1/vYc/UPer3xNCKlv8ilf+spgvnEBEwynab7uO8z4M/DPbGSgV7dcBQQVSLmnQbWGaM4h4XYYIIVVLiCelUk2p5HnKqGNy/uighxIyKkwxFUh5Vmsd5S3rOc75Q7gpYZqHAbAfRuGF7QOUbHu27LmfFXL5YzJUC1LKJQC4KoSYRkRjJ8A8LJVqbgTBt4wz32T8kcFbUUr3WEIcCqQ8I5VqUkoanPGDA4eY0hrCMIp+JnaxeLLieacQkBqIdj6Xe14p9V2g5DkEDCwhZrLloJTuEab5uFTqbBAETcbYHZzxgxlPQ5jmY0EQnJZKzXPO7uGMTwIAIKJhCfFUmqZdA3b2MAcAsVXDLBwAQGutt5YMwygwxu4cZot7yZVU65AQUuaU3Z3Z41oUJ5dJFMeXUq2vWpaYTvtpZ7m1OhMnyZ+OXZp1HefjbAm01jqK419W2q2jWut4tFpbMDk/lIWvb1z7uttdm6WEVmq+v2hy/uDWYpqm6yvt1rEwCi9QAIB/19c/B4B+GEa/xnH8e8m2X3NLpU8NRJqFx0lyabXTPqq1VnW/2jQ5fyLr2ZDBN521tTcAQdf8kTmT84e34TrdWOm0j6swPA8w0AVRFF3s9/vLpaL9suc4XxiGwbM5TZLkj5V265ler9dyHeedYj5/MnvzQMrT7W73lc1W1ohG3xLiCCISrbVabbePK6WWtj7YMYjyudwLlhBTg4MIACBOkisr7dazvV5vGQAgjKKLpmnexyi7dwA+1+p2TgzOkSiOftMaVi0hnm51O68GUs5lmVkZZdf7ZKIxnu4f36cnGuNpY3Tsr2GjGBH5aK02v398X1ob8ZuIKIZtCADAOb/rZuBB3fJjZBiG5bnuu4iY2w3gptrlc3zb+g/DZ3c9xGiesQAAAABJRU5ErkJggg==)
128
162
  }
163
+
164
+ /* Headings, TOC, dividers, and background */
165
+ body {
166
+ background: url("parchment.jpg");
167
+ background-repeat: repeat-y;
168
+ background-size: contain;
169
+ }
170
+ body.toc2 #header > h1:nth-last-child(2) {
171
+ border-bottom: none;
172
+ text-align: center;
173
+ }
174
+ body.toc2 #header > h1:nth-last-child(2)::after, .sect1 + .sect1::before {
175
+ content: "";
176
+ display: block;
177
+ height: 40px;
178
+ background-image: url("divider.png");
179
+ background-repeat: no-repeat;
180
+ background-position: center bottom;
181
+ background-size: cover;
182
+ }
183
+ .sect1 + .sect1 {
184
+ border-top: none;
185
+ }
186
+ h1, h2, #toctitle, #toc a {
187
+ font-family: 'Eczar', sans-serif !important;
188
+ color:#4E0707 !important;
189
+ }
190
+ h1, #toctitle {
191
+ border-color:#EFCD98;
192
+ border 10px;
193
+ text-shadow: 1px 1px 0 #EFCD98, -1px 1px 0 #EFCD98, 1px -1px 0 #EFCD98, -1px -1px 0 #EFCD98, 0px 1px 0 #EFCD98, 0px -1px 0 #EFCD98, -1px 0px 0 #EFCD98, 1px 0px 0 #EFCD98, 2px 2px 0 #EFCD98, -2px 2px 0 #EFCD98, 2px -2px 0 #EFCD98, -2px -2px 0 #EFCD98, 0px 2px 0 #EFCD98, 0px -2px 0 #EFCD98, -2px 0px 0 #EFCD98, 2px 0px 0 #EFCD98, 1px 2px 0 #EFCD98, -1px 2px 0 #EFCD98, 1px -2px 0 #EFCD98, -1px -2px 0 #EFCD98, 2px 1px 0 #EFCD98, -2px 1px 0 #EFCD98, 2px -1px 0 #EFCD98, -2px -1px 0 #EFCD98;
194
+ }
195
+ h1 {
196
+ font-size: 6em;
197
+ }
198
+ h2 {
199
+ font-size: 3.5em;
200
+ }
201
+ h3 {
202
+ color:#02256E;
203
+ font-size: 2.25em;
204
+ }
205
+ #toc.toc2 {
206
+ background: url(toc.png);
207
+ border-right: none;
208
+ background-repeat: repeat-y;
209
+ }
210
+ #toctitle {
211
+ font-size: 1.75em !important;
212
+ }
213
+ #toc a {
214
+ font-size: 1.1em;
215
+ }
216
+
217
+ /* Sidebar */
218
+ .sidebarblock {
219
+ background: url(sidebar.png);
220
+ padding: 1.75em;
221
+ border-style: none;
222
+ background-repeat: no-repeat;
223
+ background-size: cover;
224
+ }
225
+
226
+ /* Tables */
227
+ table {
228
+ background-color: #F5EFE0;
229
+ margin-bottom:0px;
230
+ }
231
+ table tr th {
232
+ background-color: #5E0000;
233
+ color: white !important;
234
+ padding-top:4px;
235
+ }
236
+ table tbody tr:nth-child(odd) {
237
+ background-color: #EDE3C8
238
+ }
239
+ table tbody, table th {
240
+ font-family: 'Roboto Condensed', sans-serif;
241
+ }
242
+ .tablefooter {
243
+ background-color:#E6D8B0 !important;
244
+ }
245
+ table.left {
246
+ margin-right: 35px;
247
+ }
248
+ table.right {
249
+ margin-left: 35px;
250
+ }
251
+
Binary file
@@ -1,7 +1,7 @@
1
- <div class="statblock">
1
+ <div class="statblock <%= defined?(role) ? role : '' %>">
2
2
  <div class="statblock-title">
3
3
  <span class="statblock-name"><%= name %></span>
4
- <span class="statblock-creature"> CREATURE <%= level %></span>
4
+ <span class="statblock-type"> CREATURE <%= level %></span>
5
5
  </div>
6
6
  <div class="statblock-info-block">
7
7
  <div class="statblock-tags">
@@ -27,7 +27,7 @@
27
27
  </div>
28
28
 
29
29
  <div class="statblock-info-line">
30
- <span class="statblock-line-heavy">Skills </span><% skills * "," %>
30
+ <span class="statblock-line-heavy">Skills </span><%= skills * "," %>
31
31
  </div>
32
32
 
33
33
  <div class="statblock-info-line">
@@ -62,7 +62,7 @@
62
62
  </div>
63
63
  <div class="statblock-info-block">
64
64
  <div class="statblock-info-line">
65
- <span class="statblock-line-heavy">Speed </span><%= offense['speed'] %><%= offense['otherSpeeds'] %>
65
+ <span class="statblock-line-heavy">Speed </span><%= offense['speed'] %> <%= offense['otherSpeeds'] %>
66
66
  </div>
67
67
 
68
68
  <% offense['attacks'].each do |attack| %>
@@ -0,0 +1 @@
1
+ <link href="p2e/p2e.css" rel="stylesheet">
@@ -10,10 +10,12 @@ class P2EDocinfoProcessor < Extensions::DocinfoProcessor
10
10
  use_dsl
11
11
 
12
12
  def process doc
13
- extdir = ::File.join(::File.dirname __FILE__)
14
- stylesheet_name = 'p2e.css'
15
- content = doc.read_asset %(#{extdir}/#{stylesheet_name})
16
- ['<style>', content.chomp, '</style>'] * "\n"
13
+ srcdir = ::File.join(::File.dirname __FILE__)
14
+ outdir = (doc.attr? 'outdir') ? (doc.attr 'outdir') : (doc.attr 'docdir')
15
+ dstdir = "#{outdir}/p2e"
16
+ FileUtils.mkdir_p(dstdir)
17
+ FileUtils.cp_r("#{srcdir}/assets/.", dstdir)
18
+ doc.read_asset("#{srcdir}/docinfo.html")
17
19
  end
18
20
  end
19
21
 
@@ -21,20 +23,33 @@ class P2EStatblockProcessor < Extensions::BlockProcessor
21
23
  use_dsl
22
24
 
23
25
  named :stat
24
- on_context :open
26
+ on_context :open, :example
25
27
  parse_content_as :raw
26
28
 
27
29
  def process parent, reader, attrs
28
30
  # parse TOML
29
31
  lines = reader.lines
30
- creature = Tomlrb.parse(lines * "\n")
32
+ data = Tomlrb.parse(lines * "\n")
33
+
34
+ # get/set attributes
35
+ if attrs.key?('type')
36
+ type = attrs['type']
37
+ else
38
+ type = 'creature'
39
+ end
40
+ if attrs.key?('role')
41
+ data['role'] = attrs['role']
42
+ end
31
43
 
32
44
  # create HTML from template
33
45
  extdir = ::File.join(::File.dirname __FILE__)
34
- template_name = 'statblock.html.erb'
35
- template = File.read("#{extdir}/#{template_name}")
36
- html = ERB.new(template).result_with_hash(creature)
46
+ templates = {
47
+ 'creature' => "#{extdir}/creatureblock.html.erb",
48
+ 'item' => "#{extdir}/itemblock.html.erb",
49
+ 'hazard' => "#{extdir}/hazardblock.html.erb"
50
+ }
51
+ template = File.read(templates[type])
52
+ html = ERB.new(template).result_with_hash(data)
37
53
  create_pass_block parent, html, attrs, subs: nil
38
54
  end
39
55
  end
40
-
@@ -0,0 +1,43 @@
1
+ <div class="statblock <%= defined?(role) ? role : '' %>">
2
+ <div class="statblock-title">
3
+ <span class="statblock-name"><%= name %></span>
4
+ <span class="statblock-type">HAZARD <%= level %></span>
5
+ </div>
6
+ <div class="statblock-info-block">
7
+ <div class="statblock-tags">
8
+ <% tags.each do |tag| %>
9
+ <% if tag == "uncommon" %>
10
+ <div class="statblock-tag-rarity-uncommon"><%= tag %></div>
11
+ <% elsif tag == "rare" %>
12
+ <div class="statblock-tag-rarity-rare"><%= tag %></div>
13
+ <% elsif tag == "unique" %>
14
+ <div class="statblock-tag-rarity-unique"><%= tag %></div>
15
+ <% else %>
16
+ <div class="statblock-tag-other"><%= tag %></div>
17
+ <% end %>
18
+ <% end %>
19
+ </div>
20
+ <div class="statblock-info-other">
21
+ <div class="statblock-info-line">
22
+ <span class="statblock-line-heavy">Stealth </span><%= stealth %>
23
+ </div>
24
+ <div class="statblock-info-line">
25
+ <span class="statblock-line-heavy">Description </span><%= description %>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <div class="statblock-info-block">
30
+ <div class="statblock-info-line">
31
+ <span class="statblock-line-heavy">Disable </span><%= disable %>
32
+ </div>
33
+ <% if defined?(triggers) %>
34
+ <% triggers.each do |trigger| %>
35
+ <div class="statblock-info-line">
36
+ <span class="statblock-line-heavy"><%= trigger['name'] %></span>
37
+ <span class="statblock-reaction"></span>
38
+ <span class="statblock-line-heavy">Trigger </span><%= trigger['text'] %>
39
+ </div>
40
+ <% end %>
41
+ <% end %>
42
+ </div>
43
+ </div>
@@ -0,0 +1,86 @@
1
+ <div class="statblock <%= defined?(role) ? role : '' %>">
2
+ <div class="statblock-title">
3
+ <span class="statblock-name"><%= name %></span>
4
+ <span class="statblock-type">ITEM <%= level %></span>
5
+ </div>
6
+ <div class="statblock-info-block">
7
+ <div class="statblock-tags">
8
+ <% tags.each do |tag| %>
9
+ <% if tag == "uncommon" %>
10
+ <div class="statblock-tag-rarity-uncommon"><%= tag %></div>
11
+ <% elsif tag == "rare" %>
12
+ <div class="statblock-tag-rarity-rare"><%= tag %></div>
13
+ <% elsif tag == "unique" %>
14
+ <div class="statblock-tag-rarity-unique"><%= tag %></div>
15
+ <% else %>
16
+ <div class="statblock-tag-other"><%= tag %></div>
17
+ <% end %>
18
+ <% end %>
19
+ </div>
20
+ <div class="statblock-info-other">
21
+ <% if defined?(price) %>
22
+ <div class="statblock-info-line">
23
+ <span class="statblock-line-heavy">Price </span><%= price %>
24
+ </div>
25
+ <% end %>
26
+ <div class="statblock-info-line">
27
+ <span class="statblock-line-heavy">Usage </span><%= usage %>&#59;
28
+ <span class="statblock-line-heavy"> Bulk </span><%= bulk %>&#59;
29
+ </div>
30
+ </div>
31
+ <% if defined?(activations) %>
32
+ <div class="statblock-info-other">
33
+ <% activations.each do |activation| %>
34
+ <div class="statblock-info-line">
35
+ <span class="statblock-line-heavy"> Activate </span>
36
+ <% if activation['actions'] == 0 %>
37
+ <span class="statblock-free-action"></span>
38
+ <% elsif activation['actions'] == 1 %>
39
+ <span class="statblock-one-action"></span>
40
+ <% elsif activation['actions'] == 2 %>
41
+ <span class="statblock-two-actions"></span>
42
+ <% elsif activation['actions'] == 3 %>
43
+ <span class="statblock-three-actions"></span>
44
+ <% end %>
45
+ <% if activation.key?('actionText') %>
46
+ <%= activation['actionText'] %>
47
+ <% end %>
48
+ <% if activation.key?('frequency') %>
49
+ <span class="statblock-line-heavy"> Frequency </span><%= activation['frequency'] %>
50
+ <% end %>
51
+ <% if activation.key?('trigger') %>
52
+ <span class="statblock-line-heavy"> Trigger </span><%= activation['trigger'] %>
53
+ <% end %>
54
+ <% if activation.key?('effect') %>
55
+ <span class="statblock-line-heavy"> Effect </span><%= activation['effect'] %>
56
+ <% end %>
57
+ </div>
58
+ <% end %>
59
+ </div>
60
+ <% end %>
61
+ </div>
62
+ <div class="statblock-info-block">
63
+ <% if defined?(hardness) %>
64
+ <div class="statblock-info-line">
65
+ <span class="statblock-line-heavy">Hardness </span><%= hardness['hardness'] %>&#59;
66
+ <span class="statblock-line-heavy">HP </span><%= hardness['hp'] %>&#59;
67
+ <span class="statblock-line-heavy">BT </span><%= hardness['bt'] %>&#59;
68
+ </div>
69
+ <% end %>
70
+ <div><%= description %></div>
71
+ </div>
72
+ <% if defined?(types) %>
73
+ <% types.each do |type| %>
74
+ <div class="statblock-info-block">
75
+ <div class="statblock-info-line">
76
+ <span class="statblock-line-heavy">Type </span><em><%= type['type'] %></em>
77
+ <span class="statblock-line-heavy">Level </span><%= type['level'] %>
78
+ <% if type.key?('price') %>
79
+ <span class="statblock-line-heavy">Price </span><%= type['price'] %>
80
+ <% end %>
81
+ </div>
82
+ <div><%= type['description'] %></div>
83
+ </div>
84
+ <% end %>
85
+ <% end %>
86
+ </div>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-p2e
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Tolboom
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-20 00:00:00.000000000 Z
11
+ date: 2021-03-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tomlrb
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.0.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: dotenv
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.7'
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: 2.7.6
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '2.7'
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: 2.7.6
33
53
  description: Asciidoctor Pathfinder 2E Extension
34
54
  email:
35
55
  - ryan@using.tech
@@ -37,11 +57,23 @@ executables: []
37
57
  extensions: []
38
58
  extra_rdoc_files: []
39
59
  files:
60
+ - LICENSE
40
61
  - README.adoc
62
+ - Rakefile
41
63
  - lib/asciidoctor-p2e.rb
64
+ - lib/asciidoctor-p2e/assets/BXRovF3Pi-DLmzWCKvt80WrNWA.woff2
65
+ - lib/asciidoctor-p2e/assets/BXRovF3Pi-DLmzWCKvt90Wo.woff2
66
+ - lib/asciidoctor-p2e/assets/BXRovF3Pi-DLmzWCKvtz0WrNWA.woff2
67
+ - lib/asciidoctor-p2e/assets/divider.png
68
+ - lib/asciidoctor-p2e/assets/p2e.css
69
+ - lib/asciidoctor-p2e/assets/parchment.jpg
70
+ - lib/asciidoctor-p2e/assets/sidebar.png
71
+ - lib/asciidoctor-p2e/assets/toc.png
72
+ - lib/asciidoctor-p2e/creatureblock.html.erb
73
+ - lib/asciidoctor-p2e/docinfo.html
42
74
  - lib/asciidoctor-p2e/extension.rb
43
- - lib/asciidoctor-p2e/p2e.css
44
- - lib/asciidoctor-p2e/statblock.html.erb
75
+ - lib/asciidoctor-p2e/hazardblock.html.erb
76
+ - lib/asciidoctor-p2e/itemblock.html.erb
45
77
  homepage: https://bosco.srht.site/asciidoctor-p2e.html
46
78
  licenses:
47
79
  - GPL-3.0