[17] 
[DFN[[RUBYB[[RUBY[制][せい]][RUBY[御][ぎょ]]シーケンス][control sequence]]]]は、
[CODE(charname)@en[CSI]]
から始まる[[制御機能]]を表す[[ビット組合せ]]列 ([[バイト列]]) です。



* 仕様書

[16] [[ISO/IEC6429]] / [[JISX0211]] で定義されてます。

* 意味

[4]
>
:制御シーケンス (control sequence):
制御機能 [CODE(char)[[[CONTROL SEQUENCE INTRODUCER]]]] ([CODE(char)[[[CSI]]]], [CODE(char)[制御シーケンス開始]])
から始まるビット組合せの列であって、
[[パラメタ]]をもつか又はもたない制御機能の符号化表現のために使う。
([[JIS X 0211]]‐1994 4.2.24)

[3]
>
:制御シーケンス (control sequence):
[[制御機能]] [CODE(charname)@en[[[CONTROL SEQUENCE INTRODUCER]]]]
([CODE(charname)@en[[[CSI]]]], 
[CODE(jcharname)[[[制御シーケンス開始]]]])
から始まる一つ以上の[[ビット組合せ]]であって、
[[制御機能]]の[[符号化表現]]のために使う。
[SRC[[[JIS X 0201]]:1997 3.5]]



* 構文

[12] 
[[ISO/IEC 6429:1991]] 5.4 を元に [[ABNF]] で書くと、大まかな構造はこんなんです。

-control-sequence = CSI [P] *I F
-CSI = ESC %x5B / %x9B  ;; ESC Fe / [[CR]] ([[符号]]の構造・[[告知]]による)
-P = std-P / private-P ;; Parameter byte(s)
-std-P = %x30-3B *( %x30-3F )
-pvt-P = %x3C-3F *( %x30-3F )
-I = %x20-2F  ;; Intermediate byte
-F = std-F / private-F  ;; Final byte
-std-F = %x40-6F
-private-F = %x70-7E


**7ビット・8ビット変換のための例外的解釈

冒頭の ABNF は、こんな風に修正しないといけません。

-control-sequence = CSI *(s P) *(s I) s F
-s = %x0E / %x0F  ;; SHIFT OUT / SHIFT IN
-P = %x30-3F / %xB0-BF
-I = %x20-2F / %xA0-AF
-F = %x40-7E / %xC0-FE

詳しくは[[7ビット符号と8ビット符号]]を参照。

** ISO/IEC 10646 における利用

[18] 
[[ISO/IEC 10646]] および [[Unicode]]
での利用については、
[[ISO/IEC 10646におけるエスケープシーケンス]]参照。

** その他の非 ISO/IEC 2022 符号体系における利用

[19] 
[[ISO/IEC 2022]]
とも
[[ISO/IEC 10646]]
とも異なる[[文字コード]]体系における利用については、
[[エスケープシーケンス]]参照。

* 終端バイト

[13] 
[[制御シーケンス]]の末尾の[[終端バイト]]が[[制御シーケンス]]の意味を表します。

[14] 
つまり[[制御シーケンス]]を受信して処理するときは、[[制御シーケンス]]の末尾までを読み終わる必要があります。

;; [15] [[エスケープシーケンス]]の[[終端バイト]]とは割当が完全に異なります。

- [21] 
[N[2/9]] ([CODE[)]]) [N[7/0]] ([CODE[p]]) - [[CSI )p]]
-[20] 
[N[2/10]] ([CODE[*]]) [N[7/0]] ([CODE[p]]) - [CODE(charname)@en[DECSPPCS]]


*パラメーター・バイト
-P = std-P / pvt-P
-std-P = sub-string *(separator sub-string)
-separator = %x3B
-sub-string = *( DIGIT / digit-separator )
-DIGIT = %x30-39
-digit-separator = %x3A  ;; 小数点などに使用

sub-string の先導 *"0" は無視可能。 ("0123" == "123", "000" == "0")
sub-string は空 (empty) になり得る。最後の sub-string が空であるのは、その直前の
separator が無いのと同じ意味。 ("1;1;" == "1;1")

[[#comment]]


*SGML での定義

[5]
>
:(137) [DFN[制御シーケンス]] ([DFN@en[control sequence]]):
それ以降の[[文字列]]の[[解釈]]、[[表現]]又はその他の[[処理]]を[[制御]]する[[機能制御文字]]で始まる[[文字]]の[[並び]]。
- 例 [[エスケープシーケンス]]

;; 出典: [[JIS X 4151]]‐1992 3.

[1] [[SGML]]では、>>5と定義しています。[[符号化文字集合]]規格で言う[[制御シーケンス]]
([CODE(char)[CSI]] で始まる列) のほかに、
例示にあるように[[エスケープ・シーケンス]]も含みます。
(ほかに [CODE(char)[[[SS2]]]] 
などの[[制御文字]]も含むのかもしれません。 SGML
の[[文字集合]]は ISO の体系に限りませんから、[[漢字イン]]・
[[漢字アウト]]なども含まれると思われます。)

* 関連

[6] [[制御ストリング]]は別。

*メモ

[8] 
俗に[DFN[ANSIエスケープシーケンス]]というとき、大抵は[[制御シーケンス]]のことを指しています。
([[制御シーケンス]]以外の[[エスケープシーケンス]]を指す場合もあります。)

[7] [CITE[Digital Ansi-Compliant Print Protocol Lev 2 Program. Ref. Man. - PPLV2PMB.PDF]], [TIME[1995-08-31T14:32:02.000Z]], [TIME[2022-05-02T12:20:35.927Z]] <http://sup.xenya.si/sup/info/digital/MDS/jun99/Cd3/PRINTER/PPLV2PMB.PDF#page=92>

[9] [[ARIB STD-B5]], [[ARIB STD-B24]], [[T.61]], [[T.101]]

[10] [[ISO文字コードにおける書字方向]]

[11] [[GB 8565.3-88]]


- [2] [WEAK[2004-01-05 03:55:03 +00:00]] ''[[SPCU]]'': 


[22] [CITE@ja[New Terminal Control Commands for Ambiguous Width Characters - Google ドキュメント]], [TIME[2022-12-11T08:09:51.000Z]] <https://docs.google.com/document/d/1Dgq81J0eQEfjq3MR__O7VrbSVnatr9CCqMEITse9psk/edit?pli=1>

[23] [CITE@ja[Control functions - akinomyoga/contra]], [TIME[2021-12-31T23:05:20.000Z]], [TIME[2022-12-11T08:12:27.206Z]] <https://akinomyoga.github.io/contra/escseq.html>

[24] [[SGR]]

[25] [[DRCSMMv1]]

[26] [[DECSFC]]

[27] [[DECPCTERM]]

[28] 
[[Inline Image Protocol]]



[29] [CITE@ja[【色文字】Discordでカラフルな色文字を使う方法【カラフル】 – なんちゃらのDiscord管理者]], [TIME[2024-10-10T10:18:49.000Z]] <https://nanchara.jp/colortext/>


[30] >>29 [[Markdown]] の構文色付け付きコードブロック構文で [CODE[ansi]] を指定することで
[[ANSIエスケープシーケンス]]が使えるのを色指定付き文字に流用するハックがあるらしい


[31] [CITE[Set Character Width proposal]], [TIME[2006-12-08T12:16:47.000Z]], [TIME[2025-11-02T13:06:34.522Z]] <https://www.cl.cam.ac.uk/~mgk25/ucs/scw-proposal.html>
