Skip to content

Commit 1e36288

Browse files
committed
Refactor and performance improvements
1 parent 740c9ed commit 1e36288

5 files changed

Lines changed: 148 additions & 133 deletions

File tree

Assets/Hypertext/Examples/RegexExample.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ namespace Hypertext
55
public class RegexExample : MonoBehaviour
66
{
77
[SerializeField]
8-
RegexHypertext _text;
8+
RegexHypertext text;
99

1010
const string RegexURL = "http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
1111
const string RegexHashtag = "[##][A-Za-zA-Za-z一-鿆0-90-9ぁ-ヶヲ-゚ー]+";
1212

1313
void Start()
1414
{
15-
_text.SetClickableByRegex(RegexURL, Color.cyan, url => Debug.Log(url));
16-
_text.SetClickableByRegex(RegexHashtag, Color.green, hashtag => Debug.Log(hashtag));
15+
text.OnClick(RegexURL, Color.cyan, url => Debug.Log(url));
16+
text.OnClick(RegexHashtag, Color.green, hashtag => Debug.Log(hashtag));
1717
}
1818
}
1919
}

Assets/Hypertext/Examples/RegexExample.unity

Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ LightmapSettings:
5050
m_BounceScale: 1
5151
m_IndirectOutputScale: 1
5252
m_AlbedoBoost: 1
53-
m_TemporalCoherenceThreshold: 1
5453
m_EnvironmentLightingMode: 0
5554
m_EnableBakedLightmaps: 0
5655
m_EnableRealtimeLightmaps: 0
@@ -117,12 +116,12 @@ NavMeshSettings:
117116
GameObject:
118117
m_ObjectHideFlags: 0
119118
m_CorrespondingSourceObject: {fileID: 0}
120-
m_PrefabInternal: {fileID: 0}
119+
m_PrefabInstance: {fileID: 0}
120+
m_PrefabAsset: {fileID: 0}
121121
serializedVersion: 6
122122
m_Component:
123123
- component: {fileID: 836813873}
124124
- component: {fileID: 836813872}
125-
- component: {fileID: 836813871}
126125
- component: {fileID: 836813870}
127126
- component: {fileID: 836813869}
128127
m_Layer: 0
@@ -136,28 +135,24 @@ GameObject:
136135
AudioListener:
137136
m_ObjectHideFlags: 0
138137
m_CorrespondingSourceObject: {fileID: 0}
139-
m_PrefabInternal: {fileID: 0}
138+
m_PrefabInstance: {fileID: 0}
139+
m_PrefabAsset: {fileID: 0}
140140
m_GameObject: {fileID: 836813868}
141141
m_Enabled: 1
142142
--- !u!124 &836813870
143143
Behaviour:
144144
m_ObjectHideFlags: 0
145145
m_CorrespondingSourceObject: {fileID: 0}
146-
m_PrefabInternal: {fileID: 0}
147-
m_GameObject: {fileID: 836813868}
148-
m_Enabled: 1
149-
--- !u!92 &836813871
150-
Behaviour:
151-
m_ObjectHideFlags: 0
152-
m_CorrespondingSourceObject: {fileID: 0}
153-
m_PrefabInternal: {fileID: 0}
146+
m_PrefabInstance: {fileID: 0}
147+
m_PrefabAsset: {fileID: 0}
154148
m_GameObject: {fileID: 836813868}
155149
m_Enabled: 1
156150
--- !u!20 &836813872
157151
Camera:
158152
m_ObjectHideFlags: 0
159153
m_CorrespondingSourceObject: {fileID: 0}
160-
m_PrefabInternal: {fileID: 0}
154+
m_PrefabInstance: {fileID: 0}
155+
m_PrefabAsset: {fileID: 0}
161156
m_GameObject: {fileID: 836813868}
162157
m_Enabled: 1
163158
serializedVersion: 2
@@ -166,6 +161,7 @@ Camera:
166161
m_projectionMatrixMode: 1
167162
m_SensorSize: {x: 36, y: 24}
168163
m_LensShift: {x: 0, y: 0}
164+
m_GateFitMode: 2
169165
m_FocalLength: 50
170166
m_NormalizedViewPortRect:
171167
serializedVersion: 2
@@ -197,7 +193,8 @@ Camera:
197193
Transform:
198194
m_ObjectHideFlags: 0
199195
m_CorrespondingSourceObject: {fileID: 0}
200-
m_PrefabInternal: {fileID: 0}
196+
m_PrefabInstance: {fileID: 0}
197+
m_PrefabAsset: {fileID: 0}
201198
m_GameObject: {fileID: 836813868}
202199
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
203200
m_LocalPosition: {x: 0, y: 0, z: -10}
@@ -210,7 +207,8 @@ Transform:
210207
GameObject:
211208
m_ObjectHideFlags: 0
212209
m_CorrespondingSourceObject: {fileID: 0}
213-
m_PrefabInternal: {fileID: 0}
210+
m_PrefabInstance: {fileID: 0}
211+
m_PrefabAsset: {fileID: 0}
214212
serializedVersion: 6
215213
m_Component:
216214
- component: {fileID: 1089957327}
@@ -226,19 +224,21 @@ GameObject:
226224
MonoBehaviour:
227225
m_ObjectHideFlags: 0
228226
m_CorrespondingSourceObject: {fileID: 0}
229-
m_PrefabInternal: {fileID: 0}
227+
m_PrefabInstance: {fileID: 0}
228+
m_PrefabAsset: {fileID: 0}
230229
m_GameObject: {fileID: 1089957325}
231230
m_Enabled: 1
232231
m_EditorHideFlags: 0
233232
m_Script: {fileID: 11500000, guid: 4f421d3e9d8463c439c53f37747a7dd2, type: 3}
234233
m_Name:
235234
m_EditorClassIdentifier:
236-
_text: {fileID: 1093713752}
235+
text: {fileID: 1093713752}
237236
--- !u!4 &1089957327
238237
Transform:
239238
m_ObjectHideFlags: 0
240239
m_CorrespondingSourceObject: {fileID: 0}
241-
m_PrefabInternal: {fileID: 0}
240+
m_PrefabInstance: {fileID: 0}
241+
m_PrefabAsset: {fileID: 0}
242242
m_GameObject: {fileID: 1089957325}
243243
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
244244
m_LocalPosition: {x: 410.52548, y: 162.99268, z: 0}
@@ -251,7 +251,8 @@ Transform:
251251
GameObject:
252252
m_ObjectHideFlags: 0
253253
m_CorrespondingSourceObject: {fileID: 0}
254-
m_PrefabInternal: {fileID: 0}
254+
m_PrefabInstance: {fileID: 0}
255+
m_PrefabAsset: {fileID: 0}
255256
serializedVersion: 6
256257
m_Component:
257258
- component: {fileID: 1093713749}
@@ -268,7 +269,8 @@ GameObject:
268269
RectTransform:
269270
m_ObjectHideFlags: 0
270271
m_CorrespondingSourceObject: {fileID: 0}
271-
m_PrefabInternal: {fileID: 0}
272+
m_PrefabInstance: {fileID: 0}
273+
m_PrefabAsset: {fileID: 0}
272274
m_GameObject: {fileID: 1093713748}
273275
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
274276
m_LocalPosition: {x: 0, y: 0, z: 0}
@@ -286,14 +288,16 @@ RectTransform:
286288
CanvasRenderer:
287289
m_ObjectHideFlags: 0
288290
m_CorrespondingSourceObject: {fileID: 0}
289-
m_PrefabInternal: {fileID: 0}
291+
m_PrefabInstance: {fileID: 0}
292+
m_PrefabAsset: {fileID: 0}
290293
m_GameObject: {fileID: 1093713748}
291294
m_CullTransparentMesh: 0
292295
--- !u!114 &1093713752
293296
MonoBehaviour:
294297
m_ObjectHideFlags: 0
295298
m_CorrespondingSourceObject: {fileID: 0}
296-
m_PrefabInternal: {fileID: 0}
299+
m_PrefabInstance: {fileID: 0}
300+
m_PrefabAsset: {fileID: 0}
297301
m_GameObject: {fileID: 1093713748}
298302
m_Enabled: 1
299303
m_EditorHideFlags: 0
@@ -326,7 +330,8 @@ MonoBehaviour:
326330
GameObject:
327331
m_ObjectHideFlags: 0
328332
m_CorrespondingSourceObject: {fileID: 0}
329-
m_PrefabInternal: {fileID: 0}
333+
m_PrefabInstance: {fileID: 0}
334+
m_PrefabAsset: {fileID: 0}
330335
serializedVersion: 6
331336
m_Component:
332337
- component: {fileID: 1167677278}
@@ -343,7 +348,8 @@ GameObject:
343348
MonoBehaviour:
344349
m_ObjectHideFlags: 0
345350
m_CorrespondingSourceObject: {fileID: 0}
346-
m_PrefabInternal: {fileID: 0}
351+
m_PrefabInstance: {fileID: 0}
352+
m_PrefabAsset: {fileID: 0}
347353
m_GameObject: {fileID: 1167677275}
348354
m_Enabled: 1
349355
m_EditorHideFlags: 0
@@ -361,7 +367,8 @@ MonoBehaviour:
361367
MonoBehaviour:
362368
m_ObjectHideFlags: 0
363369
m_CorrespondingSourceObject: {fileID: 0}
364-
m_PrefabInternal: {fileID: 0}
370+
m_PrefabInstance: {fileID: 0}
371+
m_PrefabAsset: {fileID: 0}
365372
m_GameObject: {fileID: 1167677275}
366373
m_Enabled: 1
367374
m_EditorHideFlags: 0
@@ -375,7 +382,8 @@ MonoBehaviour:
375382
Transform:
376383
m_ObjectHideFlags: 0
377384
m_CorrespondingSourceObject: {fileID: 0}
378-
m_PrefabInternal: {fileID: 0}
385+
m_PrefabInstance: {fileID: 0}
386+
m_PrefabAsset: {fileID: 0}
379387
m_GameObject: {fileID: 1167677275}
380388
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
381389
m_LocalPosition: {x: 0, y: 0, z: 0}
@@ -388,7 +396,8 @@ Transform:
388396
GameObject:
389397
m_ObjectHideFlags: 0
390398
m_CorrespondingSourceObject: {fileID: 0}
391-
m_PrefabInternal: {fileID: 0}
399+
m_PrefabInstance: {fileID: 0}
400+
m_PrefabAsset: {fileID: 0}
392401
serializedVersion: 6
393402
m_Component:
394403
- component: {fileID: 1928692836}
@@ -406,7 +415,8 @@ GameObject:
406415
MonoBehaviour:
407416
m_ObjectHideFlags: 0
408417
m_CorrespondingSourceObject: {fileID: 0}
409-
m_PrefabInternal: {fileID: 0}
418+
m_PrefabInstance: {fileID: 0}
419+
m_PrefabAsset: {fileID: 0}
410420
m_GameObject: {fileID: 1928692832}
411421
m_Enabled: 1
412422
m_EditorHideFlags: 0
@@ -422,7 +432,8 @@ MonoBehaviour:
422432
MonoBehaviour:
423433
m_ObjectHideFlags: 0
424434
m_CorrespondingSourceObject: {fileID: 0}
425-
m_PrefabInternal: {fileID: 0}
435+
m_PrefabInstance: {fileID: 0}
436+
m_PrefabAsset: {fileID: 0}
426437
m_GameObject: {fileID: 1928692832}
427438
m_Enabled: 1
428439
m_EditorHideFlags: 0
@@ -443,7 +454,8 @@ MonoBehaviour:
443454
Canvas:
444455
m_ObjectHideFlags: 0
445456
m_CorrespondingSourceObject: {fileID: 0}
446-
m_PrefabInternal: {fileID: 0}
457+
m_PrefabInstance: {fileID: 0}
458+
m_PrefabAsset: {fileID: 0}
447459
m_GameObject: {fileID: 1928692832}
448460
m_Enabled: 1
449461
serializedVersion: 3
@@ -463,7 +475,8 @@ Canvas:
463475
RectTransform:
464476
m_ObjectHideFlags: 0
465477
m_CorrespondingSourceObject: {fileID: 0}
466-
m_PrefabInternal: {fileID: 0}
478+
m_PrefabInstance: {fileID: 0}
479+
m_PrefabAsset: {fileID: 0}
467480
m_GameObject: {fileID: 1928692832}
468481
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
469482
m_LocalPosition: {x: 0, y: 0, z: 0}

