Update upstream source from tag 'upstream/0.1.7'
Update to upstream version '0.1.7'
with Debian dir f54482f7414b833602e827bff2da39f5a2142731
Drew Parsons
3 years ago
9 | 9 | "os" |
10 | 10 | "strconv" |
11 | 11 | "strings" |
12 | "sync" | |
12 | 13 | "syscall" |
13 | 14 | "unsafe" |
14 | 15 | |
26 | 27 | backgroundRed = 0x40 |
27 | 28 | backgroundIntensity = 0x80 |
28 | 29 | backgroundMask = (backgroundRed | backgroundBlue | backgroundGreen | backgroundIntensity) |
30 | commonLvbUnderscore = 0x8000 | |
29 | 31 | |
30 | 32 | cENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x4 |
31 | 33 | ) |
92 | 94 | oldattr word |
93 | 95 | oldpos coord |
94 | 96 | rest bytes.Buffer |
97 | mutex sync.Mutex | |
95 | 98 | } |
96 | 99 | |
97 | 100 | // NewColorable returns new instance of Writer which handles escape sequence from File. |
431 | 434 | |
432 | 435 | // Write writes data on console |
433 | 436 | func (w *Writer) Write(data []byte) (n int, err error) { |
437 | w.mutex.Lock() | |
438 | defer w.mutex.Unlock() | |
434 | 439 | var csbi consoleScreenBufferInfo |
435 | 440 | procGetConsoleScreenBufferInfo.Call(uintptr(w.handle), uintptr(unsafe.Pointer(&csbi))) |
436 | 441 | |
682 | 687 | switch { |
683 | 688 | case n == 0 || n == 100: |
684 | 689 | attr = w.oldattr |
685 | case 1 <= n && n <= 5: | |
690 | case n == 4: | |
691 | attr |= commonLvbUnderscore | |
692 | case (1 <= n && n <= 3) || n == 5: | |
686 | 693 | attr |= foregroundIntensity |
687 | case n == 7: | |
688 | attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) | |
689 | case n == 22 || n == 25: | |
690 | attr |= foregroundIntensity | |
691 | case n == 27: | |
692 | attr = ((attr & foregroundMask) << 4) | ((attr & backgroundMask) >> 4) | |
694 | case n == 7 || n == 27: | |
695 | attr = | |
696 | (attr &^ (foregroundMask | backgroundMask)) | | |
697 | ((attr & foregroundMask) << 4) | | |
698 | ((attr & backgroundMask) >> 4) | |
699 | case n == 22: | |
700 | attr &^= foregroundIntensity | |
701 | case n == 24: | |
702 | attr &^= commonLvbUnderscore | |
693 | 703 | case 30 <= n && n <= 37: |
694 | 704 | attr &= backgroundMask |
695 | 705 | if (n-30)&1 != 0 { |