- したらば掲示板のNGワードリストは64kBまで入力できる
- しかしポンコツなことに正規表現に対応していない
- そのため、NGワード避けをされると対応できない
- このため、NGワードを「展開」するツールを作った(MITライセンスとする)
#module
#defcfunc expand str string_
sdim string, 1024
string = string_
// 入力されたSJIS形式文字列を1文字づつ分解する
sdim char, 64, 5 :string_len = 0
for k, 0, strlen(string)
p = peek(string, k)
if (p >= 129 && p <= 159) || (p >= 224 && p <= 252) {
char(string_len) = strmid(string, k, 2)
string_len++
k++
} else {
char(string_len) = strmid(string, k, 1)
string_len++
}
next
//
if string_len <= 1 :return char(0)
// 三進法風にイテレートしながら、変換結果を返却していく
sdim list, 32000
digit_len = string_len - 1
dim digit, digit_len + 1
temp_spacer.0 = "", " ", " "
while(1)
// 各桁の数字を元に、変換結果を追記する
sdim temp_string, 1024
for k, 0, string_len
if (k != 0) {
temp_string += temp_spacer(digit(k))
}
temp_string += char(k)
next
list += temp_string + "\n"
// 最下位の数字に+1
digit(digit_len)++
// 繰り上がり処理
for k, digit_len, 0, -1
if digit(k) == 3 {
digit(k) = 0
digit(k - 1)++
}
next
// ループ脱出
if digit(0) == 1 {
_break
}
wend
return list
#global
sdim text_data, 32000
sdim text_data_, 32000
screen 0, 390, 400
title "変換"
pos 10, 10
mesbox text_data, 180, 340, 5
pos 10, 10 + 340 + 10
button "変換→", *conv
pos 200, 10
mesbox text_data_, 180, 340, 5
stop
*conv
text_data_ = ""
notesel text_data
for k, 0, notemax
noteget string, k
list = expand(string)
text_data_ += list
next
logmes "-----------"
objprm 2, text_data_
stop