dcdd144598 2011-02-23 kinaba: #ifndef _EDITWING_COMMON_H_ dcdd144598 2011-02-23 kinaba: #define _EDITWING_COMMON_H_ dcdd144598 2011-02-23 kinaba: #include "../kilib/kilib.h" dcdd144598 2011-02-23 kinaba: #ifndef __ccdoc__ dcdd144598 2011-02-23 kinaba: namespace editwing { dcdd144598 2011-02-23 kinaba: #endif dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: // Unicode関係 dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline bool isHighSurrogate(unicode ch) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: return (0xD800 <= ch && ch <= 0xDBFF); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: inline bool isLowSurrogate(unicode ch) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: return (0xDC00 <= ch && ch <= 0xDFFF); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ @pkg editwing.Common //@} dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // テキスト中の位置情報 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: struct DPos : public ki::Object dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: //@{ バッファ中のアドレス (0〜 ) //@} dcdd144598 2011-02-23 kinaba: ulong ad; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 論理行番号 (0〜 ) //@} dcdd144598 2011-02-23 kinaba: ulong tl; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: bool operator == ( const DPos& r ) const dcdd144598 2011-02-23 kinaba: { return (tl==r.tl && ad==r.ad); } dcdd144598 2011-02-23 kinaba: bool operator != ( const DPos& r ) const dcdd144598 2011-02-23 kinaba: { return (tl!=r.tl || ad!=r.ad); } dcdd144598 2011-02-23 kinaba: bool operator < ( const DPos& r ) const dcdd144598 2011-02-23 kinaba: { return (tl<r.tl || (tl==r.tl && ad<r.ad)); } dcdd144598 2011-02-23 kinaba: bool operator > ( const DPos& r ) const dcdd144598 2011-02-23 kinaba: { return (tl>r.tl || (tl==r.tl && ad>r.ad)); } dcdd144598 2011-02-23 kinaba: bool operator <= ( const DPos& r ) const dcdd144598 2011-02-23 kinaba: { return (tl<r.tl || (tl==r.tl && ad<=r.ad)); } dcdd144598 2011-02-23 kinaba: bool operator >= ( const DPos& r ) const dcdd144598 2011-02-23 kinaba: { return (tl>r.tl || (tl==r.tl && ad>=r.ad)); } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: DPos( ulong t, ulong a ) : tl(t), ad(a) {} dcdd144598 2011-02-23 kinaba: DPos() {} dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 特殊文字を表す定数値 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: enum SpecialChars dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: scEOF = 0, // EOF dcdd144598 2011-02-23 kinaba: scEOL = 1, // 改行 dcdd144598 2011-02-23 kinaba: scTAB = 2, // タブ dcdd144598 2011-02-23 kinaba: scHSP = 3, // 半角スペース dcdd144598 2011-02-23 kinaba: scZSP = 4 // 全角スペース dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 単語の種類を表す定数値 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: enum TokenType dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: TAB = 0x00, // Tab dcdd144598 2011-02-23 kinaba: WSP = 0x04, // 半角スペース dcdd144598 2011-02-23 kinaba: ALP = 0x08, // 普通の字 dcdd144598 2011-02-23 kinaba: CE = 0x0c, // コメント終了タグ dcdd144598 2011-02-23 kinaba: CB = 0x10, // コメント開始タグ dcdd144598 2011-02-23 kinaba: LB = 0x14, // 行コメント開始タグ dcdd144598 2011-02-23 kinaba: Q1 = 0x18, // 単一引用符 dcdd144598 2011-02-23 kinaba: Q2 = 0x1c // 二重引用符 dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 色指定箇所を表す定数値 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: enum ColorType dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: TXT = 0, // 文字色 dcdd144598 2011-02-23 kinaba: CMT = 1, // コメント文字色 dcdd144598 2011-02-23 kinaba: KWD = 2, // キーワード文字色 dcdd144598 2011-02-23 kinaba: // = 3, // ( コメントアウトされたキーワード文字色 ) dcdd144598 2011-02-23 kinaba: CTL = 4, // 特殊文字色 dcdd144598 2011-02-23 kinaba: BG = 5, // 背景色 dcdd144598 2011-02-23 kinaba: LN = 6 // 行番号 dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 折り返し位置を示す定数値 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: enum WrapType dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: NOWRAP = -1, // 折り返し無し dcdd144598 2011-02-23 kinaba: RIGHTEDGE = 0 // 右端 dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: //@{ dcdd144598 2011-02-23 kinaba: // 表示設定 dcdd144598 2011-02-23 kinaba: // dcdd144598 2011-02-23 kinaba: // フォント・色・タブ幅・特殊文字の表示、の情報を保持。 dcdd144598 2011-02-23 kinaba: // ただし、強調単語の指定は Document に対して行う。 dcdd144598 2011-02-23 kinaba: //@} dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: struct VConfig : public ki::Object dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: //@{ フォント //@} dcdd144598 2011-02-23 kinaba: LOGFONT font; dcdd144598 2011-02-23 kinaba: int fontsize; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ タブ幅文字数 //@} dcdd144598 2011-02-23 kinaba: int tabstep; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 色 //@} dcdd144598 2011-02-23 kinaba: COLORREF color[7]; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 特殊文字表示 //@} dcdd144598 2011-02-23 kinaba: bool sc[5]; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ 危険なデフォルトコンストラクタ //@} dcdd144598 2011-02-23 kinaba: VConfig() {} dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ フォント関係初期化 //@} dcdd144598 2011-02-23 kinaba: VConfig( const TCHAR* fnam, int fsiz ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: SetFont( fnam,fsiz ); dcdd144598 2011-02-23 kinaba: tabstep = 4; dcdd144598 2011-02-23 kinaba: color[TXT] = dcdd144598 2011-02-23 kinaba: color[CMT] = dcdd144598 2011-02-23 kinaba: color[KWD] = dcdd144598 2011-02-23 kinaba: color[CTL] = RGB(0,0,0); dcdd144598 2011-02-23 kinaba: color[ BG] = RGB(255,255,255); dcdd144598 2011-02-23 kinaba: color[ LN] = RGB(0,0,0);//255,255,0); dcdd144598 2011-02-23 kinaba: sc[scEOF] = dcdd144598 2011-02-23 kinaba: sc[scEOL] = dcdd144598 2011-02-23 kinaba: sc[scTAB] = dcdd144598 2011-02-23 kinaba: sc[scHSP] = dcdd144598 2011-02-23 kinaba: sc[scZSP] = false; dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ フォント関係設定 //@} dcdd144598 2011-02-23 kinaba: void SetFont( const TCHAR* fnam, int fsiz ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: fontsize = fsiz; dcdd144598 2011-02-23 kinaba: font.lfWidth = 0; dcdd144598 2011-02-23 kinaba: font.lfEscapement = 0; dcdd144598 2011-02-23 kinaba: font.lfOrientation = 0; dcdd144598 2011-02-23 kinaba: font.lfWeight = FW_DONTCARE; dcdd144598 2011-02-23 kinaba: font.lfItalic = FALSE; dcdd144598 2011-02-23 kinaba: font.lfUnderline = FALSE; dcdd144598 2011-02-23 kinaba: font.lfStrikeOut = FALSE; dcdd144598 2011-02-23 kinaba: font.lfOutPrecision = OUT_DEFAULT_PRECIS; dcdd144598 2011-02-23 kinaba: font.lfClipPrecision = CLIP_DEFAULT_PRECIS; dcdd144598 2011-02-23 kinaba: font.lfQuality = DEFAULT_QUALITY; dcdd144598 2011-02-23 kinaba: font.lfPitchAndFamily = VARIABLE_PITCH|FF_DONTCARE; dcdd144598 2011-02-23 kinaba: font.lfCharSet = DEFAULT_CHARSET; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: ::lstrcpy( font.lfFaceName, fnam ); dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: HDC h = ::GetDC( NULL ); dcdd144598 2011-02-23 kinaba: font.lfHeight = -MulDiv(fsiz, ::GetDeviceCaps(h,LOGPIXELSY), 72); dcdd144598 2011-02-23 kinaba: ::ReleaseDC( NULL, h ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //@{ タブ幅設定 //@} dcdd144598 2011-02-23 kinaba: void SetTabStep( int tab ) dcdd144598 2011-02-23 kinaba: { dcdd144598 2011-02-23 kinaba: tabstep = Max( 1, tab ); dcdd144598 2011-02-23 kinaba: } dcdd144598 2011-02-23 kinaba: }; dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: //========================================================================= dcdd144598 2011-02-23 kinaba: dcdd144598 2011-02-23 kinaba: } // namespace editwing dcdd144598 2011-02-23 kinaba: #endif // _EDITWING_COMMON_H_