2006-08-02 ========== CSS で変数が欲しい!の…… -------------------------- Reference URI: http://lowreal.net/logs/2006/08/02/1 Written Time: 2006-08-02T01:34:18+09:00 Tags: css [川o・-・)<2nd life - ファイル保存時に ERb でコンパイルして保存](http://d.hatena.ne.jp/secondlife/20060802/1154445231) これの別方向バージョンです。 (最近こんなんばっかだ。パクりマンセー) CSS 特化でいいかなぁとか思いつつ簡単なスクリプトを通して置換するだけっていうのをや ってみることにしました。ERB にせよ、なんにせよ、クライアントサイドでやってる限りは 書いてる人の好き放題なのがいいところです。ERB のほうが別の場合も常に使えていいんで すが。 #!/usr/bin/rubypre = File.read(ARGV[0])vars = Hash[*pre.scan(/^\s*\*\s+([^\s;]+)\ s*=\s*(.+$)/).flatten]#p varsret = pre.gsub(/\#\{([^\s;]+)\}/) do |match| if vars.key?(Regexp.last_match[1]) vars[Regexp.last_match[1]] else match endendFile.open(ARGV[1], "wb") {|f| f.puts re t }第一引数に変換する前のファイル名、第二引数に変換したあとのファイル名を与えます。 vim 側は id:secondlife さんのやつを完全パクりでお送りいたします。指定した実行ファ イルに保存時、ファイル名を与えて実行するだけ。~/.vim/plugin/css_pre_compile.vim if v:version < 700 || (exists('g:loaded_css_pre_compile') && g:loaded_css_pre_com pile || &cp) finishendiflet g:loaded_css_pre_compile = 1if !exists('g:css_ pre_compile_exec') let g:css_pre_compile_exec = '/home/cho45/proj/mendoi/c ompile-css.rb'endifif !exists('g:css_pre_compile_name') let g:css_pre_comp ile_name = 'pre'endiffunction! s:CssPreCompile() let filename = expand('%: p') let compiled_filename = substitute(filename, '\.' . g:css_pre_compile_ name . '\.css$', '.css', '') call system(g:css_pre_compile_exec . ' ' . fi lename . ' ' . compiled_filename)endfunctionexe 'autocmd BufWritePost *.' . g:css _pre_compile_name . '.css call CssPreCompile()'でもって編集する CSS /* * * Colors * key-color-dark = #123456 * key-color-light = #234567 * * * Image s * imgdir = /img/hogehoge * * * Other Constants * content-x-margin = 5% */h1 { background: #{key-color-dark} url("#{imgdir}/head.jpg") no-repeat top left; height: 235px; width: 50px;}/* 諸事情で #content に padding が指定 できないとか */#content .section { margin: 0 #{content-x-margin};}#content .h2 { margin: 0 #{content-x-margin};}#footer { background: #{key-c olor-dark}; color: #fff;}#footer address { color: #{key-color-dark} ; background: #{key-color-light};}この場合頭に書いた宣言部分は消えないので、キーカラーを最初に明示しておく、なんてこ とが自然にできます。そういえば自分はよく色の頭二文字ぐらいを覚えて動的補完カマして 入力するんですが、最初の二文字さえ最近覚えるのがダルイです。 ちょっと使ってみよう。が、しかし、すぐに使わなくなる予感が! といっても一回放り込 めば使って悪いことはないので使えるかな。わからない。一ファイルで完結していないのが イマイチ。オートリロードとの兼ね合いもあるかも。あれダメダメじゃん。 Ruby 限定にするなら、探し出した変数宣言を module_eval とかで読み込んで、eval("<