●装飾表示

「●装飾表示」の編集履歴(バックアップ)一覧に戻る
●装飾表示」を以下のとおり復元します。
*情報
作者名:U D
引用元:[[なでしこプログラム掲示板「装飾表示」>http://www.himanavi.net/cgi/nade-bbs/cbbs.cgi?mode=al2&namber=788&rev=&no=0]]

*概要
日本語タグでマークアップした文書を装飾して表示します。
日本語タグのマークアップ仕様については、HTMLを真似ています。

*解説
#image(無題.PNG,width=428,height=554)


***引数
OBJ:描画先
X1:X座標(左上)
Y1:Y座標(左上)
S:マークアップされた文書

*サンプルプログラム
 母艦について
  タイトルは『装飾表示(テキストマークアップ)』
  クライアントW=420
  クライアントH=520
 黒色で画面クリア
 
 文字色は白色。文字サイズは11
 
 「
 これはなでしこで<文字 色=$FF33FF サイズ=13>マークアップテキスト</文字>を表示するための、<改行>
 <文字 色=$FF33FF サイズ=13>"装飾表示"</文字>関数の<太字>サンプル文章兼説明</太字>です。<改行>
 <改行><改行>
 
  <太字><文字 色=赤色>●</文字>文字タグ</太字>  {タグカッコ}文字{タグカッコ閉じ}~{タグカッコ}/文字{タグカッコ閉じ}
 <改行>
 タグで囲まれた<太字>波線部分</太字>を指定した属性で装飾します。 <改行>
  例){タグカッコ}文字 色=緑色 サイズ=15{タグカッコ閉じ}
 <文字 色=緑色 サイズ=15>文字</文字>{タグカッコ}/文字{タグカッコ閉じ}<改行>
 指定することのできる属性は以下の通りです。
 <改行>
 ・色=COLOR <改行>
  <文字 色=$FF33FF>なでしこ</文字>で使うことのできる<文字 色=$FF33FF>カラーコードと同様</文字>の指定が可能。<改行>
  例)
 <文字 色=赤色> 色=赤色</文字>
 <文字 色=RGB(224,224,0)> 色=RGB(224,224,0)</文字>
 <文字 色=$0000FF> 色=$0000FF</文字>
 <改行>
 ・サイズ=SIZE
 <改行>
  文字の大きさを整数値で指定する。<改行>
  例)<文字 サイズ=15>サイズ=15 </文字>
 <改行><改行>
 
  <太字><文字 色=赤色>●</文字>太字タグ</太字> {タグカッコ}太字{タグカッコ閉じ}~{タグカッコ}/太字{タグカッコ閉じ}<改行>
 タグで囲まれた<太字>波線部分</太字>を<太字>太字</太字>にして強調します。<改行>
  例){タグカッコ}太字{タグカッコ閉じ}<太字>太字</太字>{タグカッコ}/太字{タグカッコ閉じ}<改行>
 指定することのできる属性はありません。<改行>
 <改行><改行>
 
  <太字><文字 色=赤色>●</文字>斜体タグ</太字> {タグカッコ}斜体{タグカッコ閉じ}~{タグカッコ}/斜体{タグカッコ閉じ}<改行>
 タグで囲まれた<太字>波線部分</太字>を<斜体>斜体</斜体>にして強調します。<改行>
  例){タグカッコ}斜体{タグカッコ閉じ}<斜体>斜体</斜体>{タグカッコ}/斜体{タグカッコ閉じ}<改行>
 指定することのできる属性はありません。<改行>
 <改行><改行>
 
  <太字><文字 色=赤色>●</文字>改行タグ</太字> {タグカッコ}改行{タグカッコ閉じ}(終了タグなし)<改行>
 改行タグを挿入した場所で改行します。<改行>
 <太字>改行タグがなければこの文書は改行しません。</太字>
 <改行><改行>
 」と母艦の15,25に装飾表示する。

