1// 2// Copyright (c) 2016-2019 The Aurora Authors. All rights reserved. 3// This program is free software. It comes without any warranty, 4// to the extent permitted by applicable law. You can redistribute 5// it and/or modify it under the terms of the Do What The Fuck You 6// Want To Public License, Version 2, as published by Sam Hocevar. 7// See LICENSE file for more details or see below. 8// 9 10// 11// DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 12// Version 2, December 2004 13// 14// Copyright (C) 2004 Sam Hocevar <sam@hocevar.net> 15// 16// Everyone is permitted to copy and distribute verbatim or modified 17// copies of this license document, and changing it is allowed as long 18// as the name is changed. 19// 20// DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 21// TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 22// 23// 0. You just DO WHAT THE FUCK YOU WANT TO. 24// 25 26// Package aurora implements ANSI-colors 27package aurora 28 29import ( 30 "fmt" 31) 32 33// An Aurora implements colorizer interface. 34// It also can be a non-colorizer 35type Aurora interface { 36 37 // Reset wraps given argument returning Value 38 // without formats and colors. 39 Reset(arg interface{}) Value 40 41 // 42 // Formats 43 // 44 // 45 // Bold or increased intensity (1). 46 Bold(arg interface{}) Value 47 // Faint, decreased intensity (2). 48 Faint(arg interface{}) Value 49 // 50 // DoublyUnderline or Bold off, double-underline 51 // per ECMA-48 (21). 52 DoublyUnderline(arg interface{}) Value 53 // Fraktur, rarely supported (20). 54 Fraktur(arg interface{}) Value 55 // 56 // Italic, not widely supported, sometimes 57 // treated as inverse (3). 58 Italic(arg interface{}) Value 59 // Underline (4). 60 Underline(arg interface{}) Value 61 // 62 // SlowBlink, blinking less than 150 63 // per minute (5). 64 SlowBlink(arg interface{}) Value 65 // RapidBlink, blinking 150+ per minute, 66 // not widely supported (6). 67 RapidBlink(arg interface{}) Value 68 // Blink is alias for the SlowBlink. 69 Blink(arg interface{}) Value 70 // 71 // Reverse video, swap foreground and 72 // background colors (7). 73 Reverse(arg interface{}) Value 74 // Inverse is alias for the Reverse 75 Inverse(arg interface{}) Value 76 // 77 // Conceal, hidden, not widely supported (8). 78 Conceal(arg interface{}) Value 79 // Hidden is alias for the Conceal 80 Hidden(arg interface{}) Value 81 // 82 // CrossedOut, characters legible, but 83 // marked for deletion (9). 84 CrossedOut(arg interface{}) Value 85 // StrikeThrough is alias for the CrossedOut. 86 StrikeThrough(arg interface{}) Value 87 // 88 // Framed (51). 89 Framed(arg interface{}) Value 90 // Encircled (52). 91 Encircled(arg interface{}) Value 92 // 93 // Overlined (53). 94 Overlined(arg interface{}) Value 95 96 // 97 // Foreground colors 98 // 99 // 100 // Black foreground color (30) 101 Black(arg interface{}) Value 102 // Red foreground color (31) 103 Red(arg interface{}) Value 104 // Green foreground color (32) 105 Green(arg interface{}) Value 106 // Yellow foreground color (33) 107 Yellow(arg interface{}) Value 108 // Brown foreground color (33) 109 // 110 // Deprecated: use Yellow instead, following specification 111 Brown(arg interface{}) Value 112 // Blue foreground color (34) 113 Blue(arg interface{}) Value 114 // Magenta foreground color (35) 115 Magenta(arg interface{}) Value 116 // Cyan foreground color (36) 117 Cyan(arg interface{}) Value 118 // White foreground color (37) 119 White(arg interface{}) Value 120 // 121 // Bright foreground colors 122 // 123 // BrightBlack foreground color (90) 124 BrightBlack(arg interface{}) Value 125 // BrightRed foreground color (91) 126 BrightRed(arg interface{}) Value 127 // BrightGreen foreground color (92) 128 BrightGreen(arg interface{}) Value 129 // BrightYellow foreground color (93) 130 BrightYellow(arg interface{}) Value 131 // BrightBlue foreground color (94) 132 BrightBlue(arg interface{}) Value 133 // BrightMagenta foreground color (95) 134 BrightMagenta(arg interface{}) Value 135 // BrightCyan foreground color (96) 136 BrightCyan(arg interface{}) Value 137 // BrightWhite foreground color (97) 138 BrightWhite(arg interface{}) Value 139 // 140 // Other 141 // 142 // Index of pre-defined 8-bit foreground color 143 // from 0 to 255 (38;5;n). 144 // 145 // 0- 7: standard colors (as in ESC [ 30–37 m) 146 // 8- 15: high intensity colors (as in ESC [ 90–97 m) 147 // 16-231: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) 148 // 232-255: grayscale from black to white in 24 steps 149 // 150 Index(n uint8, arg interface{}) Value 151 // Gray from 0 to 23. 152 Gray(n uint8, arg interface{}) Value 153 154 // 155 // Background colors 156 // 157 // 158 // BgBlack background color (40) 159 BgBlack(arg interface{}) Value 160 // BgRed background color (41) 161 BgRed(arg interface{}) Value 162 // BgGreen background color (42) 163 BgGreen(arg interface{}) Value 164 // BgYellow background color (43) 165 BgYellow(arg interface{}) Value 166 // BgBrown background color (43) 167 // 168 // Deprecated: use BgYellow instead, following specification 169 BgBrown(arg interface{}) Value 170 // BgBlue background color (44) 171 BgBlue(arg interface{}) Value 172 // BgMagenta background color (45) 173 BgMagenta(arg interface{}) Value 174 // BgCyan background color (46) 175 BgCyan(arg interface{}) Value 176 // BgWhite background color (47) 177 BgWhite(arg interface{}) Value 178 // 179 // Bright background colors 180 // 181 // BgBrightBlack background color (100) 182 BgBrightBlack(arg interface{}) Value 183 // BgBrightRed background color (101) 184 BgBrightRed(arg interface{}) Value 185 // BgBrightGreen background color (102) 186 BgBrightGreen(arg interface{}) Value 187 // BgBrightYellow background color (103) 188 BgBrightYellow(arg interface{}) Value 189 // BgBrightBlue background color (104) 190 BgBrightBlue(arg interface{}) Value 191 // BgBrightMagenta background color (105) 192 BgBrightMagenta(arg interface{}) Value 193 // BgBrightCyan background color (106) 194 BgBrightCyan(arg interface{}) Value 195 // BgBrightWhite background color (107) 196 BgBrightWhite(arg interface{}) Value 197 // 198 // Other 199 // 200 // BgIndex of 8-bit pre-defined background color 201 // from 0 to 255 (48;5;n). 202 // 203 // 0- 7: standard colors (as in ESC [ 40–47 m) 204 // 8- 15: high intensity colors (as in ESC [100–107 m) 205 // 16-231: 6 × 6 × 6 cube (216 colors): 16 + 36 × r + 6 × g + b (0 ≤ r, g, b ≤ 5) 206 // 232-255: grayscale from black to white in 24 steps 207 // 208 BgIndex(n uint8, arg interface{}) Value 209 // BgGray from 0 to 23. 210 BgGray(n uint8, arg interface{}) Value 211 212 // 213 // Special 214 // 215 // Colorize removes existing colors and 216 // formats of the argument and applies given. 217 Colorize(arg interface{}, color Color) Value 218 219 // 220 // Support methods 221 // 222 // Sprintf allows to use colored format. 223 Sprintf(format interface{}, args ...interface{}) string 224} 225 226// NewAurora returns a new Aurora interface that 227// will support or not support colors depending 228// the enableColors argument 229func NewAurora(enableColors bool) Aurora { 230 if enableColors { 231 return aurora{} 232 } 233 return auroraClear{} 234} 235 236// no colors 237 238type auroraClear struct{} 239 240func (auroraClear) Reset(arg interface{}) Value { return valueClear{arg} } 241 242func (auroraClear) Bold(arg interface{}) Value { 243 return valueClear{arg} 244} 245 246func (auroraClear) Faint(arg interface{}) Value { 247 return valueClear{arg} 248} 249 250func (auroraClear) DoublyUnderline(arg interface{}) Value { 251 return valueClear{arg} 252} 253 254func (auroraClear) Fraktur(arg interface{}) Value { 255 return valueClear{arg} 256} 257 258func (auroraClear) Italic(arg interface{}) Value { 259 return valueClear{arg} 260} 261 262func (auroraClear) Underline(arg interface{}) Value { 263 return valueClear{arg} 264} 265 266func (auroraClear) SlowBlink(arg interface{}) Value { 267 return valueClear{arg} 268} 269 270func (auroraClear) RapidBlink(arg interface{}) Value { 271 return valueClear{arg} 272} 273 274func (auroraClear) Blink(arg interface{}) Value { 275 return valueClear{arg} 276} 277 278func (auroraClear) Reverse(arg interface{}) Value { 279 return valueClear{arg} 280} 281 282func (auroraClear) Inverse(arg interface{}) Value { 283 return valueClear{arg} 284} 285 286func (auroraClear) Conceal(arg interface{}) Value { 287 return valueClear{arg} 288} 289 290func (auroraClear) Hidden(arg interface{}) Value { 291 return valueClear{arg} 292} 293 294func (auroraClear) CrossedOut(arg interface{}) Value { 295 return valueClear{arg} 296} 297 298func (auroraClear) StrikeThrough(arg interface{}) Value { 299 return valueClear{arg} 300} 301 302func (auroraClear) Framed(arg interface{}) Value { 303 return valueClear{arg} 304} 305 306func (auroraClear) Encircled(arg interface{}) Value { 307 return valueClear{arg} 308} 309 310func (auroraClear) Overlined(arg interface{}) Value { 311 return valueClear{arg} 312} 313 314func (auroraClear) Black(arg interface{}) Value { 315 return valueClear{arg} 316} 317 318func (auroraClear) Red(arg interface{}) Value { 319 return valueClear{arg} 320} 321 322func (auroraClear) Green(arg interface{}) Value { 323 return valueClear{arg} 324} 325 326func (auroraClear) Yellow(arg interface{}) Value { 327 return valueClear{arg} 328} 329 330func (auroraClear) Brown(arg interface{}) Value { 331 return valueClear{arg} 332} 333 334func (auroraClear) Blue(arg interface{}) Value { 335 return valueClear{arg} 336} 337 338func (auroraClear) Magenta(arg interface{}) Value { 339 return valueClear{arg} 340} 341 342func (auroraClear) Cyan(arg interface{}) Value { 343 return valueClear{arg} 344} 345 346func (auroraClear) White(arg interface{}) Value { 347 return valueClear{arg} 348} 349 350func (auroraClear) BrightBlack(arg interface{}) Value { 351 return valueClear{arg} 352} 353 354func (auroraClear) BrightRed(arg interface{}) Value { 355 return valueClear{arg} 356} 357 358func (auroraClear) BrightGreen(arg interface{}) Value { 359 return valueClear{arg} 360} 361 362func (auroraClear) BrightYellow(arg interface{}) Value { 363 return valueClear{arg} 364} 365 366func (auroraClear) BrightBlue(arg interface{}) Value { 367 return valueClear{arg} 368} 369 370func (auroraClear) BrightMagenta(arg interface{}) Value { 371 return valueClear{arg} 372} 373 374func (auroraClear) BrightCyan(arg interface{}) Value { 375 return valueClear{arg} 376} 377 378func (auroraClear) BrightWhite(arg interface{}) Value { 379 return valueClear{arg} 380} 381 382func (auroraClear) Index(_ uint8, arg interface{}) Value { 383 return valueClear{arg} 384} 385 386func (auroraClear) Gray(_ uint8, arg interface{}) Value { 387 return valueClear{arg} 388} 389 390func (auroraClear) BgBlack(arg interface{}) Value { 391 return valueClear{arg} 392} 393 394func (auroraClear) BgRed(arg interface{}) Value { 395 return valueClear{arg} 396} 397 398func (auroraClear) BgGreen(arg interface{}) Value { 399 return valueClear{arg} 400} 401 402func (auroraClear) BgYellow(arg interface{}) Value { 403 return valueClear{arg} 404} 405 406func (auroraClear) BgBrown(arg interface{}) Value { 407 return valueClear{arg} 408} 409 410func (auroraClear) BgBlue(arg interface{}) Value { 411 return valueClear{arg} 412} 413 414func (auroraClear) BgMagenta(arg interface{}) Value { 415 return valueClear{arg} 416} 417 418func (auroraClear) BgCyan(arg interface{}) Value { 419 return valueClear{arg} 420} 421 422func (auroraClear) BgWhite(arg interface{}) Value { 423 return valueClear{arg} 424} 425 426func (auroraClear) BgBrightBlack(arg interface{}) Value { 427 return valueClear{arg} 428} 429 430func (auroraClear) BgBrightRed(arg interface{}) Value { 431 return valueClear{arg} 432} 433 434func (auroraClear) BgBrightGreen(arg interface{}) Value { 435 return valueClear{arg} 436} 437 438func (auroraClear) BgBrightYellow(arg interface{}) Value { 439 return valueClear{arg} 440} 441 442func (auroraClear) BgBrightBlue(arg interface{}) Value { 443 return valueClear{arg} 444} 445 446func (auroraClear) BgBrightMagenta(arg interface{}) Value { 447 return valueClear{arg} 448} 449 450func (auroraClear) BgBrightCyan(arg interface{}) Value { 451 return valueClear{arg} 452} 453 454func (auroraClear) BgBrightWhite(arg interface{}) Value { 455 return valueClear{arg} 456} 457 458func (auroraClear) BgIndex(_ uint8, arg interface{}) Value { 459 return valueClear{arg} 460} 461 462func (auroraClear) BgGray(_ uint8, arg interface{}) Value { 463 return valueClear{arg} 464} 465 466func (auroraClear) Colorize(arg interface{}, _ Color) Value { 467 return valueClear{arg} 468} 469 470func (auroraClear) Sprintf(format interface{}, args ...interface{}) string { 471 if str, ok := format.(string); ok { 472 return fmt.Sprintf(str, args...) 473 } 474 return fmt.Sprintf(fmt.Sprint(format), args...) 475} 476 477// colorized 478 479type aurora struct{} 480 481func (aurora) Reset(arg interface{}) Value { 482 return Reset(arg) 483} 484 485func (aurora) Bold(arg interface{}) Value { 486 return Bold(arg) 487} 488 489func (aurora) Faint(arg interface{}) Value { 490 return Faint(arg) 491} 492 493func (aurora) DoublyUnderline(arg interface{}) Value { 494 return DoublyUnderline(arg) 495} 496 497func (aurora) Fraktur(arg interface{}) Value { 498 return Fraktur(arg) 499} 500 501func (aurora) Italic(arg interface{}) Value { 502 return Italic(arg) 503} 504 505func (aurora) Underline(arg interface{}) Value { 506 return Underline(arg) 507} 508 509func (aurora) SlowBlink(arg interface{}) Value { 510 return SlowBlink(arg) 511} 512 513func (aurora) RapidBlink(arg interface{}) Value { 514 return RapidBlink(arg) 515} 516 517func (aurora) Blink(arg interface{}) Value { 518 return Blink(arg) 519} 520 521func (aurora) Reverse(arg interface{}) Value { 522 return Reverse(arg) 523} 524 525func (aurora) Inverse(arg interface{}) Value { 526 return Inverse(arg) 527} 528 529func (aurora) Conceal(arg interface{}) Value { 530 return Conceal(arg) 531} 532 533func (aurora) Hidden(arg interface{}) Value { 534 return Hidden(arg) 535} 536 537func (aurora) CrossedOut(arg interface{}) Value { 538 return CrossedOut(arg) 539} 540 541func (aurora) StrikeThrough(arg interface{}) Value { 542 return StrikeThrough(arg) 543} 544 545func (aurora) Framed(arg interface{}) Value { 546 return Framed(arg) 547} 548 549func (aurora) Encircled(arg interface{}) Value { 550 return Encircled(arg) 551} 552 553func (aurora) Overlined(arg interface{}) Value { 554 return Overlined(arg) 555} 556 557func (aurora) Black(arg interface{}) Value { 558 return Black(arg) 559} 560 561func (aurora) Red(arg interface{}) Value { 562 return Red(arg) 563} 564 565func (aurora) Green(arg interface{}) Value { 566 return Green(arg) 567} 568 569func (aurora) Yellow(arg interface{}) Value { 570 return Yellow(arg) 571} 572 573func (aurora) Brown(arg interface{}) Value { 574 return Brown(arg) 575} 576 577func (aurora) Blue(arg interface{}) Value { 578 return Blue(arg) 579} 580 581func (aurora) Magenta(arg interface{}) Value { 582 return Magenta(arg) 583} 584 585func (aurora) Cyan(arg interface{}) Value { 586 return Cyan(arg) 587} 588 589func (aurora) White(arg interface{}) Value { 590 return White(arg) 591} 592 593func (aurora) BrightBlack(arg interface{}) Value { 594 return BrightBlack(arg) 595} 596 597func (aurora) BrightRed(arg interface{}) Value { 598 return BrightRed(arg) 599} 600 601func (aurora) BrightGreen(arg interface{}) Value { 602 return BrightGreen(arg) 603} 604 605func (aurora) BrightYellow(arg interface{}) Value { 606 return BrightYellow(arg) 607} 608 609func (aurora) BrightBlue(arg interface{}) Value { 610 return BrightBlue(arg) 611} 612 613func (aurora) BrightMagenta(arg interface{}) Value { 614 return BrightMagenta(arg) 615} 616 617func (aurora) BrightCyan(arg interface{}) Value { 618 return BrightCyan(arg) 619} 620 621func (aurora) BrightWhite(arg interface{}) Value { 622 return BrightWhite(arg) 623} 624 625func (aurora) Index(index uint8, arg interface{}) Value { 626 return Index(index, arg) 627} 628 629func (aurora) Gray(n uint8, arg interface{}) Value { 630 return Gray(n, arg) 631} 632 633func (aurora) BgBlack(arg interface{}) Value { 634 return BgBlack(arg) 635} 636 637func (aurora) BgRed(arg interface{}) Value { 638 return BgRed(arg) 639} 640 641func (aurora) BgGreen(arg interface{}) Value { 642 return BgGreen(arg) 643} 644 645func (aurora) BgYellow(arg interface{}) Value { 646 return BgYellow(arg) 647} 648 649func (aurora) BgBrown(arg interface{}) Value { 650 return BgBrown(arg) 651} 652 653func (aurora) BgBlue(arg interface{}) Value { 654 return BgBlue(arg) 655} 656 657func (aurora) BgMagenta(arg interface{}) Value { 658 return BgMagenta(arg) 659} 660 661func (aurora) BgCyan(arg interface{}) Value { 662 return BgCyan(arg) 663} 664 665func (aurora) BgWhite(arg interface{}) Value { 666 return BgWhite(arg) 667} 668 669func (aurora) BgBrightBlack(arg interface{}) Value { 670 return BgBrightBlack(arg) 671} 672 673func (aurora) BgBrightRed(arg interface{}) Value { 674 return BgBrightRed(arg) 675} 676 677func (aurora) BgBrightGreen(arg interface{}) Value { 678 return BgBrightGreen(arg) 679} 680 681func (aurora) BgBrightYellow(arg interface{}) Value { 682 return BgBrightYellow(arg) 683} 684 685func (aurora) BgBrightBlue(arg interface{}) Value { 686 return BgBrightBlue(arg) 687} 688 689func (aurora) BgBrightMagenta(arg interface{}) Value { 690 return BgBrightMagenta(arg) 691} 692 693func (aurora) BgBrightCyan(arg interface{}) Value { 694 return BgBrightCyan(arg) 695} 696 697func (aurora) BgBrightWhite(arg interface{}) Value { 698 return BgBrightWhite(arg) 699} 700 701func (aurora) BgIndex(n uint8, arg interface{}) Value { 702 return BgIndex(n, arg) 703} 704 705func (aurora) BgGray(n uint8, arg interface{}) Value { 706 return BgGray(n, arg) 707} 708 709func (aurora) Colorize(arg interface{}, color Color) Value { 710 return Colorize(arg, color) 711} 712 713func (aurora) Sprintf(format interface{}, args ...interface{}) string { 714 return Sprintf(format, args...) 715} 716