Module: Glslkit::Minifier
- Defined in:
- lib/glslkit/minifier.rb
Overview
コメントと不要な空白のみを除去する — 識別子のリネームも行数のマージも しない。プリプロセッサディレクティブ(#version, #line, #ifdefなど)は それぞれ独立した1物理行でなければならないため、改行は一切削除しない: 入力の各行は必ず出力のちょうど1行に対応するので、コード中に既にある #lineディレクティブの行番号は正しいまま保たれ、Reflectionの抽出結果も 変化しない。
Constant Summary collapse
- COMMENT_PATTERN =
%r{//[^\n]*|/\*.*?\*/}m
Class Method Summary collapse
Class Method Details
.minify(code) ⇒ Object
15 16 17 |
# File 'lib/glslkit/minifier.rb', line 15 def minify(code) strip_comments(code).each_line.map { |line| minify_line(line) }.join end |
.minify_line(line) ⇒ Object
28 29 30 31 |
# File 'lib/glslkit/minifier.rb', line 28 def minify_line(line) ending = line.end_with?("\n") ? "\n" : "" "#{line.chomp.strip.gsub(/[ \t]+/, " ")}#{ending}" end |
.strip_comments(code) ⇒ Object
19 20 21 22 23 24 25 26 |
# File 'lib/glslkit/minifier.rb', line 19 def strip_comments(code) code.gsub(COMMENT_PATTERN) do |match| newlines = match.count("\n") # 改行を含まないコメントでも、区切りは残しておく必要がある。 # 例えば `vec3/* x */foo` が `vec3foo` になってしまわないように。 newlines.positive? ? ("\n" * newlines) : " " end end |