Skip to content

Instantly share code, notes, and snippets.

@YSRKEN
Last active September 4, 2018 13:50
Show Gist options
  • Save YSRKEN/3fe3d795bc22effade5adecc745c72c2 to your computer and use it in GitHub Desktop.
Save YSRKEN/3fe3d795bc22effade5adecc745c72c2 to your computer and use it in GitHub Desktop.
したらば掲示板用NGワードリスト自動生成ツール

概要

  • したらば掲示板のNGワードリストは64kBまで入力できる
  • しかしポンコツなことに正規表現に対応していない
  • そのため、NGワード避けをされると対応できない
  • このため、NGワードを「展開」するツールを作った(MITライセンスとする)

画面

image

ソースコード

  • 言語はHSP3
  • HSP3.5で動作確認した
#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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment