SSブログ

SVG最適化マクロ-2010 [花子]

ご大層な名前だが、やることは変わっていない。ようは一太郎で動くバージョン。

花子のデータをIllustratorにもってくるとき、SVGを使うのがけっこう良さげ。といことをずいぶん前からやっているわけだが、文字コードの都合からあれこれ面倒だったのである。
そこで花子が吐き出したSVGをIllustratorで開く用に修正する作業を、こんどは一太郎でやってみよう、…と、相変わらず頭の悪いことを推し進めているわけである。

あらためて一太郎のマクロに書き換えた結果、以前のマクロではときどきうまくいかなかった処理がいちおううまくいくようになった…単にバグが少なくなっただけだろうけれど。と言っても、処理自体は馬鹿みたいに時間がかかる。半分ネタみたいなものだから構わないのだけれど。

とりあえず心臓部が以下。

上書き保存とかはしない。
なお、当然のことながら花子では動かないので注意。

!!**************
!!  SVG最適化
!!**************           Ver.2.0.β
!! (C)臼田 隆行
!!  2010-02-23
!!**************

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!========================================================
!!macroname(SVG最適化)
!!title(Illustrator読み込み用にSVGを最適化)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

ErrorBreakMode(0, 0, 0)

!!SVGファイルを指定
%para("DEFAULTEXT") = "svg"
%para("FILTER") = "SVG ファイル(*.svg)|*.svg"
%para("FILTERINDEX") = 1
%para("TITLE") = "SVGファイルの選択"
%para("FLAGS") = &H0002
$info = OpenFileDialog(%para)
if $info = nil then
	stop
end if

!!ファイルを読み込み
%path = $info("FILENAME", 1)
LoadDocument(%path, , 10, , , , "UTF8")

!!ちょっと確認
SearchString("xmlns:jsh", 3, 0)
if SearchStringResult() then
	Message("最適化をはじめます", 0)
else
	Message("花子で出力したSVGではない可能性があるため処理を中止します", 1)
	stop
end if

JumpSearchString("", 1, 0)
SearchString("mm", 1, 0)
if SearchStringResult() then
	%para = {.Title = "SVGが異常になる可能性があります", .Icon = 4, .Button = 5, .Default = 2}
	%ret = MsgBox("既に最適化された可能性があります。続行しますか?", %para)
	if %ret = 7 then
		Message("処理を中止しました", 1)
		stop
	end if
end if

!!枠が表示されるように調整--visibility="hidden"を削除
SearchString(' visibility="hidden"', 3, 0)
Delete()

!!線幅調整--stroke-widthの値を1/40にして単位にmmを付ける
CancelAllRange( )
do
	JumpSearchString('stroke-width="', 1, 0)
	if SearchStringResult() = false then
		exit do
	end if
	CursorRight(14)
	RangeMode()
	RangeStart()
	JumpSearchString('"', 1, 0)
	RangeEnd(, )
	%width = GetString()
	%widthmm = Value(%width(1)) / 40 & "mm"
	ReviveAdvancedRange()
	Delete()
	Insert(%widthmm, 0)
loop
JumpStart()

!!線種パターン調整--stroke-dasharrayの値を1/40にし単位mmを付加する
JumpSearchString('', 1, 0)
do
	JumpSearchString('stroke-dasharray="', 1, 0)
		if SearchStringResult() = false then
			exit do
		end if
	CursorRight(18)
	RangeMode()
	RangeStart()
	JumpSearchString('"', 1, 0)
	RangeEnd(, )
	%dashArray = GetString()
!!","を基準に数値を出し変換
	%n1 = 1
	%n2 = 1
	do
		%n2 = Find(',', %dashArray(1), %n1)
		if %n2 = 0 then
			%n2 = Len(%dashArray(1)) + 1
			%dash = Mid(%dashArray(1), %n1, %n2 - %n1)
			%dash = %dash / 40 & "mm"
			%dashArrayF = %dashArrayF & %dash
!!			%num1 = Len(%dashArrayF)
			exit do
		end if
		%dash = Mid(%dashArray(1), %n1, %n2 - %n1)
		%dash = %dash / 40 & "mm"
		%dashArrayF = %dashArrayF & %dash & ","
		%n1 = %n2 + 1
	loop
	ReviveAdvancedRange()
	Delete()
	Insert(%dashArrayF, 0)
	%dashArrayF = nil
loop

!!線種パターン調整(臼田私用)
!!ReplaceAll('stroke-dasharray="3mm,3mm"', 'stroke-dasharray="4,3"')
!!ReplaceAll('stroke-dasharray="2mm,2mm"', 'stroke-dasharray="0.2,1.2"')
!!ReplaceAll('stroke-dasharray="4mm,2mm,2mm,2mm"', 'stroke-dasharray="5.5,1.4,0.3,1.4,0.3,1.4"')

!!透明度の表記を調整
ReplaceAll('fill-opacity', 'opacity')

!!全文置換(%txt1を%txt2に)
sub ReplaceAll(%txt1, %txt2)
	SearchString(%txt1, 3)
	JumpStart()
	do
	if SearchStringResult then
			ReplaceString(%txt1, %txt2, 1, 0)
		else
			exit do
		end if
	loop
end sub

タグ:マクロ
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。