mirror of
https://github.com/mikefarah/yq.git
synced 2026-07-04 19:35:38 +00:00
S2-S4: tighten lexer condition, fix doc header, add Unicode example
Agent-Logs-Url: https://github.com/mikefarah/yq/sessions/ec06083e-e20a-45d2-bf7e-4e1fa7be1073 Co-authored-by: mikefarah <1151925+mikefarah@users.noreply.github.com>
This commit is contained in:
parent
1afa3c73dc
commit
adb150d1fb
@ -1,4 +1,4 @@
|
|||||||
# Slice/Splice Array or String
|
# Slice Array or String
|
||||||
|
|
||||||
The slice operator works on both arrays and strings. Like the `jq` equivalent, `.[10:15]` will return a subarray (or substring) of length 5, starting from index 10 inclusive, up to index 15 exclusive. Negative numbers count backwards from the end of the array or string.
|
The slice operator works on both arrays and strings. Like the `jq` equivalent, `.[10:15]` will return a subarray (or substring) of length 5, starting from index 10 inclusive, up to index 15 exclusive. Negative numbers count backwards from the end of the array or string.
|
||||||
|
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
# Slice/Splice Array or String
|
# Slice Array or String
|
||||||
|
|
||||||
The slice operator works on both arrays and strings. Like the `jq` equivalent, `.[10:15]` will return a subarray (or substring) of length 5, starting from index 10 inclusive, up to index 15 exclusive. Negative numbers count backwards from the end of the array or string.
|
The slice operator works on both arrays and strings. Like the `jq` equivalent, `.[10:15]` will return a subarray (or substring) of length 5, starting from index 10 inclusive, up to index 15 exclusive. Negative numbers count backwards from the end of the array or string.
|
||||||
|
|
||||||
@ -165,3 +165,19 @@ will output
|
|||||||
ralia
|
ralia
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Slicing strings - Unicode
|
||||||
|
Indices are rune-based, so multibyte characters are handled correctly
|
||||||
|
|
||||||
|
Given a sample.yml file of:
|
||||||
|
```yaml
|
||||||
|
greeting: héllo
|
||||||
|
```
|
||||||
|
then
|
||||||
|
```bash
|
||||||
|
yq '.greeting[1:3]' sample.yml
|
||||||
|
```
|
||||||
|
will output
|
||||||
|
```yaml
|
||||||
|
él
|
||||||
|
```
|
||||||
|
|
||||||
|
|||||||
@ -127,10 +127,15 @@ func handleToken(tokens []*token, index int, postProcessedTokens []*token) (toke
|
|||||||
if tokenIsOpType(currentToken, createMapOpType) {
|
if tokenIsOpType(currentToken, createMapOpType) {
|
||||||
log.Debugf("tokenIsOpType: createMapOpType")
|
log.Debugf("tokenIsOpType: createMapOpType")
|
||||||
// check the previous token is '[', means we are slice, but dont have a first number
|
// check the previous token is '[', means we are slice, but dont have a first number
|
||||||
if index > 0 && (tokens[index-1].TokenType == traverseArrayCollect || tokens[index-1].TokenType == openCollect) {
|
if index > 0 && tokens[index-1].TokenType == traverseArrayCollect {
|
||||||
log.Debugf("previous token is : traverseArrayOpType")
|
log.Debugf("previous token is : traverseArrayOpType")
|
||||||
// need to put the number 0 before this token, as that is implied
|
// need to put the number 0 before this token, as that is implied
|
||||||
postProcessedTokens = append(postProcessedTokens, &token{TokenType: operationToken, Operation: createValueOperation(0, "0")})
|
postProcessedTokens = append(postProcessedTokens, &token{TokenType: operationToken, Operation: createValueOperation(0, "0")})
|
||||||
|
} else if index >= 2 && tokens[index-1].TokenType == openCollect &&
|
||||||
|
(tokens[index-2].TokenType == operationToken || tokens[index-2].TokenType == closeCollect || tokens[index-2].TokenType == closeCollectObject) {
|
||||||
|
log.Debugf("previous token is : openCollect following a traversal, implying 0 start")
|
||||||
|
// need to put the number 0 before this token, as that is implied
|
||||||
|
postProcessedTokens = append(postProcessedTokens, &token{TokenType: operationToken, Operation: createValueOperation(0, "0")})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user