sources/coloredline.cpp

changeset 113
b3a33bc2e482
parent 109
e4966d7e615d
child 132
8a4690db252e
child 131
4996c8684b93
equal deleted inserted replaced
112:c062273efa33 113:b3a33bc2e482
103 set_color (m_activeColor, false); 103 set_color (m_activeColor, false);
104 104
105 if (m_boldActive) 105 if (m_boldActive)
106 m_data << RLINE_OFF_BOLD; 106 m_data << RLINE_OFF_BOLD;
107 107
108 m_boldActive = false;
109
108 // Chars may be in uppercase 110 // Chars may be in uppercase
109 if (ch >= 'A' and ch <= 'V') 111 if (ch >= 'A' and ch <= 'V')
110 ch += 'a' - 'A'; 112 ch += 'a' - 'A';
111 113
112 if (ch >= 'a' and ch <= 'v' and ch != 'l') 114 if (ch >= 'a' and ch <= 'v' and ch != 'l')
113 { 115 {
114 auto colorInfo = colorCodes[ch - 'a']; 116 const ColorCodeInfo& colorInfo = colorCodes[ch - 'a'];
115 m_activeColor = colorInfo.color; 117 activate_color(colorInfo.color, colorInfo.bold);
116 m_boldActive = colorInfo.bold;
117 assert (m_activeColor < 8);
118 set_color (m_activeColor, true);
119
120 if (m_boldActive)
121 m_data << RLINE_ON_BOLD;
122 } 118 }
123 119
124 m_colorCodeStage = 0; 120 if (ch == '[')
121 m_colorCodeStage = 2;
122 else
123 m_colorCodeStage = 0;
124 return;
125 }
126 else if (m_colorCodeStage == 2)
127 {
128 if (ch == ']')
129 {
130 String color = m_incomingColorName.to_lowercase();
131
132 for (size_t i = 0; i < countof(colorCodes); ++i)
133 {
134 const ColorCodeInfo& colorInfo = colorCodes[i];
135
136 if (String(colorInfo.name).to_lowercase() == color)
137 {
138 activate_color(colorInfo.color, colorInfo.bold);
139 m_colorCodeStage = 0;
140 break;
141 }
142 }
143
144 m_incomingColorName = "";
145 m_colorCodeStage = 0;
146 }
147 else if (isprint(ch))
148 m_incomingColorName += ch;
149
125 return; 150 return;
126 } 151 }
127 152
128 if (isprint (ch)) 153 if (isprint (ch))
129 { 154 {
130 m_string += ch; 155 m_string += ch;
131 m_data << int (ch); 156 m_data << int (ch);
132 ++m_length; 157 ++m_length;
133 } 158 }
159 }
160
161 // -------------------------------------------------------------------------------------------------
162 //
163 void ColoredLine::activate_color (Color color, bool bold)
164 {
165 if (m_boldActive)
166 m_data << RLINE_OFF_BOLD;
167
168 m_activeColor = color;
169 m_boldActive = bold;
170 assert (m_activeColor < 8);
171 set_color (m_activeColor, true);
172
173 if (m_boldActive)
174 m_data << RLINE_ON_BOLD;
134 } 175 }
135 176
136 // ------------------------------------------------------------------------------------------------- 177 // -------------------------------------------------------------------------------------------------
137 // 178 //
138 void ColoredLine::set_color (Color a, bool on) 179 void ColoredLine::set_color (Color a, bool on)

mercurial