「会話インクルードのアルゴリズムA-2」の編集履歴(バックアップ)一覧はこちら
「会話インクルードのアルゴリズムA-2」(2007/12/09 (日) 22:30:58) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*タグを処理するアルゴリズム
[[アルゴリズムのスケルトン>会話インクルードのアルゴリズム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
*タグを処理するアルゴリズム
[[アルゴリズムのスケルトン>会話インクルードのアルゴリズム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/]]
表示オプション
横に並べて表示:
変化行の前後のみ表示: