| 29 | } |
| 30 | |
| 31 | std::span<const char> Expr(std::span<const char>& sp) |
| 32 | { |
| 33 | int level = 0; |
| 34 | auto it = sp.begin(); |
| 35 | while (it != sp.end()) { |
| 36 | if (*it == '(' || *it == '{') { |
| 37 | ++level; |
| 38 | } else if (level && (*it == ')' || *it == '}')) { |
| 39 | --level; |
| 40 | } else if (level == 0 && (*it == ')' || *it == '}' || *it == ',')) { |
| 41 | break; |
| 42 | } |
| 43 | ++it; |
| 44 | } |
| 45 | std::span<const char> ret = sp.first(it - sp.begin()); |
| 46 | sp = sp.subspan(it - sp.begin()); |
| 47 | return ret; |
| 48 | } |
| 49 | |
| 50 | } // namespace script |