1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: ngc_IProfanityFilter.h 4 5 Copyright (C)2010 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 26069 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_NGC_CTR_PROFANITY_FILTER_BASE_H_ 17 #define NN_NGC_CTR_PROFANITY_FILTER_BASE_H_ 18 19 #include <nn/cfg/CTR/cfg_RegionCode.h> 20 21 namespace nn 22 { 23 namespace ngc 24 { 25 namespace CTR 26 { 27 28 /*! 29 @brief NGワードフィルタの基底クラスです。 30 31 メモリ消費量と速度のトレードオフで、将来的に異なるバージョンの 32 NGワードフィルタがリリースされる可能性があり、このクラスはその基底となります。 33 */ 34 class ProfanityFilterBase 35 { 36 public: 37 /*! 38 @brief デストラクタです。 39 */ ~ProfanityFilterBase()40 virtual ~ProfanityFilterBase(){} 41 42 /*! 43 @brief 現在本体にインストールされているNGワードパターンファイルのバージョン番号を取得します。 44 @return インストールされているバージョン番号が返ります。バージョンは1から始まり、数が大きいほど新しいことを示します。取得に失敗した場合0が返ります。 45 */ 46 virtual u32 GetContentVersion() = 0; 47 48 /*! 49 @brief 指定された複数の文字列がスクリーン上に表示される文字列として問題がある語句かどうかを、全てのパターンリストについて確認します。 50 51 この処理は時間がかかる場合があります(ブロックします)。 52 ゲームフレーム処理に干渉しないように別のスレッドで行ってください。 53 この関数は複数の文字列を同時に確認することができます。 54 一度にチェックすることで、1つずつ個別にチェックするよりも短い時間で調査が終了します。 55 56 各文字列ごとのチェックした結果は、 pCheckResults 配列に格納されます。 57 これは、ビットフラグ値になっており、どのパターンセットで問題が発生したかを知ることが出来ます。 58 1をProfanityFilterPatternList列挙体の定数値分だけ左シフトした値とANDを取って調べてください。 59 なお、全てのパターンリストにおいて問題がない文字列の場合は値が0になります。 60 61 どのパターンリストに対してチェックを行わなければならないという決まりについては、 62 最新のUGCガイドラインを参照してください。 63 64 メールアドレスの表記に使われる可能性のあるアットマーク記号が含まれている場合、 65 常に問題のある語句として検出されます。ただし、数字が多く含まれている文字列は問題のある語句としては 66 検出されません。このチェックにはnn::ngc::CTR::CountNumbers関数を用いてください。 67 68 @param [out] pCheckResults 問題があったかどうかの判定を格納するためのバッファを指定します。nWordCountで指定した個数の配列が必要です。 69 @param [in] ppWords 調査対象となるNULL終端文字列の配列を指定します。文字コードはUTF16リトルエンディアンにしてください。 70 @param [in] nWordCount 調査対象の文字列の数を指定します。 71 */ 72 virtual nn::Result CheckProfanityWords( bit32* pCheckResults, const wchar_t** ppWords, size_t nWordCount ) = 0; 73 74 /*! 75 @brief 指定された複数の文字列がスクリーン上に表示される文字列として問題ある語句かどうかを、パターンリスト指定されたパターンリストについて確認します。 76 77 この処理は時間がかかる場合があります(ブロックします)。 78 ゲームフレーム処理に干渉しないように別のスレッドで行ってください。 79 この関数は複数の文字列を同時に確認することができます。 80 一度にチェックすることで、1つずつ個別にチェックするよりも短い時間で調査が終了します。 81 82 チェックした結果は pCheckResults 配列に格納されます。 83 問題がある文字列の場合値が非0値になり、問題がない文字列の場合は0になります。 84 85 どのパターンリストに対してチェックを行わなければならないという決まりについては、 86 最新のUGCガイドラインを参照してください。 87 88 メールアドレスの表記に使われる可能性のあるアットマーク記号が含まれている場合、 89 常に問題のある語句として検出されます。ただし、数字が多く含まれている文字列は問題のある語句としては 90 検出されません。このチェックにはnn::ngc::CTR::CountNumbers関数を用いてください。 91 92 @param [out] pCheckResults 問題があったかどうかの判定を格納するためのバッファを指定します。nWordCountで指定した個数の配列が必要です。 93 @param [in] nPatternCode どのパターンリストに対してチェックを行うのかを指定します。 94 @param [in] ppWords 調査対象となるNULL終端文字列の配列を指定します。文字コードはUTF16リトルエンディアンにしてください。 95 @param [in] nWordCount 調査対象の文字列の数を指定します。 96 */ 97 virtual nn::Result CheckProfanityWords( bit32* pCheckResults, ProfanityFilterPatternList nPatternCode, const wchar_t** ppWords, size_t nWordCount ) = 0; 98 99 /*! 100 @brief 指定された複数の文字列がスクリーン上に表示される文字列として問題ある語句かどうかを、UGCガイドラインで規定されているパターンリストで判定します。 101 102 この処理は時間がかかる場合があります(ブロックします)。 103 ゲームフレーム処理に干渉しないように別のスレッドで行ってください。 104 この関数は複数の文字列を同時に確認することができます。 105 一度にチェックすることで、1つずつ個別にチェックするよりも短い時間で調査が終了します。 106 107 この関数を実行するためにはcfgライブラリが初期化されている必要があります。 108 この関数を実行すると、内部的に現在の本体リージョン及び言語設定を参照し、 109 その組み合わせから必要とされるパターンリストを自動的に判別してNGワードチェックを行います。 110 111 各文字列ごとのチェックした結果は、 pCheckResults 配列に格納されます。 112 これは、ビットフラグ値になっており、どのパターンセットで問題が発生したかを知ることが出来ます。 113 1をProfanityFilterPatternList列挙体の定数値分だけ左シフトした値とANDを取って調べてください。 114 なお、全てのパターンリストにおいて問題がない文字列の場合は値が0になります。 115 116 メールアドレスの表記に使われる可能性のあるアットマーク記号が含まれている場合、 117 常に問題のある語句として検出されます。ただし、数字が多く含まれている文字列は問題のある語句としては 118 検出されません。このチェックにはnn::ngc::CTR::CountNumbers関数を用いてください。 119 120 @param [out] pCheckResults 問題があったかどうかの判定を格納するためのバッファを指定します。nWordCountで指定した個数の配列が必要です。 121 @param [in] bCommunicateWithOtherRegions アプリケーションが他のリージョンとのデータ交換を行うかどうかを指定してください。これによってチェック対象が変わります。 122 @param [in] ppWords 調査対象となるNULL終端文字列の配列を指定します。文字コードはUTF16リトルエンディアンにしてください。 123 @param [in] nWordCount 調査対象の文字列の数を指定します。 124 */ 125 virtual nn::Result CheckProfanityWords( bit32* pCheckResults, bool bCommunicateWithOtherRegions, const wchar_t** ppWords, size_t nWordCount ) = 0; 126 127 protected: 128 void GetPatternListsFromRegion( ProfanityFilterPatternList* pPatternLists, int *pListNum, bool bCommunicateWithOtherRegions ); 129 void ConvertTargetWord( wchar_t* pConvertedWord, const wchar_t* pWord ); 130 bool IsIncludesAtSign( const wchar_t* pWord ); 131 132 private: 133 /*! 134 @brief カタカナの大きい文字(ア)と小さい文字(ァ)のマッピングです。 135 */ 136 typedef struct SmallMap 137 { 138 //! 小さい文字(ァ) 139 wchar_t small; 140 141 //! 大きい文字(ア) 142 wchar_t big; 143 } SmallMap; 144 145 /*! 146 @brief カタカナの半角文字と全角文字のマッピングです。 147 */ 148 typedef struct HalfwidthMap 149 { 150 //! 半角文字 151 wchar_t half; 152 153 //! 全角文字 154 wchar_t full; 155 } HalfwidthMap; 156 157 void ConvertKatakanaToBig( wchar_t *pKana ); 158 bool ConvertHalfwidthKatakanaToFullwidth( wchar_t *pBuffer, wchar_t half, const HalfwidthMap* pMapping, int mapNum ); 159 160 private: 161 static const SmallMap s_SmallMapping[]; 162 static const HalfwidthMap s_HalfMapping[]; 163 static const HalfwidthMap s_VoicedMapping[]; 164 static const HalfwidthMap s_SemiVoicedMapping[]; 165 }; 166 167 } // namespace CTR 168 } // namespaec ngc 169 } // namespace nn 170 171 #endif // NN_NGC_CTR_PROFANITY_FILTER_BASE_H_ 172