Skip to content

StrIterNext

StrIterNext

Description

Advance to next character in string iterator

Parameters

Name Direction Description
si in,out StrIter to modify

Usage example (Cross-references)

Usage examples (Cross-references)
    static StrIter kvconfig_consume_line_end(StrIter si) {
        if (StrIterPeek(&si) == '\r') {
            StrIterNext(&si);
        }
    
        if (StrIterPeek(&si) == '\n') {
            StrIterNext(&si);
        }
    StrIter KvConfigSkipWhitespace(StrIter si) {
        while (StrIterRemainingLength(&si) && kvconfig_is_space(StrIterPeek(&si))) {
            StrIterNext(&si);
        }
    StrIter KvConfigSkipLine(StrIter si) {
        while (StrIterRemainingLength(&si) && !kvconfig_is_line_end(StrIterPeek(&si))) {
            StrIterNext(&si);
        }
    
            StrPushBack(key, c);
            StrIterNext(&si);
        }
        quote = StrIterPeek(&si);
        if (quote == '"' || quote == '\'') {
            StrIterNext(&si);
    
            while (StrIterRemainingLength(&si)) {
    
                if (c == quote) {
                    StrIterNext(&si);
                    return si;
                }
    
                if (c == '\\') {
                    StrIterNext(&si);
                    if (!StrIterRemainingLength(&si)) {
                        LOG_ERROR("Unexpected end of quoted config value");
                    }
    
                    StrIterNext(&si);
                    continue;
                }
    
                StrPushBack(value, c);
                StrIterNext(&si);
            }
    
            StrPushBack(value, c);
            StrIterNext(&si);
        }
        }
    
        StrIterNext(&si);
        si = KvConfigReadValue(si, value);
    
                if (c == '\n') {
                    StrIterNext(&si);
                    continue;
                }
            return saved_si;
        }
        StrIterNext(&si);
        si = JSkipWhitespace(si);
                    return saved_si;
                }
                StrIterNext(&si); // skip comma
                si = JSkipWhitespace(si);
            }
                return saved_si;
            }
            StrIterNext(&si);
            si = JSkipWhitespace(si);
        }
    
        StrIterNext(&si);
        return si;
    }
            return saved_si;
        }
        StrIterNext(&si);
        si = JSkipWhitespace(si);
                    return saved_si;
                }
                StrIterNext(&si); // skip comma
                si = JSkipWhitespace(si);
            }
        }
    
        StrIterNext(&si);
        return si;
    }
                case '\r' :
                case '\n' :
                    StrIterNext(&si);
                    break;
                default :
        // string start
        if (StrIterRemainingLength(&si) && StrIterPeek(&si) == '"') {
            StrIterNext(&si);
    
            // while a printable character
                    // end of string
                    case '"' :
                        StrIterNext(&si);
                        return si;
                    // starting of an escape sequence
                    case '\\' :
                        StrIterNext(&si);
                        if (!StrIterRemainingLength(&si)) {
                            LOG_ERROR("Unexpected end of string.");
                            case '\\' :
                                StrPushBack(str, '\\');
                                StrIterNext(&si);
                                break;
                            case '"' :
                                StrPushBack(str, '"');
                                StrIterNext(&si);
                                break;
                            case '/' :
                                StrPushBack(str, '/');
                                StrIterNext(&si);
                                break;
                            case 'b' :
                                StrPushBack(str, '\b');
                                StrIterNext(&si);
                                break;
                            case 'f' :
                                StrPushBack(str, '\f');
                                StrIterNext(&si);
                                break;
                            case 'n' :
                                StrPushBack(str, '\n');
                                StrIterNext(&si);
                                break;
                            case 'r' :
                                StrPushBack(str, '\r');
                                StrIterNext(&si);
                                break;
                            case 't' :
                                StrPushBack(str, '\t');
                                StrIterNext(&si);
                                break;
                    default :
                        StrPushBack(str, StrIterPeek(&si));
                        StrIterNext(&si);
                        break;
                }
        if (StrIterPeek(&si) == '-') {
            is_neg = true;
            StrIterNext(&si);
        }
                    is_flt  = true;
                    StrPushBack(&ns, StrIterPeek(&si));
                    StrIterNext(&si);
                    break;
                    is_flt = true;
                    StrPushBack(&ns, StrIterPeek(&si));
                    StrIterNext(&si);
                    break;
                case '9' :
                    StrPushBack(&ns, StrIterPeek(&si));
                    StrIterNext(&si);
                    break;
                    has_exp_plus_minus = true;
                    StrPushBack(&ns, StrIterPeek(&si));
                    StrIterNext(&si);
                    break;
                break;                                                                                                     \
            }                                                                                                              \
            StrIterNext(&si);                                                                                              \
            si = JSkipWhitespace(si);                                                                                      \
                                                                                                                           \
                }                                                                                                          \
                                                                                                                           \
                StrIterNext(&si);                                                                                          \
            }                                                                                                              \
        } while (0)
                break;                                                                                                     \
            }                                                                                                              \
            StrIterNext(&si);                                                                                              \
            si = JSkipWhitespace(si);                                                                                      \
                                                                                                                           \
                    break;                                                                                                 \
                }                                                                                                          \
                StrIterNext(&si);                                                                                          \
                si = JSkipWhitespace(si);                                                                                  \
                                                                                                                           \
                }                                                                                                          \
                                                                                                                           \
                StrIterNext(&si);                                                                                          \
            }                                                                                                              \
        } while (0)
Last updated on