• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

タイニー番組ナビゲータ本体


Commit MetaInfo

Revisión9f3c8fc166e2ac73c93e1bffd9e966732044d651 (tree)
Tiempo2021-10-01 15:15:04
AutorMasahiko Kimura <mkimura@u01....>
CommiterMasahiko Kimura

Log Message

Ver.1.13.1 (2021/10/1)
1. [テレビ王国]UNICODE文字化したARIBの番組表記号に対応する
2. [DiMORA]番組表の枠がなくてもエラーにならないようにする

Cambiar Resumen

Diferencia incremental

--- a/TinyBannavi/src/tainavi/AbsTitleDialog.java
+++ b/TinyBannavi/src/tainavi/AbsTitleDialog.java
@@ -292,7 +292,7 @@ abstract class AbsTitleDialog extends JDialog {
292292
293293 String[] patterns = {
294294 "^(.*?)(#|#|♯)",
295- "^(.*?)第.*?(話|回|羽)",
295+ "^(.*?)第.*?(話|回|羽|夜)",
296296 "^(.*?)(\\(|()[0-90-9]+(\\)|))"};
297297
298298 for (String pat : patterns){
@@ -329,7 +329,7 @@ abstract class AbsTitleDialog extends JDialog {
329329 String[] patterns = {
330330 "(#|#|♯)( | ){0,1}([0-90-9]{1,3})",
331331 "(\\(|()( | ){0,1}([0-90-9]{1,3})(\\)|)){0,1}",
332- "(第)( | ){0,1}([0-90-9]{1,3})(話|回|羽)"};
332+ "(第)( | ){0,1}([0-90-9]{1,3})(話|回|羽|夜)"};
333333 String ntitle = Normalizer.normalize(title, Normalizer.Form.NFKC);
334334
335335 for (String pat : patterns){
@@ -385,7 +385,7 @@ abstract class AbsTitleDialog extends JDialog {
385385 String[] patterns = {
386386 "(#|#)([0-90-9]{1,3})",
387387 "(\\(|()([0-90-9]{1,3})(\\)|))",
388- "(第)([0-90-9]{1,3})(話|回|羽)"
388+ "(第)([0-90-9]{1,3})(話|回|羽|夜)"
389389 };
390390
391391 for (String pat : patterns){
@@ -454,9 +454,9 @@ abstract class AbsTitleDialog extends JDialog {
454454 */
455455 protected String searchSubtitleCombo(String title){
456456 String[] patternsCombo = {
457- "(第|#|#)([0-90-9]{1,3})(話|回|羽)?( | )?「(.*?)」",
458- "(第|#|#)([0-90-9]{1,3})(話|回|羽)?( | )?『(.*?)』",
459- "(第|#|#)([0-90-9]{1,3})(話|回|羽)?( | )?【(.*?)】"};
457+ "(第|#|#)([0-90-9]{1,3})(話|回|羽|夜)?( | )?「(.*?)」",
458+ "(第|#|#)([0-90-9]{1,3})(話|回|羽|夜)?( | )?『(.*?)』",
459+ "(第|#|#)([0-90-9]{1,3})(話|回|羽|夜)?( | )?【(.*?)】"};
460460
461461 for (String pat : patternsCombo){
462462 Matcher m = Pattern.compile(pat).matcher(title);
--- a/TinyBannavi/src/tainavi/AbsTitleListView.java
+++ b/TinyBannavi/src/tainavi/AbsTitleListView.java
@@ -1512,8 +1512,13 @@ public abstract class AbsTitleListView extends JPanel {
15121512 //
15131513 Point p = e.getPoint();
15141514 final int vrow = jTable_title.rowAtPoint(p);
1515+
1516+ if (vrow >= jTable_title.getRowCount())
1517+ return;
15151518 final int row = jTable_title.convertRowIndexToModel(vrow);
15161519
1520+ if (row >= rowView.size())
1521+ return;
15171522 TitleItem ra = rowView.get(row);
15181523 final String title = ra.title;
15191524 final String chnam = ra.chname;
--- a/TinyBannavi/src/tainavi/TVProgram.java
+++ b/TinyBannavi/src/tainavi/TVProgram.java
@@ -42,7 +42,8 @@ public interface TVProgram {
4242 PRECEDING,
4343 RATING,
4444 BS4K,
45- BS8K
45+ BS8K,
46+ NOOPTION
4647 };
4748
4849 public static enum ProgGenre {
--- a/TinyBannavi/src/tainavi/TVProgramUtils.java
+++ b/TinyBannavi/src/tainavi/TVProgramUtils.java
@@ -1030,10 +1030,161 @@ public class TVProgramUtils implements Cloneable {
10301030 }
10311031 }
10321032
1033+
1034+ /**
1035+ * コードポイントを文字に変換する
1036+ *
1037+ * @param cp コードポイント
1038+ * @return 変換後の文字
1039+ */
1040+ protected static String cp2s(int cp){
1041+ StringBuffer sb = new StringBuffer("");
1042+ sb.appendCodePoint(cp);
1043+
1044+ return sb.toString();
1045+ }
1046+
1047+ /*
1048+ * UNIODEの番組記号のマッピング情報
1049+ *
1050+ * 無視するオプション:S|N|B|映|双|解|手|天|英|日|録|HV
1051+ */
1052+ enum UnicodeCharMap{
1053+ BS4K ("4K" ,0x0001F19E, ProgOption.BS4K),
1054+ BS8K ("8K" ,0x0001F19F, ProgOption.BS8K),
1055+
1056+ BMODE ("B" ,0x0001F131, ProgOption.NOOPTION),
1057+ NEWS ("N" ,0x0001F13D, ProgOption.NOOPTION),
1058+// PROGRESSIVE ("P" ,0x0001F13F),
1059+ STEREO ("S" ,0x0001F142, ProgOption.NOOPTION),
1060+// WIDE ("W" ,0x0001F146),
1061+ HDTV ("HV" ,0x0001F14A, ProgOption.NOOPTION),
1062+// MULTIVIEW ("MV" ,0x0001F14B),
1063+// SDTV ("SD" ,0x0001F14C),
1064+ SURROUND ("SS" ,0x0001F14D, ProgOption.SURROUND),
1065+// PPV ("PPV" ,0x0001F14E),
1066+
1067+ SIGN ("手" ,0x0001F210, ProgOption.NOOPTION),
1068+ SUBTITLE ("字" ,0x0001F211, ProgOption.SUBTITLE),
1069+ TWOWAY ("双" ,0x0001F212, ProgOption.NOOPTION),
1070+ DATA ("デ" ,0x0001F213, ProgOption.DATA),
1071+ BILINGUAL ("二" ,0x0001F214, ProgOption.BILINGUAL),
1072+ MULTIPLEX ("多" ,0x0001F215, ProgOption.MULTIVOICE),
1073+ COMMENTARY ("解" ,0x0001F216, ProgOption.NOOPTION),
1074+ WEATHER ("天" ,0x0001F217, ProgOption.NOOPTION),
1075+// TRAFFIC ("交" ,0x0001F218),
1076+ MOVIE ("映" ,0x0001F219, ProgOption.NOOPTION),
1077+ FREE ("無" ,0x0001F21A, ProgOption.NOOPTION),
1078+ PAY ("料" ,0x0001F21B, ProgOption.PV),
1079+// FORMER ("前" ,0x0001F21C),
1080+// LATTER ("後" ,0x0001F21D),
1081+ REAIR ("再" ,0x0001F21E, ProgOption.REPEAT),
1082+ NEW ("新" ,0x0001F21F, ProgOption.NOOPTION),
1083+ FIRST ("初" ,0x0001F220, ProgOption.FIRST),
1084+ END ("終" ,0x0001F221, ProgOption.NOOPTION),
1085+ LIVE ("生" ,0x0001F222, ProgOption.LIVE),
1086+// SHOPPING ("販" ,0x0001F223),
1087+// VOICE ("声" ,0x0001F224),
1088+ DUBBED ("吹" ,0x0001F225, ProgOption.STANDIN),
1089+
1090+ SURROUND51 ("5.1" ,0x0001F1A0, ProgOption.NOOPTION),
1091+ SURROUND222 ("22.2" ,0x0001F1A2, ProgOption.NOOPTION),
1092+ HDR ("HDR" ,0x0001F1A7, ProgOption.NOOPTION),
1093+ ;
1094+
1095+ String label; // ラベル
1096+ int codePoint; // コードポイント
1097+ ProgOption progOption; // 番組オプション
1098+
1099+ /**
1100+ * コンストラクタ
1101+ *
1102+ * @param l ラベル
1103+ * @param cp コードポイント
1104+ * @param po 番組オプション
1105+ */
1106+ private UnicodeCharMap(String l, int cp, ProgOption po){
1107+ label = l;
1108+ codePoint = cp;
1109+ progOption = po;
1110+ }
1111+
1112+ /**
1113+ * ラベルを取得する
1114+ *
1115+ * @return ラベル
1116+ */
1117+ public String getLabel(){ return label; }
1118+
1119+ /**
1120+ * 指定した文字列で検索する
1121+ *
1122+ * @param str 検索対象の文字列
1123+ * @return Matcherオブジェクト
1124+ */
1125+ public Matcher getMatcher(String str){
1126+ return Pattern.compile(cp2s(codePoint)).matcher(str);
1127+ }
1128+
1129+ /**
1130+ * 番組情報から記号を抽出する
1131+ *
1132+ * @param pdl 番組情報
1133+ */
1134+ public void extractSymbol(ProgDetailList pdl){
1135+ Matcher md = getMatcher(pdl.title);
1136+ if ( md.find() ) {
1137+ if (progOption != ProgOption.NOOPTION)
1138+ pdl.addOption(progOption);
1139+ pdl.title = md.replaceAll("");
1140+ }
1141+ }
1142+
1143+ /**
1144+ * 番組情報からすべての記号を抽出する
1145+ *
1146+ * @param pdl 番組情報
1147+ */
1148+ public static void ExtractAllSymbols(ProgDetailList pdl){
1149+ for (UnicodeCharMap chm : UnicodeCharMap.values()){
1150+ chm.extractSymbol(pdl);
1151+ }
1152+ }
1153+ }
1154+
1155+ /**
1156+ * 番組情報からUNICODEの記号を抽出する
1157+ *
1158+ * @param pdl 番組情報
1159+ */
1160+ protected void ExtractAllUnicodeSymbols(ProgDetailList pdl){
1161+ // [新]
1162+ Matcher md = UnicodeCharMap.NEW.getMatcher(pdl.title);
1163+ if ( md.find() ) {
1164+ pdl.flag = ProgFlags.NEW;
1165+ pdl.title = md.replaceAll("");
1166+ }
1167+ // [終]
1168+ md = UnicodeCharMap.END.getMatcher(pdl.title);
1169+ if ( md.find() ) {
1170+ pdl.flag = ProgFlags.LAST;
1171+ pdl.title = md.replaceAll("");
1172+ }
1173+ // [無]
1174+ md = UnicodeCharMap.FREE.getMatcher(pdl.title);
1175+ if ( md.find() ) {
1176+ pdl.noscrumble = ProgScrumble.NOSCRUMBLE;
1177+ pdl.title = md.replaceAll("");
1178+ }
1179+
1180+ UnicodeCharMap.ExtractAllSymbols(pdl);
1181+ }
1182+
10331183 /*
10341184 * タイトルからフラグを抽出する
10351185 */
10361186 protected void doSplitFlags(ProgDetailList pdl, HashMap<String, String> nf) {
1187+ ExtractAllUnicodeSymbols(pdl);
10371188
10381189 Matcher md = Pattern.compile("(#1|第1話)\\b").matcher(pdl.title);
10391190 if ( md.find() ) {
--- a/TinyBannavi/src/tainavi/VersionInfo.java
+++ b/TinyBannavi/src/tainavi/VersionInfo.java
@@ -5,7 +5,7 @@ import java.util.regex.Pattern;
55
66
77 public class VersionInfo {
8- private static final String Version = "タイニー番組ナビゲータ for DBR-T2007 3.22.18β+1.13.0";
8+ private static final String Version = "タイニー番組ナビゲータ for DBR-T2007 3.22.18β+1.13.1";
99
1010 private static final String OSname = System.getProperty("os.name");
1111 private static final String OSvers = System.getProperty("os.version");
--- a/TinyBannavi/src/tainavi/plugintv/PlugIn_TVPDimora.java
+++ b/TinyBannavi/src/tainavi/plugintv/PlugIn_TVPDimora.java
@@ -341,7 +341,7 @@ public class PlugIn_TVPDimora extends TVProgramUtils implements TVProgram,Clonea
341341 // 番組リストの追加
342342 if (!getPrograms(areacode, wdaycol, response)){
343343 reportProgress(ERRID+"番組表に有効なエントリがありません"+targetCache);
344- return false;
344+// return false;
345345 }
346346
347347 if ( prefix != null ){