| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /*
- * Arduino JSON library
- * Benoit Blanchon 2014 - MIT License
- */
- #include "JsonToken.h"
- using namespace ArduinoJson::Parser;
- char* JsonToken::getText()
- {
- char* s = json + token->start;
- json[token->end] = 0;
- unescapeString(s);
- return s;
- }
- inline void JsonToken::unescapeString(char* s)
- {
- char* readPtr = s;
- char* writePtr = s;
- char c;
- do
- {
- c = *readPtr++;
- if (c == '\\')
- {
- c = unescapeChar(*readPtr++);
- }
- *writePtr++ = c;
- } while (c != 0);
- }
- inline char JsonToken::unescapeChar(char c)
- {
- // Optimized for code size on a 8-bit AVR
- const char* p = "b\bf\fn\nr\rt\t";
- while (true)
- {
- if (p[0] == 0) return c;
- if (p[0] == c) return p[1];
- p += 2;
- }
- }
- JsonToken JsonToken::nextSibling() const
- {
- // start with current token
- jsmntok_t* t = token;
- // count the number of token to skip
- int yetToVisit = 1;
-
- // skip all nested tokens
- while (yetToVisit)
- {
- yetToVisit += t->size - 1;
- t++;
- }
- // build a JsonToken at the new location
- return JsonToken(json, t);
- }
|