/css-format

css formatting in python

Primary LanguagePython

css-format

This is a general purpose css formatting library, originally ported from the javascript formatter over at the js-beautifier project. css-format supports all the features of the original js-beautifer library, plus a bunch more (with more to come).

Options

  • indent_string: string to use for each indentation. defaults to \t
  • indent_size: number of indent strings to use for each indentation. defaults to 1
  • newline: the newline character. defaults to \n
  • end_with_newline: end the file with a blank line. defaults to False
  • comment_line_max: maximum number of characters in a comment line. comments longer than comment_line_max will be word-wrapped to new lines. newlines in the original comment are replaced with spaces prior to formatting. defaults to 100
  • blank_line_above_comments: always prefix comments with a blank line. defaults to True
  • indent_comment_body: indents multiline comments by indent_string*indent_size. defaults to True
  • one_line_comments_under_max: put comments under the maximum character limit all on one line, rather than putting the begin/end comment delimiters on their own lines. defaults to True
  • close_input: close the input file/stream after formatting, if applicable. defaults to True
  • close_output: close the output file/stream after formatting. defaults to False

Usage

you have potentially ugly css in a string, you want it to be awesome, you care about literally nothing else:

from cssformat import format_css

css = "/* make input elements more awesome */ input:hover{background-color: red;}"
css = format_css(css)

format some css in a string, indent with 2 spaces, end with newline:

from cssformat import format_css, CssFormatOptions

css = "/* make input elements more awesome */ input:hover{background-color: red;}"
opts = CssFormatOptions()
opts.end_with_newline = True
opts.indent_string = " "
opts.indent_size = 2

# note: the format_css helper function ignores non-default values for close_input and close_ouput, for obvious reasons
css = format_css(css, opts=opts)

Read from a css file, write formatted css to another file, default options:

import io
from cssformat import CssFormatter

finput = open("./mycss.css", "r")
foutput = open("./sweet_code.css", "w")
formatter = CssFormatter(finput, foutput)
formatter.format()
foutput.close() # the call to format has already called flush, and fsync if applicable

(alternate) Format some css stored in a string, turn off comment indention and single line comments, write output to a StringIO stream:

from StringIO import StringIO
from cssformat import CssFormatter, CssFormatOptions

my_css = "/*make text inputs beautiful*/ input[type=text]{color: green;background-color: red;}"
opts = CssFormatOptions()
opts.indent_comment_body=False
opts.one_line_comments_under_max=False
soutput = StringIO()

formatter = CssFormatter(my_css, soutput, opts=opts)
formatter.format()
sweet_code = soutput.getvalue()
soutput.close()

Why isn't everything in one big file?

Becuase everything in SourceIO.py is generic and can be re-used. Feel free to throw the contents of SourceIO.py in to cssformat.py and delete from SourceIO import SourceIO before you use it. I may add a pre-commit hook to do this automatically in the future.