#split #quote #windows #words #shell #command-line-arguments

no-std winsplit

Library to split string into command line arguments mirroring CommandLineToArgV with VC++ 2008 parsing rules

1 unstable release

0.1.0 Aug 4, 2022

#742 in Command-line interface

Download history 565/week @ 2023-12-18 419/week @ 2023-12-25 260/week @ 2024-01-01 624/week @ 2024-01-08 560/week @ 2024-01-15 796/week @ 2024-01-22 459/week @ 2024-01-29 1089/week @ 2024-02-05 895/week @ 2024-02-12 725/week @ 2024-02-19 521/week @ 2024-02-26 1267/week @ 2024-03-04 894/week @ 2024-03-11 1048/week @ 2024-03-18 750/week @ 2024-03-25 780/week @ 2024-04-01

3,526 downloads per month
Used in 32 crates (4 directly)

MIT/Apache

24KB
275 lines

winsplit

Crates.io Docs CI

Like shell-words, but for Windows that somewhat mirrors CommandLineToArgvW, following VC++ 2008 parsing rules.

Written purely in Rust, so runs on any operating system! Windows is not a requirement!

Minimum tested Rust version is 1.56.1, but this may compile and work on earlier versions!

Installation

[Dependencies]
winsplit = "0.1"

If you want to use this without std library, this library can be compiled for use with alloc by disabling the std feature:

[Dependencies]
winsplit = { version = "0.1", default-features = false }

Usage

let args = winsplit::split(
    r#"C:\ProgramFiles\Example\example.exe --key "some value" arg1 arg2"#
);
assert_eq!(
    args, 
    &[
        r"C:\ProgramFiles\Example\example.exe",
        "--key",
        "some value",
        "arg1",
        "arg2"
    ]
);

Parsing Rules

This library follows the 2008 parsing rules for VC++ 9.9 (msvcr90.dll) that was released with Visual Studio 2008. See C/C++ parameter parsing rules for more details.

You can also check out the mirror of the rules and examples at the wiki documentation page for this repository.

Special Thanks

Goes to David Deley for documenting the complexities of the Windows parameter parsing logic and providing numerous examples found at https://daviddeley.com/autohotkey/parameters/parameters.htm.

License

This project is licensed under either of

Apache License, Version 2.0, (LICENSE-APACHE or apache-license) MIT license (LICENSE-MIT or mit-license) at your option.

No runtime deps