新しい Jekyll ブロックを定義するプラグインを作成していますditaa
。ブロック内のすべてのコンテンツをDitaa マークアップから画像ファイルに変換し、その画像をブロックの代わりに投稿に挿入する必要があります。ファイルの生成は機能しますが、ディレクトリにコピーまたは生成する_site
と、ファイルは明らかに削除されます。
カスタム アセットを生成するブロック プラグインを実装する適切な/より良い方法はありますか?
新しい Jekyll ブロックを定義するプラグインを作成していますditaa
。ブロック内のすべてのコンテンツをDitaa マークアップから画像ファイルに変換し、その画像をブロックの代わりに投稿に挿入する必要があります。ファイルの生成は機能しますが、ディレクトリにコピーまたは生成する_site
と、ファイルは明らかに削除されます。
カスタム アセットを生成するブロック プラグインを実装する適切な/より良い方法はありますか?
私は適切な解決策を見つけました:クラスを使用してJekyll::StaticFile
ください。
このクラスの 1 つのオブジェクトを配列に追加すると、レンダリング プロセスの完了後にsite.static_files
、このファイルがコピー待ちとしてマークされます。実際、そのようなファイルのコピーはプロセスで行われます。Jekyll インストールのファイルを見てください。site.write
site_process.rb
このクラスの使い方は簡単です。将来のコピーのためにファイルをマークする必要がある場合は、次のようなコードを実行するだけです。
site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)
場所path
とfilename
は、フォルダー内のファイルの場所によって異なりsrc
ます。
LaTeX -> PNG Liquid タグの開発で同様の問題がありました。GitHub で私のコードを見ることができます: https://github.com/fgalindo/jekyll-liquid-latex-plugin
私はそれを行う適切な方法を見つけていませんが、うまくいく方法です。このソリューションはGitHubで見つけることができ、Jekylls の機能を使用して、アンダースコアが前に付いていないものをすべてディレクトリにコピーします_site
。ただし、このアプローチには 2 つの欠点もあります。
私は答えを見つけました。
これを交換
site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)
と
gnufile = GNUplotFile.new(site, site.source, "_site/media/", "#{@file}")
gnufile.givemethecommands commands
site.static_files << gnufile
GNUplotFile
Jekyll::StaticFile を継承するクラスを作成します
class GNUplotFile < Jekyll::StaticFile
def write(dest)
puts "WRITE---->>>>>>>>>>>"
#File.write('_site/media/BTTTTT.svg', DateTime.now)
gnuplot(@commands)
# do nothing
end
def gnuplot(commands)
IO.popen("gnuplot", "w") { |io| io.puts commands }
end
def givemethecommands(commands)
@commands = commands
end
end
書き込みコマンドは、クリーンアップ プロセスの後に実行されます。私はLiquidブロックと上記のコードを持っています。