Loading repository data…
Loading repository data…
yoav-lavi / repository
Melody is a language that compiles to regular expressions and aims to be more readable and maintainable
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Note: these are for the currently supported syntax and may change
16 of "na";
2 of match {
<space>;
"batman";
}
// 🦇🦸♂️
Turns into
(?:na){16}(?: batman){2}
"#";
some of <word>;
// #melody
Turns into
#\w+
some of <alphabetic>;
<space>;
"1";
2 of <digit>;
// classname 1xx
Turns into
[a-zA-Z]+ 1\d{2}
some of match {
2 of <space>;
}
some of <char>;
";";
// let value = 5;
Turns into
(?: {2})+.+;
<start>;
option of "v";
capture major {
some of <digit>;
}
".";
capture minor {
some of <digit>;
}
".";
capture patch {
some of <digit>;
}
<end>;
// v1.0.0
Turns into
^v?(?<major>\d+)\.(?<minor>\d+)\.(?<patch>\d+)$
You can try Melody in your browser using the playground
Read the book here
cargo install melody_cli
git clone https://github.com/yoav-lavi/melody.git
cd melody
cargo install --path crates/melody_cli
aarch64 and x86_64) can be downloaded from the release pageBrew (macOS and Linux)
brew install melody
Arch Linux (maintained by @ilai-deutel)
Installation with an AUR helper, for instance using paru:
paru -Syu melody
Install manually with makepkg:
git clone https://aur.archlinux.org/melody.git
cd melody
makepkg -si
Declarative installation using /etc/nixos/configuration.nix:
{ pkgs, ... }:
{
environment.systemPackages = with pkgs; [
melody
];
}
Imperative installation using nix-env:
nix-env -iA nixos.melody
USAGE:
melody [OPTIONS] [INPUT_FILE_PATH]
ARGS:
<INPUT_FILE_PATH> Read from a file
Use '-' and or pipe input to read from stdin
OPTIONS:
-f, --test-file <TEST_FILE>
Test the compiled regex against the contents of a file
--generate-completions <COMPLETIONS>
Outputs completions for the selected shell
To use, write the output to the appropriate location for your shell
-h, --help
Print help information
-n, --no-color
Print output with no color
-o, --output <OUTPUT_FILE_PATH>
Write to a file
-r, --repl
Start the Melody REPL
-t, --test <TEST>
Test the compiled regex against a string
-V, --version
Print version information
See the changelog here or in the release page
... of - used to express a specific amount of a pattern. equivalent to regex {5} (assuming 5 of ...)... to ... of - used to express an amount within a range of a pattern. equivalent to regex {5,9} (assuming 5 to 9 of ...)over ... of - used to express more than an amount of a pattern. equivalent to regex {6,} (assuming over 5 of ...)some of - used to express 1 or more of a pattern. equivalent to regex +any of - used to express 0 or more of a pattern. equivalent to regex *option of - used to express 0 or 1 of a pattern. equivalent to regex ?All quantifiers can be preceded by lazy to match the least amount of characters rather than the most characters (greedy). Equivalent to regex +?, *?, etc.
<char> - matches any single character. equivalent to regex .<space> - matches a space character. equivalent to regex <whitespace> - matches any kind of whitespace character. equivalent to regex \s or [ \t\n\v\f\r]<newline> - matches a newline character. equivalent to regex \n<tab> - matches a tab character. equivalent to regex \t<return> - matches a carriage return character. equivalent to regex \r<feed> - matches a form feed character. equivalent to regex \f<null> - matches a null characther. equivalent to regex \0<digit> - matches any single digit. equivalent to regex \d or [0-9]<vertical> - matches a vertical tab character. equivalent to regex \v<word> - matches a word character (any latin letter, any digit or an underscore). equivalent to regex \w or [a-zA-Z0-9_]<alphabetic> - matches any single latin letter. equivalent to regex [a-zA-Z]<alphanumeric> - matches any single latin letter or any single digit. equivalent to regex [a-zA-Z0-9]<boundary> - Matches a character between a character matched by <word> and a character not matched by <word> without consuming the character. equivalent to regex \b<backspace> - matches a backspace control character. equivalent to regex [\b]All symbols can be preceeded with not to match any character other than the symbol
<start> - matches the start of the string. equivalent to regex ^<end> - matches the end of the string. equivalent to regex $Note: these are not supported when testing in the CLI (-t or -f) as the regex engine used does not support unicode categories. These require using the u flag.
<category::letter> - any kind of letter from any language
<category::lowercase_letter> - a lowercase letter that has an uppercase variant<category::uppercase_letter> - an uppercase letter that has a lowercase variant.<category::titlecase_letter> - a letter that appears at the start of a word when only the first letter of the word is capitalized<category::cased_letter> - a letter that exists in lowercase and uppercase variants<category::modifier_letter> - a special character that is used like a letter<category::other_letter> - a letter or ideograph that does not have lowercase and uppercase variants<category::mark> - a character intended to be combined with another character (e.g. accents, umlauts, enclosing boxes, etc.)
<category::non_spacing_mark> - a character intended to be combined with another character without taking up extra space (e.g. accents, umlauts, etc.)<category::spacing_combining_mark> - a character intended to be combined with another character that takes up extra space (vowel signs in many Eastern languages)<category::enclosing_mark> - a character that encloses the character it is combined with (circle, square, keycap, etc.)<category::separator> - any kind of whitespace or invisible separator
<category::space_separator> - a whitespace character that is invisible, but does take up space<category::line_separator> - line separator character U+2028<category::paragraph_separator> - paragraph separator character U+2029<category::symbol> - math symbols, currency signs, dingbats, box-drawing characters, etc
<category::math_symbol> - any mathematical symbol<category::currency_symbol> - any currency sign<category::modifier_symbol> - a combining character (mark) as a full character on its own<category::other_symbol> - various symbols that are not math symbols, currency signs, or combining characters<category::number> - any kind of numeric character in any script
<category::decimal_digit_number> - a digit zero through nine in any script except ideographic scripts<category::letter_number> - a number that looks like a letter, such as a Roman numeral<category::other_number> - a superscript or subscript digit, or a number that is not a digit 0–9 (excluding numbers from ideographic scripts)<category::punctuation> - any kind of punctuation character
<category::dash_punctuation> - any kind of hyphen or dash<category::open_punctuation> - any kind of opening bracket<category::close_punctuation> - any kind of closing bracket<category::initial_punctuation> - any kind of opening quote<category::final_punctuation> - any kind of