タグを処理するアルゴリズム
アルゴリズムのスケルトン>会話インクルードのアルゴリズムA-1?からの続きです。
タグを処理するアルゴリズムの一つを紹介。
タグを処理するアルゴリズムの一つを紹介。
Talkコマンドにおいてタグはフォントの変更にのみ使われるので、タグの開始地点が見つかったら("<"が見つかったら)、そこを基点に一気にタグのデータを取得し、解析してフォントを変更します。
メッセージウィンドウ内で使われる標準フォントも変更できるように、標準フォントを変数に記録しておきます。
こうすることでシナリオ作者が標準フォントを自由に簡単に設定できるようにします。
こうすることでシナリオ作者が標準フォントを自由に簡単に設定できるようにします。
TalkInclude: // タグデータの開始地点を示す Local _TagStart // タグデータを記録する Local _TagData Do While (ptr <= MessLen) Switch Mid(mess, ptr, 1) Case "<" // タグの開始を示すブラがきたので、タグを読み取る処理を行う // タグデータの開始地点にポインタを合わせ、別の変数に記憶しておく // タグの開始地点と終了地点を見つけることでタグデータを取得する Incr ptr _TagStart = ptr // タグデータの終了地点(">")を探す Do While (Mid(mess, ptr, 1) != ">") Incr ptr Loop // タグの終了地点が見つかったので、タグデータを別変数に格納する _TagData = Mid(mess, _TagStart, ptr - _TagStart) // タグデータ解析関数にタグデータを渡す // フォントの修正値を返すので、 // それを受け取りFontコマンドで変更する _TagData = TagAnalyzer(_TagData) // フォントを変更 Font _TagData Case ... ... EndSw Loop
// フォントを初期化する InitFont: // フォントウェイトを初期化 FontWeight = "Regular" // フォントサイズを初期化 FontSize = "10pt" // フォントカラーを初期化 FontColor = "#ffffff" // フォントファミリーを初期化 FontFamily = "ゴシック" Font 10pt Regular #ffffff ゴシック Return
// タグデータを解析し、フォントの修正データを算出する // 表現の揺らぎには可能な限り対応する 変数もelemだけを使いまわす TagAnalyzer: // 変更先フォントを記録する変数 Local elem // フォントカラーに関するデータの場合 elem = Left(Args(1),6) If (elem = "color=") or (elem = "COLOR=") or (elem = "Color=") Then elem = Mid(Args(1),7) Switch elem Case "Red" "red" "RED" elem = "#ff0000" Case "Blue" "blue" "BLUE" elem = "#0000ff" Case "Yellow" "yellow" "YELLOW" elem = "#ffff00" Case "Green" "green" "GREEN" elem = "#008000" Case "Purple" "purple" "PURPLE" elem = "#800080" Case "Gray" "gray" "GRAY" elem = "#808080" Case "Silver" "silver" "SILVER" elem = "#c0c0c0" Case "White" "white" "WHITE" elem = "#ffffff" Case "Black" "black" "BLACK" elem = "#000000" Case "Lime" "lime" "LIME" elem = "#00ff00" Case "Aqua" "aqua" "AQUA" elem = "#00ffff" Case "Fuchsia" "fuchsia" "FUCHSIA" elem = "#ff00ff" Case "Maroon" "maroon" "MAROON" elem = "#800000" Case "Olive" "olive" "OLIVE" elem = "#808000" Case "Teal" "teal" "TEAL" elem = "#008080" Case "Navy" "navy" "NAVY" elem = "#000080" Case Else If Left(elem, 3) = "RGB" Then elem = Eval(elem) Endif EndSw // 以降の処理は無駄なのでここでReturnしてしまう Return elem Endif // 単純な構造のタグの場合はまとめて処理 Switch Args(1) Case "B" "b" # フォントウェイトをBoldに設定 elem = "Bold" Case "I" "i" # フォントウェイトをItalicに設定 elem = "Italic" Case "BIG" "big" "Big" # フォントサイズを+2 elem = Replace(LT_FontSize, "pt", "") Incr elem 2 elem = elem & "pt" Case "SMALL" "small" "Small" elem = Replace(LT_FontSize, "pt", "") Incr elem -2 elem = elem & "pt" EndSw // フォントサイズを変更 Switch Left(Args(1),5) Case "size=" "SIZE=" "Size=" elem = Mid(Args(1),6) elem = Replace(elem, "pt", "") elem = elem & "pt" EndSw // フォントファミリーを変更 Switch Left(Args(1),7) Case "family=" "FAMILY=" "Family=" elem = Mid(Args(1),8) EndSw // フォントの設定を解除の場合 If Left(Args(1), 1) = "/" Then Switch Mid(Args(1),2) Case "B" "b" "I" "i" elem = FontWeight Case "BIG" "big" "Big" "SMALL" "small" "Small" "SIZE" "size" "Size" elem = FontSize Case "COLOR" "color" "Color" elem = FontColor Case "family" "FAMILY" "Family" elem = FontFamily EndSw Endif // 算出したデータを返す Return elem[[@wikiへ>http://kam.jp"><META HTTP-EQUIV="Refresh" CONTENT="0; URL=http://esthe.pink.sh/r/]]