mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			88 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright Benoit Blanchon 2014-2016
 | |
| // MIT License
 | |
| //
 | |
| // Arduino JSON library
 | |
| // https://github.com/bblanchon/ArduinoJson
 | |
| // If you like this project, please add a star!
 | |
| 
 | |
| #include "../../include/ArduinoJson/Internals/Prettyfier.hpp"
 | |
| 
 | |
| using namespace ArduinoJson::Internals;
 | |
| 
 | |
| size_t Prettyfier::write(uint8_t c) {
 | |
|   size_t n = _inString ? handleStringChar(c) : handleMarkupChar(c);
 | |
|   _previousChar = c;
 | |
|   return n;
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleStringChar(uint8_t c) {
 | |
|   bool isQuote = c == '"' && _previousChar != '\\';
 | |
| 
 | |
|   if (isQuote) _inString = false;
 | |
| 
 | |
|   return _sink.write(c);
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleMarkupChar(uint8_t c) {
 | |
|   switch (c) {
 | |
|     case '{':
 | |
|     case '[':
 | |
|       return handleBlockOpen(c);
 | |
| 
 | |
|     case '}':
 | |
|     case ']':
 | |
|       return handleBlockClose(c);
 | |
| 
 | |
|     case ':':
 | |
|       return handleColon();
 | |
| 
 | |
|     case ',':
 | |
|       return handleComma();
 | |
| 
 | |
|     case '"':
 | |
|       return handleQuoteOpen();
 | |
| 
 | |
|     default:
 | |
|       return handleNormalChar(c);
 | |
|   }
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleBlockOpen(uint8_t c) {
 | |
|   return indentIfNeeded() + _sink.write(c);
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleBlockClose(uint8_t c) {
 | |
|   return unindentIfNeeded() + _sink.write(c);
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleColon() {
 | |
|   return _sink.write(':') + _sink.write(' ');
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleComma() {
 | |
|   return _sink.write(',') + _sink.println();
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleQuoteOpen() {
 | |
|   _inString = true;
 | |
|   return indentIfNeeded() + _sink.write('"');
 | |
| }
 | |
| 
 | |
| inline size_t Prettyfier::handleNormalChar(uint8_t c) {
 | |
|   return indentIfNeeded() + _sink.write(c);
 | |
| }
 | |
| 
 | |
| size_t Prettyfier::indentIfNeeded() {
 | |
|   if (!inEmptyBlock()) return 0;
 | |
| 
 | |
|   _sink.indent();
 | |
|   return _sink.println();
 | |
| }
 | |
| 
 | |
| size_t Prettyfier::unindentIfNeeded() {
 | |
|   if (inEmptyBlock()) return 0;
 | |
| 
 | |
|   _sink.unindent();
 | |
|   return _sink.println();
 | |
| }
 |