stylus-source 0.19.2 → 0.19.3

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.19.2
1
+ 0.19.3
data/vendor/History.md CHANGED
@@ -1,4 +1,11 @@
1
1
 
2
+ 0.19.3 / 2011-11-17
3
+ ==================
4
+
5
+ * Added "include css" setting (need docs) to literally include imported css. Closes #448
6
+ * Added EOL escape. Related to #195
7
+ * Fixed tab support in lexical analysis (trailing colors etc). Closes #460
8
+
2
9
  0.19.2 / 2011-11-09
3
10
  ==================
4
11
 
data/vendor/lib/lexer.js CHANGED
@@ -53,7 +53,7 @@ var units = [
53
53
  * Unit RegExp.
54
54
  */
55
55
 
56
- var unit = new RegExp('^(-)?(\\d+\\.\\d+|\\d+|\\.\\d+)(' + units + ')? *');
56
+ var unit = new RegExp('^(-)?(\\d+\\.\\d+|\\d+|\\.\\d+)(' + units + ')?[ \\t]*');
57
57
 
58
58
  /**
59
59
  * Initialize a new `Lexer` with the given `str` and `options`.
@@ -65,11 +65,13 @@ var unit = new RegExp('^(-)?(\\d+\\.\\d+|\\d+|\\.\\d+)(' + units + ')? *');
65
65
 
66
66
  var Lexer = module.exports = function Lexer(str, options) {
67
67
  options = options || {};
68
- this.str = str.replace(/\r\n?/g, '\n');
69
68
  this.stash = [];
70
69
  this.indentStack = [];
71
70
  this.indentRe = null;
72
71
  this.lineno = 1;
72
+ this.str = str
73
+ .replace(/\r\n?/g, '\n')
74
+ .replace(/\\ *\n/g, ' ');
73
75
  };
74
76
 
75
77
  /**
@@ -228,12 +230,12 @@ Lexer.prototype = {
228
230
  },
229
231
 
230
232
  /**
231
- * ';' ' '*
233
+ * ';' [ \t]*
232
234
  */
233
235
 
234
236
  sep: function() {
235
237
  var captures;
236
- if (captures = /^; */.exec(this.str)) {
238
+ if (captures = /^;[ \t]*/.exec(this.str)) {
237
239
  this.skip(captures);
238
240
  return new Token(';');
239
241
  }
@@ -245,7 +247,7 @@ Lexer.prototype = {
245
247
 
246
248
  space: function() {
247
249
  var captures;
248
- if (captures = /^( +)/.exec(this.str)) {
250
+ if (captures = /^([ \t]+)/.exec(this.str)) {
249
251
  this.skip(captures);
250
252
  return new Token('space');
251
253
  }
@@ -257,7 +259,7 @@ Lexer.prototype = {
257
259
 
258
260
  escaped: function() {
259
261
  var captures;
260
- if (captures = /^\\(.) */.exec(this.str)) {
262
+ if (captures = /^\\(.)[ \t]*/.exec(this.str)) {
261
263
  var c = captures[1];
262
264
  this.skip(captures);
263
265
  return new Token('ident', new nodes.Literal(c));
@@ -271,7 +273,7 @@ Lexer.prototype = {
271
273
  literal: function() {
272
274
  // HACK attack !!!
273
275
  var captures;
274
- if (captures = /^@css *\{/.exec(this.str)) {
276
+ if (captures = /^@css[ \t]*\{/.exec(this.str)) {
275
277
  this.skip(captures);
276
278
  var c
277
279
  , braces = 1
@@ -296,7 +298,7 @@ Lexer.prototype = {
296
298
 
297
299
  important: function() {
298
300
  var captures;
299
- if (captures = /^!important */.exec(this.str)) {
301
+ if (captures = /^!important[ \t]*/.exec(this.str)) {
300
302
  this.skip(captures);
301
303
  return new Token('ident', new nodes.Literal('!important'));
302
304
  }
@@ -321,7 +323,7 @@ Lexer.prototype = {
321
323
 
322
324
  paren: function() {
323
325
  var captures;
324
- if (captures = /^([()]) */.exec(this.str)) {
326
+ if (captures = /^([()])[ \t]*/.exec(this.str)) {
325
327
  var paren = captures[1];
326
328
  this.skip(captures);
327
329
  if (')' == paren) this.isURL = false;
@@ -335,7 +337,7 @@ Lexer.prototype = {
335
337
 
336
338
  null: function() {
337
339
  var captures;
338
- if (captures = /^(null)\b */.exec(this.str)) {
340
+ if (captures = /^(null)\b[ \t]*/.exec(this.str)) {
339
341
  this.skip(captures);
340
342
  return new Token('null', nodes.null);
341
343
  }
@@ -352,7 +354,7 @@ Lexer.prototype = {
352
354
 
353
355
  keyword: function() {
354
356
  var captures;
355
- if (captures = /^(return|if|else|unless|for|in)\b */.exec(this.str)) {
357
+ if (captures = /^(return|if|else|unless|for|in)\b[ \t]*/.exec(this.str)) {
356
358
  var keyword = captures[1];
357
359
  this.skip(captures);
358
360
  return new Token(keyword, keyword);
@@ -372,7 +374,7 @@ Lexer.prototype = {
372
374
 
373
375
  namedop: function() {
374
376
  var captures;
375
- if (captures = /^(not|and|or|is a|is defined|isnt|is not|is)\b( *)/.exec(this.str)) {
377
+ if (captures = /^(not|and|or|is a|is defined|isnt|is not|is)\b([ \t]*)/.exec(this.str)) {
376
378
  var op = captures[1];
377
379
  this.skip(captures);
378
380
  op = alias[op] || op;
@@ -420,7 +422,7 @@ Lexer.prototype = {
420
422
 
421
423
  op: function() {
422
424
  var captures;
423
- if (captures = /^([.]{2,3}|&&|\|\||[!<>=?:]=|\*\*|[-+*\/%]=?|[,=?:!~<>&\[\]])( *)/.exec(this.str)) {
425
+ if (captures = /^([.]{2,3}|&&|\|\||[!<>=?:]=|\*\*|[-+*\/%]=?|[,=?:!~<>&\[\]])([ \t]*)/.exec(this.str)) {
424
426
  var op = captures[1];
425
427
  this.skip(captures);
426
428
  op = alias[op] || op;
@@ -436,7 +438,7 @@ Lexer.prototype = {
436
438
 
437
439
  media: function() {
438
440
  var captures;
439
- if (captures = /^@media *([^\/{\n]+)/.exec(this.str)) {
441
+ if (captures = /^@media[ \t]*([^\/{\n]+)/.exec(this.str)) {
440
442
  this.skip(captures);
441
443
  return new Token('media', captures[1].trim());
442
444
  }
@@ -448,7 +450,7 @@ Lexer.prototype = {
448
450
 
449
451
  scope: function() {
450
452
  var captures;
451
- if (captures = /^@scope *([^\/{\n]+)/.exec(this.str)) {
453
+ if (captures = /^@scope[ \t]*([^\/{\n]+)/.exec(this.str)) {
452
454
  this.skip(captures);
453
455
  return new Token('scope', captures[1].trim());
454
456
  }
@@ -460,7 +462,7 @@ Lexer.prototype = {
460
462
 
461
463
  atrule: function() {
462
464
  var captures;
463
- if (captures = /^@(import|(?:-(\w+)-)?keyframes|charset|font-face|page) */.exec(this.str)) {
465
+ if (captures = /^@(import|(?:-(\w+)-)?keyframes|charset|font-face|page)[ \t]*/.exec(this.str)) {
464
466
  this.skip(captures);
465
467
  var vendor = captures[2]
466
468
  , type = captures[1];
@@ -506,7 +508,7 @@ Lexer.prototype = {
506
508
 
507
509
  boolean: function() {
508
510
  var captures;
509
- if (captures = /^(true|false)\b( *)/.exec(this.str)) {
511
+ if (captures = /^(true|false)\b([ \t]*)/.exec(this.str)) {
510
512
  var val = nodes.Boolean('true' == captures[1]);
511
513
  this.skip(captures);
512
514
  var tok = new Token('boolean', val);
@@ -521,7 +523,7 @@ Lexer.prototype = {
521
523
 
522
524
  function: function() {
523
525
  var captures;
524
- if (captures = /^(-?[a-zA-Z$][-\w\d$]*)\(( *)/.exec(this.str)) {
526
+ if (captures = /^(-?[a-zA-Z$][-\w\d$]*)\(([ \t]*)/.exec(this.str)) {
525
527
  var name = captures[1];
526
528
  this.skip(captures);
527
529
  this.isURL = 'url' == name;
@@ -560,12 +562,12 @@ Lexer.prototype = {
560
562
  // figure out if we are using tabs or spaces
561
563
  } else {
562
564
  // try tabs
563
- re = /^\n([\t]*) */;
565
+ re = /^\n([\t]*)[ \t]*/;
564
566
  captures = re.exec(this.str);
565
567
 
566
568
  // nope, try spaces
567
569
  if (captures && !captures[1].length) {
568
- re = /^\n( *)/;
570
+ re = /^\n([ \t]*)/;
569
571
  captures = re.exec(this.str);
570
572
  }
571
573
 
@@ -633,7 +635,7 @@ Lexer.prototype = {
633
635
 
634
636
  string: function() {
635
637
  var captures;
636
- if (captures = /^("[^"]*"|'[^']*') */.exec(this.str)) {
638
+ if (captures = /^("[^"]*"|'[^']*')[ \t]*/.exec(this.str)) {
637
639
  var str = captures[1]
638
640
  , quote = captures[0][0];
639
641
  this.skip(captures);
@@ -661,7 +663,7 @@ Lexer.prototype = {
661
663
 
662
664
  n: function() {
663
665
  var captures;
664
- if (captures = /^#([a-fA-F0-9]{1}) */.exec(this.str)) {
666
+ if (captures = /^#([a-fA-F0-9]{1})[ \t]*/.exec(this.str)) {
665
667
  this.skip(captures);
666
668
  var n = parseInt(captures[1] + captures[1], 16)
667
669
  , color = new nodes.RGBA(n, n, n, 1);
@@ -676,7 +678,7 @@ Lexer.prototype = {
676
678
 
677
679
  nn: function() {
678
680
  var captures;
679
- if (captures = /^#([a-fA-F0-9]{2}) */.exec(this.str)) {
681
+ if (captures = /^#([a-fA-F0-9]{2})[ \t]*/.exec(this.str)) {
680
682
  this.skip(captures);
681
683
  var n = parseInt(captures[1], 16)
682
684
  , color = new nodes.RGBA(n, n, n, 1);
@@ -691,7 +693,7 @@ Lexer.prototype = {
691
693
 
692
694
  rgb: function() {
693
695
  var captures;
694
- if (captures = /^#([a-fA-F0-9]{3}) */.exec(this.str)) {
696
+ if (captures = /^#([a-fA-F0-9]{3})[ \t]*/.exec(this.str)) {
695
697
  this.skip(captures);
696
698
  var rgb = captures[1]
697
699
  , r = parseInt(rgb[0] + rgb[0], 16)
@@ -709,7 +711,7 @@ Lexer.prototype = {
709
711
 
710
712
  rgba: function() {
711
713
  var captures;
712
- if (captures = /^#([a-fA-F0-9]{4}) */.exec(this.str)) {
714
+ if (captures = /^#([a-fA-F0-9]{4})[ \t]*/.exec(this.str)) {
713
715
  this.skip(captures);
714
716
  var rgb = captures[1]
715
717
  , r = parseInt(rgb[0] + rgb[0], 16)
@@ -728,7 +730,7 @@ Lexer.prototype = {
728
730
 
729
731
  rrggbb: function() {
730
732
  var captures;
731
- if (captures = /^#([a-fA-F0-9]{6}) */.exec(this.str)) {
733
+ if (captures = /^#([a-fA-F0-9]{6})[ \t]*/.exec(this.str)) {
732
734
  this.skip(captures);
733
735
  var rgb = captures[1]
734
736
  , r = parseInt(rgb.substr(0, 2), 16)
@@ -746,7 +748,7 @@ Lexer.prototype = {
746
748
 
747
749
  rrggbbaa: function() {
748
750
  var captures;
749
- if (captures = /^#([a-fA-F0-9]{8}) */.exec(this.str)) {
751
+ if (captures = /^#([a-fA-F0-9]{8})[ \t]*/.exec(this.str)) {
750
752
  this.skip(captures);
751
753
  var rgb = captures[1]
752
754
  , r = parseInt(rgb.substr(0, 2), 16)
data/vendor/lib/stylus.js CHANGED
@@ -24,7 +24,7 @@ exports = module.exports = render;
24
24
  * Library version.
25
25
  */
26
26
 
27
- exports.version = '0.19.2';
27
+ exports.version = '0.19.3';
28
28
 
29
29
  /**
30
30
  * Expose nodes.
@@ -43,6 +43,7 @@ var Evaluator = module.exports = function Evaluator(root, options) {
43
43
  this.globals = options.globals || {};
44
44
  this.paths = options.paths || [];
45
45
  this.filename = options.filename;
46
+ this.includeCSS = options['include css'];
46
47
  this.paths.push(dirname(options.filename || '.'));
47
48
  this.stack.push(this.global = new Frame(root));
48
49
  this.warnings = options.warn;
@@ -572,7 +573,9 @@ Evaluator.prototype.visitImport = function(imported){
572
573
  var found
573
574
  , root = this.root
574
575
  , Parser = require('../parser')
575
- , path = this.visit(imported.path).first;
576
+ , path = this.visit(imported.path).first
577
+ , includeCSS = this.includeCSS
578
+ , literal;
576
579
 
577
580
  this.return = _;
578
581
 
@@ -584,8 +587,13 @@ Evaluator.prototype.visitImport = function(imported){
584
587
  var name = path = path.string;
585
588
 
586
589
  // Literal
587
- if (~path.indexOf('.css')) return imported;
588
- if (!~path.indexOf('.styl')) path += '.styl';
590
+ if (~path.indexOf('.css')) {
591
+ literal = true;
592
+ if (!includeCSS) return imported;
593
+ }
594
+
595
+ // support optional .styl
596
+ if (!literal && !~path.indexOf('.styl')) path += '.styl';
589
597
 
590
598
  // Lookup
591
599
  found = utils.lookup(path, this.paths, this.filename);
@@ -604,8 +612,11 @@ Evaluator.prototype.visitImport = function(imported){
604
612
  this.importStack.push(found);
605
613
  nodes.filename = found;
606
614
 
607
- var str = fs.readFileSync(found, 'utf8')
608
- , block = new nodes.Block
615
+ var str = fs.readFileSync(found, 'utf8');
616
+ if (literal) return new nodes.Literal(str);
617
+
618
+ // parse
619
+ var block = new nodes.Block
609
620
  , parser = new Parser(str, utils.merge({ root: block }, this.options));
610
621
 
611
622
  try {
data/vendor/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  { "name": "stylus"
2
2
  , "description": "Robust, expressive, and feature-rich CSS superset"
3
- , "version": "0.19.2"
3
+ , "version": "0.19.3"
4
4
  , "author": "TJ Holowaychuk <tj@vision-media.ca>"
5
5
  , "keywords": ["css", "parser", "style", "stylesheets", "jade", "language"]
6
6
  , "repository": "git://github.com/learnboost/stylus"
@@ -0,0 +1,11 @@
1
+ body {
2
+ foo: foo bar baz;
3
+ one: 0;
4
+ two: 1;
5
+ three: 2;
6
+ }
7
+ button {
8
+ padding: 1px 2px;
9
+ box-shadow: 0 -2px 2px #f00, 0 0 2px #f00, 0 0 5px #f00;
10
+ color: #f00;
11
+ }
@@ -0,0 +1,27 @@
1
+
2
+ list = foo \
3
+ bar \
4
+ baz
5
+
6
+ map = (one 1) \
7
+ (two 2) \
8
+ (three 3)
9
+
10
+ body
11
+ foo: list
12
+ for val, key in map
13
+ {val}: key
14
+
15
+ foo( \
16
+ a, \
17
+ b)
18
+ padding: unit(a, px) \
19
+ unit(b, px)
20
+
21
+ button
22
+ foo: 1 2
23
+ box-shadow: \
24
+ 0 -2px 2px red, \
25
+ 0 0 2px red, \
26
+ 0 0 5px red
27
+ color: red
@@ -0,0 +1,13 @@
1
+ #top {
2
+ width: 500px;
3
+ height: 40px;
4
+ }
5
+ #bottom {
6
+ height: 40px;
7
+ }
8
+ body {
9
+ foo: bar #fff baz;
10
+ }
11
+ body {
12
+ foo: 1;
13
+ }
@@ -0,0 +1,18 @@
1
+
2
+ #top
3
+ width 500px
4
+ height 40px;
5
+
6
+ #bottom
7
+ height 40px
8
+
9
+ body {
10
+ foo bar #fff baz
11
+ }
12
+
13
+ foo( one) {
14
+ foo: one
15
+ }
16
+
17
+ body
18
+ foo(1)
@@ -1,8 +1,4 @@
1
- #content{text-align:center}
2
- body{font:14px "Helvetica Neue";padding:30px;}
3
- body #dialog{z-index:20;background:#fff;padding:5px 20px;border-radius:10px;border:1px solid #eee;position:fixed;}
4
- body .tip{padding:10px 20px;background:#303030;border-radius:10px;color:#fff;font-size:.8em;text-shadow:-1px -1px 0 rgba(0,0,0,0.4);}
5
- body .tip.username-tip{position:fixed;}
6
- body .tip.username-tip canvas{position:absolute}
7
- body .tip.password-tip{position:fixed;}
8
- body .tip.password-tip canvas{position:absolute}
1
+
2
+ body {
3
+ foo: bar;
4
+ }
@@ -16,6 +16,7 @@ stylus(str)
16
16
  // .set('firebug', true)
17
17
  // .set('linenos', true)
18
18
  // .set('warn', true)
19
+ // .set('include css', true)
19
20
  .define('string', 'some string')
20
21
  .define('number', 15.5)
21
22
  .define('some-bool', true)
@@ -1,3 +1,5 @@
1
1
 
2
- #bin
3
- background: green
2
+ bools = true false
3
+
4
+ body
5
+ foo: bools[1] is null ? bools[0] : bools[1]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stylus-source
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.2
4
+ version: 0.19.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-09 00:00:00.000000000 Z
12
+ date: 2011-11-18 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Robust, expressive, and feature-rich CSS superset. This gem packages
15
15
  up stylus for use with the stylus gem.
@@ -315,6 +315,8 @@ files:
315
315
  - vendor/test/cases/css.selectors.styl
316
316
  - vendor/test/cases/css.whitespace.css
317
317
  - vendor/test/cases/css.whitespace.styl
318
+ - vendor/test/cases/eol-escape.css
319
+ - vendor/test/cases/eol-escape.styl
318
320
  - vendor/test/cases/escape.css
319
321
  - vendor/test/cases/escape.styl
320
322
  - vendor/test/cases/fontface.css
@@ -557,6 +559,8 @@ files:
557
559
  - vendor/test/cases/regression.440.styl
558
560
  - vendor/test/cases/regression.458.css
559
561
  - vendor/test/cases/regression.458.styl
562
+ - vendor/test/cases/regression.460.css
563
+ - vendor/test/cases/regression.460.styl
560
564
  - vendor/test/cases/reset.css
561
565
  - vendor/test/cases/reset.styl
562
566
  - vendor/test/cases/rule.charset.css