@onready var input_field = $MainContainer/SearchArea/InputField
@onready var search_button = $MainContainer/SearchArea/SearchButton
@onready var result_list = $"MainContainer/TabContainer/検索結果/ResultList"
@onready var summary_list = $"MainContainer/TabContainer/文字集計/SummaryList"
@onready var total_list = $"MainContainer/TabContainer/文字集計(累計)/ScrollContainer/TotalList"
@onready var reset_button = $"MainContainer/TabContainer/文字集計(累計)/リセット"
var words = []
var total_char_count_list = {}
func _ready():
var file = FileAccess.open("res://wordlist.txt", FileAccess.READ)
while not file.eof_reached():
var line = file.get_line().strip_edges()
if line != "":
words.append(line)
file.close()
var tab_bar = $MainContainer/TabContainer.get_tab_bar()
tab_bar.add_theme_constant_override("tab_side_padding", 24)
tab_bar.add_theme_constant_override("tab_vseparation", 40)
tab_bar.add_theme_constant_override("hseparation", 30)
func _on_search_pressed():
var query = input_field.text.strip_edges()
var regex_pattern = convert_to_regex(query)
var regex = RegEx.new()
var regex_result = regex.compile(regex_pattern)
if regex_result != OK:
result_list.clear()
result_list.add("エラー")
var current_char_count_list := {}
result_list.clear()
summary_list.clear()
total_list.clear()
for w in words:
var result = regex.search(w)
if result:
result_list.add_item(w)
# ヒットした文字を取得
for i in range(1, result.get_group_count() + 1):
var hit_str = result.get_string(i)
for char in hit_str:
if not current_char_count_list.has(char):
current_char_count_list[char] = 0
current_char_count_list[char] += 1
# 累計
if not total_char_count_list.has(char):
total_char_count_list[char] = 0
total_char_count_list[char] += 1
# 今回の集計
var sorted_keys := current_char_count_list.keys()
sorted_keys.sort_custom(func(a, b): return current_char_count_list[a] > current_char_count_list[b])
for k in sorted_keys:
summary_list.add_item("%s : %d回" % [k, current_char_count_list[k]])
# 累計
var total_sorted_keys := total_char_count_list.keys()
total_sorted_keys.sort_custom(func(a, b): return total_char_count_list[a] > total_char_count_list[b])
for k in total_sorted_keys:
total_list.add_item("%s : %d回" % [k, total_char_count_list[k]])
@onready var input_field = $SearchArea/InputField
var last_tap_time = 0.0
var double_tap_threshold = 0.3
func _gui_input(event):
if event is InputEventScreenTouch and event.pressed:
var current_time = Time.get_ticks_msec() / 1000.0
if current_time - last_tap_time < double_tap_threshold:
input_field.grab_focus()
input_field.select_all()
last_tap_time = current_time