diff options
author | James E. Blair <corvus@gnu.org> | 2015-01-10 11:14:40 -0800 |
---|---|---|
committer | James E. Blair <corvus@gnu.org> | 2015-01-10 11:14:40 -0800 |
commit | 6a7da0f59c753fad48c778d3d4c956c42022d537 (patch) | |
tree | 8b7760f25a9d6bc9ec495a148f8a7c00f1819581 | |
parent | ef9fb76de9ef299fbdc8f87f1dd05bdd1eda649e (diff) |
Add support for bright bg colors in ansi parser
-rw-r--r-- | presentty/ansiparser.py | 47 | ||||
-rw-r--r-- | presentty/rst.py | 2 |
2 files changed, 37 insertions, 12 deletions
diff --git a/presentty/ansiparser.py b/presentty/ansiparser.py index a780b42..4750b9e 100644 --- a/presentty/ansiparser.py +++ b/presentty/ansiparser.py | |||
@@ -57,6 +57,8 @@ class ANSIParser(object): | |||
57 | self.blink = False | 57 | self.blink = False |
58 | self.fg = 7 | 58 | self.fg = 7 |
59 | self.bg = 0 | 59 | self.bg = 0 |
60 | self.bg256 = None | ||
61 | self.fg256 = None | ||
60 | 62 | ||
61 | def moveTo(self, x, y): | 63 | def moveTo(self, x, y): |
62 | while x>80: | 64 | while x>80: |
@@ -85,9 +87,8 @@ class ANSIParser(object): | |||
85 | if c == 'm': | 87 | if c == 'm': |
86 | if not values: | 88 | if not values: |
87 | values = [0] | 89 | values = [0] |
88 | fg256 = None | ||
89 | for v in values: | 90 | for v in values: |
90 | if fg256 is True: | 91 | if self.fg256 is True: |
91 | if v <= 0x08: | 92 | if v <= 0x08: |
92 | self.fg = v | 93 | self.fg = v |
93 | elif v <= 0x0f: | 94 | elif v <= 0x0f: |
@@ -97,12 +98,28 @@ class ANSIParser(object): | |||
97 | r, x = divmod(v-16, 36) | 98 | r, x = divmod(v-16, 36) |
98 | g, x = divmod(x, 6) | 99 | g, x = divmod(x, 6) |
99 | b = x % 6 | 100 | b = x % 6 |
100 | fg256 = ('#' + | 101 | self.fg256 = ('#' + |
101 | self.colors256[r] + | 102 | self.colors256[r] + |
102 | self.colors256[g] + | 103 | self.colors256[g] + |
103 | self.colors256[b]) | 104 | self.colors256[b]) |
104 | else: | 105 | else: |
105 | fg256 = 'g' + str(self.colorsgray[v-232]) | 106 | self.fg256 = 'g' + str(self.colorsgray[v-232]) |
107 | elif self.bg256 is True: | ||
108 | if v <= 0x08: | ||
109 | self.bg = v | ||
110 | #elif v <= 0x0f: | ||
111 | # self.bg = v - 0x08 | ||
112 | # self.bold = True | ||
113 | elif v <= 0xe7: | ||
114 | r, x = divmod(v-16, 36) | ||
115 | g, x = divmod(x, 6) | ||
116 | b = x % 6 | ||
117 | self.bg256 = ('#' + | ||
118 | self.colors256[r] + | ||
119 | self.colors256[g] + | ||
120 | self.colors256[b]) | ||
121 | else: | ||
122 | self.bg256 = 'g' + str(self.colorsgray[v-232]) | ||
106 | elif v == 0: | 123 | elif v == 0: |
107 | self.resetColor() | 124 | self.resetColor() |
108 | elif v == 1: | 125 | elif v == 1: |
@@ -111,21 +128,29 @@ class ANSIParser(object): | |||
111 | self.blink = True | 128 | self.blink = True |
112 | elif v>29 and v<38: | 129 | elif v>29 and v<38: |
113 | self.fg = v-30 | 130 | self.fg = v-30 |
131 | self.fg256 = None | ||
114 | elif v>39 and v<48: | 132 | elif v>39 and v<48: |
115 | self.bg = v-40 | 133 | self.bg = v-40 |
134 | self.bg256 = None | ||
116 | elif v==38: | 135 | elif v==38: |
117 | fg256=True | 136 | self.fg256=True |
137 | elif v==48: | ||
138 | self.bg256=True | ||
118 | fg = self.fg | 139 | fg = self.fg |
119 | if self.bold: | 140 | if self.bold: |
120 | fg += 8 | 141 | fg += 8 |
121 | fgattrs = [] | 142 | fgattrs = [] |
122 | if self.blink: | 143 | if self.blink: |
123 | fgattrs.append('blink') | 144 | fgattrs.append('blink') |
124 | if fg256: | 145 | if self.fg256: |
125 | fgattrs.append(fg256) | 146 | fgattrs.append(self.fg256) |
126 | else: | 147 | else: |
127 | fgattrs.append(self.colors[fg]) | 148 | fgattrs.append(self.colors[fg]) |
128 | self.attr = urwid.AttrSpec(', '.join(fgattrs), self.colors[self.bg]) | 149 | if self.bg256: |
150 | bg = self.bg256 | ||
151 | else: | ||
152 | bg = self.colors[self.bg] | ||
153 | self.attr = urwid.AttrSpec(', '.join(fgattrs), bg) | ||
129 | if c == 'A': | 154 | if c == 'A': |
130 | if not values: | 155 | if not values: |
131 | values = [1] | 156 | values = [1] |
diff --git a/presentty/rst.py b/presentty/rst.py index 41b3f97..e96ff21 100644 --- a/presentty/rst.py +++ b/presentty/rst.py | |||
@@ -460,7 +460,7 @@ def main(): | |||
460 | 460 | ||
461 | argp = argparse.ArgumentParser(description='Test RST parser') | 461 | argp = argparse.ArgumentParser(description='Test RST parser') |
462 | argp.add_argument('file', help='presentation file (RST)') | 462 | argp.add_argument('file', help='presentation file (RST)') |
463 | argp.add_argument('slides', nargs='?', default=[], | 463 | argp.add_argument('slides', nargs='*', default=[], |
464 | help='slides to render') | 464 | help='slides to render') |
465 | argp.add_argument('--render', action='store_true', | 465 | argp.add_argument('--render', action='store_true', |
466 | help='Fully render a slide') | 466 | help='Fully render a slide') |