Compare commits
No commits in common. "fc533dbeea89cdbd2c1694c62662497db14befb3" and "9e4d7e4ae49654e3e0e64da5b3485f3d3e503141" have entirely different histories.
fc533dbeea
...
9e4d7e4ae4
@ -12,7 +12,6 @@ export type syntaxerr = !(
|
|||||||
invalid_escape |
|
invalid_escape |
|
||||||
invalid_boolean |
|
invalid_boolean |
|
||||||
invalid_numeric |
|
invalid_numeric |
|
||||||
invalid_integer |
|
|
||||||
expected_single);
|
expected_single);
|
||||||
|
|
||||||
// Returned when a malformed group header is encountered while parsing.
|
// Returned when a malformed group header is encountered while parsing.
|
||||||
@ -36,10 +35,6 @@ export type invalid_boolean = !void;
|
|||||||
// was given.
|
// was given.
|
||||||
export type invalid_numeric = !void;
|
export type invalid_numeric = !void;
|
||||||
|
|
||||||
// Returned when a numeric value was expected while parsing, but something else
|
|
||||||
// was given.
|
|
||||||
export type invalid_integer = !void;
|
|
||||||
|
|
||||||
// Returned when a singular value was expected while parsing, but multiple
|
// Returned when a singular value was expected while parsing, but multiple
|
||||||
// values were given.
|
// values were given.
|
||||||
export type expected_single = !void;
|
export type expected_single = !void;
|
||||||
@ -53,7 +48,6 @@ case invalid_ascii => yield "invalid ascii";
|
|||||||
case invalid_escape => yield "invalid escape";
|
case invalid_escape => yield "invalid escape";
|
||||||
case invalid_boolean => yield "invalid boolean";
|
case invalid_boolean => yield "invalid boolean";
|
||||||
case invalid_numeric => yield "invalid numeric";
|
case invalid_numeric => yield "invalid numeric";
|
||||||
case invalid_integer => yield "invalid integer";
|
|
||||||
case expected_single => yield "expected single";
|
case expected_single => yield "expected single";
|
||||||
case let err: io::error => yield io::strerror(err);
|
case let err: io::error => yield io::strerror(err);
|
||||||
case let err: utf8::invalid => yield utf8::strerror(err);
|
case let err: utf8::invalid => yield utf8::strerror(err);
|
||||||
|
@ -2,7 +2,7 @@ use ascii;
|
|||||||
use strconv;
|
use strconv;
|
||||||
use strings;
|
use strings;
|
||||||
|
|
||||||
// TODO numeric should really be f32
|
// TODO icon_theme references an "integer" data type. support that here.
|
||||||
|
|
||||||
// Parses a string value. It may contain all ASCII characters except for control
|
// Parses a string value. It may contain all ASCII characters except for control
|
||||||
// characters. The memory must be freed by the caller.
|
// characters. The memory must be freed by the caller.
|
||||||
@ -56,15 +56,6 @@ case =>
|
|||||||
yield invalid_numeric;
|
yield invalid_numeric;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Parses an integer value. While there is no documentation on this data type,
|
|
||||||
// it is referred to by the Icon Theme Specification, §4, tables 2-3.
|
|
||||||
export fn parse_integer(in: str) (int | error) = match(strconv::stoi(in)) {
|
|
||||||
case let integer: int => yield integer;
|
|
||||||
case =>
|
|
||||||
if (strings::contains(in, ";")) return expected_single;
|
|
||||||
yield invalid_integer;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Parses multiple string values. See [[parse_string]] for more information. The
|
// Parses multiple string values. See [[parse_string]] for more information. The
|
||||||
// memory must be freed by the caller.
|
// memory must be freed by the caller.
|
||||||
// Specification: §4
|
// Specification: §4
|
||||||
@ -134,23 +125,6 @@ export fn parse_numerics(in: str) ([]f64 | error) = {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Parses multiple integer values. See [[parse_integer]] for more information.
|
|
||||||
// The memory must be freed by the caller.
|
|
||||||
export fn parse_integers(in: str) ([]int | error) = {
|
|
||||||
let splitte = split(in);
|
|
||||||
let result: []int = alloc([], 0);
|
|
||||||
for (let in => splitter_next(&splitte)) {
|
|
||||||
match (parse_integer(in)) {
|
|
||||||
case let number: int =>
|
|
||||||
append(result, number);
|
|
||||||
case let err: error =>
|
|
||||||
free(result);
|
|
||||||
return err;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
type string_escaper = []u8;
|
type string_escaper = []u8;
|
||||||
|
|
||||||
fn escape_string(in: str) string_escaper = strings::toutf8(in): string_escaper;
|
fn escape_string(in: str) string_escaper = strings::toutf8(in): string_escaper;
|
||||||
|
@ -51,14 +51,6 @@ use strings;
|
|||||||
assert(parse_numeric("234;7.4") is expected_single);
|
assert(parse_numeric("234;7.4") is expected_single);
|
||||||
};
|
};
|
||||||
|
|
||||||
@test fn parse_integer() void = {
|
|
||||||
assert(parse_integer("9")! == 9);
|
|
||||||
assert(parse_integer("2348")! == 2348);
|
|
||||||
assert(parse_integer("-324")! == -324);
|
|
||||||
assert(parse_integer("324.9") is invalid_integer);
|
|
||||||
assert(parse_integer("324.0") is invalid_integer);
|
|
||||||
};
|
|
||||||
|
|
||||||
@test fn parse_strings() void = {
|
@test fn parse_strings() void = {
|
||||||
let correct: []str = [
|
let correct: []str = [
|
||||||
"b\r\tird",
|
"b\r\tird",
|
||||||
@ -142,28 +134,6 @@ use strings;
|
|||||||
assert(parse_numerics(";5;") is invalid_numeric);
|
assert(parse_numerics(";5;") is invalid_numeric);
|
||||||
};
|
};
|
||||||
|
|
||||||
@test fn parse_integers() void = {
|
|
||||||
let correct: []int = [
|
|
||||||
5,
|
|
||||||
34,
|
|
||||||
-29,
|
|
||||||
32498,
|
|
||||||
];
|
|
||||||
let got = parse_integers("5;34;-29;32498")!;
|
|
||||||
defer free(got);
|
|
||||||
for (let index = 0z; index < len(correct); index += 1) {
|
|
||||||
assert(index < len(got), "ran out");
|
|
||||||
let correct = correct[index];
|
|
||||||
let got = got[index];
|
|
||||||
fmt::printf("[{}]\t[{}]\n", correct, got)!;
|
|
||||||
assert(correct == got);
|
|
||||||
};
|
|
||||||
assert(len(got) == len(correct), "not done");
|
|
||||||
assert(parse_integers("hello;world") is invalid_integer);
|
|
||||||
assert(parse_integers("5;;") is invalid_integer);
|
|
||||||
assert(parse_integers(";5;") is invalid_integer);
|
|
||||||
};
|
|
||||||
|
|
||||||
@test fn string_escaper_next_a() void = {
|
@test fn string_escaper_next_a() void = {
|
||||||
let escaper = escape_string("bird;water;;river;");
|
let escaper = escape_string("bird;water;;river;");
|
||||||
let correct: []str = [
|
let correct: []str = [
|
||||||
|
Loading…
Reference in New Issue
Block a user