///////////////////////////////////////////////////////////////////////////
| 217 | |
| 218 | //////////////////////////////////////////////////////////////////////////////// |
| 219 | void autoColorize(Task& task, Color& c) { |
| 220 | // The special tag 'nocolor' overrides all auto and specific colorization. |
| 221 | if (!Context::getContext().color() || task.hasTag("nocolor")) { |
| 222 | c = Color(); |
| 223 | return; |
| 224 | } |
| 225 | |
| 226 | auto merge = Context::getContext().config.getBoolean("rule.color.merge"); |
| 227 | |
| 228 | // Note: c already contains colors specifically assigned via command. |
| 229 | // Note: These rules form a hierarchy - the last rule is King, hence the |
| 230 | // reverse iterator. |
| 231 | |
| 232 | for (auto r = gsPrecedence.rbegin(); r != gsPrecedence.rend(); ++r) { |
| 233 | Color base = gsColor[*r]; |
| 234 | if (base.nontrivial()) { |
| 235 | if (*r == "color.blocked") |
| 236 | colorizeBlocked(task, base, c, merge); |
| 237 | else if (*r == "color.blocking") |
| 238 | colorizeBlocking(task, base, c, merge); |
| 239 | else if (*r == "color.tagged") |
| 240 | colorizeTagged(task, base, c, merge); |
| 241 | else if (*r == "color.active") |
| 242 | colorizeActive(task, base, c, merge); |
| 243 | else if (*r == "color.scheduled") |
| 244 | colorizeScheduled(task, base, c, merge); |
| 245 | else if (*r == "color.until") |
| 246 | colorizeUntil(task, base, c, merge); |
| 247 | else if (*r == "color.project.none") |
| 248 | colorizeProjectNone(task, base, c, merge); |
| 249 | else if (*r == "color.tag.none") |
| 250 | colorizeTagNone(task, base, c, merge); |
| 251 | else if (*r == "color.due") |
| 252 | colorizeDue(task, base, c, merge); |
| 253 | else if (*r == "color.due.today") |
| 254 | colorizeDueToday(task, base, c, merge); |
| 255 | else if (*r == "color.overdue") |
| 256 | colorizeOverdue(task, base, c, merge); |
| 257 | else if (*r == "color.recurring") |
| 258 | colorizeRecurring(task, base, c, merge); |
| 259 | else if (*r == "color.completed") |
| 260 | colorizeCompleted(task, base, c, merge); |
| 261 | else if (*r == "color.deleted") |
| 262 | colorizeDeleted(task, base, c, merge); |
| 263 | |
| 264 | // Wildcards |
| 265 | else if (!r->compare(0, 10, "color.tag.", 10)) |
| 266 | colorizeTag(task, *r, base, c, merge); |
| 267 | else if (!r->compare(0, 14, "color.project.", 14)) |
| 268 | colorizeProject(task, *r, base, c, merge); |
| 269 | else if (!r->compare(0, 14, "color.keyword.", 14)) |
| 270 | colorizeKeyword(task, *r, base, c, merge); |
| 271 | else if (!r->compare(0, 10, "color.uda.", 10)) |
| 272 | colorizeUDA(task, *r, base, c, merge); |
| 273 | } |
| 274 | } |
| 275 | } |
| 276 |
no test coverage detected