*//本体
 #-*-*-*-*-*-*-*-*-*-*-*-*-*-#-*-*-*-*-*-*-*-*-*-*-*-*-*-#
 #-*-*-*-*-* "装飾表示"命令ライブラリ ここから *-*-*-*-*-#
 #-*-*-*-*-*-*-*-*-*-*-*-*-*-#-*-*-*-*-*-*-*-*-*-*-*-*-*-#
 #-----------------# Created By U D #-------------------#
 #-*-*-*-*-*-*-*-*-*-*-*-*-*-#-*-*-*-*-*-*-*-*-*-*-*-*-*-#
 
 !タグカッコ =`<` ※ <
 !タグカッコ閉=`>` ※ >
 
 !F_通常  =1
 !F_タグ開始=2
 !F_タグ終了=3
 
 ●装飾表示({グループ=?母艦}OBJの{整数=?}X1,{整数=?}Y1へ{文字列=?}Sを|Y1にSと)
  状態とは整数=F_通常
  もしSが空ならばS=それ
  もしX1が空ならばX1=基本X
  もしY1が空ならばY1=基本Y
  基本X=X1。基本Y=Y1
  フォントとはハッシュ="色={文字色}{~}サイズ={文字サイズ}{~}書体=標準"
  スタックとは配列。POSとは整数。SIZESとは配列
  スタック[0]=フォント。フォントに属性設定
  Sの`(<|>|/)`を改行&`$1`&改行へ正規表現置換えて反復
   状態で条件分岐
    F_通常ならば
     もし対象が`<`ならば状態=F_タグ開始
     違えば
      対象のタグカッコを`<`に置換
      タグカッコ閉じを`>`に置換
      それをOBJの基本X,基本Yへ文字表示
      基本X=それの文字幅取得+基本X
      文字サイズをSIZESに配列追加
    F_タグ開始ならば
     もし対象が`/`ならば状態=F_タグ終了
     違えば、もし対象が`>`ならば状態はF_通常。続ける
     違えば # 状態=F_タグ内容
      対象の2文字左部分で条件分岐
       `文字`ならば
        フォントはスタック[POS]
        フォントに対象を属性設定
        POS=POS+1。スタック[POS]=フォント
       `太字`ならば
        フォントはスタック[POS]
        フォント@`書体`は`太字`
        フォントに属性設定
        POS=POS+1。スタック[POS]=フォント
       `斜体`ならば
        フォントはスタック[POS]
        フォント@`書体`は`斜体`
        フォントに属性設定
        POS=POS+1。スタック[POS]=フォント
       `改行`ならば
        SIZESを配列数値ソート。SIZESを配列逆順
        SIZES[1]=文字書体。文字書体=`MS Pゴシック|`&SIZES[0]&`|標準`
        基本X=X1。基本Y=`高さ`の文字高さ取得+基本Y
        文字書体=SIZES[1]。SIZESは空
    F_タグ終了ならば
     もし対象が`文字|太字|斜体`に正規表現一致するならば
      POS=POS-1
      フォントはスタック[POS]
      フォントに属性設定
     もし対象が`>`ならば状態はF_通常
 
 ●属性設定({参照渡し ハッシュ}Aに{文字列=?}Bを)
  PREとは整数=1。CNTとは整数=1。STRとは文字列
  Bの1から3文字削除。B=B&` `
  必要の間
   CNT=BでPREから`=`を文字検索
   もしCNTがPREならば抜ける
   STR=BのPREから(CNT-PRE)文字抜き出す
   STRで条件分岐
    `色`ならば
     Bを`色=([^ .]+)`で正規表現マッチ
     A@`色`=EVAL(抽出文字列[0])
     CNT=抽出文字列[0]の文字数+CNT+2
     /*# EVALで不具合が起きるようならこちらに処理を入れ替え
     もしSTRが`RGB\((\d+),(\d+),(\d+)\)`に正規表現一致するならば
      A@`色`=RGB(抽出文字列[0],抽出文字列[1],抽出文字列[2])
     違えば、もしSTRが`#(.+)`に正規表現一致するならば
      A@`色`=INT(`$`&抽出文字列)
     違えば、A@`色`=(STR)
     #*/
    `サイズ`ならば
     Bを`サイズ=([^ .]+)`で正規表現マッチ
     A@`サイズ`=INT(抽出文字列[0])
     CNT=抽出文字列[0]の文字数+CNT+2
   PRE=CNT
  文字色=A@`色`
  文字サイズ=A@`サイズ`
  文字書体=`MS Pゴシック|`&文字サイズ&`|`&(A@`書体`)
 
 #-*-*-*-*-*-*-*-*-*-*-*-*-*-#-*-*-*-*-*-*-*-*-*-*-*-*-*-#
 #-*-*-*-*-* "装飾表示"命令ライブラリ ここまで *-*-*-*-*-#
 #-*-*-*-*-*-*-*-*-*-*-*-*-*-#-*-*-*-*-*-*-*-*-*-*-*-*-*-#
----
#comment()

----

復元してよろしいですか?

ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。