#quote #string #split #character #no-std

no-std splitty

a string splitter taking quotes into account

4 releases (stable)

1.0.2 Aug 3, 2024
1.0.1 Sep 24, 2022
1.0.0 Sep 23, 2022
0.1.0 Dec 18, 2020

#21 in Parser tooling

Download history 1499/week @ 2024-07-30 1196/week @ 2024-08-06 1160/week @ 2024-08-13 1088/week @ 2024-08-20 863/week @ 2024-08-27 1150/week @ 2024-09-03 1004/week @ 2024-09-10 1054/week @ 2024-09-17 1498/week @ 2024-09-24 1314/week @ 2024-10-01 864/week @ 2024-10-08 1235/week @ 2024-10-15 1385/week @ 2024-10-22 1049/week @ 2024-10-29 1254/week @ 2024-11-05 1098/week @ 2024-11-12

5,057 downloads per month
Used in broot

MIT license

9KB
120 lines

MIT Latest Version docs Chat on Miaou

splitty

A no-std string splitter for which spaces between quotes aren't separators.

Quotes not starting or ending a substring are handled as ordinary characters.

use splitty::*;

let cmd = "xterm -e \"vi /some/path\"";

let mut token = split_unquoted_char(cmd, ' ')
    .unwrap_quotes(true);

assert_eq!(token.next(), Some("xterm"));
assert_eq!(token.next(), Some("-e"));
assert_eq!(token.next(), Some("vi /some/path"));

lib.rs:

A no-std string splitter for which spaces between quotes aren't separators.

use splitty::*;

let cmd = "xterm -e \"vi /some/path\"";

let mut token = split_unquoted_char(cmd, ' ')
    .unwrap_quotes(true);

assert_eq!(token.next(), Some("xterm"));
assert_eq!(token.next(), Some("-e"));
assert_eq!(token.next(), Some("vi /some/path"));
assert_eq!(token.next(), None);

Quotes not starting or ending a substring are handled as ordinary characters.

Splitty has a limited set of features but is tested for corner-cases:

use splitty::*;

let cmd = r#" a  "2 * 试" x"x "z "#;

let mut token = split_unquoted_whitespace(cmd)
    .unwrap_quotes(true);

assert_eq!(token.next(), Some("a"));
assert_eq!(token.next(), Some("2 * 试"));
assert_eq!(token.next(), Some("x\"x"));
assert_eq!(token.next(), Some("\"z "));
assert_eq!(token.next(), None);

No runtime deps