Added django-compress.
[redakcja.git] / apps / compress / filters / csstidy_python / output.py
diff --git a/apps/compress/filters/csstidy_python/output.py b/apps/compress/filters/csstidy_python/output.py
new file mode 100644 (file)
index 0000000..795a0d0
--- /dev/null
@@ -0,0 +1,101 @@
+# CSSTidy - CSS Printer
+#
+# CSS Printer class
+#
+# This file is part of CSSTidy.
+#
+# CSSTidy is free software you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation either version 2 of the License, or
+# (at your option) any later version.
+#
+# CSSTidy is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with CSSTidy if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+#
+# @license http://opensource.org/licenses/gpl-license.php GNU Public License
+# @package csstidy
+# @author Dj Gilcrease (digitalxero at gmail dot com) 2005-2006
+
+import data
+
+class CSSPrinter(object):
+    def __init__(self, parser):
+        self.parser = parser
+        self._css = {}
+        self.__renderMethods = {'string': self.__renderString, 'file': self.__renderFile}
+
+#PUBLIC METHODS
+    def prepare(self, css):
+        self._css = css
+
+    def render(self, output="string", *args, **kwargs):
+        return self.__renderMethods[output](*args, **kwargs)
+
+#PRIVATE METHODS
+    def __renderString(self, *args, **kwargs):
+        ##OPTIMIZE##
+        template = self.parser.getSetting('template')
+        ret = ""
+
+        if template == 'highest_compression':
+            top_line_end = ""
+            iner_line_end = ""
+            bottom_line_end = ""
+            indent = ""
+
+        elif template == 'high_compression':
+            top_line_end = "\n"
+            iner_line_end = ""
+            bottom_line_end = "\n"
+            indent = ""
+
+        elif template == 'default':
+            top_line_end = "\n"
+            iner_line_end = "\n"
+            bottom_line_end = "\n\n"
+            indent = ""
+
+        elif template == 'low_compression':
+            top_line_end = "\n"
+            iner_line_end = "\n"
+            bottom_line_end = "\n\n"
+            indent = "    "
+
+        if self.parser.getSetting('timestamp'):
+            ret += '/# CSSTidy ' + self.parser.version + ': ' + datetime.now().strftime("%a, %d %b %Y %H:%M:%S +0000") + ' #/' + top_line_end
+
+        for item in self.parser._import:
+            ret += '@import(' + item + ');' + top_line_end
+
+        for item in self.parser._charset:
+            ret += '@charset(' + item + ');' + top_line_end
+
+        for item in self.parser._namespace:
+            ret += '@namespace(' + item + ');' + top_line_end
+
+        for media, css in self._css.iteritems():
+            for selector, cssdata in css.iteritems():
+                ret += selector + '{' + top_line_end
+
+                for item, value in cssdata.iteritems():
+                    ret += indent +  item + ':' + value + ';' + iner_line_end
+
+                ret += '}' + bottom_line_end
+
+        return ret
+
+    def __renderFile(self, filename=None, *args, **kwargs):
+        if filename is None:
+            return self.__renderString()
+
+        try:
+            f = open(filename, "w")
+            f.write(self.__renderString())
+        finally:
+            f.close()
\ No newline at end of file