Created
April 4, 2015 17:28
-
-
Save poppe1219/9cfb99492ee70ecce7cb to your computer and use it in GitHub Desktop.
A test for parsing CSS to a json structure
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
cssText = '''article, aside, details, figcaption, figure, footer, header, hgroup, nav, section, summary { display: block; } | |
audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; } | |
audio:not([controls]) { display: none; height: 0; } | |
[hidden] { display: none; } | |
html { font-size: 100%; } | |
html, button, input, select, textarea { font-family: sans-serif; } | |
body, body { margin: 0; } | |
a:focus { outline: thin dotted; } | |
a:active, a:hover { outline: 0; } | |
h1 { font-size: 2em; margin: 0.67em 0; } | |
h2 { font-size: 1.5em; margin: 0.83em 0; } | |
h3 { font-size: 1.17em; margin: 1em 0; } | |
h4 { font-size: 1em; margin: 1.33em 0; } | |
h5 { font-size: 0.83em; margin: 1.67em 0; } | |
h6 { font-size: 0.75em; margin: 2.33em 0; } | |
abbr[title] { border-bottom: 1px dotted; } | |
b, strong { font-weight: bold; } | |
blockquote { margin: 1em 40px; } | |
dfn { font-style: italic; } | |
mark { background: #ff0; color: #000; } | |
pre { margin: 1em 0; } | |
p { margin: 0; } | |
code, kbd, pre, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; } | |
pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } | |
q { quotes: none; } | |
q:before, q:after { content: ''; content: none; } | |
small { font-size: 80%; } | |
sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } | |
sup { top: -0.5em; } | |
sub { bottom: -0.25em; } | |
dl, menu, ol, ul { margin: 1em 0; } | |
dd { margin: 0 0 0 40px; } | |
menu, ol, ul { padding: 0 0 0 40px; } | |
nav ul, nav ol { list-style: none; list-style-image: none; } | |
img { border: 0; } | |
svg:not(:root) { overflow: hidden; } | |
figure { margin: 0; } | |
form { margin: 0; } | |
fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } | |
legend { border: 0; } | |
button, input, select, textarea { font-size: 100%; } | |
button, input { line-height: normal; } | |
button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; } | |
button[disabled], input[disabled] { cursor: default; } | |
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; } | |
input[type="search"] { -webkit-appearance: textfield; box-sizing: content-box; } | |
input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } | |
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } | |
textarea { overflow: auto; } | |
table { border-collapse: collapse; border-spacing: 0; }''' | |
import json | |
# (\/\*[^.]+\*\/\n+)?([\t]*[a-zA-Z0-9\.# -_:@]+[\t\s]*\{[^}]+\}) | |
with open('bootstrap_source.css', 'w') as f: | |
sourceData = f.read() | |
data = [] | |
try: | |
for line in sourceData.splitlines(): | |
if not line: | |
return | |
line = line.strip() | |
#if line.startswith('/*') | |
lineParts = line.split('{') | |
names = lineParts[0].split(",") | |
rules = lineParts[1].replace("}", "").split(";") | |
declaration = ({ | |
"name": names if type(names) == str else [name.strip() | |
for name in names] | |
}) | |
for rule in rules: | |
rule = rule.strip() | |
if rule: | |
parts = rule.split(":") | |
declaration[parts[0].strip()] = parts[1].strip() | |
data.append(declaration) | |
with open('normalize_html5.json', 'w', encoding='utf-8') as f: | |
f.write(json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False)) | |
except Exception as e: | |
pass | |
except: | |
pass | |
print(json.dumps(data, sort_keys=True, indent=4, ensure_ascii=False)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment