/vendor/github.com/logrusorgru/aurora/aurora.go

https://github.com/muraenateam/muraena · Go · 715 lines · 428 code · 133 blank · 154 comment · 2 complexity · c144286db044f7bf1b2144a98933c726 MD5 · raw file

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