source: rtos_arduino/trunk/arduino_lib/libraries/ArduinoJson/src/Internals/Prettyfier.cpp@ 209

Last change on this file since 209 was 209, checked in by ertl-honda, 8 years ago

BlueMix用のフィアルを追加

File size: 1.8 KB
Line 
1// Copyright Benoit Blanchon 2014-2016
2// MIT License
3//
4// Arduino JSON library
5// https://github.com/bblanchon/ArduinoJson
6// If you like this project, please add a star!
7
8#include "../../include/ArduinoJson/Internals/Prettyfier.hpp"
9
10using namespace ArduinoJson::Internals;
11
12size_t Prettyfier::write(uint8_t c) {
13 size_t n = _inString ? handleStringChar(c) : handleMarkupChar(c);
14 _previousChar = c;
15 return n;
16}
17
18inline size_t Prettyfier::handleStringChar(uint8_t c) {
19 bool isQuote = c == '"' && _previousChar != '\\';
20
21 if (isQuote) _inString = false;
22
23 return _sink.write(c);
24}
25
26inline size_t Prettyfier::handleMarkupChar(uint8_t c) {
27 switch (c) {
28 case '{':
29 case '[':
30 return handleBlockOpen(c);
31
32 case '}':
33 case ']':
34 return handleBlockClose(c);
35
36 case ':':
37 return handleColon();
38
39 case ',':
40 return handleComma();
41
42 case '"':
43 return handleQuoteOpen();
44
45 default:
46 return handleNormalChar(c);
47 }
48}
49
50inline size_t Prettyfier::handleBlockOpen(uint8_t c) {
51 return indentIfNeeded() + _sink.write(c);
52}
53
54inline size_t Prettyfier::handleBlockClose(uint8_t c) {
55 return unindentIfNeeded() + _sink.write(c);
56}
57
58inline size_t Prettyfier::handleColon() {
59 return _sink.write(':') + _sink.write(' ');
60}
61
62inline size_t Prettyfier::handleComma() {
63 return _sink.write(',') + _sink.println();
64}
65
66inline size_t Prettyfier::handleQuoteOpen() {
67 _inString = true;
68 return indentIfNeeded() + _sink.write('"');
69}
70
71inline size_t Prettyfier::handleNormalChar(uint8_t c) {
72 return indentIfNeeded() + _sink.write(c);
73}
74
75size_t Prettyfier::indentIfNeeded() {
76 if (!inEmptyBlock()) return 0;
77
78 _sink.indent();
79 return _sink.println();
80}
81
82size_t Prettyfier::unindentIfNeeded() {
83 if (inEmptyBlock()) return 0;
84
85 _sink.unindent();
86 return _sink.println();
87}
Note: See TracBrowser for help on using the repository browser.