@danything/arib 1.2.0 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/dist/ait.d.ts +10 -10
- package/dist/ait.js +12 -12
- package/dist/aribtext-gaiji.d.ts +5 -5
- package/dist/aribtext-gaiji.js +7 -7
- package/dist/aribtext.d.ts +11 -11
- package/dist/aribtext.js +34 -34
- package/dist/b24-tables.d.ts +9 -9
- package/dist/b24-tables.js +59 -59
- package/dist/b24caption.d.ts +12 -12
- package/dist/b24caption.js +23 -23
- package/dist/bml-protocol.d.ts +4 -4
- package/dist/bml-protocol.js +2 -2
- package/dist/bml.d.ts +12 -12
- package/dist/bml.js +24 -24
- package/dist/bytes.d.ts +4 -4
- package/dist/bytes.js +4 -4
- package/dist/caption-text.d.ts +19 -19
- package/dist/caption-text.js +1 -1
- package/dist/drcs-smooth.d.ts +6 -6
- package/dist/drcs-smooth.js +5 -5
- package/dist/dsmcc.d.ts +11 -11
- package/dist/dsmcc.js +12 -12
- package/dist/eit.d.ts +38 -38
- package/dist/eit.js +68 -54
- package/dist/language.d.ts +2 -2
- package/dist/language.js +2 -2
- package/dist/multipart.d.ts +4 -4
- package/dist/multipart.js +6 -6
- package/dist/pes.d.ts +13 -13
- package/dist/pes.js +12 -12
- package/dist/psi.d.ts +22 -22
- package/dist/psi.js +25 -25
- package/dist/service-filter.d.ts +14 -14
- package/dist/service-filter.js +18 -18
- package/dist/synth-av.d.ts +7 -7
- package/dist/synth-av.js +15 -15
- package/dist/synth-caption.d.ts +6 -6
- package/dist/synth-caption.js +9 -9
- package/dist/synth.d.ts +16 -16
- package/dist/synth.js +28 -28
- package/package.json +1 -1
package/dist/b24-tables.js
CHANGED
|
@@ -10,17 +10,17 @@
|
|
|
10
10
|
* **表の名前と `export const` の形は変えない。** danything/denpa-font の道具がこのファイルを
|
|
11
11
|
* 名前で読んでフォントに入れる字を決める (`ADDITIONAL_ROWS`・`PLANE1_HIGH_ROWS` も。`aribtext-gaiji.ts`・`fold.ts` も同じ)。
|
|
12
12
|
*
|
|
13
|
-
* - 漢字は EUC-JP で読んだものと違うところだけ持つ (`KANJI_DIFF`。番組表は EUC-JP
|
|
14
|
-
* 1区33点の 〜 / ~ などは字幕と番組表で違えてある。aribtext.ts の説明)。1〜84区は JIS X 0213:2004 の1面と
|
|
15
|
-
* 同じ字 (全角の形を選んだ点と、1区17点の  ̄ など libaribcaption のとおりの数点を除く)
|
|
16
|
-
* - JIS X 0213 の表 (2つのコードポイントの字・1面の 85〜94区・2面) は [scripts/jisx0213.ts](../scripts/jisx0213.ts) が
|
|
13
|
+
* - 漢字は EUC-JP で読んだものと違うところだけ持つ (`KANJI_DIFF`。番組表は EUC-JP のまま読むので、
|
|
14
|
+
* 1 区 33 点の 〜 / ~ などは字幕と番組表で違えてある。aribtext.ts の説明)。1〜84 区は JIS X 0213:2004 の 1 面と
|
|
15
|
+
* 同じ字 (全角の形を選んだ点と、1 区 17 点の  ̄ など libaribcaption のとおりの数点を除く)
|
|
16
|
+
* - JIS X 0213 の表 (2 つのコードポイントの字・1 面の 85〜94 区・2 面) は [scripts/jisx0213.ts](../scripts/jisx0213.ts) が
|
|
17
17
|
* x0213.org の対応表から書く。手で直さない
|
|
18
18
|
* - U+FFFD は規格で空いているところ
|
|
19
19
|
*
|
|
20
20
|
* ## 外字 (DRCS) の置き換えを足す
|
|
21
21
|
*
|
|
22
22
|
* 放送は字幕の外字を小さな画像で送ってくる。画像の MD5 (`b24caption.ts` が中身の画素から取る) が
|
|
23
|
-
* `DRCS_REPLACE` にあれば、その字に置き換えて描く (無ければ画像のまま)
|
|
23
|
+
* `DRCS_REPLACE` にあれば、その字に置き換えて描く (無ければ画像のまま)。足すときは次の手順。
|
|
24
24
|
*
|
|
25
25
|
* 1. 字幕の JSON (`/api/recordings/<id>/captions.json` の `drcs`) の `md5` を読み取る。`data` の画像は送るために
|
|
26
26
|
* なめらかにしたもの (drcs-smooth.ts) なので、`data` から MD5 を取っても表と合わない
|
|
@@ -42,63 +42,63 @@ export const JISX0201_HALF = "。「」、・ヲァィゥェォャュョッー
|
|
|
42
42
|
export const ALNUM_FULL = "!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|} ̄";
|
|
43
43
|
/** 同じものの半角 (中くらいのとき)。0x5C は ¥、0x7E は ‾ (番組表は ASCII のまま。バックスラッシュとチルダ) */
|
|
44
44
|
export const ALNUM_HALF = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`abcdefghijklmnopqrstuvwxyz{|}‾";
|
|
45
|
-
/** 漢字の表の1・2区を、中くらいのときに半角へ寄せたもの */
|
|
45
|
+
/** 漢字の表の 1・2 区を、中くらいのときに半角へ寄せたもの */
|
|
46
46
|
export const KANJI_SYMBOLS_HALF = " 、。,.・:;?!゙゚´`¨^¯_ヽヾゝゞ〃仝々〆〇ー―‐/\\~‖|…‥‘’“”()〔〕[]{}〈〉《》「」『』【】+−±×÷=≠<>≦≧∞∴♂♀°′″℃¥$¢£%#&*@§☆★○●◎◇◆□■△▲▽▼※〒→←↑↓〓'\"-~〳〴〵〻〼ヿゟ∈∋⊆⊇⊂⊃∪∩⊄⊅⊊⊋∉∅⌅⌆∧∨¬⇒⇔∀∃⊕⊖⊗∥∦⦅⦆〘〙〖〗∠⊥⌒∂∇≡≒≪≫√∽∝∵∫∬≢≃≅≈≶≷↔ʼn♯♭♪†‡¶♮♫♬♩◯";
|
|
47
|
-
/** 漢字の表 (1〜84区) のうち、EUC-JP で読んだものと違うところ。[区×94+点 (0 から), そこから続く字] の並び。85区から先は `ADDITIONAL` */
|
|
47
|
+
/** 漢字の表 (1〜84 区) のうち、EUC-JP で読んだものと違うところ。[区×94+点 (0 から), そこから続く字] の並び。85 区から先は `ADDITIONAL` */
|
|
48
48
|
export const KANJI_DIFF = [
|
|
49
|
-
[32, "〜‖"], // 1区33点から
|
|
50
|
-
[60, "−"], // 1区61点から
|
|
51
|
-
[108, "'"-~〳〴〵〻〼ヿゟ"], // 2区15点から
|
|
52
|
-
[127, "⊄⊅⊊⊋∉∅⌅⌆"], // 2区34点から
|
|
53
|
-
[142, "⊕⊖⊗∥∦⦅⦆〘〙〖〗"], // 2区49点から
|
|
54
|
-
[168, "≢≃≅≈≶≷↔"], // 2区75点から
|
|
55
|
-
[183, "♮♫♬♩"], // 2区90点から
|
|
56
|
-
[188, "▷▶◁◀↗↘↖↙⇄⇨⇦⇧⇩⤴⤵"], // 3区1点から
|
|
57
|
-
[213, "⦿◉〽﹆﹅◦•"], // 3区26点から
|
|
58
|
-
[246, "∓ℵℏ㏋ℓ℧"], // 3区59点から
|
|
59
|
-
[278, "゠–⧺⧻"], // 3区91点から
|
|
60
|
-
[365, "ゔゕゖ"], // 4区84点から
|
|
61
|
-
[494, "♤♠♢♦♡♥♧♣"], // 6区25点から
|
|
62
|
-
[526, "ς⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾☖☗〠☎☀☁☂☃♨▱ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹ"], // 6区57点から
|
|
63
|
-
[558, "ㇺㇻㇼㇽㇾㇿ"], // 6区89点から
|
|
64
|
-
[597, "⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌"], // 7区34点から
|
|
65
|
-
[645, "ヷヸヹヺ⋚⋛⅓⅔⅕✓⌘␣⏎"], // 7区82点から
|
|
66
|
-
[690, "㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿"], // 8区33点から
|
|
67
|
-
[728, "◐◑◒◓‼⁇⁈⁉ǍǎǐḾḿǸǹǑǒǔǖǘǚǜ"], // 8区71点から
|
|
68
|
-
[752, "€ ¡¤¦©ª«®¯²³·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀĪŪĒŌāīūēōĄ˘ŁĽŚŠŞŤŹŽŻą˛łľśˇšşťź˝žżŔĂĹĆČĘĚĎŃŇŐŘŮŰŢŕăĺćčęěďđńňőřůűţ˙ĈĜĤĴŜŬĉĝĥĵŝŭɱʋɾʃʒɬɮɹʈɖɳɽʂʐɻɭɟɲʝʎɡŋɰʁħʕʔɦʘǂɓɗʄɠƓœŒɨʉɘɵəɜɞɐɯʊɤʌɔɑɒʍɥʢʡɕʑɺɧɚ"], // 9区1点から
|
|
69
|
-
[976, "ǽὰά"], // 11区37点から
|
|
70
|
-
[987, "ὲέ͡ˈˌːˑ̆‿̋́̄̀̏̌̂˥˦˧˨˩"], // 11区48点から
|
|
71
|
-
[1010, "̥̬̹̜̟̠̩̯̈̽˞̴̤̰̼̝̞̘̙̪̺̻̃̚❶❷❸❹❺❻❼❽❾❿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋺㋩㋥㋭㋬"], // 11区71点から
|
|
72
|
-
[1126, "⁑⁂"], // 12区93点から
|
|
73
|
-
[1158, "Ⅺ"], // 13区31点から
|
|
74
|
-
[1182, "Ⅻ"], // 13区55点から
|
|
75
|
-
[1207, "���"], // 13区80点から
|
|
76
|
-
[1211, "����"], // 13区84点から
|
|
77
|
-
[1217, "���❖☞俱𠀋㐂丨丯丰亍仡份仿伃伋你佈佉佖佟佪佬佾侊侔侗侮俉俠倁倂倎倘倧倮偀倻偁傔僌僲僐僦僧儆儃儋儞儵兊免兕兗㒵冝凃凊凞凢凮刁㓛刓刕剉剗剡劓勈勉勌勐勖勛勤勰勻匀匇匜卑卡卣卽厓厝厲吒吧呍咜呫呴呿咈咖咡咩哆哿唎唫唵啐啞喁喆喎喝喭嗎嘆嘈嘎嘻噉噶噦器噯噱噲嚙嚞嚩嚬嚳囉囊圊𡈽圡圯圳圴坰坷坼垜﨏𡌛垸埇埈埏埤埭埵埶埿堉塚塡塤塀塼墉增墨墩𡑮壒壎壔壚壠壩夌虁奝奭妋妒妤姃姒姝娓娣婧婭婷婾媄媞媧嫄𡢽嬙嬥剝"], // 13区90点から
|
|
78
|
-
[4375, "𠮟孁孖孽宓寘寬尒尞尣尫㞍屢層屮𡚴屺岏岟岣岪岺峋峐峒峴𡸴㟢崍崧﨑嵆嵇嵓嵊嵭嶁嶠嶤嶧嶸巋吞"], // 47区52点から
|
|
79
|
-
[7808, "噓巢帔帘幘幞庾廊廋廹开异弇弝弣弴弶弽彀彅彔彘彤彧彽徉徜徧徯徵德忉忞忡忩怍怔怘怳怵恇悔悝悞惋惔惕惝惸愜愫愰愷慨憍憎憼憹懲戢戾扃扖扚扯抅拄拖拼挊挘挹捃捥捼揥揭揵搐搔搢摹摑摠摭擎撾撿㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵"], // 84区7点から
|
|
49
|
+
[32, "〜‖"], // 1 区 33 点から
|
|
50
|
+
[60, "−"], // 1 区 61 点から
|
|
51
|
+
[108, "'"-~〳〴〵〻〼ヿゟ"], // 2 区 15 点から
|
|
52
|
+
[127, "⊄⊅⊊⊋∉∅⌅⌆"], // 2 区 34 点から
|
|
53
|
+
[142, "⊕⊖⊗∥∦⦅⦆〘〙〖〗"], // 2 区 49 点から
|
|
54
|
+
[168, "≢≃≅≈≶≷↔"], // 2 区 75 点から
|
|
55
|
+
[183, "♮♫♬♩"], // 2 区 90 点から
|
|
56
|
+
[188, "▷▶◁◀↗↘↖↙⇄⇨⇦⇧⇩⤴⤵"], // 3 区 1 点から
|
|
57
|
+
[213, "⦿◉〽﹆﹅◦•"], // 3 区 26 点から
|
|
58
|
+
[246, "∓ℵℏ㏋ℓ℧"], // 3 区 59 点から
|
|
59
|
+
[278, "゠–⧺⧻"], // 3 区 91 点から
|
|
60
|
+
[365, "ゔゕゖ"], // 4 区 84 点から
|
|
61
|
+
[494, "♤♠♢♦♡♥♧♣"], // 6 区 25 点から
|
|
62
|
+
[526, "ς⓵⓶⓷⓸⓹⓺⓻⓼⓽⓾☖☗〠☎☀☁☂☃♨▱ㇰㇱㇲㇳㇴㇵㇶㇷㇸㇹ"], // 6 区 57 点から
|
|
63
|
+
[558, "ㇺㇻㇼㇽㇾㇿ"], // 6 区 89 点から
|
|
64
|
+
[597, "⎾⎿⏀⏁⏂⏃⏄⏅⏆⏇⏈⏉⏊⏋⏌"], // 7 区 34 点から
|
|
65
|
+
[645, "ヷヸヹヺ⋚⋛⅓⅔⅕✓⌘␣⏎"], // 7 区 82 点から
|
|
66
|
+
[690, "㉑㉒㉓㉔㉕㉖㉗㉘㉙㉚㉛㉜㉝㉞㉟㊱㊲㊳㊴㊵㊶㊷㊸㊹㊺㊻㊼㊽㊾㊿"], // 8 区 33 点から
|
|
67
|
+
[728, "◐◑◒◓‼⁇⁈⁉ǍǎǐḾḿǸǹǑǒǔǖǘǚǜ"], // 8 区 71 点から
|
|
68
|
+
[752, "€ ¡¤¦©ª«®¯²³·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿĀĪŪĒŌāīūēōĄ˘ŁĽŚŠŞŤŹŽŻą˛łľśˇšşťź˝žżŔĂĹĆČĘĚĎŃŇŐŘŮŰŢŕăĺćčęěďđńňőřůűţ˙ĈĜĤĴŜŬĉĝĥĵŝŭɱʋɾʃʒɬɮɹʈɖɳɽʂʐɻɭɟɲʝʎɡŋɰʁħʕʔɦʘǂɓɗʄɠƓœŒɨʉɘɵəɜɞɐɯʊɤʌɔɑɒʍɥʢʡɕʑɺɧɚ"], // 9 区 1 点から
|
|
69
|
+
[976, "ǽὰά"], // 11 区 37 点から
|
|
70
|
+
[987, "ὲέ͡ˈˌːˑ̆‿̋́̄̀̏̌̂˥˦˧˨˩"], // 11 区 48 点から
|
|
71
|
+
[1010, "̥̬̹̜̟̠̩̯̈̽˞̴̤̰̼̝̞̘̙̪̺̻̃̚❶❷❸❹❺❻❼❽❾❿⓫⓬⓭⓮⓯⓰⓱⓲⓳⓴ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹⅺⅻⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ㋐㋑㋒㋓㋔㋕㋖㋗㋘㋙㋚㋛㋜㋝㋞㋟㋠㋡㋢㋣㋺㋩㋥㋭㋬"], // 11 区 71 点から
|
|
72
|
+
[1126, "⁑⁂"], // 12 区 93 点から
|
|
73
|
+
[1158, "Ⅺ"], // 13 区 31 点から
|
|
74
|
+
[1182, "Ⅻ"], // 13 区 55 点から
|
|
75
|
+
[1207, "���"], // 13 区 80 点から
|
|
76
|
+
[1211, "����"], // 13 区 84 点から
|
|
77
|
+
[1217, "���❖☞俱𠀋㐂丨丯丰亍仡份仿伃伋你佈佉佖佟佪佬佾侊侔侗侮俉俠倁倂倎倘倧倮偀倻偁傔僌僲僐僦僧儆儃儋儞儵兊免兕兗㒵冝凃凊凞凢凮刁㓛刓刕剉剗剡劓勈勉勌勐勖勛勤勰勻匀匇匜卑卡卣卽厓厝厲吒吧呍咜呫呴呿咈咖咡咩哆哿唎唫唵啐啞喁喆喎喝喭嗎嘆嘈嘎嘻噉噶噦器噯噱噲嚙嚞嚩嚬嚳囉囊圊𡈽圡圯圳圴坰坷坼垜﨏𡌛垸埇埈埏埤埭埵埶埿堉塚塡塤塀塼墉增墨墩𡑮壒壎壔壚壠壩夌虁奝奭妋妒妤姃姒姝娓娣婧婭婷婾媄媞媧嫄𡢽嬙嬥剝"], // 13 区 90 点から
|
|
78
|
+
[4375, "𠮟孁孖孽宓寘寬尒尞尣尫㞍屢層屮𡚴屺岏岟岣岪岺峋峐峒峴𡸴㟢崍崧﨑嵆嵇嵓嵊嵭嶁嶠嶤嶧嶸巋吞"], // 47 区 52 点から
|
|
79
|
+
[7808, "噓巢帔帘幘幞庾廊廋廹开异弇弝弣弴弶弽彀彅彔彘彤彧彽徉徜徧徯徵德忉忞忡忩怍怔怘怳怵恇悔悝悞惋惔惕惝惸愜愫愰愷慨憍憎憼憹懲戢戾扃扖扚扯抅拄拖拼挊挘挹捃捥捼揥揭揵搐搔搢摹摑摠摭擎撾撿㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵"], // 84 区 7 点から
|
|
80
80
|
];
|
|
81
81
|
/**
|
|
82
|
-
* 追加記号・追加漢字 (85〜94区)。1行が1区で、94 字ずつ (点の順)。ARIB STD-B24 表 7-19 / STD-B62 表 5-2。
|
|
82
|
+
* 追加記号・追加漢字 (85〜94 区)。1 行が 1 区で、94 字ずつ (点の順)。ARIB STD-B24 表 7-19 / STD-B62 表 5-2。
|
|
83
83
|
* 番組表の外字 (aribtext-gaiji.ts) もここを引く
|
|
84
84
|
*
|
|
85
85
|
* 4K8K 用の記号 (🆛〜🆬 U+1F19B〜1F1AC と 🈻 U+1F23B。STD-B62 表 5-3「EPG で使う追加記号」) は
|
|
86
86
|
* **区点が無いので入れない。** 規格は UCS の符号だけを決め (UTF-8 で送る MMT の番組表用)、
|
|
87
|
-
* STD-B24 表 7-19 の 90区85点〜・91区50点〜も空きのまま。denpa は8単位符号しか読まないので出てこない
|
|
87
|
+
* STD-B24 表 7-19 の 90 区 85 点〜・91 区 50 点〜も空きのまま。denpa は 8 単位符号しか読まないので出てこない
|
|
88
88
|
*/
|
|
89
89
|
const ADDITIONAL_ROWS = [
|
|
90
|
-
"㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃", // 85区
|
|
91
|
-
"鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵���������������������������������������������������", // 86区
|
|
92
|
-
"����������������������������������������������������������������������������������������������", // 87区
|
|
93
|
-
"����������������������������������������������������������������������������������������������", // 88区
|
|
94
|
-
"����������������������������������������������������������������������������������������������", // 89区
|
|
95
|
-
"⛌⛍❗⛏⛐⛑�⛒⛕⛓⛔����🅿🆊��⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⭕㉈㉉㉊㉋㉌㉍㉎㉏����⒑⒒⒓🅊🅌🄿🅆🅋🈐🈑🈒🈓🅂🈔🈕🈖🅍🄱🄽⬛⬤🈗🈘🈙🈚🈛⚿🈜🈝🈞🈟🈠🈡🈢🈣🈤🈥🅎㊙🈀����������", // 90区
|
|
96
|
-
"⛣⭖⭗⭘⭙☓㊋〒⛨㉆㉅⛩࿖⛪⛫⛬♨⛭⛮⛯⚓✈⛰⛱⛲⛳⛴⛵🅗ⒹⓈ⛶🅟🆋🆍🆌🅹⛷⛸⛹⛺🅻☎⛻⛼⛽⛾🅼⛿���������������������������������������������", // 91区
|
|
97
|
-
"➡⬅⬆⬇⬯⬮年月日円㎡㎥㎝㎠㎤🄀⒈⒉⒊⒋⒌⒍⒎⒏⒐氏副元故前新🄁🄂🄃🄄🄅🄆🄇🄈🄉🄊㈳㈶㈲㈱㈹㉄▶◀〖〗⟐²³🄭🄬🄫㉇🆐🈦℻���", // 92区
|
|
98
|
-
"㈪㈫㈬㈭㈮㈯㈰㈷㍾㍽㍼㍻№℡〶⚾🉀🉁🉂🉃🉄🉅🉆🉇🉈🄪🈧🈨🈩🈔🈪🈫🈬🈭🈮🈯🈰🈱ℓ㎏㎐㏊㎞㎢㍱��½↉⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅑⅒☀☁☂⛄☖☗⛉⛊♦♥♣♠⛋⨀‼⁉⛅☔⛆☃⛇⚡⛈�⚞⚟♬☎���", // 93区
|
|
99
|
-
"ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿㉑㉒㉓㉔🄐🄑🄒🄓🄔🄕🄖🄗🄘🄙🄚🄛🄜🄝🄞🄟🄠🄡🄢🄣🄤🄥🄦🄧🄨🄩㉕㉖㉗㉘㉙㉚①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯❶❷❸❹❺❻❼❽❾❿⓫⓬㉛�", // 94区
|
|
90
|
+
"㐂𠅘份仿侚俉傜儞冼㔟匇卡卬詹𠮷呍咖咜咩唎啊噲囤圳圴塚墀姤娣婕寬﨑㟢庬弴彅德怗恵愰昤曈曙曺曻桒鿄椑椻橅檑櫛𣏌𣏾𣗄毱泠洮海涿淊淸渚潞濹灤𤋮𤋮煇燁爀玟玨珉珖琛琡琢琦琪琬琹瑋㻚畵疁睲䂓磈磠祇禮鿆䄃", // 85 区
|
|
91
|
+
"鿅秚稞筿簱䉤綋羡脘脺舘芮葛蓜蓬蕙藎蝕蟬蠋裵角諶跎辻迶郝鄧鄭醲鈳銈錡鍈閒雞餃饀髙鯖鷗麴麵���������������������������������������������������", // 86 区
|
|
92
|
+
"����������������������������������������������������������������������������������������������", // 87 区
|
|
93
|
+
"����������������������������������������������������������������������������������������������", // 88 区
|
|
94
|
+
"����������������������������������������������������������������������������������������������", // 89 区
|
|
95
|
+
"⛌⛍❗⛏⛐⛑�⛒⛕⛓⛔����🅿🆊��⛖⛗⛘⛙⛚⛛⛜⛝⛞⛟⛠⛡⭕㉈㉉㉊㉋㉌㉍㉎㉏����⒑⒒⒓🅊🅌🄿🅆🅋🈐🈑🈒🈓🅂🈔🈕🈖🅍🄱🄽⬛⬤🈗🈘🈙🈚🈛⚿🈜🈝🈞🈟🈠🈡🈢🈣🈤🈥🅎㊙🈀����������", // 90 区
|
|
96
|
+
"⛣⭖⭗⭘⭙☓㊋〒⛨㉆㉅⛩࿖⛪⛫⛬♨⛭⛮⛯⚓✈⛰⛱⛲⛳⛴⛵🅗ⒹⓈ⛶🅟🆋🆍🆌🅹⛷⛸⛹⛺🅻☎⛻⛼⛽⛾🅼⛿���������������������������������������������", // 91 区
|
|
97
|
+
"➡⬅⬆⬇⬯⬮年月日円㎡㎥㎝㎠㎤🄀⒈⒉⒊⒋⒌⒍⒎⒏⒐氏副元故前新🄁🄂🄃🄄🄅🄆🄇🄈🄉🄊㈳㈶㈲㈱㈹㉄▶◀〖〗⟐²³🄭🄬🄫㉇🆐🈦℻���", // 92 区
|
|
98
|
+
"㈪㈫㈬㈭㈮㈯㈰㈷㍾㍽㍼㍻№℡〶⚾🉀🉁🉂🉃🉄🉅🉆🉇🉈🄪🈧🈨🈩🈔🈪🈫🈬🈭🈮🈯🈰🈱ℓ㎏㎐㏊㎞㎢㍱��½↉⅓⅔¼¾⅕⅖⅗⅘⅙⅚⅐⅛⅑⅒☀☁☂⛄☖☗⛉⛊♦♥♣♠⛋⨀‼⁉⛅☔⛆☃⛇⚡⛈�⚞⚟♬☎���", // 93 区
|
|
99
|
+
"ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ⑰⑱⑲⑳⑴⑵⑶⑷⑸⑹⑺⑻⑼⑽⑾⑿㉑㉒㉓㉔🄐🄑🄒🄓🄔🄕🄖🄗🄘🄙🄚🄛🄜🄝🄞🄟🄠🄡🄢🄣🄤🄥🄦🄧🄨🄩㉕㉖㉗㉘㉙㉚①②③④⑤⑥⑦⑧⑨⑩⑪⑫⑬⑭⑮⑯❶❷❸❹❺❻❼❽❾❿⓫⓬㉛�", // 94 区
|
|
100
100
|
];
|
|
101
|
-
/** 追加記号・追加漢字を1つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
101
|
+
/** 追加記号・追加漢字を 1 つの文字列にしたもの。(区 − 85) × 94 + (点 − 1) 番目のコードポイント */
|
|
102
102
|
export const ADDITIONAL = ADDITIONAL_ROWS.join('');
|
|
103
103
|
// ここから JIS X 0213 の表 (packages/arib/scripts/jisx0213.ts が書く。手で直さない)
|
|
104
104
|
/**
|
|
@@ -183,7 +183,7 @@ export const PLANE2 = [
|
|
|
183
183
|
];
|
|
184
184
|
// ここまで JIS X 0213 の表
|
|
185
185
|
/**
|
|
186
|
-
* 色の表 (CLUT)。8つの組 × 16色、RGBA の16進。後ろの4組 (65〜127) は 64 を引いた番号の色を半分透かしたもの (65〜72 だけは 0〜7 番の基本の色)。
|
|
186
|
+
* 色の表 (CLUT)。8 つの組 × 16 色、RGBA の 16 進。後ろの 4 組 (65〜127) は 64 を引いた番号の色を半分透かしたもの (65〜72 だけは 0〜7 番の基本の色)。
|
|
187
187
|
* libaribcaption の表は 101 番と 119 番の青が `09` になっていたが、
|
|
188
188
|
* 元の 37 番・55 番 (`55ff00`・`ff5500`) を透かしたものなので `00`
|
|
189
189
|
*/
|
|
@@ -494,11 +494,11 @@ export const DRCS_REPLACE = new Map([
|
|
|
494
494
|
['9374173a2e4b7f1dcac75eccd5ee7e7f', 0x698a],
|
|
495
495
|
['ec7b2c805a5ba3d52c281ee2296b94d7', 0x8523],
|
|
496
496
|
['dedbee40c06e17b51932431dc8cd8334', 0x8fc2], // denpa: 一点しんにょうの「迂」。2026-10-10 時点の録画 58 本で表に無かったもの
|
|
497
|
-
['e806d1481cfa721da5f60413531f39bd', 0x1f4f1], // denpa: 携帯電話 📱 (36x36・4階調)。NHK総合 2026-10-11。録画 20 本 (字幕に字のあったのは 9 本) で表に無かったのはこれだけ
|
|
498
|
-
['d9b5d861024ce112c12fa5f155bb1af3', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (36x36・4階調)。テレビ朝日 2026-10-17 のアニメの字幕で1本に5回
|
|
499
|
-
['d1e6371a34eaf49154ea6a4d0e9064ac', 0x1f50a], // denpa: 音の出ているスピーカー 🔊。TBS 2026-10 のアニメの字幕で1本に22回 (テレビ朝日のものと画像が違う)
|
|
500
|
-
['22db8ff6ac75b60b76a15a6e9c42a5db', 0x1f4fa], // denpa: テレビ 📺。上と同じ番組で2回
|
|
501
|
-
['c42450812c184aee2ae01cc5e39ae957', 0x1f4fb], // denpa: ラジオ 📻 (72x72・16階調)。テレ東 2026-11-01 のアニメの字幕で1本に28回
|
|
502
|
-
['06cb56043b9c4006bcfbe07cc831feaf', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (72x72・16階調)。上と同じ番組で4回 (テレビ朝日・TBS のものと画像が違う)
|
|
503
|
-
['063c95566807d5e7b51ab706426bedf9', 0x1f4f1], // denpa: 携帯電話 📱 (72x72・16階調)。上と同じ番組で4回 (NHK総合のものと画像が違う)
|
|
497
|
+
['e806d1481cfa721da5f60413531f39bd', 0x1f4f1], // denpa: 携帯電話 📱 (36x36・4 階調)。NHK総合 2026-10-11。録画 20 本 (字幕に字のあったのは 9 本) で表に無かったのはこれだけ
|
|
498
|
+
['d9b5d861024ce112c12fa5f155bb1af3', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (36x36・4 階調)。テレビ朝日 2026-10-17 のアニメの字幕で 1 本に 5 回
|
|
499
|
+
['d1e6371a34eaf49154ea6a4d0e9064ac', 0x1f50a], // denpa: 音の出ているスピーカー 🔊。TBS 2026-10 のアニメの字幕で 1 本に 22 回 (テレビ朝日のものと画像が違う)
|
|
500
|
+
['22db8ff6ac75b60b76a15a6e9c42a5db', 0x1f4fa], // denpa: テレビ 📺。上と同じ番組で 2 回
|
|
501
|
+
['c42450812c184aee2ae01cc5e39ae957', 0x1f4fb], // denpa: ラジオ 📻 (72x72・16 階調)。テレ東 2026-11-01 のアニメの字幕で 1 本に 28 回
|
|
502
|
+
['06cb56043b9c4006bcfbe07cc831feaf', 0x1f50a], // denpa: 音の出ているスピーカー 🔊 (72x72・16 階調)。上と同じ番組で 4 回 (テレビ朝日・TBS のものと画像が違う)
|
|
503
|
+
['063c95566807d5e7b51ab706426bedf9', 0x1f4f1], // denpa: 携帯電話 📱 (72x72・16 階調)。上と同じ番組で 4 回 (NHK総合のものと画像が違う)
|
|
504
504
|
]);
|
package/dist/b24caption.d.ts
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 放送の字幕 (ARIB STD-B24 の字幕文) をデコードして、**字の置き場所まで決める** ([caption-text.ts](caption-text.ts))。
|
|
3
3
|
*
|
|
4
|
-
* libaribcaption の「デコードする (decoder)
|
|
4
|
+
* libaribcaption の「デコードする (decoder)」側を写したもの。置き場所・大きさ・色・外字の置き換えまでは
|
|
5
5
|
* 同じ計算で、描く (renderer) 手前で止める。描くのは受け側 (ブラウザ・アプリ)。
|
|
6
6
|
*
|
|
7
|
-
* 写したのは日本の放送で要るところだけ: 8単位符号 (JIS)・Profile A (フルセグ)。言語は1つを選んで読む
|
|
8
|
-
* (既定は第1言語。`new B24CaptionDecoder(2)` で第2言語)。
|
|
7
|
+
* 写したのは日本の放送で要るところだけ: 8 単位符号 (JIS)・Profile A (フルセグ)。言語は 1 つを選んで読む
|
|
8
|
+
* (既定は第 1 言語。`new B24CaptionDecoder(2)` で第 2 言語)。
|
|
9
9
|
* ブラジルの Latin・UTF-8・ワンセグ (Profile C) は持たない。
|
|
10
10
|
*
|
|
11
11
|
* ## libaribcaption と違えたところ
|
|
12
12
|
*
|
|
13
13
|
* - **字幕管理データの「送り直し」の見分け。** あちらは群 (A/B) を `(id & 0xF0) >> 8` で
|
|
14
|
-
* 取っていて常に 0 になり、最初の1回しか読まない。ここは群を正しく見る
|
|
14
|
+
* 取っていて常に 0 になり、最初の 1 回しか読まない。ここは群を正しく見る
|
|
15
15
|
* (番組が変わって群が替わったときに書式を読み直す)
|
|
16
16
|
* - **点滅 (FLC) を読み取る。** あちらは読み捨てている
|
|
17
|
-
* - **JIS X 0213 を最後まで読む。** JIS互換漢字2面 (0x3A) を2面の表で、1面 (0x39) の 85〜94区を
|
|
18
|
-
* 第3水準の漢字で引く。か゚ のような2つのコードポイントの字も出す (あちらは空き)
|
|
17
|
+
* - **JIS X 0213 を最後まで読む。** JIS 互換漢字 2 面 (0x3A) を 2 面の表で、1 面 (0x39) の 85〜94 区を
|
|
18
|
+
* 第 3 水準の漢字で引く。か゚ のような 2 つのコードポイントの字も出す (あちらは空き)
|
|
19
19
|
* - **表で空いている点 (U+FFFD) はゲタ (〓) にする。** 「�」は Denpa Font に無く、端末の字の
|
|
20
20
|
* 「?」の印で出る。定義されていない外字と同じ扱い
|
|
21
21
|
*
|
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
*/
|
|
25
25
|
import { type CaptionLanguage, type CaptionPage } from "./caption-text.js";
|
|
26
26
|
/**
|
|
27
|
-
* 字幕のストリーム1本ぶんのデコーダ。**状態を持つ** (書式・位置・色・外字は字幕文を跨いで続く) ので、
|
|
28
|
-
* ストリームごとに1
|
|
27
|
+
* 字幕のストリーム 1 本ぶんのデコーダ。**状態を持つ** (書式・位置・色・外字は字幕文を跨いで続く) ので、
|
|
28
|
+
* ストリームごとに 1 つ作って、届いた順に渡す。
|
|
29
29
|
*
|
|
30
|
-
* **読むのは1つの言語だけ** (`language`。1〜8)。言語ごとに書式も位置も別に続くので、2つの言語を出し分けるなら
|
|
31
|
-
* 言語ごとに1
|
|
30
|
+
* **読むのは 1 つの言語だけ** (`language`。1〜8)。言語ごとに書式も位置も別に続くので、2 つの言語を出し分けるなら
|
|
31
|
+
* 言語ごとに 1 つ作って、同じコマを両方に渡す (denpa の `server/captions.ts` の `CaptionText`)
|
|
32
32
|
*/
|
|
33
33
|
export declare class B24CaptionDecoder {
|
|
34
34
|
readonly language: number;
|
|
@@ -68,9 +68,9 @@ export declare class B24CaptionDecoder {
|
|
|
68
68
|
/** @param language 読む言語 (1〜8。データグループの番号) */
|
|
69
69
|
constructor(language?: number);
|
|
70
70
|
/**
|
|
71
|
-
* 字幕の PES の中身を1
|
|
71
|
+
* 字幕の PES の中身を 1 つ渡す。
|
|
72
72
|
*
|
|
73
|
-
* @returns 出す1枚。出すものが無ければ (字幕管理データ・送り直し・待ちだけの字幕文) null
|
|
73
|
+
* @returns 出す 1 枚。出すものが無ければ (字幕管理データ・送り直し・待ちだけの字幕文) null
|
|
74
74
|
*/
|
|
75
75
|
decode(data: Uint8Array): CaptionPage | null;
|
|
76
76
|
private resetGraphicSets;
|
package/dist/b24caption.js
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 放送の字幕 (ARIB STD-B24 の字幕文) をデコードして、**字の置き場所まで決める** ([caption-text.ts](caption-text.ts))。
|
|
3
3
|
*
|
|
4
|
-
* libaribcaption の「デコードする (decoder)
|
|
4
|
+
* libaribcaption の「デコードする (decoder)」側を写したもの。置き場所・大きさ・色・外字の置き換えまでは
|
|
5
5
|
* 同じ計算で、描く (renderer) 手前で止める。描くのは受け側 (ブラウザ・アプリ)。
|
|
6
6
|
*
|
|
7
|
-
* 写したのは日本の放送で要るところだけ: 8単位符号 (JIS)・Profile A (フルセグ)。言語は1つを選んで読む
|
|
8
|
-
* (既定は第1言語。`new B24CaptionDecoder(2)` で第2言語)。
|
|
7
|
+
* 写したのは日本の放送で要るところだけ: 8 単位符号 (JIS)・Profile A (フルセグ)。言語は 1 つを選んで読む
|
|
8
|
+
* (既定は第 1 言語。`new B24CaptionDecoder(2)` で第 2 言語)。
|
|
9
9
|
* ブラジルの Latin・UTF-8・ワンセグ (Profile C) は持たない。
|
|
10
10
|
*
|
|
11
11
|
* ## libaribcaption と違えたところ
|
|
12
12
|
*
|
|
13
13
|
* - **字幕管理データの「送り直し」の見分け。** あちらは群 (A/B) を `(id & 0xF0) >> 8` で
|
|
14
|
-
* 取っていて常に 0 になり、最初の1回しか読まない。ここは群を正しく見る
|
|
14
|
+
* 取っていて常に 0 になり、最初の 1 回しか読まない。ここは群を正しく見る
|
|
15
15
|
* (番組が変わって群が替わったときに書式を読み直す)
|
|
16
16
|
* - **点滅 (FLC) を読み取る。** あちらは読み捨てている
|
|
17
|
-
* - **JIS X 0213 を最後まで読む。** JIS互換漢字2面 (0x3A) を2面の表で、1面 (0x39) の 85〜94区を
|
|
18
|
-
* 第3水準の漢字で引く。か゚ のような2つのコードポイントの字も出す (あちらは空き)
|
|
17
|
+
* - **JIS X 0213 を最後まで読む。** JIS 互換漢字 2 面 (0x3A) を 2 面の表で、1 面 (0x39) の 85〜94 区を
|
|
18
|
+
* 第 3 水準の漢字で引く。か゚ のような 2 つのコードポイントの字も出す (あちらは空き)
|
|
19
19
|
* - **表で空いている点 (U+FFFD) はゲタ (〓) にする。** 「�」は Denpa Font に無く、端末の字の
|
|
20
20
|
* 「?」の印で出る。定義されていない外字と同じ扱い
|
|
21
21
|
*
|
|
@@ -36,9 +36,9 @@ const MOSAIC = { set: "mosaic", bytes: 1 };
|
|
|
36
36
|
/**
|
|
37
37
|
* 終端バイト → 集合 (G の指示)。プロポーショナルは同じ表で引く (libaribcaption と同じ)。
|
|
38
38
|
*
|
|
39
|
-
* JIS X 0213 の1面 (0x39) は 1〜84区を漢字集合 (0x42) と同じ表で引き (漢字集合でも JIS X 0213 にだけある字を出す)、
|
|
40
|
-
* 85〜94区は JIS X 0213 の漢字 (`PLANE1_HIGH`)。漢字集合と追加記号 (0x3B) の 85区から先は追加記号。
|
|
41
|
-
* 2面 (0x3A) は別の表 (`PLANE2`)。libaribcaption は 1面・2面とも漢字集合の表で引いていた
|
|
39
|
+
* JIS X 0213 の 1 面 (0x39) は 1〜84 区を漢字集合 (0x42) と同じ表で引き (漢字集合でも JIS X 0213 にだけある字を出す)、
|
|
40
|
+
* 85〜94 区は JIS X 0213 の漢字 (`PLANE1_HIGH`)。漢字集合と追加記号 (0x3B) の 85 区から先は追加記号。
|
|
41
|
+
* 2 面 (0x3A) は別の表 (`PLANE2`)。libaribcaption は 1 面・2 面とも漢字集合の表で引いていた
|
|
42
42
|
*/
|
|
43
43
|
const G_SETS = new Map([
|
|
44
44
|
[0x42, KANJI],
|
|
@@ -57,7 +57,7 @@ const G_SETS = new Map([
|
|
|
57
57
|
[0x3a, { set: "plane2", bytes: 2 }],
|
|
58
58
|
[0x3b, { set: "additional", bytes: 2 }],
|
|
59
59
|
]);
|
|
60
|
-
/** 終端バイト → DRCS の面 (0x40 は2バイトの面 0)。0x70 はマクロ */
|
|
60
|
+
/** 終端バイト → DRCS の面 (0x40 は 2 バイトの面 0)。0x70 はマクロ */
|
|
61
61
|
function drcsSet(final) {
|
|
62
62
|
if (final === 0x70)
|
|
63
63
|
return MACRO;
|
|
@@ -121,10 +121,10 @@ const T = {
|
|
|
121
121
|
kanjiHalf: points(KANJI_SYMBOLS_HALF),
|
|
122
122
|
additional: points(ADDITIONAL),
|
|
123
123
|
plane1High: points(PLANE1_HIGH),
|
|
124
|
-
/** 2面の区 (0 から) → 94 字 */
|
|
124
|
+
/** 2 面の区 (0 から) → 94 字 */
|
|
125
125
|
plane2: new Map(PLANE2.map(([ku, row]) => [ku - 1, points(row)])),
|
|
126
126
|
};
|
|
127
|
-
/** 1区画に2つのコードポイントを描く字 (区×94+点 → 字)。JIS X 0213 の か゚ など */
|
|
127
|
+
/** 1 区画に 2 つのコードポイントを描く字 (区×94+点 → 字)。JIS X 0213 の か゚ など */
|
|
128
128
|
const sequences = new Map(KANJI_SEQUENCES);
|
|
129
129
|
/** 色。CLUT の組 (0〜7) と番号 (0〜15) */
|
|
130
130
|
function clut(palette, index) {
|
|
@@ -142,7 +142,7 @@ function isHalfwidth(code) {
|
|
|
142
142
|
}
|
|
143
143
|
/**
|
|
144
144
|
* 送る画像 (なめらかにした濃淡。drcs-smooth.ts) を元の画像の MD5 ごとに覚えておく。放送は字幕文のたびに
|
|
145
|
-
* 同じ外字を定義し直してくるので、定義ごとではなくここで1回だけ作る
|
|
145
|
+
* 同じ外字を定義し直してくるので、定義ごとではなくここで 1 回だけ作る
|
|
146
146
|
*/
|
|
147
147
|
const smoothed = new Map();
|
|
148
148
|
const SMOOTHED_MAX = 256;
|
|
@@ -162,11 +162,11 @@ function sendable(drcs) {
|
|
|
162
162
|
return sent;
|
|
163
163
|
}
|
|
164
164
|
/**
|
|
165
|
-
* 字幕のストリーム1本ぶんのデコーダ。**状態を持つ** (書式・位置・色・外字は字幕文を跨いで続く) ので、
|
|
166
|
-
* ストリームごとに1
|
|
165
|
+
* 字幕のストリーム 1 本ぶんのデコーダ。**状態を持つ** (書式・位置・色・外字は字幕文を跨いで続く) ので、
|
|
166
|
+
* ストリームごとに 1 つ作って、届いた順に渡す。
|
|
167
167
|
*
|
|
168
|
-
* **読むのは1つの言語だけ** (`language`。1〜8)。言語ごとに書式も位置も別に続くので、2つの言語を出し分けるなら
|
|
169
|
-
* 言語ごとに1
|
|
168
|
+
* **読むのは 1 つの言語だけ** (`language`。1〜8)。言語ごとに書式も位置も別に続くので、2 つの言語を出し分けるなら
|
|
169
|
+
* 言語ごとに 1 つ作って、同じコマを両方に渡す (denpa の `server/captions.ts` の `CaptionText`)
|
|
170
170
|
*/
|
|
171
171
|
export class B24CaptionDecoder {
|
|
172
172
|
language;
|
|
@@ -214,9 +214,9 @@ export class B24CaptionDecoder {
|
|
|
214
214
|
this.resetState();
|
|
215
215
|
}
|
|
216
216
|
/**
|
|
217
|
-
* 字幕の PES の中身を1
|
|
217
|
+
* 字幕の PES の中身を 1 つ渡す。
|
|
218
218
|
*
|
|
219
|
-
* @returns 出す1枚。出すものが無ければ (字幕管理データ・送り直し・待ちだけの字幕文) null
|
|
219
|
+
* @returns 出す 1 枚。出すものが無ければ (字幕管理データ・送り直し・待ちだけの字幕文) null
|
|
220
220
|
*/
|
|
221
221
|
decode(data) {
|
|
222
222
|
const begin = groupAt(data);
|
|
@@ -559,7 +559,7 @@ export class B24CaptionDecoder {
|
|
|
559
559
|
this.gx[byte - 0x28] = set;
|
|
560
560
|
return 2;
|
|
561
561
|
}
|
|
562
|
-
// 知らない ESC は、ESC 1バイトだけ読んだことにする (libaribcaption と同じ)
|
|
562
|
+
// 知らない ESC は、ESC 1 バイトだけ読んだことにする (libaribcaption と同じ)
|
|
563
563
|
return 0;
|
|
564
564
|
}
|
|
565
565
|
c1(data, at) {
|
|
@@ -915,13 +915,13 @@ export class B24CaptionDecoder {
|
|
|
915
915
|
}
|
|
916
916
|
}
|
|
917
917
|
/**
|
|
918
|
-
* デコードした1枚を、送る形式にする。**同じ見た目で続いている字を1つの並びに束ねる。**
|
|
918
|
+
* デコードした 1 枚を、送る形式にする。**同じ見た目で続いている字を 1 つの並びに束ねる。**
|
|
919
919
|
*
|
|
920
920
|
* libaribcaption の描き手 (region_renderer) が字ごとに計算している置き場所を、ここで
|
|
921
921
|
* 面の単位のまま済ませておく。区画は `floor((字の幅 + 字間) × 倍率)`、字の枠は区画の中で
|
|
922
922
|
* 字間の半分だけ右下へずらしたところ。
|
|
923
923
|
*
|
|
924
|
-
* @returns 出すものが無い (待ちだけの字幕文) なら null。CS だけなら「消す」1枚
|
|
924
|
+
* @returns 出すものが無い (待ちだけの字幕文) なら null。CS だけなら「消す」1 枚
|
|
925
925
|
*/
|
|
926
926
|
function toPage(caption, plane) {
|
|
927
927
|
if (caption.chars.length === 0 && !caption.clear)
|
|
@@ -974,7 +974,7 @@ function toPage(caption, plane) {
|
|
|
974
974
|
run.flash = true;
|
|
975
975
|
if (char.ruby)
|
|
976
976
|
run.ruby = true;
|
|
977
|
-
// 見た目が同じで、すぐ右に続いていれば束ねる。外字の画像と、2つのコードポイントの字は1字ずつ
|
|
977
|
+
// 見た目が同じで、すぐ右に続いていれば束ねる。外字の画像と、2 つのコードポイントの字は 1 字ずつ
|
|
978
978
|
const { x: _x, y: _y, text: _t, ...looks } = run;
|
|
979
979
|
const key = JSON.stringify(looks);
|
|
980
980
|
if (last !== null &&
|
package/dist/bml-protocol.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* データ放送の通知の形式。**デコードする側 ([bml.ts](bml.ts)) と描く側の取り決め。**
|
|
3
3
|
*
|
|
4
|
-
* もとは web-bml の `server/ws_api.ts`
|
|
5
|
-
* 録画の隣に置いた `.bml.jsonl` はこの形式の JSON を1行ずつ持っているので、
|
|
4
|
+
* もとは web-bml の `server/ws_api.ts` の型を借りていた。形式はそのまま写してある。
|
|
5
|
+
* 録画の隣に置いた `.bml.jsonl` はこの形式の JSON を 1 行ずつ持っているので、
|
|
6
6
|
* **形式を変えると前に録ったものが読めなくなる**。足すのはよいが、名前や意味は変えない。
|
|
7
7
|
* web-bml は MIT で、著作権表示と許諾の文は [LICENSE](../LICENSE) に置いてある。
|
|
8
8
|
*
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* ストリーム記述子のイベント・番組の名乗り・放送の時刻)。web-bml が自前の
|
|
11
11
|
* TS 解析のために持っていた PCR・PES・BIT・映像の URL は作らないので持たない。
|
|
12
12
|
*/
|
|
13
|
-
/** PMT の ES 1本。**部品タグ (`componentId`) を持つものだけ**並ぶ (bml.ts の `parsePmt`) */
|
|
13
|
+
/** PMT の ES 1 本。**部品タグ (`componentId`) を持つものだけ**並ぶ (bml.ts の `parsePmt`) */
|
|
14
14
|
export interface ComponentPMT {
|
|
15
15
|
pid: number;
|
|
16
16
|
componentId: number;
|
|
@@ -60,7 +60,7 @@ export interface MediaTypeParameter {
|
|
|
60
60
|
originalAttribute: string;
|
|
61
61
|
value: string;
|
|
62
62
|
}
|
|
63
|
-
/** モジュールの中のファイル1つ。中身は base64 (JSON で運ぶため) */
|
|
63
|
+
/** モジュールの中のファイル 1 つ。中身は base64 (JSON で運ぶため) */
|
|
64
64
|
export interface ModuleFile {
|
|
65
65
|
contentLocation: string | null;
|
|
66
66
|
contentType: MediaType;
|
package/dist/bml-protocol.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* データ放送の通知の形式。**デコードする側 ([bml.ts](bml.ts)) と描く側の取り決め。**
|
|
3
3
|
*
|
|
4
|
-
* もとは web-bml の `server/ws_api.ts`
|
|
5
|
-
* 録画の隣に置いた `.bml.jsonl` はこの形式の JSON を1行ずつ持っているので、
|
|
4
|
+
* もとは web-bml の `server/ws_api.ts` の型を借りていた。形式はそのまま写してある。
|
|
5
|
+
* 録画の隣に置いた `.bml.jsonl` はこの形式の JSON を 1 行ずつ持っているので、
|
|
6
6
|
* **形式を変えると前に録ったものが読めなくなる**。足すのはよいが、名前や意味は変えない。
|
|
7
7
|
* web-bml は MIT で、著作権表示と許諾の文は [LICENSE](../LICENSE) に置いてある。
|
|
8
8
|
*
|
package/dist/bml.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* データ放送 (ARIB STD-B24 の BML) をデコードする。**1局に絞った TS
|
|
2
|
+
* データ放送 (ARIB STD-B24 の BML) をデコードする。**1 局に絞った TS を渡すと、
|
|
3
3
|
* 組み立て終わったファイルが出てくる。**
|
|
4
4
|
*
|
|
5
5
|
* TS → PAT → PMT → データ符号化方式記述子 (0xFD) の付いた ES
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*
|
|
10
10
|
* **運び方は衛星のロゴと同じ DSM-CC** で、denpa はそれを既に持っている
|
|
11
11
|
* ([dsmcc.ts](dsmcc.ts) / [logo-dsmcc.ts](https://github.com/danything/denpa/blob/main/src/lib/ts/logo-dsmcc.ts))。
|
|
12
|
-
* [web-bml](https://github.com/otya128/web-bml) の `decode_ts.ts`
|
|
12
|
+
* [web-bml](https://github.com/otya128/web-bml) の `decode_ts.ts` は使わない。要るのは
|
|
13
13
|
* その一部だけで、残り (EIT/SDT/NIT・字幕の PES) は自前で読んでおり
|
|
14
14
|
* ([eit.ts](eit.ts) / [psi.ts](psi.ts) / [b24caption.ts](b24caption.ts))、`@chinachu/aribts` も抱えずに済む。
|
|
15
15
|
*
|
|
@@ -21,21 +21,21 @@ import type { AdditionalAribBXMLInfo, ModuleFile, ResponseMessage } from "./bml-
|
|
|
21
21
|
/**
|
|
22
22
|
* データ符号化方式記述子の後半を読む。
|
|
23
23
|
*
|
|
24
|
-
* 地上波は TR-B14 第二分冊 2.1.4 表2-3、BS/CS は TR-B15 第一分冊 5.1.5 表5-4。
|
|
24
|
+
* 地上波は TR-B14 第二分冊 2.1.4 表 2-3、BS/CS は TR-B15 第一分冊 5.1.5 表 5-4。
|
|
25
25
|
*
|
|
26
|
-
* **`data_component_id` は16ビット** (aribts は8ビットで読んでいる)。
|
|
26
|
+
* **`data_component_id` は 16 ビット** (aribts は 8 ビットで読んでいる)。
|
|
27
27
|
*/
|
|
28
28
|
export declare function parseBxmlInfo(data: Uint8Array): AdditionalAribBXMLInfo;
|
|
29
29
|
/**
|
|
30
|
-
* 1局に絞った TS
|
|
30
|
+
* 1 局に絞った TS を渡すと、データ放送の通知が出てくる。
|
|
31
31
|
*
|
|
32
|
-
* **1つの選局に1つ。**
|
|
32
|
+
* **1 つの選局に 1 つ。** 局を変えたら作り直す。カルーセルは局ごとに別物で、
|
|
33
33
|
* 組み立て中のものを持ち越すと混ざる。
|
|
34
34
|
*/
|
|
35
35
|
export declare class BmlDecoder {
|
|
36
36
|
private readonly send;
|
|
37
37
|
private readonly packets;
|
|
38
|
-
/** **1
|
|
38
|
+
/** **1 局に絞ったあとを渡す前提。** 入っているサービスは 1 つなので、最初の局の PMT を追う */
|
|
39
39
|
private readonly pmt;
|
|
40
40
|
private readonly time;
|
|
41
41
|
/** カルーセルが流れている ES。PID ごと */
|
|
@@ -43,17 +43,17 @@ export declare class BmlDecoder {
|
|
|
43
43
|
/** 最後に配った PMT。**変わったときだけ配る** */
|
|
44
44
|
private sent;
|
|
45
45
|
constructor(send: (message: ResponseMessage) => void);
|
|
46
|
-
/** 1局に絞った TS
|
|
46
|
+
/** 1 局に絞った TS を渡す */
|
|
47
47
|
feed(chunk: Uint8Array): void;
|
|
48
48
|
/**
|
|
49
|
-
* 切り分け済みのパケットを1つ。ライブは同じ TS を時計や Hybridcast とも
|
|
50
|
-
* 分け合うので、切り分けは1回で済ませて配る (denpa の `server/live.ts` の `tap`)。
|
|
49
|
+
* 切り分け済みのパケットを 1 つ。ライブは同じ TS を時計や Hybridcast とも
|
|
50
|
+
* 分け合うので、切り分けは 1 回で済ませて配る (denpa の `server/live.ts` の `tap`)。
|
|
51
51
|
*
|
|
52
52
|
* **PID で行き先を引く。** 組み立て役を全部に回していた頃は、データ放送と
|
|
53
53
|
* 関係ない映像のパケットのたびにカルーセルの数だけ呼んでいた。
|
|
54
54
|
*
|
|
55
55
|
* `packet` は呼び手の塊の上の窓 (`psi.ts` の `PacketStream`)。**返ったあとまで
|
|
56
|
-
*
|
|
56
|
+
* 持つなら写すこと。** 塊の入れ物は使い回される
|
|
57
57
|
*/
|
|
58
58
|
feedPacket(packet: Uint8Array): void;
|
|
59
59
|
private onPmt;
|
|
@@ -77,7 +77,7 @@ export declare class BmlDecoder {
|
|
|
77
77
|
/**
|
|
78
78
|
* 揃ったモジュールをファイルに分ける。
|
|
79
79
|
*
|
|
80
|
-
* **多くは `multipart/mixed`** で、1つのモジュールに BML と画像がまとめて
|
|
80
|
+
* **多くは `multipart/mixed`** で、1 つのモジュールに BML と画像がまとめて
|
|
81
81
|
* 入っている。Type 記述子が無いときも中身は multipart なので、同じ扱いにする。
|
|
82
82
|
*/
|
|
83
83
|
export declare function moduleFiles(data: Uint8Array, contentType: string | null): ModuleFile[];
|