Age | Commit message (Collapse) | Author | Files | Lines | |
---|---|---|---|---|---|
2024-02-07 | Tweak $json.*() function names and semantics | Boris Kolpackov | 1 | -19/+19 | |
2024-02-07 | Use reverse to fundamental types semantics in $json.member_value() | Boris Kolpackov | 1 | -1/+1 | |
Feels like this is an equivalent context to subscript/iteration. | |||||
2024-02-07 | Add experimental support for JSON value types | Boris Kolpackov | 3 | -0/+231 | |
New types: json json_array json_object New functions: $json.value_type(<json>) $json.value_size(<json>) $json.member_{name,value}(<json-member>) $json.object_names(<json-object>) $json.array_size(<json-array>) $json.array_find(<json-array>, <json>) $json.array_find_index(<json-array>, <json>) $json.load(<path>) $json.parse(<text>) $json.serialize(<json>[, <indentation>]) For example, to load a JSON value from a file: j = $json.load($src_base/board.json) Or to construct it in a buildfile: j = [json] one@1 two@([json] 2 3 4) three@([json] x@1 y@-1) This can also be done incrementally with append/prepend: j = [json_object] j += one@1 j += two@([json] 2 3 4) j += three@([json] x@1 y@-1) Instead of using this JSON-like syntax, one can also specify valid JSON input text: j = [json] '{"one":1, "two":[2, 3, 4], "three":{"x":1, "y":-1}' Besides the above set of functions, other handy ways to access components in a JSON value are iteration and subscript. For example: for m: $j print $member_name($m) $member_value($m) print ($j[three]) A subscript can be nested: print ($j[two][1]) print ($j[three][x]) While a JSON value can be printed directly like any other value, the representation will not be pretty-printed. As a result, for complex JSON values, printing a serialized representation might be a more readable option: info $serialize($j) | |||||
2023-11-02 | Add $first()/$second() pair functions | Boris Kolpackov | 1 | -0/+25 | |
2023-05-30 | Add $path.posix_string() and $path.posix_representation() functions | Karen Arutyunov | 1 | -0/+72 | |
2022-12-15 | Add $regex.filter[_out]_{match,search}() functions | Karen Arutyunov | 1 | -0/+116 | |
2022-09-30 | Move integer and bool function to separate source/testscript files | Boris Kolpackov | 3 | -39/+47 | |
2022-09-29 | Add $find(<sequence>, <value>), $find_index(<sequence>, <value>) functions | Boris Kolpackov | 4 | -2/+60 | |
The $find() function returns true if the sequence contains the specified value. The $find_index() function returns the index of the first element in the sequence that is equal to the specified value or $size(<sequence>) if none is found. For string sequences, it's possible to request case- insensitive comparison with a flag. | |||||
2022-09-23 | Add $is_a(<name>, <target-type>), $filter[_out](<names>, <target-types>) ↵ | Boris Kolpackov | 1 | -0/+36 | |
functions $is_a() returns true if the <name>'s target type is-a <target-type>. Note that this is a dynamic type check that takes into account target type inheritance. $filter[_out]() return names with target types which are-a (filter) or not are-a (filter_out) one of <target-types>. In particular, these functions are useful for filtering prerequisite targets ($<) in ad hoc recipes and rules. | |||||
2022-09-22 | Add $integer_sequence(<begin>, <end>[, <step>]) function | Boris Kolpackov | 1 | -0/+8 | |
It returns the list of uint64 integers starting from <begin> (including) to <end> (excluding) with the specified <step> or 1 if unspecified. For example: hdr = foo.hxx bar.hxx baz.hxx src = foo.cxx bar.cxx baz.cxx assert ($size($hdr) == $size($src)) "hdr and src expected to be parallel" for i: $integer_sequence(0, $size($hdr)) { h = ($hdr[$i]) s = ($src[$i]) ... } | |||||
2022-09-22 | Add support for hex notation for uint64 type | Boris Kolpackov | 1 | -0/+8 | |
Specifically, now we can do: x = [uint64] 0x0000ffff cxx.poptions += "-DOFFSET=$x" # -DOFFSET=65535 cxx.poptions += "-DOFFSET=$string($x, 16)" # -DOFFSET=0xffff cxx.poptions += "-DOFFSET=$string($x, 16, 8)" # -DOFFSET=0x0000ffff Note that there is no hex notation support for the int64 (signed) type. | |||||
2021-12-02 | Fix path function test failure on Windows | Boris Kolpackov | 1 | -1/+1 | |
2021-12-02 | Add $root_directory(<path>) function | Boris Kolpackov | 1 | -0/+22 | |
2021-12-02 | Add $relative(<path>,<dir-path>) function | Boris Kolpackov | 1 | -0/+6 | |
2021-11-26 | Add $size(string), $size(path), and $size(dir_path) functions | Boris Kolpackov | 2 | -0/+18 | |
2021-11-04 | Fix test | Boris Kolpackov | 1 | -1/+1 | |
2021-11-04 | Add $size() function to get size of sequence (names, strings, etc) | Boris Kolpackov | 3 | -5/+24 | |
2021-11-02 | Add $sort() function | Boris Kolpackov | 3 | -1/+34 | |
Available overloads: $sort(<names> [, <flags>]) $sort(<ints> [, <flags>]) $sort(<strings> [, <flags>]) $sort(<paths> [, <flags>]) $sort(<dir_paths> [, <flags>]) The following flag is supported by the all overloads: dedup - in addition to sorting also remove duplicates Additionally, the strings overload also support the following flag: icase - sort ignoring case Note that on case-insensitive filesystem the paths and dir_paths overload's order is case-insensitive. | |||||
2021-09-14 | Consistently install prerequisites from any scope by default | Boris Kolpackov | 1 | -0/+1 | |
It is also now possible to adjust this behavior with global config.install.scope override. Valid values for this variable are: project -- only from project strong -- from strong amalgamation weak -- from weak amalgamation global -- from all projects (default) | |||||
2020-12-08 | Redo $normalize(true) as separate $actualize() | Karen Arutyunov | 1 | -9/+12 | |
2020-09-28 | Add $string.trim() function | Boris Kolpackov | 1 | -0/+7 | |
2020-07-18 | Add $regex.find_match() and $regex.find_search() functions | Karen Arutyunov | 1 | -0/+84 | |
2020-04-03 | Skip unmatched lines in $regex.replace_lines() if format_no_copy flag is ↵ | Karen Arutyunov | 1 | -0/+20 | |
specified | |||||
2020-03-17 | Add $defined(<variable>) function | Boris Kolpackov | 1 | -2/+17 | |
2020-02-12 | Add builtins support for $process.run*() functions | Karen Arutyunov | 1 | -16/+128 | |
2020-02-07 | Drop copyright notice from source code | Karen Arutyunov | 14 | -14/+0 | |
2019-11-15 | Generalize attributes to be comma-separated with arbitrary values | Boris Kolpackov | 1 | -3/+3 | |
Before: x = [string null] After: x = [string, null] | |||||
2019-11-14 | Require attributes to be separated from words and similar on RHS | Boris Kolpackov | 1 | -1/+1 | |
2019-11-08 | Add $regex.replace_lines() function | Karen Arutyunov | 1 | -0/+82 | |
2019-11-05 | Fix tests | Boris Kolpackov | 5 | -4/+24 | |
2019-10-01 | Add support for $string.icasecmp() | Karen Arutyunov | 2 | -0/+32 | |
2019-10-01 | Make $regex.{match,search}() to return NULL for no match if return_match or ↵ | Karen Arutyunov | 1 | -4/+4 | |
return_match flag is specified | |||||
2019-10-01 | Rename $filesystem.path_match() to $path.match() | Karen Arutyunov | 2 | -79/+79 | |
2019-10-01 | Adapt to swapping of entry and pattern parameters in butl::path_match() | Karen Arutyunov | 1 | -19/+19 | |
2019-01-16 | Update copyright year | Karen Arutyunov | 12 | -12/+12 | |
2018-09-04 | Rename .test/test{} to .testscript/testscript{} | Boris Kolpackov | 6 | -6/+6 | |
2018-07-16 | Resolve function overload via the argument reversal to untyped | Boris Kolpackov | 2 | -14/+2 | |
2018-06-20 | Add $process.run() and $process.run_regex() functions | Boris Kolpackov | 2 | -0/+35 | |
$process.run(<prog>[ <args>...]) Return trimmed stdout. $process.run_regex(<prog>[ <args>...], <pat> [, <fmt>]) Return stdout lines matched and optionally processed with regex. Each line of stdout (including the customary trailing blank) is matched (as a whole) against <pat> and, if successful, returned, optionally processed with <fmt>, as an element of a list. | |||||
2018-05-19 | Update copyright year | Karen Arutyunov | 10 | -10/+10 | |
2018-05-19 | Get rid of doc{version} and types for testscript and manifest in buildfiles | Karen Arutyunov | 5 | -5/+5 | |
2017-11-10 | Add $directory(), $base(), $leaf() and $extension() functions | Karen Arutyunov | 1 | -0/+65 | |
2017-09-11 | Add ability to pass scope to buildfile functions, add $install.resolve() | Boris Kolpackov | 2 | -0/+38 | |
2017-08-30 | Add $regex.split(), $regex.merge() and $regex.apply() functions | Karen Arutyunov | 1 | -0/+96 | |
2017-06-27 | Add support for regex function family | Karen Arutyunov | 2 | -0/+260 | |
2017-06-26 | Add support for $path_search() and $path_match() | Karen Arutyunov | 2 | -0/+160 | |
2017-06-21 | Add support for $envvar() function | Karen Arutyunov | 1 | -0/+61 | |
2017-03-14 | Implement implied buildfile support | Boris Kolpackov | 1 | -5/+0 | |
In essence, if the buildfile is: ./: */ Then it can be omitted entirely (provided there is at least one subdirectory). | |||||
2017-01-23 | Implement automatic loading of directory buildfiles | Boris Kolpackov | 2 | -4/+2 | |
Now instead of explicitly writing: d = foo/ bar/ ./: $d include $d We can (usually) just write: ./: foo/ bar/ | |||||
2017-01-19 | Add support for portable path modifer and dot character escaping inversion | Karen Arutyunov | 1 | -3/+3 | |
2017-01-05 | Update copyright year | Boris Kolpackov | 5 | -5/+5 | |