/// <summary> /// 情報レコード取得(String,Safe) /// </summary> /// <param name="pMoji">キー文字列</param> /// <returns>InfomationRecord</returns> /// <remarks> /// pMojiに該当する情報を返す。this[pMoji]と違いnullを返さない。 /// 該当する情報が見つからない場合はキーにpMojiをセットしたInfomationRecordを返す。 /// </remarks> public InfomationRecord GetAtSafe(string pMoji) { InfomationRecord result = this[pMoji]; if (result != null) { return(result); } return(new InfomationRecord(pMoji)); }
/// <summary> /// 情報レコード取得(Char,Safe) /// </summary> /// <param name="pChar">キー文字</param> /// <returns>InfomationRecord</returns> /// <remarks> /// pCharに該当する情報を返す。this[pChar]と違いnullを返さない。 /// 該当する情報が見つからない場合はキーにpCharをセットしたInfomationRecordを返す。 /// </remarks> public InfomationRecord GetAtSafe(char pChar) { string moji = pChar.ToString(); InfomationRecord result = this[moji]; if (result != null) { return(result); } return(new InfomationRecord(moji)); }
/// <summary> /// 定義データ読み込み(TextReader渡し) /// </summary> /// <param name="pReader">TextReader</param> /// <remarks> /// 定義データを読み込みインスタンスを初期化する。 /// </remarks> public void Load(TextReader pReader) { this.items.Clear(); this.majorVer = 0; this.minorVer = 0; int dataCount = 0; while (true) { string line = pReader.ReadLine(); if (line == null) { break; } if ((line.Length == 0) || (line[0] == '#')) { continue; } dataCount++; if (dataCount == 1) { string[] fields = line.Split('.'); this.majorVer = int.Parse(fields[0]); if (majorVer != 1) { throw new InvalidDataException("認識できないデータ(バージョン)"); } this.minorVer = int.Parse(fields[1]); continue; } InfomationRecord rec = this.MakeInformationRecord(line); this.items[rec.KeyUnicodeString] = rec; } }
static public string DebugStringsDump(CharacterInformation pCharInfo, string pString) { StringBuilder sb = new StringBuilder(); sb.AppendLine(pString); UTF32Encoding utf32withoutbom = new UTF32Encoding(false, false); List <string> characterList = new List <string>(GetOneCharacterEnumerator(pString)); for (int i = 0; i < characterList.Count; i++) { string moji = characterList[i]; sb.AppendFormat("[{0}]:{1}", i + 1, moji); byte[] bytetbl = utf32withoutbom.GetBytes(moji); for (int j = 0; j < bytetbl.Length; j += 4) { if (j == 0) { sb.Append("(U+"); } else { sb.Append("+"); } sb.AppendFormat("{0:X}", BitConverter.ToInt32(bytetbl, j)); } sb.Append(")"); InfomationRecord charInfo = pCharInfo[characterList[i]]; if (charInfo != null) { if (charInfo.JISX0213Level != JISX0213Levels.None) { sb.AppendFormat(" {0}", charInfo.JISX0213Level); } if (charInfo.NameType != NameTypes.None) { sb.AppendFormat(" {0}", charInfo.NameType); } if (charInfo.ETaxAvailable) { sb.AppendFormat(" e-Tax"); } if (charInfo.GakunenbetuKanji != GakunenbetuKanjis.None) { sb.AppendFormat(" {0}", charInfo.GakunenbetuKanji); } if (charInfo.NISAAvailable) { sb.AppendFormat(" NISA"); } if (charInfo.ELTAXAvailable) { sb.AppendFormat(" eLTAX"); } } sb.AppendLine(); } return(sb.ToString()); }
/// <summary> /// 情報レコード作成 /// </summary> /// <param name="pRecord">レコード文字列</param> /// <returns>InfomationRecord</returns> private InfomationRecord MakeInformationRecord(string pRecord) { string[] fields = pRecord.Split(','); InfomationRecord result = new InfomationRecord(); if (fields.Length < 1) { throw new InvalidDataException("キーとなるコードポイントが定義されていない"); } do { // key result.SetUnicodeKey(MakeStringFromCodePoints(fields[0])); // JISX0213Levels if (fields.Length < 2) { break; } string strwk = fields[1].Trim(); if (strwk.Length >= 1) { result.SetJISX0213Level((JISX0213Levels)int.Parse(strwk)); } // NameTypes if (fields.Length < 3) { break; } strwk = fields[2].Trim(); if (strwk.Length >= 1) { result.SetNameType((NameTypes)int.Parse(strwk)); } // ETaxAvailable if (fields.Length < 4) { break; } strwk = fields[3].Trim(); if (strwk.Length >= 1) { result.SetETaxAvailable(int.Parse(strwk) != 0); } // GakunenbetuKanji if (fields.Length < 5) { break; } strwk = fields[4].Trim(); if (strwk.Length >= 1) { result.SetGakunenbetuKanji((GakunenbetuKanjis)int.Parse(strwk)); } // NISAAvailable if (fields.Length < 6) { break; } strwk = fields[5].Trim(); if (strwk.Length >= 1) { result.SetNISAAvailable(int.Parse(strwk) != 0); } // EELTAXAvailable if (fields.Length < 7) { break; } strwk = fields[6].Trim(); if (strwk.Length >= 1) { result.SetELTAXAvailable(int.Parse(strwk) != 0); } } while (false); return(result); }