Skip to content

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

Notifications You must be signed in to change notification settings

chipsenkbeil/winsplit-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

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

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages