2006年 08月 02日

CSS で変数が欲しい!の……

川o・-・)<2nd life - ファイル保存時に ERb でコンパイルして保存

これの別方向バージョンです。 (最近こんなんばっかだ。パクりマンセー)

CSS 特化でいいかなぁとか思いつつ簡単なスクリプトを通して置換するだけっていうのをやってみることにしました。ERB にせよ、なんにせよ、クライアントサイドでやってる限りは書いてる人の好き放題なのがいいところです。ERB のほうが別の場合も常に使えていいんですが。

#!/usr/bin/ruby
pre = File.read(ARGV[0])
vars = Hash[*pre.scan(/^\s*\*\s+([^\s;]+)\s*=\s*(.+$)/).flatten]
#p vars
ret = pre.gsub(/\#\{([^\s;]+)\}/) do |match|
if vars.key?(Regexp.last_match[1])
vars[Regexp.last_match[1]]
else
match
end
end
File.open(ARGV[1], "wb") {|f| f.puts ret }

第一引数に変換する前のファイル名、第二引数に変換したあとのファイル名を与えます。

vim 側は id:secondlife さんのやつを完全パクりでお送りいたします。指定した実行ファイルに保存時、ファイル名を与えて実行するだけ。~/.vim/plugin/css_pre_compile.vim

if v:version < 700 || (exists('g:loaded_css_pre_compile') && g:loaded_css_pre_compile || &cp)
finish
endif
let g:loaded_css_pre_compile = 1
if !exists('g:css_pre_compile_exec')
let g:css_pre_compile_exec = '/home/cho45/proj/mendoi/compile-css.rb'
endif
if !exists('g:css_pre_compile_name')
let g:css_pre_compile_name = 'pre'
endif
function! 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 . ' ' . filename . ' ' . compiled_filename)
endfunction
exe 'autocmd BufWritePost *.' . g:css_pre_compile_name . '.css call <SID>CssPreCompile()'

でもって編集する CSS

/*
* * Colors
* key-color-dark  = #123456
* key-color-light = #234567
*
* * Images
* 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-color-dark};
color: #fff;
}
#footer address {
color: #{key-color-dark};
background: #{key-color-light};
}

この場合頭に書いた宣言部分は消えないので、キーカラーを最初に明示しておく、なんてことが自然にできます。そういえば自分はよく色の頭二文字ぐらいを覚えて動的補完カマして入力するんですが、最初の二文字さえ最近覚えるのがダルイです。


ちょっと使ってみよう。が、しかし、すぐに使わなくなる予感が! といっても一回放り込めば使って悪いことはないので使えるかな。わからない。一ファイルで完結していないのがイマイチ。オートリロードとの兼ね合いもあるかも。あれダメダメじゃん。

Ruby 限定にするなら、探し出した変数宣言を module_eval とかで読み込んで、eval("<<EOF\n#{file_content}\nEOF") みたいなことやってもいい? 式が書けるようになるけど、エラーでてもわからなく。移植性が落ちる。


でもやっぱ。ERB のほうがループとかも書けていい気がする。<% が打ちにくいからそれだけなんとかできればいいような気もする。ねむい

jAbasRipT:Sreep[];

ううん

wktk

もっと wkwktktk したことをしたいなぁ。もっと

xterm-256color

Linux デスクトップで 256color やろうとするとどうもうまくいかない。xterm を

./configure --enable-wide-chars --enable-256-color --enable-luit

でコンパイルして

xterm -fa Mono -fs 9 -fg white -bg black

とかで起動するといちおうよさげなんだけど、描画が遅すぎて使えない。
putty 使いたいなぁ。

table 要素のレンダリング

Fx だけちょっと違うレンダリングするなぁ。Opera と IE はこの辺かなり似た解釈をしているようだ。
Fx だけボーダーがやたらズレて困る。Fx だけに適用するハックとかしらないしなぁ。

mlterm

mlterm をいれてみる

$ ./configure --enable-anti-alias --enable-optimize-redrawing --enable-scim

で make; sudo make install

がしかし 256colors2.pl 実行すると確実にフリーズする。optimize-redrawing が悪いのかと思い外してみてもだめだった。

上に書くよ

今日のぶんは手動で逆にしたよ!
追記モードっていう隠し機能があるらしい。上上下下左右左右BAを設定画面で押すとチェックボックスが現れるようだ。知らなかった。

vim ZZ

どうも C-z C-z (screen の window スワップ) 押すつもりで ZZ 入力して終了させてしまう。

mlterm

帰宅して ubuntu (バイト先は FC5) の apt で入れてみたけどこっちも 256colors2.pl がフリーズする。諦めよう。

gmail

gmail のほうのソレっぽいアドレスは本名用に使うことにした。

OCN

OCN のカスタマサポートページ重すぎ