Assets/Hypertext/Examples/RegexHypertext.cs

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@ namespace Hypertext
77
{
88
public class RegexHypertext : HypertextBase
99
{
10-
readonly Dictionary<string, Entry> _entryTable = new Dictionary<string, Entry>();
10+
readonly List<Entry> entries = new List<Entry>();
1111

1212
struct Entry
1313
{
1414
public string RegexPattern;
1515
public Color Color;
16-
public Action<string> OnClick;
16+
public Action<string> Callback;
1717

18-
public Entry(string regexPattern, Color color, Action<string> onClick)
18+
public Entry(string regexPattern, Color color, Action<string> callback)
1919
{
2020
RegexPattern = regexPattern;
2121
Color = color;
22-
OnClick = onClick;
22+
Callback = callback;
2323
}
2424
}
2525

@@ -28,44 +28,45 @@ public Entry(string regexPattern, Color color, Action<string> onClick)
2828
/// </summary>
2929
/// <param name="regexPattern">正規表現</param>
3030
/// <param name="onClick">クリック時のコールバック</param>
31-
public void SetClickableByRegex(string regexPattern, Action<string> onClick)
31+
public void OnClick(string regexPattern, Action<string> onClick)
3232
{
33-
SetClickableByRegex(regexPattern, color, onClick);
33+
OnClick(regexPattern, color, onClick);
3434
}
3535

3636
/// <summary>
3737
/// 正規表現にマッチした部分文字列に色とクリックイベントを登録します
3838
/// </summary>
3939
/// <param name="regexPattern">正規表現</param>
40-
/// <param name="color">正規表現でマッチしたテキストの色</param>
40+
/// <param name="color">テキストカラー</param>
4141
/// <param name="onClick">クリック時のコールバック</param>
42-
public void SetClickableByRegex(string regexPattern, Color color, Action<string> onClick)
42+
public void OnClick(string regexPattern, Color color, Action<string> onClick)
4343
{
4444
if (string.IsNullOrEmpty(regexPattern) || onClick == null)
4545
{
4646
return;
4747
}
4848

49-
_entryTable[regexPattern] = new Entry(regexPattern, color, onClick);
49+
entries.Add(new Entry(regexPattern, color, onClick));
5050
}
5151

52-
public override void RemoveClickable()
52+
public override void RemoveListeners()
5353
{
54-
base.RemoveClickable();
55-
_entryTable.Clear();
54+
base.RemoveListeners();
55+
entries.Clear();
5656
}
5757

5858
/// <summary>
59-
/// テキストの変更などでクリックする文字位置の再計算が必要なときに呼び出されます
60-
/// 親の RegisterClickable メソッドを使ってクリック対象文字の情報を登録してください
59+
/// イベントリスナを追加します
60+
/// テキストの変更などでイベントの再登録が必要なときにも呼び出されます
61+
/// <see cref="HypertextBase.OnClick"/> を使ってクリックイベントを登録してください
6162
/// </summary>
62-
protected override void RegisterClickable()
63+
protected override void AddListeners()
6364
{
64-
foreach (var entry in _entryTable.Values)
65+
foreach (var entry in entries)
6566
{
6667
foreach (Match match in Regex.Matches(text, entry.RegexPattern))
6768
{
68-
RegisterClickable(match.Index, match.Value.Length, entry.Color, entry.OnClick);
69+
OnClick(match.Index, match.Value.Length, entry.Color, entry.Callback);
6970
}
7071
}
7172
}

0 commit comments

Comments
 (0)