checkpoint media blocks
This commit is contained in:
@@ -30,17 +30,28 @@ class Block(Node):
|
||||
def fmt(self, fills):
|
||||
"""
|
||||
"""
|
||||
f = "%(identifier)s%(ws)s{%(nl)s%(proplist)s}%(eb)s"
|
||||
out = []
|
||||
name = self.name.fmt(fills)
|
||||
if self.parsed:
|
||||
f = "%(identifier)s%(ws)s{%(nl)s%(proplist)s}%(eb)s"
|
||||
name = self.name.fmt(fills)
|
||||
fills.update({
|
||||
'identifier': name,
|
||||
'proplist': ''.join([p.fmt(fills) for p in self.parsed]),
|
||||
})
|
||||
out.append(f % fills)
|
||||
if self.inner:
|
||||
out.append(''.join([p.fmt(fills) for p in self.inner]))
|
||||
if name.startswith('@media'):
|
||||
inner = ''.join([p.fmt(fills) for p in self.inner])
|
||||
inner = inner.replace(fills['nl'],
|
||||
fills['nl'] + fills['tab']).rstrip(fills['tab'])
|
||||
fills.update({
|
||||
'identifier': name,
|
||||
'proplist': fills['tab'] + inner,
|
||||
})
|
||||
out.append(f % fills)
|
||||
else:
|
||||
out.append(''.join([p.fmt(fills) for p in self.inner]))
|
||||
|
||||
return ''.join(out)
|
||||
|
||||
def copy(self, scope):
|
||||
|
||||
@@ -7,20 +7,23 @@ class Identifier(Node):
|
||||
def parse(self, scope):
|
||||
"""
|
||||
"""
|
||||
names = []
|
||||
name = []
|
||||
for n in utility.flatten(self.tokens):
|
||||
if n == '*':
|
||||
name.append('* ')
|
||||
elif n in '>+~':
|
||||
if name and name[-1] == ' ':
|
||||
name.pop()
|
||||
name.append('?%s?' % n)
|
||||
elif n == ',':
|
||||
names.append(name)
|
||||
name = []
|
||||
else:
|
||||
name.append(n)
|
||||
names = []
|
||||
name = []
|
||||
if self.tokens and self.tokens[0] == '@media':
|
||||
name = list(utility.flatten(self.tokens))
|
||||
else:
|
||||
for n in utility.flatten(self.tokens):
|
||||
if n == '*':
|
||||
name.append('* ')
|
||||
elif n in '>+~':
|
||||
if name and name[-1] == ' ':
|
||||
name.pop()
|
||||
name.append('?%s?' % n)
|
||||
elif n == ',':
|
||||
names.append(name)
|
||||
name = []
|
||||
else:
|
||||
name.append(n)
|
||||
names.append(name)
|
||||
parsed = self.root(scope, names) if scope else names
|
||||
self.parsed = [[i for i, j in utility.pairwise(part)
|
||||
@@ -35,6 +38,8 @@ class Identifier(Node):
|
||||
if parent:
|
||||
parent = parent[-1]
|
||||
return [self._pscn(part, n)
|
||||
if part[0] != '@media'
|
||||
else n
|
||||
for part in parent.parsed
|
||||
for n in names]
|
||||
return names
|
||||
|
||||
31
lesscpy/test/css/media.css
Normal file
31
lesscpy/test/css/media.css
Normal file
@@ -0,0 +1,31 @@
|
||||
@media screen,projection {
|
||||
html {
|
||||
background: #fffef0;
|
||||
color: #330000;
|
||||
}
|
||||
body {
|
||||
max-width: 35em;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
@media print {
|
||||
.class {
|
||||
color: blue;
|
||||
}
|
||||
.class .sub {
|
||||
width: 42;
|
||||
}
|
||||
.top, header > h1 {
|
||||
color: #444444;
|
||||
}
|
||||
}
|
||||
@media screen {
|
||||
body {
|
||||
max-width: 480;
|
||||
}
|
||||
}
|
||||
@media all and (orientation:portrait) {
|
||||
aside {
|
||||
float: none;
|
||||
}
|
||||
}
|
||||
11
lesscpy/test/css/media.min.css
vendored
Normal file
11
lesscpy/test/css/media.min.css
vendored
Normal file
@@ -0,0 +1,11 @@
|
||||
@media screen,projection{html{background:#fffef0;color:#330000;}
|
||||
body{max-width:35em;margin:0 auto;}
|
||||
}
|
||||
@media print{.class{color:blue;}
|
||||
.class .sub{width:42;}
|
||||
.top,header>h1{color:#444444;}
|
||||
}
|
||||
@media screen{body{max-width:480;}
|
||||
}
|
||||
@media all and (orientation:portrait){aside{float:none;}
|
||||
}
|
||||
@@ -82,6 +82,20 @@ class TestIdentifier(unittest.TestCase):
|
||||
self.assertEqual(id.raw(), '.a% %.next% %.c% %.deep%.a%'
|
||||
' %.next% %.d% %.deep%.b% %.next%'
|
||||
' %.c% %.deep%.b% %.next% %.d% %.deep')
|
||||
|
||||
def test_media(self):
|
||||
fl = {'ws': ' '}
|
||||
sc = Scope()
|
||||
sc.push()
|
||||
sc.current = Identifier(['@media', ' ', 'screen', ',', 'projection'], 0).parse(sc)
|
||||
self.assertEqual(sc.current.fmt(fl), '@media screen,projection')
|
||||
for i in [
|
||||
(['html'], 'html'),
|
||||
]:
|
||||
t, r = i
|
||||
id = Identifier(t, 0)
|
||||
self.assertEqual(id.parse(sc).fmt(fl), r, i)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user