build(ariadne): vendor clap
This commit was merged in pull request #30.
This commit is contained in:
1 parent
e6af135702
commit
8855b6d379
681 files changed
+400416
No files matched your search
@@ -0,0 +1 @@
|
||||
{"$comment":"This file only protects against accidental modifications. It is not a security mechanism and does not protect against malicious changes.","files":{".cargo_vcs_info.json":"3566aeae7189a3cc06d612322361e5f31fcfb11a56fa04a418ebea5fb176bc08","Cargo.lock":"1f3c4e8c1621dd677b6e4bf6eb895a8207b38db134aa134df26cbb7a07f712f4","Cargo.toml":"fb68a322c2a6df11ca66e0f0fb79b9595e9d2f551eb9e062f44bb47de4c74367","Cargo.toml.orig":"3a094a1603064c3a0854ca37c0c43ff2ae61fdf3b9c11b407da97cd1edf39367","LICENSE-APACHE":"c6596eb7be8581c18be736c846fb9173b69eccf6ef94c5135893ec56bd92ba08","LICENSE-MIT":"6efb0476a1cc085077ed49357026d8c173bf33017278ef440f222fb9cbcb66e6","README.md":"85c374ff51508a4847ade385c727d5b3d593e374a36e66606543cee390e54963","examples/parselog.rs":"83bb99aec7704e6aa5524dd6090f1f4837c37935e53d6ff5d17b723b0c55d029","src/lib.rs":"564fa3ae4520332e95234fff2e57bc760b3f9168045f87870c3b3a8c6d9380e4","src/params.rs":"8cfef4e2ab1961ca2d9f210da553fc6ac64bb6dbd03321f0ee7d6089ab45389c","src/state/codegen.rs":"0820bb4e54d9b3f1e0e80c1935ca57466cfe60e98f556c31f19e5e1b6ed31787","src/state/definitions.rs":"8a819bd7238edeb02aff3697e07fadfb8978a00f9f255812838326b904010e82","src/state/mod.rs":"5c07420f7245b823bc1bcff797ae70c21cfdfaee8f326d37a6e95d529b08f38d","src/state/table.rs":"673b7e9242c5248efc076086cc6923578ec2f059c0c26da21363528e20e4285c"},"package":"52ce7f38b242319f7cabaa6813055467063ecdc9d355bbb4ce0c68908cd8130e"}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"git": {
|
||||
"sha1": "3048fe7820055a6c995170d822e725c62b3d63e1"
|
||||
},
|
||||
"path_in_vcs": "crates/anstyle-parse"
|
||||
}
|
||||
+117
@@ -0,0 +1,117 @@
|
||||
###############################################################################
|
||||
# @generated
|
||||
# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To
|
||||
# regenerate this file, run the following:
|
||||
#
|
||||
# bazel run @@//third_party:vendor_crates
|
||||
###############################################################################
|
||||
|
||||
load("@rules_rust//cargo:defs.bzl", "cargo_toml_env_vars")
|
||||
load("@rules_rust//rust:defs.bzl", "rust_library")
|
||||
|
||||
package(default_visibility = ["//visibility:public"])
|
||||
|
||||
cargo_toml_env_vars(
|
||||
name = "cargo_toml_env_vars",
|
||||
src = "Cargo.toml",
|
||||
)
|
||||
|
||||
rust_library(
|
||||
name = "anstyle_parse",
|
||||
srcs = glob(
|
||||
include = ["**/*.rs"],
|
||||
allow_empty = False,
|
||||
),
|
||||
compile_data = glob(
|
||||
include = ["**"],
|
||||
allow_empty = True,
|
||||
exclude = [
|
||||
"**/* *",
|
||||
".tmp_git_root/**/*",
|
||||
"BUILD",
|
||||
"BUILD.bazel",
|
||||
"WORKSPACE",
|
||||
"WORKSPACE.bazel",
|
||||
],
|
||||
),
|
||||
crate_features = [
|
||||
"default",
|
||||
"utf8",
|
||||
],
|
||||
crate_root = "src/lib.rs",
|
||||
edition = "2021",
|
||||
rustc_env_files = [
|
||||
":cargo_toml_env_vars",
|
||||
],
|
||||
rustc_flags = [
|
||||
"--cap-lints=allow",
|
||||
],
|
||||
tags = [
|
||||
"cargo-bazel",
|
||||
"crate-name=anstyle-parse",
|
||||
"manual",
|
||||
"noclippy",
|
||||
"norustfmt",
|
||||
],
|
||||
target_compatible_with = select({
|
||||
"@rules_rust//rust/platform:aarch64-apple-darwin": [],
|
||||
"@rules_rust//rust/platform:aarch64-apple-ios": [],
|
||||
"@rules_rust//rust/platform:aarch64-apple-ios-macabi": [],
|
||||
"@rules_rust//rust/platform:aarch64-apple-ios-sim": [],
|
||||
"@rules_rust//rust/platform:aarch64-linux-android": [],
|
||||
"@rules_rust//rust/platform:aarch64-pc-windows-msvc": [],
|
||||
"@rules_rust//rust/platform:aarch64-unknown-fuchsia": [],
|
||||
"@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [],
|
||||
"@rules_rust//rust/platform:aarch64-unknown-none": [],
|
||||
"@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [],
|
||||
"@rules_rust//rust/platform:aarch64-unknown-uefi": [],
|
||||
"@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [],
|
||||
"@rules_rust//rust/platform:arm-unknown-linux-musleabi": [],
|
||||
"@rules_rust//rust/platform:armv7-linux-androideabi": [],
|
||||
"@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [],
|
||||
"@rules_rust//rust/platform:i686-apple-darwin": [],
|
||||
"@rules_rust//rust/platform:i686-linux-android": [],
|
||||
"@rules_rust//rust/platform:i686-pc-windows-msvc": [],
|
||||
"@rules_rust//rust/platform:i686-unknown-freebsd": [],
|
||||
"@rules_rust//rust/platform:i686-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:loongarch64-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:mips-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:riscv32imac-unknown-none-elf": [],
|
||||
"@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [],
|
||||
"@rules_rust//rust/platform:riscv64gc-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [],
|
||||
"@rules_rust//rust/platform:s390x-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:sparc64-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:sparc64-unknown-netbsd": [],
|
||||
"@rules_rust//rust/platform:sparc64-unknown-openbsd": [],
|
||||
"@rules_rust//rust/platform:thumbv6m-none-eabi": [],
|
||||
"@rules_rust//rust/platform:thumbv7em-none-eabi": [],
|
||||
"@rules_rust//rust/platform:thumbv7em-none-eabihf": [],
|
||||
"@rules_rust//rust/platform:thumbv7m-none-eabi": [],
|
||||
"@rules_rust//rust/platform:thumbv8m.main-none-eabi": [],
|
||||
"@rules_rust//rust/platform:thumbv8m.main-none-eabihf": [],
|
||||
"@rules_rust//rust/platform:wasm32-unknown-emscripten": [],
|
||||
"@rules_rust//rust/platform:wasm32-unknown-unknown": [],
|
||||
"@rules_rust//rust/platform:wasm32-wasip1": [],
|
||||
"@rules_rust//rust/platform:wasm32-wasip1-threads": [],
|
||||
"@rules_rust//rust/platform:wasm32-wasip2": [],
|
||||
"@rules_rust//rust/platform:x86_64-apple-darwin": [],
|
||||
"@rules_rust//rust/platform:x86_64-apple-ios": [],
|
||||
"@rules_rust//rust/platform:x86_64-apple-ios-macabi": [],
|
||||
"@rules_rust//rust/platform:x86_64-linux-android": [],
|
||||
"@rules_rust//rust/platform:x86_64-pc-windows-msvc": [],
|
||||
"@rules_rust//rust/platform:x86_64-unknown-freebsd": [],
|
||||
"@rules_rust//rust/platform:x86_64-unknown-fuchsia": [],
|
||||
"@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [],
|
||||
"@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [],
|
||||
"@rules_rust//rust/platform:x86_64-unknown-none": [],
|
||||
"@rules_rust//rust/platform:x86_64-unknown-uefi": [],
|
||||
"//conditions:default": ["@platforms//:incompatible"],
|
||||
}),
|
||||
version = "1.0.0",
|
||||
deps = [
|
||||
"//third_party/crates/utf8parse-0.2.2:utf8parse",
|
||||
],
|
||||
)
|
||||
+784
@@ -0,0 +1,784 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "anstream"
|
||||
version = "0.6.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "43d5b281e737544384e969a5ccad3f1cdd24b48086a0fc1b2a5262a26b8f4f4a"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"anstyle-parse 0.2.7",
|
||||
"anstyle-query",
|
||||
"anstyle-wincon",
|
||||
"colorchoice",
|
||||
"is_terminal_polyfill",
|
||||
"utf8parse",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle"
|
||||
version = "1.0.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5192cca8006f1fd4f7237516f40fa183bb07f8fbdfedaa0036de5ea9b0b45e78"
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-parse"
|
||||
version = "0.2.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4e7644824f0aa2c7b9384579234ef10eb7efb6a0deb83f9630a49594dd9c15c2"
|
||||
dependencies = [
|
||||
"utf8parse",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-parse"
|
||||
version = "1.0.0"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"codegenrs",
|
||||
"divan",
|
||||
"proptest",
|
||||
"snapbox",
|
||||
"utf8parse",
|
||||
"vte_generate_state_changes",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-query"
|
||||
version = "1.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9e231f6134f61b71076a3eab506c379d4f36122f2af15a9ff04415ea4c3339e2"
|
||||
dependencies = [
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anstyle-wincon"
|
||||
version = "3.0.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3e0633414522a32ffaac8ac6cc8f748e090c5717661fddeea04219e2344f5f2a"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"once_cell_polyfill",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arrayvec"
|
||||
version = "0.7.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
|
||||
|
||||
[[package]]
|
||||
name = "autocfg"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
|
||||
|
||||
[[package]]
|
||||
name = "bit-set"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "08807e080ed7f9d5433fa9b275196cfc35414f66a0c79d864dc51a0d825231a3"
|
||||
dependencies = [
|
||||
"bit-vec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bit-vec"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5e764a1d40d510daf35e07be9eb06e75770908c27d411ee6c92109c9840eaaf7"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "1.3.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||
|
||||
[[package]]
|
||||
name = "bitflags"
|
||||
version = "2.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2261d10cca569e4643e526d8dc2e62e433cc8aba21ab764233731f8d369bf394"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9"
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "4.3.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fb690e81c7840c0d7aade59f242ea3b41b9bc27bcd5997890e7702ae4b32e487"
|
||||
dependencies = [
|
||||
"clap_builder",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_builder"
|
||||
version = "4.3.24"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ed2e96bc16d8d740f6f48d663eddf4b8a0983e79210fd55479b7bcd0a69860e"
|
||||
dependencies = [
|
||||
"anstyle",
|
||||
"clap_lex",
|
||||
"terminal_size",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_lex"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2da6da31387c7e4ef160ffab6d5e7f00c42626fe39aea70a7b0f1773f7dd6c1b"
|
||||
|
||||
[[package]]
|
||||
name = "codegenrs"
|
||||
version = "3.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "54494d179491b69c9a2aafa1ee3826abd37b92a19e4ff0e02095bf42f99f30c9"
|
||||
dependencies = [
|
||||
"derive_more",
|
||||
"difference",
|
||||
"normalize-line-endings",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "colorchoice"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
|
||||
|
||||
[[package]]
|
||||
name = "condtype"
|
||||
version = "1.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf0a07a401f374238ab8e2f11a104d2851bf9ce711ec69804834de8af45c7af"
|
||||
|
||||
[[package]]
|
||||
name = "convert_case"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
|
||||
|
||||
[[package]]
|
||||
name = "derive_more"
|
||||
version = "0.99.20"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6edb4b64a43d977b8e99788fe3a04d483834fba1215a7e02caa415b626497f7f"
|
||||
dependencies = [
|
||||
"convert_case",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"rustc_version",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "difference"
|
||||
version = "2.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "524cbf6897b527295dff137cec09ecf3a05f4fddffd7dfcd1585403449e74198"
|
||||
|
||||
[[package]]
|
||||
name = "divan"
|
||||
version = "0.1.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ccc40f214f0d9e897cfc72e2edfa5c225d3252f758c537f11ac0a80371c073a6"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"clap",
|
||||
"condtype",
|
||||
"divan-macros",
|
||||
"libc",
|
||||
"regex-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "divan-macros"
|
||||
version = "0.1.16"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7bdb5411188f7f878a17964798c1264b6b0a9f915bd39b20bf99193c923e1b4e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "errno"
|
||||
version = "0.3.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fastrand"
|
||||
version = "2.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
||||
|
||||
[[package]]
|
||||
name = "fnv"
|
||||
version = "1.0.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"libc",
|
||||
"r-efi",
|
||||
"wasi",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.5.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fc0fef456e4baa96da950455cd02c081ca953b141298e41db3fc7e36b1da849c"
|
||||
|
||||
[[package]]
|
||||
name = "io-lifetimes"
|
||||
version = "1.0.11"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
|
||||
dependencies = [
|
||||
"hermit-abi 0.3.9",
|
||||
"libc",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is-terminal"
|
||||
version = "0.4.17"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3640c1c38b8e4e43584d8df18be5fc6b0aa314ce6ebf51b53313d4306cca8e46"
|
||||
dependencies = [
|
||||
"hermit-abi 0.5.2",
|
||||
"libc",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "is_terminal_polyfill"
|
||||
version = "1.48.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2736dd548daf35f50d261bbad35a83890bb9b461797f15de528485fbf206ab15"
|
||||
dependencies = [
|
||||
"is-terminal",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.177"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.3.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
|
||||
|
||||
[[package]]
|
||||
name = "linux-raw-sys"
|
||||
version = "0.11.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df1d3c3b53da64cf5760482273a98e575c651a67eec7f77df96b5b642de8f039"
|
||||
|
||||
[[package]]
|
||||
name = "normalize-line-endings"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be"
|
||||
|
||||
[[package]]
|
||||
name = "num-traits"
|
||||
version = "0.2.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "once_cell"
|
||||
version = "1.21.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d"
|
||||
|
||||
[[package]]
|
||||
name = "once_cell_polyfill"
|
||||
version = "1.56.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8aab899efe6ce4fe821f6dda30c02d7041c79f147598ab4b60197f181e12d001"
|
||||
dependencies = [
|
||||
"once_cell",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ppv-lite86"
|
||||
version = "0.2.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9"
|
||||
dependencies = [
|
||||
"zerocopy",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "1.0.103"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
|
||||
dependencies = [
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proptest"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6fcdab19deb5195a31cf7726a210015ff1496ba1464fd42cb4f537b8b01b471f"
|
||||
dependencies = [
|
||||
"bit-set",
|
||||
"bit-vec",
|
||||
"bitflags 2.9.4",
|
||||
"lazy_static",
|
||||
"num-traits",
|
||||
"rand",
|
||||
"rand_chacha",
|
||||
"rand_xorshift",
|
||||
"regex-syntax",
|
||||
"rusty-fork",
|
||||
"tempfile",
|
||||
"unarray",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "quick-error"
|
||||
version = "1.2.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
|
||||
|
||||
[[package]]
|
||||
name = "quote"
|
||||
version = "1.0.41"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "r-efi"
|
||||
version = "5.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f"
|
||||
|
||||
[[package]]
|
||||
name = "rand"
|
||||
version = "0.9.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1"
|
||||
dependencies = [
|
||||
"rand_chacha",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_chacha"
|
||||
version = "0.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb"
|
||||
dependencies = [
|
||||
"ppv-lite86",
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_core"
|
||||
version = "0.9.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38"
|
||||
dependencies = [
|
||||
"getrandom",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_xorshift"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "513962919efc330f829edb2535844d1b912b0fbe2ca165d613e4e8788bb05a5a"
|
||||
dependencies = [
|
||||
"rand_core",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "regex-lite"
|
||||
version = "0.1.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "943f41321c63ef1c92fd763bfe054d2668f7f225a5c29f0105903dc2fc04ba30"
|
||||
|
||||
[[package]]
|
||||
name = "regex-syntax"
|
||||
version = "0.8.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001"
|
||||
|
||||
[[package]]
|
||||
name = "rustc_version"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92"
|
||||
dependencies = [
|
||||
"semver",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "0.37.28"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "519165d378b97752ca44bbe15047d5d3409e875f39327546b42ac81d7e18c1b6"
|
||||
dependencies = [
|
||||
"bitflags 1.3.2",
|
||||
"errno",
|
||||
"io-lifetimes",
|
||||
"libc",
|
||||
"linux-raw-sys 0.3.8",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rustix"
|
||||
version = "1.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
|
||||
dependencies = [
|
||||
"bitflags 2.9.4",
|
||||
"errno",
|
||||
"libc",
|
||||
"linux-raw-sys 0.11.0",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rusty-fork"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cb3dcc6e454c328bb824492db107ab7c0ae8fcffe4ad210136ef014458c1bc4f"
|
||||
dependencies = [
|
||||
"fnv",
|
||||
"quick-error",
|
||||
"tempfile",
|
||||
"wait-timeout",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "semver"
|
||||
version = "1.0.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
|
||||
|
||||
[[package]]
|
||||
name = "similar"
|
||||
version = "2.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbbb5d9659141646ae647b42fe094daf6c6192d1620870b449d9557f748b2daa"
|
||||
|
||||
[[package]]
|
||||
name = "snapbox"
|
||||
version = "0.6.23"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "96fa1ce81be900d083b30ec2d481e6658c2acfaa2cfc7be45ccc2cc1b820edb3"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anstyle",
|
||||
"normalize-line-endings",
|
||||
"similar",
|
||||
"snapbox-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "snapbox-macros"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3b750c344002d7cc69afb9da00ebd9b5c0f8ac2eb7d115d9d45d5b5f47718d74"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "syn"
|
||||
version = "2.0.106"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"unicode-ident",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "tempfile"
|
||||
version = "3.23.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
|
||||
dependencies = [
|
||||
"fastrand",
|
||||
"getrandom",
|
||||
"once_cell",
|
||||
"rustix 1.1.2",
|
||||
"windows-sys 0.60.2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "terminal_size"
|
||||
version = "0.2.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
|
||||
dependencies = [
|
||||
"rustix 0.37.28",
|
||||
"windows-sys 0.48.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unarray"
|
||||
version = "0.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "eaea85b334db583fe3274d12b4cd1880032beab409c0d774be044d4480ab9a94"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-ident"
|
||||
version = "1.0.22"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
|
||||
|
||||
[[package]]
|
||||
name = "utf8parse"
|
||||
version = "0.2.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
|
||||
|
||||
[[package]]
|
||||
name = "vte_generate_state_changes"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2e369bee1b05d510a7b4ed645f5faa90619e05437111783ea5848f28d97d3c2e"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wait-timeout"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09ac3b126d3914f9849036f826e054cbabdc8519970b8998ddaf3b5bd3c65f11"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "wasi"
|
||||
version = "0.14.4+wasi-0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "88a5f4a424faf49c3c2c344f166f0662341d470ea185e939657aaff130f0ec4a"
|
||||
dependencies = [
|
||||
"wit-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-link"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.48.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
|
||||
dependencies = [
|
||||
"windows-targets 0.48.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.60.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb"
|
||||
dependencies = [
|
||||
"windows-targets 0.53.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm 0.48.5",
|
||||
"windows_aarch64_msvc 0.48.5",
|
||||
"windows_i686_gnu 0.48.5",
|
||||
"windows_i686_msvc 0.48.5",
|
||||
"windows_x86_64_gnu 0.48.5",
|
||||
"windows_x86_64_gnullvm 0.48.5",
|
||||
"windows_x86_64_msvc 0.48.5",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.53.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3"
|
||||
dependencies = [
|
||||
"windows-link",
|
||||
"windows_aarch64_gnullvm 0.53.1",
|
||||
"windows_aarch64_msvc 0.53.1",
|
||||
"windows_i686_gnu 0.53.1",
|
||||
"windows_i686_gnullvm",
|
||||
"windows_i686_msvc 0.53.1",
|
||||
"windows_x86_64_gnu 0.53.1",
|
||||
"windows_x86_64_gnullvm 0.53.1",
|
||||
"windows_x86_64_msvc 0.53.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnullvm"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.48.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.53.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650"
|
||||
|
||||
[[package]]
|
||||
name = "wit-bindgen"
|
||||
version = "0.45.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5c573471f125075647d03df72e026074b7203790d41351cd6edc96f46bcccd36"
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy"
|
||||
version = "0.8.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0894878a5fa3edfd6da3f88c4805f4c8558e2b996227a3d864f47fe11e38282c"
|
||||
dependencies = [
|
||||
"zerocopy-derive",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "zerocopy-derive"
|
||||
version = "0.8.27"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "88d2b8d9c68ad2b9e4340d7832716a4d21a22a1154777ad56ea55c51a9cf3831"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn",
|
||||
]
|
||||
+195
@@ -0,0 +1,195 @@
|
||||
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
|
||||
#
|
||||
# When uploading crates to the registry Cargo will automatically
|
||||
# "normalize" Cargo.toml files for maximal compatibility
|
||||
# with all versions of Cargo and also rewrite `path` dependencies
|
||||
# to registry (e.g., crates.io) dependencies.
|
||||
#
|
||||
# If you are reading this file be aware that the original Cargo.toml
|
||||
# will likely look very different (and much more reasonable).
|
||||
# See Cargo.toml.orig for the original contents.
|
||||
|
||||
[package]
|
||||
edition = "2021"
|
||||
rust-version = "1.66.0"
|
||||
name = "anstyle-parse"
|
||||
version = "1.0.0"
|
||||
build = false
|
||||
include = [
|
||||
"build.rs",
|
||||
"src/**/*",
|
||||
"Cargo.toml",
|
||||
"Cargo.lock",
|
||||
"LICENSE*",
|
||||
"README.md",
|
||||
"examples/**/*",
|
||||
]
|
||||
autolib = false
|
||||
autobins = false
|
||||
autoexamples = false
|
||||
autotests = false
|
||||
autobenches = false
|
||||
description = "Parse ANSI Style Escapes"
|
||||
readme = "README.md"
|
||||
keywords = [
|
||||
"ansi",
|
||||
"terminal",
|
||||
"color",
|
||||
"vte",
|
||||
]
|
||||
categories = ["command-line-interface"]
|
||||
license = "MIT OR Apache-2.0"
|
||||
repository = "https://github.com/rust-cli/anstyle.git"
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
all-features = true
|
||||
rustdoc-args = [
|
||||
"--cfg",
|
||||
"docsrs",
|
||||
"--generate-link-to-definition",
|
||||
]
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CHANGELOG.md"
|
||||
search = "Unreleased"
|
||||
replace = "{{version}}"
|
||||
min = 1
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CHANGELOG.md"
|
||||
search = '\.\.\.HEAD'
|
||||
replace = "...{{tag_name}}"
|
||||
exactly = 1
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CHANGELOG.md"
|
||||
search = "ReleaseDate"
|
||||
replace = "{{date}}"
|
||||
min = 1
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CHANGELOG.md"
|
||||
search = "<!-- next-header -->"
|
||||
replace = """
|
||||
<!-- next-header -->
|
||||
## [Unreleased] - ReleaseDate
|
||||
"""
|
||||
exactly = 1
|
||||
|
||||
[[package.metadata.release.pre-release-replacements]]
|
||||
file = "CHANGELOG.md"
|
||||
search = "<!-- next-url -->"
|
||||
replace = """
|
||||
<!-- next-url -->
|
||||
[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD"""
|
||||
exactly = 1
|
||||
|
||||
[features]
|
||||
core = ["dep:arrayvec"]
|
||||
default = ["utf8"]
|
||||
utf8 = ["dep:utf8parse"]
|
||||
|
||||
[lib]
|
||||
name = "anstyle_parse"
|
||||
path = "src/lib.rs"
|
||||
|
||||
[[example]]
|
||||
name = "parselog"
|
||||
path = "examples/parselog.rs"
|
||||
|
||||
[dependencies.arrayvec]
|
||||
version = "0.7.6"
|
||||
optional = true
|
||||
default-features = false
|
||||
|
||||
[dependencies.utf8parse]
|
||||
version = "0.2.2"
|
||||
optional = true
|
||||
|
||||
[dev-dependencies.codegenrs]
|
||||
version = "3.0.0"
|
||||
default-features = false
|
||||
|
||||
[dev-dependencies.divan]
|
||||
version = "0.1.16"
|
||||
|
||||
[dev-dependencies.proptest]
|
||||
version = "1.7.0"
|
||||
|
||||
[dev-dependencies.snapbox]
|
||||
version = "0.6.23"
|
||||
|
||||
[dev-dependencies.vte_generate_state_changes]
|
||||
version = "0.1.2"
|
||||
|
||||
[lints.clippy]
|
||||
bool_assert_comparison = "allow"
|
||||
branches_sharing_code = "allow"
|
||||
checked_conversions = "warn"
|
||||
collapsible_else_if = "allow"
|
||||
create_dir = "warn"
|
||||
dbg_macro = "warn"
|
||||
debug_assert_with_mut_call = "warn"
|
||||
doc_markdown = "warn"
|
||||
empty_enums = "warn"
|
||||
enum_glob_use = "warn"
|
||||
expl_impl_clone_on_copy = "warn"
|
||||
explicit_deref_methods = "warn"
|
||||
explicit_into_iter_loop = "warn"
|
||||
fallible_impl_from = "warn"
|
||||
filter_map_next = "warn"
|
||||
flat_map_option = "warn"
|
||||
float_cmp_const = "warn"
|
||||
fn_params_excessive_bools = "warn"
|
||||
from_iter_instead_of_collect = "warn"
|
||||
if_same_then_else = "allow"
|
||||
implicit_clone = "warn"
|
||||
imprecise_flops = "warn"
|
||||
inconsistent_struct_constructor = "warn"
|
||||
inefficient_to_string = "warn"
|
||||
infinite_loop = "warn"
|
||||
invalid_upcast_comparisons = "warn"
|
||||
large_digit_groups = "warn"
|
||||
large_stack_arrays = "warn"
|
||||
large_types_passed_by_value = "warn"
|
||||
let_and_return = "allow"
|
||||
linkedlist = "warn"
|
||||
lossy_float_literal = "warn"
|
||||
macro_use_imports = "warn"
|
||||
mem_forget = "warn"
|
||||
mutex_integer = "warn"
|
||||
needless_continue = "allow"
|
||||
needless_for_each = "warn"
|
||||
negative_feature_names = "warn"
|
||||
path_buf_push_overwrite = "warn"
|
||||
ptr_as_ptr = "warn"
|
||||
rc_mutex = "warn"
|
||||
redundant_feature_names = "warn"
|
||||
ref_option_ref = "warn"
|
||||
rest_pat_in_fully_bound_structs = "warn"
|
||||
result_large_err = "allow"
|
||||
same_functions_in_if_condition = "warn"
|
||||
self_named_module_files = "warn"
|
||||
semicolon_if_nothing_returned = "warn"
|
||||
str_to_string = "warn"
|
||||
string_add = "warn"
|
||||
string_add_assign = "warn"
|
||||
string_lit_as_bytes = "warn"
|
||||
todo = "warn"
|
||||
trait_duplication_in_bounds = "warn"
|
||||
uninlined_format_args = "warn"
|
||||
verbose_file_reads = "warn"
|
||||
wildcard_imports = "warn"
|
||||
zero_sized_map_values = "warn"
|
||||
|
||||
[lints.rust]
|
||||
unnameable_types = "warn"
|
||||
unreachable_pub = "warn"
|
||||
unsafe_op_in_unsafe_fn = "warn"
|
||||
unused_lifetimes = "warn"
|
||||
unused_macro_rules = "warn"
|
||||
unused_qualifications = "warn"
|
||||
|
||||
[lints.rust.rust_2018_idioms]
|
||||
level = "warn"
|
||||
priority = -1
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
[package]
|
||||
name = "anstyle-parse"
|
||||
version = "1.0.0"
|
||||
description = "Parse ANSI Style Escapes"
|
||||
categories = ["command-line-interface"]
|
||||
keywords = ["ansi", "terminal", "color", "vte"]
|
||||
repository.workspace = true
|
||||
license.workspace = true
|
||||
edition.workspace = true
|
||||
rust-version.workspace = true
|
||||
include.workspace = true
|
||||
|
||||
[package.metadata.docs.rs]
|
||||
all-features = true
|
||||
rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
|
||||
|
||||
[package.metadata.release]
|
||||
pre-release-replacements = [
|
||||
{file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
|
||||
{file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
|
||||
{file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
|
||||
{file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
|
||||
{file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD", exactly=1},
|
||||
]
|
||||
|
||||
[dependencies]
|
||||
arrayvec = { version = "0.7.6", default-features = false, optional = true }
|
||||
utf8parse = { version = "0.2.2", optional = true }
|
||||
|
||||
[features]
|
||||
default = ["utf8"]
|
||||
core = ["dep:arrayvec"]
|
||||
utf8 = ["dep:utf8parse"]
|
||||
|
||||
[dev-dependencies]
|
||||
codegenrs = { version = "3.0.0", default-features = false }
|
||||
divan = "0.1.16"
|
||||
proptest = "1.7.0"
|
||||
snapbox = "0.6.23"
|
||||
vte_generate_state_changes = { version = "0.1.2" }
|
||||
|
||||
[[bench]]
|
||||
name = "parse"
|
||||
harness = false
|
||||
required-features = ["utf8"]
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
@@ -0,0 +1,202 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "{}"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright {yyyy} {name of copyright owner}
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
Copyright (c) Individual contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,33 @@
|
||||
# anstyle-parse
|
||||
|
||||
> Parse [Parse ANSI Style Escapes](https://vt100.net/emu/dec_ansi_parser)
|
||||
|
||||
[][Documentation]
|
||||

|
||||
[](https://crates.io/crates/anstyle-parse)
|
||||
|
||||
## License
|
||||
|
||||
Licensed under either of
|
||||
|
||||
* Apache License, Version 2.0, ([LICENSE-APACHE](LICENSE-APACHE) or <https://www.apache.org/licenses/LICENSE-2.0>)
|
||||
* MIT license ([LICENSE-MIT](LICENSE-MIT) or <https://opensource.org/license/mit>)
|
||||
|
||||
at your option.
|
||||
|
||||
## [Contribute](../../CONTRIBUTING.md)
|
||||
|
||||
Unless you explicitly state otherwise, any contribution intentionally
|
||||
submitted for inclusion in the work by you, as defined in the Apache-2.0
|
||||
license, shall be dual-licensed as above, without any additional terms or
|
||||
conditions.
|
||||
|
||||
### Special Thanks
|
||||
|
||||
[chrisduerr](https://github.com/alacritty/vte/commits?author=chrisduerr) and the
|
||||
[alacritty project](https://github.com/alacritty/alacritty) for
|
||||
[vte](https://crates.io/crates/vte) which
|
||||
[this was forked from](https://github.com/alacritty/vte/issues/82)
|
||||
|
||||
[Crates.io]: https://crates.io/crates/anstyle-parse
|
||||
[Documentation]: https://docs.rs/anstyle-parse
|
||||
@@ -0,0 +1,72 @@
|
||||
//! Parse input from stdin and log actions on stdout
|
||||
use std::io::{self, Read};
|
||||
|
||||
use anstyle_parse::{DefaultCharAccumulator, Params, Parser, Perform};
|
||||
|
||||
/// A type implementing Perform that just logs actions
|
||||
struct Log;
|
||||
|
||||
impl Perform for Log {
|
||||
fn print(&mut self, c: char) {
|
||||
println!("[print] {c:?}");
|
||||
}
|
||||
|
||||
fn execute(&mut self, byte: u8) {
|
||||
println!("[execute] {byte:02x}");
|
||||
}
|
||||
|
||||
fn hook(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) {
|
||||
println!(
|
||||
"[hook] params={params:?}, intermediates={intermediates:?}, ignore={ignore:?}, char={c:?}"
|
||||
);
|
||||
}
|
||||
|
||||
fn put(&mut self, byte: u8) {
|
||||
println!("[put] {byte:02x}");
|
||||
}
|
||||
|
||||
fn unhook(&mut self) {
|
||||
println!("[unhook]");
|
||||
}
|
||||
|
||||
fn osc_dispatch(&mut self, params: &[&[u8]], bell_terminated: bool) {
|
||||
println!("[osc_dispatch] params={params:?} bell_terminated={bell_terminated}");
|
||||
}
|
||||
|
||||
fn csi_dispatch(&mut self, params: &Params, intermediates: &[u8], ignore: bool, c: u8) {
|
||||
println!(
|
||||
"[csi_dispatch] params={params:#?}, intermediates={intermediates:?}, ignore={ignore:?}, char={c:?}"
|
||||
);
|
||||
}
|
||||
|
||||
fn esc_dispatch(&mut self, intermediates: &[u8], ignore: bool, byte: u8) {
|
||||
println!(
|
||||
"[esc_dispatch] intermediates={intermediates:?}, ignore={ignore:?}, byte={byte:02x}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let input = io::stdin();
|
||||
let mut handle = input.lock();
|
||||
|
||||
let mut statemachine = Parser::<DefaultCharAccumulator>::new();
|
||||
let mut performer = Log;
|
||||
|
||||
let mut buf = [0; 2048];
|
||||
|
||||
loop {
|
||||
match handle.read(&mut buf) {
|
||||
Ok(0) => break,
|
||||
Ok(n) => {
|
||||
for byte in &buf[..n] {
|
||||
statemachine.advance(&mut performer, *byte);
|
||||
}
|
||||
}
|
||||
Err(err) => {
|
||||
println!("err: {err}");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+442
@@ -0,0 +1,442 @@
|
||||
//! Parser for implementing virtual terminal emulators
|
||||
//!
|
||||
//! [`Parser`] is implemented according to [Paul Williams' ANSI parser
|
||||
//! state machine]. The state machine doesn't assign meaning to the parsed data
|
||||
//! and is thus not itself sufficient for writing a terminal emulator. Instead,
|
||||
//! it is expected that an implementation of [`Perform`] is provided which does
|
||||
//! something useful with the parsed data. The [`Parser`] handles the book
|
||||
//! keeping, and the [`Perform`] gets to simply handle actions.
|
||||
//!
|
||||
//! # Examples
|
||||
//!
|
||||
//! For an example of using the [`Parser`] please see the examples folder. The example included
|
||||
//! there simply logs all the actions [`Perform`] does. One quick thing to see it in action is to
|
||||
//! pipe `vim` into it
|
||||
//!
|
||||
//! ```sh
|
||||
//! cargo build --release --example parselog
|
||||
//! vim | target/release/examples/parselog
|
||||
//! ```
|
||||
//!
|
||||
//! Just type `:q` to exit.
|
||||
//!
|
||||
//! # Differences from original state machine description
|
||||
//!
|
||||
//! * UTF-8 Support for Input
|
||||
//! * OSC Strings can be terminated by 0x07
|
||||
//! * Only supports 7-bit codes. Some 8-bit codes are still supported, but they no longer work in
|
||||
//! all states.
|
||||
//!
|
||||
//! [Paul Williams' ANSI parser state machine]: https://vt100.net/emu/dec_ansi_parser
|
||||
#![cfg_attr(not(test), no_std)]
|
||||
#![cfg_attr(docsrs, feature(doc_cfg))]
|
||||
#![allow(missing_docs)]
|
||||
#![warn(clippy::print_stderr)]
|
||||
#![warn(clippy::print_stdout)]
|
||||
|
||||
#[cfg(not(feature = "core"))]
|
||||
extern crate alloc;
|
||||
|
||||
use core::mem::MaybeUninit;
|
||||
|
||||
#[cfg(feature = "core")]
|
||||
use arrayvec::ArrayVec;
|
||||
#[cfg(feature = "utf8")]
|
||||
use utf8parse as utf8;
|
||||
|
||||
mod params;
|
||||
pub mod state;
|
||||
|
||||
pub use params::{Params, ParamsIter};
|
||||
|
||||
use state::{state_change, Action, State};
|
||||
|
||||
const MAX_INTERMEDIATES: usize = 2;
|
||||
const MAX_OSC_PARAMS: usize = 16;
|
||||
#[cfg(feature = "core")]
|
||||
const MAX_OSC_RAW: usize = 1024;
|
||||
|
||||
/// Parser for raw _VTE_ protocol which delegates actions to a [`Perform`]
|
||||
#[allow(unused_qualifications)]
|
||||
#[derive(Default, Clone, Debug, PartialEq, Eq)]
|
||||
pub struct Parser<C = DefaultCharAccumulator> {
|
||||
state: State,
|
||||
intermediates: [u8; MAX_INTERMEDIATES],
|
||||
intermediate_idx: usize,
|
||||
params: Params,
|
||||
param: u16,
|
||||
#[cfg(feature = "core")]
|
||||
osc_raw: ArrayVec<u8, MAX_OSC_RAW>,
|
||||
#[cfg(not(feature = "core"))]
|
||||
osc_raw: alloc::vec::Vec<u8>,
|
||||
osc_params: [(usize, usize); MAX_OSC_PARAMS],
|
||||
osc_num_params: usize,
|
||||
ignoring: bool,
|
||||
utf8_parser: C,
|
||||
}
|
||||
|
||||
impl<C> Parser<C>
|
||||
where
|
||||
C: CharAccumulator,
|
||||
{
|
||||
/// Create a new Parser
|
||||
pub fn new() -> Parser {
|
||||
Parser::default()
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn params(&self) -> &Params {
|
||||
&self.params
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn intermediates(&self) -> &[u8] {
|
||||
&self.intermediates[..self.intermediate_idx]
|
||||
}
|
||||
|
||||
/// Advance the parser state
|
||||
///
|
||||
/// Requires a [`Perform`] in case `byte` triggers an action
|
||||
#[inline]
|
||||
pub fn advance<P: Perform>(&mut self, performer: &mut P, byte: u8) {
|
||||
// Utf8 characters are handled out-of-band.
|
||||
if let State::Utf8 = self.state {
|
||||
self.process_utf8(performer, byte);
|
||||
return;
|
||||
}
|
||||
|
||||
let (state, action) = state_change(self.state, byte);
|
||||
self.perform_state_change(performer, state, action, byte);
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn process_utf8<P>(&mut self, performer: &mut P, byte: u8)
|
||||
where
|
||||
P: Perform,
|
||||
{
|
||||
if let Some(c) = self.utf8_parser.add(byte) {
|
||||
performer.print(c);
|
||||
self.state = State::Ground;
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn perform_state_change<P>(&mut self, performer: &mut P, state: State, action: Action, byte: u8)
|
||||
where
|
||||
P: Perform,
|
||||
{
|
||||
match state {
|
||||
State::Anywhere => {
|
||||
// Just run the action
|
||||
self.perform_action(performer, action, byte);
|
||||
}
|
||||
state => {
|
||||
match self.state {
|
||||
State::DcsPassthrough => {
|
||||
self.perform_action(performer, Action::Unhook, byte);
|
||||
}
|
||||
State::OscString => {
|
||||
self.perform_action(performer, Action::OscEnd, byte);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
|
||||
match action {
|
||||
Action::Nop => (),
|
||||
action => {
|
||||
self.perform_action(performer, action, byte);
|
||||
}
|
||||
}
|
||||
|
||||
match state {
|
||||
State::CsiEntry | State::DcsEntry | State::Escape => {
|
||||
self.perform_action(performer, Action::Clear, byte);
|
||||
}
|
||||
State::DcsPassthrough => {
|
||||
self.perform_action(performer, Action::Hook, byte);
|
||||
}
|
||||
State::OscString => {
|
||||
self.perform_action(performer, Action::OscStart, byte);
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
|
||||
// Assume the new state
|
||||
self.state = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Separate method for `osc_dispatch` that borrows self as read-only
|
||||
///
|
||||
/// The aliasing is needed here for multiple slices into `self.osc_raw`
|
||||
#[inline]
|
||||
fn osc_dispatch<P: Perform>(&self, performer: &mut P, byte: u8) {
|
||||
let mut slices: [MaybeUninit<&[u8]>; MAX_OSC_PARAMS] =
|
||||
unsafe { MaybeUninit::uninit().assume_init() };
|
||||
|
||||
for (i, slice) in slices.iter_mut().enumerate().take(self.osc_num_params) {
|
||||
let indices = self.osc_params[i];
|
||||
*slice = MaybeUninit::new(&self.osc_raw[indices.0..indices.1]);
|
||||
}
|
||||
|
||||
unsafe {
|
||||
let num_params = self.osc_num_params;
|
||||
let params = &slices[..num_params] as *const [MaybeUninit<&[u8]>] as *const [&[u8]];
|
||||
performer.osc_dispatch(&*params, byte == 0x07);
|
||||
}
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn perform_action<P: Perform>(&mut self, performer: &mut P, action: Action, byte: u8) {
|
||||
match action {
|
||||
Action::Print => performer.print(byte as char),
|
||||
Action::Execute => performer.execute(byte),
|
||||
Action::Hook => {
|
||||
if self.params.is_full() {
|
||||
self.ignoring = true;
|
||||
} else {
|
||||
self.params.push(self.param);
|
||||
}
|
||||
|
||||
performer.hook(self.params(), self.intermediates(), self.ignoring, byte);
|
||||
}
|
||||
Action::Put => performer.put(byte),
|
||||
Action::OscStart => {
|
||||
self.osc_raw.clear();
|
||||
self.osc_num_params = 0;
|
||||
}
|
||||
Action::OscPut => {
|
||||
#[cfg(feature = "core")]
|
||||
{
|
||||
if self.osc_raw.is_full() {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let idx = self.osc_raw.len();
|
||||
|
||||
// Param separator
|
||||
if byte == b';' {
|
||||
let param_idx = self.osc_num_params;
|
||||
match param_idx {
|
||||
// Only process up to MAX_OSC_PARAMS
|
||||
MAX_OSC_PARAMS => return,
|
||||
|
||||
// First param is special - 0 to current byte index
|
||||
0 => {
|
||||
self.osc_params[param_idx] = (0, idx);
|
||||
}
|
||||
|
||||
// All other params depend on previous indexing
|
||||
_ => {
|
||||
let prev = self.osc_params[param_idx - 1];
|
||||
let begin = prev.1;
|
||||
self.osc_params[param_idx] = (begin, idx);
|
||||
}
|
||||
}
|
||||
|
||||
self.osc_num_params += 1;
|
||||
} else {
|
||||
self.osc_raw.push(byte);
|
||||
}
|
||||
}
|
||||
Action::OscEnd => {
|
||||
let param_idx = self.osc_num_params;
|
||||
let idx = self.osc_raw.len();
|
||||
|
||||
match param_idx {
|
||||
// Finish last parameter if not already maxed
|
||||
MAX_OSC_PARAMS => (),
|
||||
|
||||
// First param is special - 0 to current byte index
|
||||
0 => {
|
||||
self.osc_params[param_idx] = (0, idx);
|
||||
self.osc_num_params += 1;
|
||||
}
|
||||
|
||||
// All other params depend on previous indexing
|
||||
_ => {
|
||||
let prev = self.osc_params[param_idx - 1];
|
||||
let begin = prev.1;
|
||||
self.osc_params[param_idx] = (begin, idx);
|
||||
self.osc_num_params += 1;
|
||||
}
|
||||
}
|
||||
self.osc_dispatch(performer, byte);
|
||||
}
|
||||
Action::Unhook => performer.unhook(),
|
||||
Action::CsiDispatch => {
|
||||
if self.params.is_full() {
|
||||
self.ignoring = true;
|
||||
} else {
|
||||
self.params.push(self.param);
|
||||
}
|
||||
|
||||
performer.csi_dispatch(self.params(), self.intermediates(), self.ignoring, byte);
|
||||
}
|
||||
Action::EscDispatch => {
|
||||
performer.esc_dispatch(self.intermediates(), self.ignoring, byte);
|
||||
}
|
||||
Action::Collect => {
|
||||
if self.intermediate_idx == MAX_INTERMEDIATES {
|
||||
self.ignoring = true;
|
||||
} else {
|
||||
self.intermediates[self.intermediate_idx] = byte;
|
||||
self.intermediate_idx += 1;
|
||||
}
|
||||
}
|
||||
Action::Param => {
|
||||
if self.params.is_full() {
|
||||
self.ignoring = true;
|
||||
return;
|
||||
}
|
||||
|
||||
if byte == b';' {
|
||||
self.params.push(self.param);
|
||||
self.param = 0;
|
||||
} else if byte == b':' {
|
||||
self.params.extend(self.param);
|
||||
self.param = 0;
|
||||
} else {
|
||||
// Continue collecting bytes into param
|
||||
self.param = self.param.saturating_mul(10);
|
||||
self.param = self.param.saturating_add((byte - b'0') as u16);
|
||||
}
|
||||
}
|
||||
Action::Clear => {
|
||||
// Reset everything on ESC/CSI/DCS entry
|
||||
self.intermediate_idx = 0;
|
||||
self.ignoring = false;
|
||||
self.param = 0;
|
||||
|
||||
self.params.clear();
|
||||
}
|
||||
Action::BeginUtf8 => self.process_utf8(performer, byte),
|
||||
Action::Ignore => (),
|
||||
Action::Nop => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Build a `char` out of bytes
|
||||
pub trait CharAccumulator: Default {
|
||||
/// Build a `char` out of bytes
|
||||
///
|
||||
/// Return `None` when more data is needed
|
||||
fn add(&mut self, byte: u8) -> Option<char>;
|
||||
}
|
||||
|
||||
/// Most flexible [`CharAccumulator`] for [`Parser`] based on active features
|
||||
#[cfg(feature = "utf8")]
|
||||
pub type DefaultCharAccumulator = Utf8Parser;
|
||||
#[cfg(not(feature = "utf8"))]
|
||||
pub type DefaultCharAccumulator = AsciiParser;
|
||||
|
||||
/// Only allow parsing 7-bit ASCII
|
||||
#[allow(clippy::exhaustive_structs)]
|
||||
#[derive(Default, Clone, Debug, PartialEq, Eq)]
|
||||
pub struct AsciiParser;
|
||||
|
||||
impl CharAccumulator for AsciiParser {
|
||||
fn add(&mut self, _byte: u8) -> Option<char> {
|
||||
unreachable!("multi-byte UTF8 characters are unsupported")
|
||||
}
|
||||
}
|
||||
|
||||
/// Allow parsing UTF-8
|
||||
#[cfg(feature = "utf8")]
|
||||
#[derive(Default, Clone, Debug, PartialEq, Eq)]
|
||||
pub struct Utf8Parser {
|
||||
utf8_parser: utf8::Parser,
|
||||
}
|
||||
|
||||
#[cfg(feature = "utf8")]
|
||||
impl CharAccumulator for Utf8Parser {
|
||||
fn add(&mut self, byte: u8) -> Option<char> {
|
||||
let mut c = None;
|
||||
let mut receiver = VtUtf8Receiver(&mut c);
|
||||
self.utf8_parser.advance(&mut receiver, byte);
|
||||
c
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(feature = "utf8")]
|
||||
struct VtUtf8Receiver<'a>(&'a mut Option<char>);
|
||||
|
||||
#[cfg(feature = "utf8")]
|
||||
impl utf8::Receiver for VtUtf8Receiver<'_> {
|
||||
fn codepoint(&mut self, c: char) {
|
||||
*self.0 = Some(c);
|
||||
}
|
||||
|
||||
fn invalid_sequence(&mut self) {
|
||||
*self.0 = Some('�');
|
||||
}
|
||||
}
|
||||
|
||||
/// Performs actions requested by the [`Parser`]
|
||||
///
|
||||
/// Actions in this case mean, for example, handling a CSI escape sequence describing cursor
|
||||
/// movement, or simply printing characters to the screen.
|
||||
///
|
||||
/// The methods on this type correspond to actions described in
|
||||
/// <http://vt100.net/emu/dec_ansi_parser>. I've done my best to describe them in
|
||||
/// a useful way in my own words for completeness, but the site should be
|
||||
/// referenced if something isn't clear. If the site disappears at some point in
|
||||
/// the future, consider checking archive.org.
|
||||
pub trait Perform {
|
||||
/// Draw a character to the screen and update states.
|
||||
fn print(&mut self, _c: char) {}
|
||||
|
||||
/// Execute a C0 or C1 control function.
|
||||
fn execute(&mut self, _byte: u8) {}
|
||||
|
||||
/// Invoked when a final character arrives in first part of device control string.
|
||||
///
|
||||
/// The control function should be determined from the private marker, final character, and
|
||||
/// execute with a parameter list. A handler should be selected for remaining characters in the
|
||||
/// string; the handler function should subsequently be called by `put` for every character in
|
||||
/// the control string.
|
||||
///
|
||||
/// The `ignore` flag indicates that more than two intermediates arrived and
|
||||
/// subsequent characters were ignored.
|
||||
fn hook(&mut self, _params: &Params, _intermediates: &[u8], _ignore: bool, _action: u8) {}
|
||||
|
||||
/// Pass bytes as part of a device control string to the handle chosen in `hook`. C0 controls
|
||||
/// will also be passed to the handler.
|
||||
fn put(&mut self, _byte: u8) {}
|
||||
|
||||
/// Called when a device control string is terminated.
|
||||
///
|
||||
/// The previously selected handler should be notified that the DCS has
|
||||
/// terminated.
|
||||
fn unhook(&mut self) {}
|
||||
|
||||
/// Dispatch an operating system command.
|
||||
fn osc_dispatch(&mut self, _params: &[&[u8]], _bell_terminated: bool) {}
|
||||
|
||||
/// A final character has arrived for a CSI sequence
|
||||
///
|
||||
/// The `ignore` flag indicates that either more than two intermediates arrived
|
||||
/// or the number of parameters exceeded the maximum supported length,
|
||||
/// and subsequent characters were ignored.
|
||||
fn csi_dispatch(
|
||||
&mut self,
|
||||
_params: &Params,
|
||||
_intermediates: &[u8],
|
||||
_ignore: bool,
|
||||
_action: u8,
|
||||
) {
|
||||
}
|
||||
|
||||
/// The final character of an escape sequence has arrived.
|
||||
///
|
||||
/// The `ignore` flag indicates that more than two intermediates arrived and
|
||||
/// subsequent characters were ignored.
|
||||
fn esc_dispatch(&mut self, _intermediates: &[u8], _ignore: bool, _byte: u8) {}
|
||||
}
|
||||
|
||||
#[doc = include_str!("../README.md")]
|
||||
#[cfg(doctest)]
|
||||
pub struct ReadmeDoctests;
|
||||
@@ -0,0 +1,143 @@
|
||||
//! Fixed size parameters list with optional subparameters.
|
||||
|
||||
use core::fmt::{self, Debug, Formatter};
|
||||
|
||||
pub(crate) const MAX_PARAMS: usize = 32;
|
||||
|
||||
#[derive(Default, Clone, PartialEq, Eq)]
|
||||
pub struct Params {
|
||||
/// Number of subparameters for each parameter.
|
||||
///
|
||||
/// For each entry in the `params` slice, this stores the length of the param as number of
|
||||
/// subparams at the same index as the param in the `params` slice.
|
||||
///
|
||||
/// At the subparam positions the length will always be `0`.
|
||||
subparams: [u8; MAX_PARAMS],
|
||||
|
||||
/// All parameters and subparameters.
|
||||
params: [u16; MAX_PARAMS],
|
||||
|
||||
/// Number of suparameters in the current parameter.
|
||||
current_subparams: u8,
|
||||
|
||||
/// Total number of parameters and subparameters.
|
||||
len: usize,
|
||||
}
|
||||
|
||||
impl Params {
|
||||
/// Returns the number of parameters.
|
||||
#[inline]
|
||||
pub fn len(&self) -> usize {
|
||||
self.len
|
||||
}
|
||||
|
||||
/// Returns `true` if there are no parameters present.
|
||||
#[inline]
|
||||
pub fn is_empty(&self) -> bool {
|
||||
self.len == 0
|
||||
}
|
||||
|
||||
/// Returns an iterator over all parameters and subparameters.
|
||||
#[inline]
|
||||
pub fn iter(&self) -> ParamsIter<'_> {
|
||||
ParamsIter::new(self)
|
||||
}
|
||||
|
||||
/// Returns `true` if there is no more space for additional parameters.
|
||||
#[inline]
|
||||
pub(crate) fn is_full(&self) -> bool {
|
||||
self.len == MAX_PARAMS
|
||||
}
|
||||
|
||||
/// Clear all parameters.
|
||||
#[inline]
|
||||
pub(crate) fn clear(&mut self) {
|
||||
self.current_subparams = 0;
|
||||
self.len = 0;
|
||||
}
|
||||
|
||||
/// Add an additional parameter.
|
||||
#[inline]
|
||||
pub(crate) fn push(&mut self, item: u16) {
|
||||
self.subparams[self.len - self.current_subparams as usize] = self.current_subparams + 1;
|
||||
self.params[self.len] = item;
|
||||
self.current_subparams = 0;
|
||||
self.len += 1;
|
||||
}
|
||||
|
||||
/// Add an additional subparameter to the current parameter.
|
||||
#[inline]
|
||||
pub(crate) fn extend(&mut self, item: u16) {
|
||||
self.subparams[self.len - self.current_subparams as usize] = self.current_subparams + 1;
|
||||
self.params[self.len] = item;
|
||||
self.current_subparams += 1;
|
||||
self.len += 1;
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoIterator for &'a Params {
|
||||
type IntoIter = ParamsIter<'a>;
|
||||
type Item = &'a [u16];
|
||||
|
||||
fn into_iter(self) -> Self::IntoIter {
|
||||
self.iter()
|
||||
}
|
||||
}
|
||||
|
||||
/// Immutable subparameter iterator.
|
||||
pub struct ParamsIter<'a> {
|
||||
params: &'a Params,
|
||||
index: usize,
|
||||
}
|
||||
|
||||
impl<'a> ParamsIter<'a> {
|
||||
fn new(params: &'a Params) -> Self {
|
||||
Self { params, index: 0 }
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Iterator for ParamsIter<'a> {
|
||||
type Item = &'a [u16];
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
if self.index >= self.params.len() {
|
||||
return None;
|
||||
}
|
||||
|
||||
// Get all subparameters for the current parameter.
|
||||
let num_subparams = self.params.subparams[self.index];
|
||||
let param = &self.params.params[self.index..self.index + num_subparams as usize];
|
||||
|
||||
// Jump to the next parameter.
|
||||
self.index += num_subparams as usize;
|
||||
|
||||
Some(param)
|
||||
}
|
||||
|
||||
fn size_hint(&self) -> (usize, Option<usize>) {
|
||||
let remaining = self.params.len() - self.index;
|
||||
(remaining, Some(remaining))
|
||||
}
|
||||
}
|
||||
|
||||
impl Debug for Params {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "[")?;
|
||||
|
||||
for (i, param) in self.iter().enumerate() {
|
||||
if i != 0 {
|
||||
write!(f, ";")?;
|
||||
}
|
||||
|
||||
for (i, subparam) in param.iter().enumerate() {
|
||||
if i != 0 {
|
||||
write!(f, ":")?;
|
||||
}
|
||||
|
||||
subparam.fmt(f)?;
|
||||
}
|
||||
}
|
||||
|
||||
write!(f, "]")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,218 @@
|
||||
use super::{pack, unpack, Action, State};
|
||||
|
||||
use snapbox::file;
|
||||
use vte_generate_state_changes::generate_state_changes;
|
||||
|
||||
#[test]
|
||||
fn table() {
|
||||
let mut content = vec![];
|
||||
generate_table(&mut content).unwrap();
|
||||
|
||||
let content = String::from_utf8(content).unwrap();
|
||||
let content = codegenrs::rustfmt(&content, None).unwrap();
|
||||
snapbox::assert_data_eq!(content, file!["table.rs"].raw());
|
||||
}
|
||||
|
||||
#[allow(clippy::write_literal)]
|
||||
fn generate_table(file: &mut impl std::io::Write) -> std::io::Result<()> {
|
||||
writeln!(
|
||||
file,
|
||||
"// This file is @generated by {}",
|
||||
std::file!().replace('\\', "/")
|
||||
)?;
|
||||
writeln!(file)?;
|
||||
writeln!(
|
||||
file,
|
||||
"{}",
|
||||
r#"#[rustfmt::skip]
|
||||
pub(crate) const STATE_CHANGES: [[u8; 256]; 16] = ["#
|
||||
)?;
|
||||
|
||||
for (state, entries) in STATE_CHANGES.iter().enumerate() {
|
||||
writeln!(file, " // {:?}", State::try_from(state as u8).unwrap())?;
|
||||
write!(file, " [")?;
|
||||
let mut last_entry = None;
|
||||
for packed in entries {
|
||||
let (next_state, action) = unpack(*packed);
|
||||
if last_entry != Some(packed) {
|
||||
writeln!(file)?;
|
||||
writeln!(file, " // {next_state:?} {action:?}")?;
|
||||
write!(file, " ")?;
|
||||
}
|
||||
write!(file, "0x{packed:0>2x}, ")?;
|
||||
last_entry = Some(packed);
|
||||
}
|
||||
writeln!(file)?;
|
||||
writeln!(file, " ],")?;
|
||||
}
|
||||
|
||||
writeln!(file, "{}", r#"];"#)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// This is the state change table. It's indexed first by current state and then by the next
|
||||
/// character in the pty stream.
|
||||
pub(crate) static STATE_CHANGES: [[u8; 256]; 16] = state_changes();
|
||||
generate_state_changes!(state_changes, {
|
||||
Anywhere {
|
||||
0x18 => (Ground, Execute),
|
||||
0x1a => (Ground, Execute),
|
||||
0x1b => (Escape, Nop),
|
||||
},
|
||||
|
||||
Ground {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x7f => (Anywhere, Print),
|
||||
0x80..=0x8f => (Anywhere, Execute),
|
||||
0x91..=0x9a => (Anywhere, Execute),
|
||||
0x9c => (Anywhere, Execute),
|
||||
// Beginning of UTF-8 2 byte sequence
|
||||
0xc2..=0xdf => (Utf8, BeginUtf8),
|
||||
// Beginning of UTF-8 3 byte sequence
|
||||
0xe0..=0xef => (Utf8, BeginUtf8),
|
||||
// Beginning of UTF-8 4 byte sequence
|
||||
0xf0..=0xf4 => (Utf8, BeginUtf8),
|
||||
},
|
||||
|
||||
Escape {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (EscapeIntermediate, Collect),
|
||||
0x30..=0x4f => (Ground, EscDispatch),
|
||||
0x51..=0x57 => (Ground, EscDispatch),
|
||||
0x59 => (Ground, EscDispatch),
|
||||
0x5a => (Ground, EscDispatch),
|
||||
0x5c => (Ground, EscDispatch),
|
||||
0x60..=0x7e => (Ground, EscDispatch),
|
||||
0x5b => (CsiEntry, Nop),
|
||||
0x5d => (OscString, Nop),
|
||||
0x50 => (DcsEntry, Nop),
|
||||
0x58 => (SosPmApcString, Nop),
|
||||
0x5e => (SosPmApcString, Nop),
|
||||
0x5f => (SosPmApcString, Nop),
|
||||
},
|
||||
|
||||
EscapeIntermediate {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x2f => (Anywhere, Collect),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x30..=0x7e => (Ground, EscDispatch),
|
||||
},
|
||||
|
||||
CsiEntry {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (CsiIntermediate, Collect),
|
||||
0x30..=0x39 => (CsiParam, Param),
|
||||
0x3a..=0x3b => (CsiParam, Param),
|
||||
0x3c..=0x3f => (CsiParam, Collect),
|
||||
0x40..=0x7e => (Ground, CsiDispatch),
|
||||
},
|
||||
|
||||
CsiIgnore {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x3f => (Anywhere, Ignore),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x40..=0x7e => (Ground, Nop),
|
||||
},
|
||||
|
||||
CsiParam {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x30..=0x39 => (Anywhere, Param),
|
||||
0x3a..=0x3b => (Anywhere, Param),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x3c..=0x3f => (CsiIgnore, Nop),
|
||||
0x20..=0x2f => (CsiIntermediate, Collect),
|
||||
0x40..=0x7e => (Ground, CsiDispatch),
|
||||
},
|
||||
|
||||
CsiIntermediate {
|
||||
0x00..=0x17 => (Anywhere, Execute),
|
||||
0x19 => (Anywhere, Execute),
|
||||
0x1c..=0x1f => (Anywhere, Execute),
|
||||
0x20..=0x2f => (Anywhere, Collect),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x30..=0x3f => (CsiIgnore, Nop),
|
||||
0x40..=0x7e => (Ground, CsiDispatch),
|
||||
},
|
||||
|
||||
DcsEntry {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (DcsIntermediate, Collect),
|
||||
0x30..=0x39 => (DcsParam, Param),
|
||||
0x3a..=0x3b => (DcsParam, Param),
|
||||
0x3c..=0x3f => (DcsParam, Collect),
|
||||
0x40..=0x7e => (DcsPassthrough, Nop),
|
||||
},
|
||||
|
||||
DcsIntermediate {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0x2f => (Anywhere, Collect),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x30..=0x3f => (DcsIgnore, Nop),
|
||||
0x40..=0x7e => (DcsPassthrough, Nop),
|
||||
},
|
||||
|
||||
DcsIgnore {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0x7f => (Anywhere, Ignore),
|
||||
0x9c => (Ground, Nop),
|
||||
},
|
||||
|
||||
DcsParam {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x30..=0x39 => (Anywhere, Param),
|
||||
0x3a..=0x3b => (Anywhere, Param),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x3c..=0x3f => (DcsIgnore, Nop),
|
||||
0x20..=0x2f => (DcsIntermediate, Collect),
|
||||
0x40..=0x7e => (DcsPassthrough, Nop),
|
||||
},
|
||||
|
||||
DcsPassthrough {
|
||||
0x00..=0x17 => (Anywhere, Put),
|
||||
0x19 => (Anywhere, Put),
|
||||
0x1c..=0x1f => (Anywhere, Put),
|
||||
0x20..=0x7e => (Anywhere, Put),
|
||||
0x7f => (Anywhere, Ignore),
|
||||
0x9c => (Ground, Nop),
|
||||
},
|
||||
|
||||
SosPmApcString {
|
||||
0x00..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0x7f => (Anywhere, Ignore),
|
||||
0x9c => (Ground, Nop),
|
||||
},
|
||||
|
||||
OscString {
|
||||
0x00..=0x06 => (Anywhere, Ignore),
|
||||
0x07 => (Ground, Nop),
|
||||
0x08..=0x17 => (Anywhere, Ignore),
|
||||
0x19 => (Anywhere, Ignore),
|
||||
0x1c..=0x1f => (Anywhere, Ignore),
|
||||
0x20..=0xff => (Anywhere, OscPut),
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,171 @@
|
||||
#![allow(clippy::exhaustive_enums)]
|
||||
|
||||
use core::mem;
|
||||
|
||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
||||
#[repr(u8)]
|
||||
#[derive(Default)]
|
||||
pub enum State {
|
||||
Anywhere = 0,
|
||||
CsiEntry = 1,
|
||||
CsiIgnore = 2,
|
||||
CsiIntermediate = 3,
|
||||
CsiParam = 4,
|
||||
DcsEntry = 5,
|
||||
DcsIgnore = 6,
|
||||
DcsIntermediate = 7,
|
||||
DcsParam = 8,
|
||||
DcsPassthrough = 9,
|
||||
Escape = 10,
|
||||
EscapeIntermediate = 11,
|
||||
#[default]
|
||||
Ground = 12,
|
||||
OscString = 13,
|
||||
SosPmApcString = 14,
|
||||
Utf8 = 15,
|
||||
}
|
||||
|
||||
impl TryFrom<u8> for State {
|
||||
type Error = u8;
|
||||
|
||||
#[inline(always)]
|
||||
fn try_from(raw: u8) -> Result<Self, Self::Error> {
|
||||
STATES.get(raw as usize).ok_or(raw).copied()
|
||||
}
|
||||
}
|
||||
|
||||
const STATES: [State; 16] = [
|
||||
State::Anywhere,
|
||||
State::CsiEntry,
|
||||
State::CsiIgnore,
|
||||
State::CsiIntermediate,
|
||||
State::CsiParam,
|
||||
State::DcsEntry,
|
||||
State::DcsIgnore,
|
||||
State::DcsIntermediate,
|
||||
State::DcsParam,
|
||||
State::DcsPassthrough,
|
||||
State::Escape,
|
||||
State::EscapeIntermediate,
|
||||
State::Ground,
|
||||
State::OscString,
|
||||
State::SosPmApcString,
|
||||
State::Utf8,
|
||||
];
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||
#[repr(u8)]
|
||||
#[derive(Default)]
|
||||
pub enum Action {
|
||||
#[default]
|
||||
Nop = 0,
|
||||
Clear = 1,
|
||||
Collect = 2,
|
||||
CsiDispatch = 3,
|
||||
EscDispatch = 4,
|
||||
Execute = 5,
|
||||
Hook = 6,
|
||||
Ignore = 7,
|
||||
OscEnd = 8,
|
||||
OscPut = 9,
|
||||
OscStart = 10,
|
||||
Param = 11,
|
||||
Print = 12,
|
||||
Put = 13,
|
||||
Unhook = 14,
|
||||
BeginUtf8 = 15,
|
||||
}
|
||||
|
||||
impl TryFrom<u8> for Action {
|
||||
type Error = u8;
|
||||
|
||||
#[inline(always)]
|
||||
fn try_from(raw: u8) -> Result<Self, Self::Error> {
|
||||
ACTIONS.get(raw as usize).ok_or(raw).copied()
|
||||
}
|
||||
}
|
||||
|
||||
const ACTIONS: [Action; 16] = [
|
||||
Action::Nop,
|
||||
Action::Clear,
|
||||
Action::Collect,
|
||||
Action::CsiDispatch,
|
||||
Action::EscDispatch,
|
||||
Action::Execute,
|
||||
Action::Hook,
|
||||
Action::Ignore,
|
||||
Action::OscEnd,
|
||||
Action::OscPut,
|
||||
Action::OscStart,
|
||||
Action::Param,
|
||||
Action::Print,
|
||||
Action::Put,
|
||||
Action::Unhook,
|
||||
Action::BeginUtf8,
|
||||
];
|
||||
|
||||
/// Unpack a u8 into a State and Action
|
||||
///
|
||||
/// The implementation of this assumes that there are *precisely* 16 variants for both Action and
|
||||
/// State. Furthermore, it assumes that the enums are tag-only; that is, there is no data in any
|
||||
/// variant.
|
||||
///
|
||||
/// Bad things will happen if those invariants are violated.
|
||||
#[inline(always)]
|
||||
pub(crate) const fn unpack(delta: u8) -> (State, Action) {
|
||||
unsafe {
|
||||
(
|
||||
// State is stored in bottom 4 bits
|
||||
mem::transmute::<u8, State>(delta & 0x0f),
|
||||
// Action is stored in top 4 bits
|
||||
mem::transmute::<u8, Action>(delta >> 4),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
#[cfg(test)]
|
||||
pub(crate) const fn pack(state: State, action: Action) -> u8 {
|
||||
((action as u8) << 4) | state as u8
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn unpack_state_action() {
|
||||
match unpack(0xee) {
|
||||
(State::SosPmApcString, Action::Unhook) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0x0f) {
|
||||
(State::Utf8, Action::Nop) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0xff) {
|
||||
(State::Utf8, Action::BeginUtf8) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pack_state_action() {
|
||||
match unpack(0xee) {
|
||||
(State::SosPmApcString, Action::Unhook) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0x0f) {
|
||||
(State::Utf8, Action::Nop) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
|
||||
match unpack(0xff) {
|
||||
(State::Utf8, Action::BeginUtf8) => (),
|
||||
_ => panic!("unpack failed"),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
//! ANSI escape code parsing state machine
|
||||
|
||||
#[cfg(test)]
|
||||
mod codegen;
|
||||
mod definitions;
|
||||
mod table;
|
||||
|
||||
#[cfg(test)]
|
||||
pub(crate) use definitions::pack;
|
||||
pub(crate) use definitions::unpack;
|
||||
pub use definitions::Action;
|
||||
pub use definitions::State;
|
||||
|
||||
/// Transition to next [`State`]
|
||||
///
|
||||
/// Note: This does not directly support UTF-8.
|
||||
/// - If the data is validated as UTF-8 (e.g. `str`) or single-byte C1 control codes are
|
||||
/// unsupported, then treat [`Action::BeginUtf8`] and [`Action::Execute`] for UTF-8 continuations
|
||||
/// as [`Action::Print`].
|
||||
/// - If the data is not validated, then a UTF-8 state machine will need to be implemented on top,
|
||||
/// starting with [`Action::BeginUtf8`].
|
||||
///
|
||||
/// Note: When [`State::Anywhere`] is returned, revert back to the prior state.
|
||||
#[inline]
|
||||
pub const fn state_change(state: State, byte: u8) -> (State, Action) {
|
||||
// Handle state changes in the anywhere state before evaluating changes
|
||||
// for current state.
|
||||
let mut change = state_change_(State::Anywhere, byte);
|
||||
if change == 0 {
|
||||
change = state_change_(state, byte);
|
||||
}
|
||||
|
||||
// Unpack into a state and action
|
||||
unpack(change)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
const fn state_change_(state: State, byte: u8) -> u8 {
|
||||
let state_idx = state as usize;
|
||||
let byte_idx = byte as usize;
|
||||
|
||||
table::STATE_CHANGES[state_idx][byte_idx]
|
||||
}
|
||||
@@ -0,0 +1,361 @@
|
||||
// This file is @generated by crates/anstyle-parse/src/state/codegen.rs
|
||||
|
||||
#[rustfmt::skip]
|
||||
pub(crate) const STATE_CHANGES: [[u8; 256]; 16] = [
|
||||
// Anywhere
|
||||
[
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Execute
|
||||
0x5c,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Ground Execute
|
||||
0x5c,
|
||||
// Escape Nop
|
||||
0x0a,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiEntry
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// CsiIntermediate Collect
|
||||
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
|
||||
// CsiParam Param
|
||||
0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4,
|
||||
// CsiParam Collect
|
||||
0x24, 0x24, 0x24, 0x24,
|
||||
// Ground CsiDispatch
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiIgnore
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Ground Nop
|
||||
0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiIntermediate
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Collect
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
// CsiIgnore Nop
|
||||
0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
|
||||
// Ground CsiDispatch
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// CsiParam
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// CsiIntermediate Collect
|
||||
0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23, 0x23,
|
||||
// Anywhere Param
|
||||
0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
|
||||
// CsiIgnore Nop
|
||||
0x02, 0x02, 0x02, 0x02,
|
||||
// Ground CsiDispatch
|
||||
0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c, 0x3c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsEntry
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// DcsIntermediate Collect
|
||||
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
|
||||
// DcsParam Param
|
||||
0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8, 0xb8,
|
||||
// DcsParam Collect
|
||||
0x28, 0x28, 0x28, 0x28,
|
||||
// DcsPassthrough Nop
|
||||
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsIgnore
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsIntermediate
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Collect
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
// DcsIgnore Nop
|
||||
0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
|
||||
// DcsPassthrough Nop
|
||||
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsParam
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// DcsIntermediate Collect
|
||||
0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27, 0x27,
|
||||
// Anywhere Param
|
||||
0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0, 0xb0,
|
||||
// DcsIgnore Nop
|
||||
0x06, 0x06, 0x06, 0x06,
|
||||
// DcsPassthrough Nop
|
||||
0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// DcsPassthrough
|
||||
[
|
||||
// Anywhere Put
|
||||
0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Put
|
||||
0xd0,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Put
|
||||
0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0, 0xd0,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// Escape
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// EscapeIntermediate Collect
|
||||
0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b, 0x2b,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// DcsEntry Nop
|
||||
0x05,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// SosPmApcString Nop
|
||||
0x0e,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c,
|
||||
// CsiEntry Nop
|
||||
0x01,
|
||||
// Ground EscDispatch
|
||||
0x4c,
|
||||
// OscString Nop
|
||||
0x0d,
|
||||
// SosPmApcString Nop
|
||||
0x0e, 0x0e,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// EscapeIntermediate
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Collect
|
||||
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||
// Ground EscDispatch
|
||||
0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// Ground
|
||||
[
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Print
|
||||
0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Execute
|
||||
0x50,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Utf8 BeginUtf8
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// OscString
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere OscPut
|
||||
0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90,
|
||||
],
|
||||
// SosPmApcString
|
||||
[
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00,
|
||||
// Anywhere Ignore
|
||||
0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00,
|
||||
// Anywhere Ignore
|
||||
0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70, 0x70,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
// Ground Nop
|
||||
0x0c,
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
// Utf8
|
||||
[
|
||||
// Anywhere Nop
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
],
|
||||
];
|
||||
Reference in new issue
Block a user