/*
	 *  ARIB外字のマッピング情報
	 */
	enum AribCharMap {
		HDTV		("HV"	,"\uE0F8"),
		SDTV		("SD"	,"\uE0F9"),
		PROGRESSIVE	("P"	,"\uE0FA"),
		WIDE		("W"	,"\uE0FB"),
		MULTIVIEW	("MV"	,"\uE0FC"),
		SIGN		("手"	,"\uE0FD"),
		SUBTITLE	("字"	,"\uE0FE"),
		TWOWAY		("双"	,"\uE0FF"),
		DATA		("デ"	,"\uE180"),
		STEREO		("S"	,"\uE181"),
		BILINGUAL	("二"	,"\uE182"),
		MULTIPLEX	("多"	,"\uE183"),
		COMMENTARY	("解"	,"\uE184"),
		SURROUND	("SS"	,"\uE185"),
		BMODE		("B"	,"\uE186"),
		NEWS		("N"	,"\uE187"),
		WEATHER		("天"	,"\uE18A"),
		TRAFFIC		("交"	,"\uE18B"),
		MOVIE		("映"	,"\uE18C"),
		FREE		("無"	,"\uE18D"),
		PAY			("料"	,"\uE18E"),
		FORMER		("前"	,"\uE190"),
		LATTER		("後"	,"\uE191"),
		REAIR		("再"	,"\uE192"),
		NEW			("新"	,"\uE193"),
		FIRST		("初"	,"\uE194"),
		END			("終"	,"\uE195"),
		LIVE		("生"	,"\uE196"),
		SHOPPING	("販"	,"\uE197"),
		VOICE		("声"	,"\uE198"),
		DUBBED		("吹"	,"\uE199"),
		PPV			("PPV"	,"\uE19A"),
//		SECRET		("秘"	,"\uE19B"),
//		OTHER		("ほか"	,"\uE19C"),
		;

		String noaribStr;
		String aribStr;

		private AribCharMap(String n, String a){
			noaribStr = n;
			aribStr = a;
		}

		public String getNoAribPattern(){
			return "\\[" + noaribStr + "\\]";
		}

		public String getNoAribStr(){
			return "[" + noaribStr + "]";
		}

		public String getAribStr(){
			return aribStr;
		}

		/*
		 *  ARIB外字を展開した文字列からARIB外字を含む文字列に変換する
		 */
		static String ConvStringToArib(String s){
			if (s == null)
				return s;

			for (AribCharMap acm : AribCharMap.values()){
				Matcher ma = Pattern.compile(acm.getNoAribPattern()).matcher(s);
				if (ma.find()){
					s = ma.replaceAll(acm.getAribStr());
				}
			}

			return s;
		}

		/*
		 *  ARIB外字を含む文字列から展開した文字列に変換する
		 */
		static String ConvStringFromArib(String s){
			if (s == null)
				return s;

			for (AribCharMap acm : AribCharMap.values()){
				Matcher ma = Pattern.compile(acm.getAribStr()).matcher(s);
				if (ma.find()){
					s = ma.replaceAll(acm.getNoAribStr());
				}
			}

			return s;
		}
	};