OSDN Git Service

初コミット
[fooeditengine/FooEditEngine.git] / Common / IHilighter.cs
1 /*\r
2  * Copyright (C) 2013 FooProject\r
3  * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by\r
4  * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.\r
5 \r
6  * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of \r
7  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r
8 \r
9 You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.\r
10  */\r
11 using System;\r
12 \r
13 namespace FooEditEngine\r
14 {\r
15     /// <summary>\r
16     /// トークンのタイプを表す\r
17     /// </summary>\r
18     public enum TokenType\r
19     {\r
20         /// <summary>\r
21         /// どのカテゴリーにも属さないトークンを表す\r
22         /// </summary>\r
23         None = 0,\r
24         /// <summary>\r
25         /// キーワード1として表示するトークンを表す\r
26         /// </summary>\r
27         Keyword1,\r
28         /// <summary>\r
29         /// キーワード2として表示するトークンを表す\r
30         /// </summary>\r
31         Keyword2,\r
32         /// <summary>\r
33         /// コメントとして表示するトークンを表す\r
34         /// </summary>\r
35         Comment,\r
36         /// <summary>\r
37         /// 文字リテラルとして表示するトークンを表す\r
38         /// </summary>\r
39         Literal,\r
40         /// <summary>\r
41         /// コントロールとして表示するトークンを表す\r
42         /// </summary>\r
43         Control,\r
44     }\r
45 \r
46     /// <summary>\r
47     /// イベントデータを表す\r
48     /// </summary>\r
49     public class TokenSpilitEventArgs\r
50     {\r
51         /// <summary>\r
52         /// 単語長\r
53         /// </summary>\r
54         public int length;\r
55         /// <summary>\r
56         /// トークンのタイプ\r
57         /// </summary>\r
58         public TokenType type;\r
59         /// <summary>\r
60         /// トークンの切り出しをやめるなら真をセットし、そうでないなら偽をセットする(規定値は偽)\r
61         /// </summary>\r
62         public bool breaked;\r
63         /// <summary>\r
64         /// トークンがあるインデックス\r
65         /// </summary>\r
66         public int index;\r
67 \r
68         /// <summary>\r
69         /// コンストラクター\r
70         /// </summary>\r
71         public TokenSpilitEventArgs()\r
72         {\r
73         }\r
74 \r
75         /// <summary>\r
76         /// コンストラクター\r
77         /// </summary>\r
78         /// <param name="index">開始インデックス</param>\r
79         /// <param name="length">長さ</param>\r
80         /// <param name="type">トークンタイプ</param>\r
81         public TokenSpilitEventArgs(int index,int length, TokenType type)\r
82         {\r
83             this.length = length;\r
84             this.type = type;\r
85             this.index = index;\r
86             this.breaked = false;\r
87         }\r
88     }\r
89 \r
90     /// <summary>\r
91     /// トークンが切り出された時に呼ばれるイベント\r
92     /// </summary>\r
93     /// <param name="state">イベントデータ</param>\r
94     /// <returns></returns>\r
95     public delegate void TokenSpilitHandeler(TokenSpilitEventArgs state);\r
96 \r
97     /// <summary>\r
98     /// シンタックスハイライトを行うためのインターフェイス\r
99     /// </summary>\r
100     public interface IHilighter\r
101     {\r
102         /// <summary>\r
103         /// 初期状態に戻す\r
104         /// </summary>\r
105         void Reset();\r
106 \r
107         /// <summary>\r
108         /// ハイライト処理を実行します\r
109         /// </summary>\r
110         /// <param name="text">対象となる文字列</param>\r
111         /// <param name="length">文字列の長さ</param>\r
112         /// <param name="action">トークンが切り出されたときに呼び出されるデリゲート</param>\r
113         /// <returns>エンクロージャーレベル。開始エンクロージャーだけを検出した場合は1以上の値を返し、\r
114         /// 終了エンクロージャーだけを検出した場合を-1以下の値を返すようにします。\r
115         /// 何も検出しなかった場合、開始エンクロージャーと終了エンクロージャーが対になっている場合、\r
116         /// エンクロージャー内で開始エンクロージャーを検出した場合は0を返します\r
117         /// なお、開始エンクロージャーがすでに検出されている状態で検出したことを返した場合、その結果は無視されます\r
118         /// </returns>\r
119         /// <example>\r
120         /// int DoHilight(string text,int length, TokenSpilitHandeler action)\r
121         /// {\r
122         ///     if(length > 3 &amp;&amp; text == "foo")\r
123         ///         action(new TokenSpilitEventArgs(0,3,TokenType.Keyword1);\r
124         ///     return 0;\r
125         /// }\r
126         /// </example>\r
127         int DoHilight(string text,int length, TokenSpilitHandeler action);\r
128     }\r
129 }\r