SVG最適化マクロ-2010 [花子]
ご大層な名前だが、やることは変わっていない。ようは一太郎で動くバージョン。
花子のデータをIllustratorにもってくるとき、SVGを使うのがけっこう良さげ。といことをずいぶん前からやっているわけだが、文字コードの都合からあれこれ面倒だったのである。
そこで花子が吐き出したSVGをIllustratorで開く用に修正する作業を、こんどは一太郎でやってみよう、…と、相変わらず頭の悪いことを推し進めているわけである。
あらためて一太郎のマクロに書き換えた結果、以前のマクロではときどきうまくいかなかった処理がいちおううまくいくようになった…単にバグが少なくなっただけだろうけれど。と言っても、処理自体は馬鹿みたいに時間がかかる。半分ネタみたいなものだから構わないのだけれど。
とりあえず心臓部が以下。
上書き保存とかはしない。
なお、当然のことながら花子では動かないので注意。
花子のデータを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
タグ:マクロ
2010-02-24 00:00
nice!(0)
コメント(0)
トラックバック(0)
コメント 0