Reset theme counters after each block is drawn.
authorJack Miller <jack@codezen.org>
Fri, 20 Jul 2012 00:17:41 +0000 (19:17 -0500)
committerJack Miller <jack@codezen.org>
Fri, 20 Jul 2012 00:17:41 +0000 (19:17 -0500)
This prevents half specified theme options from bleeding over.

Signed-off-by: Jack Miller <jack@codezen.org>
canto_curses/story.py
canto_curses/tag.py
canto_curses/text.py
canto_curses/theme.py

index a9b9a42..e3b0bc5 100644 (file)
@@ -9,7 +9,7 @@
 from canto_next.plugins import Plugin, PluginHandler
 from canto_next.hooks import on_hook, remove_hook
 
-from .theme import FakePad, WrapPad, theme_print, theme_len, theme_process
+from .theme import FakePad, WrapPad, theme_print, theme_len, theme_process, theme_reset
 from .parser import parse_conditionals, eval_theme_string, prep_for_display
 
 import traceback
@@ -352,5 +352,8 @@ class Story(PluginHandler):
             log.debug("Story exception:")
             log.debug("\n" + "".join(tb))
 
+        # Reset theme counters
+        theme_reset()
+
         # Return number of lines this story took to render entirely.
         return lines
index a5c256a..b24e25e 100644 (file)
@@ -9,7 +9,7 @@
 from canto_next.hooks import call_hook, on_hook, remove_hook
 
 from .parser import parse_conditionals, eval_theme_string, prep_for_display
-from .theme import FakePad, WrapPad, theme_print
+from .theme import FakePad, WrapPad, theme_print, theme_reset
 from .story import Story
 
 import traceback
@@ -354,4 +354,6 @@ class Tag(list):
             s = theme_print(pad, s, width, "", "")
             lines += 1
 
+        theme_reset()
+
         return lines
index b07ca28..c909ffe 100644 (file)
@@ -6,7 +6,7 @@
 #   it under the terms of the GNU General Public License version 2 as 
 #   published by the Free Software Foundation.
 
-from .theme import FakePad, WrapPad, theme_print, theme_lstrip, theme_border
+from .theme import FakePad, WrapPad, theme_print, theme_lstrip, theme_border, theme_reset
 from .command import command_format
 from .guibase import GuiBase
 from .theme import theme_print
@@ -149,6 +149,8 @@ class TextBox(GuiBase):
         if bb:
             lines += 1
 
+        theme_reset()
+
         # Return one extra line because the rest of the reader
         # code knows to avoid the dead cell on the bottom right
         # of every curses pad.
index c8ada0e..3f1e162 100644 (file)
@@ -292,6 +292,11 @@ def theme_lstrip(pad, uni):
 
     return (newlines * "\n") + r
 
+def theme_reset():
+    for key in attr_count:
+        attr_count[key] = 0
+    color_stack = []
+
 utf_chars = { "ls" : "│",
               "rs" : "│",
               "ts" : "─",