jekyll-maths-latex-to-image 0.1.3 → 0.1.4
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4014f3d1474ac3460c49063d8879910f3d589d12c75401f941d31e9a114254c2
|
4
|
+
data.tar.gz: c09fa98531b2964bd86320f519228e3c0a8b98185e2a4b2023818af138629eea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3d8761cdf4f578de9d239cced88e53793592fbc9219a6201e540ea045137b65ffe1d1e5953b34410727a1a77d4c94b9e52367f742be224efffc2b9113a6251f5
|
7
|
+
data.tar.gz: a28b0f793e938dfe19a66c26dcbe54ba5e51b1a291647abf7d010d93c60ab702f0b2e9ef7dbb967bacf28d6c40b60dd5929777d97644fdef2f3fcfccffeedf18
|
@@ -149,53 +149,111 @@ end
|
|
149
149
|
|
150
150
|
module Jekyll
|
151
151
|
module MathsLatexToImage
|
152
|
-
class Generator < Jekyll::Generator
|
152
|
+
class Generator < Jekyll::Generator
|
153
153
|
priority :highest
|
154
154
|
|
155
155
|
def initialize(config = nil)
|
156
156
|
super()
|
157
157
|
setup_logging
|
158
|
-
setup_debug_dir
|
158
|
+
setup_debug_dir # Added back debug dir setup
|
159
159
|
@config = config
|
160
|
+
@enabled = nil
|
160
161
|
@svg_cache = {}
|
161
162
|
|
162
|
-
#
|
163
|
+
# Essential patterns for math detection
|
164
|
+
@display_math_pattern = /\$\$(.*?)\$\$/m
|
165
|
+
@inline_math_pattern = /(?<!\\)\$([^\$]+?)\$/
|
166
|
+
|
163
167
|
Jekyll::Hooks.register :site, :post_write do |site|
|
164
|
-
|
165
|
-
|
166
|
-
copy_svg_files(site) # First copy SVG files
|
167
|
-
convert_to_png(site) # Then do conversion to PNG
|
168
|
-
@console_logger.info("Post-write tasks completed successfully")
|
169
|
-
rescue => e
|
170
|
-
@console_logger.error("Post-write tasks failed: #{e.message}")
|
171
|
-
@console_logger.error(e.backtrace.join("\n"))
|
172
|
-
end
|
168
|
+
next unless enabled?(site)
|
169
|
+
handle_post_write(site)
|
173
170
|
end
|
174
171
|
|
175
|
-
@@instance = self
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
172
|
+
@@instance = self
|
173
|
+
end
|
174
|
+
|
175
|
+
def enabled?(site)
|
176
|
+
# Cache the enabled state per site
|
177
|
+
@enabled ||= begin
|
178
|
+
# Explicitly check configuration
|
179
|
+
config = site.config['jekyll-maths-latex-to-image'] || {}
|
180
|
+
is_enabled = config['enabled'].nil? ? true : config['enabled']
|
181
|
+
|
182
|
+
@console_logger.info("Jekyll Maths LaTeX to Image plugin state: #{is_enabled ? 'enabled' : 'disabled'}")
|
183
|
+
@console_logger.debug("Configuration: #{config.inspect}")
|
184
|
+
|
185
|
+
is_enabled
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
def generate(site)
|
190
|
+
@site = site
|
180
191
|
|
192
|
+
# Early return if plugin is disabled
|
193
|
+
unless enabled?(site)
|
194
|
+
@console_logger.info("Plugin is disabled via configuration - skipping all processing")
|
195
|
+
return
|
196
|
+
end
|
197
|
+
|
198
|
+
@console_logger.info("Starting math processing")
|
199
|
+
initialize_renderer
|
200
|
+
setup_directories
|
201
|
+
process_site_content(site)
|
202
|
+
rescue => e
|
203
|
+
@console_logger.error("Error during generation: #{e.message}")
|
204
|
+
@console_logger.error(e.backtrace.join("\n"))
|
205
|
+
raise
|
206
|
+
end
|
207
|
+
|
208
|
+
private
|
209
|
+
|
210
|
+
def initialize_renderer
|
211
|
+
return if @renderer || !enabled?(@site)
|
181
212
|
@renderer = NodeRendererClient.new(@console_logger)
|
182
213
|
rescue => e
|
183
214
|
@console_logger.error("Failed to initialize renderer: #{e.message}")
|
184
215
|
raise
|
185
216
|
end
|
186
217
|
|
187
|
-
def
|
188
|
-
|
218
|
+
def setup_directories
|
219
|
+
return unless enabled?(@site)
|
189
220
|
setup_svg_dir
|
190
221
|
setup_temp_dir
|
222
|
+
end
|
223
|
+
|
224
|
+
def process_site_content(site)
|
225
|
+
return unless enabled?(site)
|
226
|
+
|
191
227
|
start_time = Time.now
|
228
|
+
@svg_files = {}
|
192
229
|
|
193
|
-
@svg_files = {} # Map of temp paths to final paths
|
194
230
|
process_documents(site)
|
195
231
|
|
196
232
|
@console_logger.info("Math rendering completed in #{Time.now - start_time.round(2)} seconds")
|
197
233
|
end
|
198
234
|
|
235
|
+
def handle_post_write(site)
|
236
|
+
return unless enabled?(site)
|
237
|
+
|
238
|
+
@console_logger.info("Running post-write tasks")
|
239
|
+
begin
|
240
|
+
copy_svg_files(site)
|
241
|
+
convert_to_png(site)
|
242
|
+
cleanup_temp_files
|
243
|
+
@console_logger.info("Post-write tasks completed successfully")
|
244
|
+
rescue => e
|
245
|
+
@console_logger.error("Post-write tasks failed: #{e.message}")
|
246
|
+
@console_logger.error(e.backtrace.join("\n"))
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
250
|
+
def cleanup_temp_files
|
251
|
+
return unless enabled?(@site)
|
252
|
+
|
253
|
+
FileUtils.rm_rf(@temp_svg_dir) if @temp_svg_dir && Dir.exist?(@temp_svg_dir)
|
254
|
+
@renderer&.cleanup
|
255
|
+
end
|
256
|
+
|
199
257
|
def convert_to_png(site)
|
200
258
|
build_dir = site.dest
|
201
259
|
user_dir = Dir.pwd
|
@@ -226,19 +284,6 @@ module Jekyll
|
|
226
284
|
end
|
227
285
|
end
|
228
286
|
|
229
|
-
# New method to handle post-write tasks
|
230
|
-
def post_write_tasks(site)
|
231
|
-
begin
|
232
|
-
convert_to_png(site) # Do PNG conversion first
|
233
|
-
copy_svg_files(site) # Then copy both SVG and PNG files
|
234
|
-
rescue => e
|
235
|
-
@console_logger.error("Post-write tasks failed: #{e.message}")
|
236
|
-
@console_logger.error(e.backtrace.join("\n"))
|
237
|
-
end
|
238
|
-
end
|
239
|
-
|
240
|
-
private
|
241
|
-
|
242
287
|
def setup_logging
|
243
288
|
log_dir = File.join(Dir.pwd, '_logs', 'math')
|
244
289
|
FileUtils.mkdir_p(log_dir)
|
@@ -266,9 +311,11 @@ module Jekyll
|
|
266
311
|
end
|
267
312
|
|
268
313
|
def setup_svg_dir
|
269
|
-
# Use configurable path from
|
270
|
-
|
314
|
+
# Use configurable path from new config structure
|
315
|
+
config = @site.config['jekyll-maths-latex-to-image'] || {}
|
316
|
+
base_path = config['path'] || '/assets/img/math'
|
271
317
|
@svg_url_path = File.join(@site.config['baseurl'].to_s, base_path)
|
318
|
+
@console_logger.info("SVG URL path set to: #{@svg_url_path}")
|
272
319
|
end
|
273
320
|
|
274
321
|
def setup_temp_dir
|
@@ -348,6 +395,7 @@ module Jekyll
|
|
348
395
|
end
|
349
396
|
|
350
397
|
def render_math(math, display_mode)
|
398
|
+
return math unless enabled?(@site)
|
351
399
|
cache_key = "#{math}:#{display_mode}"
|
352
400
|
return @svg_cache[cache_key] if @svg_cache.key?(cache_key)
|
353
401
|
|
@@ -357,8 +405,9 @@ module Jekyll
|
|
357
405
|
svg_path = save_svg(math, svg, SecureRandom.uuid)
|
358
406
|
png_path = svg_path.sub(/\.svg$/, '.png')
|
359
407
|
|
360
|
-
# Get format
|
361
|
-
|
408
|
+
# Get format from new config structure
|
409
|
+
config = @site.config['jekyll-maths-latex-to-image'] || {}
|
410
|
+
format = config['format'] || 'both'
|
362
411
|
|
363
412
|
# Build srcset based on format
|
364
413
|
srcset = case format
|
@@ -474,27 +523,18 @@ module Jekyll
|
|
474
523
|
})
|
475
524
|
end
|
476
525
|
|
477
|
-
# Remove old logging methods
|
478
|
-
def log_error(message, data = {})
|
479
|
-
@console_logger.error("#{message} #{data.inspect unless data.empty()}")
|
480
|
-
end
|
481
|
-
|
482
|
-
def log_info(message, data = {})
|
483
|
-
@console_logger.info("#{message} #{data.inspect unless data.empty()}")
|
484
|
-
end
|
485
|
-
|
486
|
-
def log_debug(message, data = {})
|
487
|
-
@console_logger.debug("#{message} #{data.inspect unless data.empty()}")
|
488
|
-
end
|
489
|
-
|
490
526
|
def process_documents(site)
|
491
|
-
|
527
|
+
return unless enabled?(site)
|
528
|
+
|
529
|
+
# Include both pages and posts
|
530
|
+
all_documents = site.pages + site.posts.docs + site.documents
|
492
531
|
chunks = all_documents.each_slice(5).to_a
|
493
532
|
|
494
533
|
Parallel.each(chunks, in_threads: Parallel.processor_count) do |chunk|
|
495
534
|
chunk.each do |doc|
|
535
|
+
next unless has_math?(doc.content)
|
496
536
|
begin
|
497
|
-
convert_math(doc)
|
537
|
+
convert_math(doc)
|
498
538
|
rescue => e
|
499
539
|
@console_logger.error("Error processing #{doc.path}: #{e.message}")
|
500
540
|
end
|
@@ -521,6 +561,9 @@ module Jekyll
|
|
521
561
|
raise msg
|
522
562
|
end
|
523
563
|
end
|
564
|
+
|
565
|
+
# Add missing SecureRandom require
|
566
|
+
require 'securerandom'
|
524
567
|
end
|
525
568
|
end
|
526
569
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-maths-latex-to-image
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- vrocky
|
@@ -137,9 +137,6 @@ extra_rdoc_files: []
|
|
137
137
|
files:
|
138
138
|
- lib/jekyll-maths-latex-to-image.rb
|
139
139
|
- lib/jekyll-maths-latex-to-image/version.rb
|
140
|
-
- lib/js/svg_to_png_converter.js
|
141
|
-
- lib/js/tex2svg_renderer__index.bundled.js
|
142
|
-
- lib/js/tex2svg_renderer__index.bundled.js.map
|
143
140
|
homepage: https://github.com/vrocky/jekyll-maths-latex-to-image
|
144
141
|
licenses:
|
145
142
|
- MIT
|
@@ -1,37 +0,0 @@
|
|
1
|
-
const sharp = require('sharp');
|
2
|
-
const glob = require('glob');
|
3
|
-
const path = require('path');
|
4
|
-
const fs = require('fs');
|
5
|
-
|
6
|
-
async function convertSvgToPng(buildDir) {
|
7
|
-
try {
|
8
|
-
// Find all SVG files recursively
|
9
|
-
const svgFiles = glob.sync('**/*.svg', { cwd: buildDir });
|
10
|
-
|
11
|
-
for (const svgFile of svgFiles) {
|
12
|
-
const svgPath = path.join(buildDir, svgFile);
|
13
|
-
const pngPath = svgPath.replace(/\.svg$/, '.png');
|
14
|
-
|
15
|
-
try {
|
16
|
-
await sharp(svgPath)
|
17
|
-
.png()
|
18
|
-
.toFile(pngPath);
|
19
|
-
console.log(`Converted: ${svgFile} -> ${path.basename(pngPath)}`);
|
20
|
-
} catch (err) {
|
21
|
-
console.error(`Error converting ${svgFile}:`, err);
|
22
|
-
}
|
23
|
-
}
|
24
|
-
} catch (err) {
|
25
|
-
console.error('Conversion error:', err);
|
26
|
-
process.exit(1);
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
// Get build directory from command line argument
|
31
|
-
const buildDir = process.argv[2];
|
32
|
-
if (!buildDir) {
|
33
|
-
console.error('Please provide the build directory path');
|
34
|
-
process.exit(1);
|
35
|
-
}
|
36
|
-
|
37
|
-
convertSvgToPng(buildDir);
|