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: 5146b9654d4722f4a553c31e656c29e49b7e56b4f77b29c1e397efddef5da579
4
- data.tar.gz: 7ca3ed37a917326f862d840db43462fe824d1b4d8b99bac26fe2f26be191eaef
3
+ metadata.gz: 4014f3d1474ac3460c49063d8879910f3d589d12c75401f941d31e9a114254c2
4
+ data.tar.gz: c09fa98531b2964bd86320f519228e3c0a8b98185e2a4b2023818af138629eea
5
5
  SHA512:
6
- metadata.gz: 6c76f6ef95718291558eeaedd149f2a3700765700e2cd4f40b2e96cf3c60331eba5ff5240df2119bc097634998c2209b5d06b94b7fad6b60ee97e3dbe9a028b0
7
- data.tar.gz: 7d4f860c8328ae9a528cab9514f4936143438bd9390fdaf4aa2d57e14f71e5f5a72a65c53881453ac5a048870196b6ce1622aa9070124e18d54caac969797c29
6
+ metadata.gz: 3d8761cdf4f578de9d239cced88e53793592fbc9219a6201e540ea045137b65ffe1d1e5953b34410727a1a77d4c94b9e52367f742be224efffc2b9113a6251f5
7
+ data.tar.gz: a28b0f793e938dfe19a66c26dcbe54ba5e51b1a291647abf7d010d93c60ab702f0b2e9ef7dbb967bacf28d6c40b60dd5929777d97644fdef2f3fcfccffeedf18
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module MathsLatexToImage
3
- VERSION = "0.1.3"
3
+ VERSION = "0.1.4"
4
4
  end
5
5
  end
@@ -149,53 +149,111 @@ end
149
149
 
150
150
  module Jekyll
151
151
  module MathsLatexToImage
152
- class Generator < Jekyll::Generator # Changed from MathRenderer to MathsLatexToImage
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
- # Register the post_write hook during initialization
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
- @console_logger.info("Post-write hook triggered")
165
- begin
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 # Store instance for hook access
176
-
177
- # Updated regex patterns
178
- @display_math_pattern = /\$\$(.*?)\$\$/m
179
- @inline_math_pattern = /(?<!\\)\$([^\$]+?)\$/ # Changed pattern
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 generate(site)
188
- @site = site
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 _config.yml or default
270
- base_path = @site.config.dig('texsvg_math_renderer', 'path') || '/assets/img/math'
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 preference from config
361
- format = @site.config.dig('texsvg_math_renderer', 'format') || 'both'
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
- all_documents = site.pages + site.posts.docs
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) if has_math?(doc.content)
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.3
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);