2 * Copyright (C) 2013 FooProject
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
4 * the Free Software Foundation; either version 3 of the License, or (at your option) any later version.
6 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
7 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
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/>.
12 using System.Collections.Generic;
13 using System.Text.RegularExpressions;
15 namespace FooEditEngine
18 /// IMarkerPattern
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X
20 public interface IMarkerPattern
23 ///
\83}
\81[
\83J
\81[
\82ð
\95Ô
\82·
25 /// <param name="lineHeadIndex">
\8ds
\93ª
\82Ö
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\95\
\82·</param>
26 /// <param name="s">
\95¶
\8e\9a\97ñ</param>
27 /// <returns>Marker
\97ñ
\8b\93\91Ì
\82ð
\95Ô
\82·</returns>
28 IEnumerable<Marker> GetMarker(int lineHeadIndex, string s);
31 ///
\90³
\8bK
\95\
\8c»
\82Å
\83}
\81[
\83J
\81[
\82Ì
\8eæ
\93¾
\82ð
\8ds
\82¤
\83N
\83\89\83X
33 public sealed class RegexMarkerPattern : IMarkerPattern
39 ///
\83R
\83\93\83X
\83g
\83\89\83N
\83^
\81[
41 /// <param name="regex">regex
\83I
\83u
\83W
\83F
\83N
\83g</param>
42 /// <param name="type">
\83n
\83C
\83\89\83C
\83g
\83^
\83C
\83v</param>
43 /// <param name="color">
\90F</param>
44 public RegexMarkerPattern(Regex regex,HilightType type,Color color)
52 ///
\83}
\81[
\83J
\81[
\82ð
\95Ô
\82·
54 /// <param name="lineHeadIndex">
\8ds
\93ª
\82Ö
\82Ì
\83C
\83\93\83f
\83b
\83N
\83X
\82ð
\95\
\82·</param>
55 /// <param name="s">
\95¶
\8e\9a\97ñ</param>
56 /// <returns>Marker
\97ñ
\8b\93\91Ì
\82ð
\95Ô
\82·</returns>
57 public IEnumerable<Marker> GetMarker(int lineHeadIndex, string s)
59 foreach (Match m in this.regex.Matches(s))
61 yield return Marker.Create(lineHeadIndex + m.Index, m.Length, this.type,this.color);
66 /// MarkerPattern
\83Z
\83b
\83g
68 public sealed class MarkerPatternSet
70 MarkerCollection markers;
71 Dictionary<int, IMarkerPattern> set = new Dictionary<int, IMarkerPattern>();
73 internal MarkerPatternSet(LineToIndexTable lti,MarkerCollection markers)
75 lti.CreateingLayout += lti_CreateingLayout;
76 this.markers = markers;
79 void lti_CreateingLayout(object sender, CreateLayoutEventArgs e)
81 LineToIndexTable lti = (LineToIndexTable)sender;
82 foreach (int id in this.set.Keys)
84 this.markers.RemoveAll(id, e.Index, e.Length);
85 this.markers.AddRange(id, this.set[id].GetMarker(e.Index,e.Content));
89 internal event EventHandler Updated;
92 /// WatchDog
\82ð
\92Ç
\89Á
\82·
\82é
94 /// <param name="id">
\83}
\81[
\83J
\81[ID</param>
95 /// <param name="dog">IMarkerPattern
\83C
\83\93\83^
\81[
\83t
\83F
\83C
\83X</param>
96 public void Add(int id, IMarkerPattern dog)
98 this.set.Add(id, dog);
99 this.Updated(this, null);
103 ///
\83}
\81[
\83J
\81[ID
\82ª
\8aÜ
\82Ü
\82ê
\82Ä
\82¢
\82é
\82©
\82Ç
\82¤
\82©
\82ð
\92²
\82×
\82é
105 /// <param name="id">
\83}
\81[
\83J
\81[ID</param>
106 /// <returns>
\8aÜ
\82Ü
\82ê
\82Ä
\82¢
\82ê
\82Î
\90^
\81B
\82»
\82¤
\82Å
\82È
\82¯
\82ê
\82Î
\8bU</returns>
107 public bool Contains(int id)
109 return this.set.ContainsKey(id);
113 /// WatchDog
\82ð
\92Ç
\89Á
\82·
\82é
115 /// <param name="id">
\83}
\81[
\83J
\81[ID</param>
116 public void Remove(int id)
118 this.markers.Clear(id);
120 this.Updated(this, null);