| New file |
| | |
| | | // ------------------------------------------------------------------------------
|
| | | // <autogenerated>
|
| | | // This code was generated by a tool.
|
| | | // Mono Runtime Version: 2.0.50727.1433
|
| | | // |
| | | // Changes to this file may cause incorrect behavior and will be lost if |
| | | // the code is regenerated.
|
| | | // </autogenerated>
|
| | | // ------------------------------------------------------------------------------
|
| | |
|
| | | namespace TableConfig
|
| | | {
|
| | | using System;
|
| | | using System.Collections.Generic;
|
| | | using System.Text.RegularExpressions;
|
| | | using UnityEngine;
|
| | | using System.Threading;
|
| | |
|
| | | public partial class DirtyNameConfig : ConfigBase, IConfigPostProcess
|
| | | {
|
| | |
|
| | | private static WordGroup[] DIRTYWORLD = new WordGroup[(int)char.MaxValue];
|
| | |
|
| | | private static List<string> memoryList = new List<string>();
|
| | |
|
| | | private static bool inited = false;
|
| | |
|
| | | static int cursor = 0;
|
| | |
|
| | | static int wordlenght = 0;
|
| | |
|
| | | static int nextCursor = 0;
|
| | |
|
| | | public void OnConfigParseCompleted()
|
| | | {
|
| | | string key = ToDBC(word);
|
| | | memoryList.Add(key);
|
| | | }
|
| | |
|
| | | private static string ToDBC(string input)
|
| | | {
|
| | | char[] c = input.ToCharArray();
|
| | | for (int i = 0; i < c.Length; i++)
|
| | | {
|
| | | if (c[i] == 12288)
|
| | | {
|
| | | c[i] = (char)32;
|
| | | continue;
|
| | | }
|
| | | if (c[i] > 65280 && c[i] < 65375)
|
| | | c[i] = (char)(c[i] - 65248);
|
| | | }
|
| | | return new string(c).ToLower();
|
| | | }
|
| | |
|
| | | public static bool IsDirtName(string source)
|
| | | {
|
| | | if (!inited)
|
| | | {
|
| | | Init();
|
| | | }
|
| | | if (source != string.Empty)
|
| | | {
|
| | | cursor = 0;
|
| | | nextCursor = 0;
|
| | | for (int i = 0; i < source.Length; i++)
|
| | | {
|
| | | //查询以该字为首字符的词组
|
| | | WordGroup group = DIRTYWORLD[(int)ToDBC(source)[i]];
|
| | | if (group != null)
|
| | | {
|
| | | for (int z = 0; z < group.Count(); z++)
|
| | | {
|
| | | string word = group.GetWord(z);
|
| | | if (word.Length == 0 || Check(word, source))
|
| | | {
|
| | | return true;
|
| | | }
|
| | | }
|
| | | }
|
| | | cursor++;
|
| | | }
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | private static bool Check(string blackWord, string source)
|
| | | {
|
| | | wordlenght = 0;
|
| | | int wordCnt = 0;
|
| | | //检测源下一位游标
|
| | | nextCursor = cursor + 1;
|
| | | bool found = false;
|
| | | //遍历词的每一位做匹配
|
| | | for (int i = 0; i < blackWord.Length; i++)
|
| | | {
|
| | | //特殊字符偏移游标
|
| | | int offset = 0;
|
| | | if (nextCursor >= source.Length)
|
| | | {
|
| | | break;
|
| | | }
|
| | | else
|
| | | {
|
| | | //检测下位字符如果不是汉字 数字 字符 偏移量加1,,过滤特殊字符
|
| | | for (int y = nextCursor; y < source.Length; y++)
|
| | | {
|
| | | //if (!IsCHS(source[y]) && !IsNum(source[y]) && !IsAlphabet(source[y])) {
|
| | | if (IsSpecial(source[y]))
|
| | | {
|
| | | offset++;
|
| | | //避让特殊字符,下位游标如果>=字符串长度 跳出
|
| | | if (nextCursor + offset >= source.Length) break;
|
| | | wordlenght++;
|
| | |
|
| | | }
|
| | | else break;
|
| | | }
|
| | | if (nextCursor + offset >= source.Length)
|
| | | {
|
| | | break;
|
| | | }
|
| | | if ((int)blackWord[i] == (int)source[nextCursor + offset])
|
| | | {
|
| | | wordCnt++;
|
| | | found = true;
|
| | | }
|
| | | else
|
| | | {
|
| | | found = false;
|
| | | break;
|
| | | }
|
| | | }
|
| | | nextCursor = nextCursor + 1 + offset;
|
| | | wordlenght++;
|
| | | }
|
| | | if (blackWord.Length != wordCnt) return false;
|
| | | return found;
|
| | | }
|
| | |
|
| | | private static bool IsSpecial(char character)
|
| | | {
|
| | | if (character == ' ')
|
| | | {
|
| | | return true;
|
| | | }
|
| | | return false;
|
| | | }
|
| | |
|
| | | static public void Init()
|
| | | {
|
| | | if (inited)
|
| | | {
|
| | | return;
|
| | | }
|
| | |
|
| | | inited = true;
|
| | |
|
| | | ThreadPool.QueueUserWorkItem((object aaa) =>
|
| | | {
|
| | | memoryList.Sort((string x, string y) =>
|
| | | {
|
| | | return x.CompareTo(y);
|
| | | });
|
| | | for (int i = memoryList.Count - 1; i > 0; i--)
|
| | | {
|
| | | if (memoryList[i].ToString() == memoryList[i - 1].ToString())
|
| | | {
|
| | | memoryList.RemoveAt(i);
|
| | | }
|
| | | }
|
| | | foreach (string word in memoryList)
|
| | | {
|
| | | WordGroup group = DIRTYWORLD[(int)word[0]];
|
| | | if (group == null)
|
| | | {
|
| | | group = new WordGroup();
|
| | | DIRTYWORLD[(int)word[0]] = group;
|
| | | }
|
| | | group.Add(word.Substring(1));
|
| | | }
|
| | | });
|
| | | }
|
| | |
|
| | | public static bool IsCHS(char character)
|
| | | {
|
| | | // 中文表意字符的范围 4E00-9FA5
|
| | | int charVal = (int)character;
|
| | | return (charVal >= 0x4e00 && charVal <= 0x9fa5);
|
| | | }
|
| | |
|
| | | private static bool IsNum(char character)
|
| | | {
|
| | | int charVal = (int)character;
|
| | | return (charVal >= 48 && charVal <= 57);
|
| | | }
|
| | |
|
| | | private static bool IsAlphabet(char character)
|
| | | {
|
| | | int charVal = (int)character;
|
| | | return ((charVal >= 97 && charVal <= 122) || (charVal >= 65 && charVal <= 90));
|
| | | }
|
| | |
|
| | | private const string FACE_REPLACE = @"#~[0-9a-zA-Z]{1,3}";
|
| | | private static Regex FaceRegex = new Regex(FACE_REPLACE, RegexOptions.Singleline);
|
| | | public static string FitterSpecial(string source)
|
| | | {
|
| | | return FaceRegex.Replace(source, " ");
|
| | | }
|
| | | }
|
| | | }
|