stylus-source 0.15.4 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (577) hide show
  1. data/.gitignore +1 -0
  2. data/Rakefile +39 -0
  3. data/VERSION +1 -0
  4. data/lib/stylus/source.rb +1 -1
  5. data/stylus-source.gemspec +2 -2
  6. data/vendor/History.md +525 -0
  7. data/vendor/LICENSE +22 -0
  8. data/vendor/Makefile +20 -0
  9. data/vendor/Readme.md +127 -0
  10. data/vendor/bin/stylus +606 -0
  11. data/vendor/bm.js +22 -0
  12. data/vendor/docs/bifs.md +582 -0
  13. data/vendor/docs/comments.md +35 -0
  14. data/vendor/docs/compare.md +81 -0
  15. data/vendor/docs/conditionals.md +107 -0
  16. data/vendor/docs/css-style.md +77 -0
  17. data/vendor/docs/error-reporting.md +50 -0
  18. data/vendor/docs/escape.md +27 -0
  19. data/vendor/docs/executable.md +159 -0
  20. data/vendor/docs/firebug.md +60 -0
  21. data/vendor/docs/font-face.md +26 -0
  22. data/vendor/docs/functions.md +192 -0
  23. data/vendor/docs/functions.url.md +30 -0
  24. data/vendor/docs/gedit.md +24 -0
  25. data/vendor/docs/import.md +73 -0
  26. data/vendor/docs/interpolation.md +55 -0
  27. data/vendor/docs/introspection.md +39 -0
  28. data/vendor/docs/iteration.md +100 -0
  29. data/vendor/docs/js.md +136 -0
  30. data/vendor/docs/keyframes.md +120 -0
  31. data/vendor/docs/kwargs.md +35 -0
  32. data/vendor/docs/literal.md +16 -0
  33. data/vendor/docs/media.md +18 -0
  34. data/vendor/docs/middleware.md +73 -0
  35. data/vendor/docs/mixins.md +130 -0
  36. data/vendor/docs/operators.md +451 -0
  37. data/vendor/docs/selectors.md +131 -0
  38. data/vendor/docs/textmate.md +4 -0
  39. data/vendor/docs/vargs.md +84 -0
  40. data/vendor/docs/variables.md +78 -0
  41. data/vendor/editors/Stylus.tmbundle/Commands/Compile and Display CSS.tmCommand +33 -0
  42. data/vendor/editors/Stylus.tmbundle/Preferences/Comments.tmPreferences +36 -0
  43. data/vendor/editors/Stylus.tmbundle/Syntaxes/Stylus.tmLanguage +166 -0
  44. data/vendor/editors/Stylus.tmbundle/info.plist +10 -0
  45. data/vendor/editors/gedit/styl.lang +475 -0
  46. data/vendor/examples/arithmetic.js +12 -0
  47. data/vendor/examples/arithmetic.styl +29 -0
  48. data/vendor/examples/basic.js +12 -0
  49. data/vendor/examples/basic.styl +8 -0
  50. data/vendor/examples/builtins.js +12 -0
  51. data/vendor/examples/builtins.styl +56 -0
  52. data/vendor/examples/comments.js +11 -0
  53. data/vendor/examples/comments.styl +15 -0
  54. data/vendor/examples/compress.js +12 -0
  55. data/vendor/examples/conversions.js +12 -0
  56. data/vendor/examples/conversions.styl +34 -0
  57. data/vendor/examples/functions.js +12 -0
  58. data/vendor/examples/functions.styl +30 -0
  59. data/vendor/examples/gradients.js +13 -0
  60. data/vendor/examples/gradients.styl +8 -0
  61. data/vendor/examples/images/gopher.jpg +0 -0
  62. data/vendor/examples/images/gradient.svg +9 -0
  63. data/vendor/examples/images/jesus.gif +0 -0
  64. data/vendor/examples/images/sprite.gif +0 -0
  65. data/vendor/examples/images.js +20 -0
  66. data/vendor/examples/images.styl +15 -0
  67. data/vendor/examples/implicit-functions.js +12 -0
  68. data/vendor/examples/implicit-functions.styl +23 -0
  69. data/vendor/examples/import.js +12 -0
  70. data/vendor/examples/import.styl +11 -0
  71. data/vendor/examples/js-functions.js +55 -0
  72. data/vendor/examples/js-functions.styl +23 -0
  73. data/vendor/examples/literal.js +12 -0
  74. data/vendor/examples/literal.styl +8 -0
  75. data/vendor/examples/middleware.js +23 -0
  76. data/vendor/examples/mixins/box.styl +14 -0
  77. data/vendor/examples/mixins/gradients.styl +92 -0
  78. data/vendor/examples/nesting.js +12 -0
  79. data/vendor/examples/nesting.styl +14 -0
  80. data/vendor/examples/variables.js +12 -0
  81. data/vendor/examples/variables.styl +24 -0
  82. data/vendor/index.js +2 -0
  83. data/{lib/stylus → vendor/lib}/colors.js +0 -0
  84. data/{lib/stylus → vendor/lib}/convert/css.js +0 -0
  85. data/{lib/stylus → vendor/lib}/errors.js +0 -0
  86. data/{lib/stylus → vendor/lib}/functions/image.js +0 -0
  87. data/{lib/stylus → vendor/lib}/functions/index.js +0 -0
  88. data/{lib/stylus → vendor/lib}/functions/index.styl +11 -2
  89. data/{lib/stylus → vendor/lib}/functions/url.js +0 -0
  90. data/{lib/stylus → vendor/lib}/lexer.js +14 -1
  91. data/{lib/stylus → vendor/lib}/middleware.js +5 -1
  92. data/{lib/stylus → vendor/lib}/nodes/arguments.js +0 -0
  93. data/{lib/stylus → vendor/lib}/nodes/binop.js +0 -0
  94. data/{lib/stylus → vendor/lib}/nodes/block.js +0 -0
  95. data/{lib/stylus → vendor/lib}/nodes/boolean.js +0 -0
  96. data/{lib/stylus → vendor/lib}/nodes/call.js +0 -0
  97. data/{lib/stylus → vendor/lib}/nodes/charset.js +0 -0
  98. data/{lib/stylus → vendor/lib}/nodes/comment.js +0 -0
  99. data/{lib/stylus → vendor/lib}/nodes/each.js +0 -0
  100. data/{lib/stylus → vendor/lib}/nodes/expression.js +32 -0
  101. data/{lib/stylus → vendor/lib}/nodes/fontface.js +0 -0
  102. data/{lib/stylus → vendor/lib}/nodes/function.js +0 -0
  103. data/{lib/stylus → vendor/lib}/nodes/group.js +0 -0
  104. data/{lib/stylus → vendor/lib}/nodes/hsla.js +0 -0
  105. data/{lib/stylus → vendor/lib}/nodes/ident.js +0 -0
  106. data/{lib/stylus → vendor/lib}/nodes/if.js +0 -0
  107. data/{lib/stylus → vendor/lib}/nodes/import.js +0 -0
  108. data/{lib/stylus → vendor/lib}/nodes/index.js +0 -0
  109. data/{lib/stylus → vendor/lib}/nodes/jsliteral.js +0 -0
  110. data/{lib/stylus → vendor/lib}/nodes/keyframes.js +0 -0
  111. data/{lib/stylus → vendor/lib}/nodes/literal.js +0 -0
  112. data/{lib/stylus → vendor/lib}/nodes/media.js +0 -0
  113. data/{lib/stylus → vendor/lib}/nodes/node.js +14 -0
  114. data/{lib/stylus → vendor/lib}/nodes/null.js +0 -0
  115. data/{lib/stylus → vendor/lib}/nodes/page.js +0 -0
  116. data/{lib/stylus → vendor/lib}/nodes/params.js +0 -0
  117. data/{lib/stylus → vendor/lib}/nodes/property.js +0 -0
  118. data/{lib/stylus → vendor/lib}/nodes/return.js +0 -0
  119. data/{lib/stylus → vendor/lib}/nodes/rgba.js +4 -2
  120. data/{lib/stylus → vendor/lib}/nodes/root.js +0 -0
  121. data/{lib/stylus → vendor/lib}/nodes/selector.js +0 -0
  122. data/{lib/stylus → vendor/lib}/nodes/string.js +0 -0
  123. data/{lib/stylus → vendor/lib}/nodes/ternary.js +0 -0
  124. data/{lib/stylus → vendor/lib}/nodes/unaryop.js +0 -0
  125. data/{lib/stylus → vendor/lib}/nodes/unit.js +0 -0
  126. data/{lib/stylus → vendor/lib}/parser.js +17 -2
  127. data/{lib/stylus → vendor/lib}/renderer.js +0 -0
  128. data/{lib/stylus → vendor/lib}/stack/frame.js +0 -0
  129. data/{lib/stylus → vendor/lib}/stack/index.js +0 -0
  130. data/{lib/stylus → vendor/lib}/stack/scope.js +0 -0
  131. data/{lib/stylus → vendor/lib}/stylus.js +1 -1
  132. data/{lib/stylus → vendor/lib}/token.js +0 -0
  133. data/{lib/stylus → vendor/lib}/utils.js +0 -0
  134. data/{lib/stylus → vendor/lib}/visitor/compiler.js +1 -0
  135. data/{lib/stylus → vendor/lib}/visitor/evaluator.js +9 -3
  136. data/{lib/stylus → vendor/lib}/visitor/index.js +0 -0
  137. data/{lib → vendor}/node_modules/cssom/Jakefile +0 -0
  138. data/{lib → vendor}/node_modules/cssom/README.mdown +0 -0
  139. data/{lib → vendor}/node_modules/cssom/Rakefile +0 -0
  140. data/{lib → vendor}/node_modules/cssom/docs/bar.css +0 -0
  141. data/{lib → vendor}/node_modules/cssom/docs/demo.css +0 -0
  142. data/{lib → vendor}/node_modules/cssom/docs/foo.css +0 -0
  143. data/{lib → vendor}/node_modules/cssom/docs/parse.html +0 -0
  144. data/{lib → vendor}/node_modules/cssom/docs/parse2.html +0 -0
  145. data/{lib → vendor}/node_modules/cssom/index.html +0 -0
  146. data/{lib → vendor}/node_modules/cssom/lib/CSSImportRule.js +0 -0
  147. data/{lib → vendor}/node_modules/cssom/lib/CSSMediaRule.js +0 -0
  148. data/{lib → vendor}/node_modules/cssom/lib/CSSOM.js +0 -0
  149. data/{lib → vendor}/node_modules/cssom/lib/CSSRule.js +0 -0
  150. data/{lib → vendor}/node_modules/cssom/lib/CSSStyleDeclaration.js +0 -0
  151. data/{lib → vendor}/node_modules/cssom/lib/CSSStyleRule.js +0 -0
  152. data/{lib → vendor}/node_modules/cssom/lib/CSSStyleSheet.js +0 -0
  153. data/{lib → vendor}/node_modules/cssom/lib/MediaList.js +0 -0
  154. data/{lib → vendor}/node_modules/cssom/lib/StyleSheet.js +0 -0
  155. data/{lib → vendor}/node_modules/cssom/lib/clone.js +0 -0
  156. data/{lib → vendor}/node_modules/cssom/lib/index.js +0 -0
  157. data/{lib → vendor}/node_modules/cssom/lib/parse.js +0 -0
  158. data/{lib → vendor}/node_modules/cssom/media.html +0 -0
  159. data/{lib → vendor}/node_modules/cssom/package.json +0 -0
  160. data/{lib → vendor}/node_modules/cssom/plugins/toHTML.js +0 -0
  161. data/{lib → vendor}/node_modules/cssom/server/index.html +0 -0
  162. data/{lib → vendor}/node_modules/cssom/server/index.js +0 -0
  163. data/{lib → vendor}/node_modules/cssom/shorthands.html +0 -0
  164. data/{lib → vendor}/node_modules/cssom/test/CSSStyleDeclaration.test.js +0 -0
  165. data/{lib → vendor}/node_modules/cssom/test/CSSStyleRule.test.js +0 -0
  166. data/{lib → vendor}/node_modules/cssom/test/CSSStyleSheet.test.js +0 -0
  167. data/{lib → vendor}/node_modules/cssom/test/MediaList.test.js +0 -0
  168. data/{lib → vendor}/node_modules/cssom/test/clone.test.js +0 -0
  169. data/{lib → vendor}/node_modules/cssom/test/fixtures/dummy.css +0 -0
  170. data/{lib → vendor}/node_modules/cssom/test/helper.js +0 -0
  171. data/{lib → vendor}/node_modules/cssom/test/index.html +0 -0
  172. data/{lib → vendor}/node_modules/cssom/test/parse.test.js +0 -0
  173. data/{lib → vendor}/node_modules/cssom/test/vendor/qunit.css +0 -0
  174. data/{lib → vendor}/node_modules/cssom/test/vendor/qunit.js +0 -0
  175. data/{lib → vendor}/node_modules/growl/History.md +0 -0
  176. data/{lib → vendor}/node_modules/growl/Readme.md +0 -0
  177. data/{lib → vendor}/node_modules/growl/lib/growl.js +0 -0
  178. data/{lib → vendor}/node_modules/growl/package.json +0 -0
  179. data/{lib → vendor}/node_modules/growl/test.js +0 -0
  180. data/vendor/node_modules/mkdirp/LICENSE +21 -0
  181. data/vendor/node_modules/mkdirp/README.markdown +21 -0
  182. data/vendor/node_modules/mkdirp/examples/pow.js +6 -0
  183. data/vendor/node_modules/mkdirp/examples/pow.js.orig +6 -0
  184. data/vendor/node_modules/mkdirp/examples/pow.js.rej +19 -0
  185. data/vendor/node_modules/mkdirp/index.js +20 -0
  186. data/vendor/node_modules/mkdirp/package.json +23 -0
  187. data/vendor/node_modules/mkdirp/test/mkdirp.js +28 -0
  188. data/vendor/node_modules/mkdirp/test/race.js +41 -0
  189. data/vendor/node_modules/mkdirp/test/rel.js +32 -0
  190. data/vendor/package.json +16 -0
  191. data/vendor/test/cases/arithmetic.color.css +44 -0
  192. data/vendor/test/cases/arithmetic.color.styl +48 -0
  193. data/vendor/test/cases/arithmetic.css +23 -0
  194. data/vendor/test/cases/arithmetic.styl +30 -0
  195. data/vendor/test/cases/arithmetic.unary.css +16 -0
  196. data/vendor/test/cases/arithmetic.unary.styl +16 -0
  197. data/vendor/test/cases/atscope.css +21 -0
  198. data/vendor/test/cases/atscope.styl +23 -0
  199. data/vendor/test/cases/bifs.add-property.css +21 -0
  200. data/vendor/test/cases/bifs.add-property.styl +48 -0
  201. data/vendor/test/cases/bifs.components.css +9 -0
  202. data/vendor/test/cases/bifs.components.styl +9 -0
  203. data/vendor/test/cases/bifs.dark.css +5 -0
  204. data/vendor/test/cases/bifs.dark.styl +4 -0
  205. data/vendor/test/cases/bifs.darken.css +8 -0
  206. data/vendor/test/cases/bifs.darken.styl +9 -0
  207. data/vendor/test/cases/bifs.fade.css +6 -0
  208. data/vendor/test/cases/bifs.fade.styl +6 -0
  209. data/vendor/test/cases/bifs.image-size.css +9 -0
  210. data/vendor/test/cases/bifs.image-size.styl +16 -0
  211. data/vendor/test/cases/bifs.join.css +18 -0
  212. data/vendor/test/cases/bifs.join.styl +21 -0
  213. data/vendor/test/cases/bifs.last.css +5 -0
  214. data/vendor/test/cases/bifs.last.styl +6 -0
  215. data/vendor/test/cases/bifs.length.css +10 -0
  216. data/vendor/test/cases/bifs.length.styl +18 -0
  217. data/vendor/test/cases/bifs.light.css +5 -0
  218. data/vendor/test/cases/bifs.light.styl +4 -0
  219. data/vendor/test/cases/bifs.lighten.css +14 -0
  220. data/vendor/test/cases/bifs.lighten.styl +14 -0
  221. data/vendor/test/cases/bifs.lookup.css +3 -0
  222. data/vendor/test/cases/bifs.lookup.styl +8 -0
  223. data/vendor/test/cases/bifs.match.css +4 -0
  224. data/vendor/test/cases/bifs.match.styl +9 -0
  225. data/vendor/test/cases/bifs.opposite-position.css +8 -0
  226. data/vendor/test/cases/bifs.opposite-position.styl +9 -0
  227. data/vendor/test/cases/bifs.push.css +25 -0
  228. data/vendor/test/cases/bifs.push.styl +48 -0
  229. data/vendor/test/cases/bifs.rgba.css +5 -0
  230. data/vendor/test/cases/bifs.rgba.styl +4 -0
  231. data/vendor/test/cases/bifs.s.css +11 -0
  232. data/vendor/test/cases/bifs.s.styl +12 -0
  233. data/vendor/test/cases/bifs.type.css +11 -0
  234. data/vendor/test/cases/bifs.type.styl +12 -0
  235. data/vendor/test/cases/bifs.unit.css +6 -0
  236. data/vendor/test/cases/bifs.unit.styl +5 -0
  237. data/vendor/test/cases/bifs.unquote.css +5 -0
  238. data/vendor/test/cases/bifs.unquote.styl +8 -0
  239. data/vendor/test/cases/bifs.url.css +11 -0
  240. data/vendor/test/cases/bifs.url.styl +15 -0
  241. data/vendor/test/cases/coercion.css +6 -0
  242. data/vendor/test/cases/coercion.styl +5 -0
  243. data/vendor/test/cases/comments.css +18 -0
  244. data/vendor/test/cases/comments.styl +28 -0
  245. data/vendor/test/cases/compress.comments.css +2 -0
  246. data/vendor/test/cases/compress.comments.styl +5 -0
  247. data/vendor/test/cases/compress.units.css +2 -0
  248. data/vendor/test/cases/compress.units.styl +18 -0
  249. data/vendor/test/cases/conditional-assignment.css +4 -0
  250. data/vendor/test/cases/conditional-assignment.styl +9 -0
  251. data/vendor/test/cases/control.blueprint.ie.css +126 -0
  252. data/vendor/test/cases/control.blueprint.ie.styl +36 -0
  253. data/vendor/test/cases/control.blueprint.screen.css +1103 -0
  254. data/vendor/test/cases/control.blueprint.screen.styl +265 -0
  255. data/vendor/test/cases/control.boilerplate.css +473 -0
  256. data/vendor/test/cases/control.boilerplate.styl +265 -0
  257. data/vendor/test/cases/css.functions.single-line.css +9 -0
  258. data/vendor/test/cases/css.functions.single-line.styl +13 -0
  259. data/vendor/test/cases/css.if.css +8 -0
  260. data/vendor/test/cases/css.if.styl +21 -0
  261. data/vendor/test/cases/css.keyframes.css +57 -0
  262. data/vendor/test/cases/css.keyframes.styl +48 -0
  263. data/vendor/test/cases/css.large.css +172 -0
  264. data/vendor/test/cases/css.large.styl +172 -0
  265. data/vendor/test/cases/css.media.css +15 -0
  266. data/vendor/test/cases/css.media.styl +17 -0
  267. data/vendor/test/cases/css.mixins.braces.css +38 -0
  268. data/vendor/test/cases/css.mixins.braces.styl +53 -0
  269. data/vendor/test/cases/css.mixins.css +38 -0
  270. data/vendor/test/cases/css.mixins.root.css +26 -0
  271. data/vendor/test/cases/css.mixins.root.styl +25 -0
  272. data/vendor/test/cases/css.mixins.root.wonky.css +26 -0
  273. data/vendor/test/cases/css.mixins.root.wonky.styl +17 -0
  274. data/vendor/test/cases/css.mixins.styl +47 -0
  275. data/vendor/test/cases/css.selector.interpolation.css +91 -0
  276. data/vendor/test/cases/css.selector.interpolation.styl +90 -0
  277. data/vendor/test/cases/css.selectors.css +38 -0
  278. data/vendor/test/cases/css.selectors.styl +53 -0
  279. data/vendor/test/cases/css.whitespace.css +37 -0
  280. data/vendor/test/cases/css.whitespace.styl +38 -0
  281. data/vendor/test/cases/escape.css +4 -0
  282. data/vendor/test/cases/escape.styl +4 -0
  283. data/vendor/test/cases/fontface.css +4 -0
  284. data/vendor/test/cases/fontface.styl +5 -0
  285. data/vendor/test/cases/for.complex.css +44 -0
  286. data/vendor/test/cases/for.complex.styl +28 -0
  287. data/vendor/test/cases/for.css +52 -0
  288. data/vendor/test/cases/for.function.css +20 -0
  289. data/vendor/test/cases/for.function.styl +51 -0
  290. data/vendor/test/cases/for.styl +44 -0
  291. data/vendor/test/cases/function.arguments.css +4 -0
  292. data/vendor/test/cases/function.arguments.styl +14 -0
  293. data/vendor/test/cases/function.literals.css +6 -0
  294. data/vendor/test/cases/function.literals.styl +12 -0
  295. data/vendor/test/cases/functions.arg-calls.css +3 -0
  296. data/vendor/test/cases/functions.arg-calls.styl +9 -0
  297. data/vendor/test/cases/functions.call.css +4 -0
  298. data/vendor/test/cases/functions.call.styl +7 -0
  299. data/vendor/test/cases/functions.css +11 -0
  300. data/vendor/test/cases/functions.defaults.css +15 -0
  301. data/vendor/test/cases/functions.defaults.styl +30 -0
  302. data/vendor/test/cases/functions.multi-line.css +9 -0
  303. data/vendor/test/cases/functions.multi-line.styl +25 -0
  304. data/vendor/test/cases/functions.multiple-calls.css +13 -0
  305. data/vendor/test/cases/functions.multiple-calls.styl +26 -0
  306. data/vendor/test/cases/functions.nested-calls.css +3 -0
  307. data/vendor/test/cases/functions.nested-calls.styl +9 -0
  308. data/vendor/test/cases/functions.nested.css +10 -0
  309. data/vendor/test/cases/functions.nested.styl +37 -0
  310. data/vendor/test/cases/functions.property.css +10 -0
  311. data/vendor/test/cases/functions.property.styl +11 -0
  312. data/vendor/test/cases/functions.return.css +15 -0
  313. data/vendor/test/cases/functions.return.each.css +10 -0
  314. data/vendor/test/cases/functions.return.each.styl +23 -0
  315. data/vendor/test/cases/functions.return.styl +86 -0
  316. data/vendor/test/cases/functions.styl +34 -0
  317. data/vendor/test/cases/functions.variable.css +9 -0
  318. data/vendor/test/cases/functions.variable.ident.css +3 -0
  319. data/vendor/test/cases/functions.variable.ident.styl +11 -0
  320. data/vendor/test/cases/functions.variable.styl +27 -0
  321. data/vendor/test/cases/hack.star.css +27 -0
  322. data/vendor/test/cases/hack.star.styl +37 -0
  323. data/vendor/test/cases/if.css +43 -0
  324. data/vendor/test/cases/if.else.css +6 -0
  325. data/vendor/test/cases/if.else.styl +16 -0
  326. data/vendor/test/cases/if.mixin.css +7 -0
  327. data/vendor/test/cases/if.mixin.styl +24 -0
  328. data/vendor/test/cases/if.postfix.css +61 -0
  329. data/vendor/test/cases/if.postfix.styl +110 -0
  330. data/vendor/test/cases/if.selectors.css +16 -0
  331. data/vendor/test/cases/if.selectors.styl +22 -0
  332. data/vendor/test/cases/if.styl +99 -0
  333. data/vendor/test/cases/import.basic/a.styl +5 -0
  334. data/vendor/test/cases/import.basic/b.styl +5 -0
  335. data/vendor/test/cases/import.basic/c.styl +3 -0
  336. data/vendor/test/cases/import.basic.css +11 -0
  337. data/vendor/test/cases/import.basic.styl +4 -0
  338. data/vendor/test/cases/import.complex/a.styl +4 -0
  339. data/vendor/test/cases/import.complex/c.styl +2 -0
  340. data/vendor/test/cases/import.complex/nested/b.styl +4 -0
  341. data/vendor/test/cases/import.complex.css +9 -0
  342. data/vendor/test/cases/import.complex.styl +1 -0
  343. data/vendor/test/cases/import.index/vendor/a.styl +2 -0
  344. data/vendor/test/cases/import.index/vendor/b.styl +2 -0
  345. data/vendor/test/cases/import.index/vendor/c.styl +2 -0
  346. data/vendor/test/cases/import.index/vendor/index.styl +4 -0
  347. data/vendor/test/cases/import.index.css +9 -0
  348. data/vendor/test/cases/import.index.styl +2 -0
  349. data/vendor/test/cases/import.literal.css +2 -0
  350. data/vendor/test/cases/import.literal.styl +3 -0
  351. data/vendor/test/cases/import.mixins.css +7 -0
  352. data/vendor/test/cases/import.mixins.styl +9 -0
  353. data/vendor/test/cases/import.ordering/five.styl +2 -0
  354. data/vendor/test/cases/import.ordering/four.styl +4 -0
  355. data/vendor/test/cases/import.ordering/two.styl +2 -0
  356. data/vendor/test/cases/import.ordering.css +15 -0
  357. data/vendor/test/cases/import.ordering.styl +12 -0
  358. data/vendor/test/cases/important.css +6 -0
  359. data/vendor/test/cases/important.styl +6 -0
  360. data/vendor/test/cases/interpolation.properties.css +40 -0
  361. data/vendor/test/cases/interpolation.properties.styl +56 -0
  362. data/vendor/test/cases/introspection.css +7 -0
  363. data/vendor/test/cases/introspection.styl +14 -0
  364. data/vendor/test/cases/jquery.css +3 -0
  365. data/vendor/test/cases/jquery.styl +5 -0
  366. data/vendor/test/cases/keyframes.css +9 -0
  367. data/vendor/test/cases/keyframes.fabrication.css +18 -0
  368. data/vendor/test/cases/keyframes.fabrication.defaults.css +45 -0
  369. data/vendor/test/cases/keyframes.fabrication.defaults.styl +9 -0
  370. data/vendor/test/cases/keyframes.fabrication.styl +11 -0
  371. data/vendor/test/cases/keyframes.styl +6 -0
  372. data/vendor/test/cases/kwargs.css +63 -0
  373. data/vendor/test/cases/kwargs.styl +74 -0
  374. data/vendor/test/cases/list.css +3 -0
  375. data/vendor/test/cases/list.styl +3 -0
  376. data/vendor/test/cases/literal.color.css +6 -0
  377. data/vendor/test/cases/literal.color.styl +5 -0
  378. data/vendor/test/cases/literal.css +10 -0
  379. data/vendor/test/cases/literal.styl +18 -0
  380. data/vendor/test/cases/media.css +14 -0
  381. data/vendor/test/cases/media.styl +11 -0
  382. data/vendor/test/cases/mixin.conditional.css +19 -0
  383. data/vendor/test/cases/mixin.conditional.styl +36 -0
  384. data/vendor/test/cases/mixin.order.conditional.css +11 -0
  385. data/vendor/test/cases/mixin.order.conditional.styl +20 -0
  386. data/vendor/test/cases/mixin.order.css +9 -0
  387. data/vendor/test/cases/mixin.order.nested.css +9 -0
  388. data/vendor/test/cases/mixin.order.nested.styl +21 -0
  389. data/vendor/test/cases/mixin.order.styl +20 -0
  390. data/vendor/test/cases/mixins/box.styl +11 -0
  391. data/vendor/test/cases/mixins.complex.css +30 -0
  392. data/vendor/test/cases/mixins.complex.fix-to.css +15 -0
  393. data/vendor/test/cases/mixins.complex.fix-to.styl +28 -0
  394. data/vendor/test/cases/mixins.complex.styl +41 -0
  395. data/vendor/test/cases/mixins.conditional.css +3 -0
  396. data/vendor/test/cases/mixins.conditional.styl +8 -0
  397. data/vendor/test/cases/mixins.nested.css +7 -0
  398. data/vendor/test/cases/mixins.nested.selectors.css +21 -0
  399. data/vendor/test/cases/mixins.nested.selectors.styl +31 -0
  400. data/vendor/test/cases/mixins.nested.styl +14 -0
  401. data/vendor/test/cases/mixins.order.2.css +11 -0
  402. data/vendor/test/cases/mixins.order.2.styl +16 -0
  403. data/vendor/test/cases/mixins.reset.css +75 -0
  404. data/vendor/test/cases/mixins.reset.styl +27 -0
  405. data/vendor/test/cases/mixins.return.css +4 -0
  406. data/vendor/test/cases/mixins.return.styl +8 -0
  407. data/vendor/test/cases/mixins.root.css +3 -0
  408. data/vendor/test/cases/mixins.root.styl +5 -0
  409. data/vendor/test/cases/operator.range.css +15 -0
  410. data/vendor/test/cases/operator.range.styl +23 -0
  411. data/vendor/test/cases/operators.assignment.function.css +15 -0
  412. data/vendor/test/cases/operators.assignment.function.styl +34 -0
  413. data/vendor/test/cases/operators.assignment.mixin.css +15 -0
  414. data/vendor/test/cases/operators.assignment.mixin.styl +39 -0
  415. data/vendor/test/cases/operators.assignment.root.css +25 -0
  416. data/vendor/test/cases/operators.assignment.root.styl +55 -0
  417. data/vendor/test/cases/operators.complex.css +9 -0
  418. data/vendor/test/cases/operators.complex.styl +32 -0
  419. data/vendor/test/cases/operators.css +40 -0
  420. data/vendor/test/cases/operators.equality.css +55 -0
  421. data/vendor/test/cases/operators.equality.styl +55 -0
  422. data/vendor/test/cases/operators.in.css +37 -0
  423. data/vendor/test/cases/operators.in.styl +51 -0
  424. data/vendor/test/cases/operators.mixins.css +10 -0
  425. data/vendor/test/cases/operators.mixins.styl +25 -0
  426. data/vendor/test/cases/operators.precedence.css +51 -0
  427. data/vendor/test/cases/operators.precedence.styl +82 -0
  428. data/vendor/test/cases/operators.styl +96 -0
  429. data/vendor/test/cases/operators.subscript.assign.css +21 -0
  430. data/vendor/test/cases/operators.subscript.assign.styl +45 -0
  431. data/vendor/test/cases/operators.subscript.css +59 -0
  432. data/vendor/test/cases/operators.subscript.range.css +14 -0
  433. data/vendor/test/cases/operators.subscript.range.styl +15 -0
  434. data/vendor/test/cases/operators.subscript.styl +81 -0
  435. data/vendor/test/cases/page.css +13 -0
  436. data/vendor/test/cases/page.styl +13 -0
  437. data/vendor/test/cases/parent.css +32 -0
  438. data/vendor/test/cases/parent.styl +33 -0
  439. data/vendor/test/cases/properties.colons.css +8 -0
  440. data/vendor/test/cases/properties.colons.styl +10 -0
  441. data/vendor/test/cases/properties.css +4 -0
  442. data/vendor/test/cases/properties.one-line.css +10 -0
  443. data/vendor/test/cases/properties.one-line.styl +11 -0
  444. data/vendor/test/cases/properties.styl +4 -0
  445. data/vendor/test/cases/property-access.css +48 -0
  446. data/vendor/test/cases/property-access.styl +62 -0
  447. data/vendor/test/cases/regression.107.lookup-failure.css +12 -0
  448. data/vendor/test/cases/regression.107.lookup-failure.styl +13 -0
  449. data/vendor/test/cases/regression.127.css +3 -0
  450. data/vendor/test/cases/regression.127.styl +2 -0
  451. data/vendor/test/cases/regression.130.css +16 -0
  452. data/vendor/test/cases/regression.130.styl +6 -0
  453. data/vendor/test/cases/regression.131.css +7 -0
  454. data/vendor/test/cases/regression.131.styl +2 -0
  455. data/vendor/test/cases/regression.137.css +7 -0
  456. data/vendor/test/cases/regression.137.styl +7 -0
  457. data/vendor/test/cases/regression.139.css +5 -0
  458. data/vendor/test/cases/regression.139.styl +21 -0
  459. data/vendor/test/cases/regression.142.css +39 -0
  460. data/vendor/test/cases/regression.142.styl +54 -0
  461. data/vendor/test/cases/regression.146.css +30 -0
  462. data/vendor/test/cases/regression.146.styl +31 -0
  463. data/vendor/test/cases/regression.153.css +8 -0
  464. data/vendor/test/cases/regression.153.styl +9 -0
  465. data/vendor/test/cases/regression.154.css +8 -0
  466. data/vendor/test/cases/regression.154.styl +14 -0
  467. data/vendor/test/cases/regression.156.css +4 -0
  468. data/vendor/test/cases/regression.156.styl +6 -0
  469. data/vendor/test/cases/regression.212.css +15 -0
  470. data/vendor/test/cases/regression.212.styl +14 -0
  471. data/vendor/test/cases/regression.216.css +10 -0
  472. data/vendor/test/cases/regression.216.styl +8 -0
  473. data/vendor/test/cases/regression.220.css +5 -0
  474. data/vendor/test/cases/regression.220.styl +5 -0
  475. data/vendor/test/cases/regression.229.css +12 -0
  476. data/vendor/test/cases/regression.229.styl +9 -0
  477. data/vendor/test/cases/regression.233.css +6 -0
  478. data/vendor/test/cases/regression.233.styl +7 -0
  479. data/vendor/test/cases/regression.235.css +11 -0
  480. data/vendor/test/cases/regression.235.styl +13 -0
  481. data/vendor/test/cases/regression.243.css +3 -0
  482. data/vendor/test/cases/regression.243.styl +4 -0
  483. data/vendor/test/cases/regression.244.css +3 -0
  484. data/vendor/test/cases/regression.244.styl +3 -0
  485. data/vendor/test/cases/regression.247.css +6 -0
  486. data/vendor/test/cases/regression.247.styl +6 -0
  487. data/vendor/test/cases/regression.248.compressed.css +4 -0
  488. data/vendor/test/cases/regression.248.compressed.styl +10 -0
  489. data/vendor/test/cases/regression.252.css +13 -0
  490. data/vendor/test/cases/regression.252.styl +13 -0
  491. data/vendor/test/cases/regression.260.css +6 -0
  492. data/vendor/test/cases/regression.260.styl +6 -0
  493. data/vendor/test/cases/regression.267.css +3 -0
  494. data/vendor/test/cases/regression.267.styl +3 -0
  495. data/vendor/test/cases/regression.270.css +5 -0
  496. data/vendor/test/cases/regression.270.styl +7 -0
  497. data/vendor/test/cases/regression.272.css +11 -0
  498. data/vendor/test/cases/regression.272.styl +17 -0
  499. data/vendor/test/cases/regression.274.css +14 -0
  500. data/vendor/test/cases/regression.274.styl +16 -0
  501. data/vendor/test/cases/regression.360.css +19 -0
  502. data/vendor/test/cases/regression.360.styl +1 -0
  503. data/vendor/test/cases/regression.368.css +4 -0
  504. data/vendor/test/cases/regression.368.styl +3 -0
  505. data/vendor/test/cases/regression.379.css +6 -0
  506. data/vendor/test/cases/regression.379.styl +10 -0
  507. data/vendor/test/cases/regression.380.css +8 -0
  508. data/vendor/test/cases/regression.380.styl +14 -0
  509. data/vendor/test/cases/regression.388.css +2 -0
  510. data/vendor/test/cases/regression.388.styl +6 -0
  511. data/vendor/test/cases/regression.415.css +5 -0
  512. data/vendor/test/cases/regression.415.styl +3 -0
  513. data/vendor/test/cases/regression.420.css +21 -0
  514. data/vendor/test/cases/regression.420.styl +29 -0
  515. data/vendor/test/cases/reset.css +70 -0
  516. data/vendor/test/cases/reset.styl +16 -0
  517. data/vendor/test/cases/rule.charset.css +1 -0
  518. data/vendor/test/cases/rule.charset.styl +2 -0
  519. data/vendor/test/cases/rulset.css +4 -0
  520. data/vendor/test/cases/rulset.newline.css +5 -0
  521. data/vendor/test/cases/rulset.newline.styl +5 -0
  522. data/vendor/test/cases/rulset.styl +3 -0
  523. data/vendor/test/cases/scope.complex.css +10 -0
  524. data/vendor/test/cases/scope.complex.styl +16 -0
  525. data/vendor/test/cases/scope.css +5 -0
  526. data/vendor/test/cases/scope.nested.css +9 -0
  527. data/vendor/test/cases/scope.nested.styl +10 -0
  528. data/vendor/test/cases/scope.styl +12 -0
  529. data/vendor/test/cases/selector.interpolation.css +57 -0
  530. data/vendor/test/cases/selector.interpolation.styl +45 -0
  531. data/vendor/test/cases/selectors.complex.css +28 -0
  532. data/vendor/test/cases/selectors.complex.styl +27 -0
  533. data/vendor/test/cases/selectors.css +50 -0
  534. data/vendor/test/cases/selectors.nested.comma.css +9 -0
  535. data/vendor/test/cases/selectors.nested.comma.styl +8 -0
  536. data/vendor/test/cases/selectors.nested.css +34 -0
  537. data/vendor/test/cases/selectors.nested.styl +33 -0
  538. data/vendor/test/cases/selectors.pseudo.css +27 -0
  539. data/vendor/test/cases/selectors.pseudo.elements.css +26 -0
  540. data/vendor/test/cases/selectors.pseudo.elements.styl +29 -0
  541. data/vendor/test/cases/selectors.pseudo.styl +24 -0
  542. data/vendor/test/cases/selectors.styl +46 -0
  543. data/vendor/test/cases/self-assignment.css +3 -0
  544. data/vendor/test/cases/self-assignment.styl +4 -0
  545. data/vendor/test/cases/vargs.call.css +24 -0
  546. data/vendor/test/cases/vargs.call.styl +40 -0
  547. data/vendor/test/cases/vargs.css +30 -0
  548. data/vendor/test/cases/vargs.styl +49 -0
  549. data/vendor/test/cases/variable.css +3 -0
  550. data/vendor/test/cases/variable.styl +4 -0
  551. data/vendor/test/cases/variables.css +12 -0
  552. data/vendor/test/cases/variables.styl +17 -0
  553. data/vendor/test/images/gif +0 -0
  554. data/vendor/test/images/squirrel.jpeg +0 -0
  555. data/vendor/test/images/tux.png +0 -0
  556. data/vendor/test/run.js +151 -0
  557. data/vendor/testing/index.html +56 -0
  558. data/vendor/testing/stylus.js +146 -0
  559. data/vendor/testing/test-js.js +23 -0
  560. data/vendor/testing/test.css +8 -0
  561. data/vendor/testing/test.js +23 -0
  562. data/vendor/testing/test.styl +75 -0
  563. data/vendor/testing/utils.styl +6 -0
  564. data/vendor/testing/vendor.styl +3 -0
  565. metadata +565 -112
  566. data/.DS_Store +0 -0
  567. data/lib/.DS_Store +0 -0
  568. data/lib/node_modules/cssom/.idea/CSSOM.iml +0 -9
  569. data/lib/node_modules/cssom/.idea/dictionaries/nv.xml +0 -3
  570. data/lib/node_modules/cssom/.idea/encodings.xml +0 -5
  571. data/lib/node_modules/cssom/.idea/misc.xml +0 -17
  572. data/lib/node_modules/cssom/.idea/modules.xml +0 -9
  573. data/lib/node_modules/cssom/.idea/projectCodeStyle.xml +0 -82
  574. data/lib/node_modules/cssom/.idea/vcs.xml +0 -8
  575. data/lib/node_modules/cssom/.idea/workspace.xml +0 -467
  576. data/lib/node_modules/cssom/.livereload +0 -19
  577. data/lib/node_modules/cssom/docs/.livereload +0 -19
@@ -0,0 +1,107 @@
1
+
2
+ ## Conditionals
3
+
4
+ Conditionals provide control flow to a language which is otherwise static, providing conditional imports, mixins, functions, and more. The examples below are simply examples, and not recommended :)
5
+
6
+ ### if / else if / else
7
+
8
+ The `if` conditional works as you would expect, simply accepting an expression, evaluating the following block when `true`. Along with `if` are the typical `else if` and `else` tokens, acting as fallbacks.
9
+
10
+ The example below would conditionally overload the `padding` property, swapping it for margin.
11
+
12
+ overload-padding = true
13
+
14
+ if overload-padding
15
+ padding(y, x)
16
+ margin y x
17
+
18
+ body
19
+ padding 5px 10px
20
+
21
+ Another example:
22
+
23
+ box(x, y, margin = false)
24
+ padding y x
25
+ if margin
26
+ margin y x
27
+
28
+ body
29
+ box(5px, 10px, true)
30
+
31
+ Another `box()` helper:
32
+
33
+ box(x, y, margin-only = false)
34
+ if margin-only
35
+ margin y x
36
+ else
37
+ padding y x
38
+
39
+ ### unless
40
+
41
+ For users familiar with the ruby programming language, we have the `unless` conditional, which is essentially the opposite of `if`, essentially `if (!(expr))`.
42
+
43
+ In the example below, if `disable-padding-override` is undefined or `false` padding will be overridden, displaying `margin` instead. However when `true` padding will remain outputting `padding 5px 10px` as expected.
44
+
45
+ disable-padding-override = true
46
+
47
+ unless disable-padding-override is defined and disable-padding-override
48
+ padding(x, y)
49
+ margin y x
50
+
51
+ body
52
+ padding 5px 10px
53
+
54
+ ### Postfix Conditionals
55
+
56
+ Stylus supports postfix conditionals, meaning the `if` and `unless` act as operators, evaluating the left-hand operand, when the right-hand expression is truthy.
57
+
58
+
59
+ For example let's define `negative()`, performing some basic type checking. Below we use block-style conditionals:
60
+
61
+ negative(n)
62
+ unless n is a 'unit'
63
+ error('invalid number')
64
+ if n < 0
65
+ yes
66
+ else
67
+ no
68
+
69
+ Next we utilize postfix conditionals to keep our function terse.
70
+
71
+ negative(n)
72
+ error('invalid number') unless n is a 'unit'
73
+ return yes if n < 0
74
+ no
75
+
76
+ Of course we could take this further, and utilize `n < 0 ? yes : no`, or simply stick with booleans, and use only `n < 0`.
77
+
78
+ Postfix conditionals may be applied to most single-line statements, for example `@import`, `@charset`, mixins, and of course properties as shown below:
79
+
80
+
81
+ pad(types = margin padding, n = 5px)
82
+ padding unit(n, px) if padding in types
83
+ margin unit(n, px) if margin in types
84
+
85
+ body
86
+ pad()
87
+
88
+ body
89
+ pad(margin)
90
+
91
+ body
92
+ apply-mixins = true
93
+ pad(padding, 10) if apply-mixins
94
+
95
+ yielding:
96
+
97
+ body {
98
+ padding: 5px;
99
+ margin: 5px;
100
+ }
101
+ body {
102
+ margin: 5px;
103
+ }
104
+ body {
105
+ padding: 10px;
106
+ }
107
+
@@ -0,0 +1,77 @@
1
+
2
+ ## CSS Style
3
+
4
+ Stylus transparently supports a regular css-style syntax, meaning you do not need to use an alternative parser, or specify that a certain file is using a specific style.
5
+
6
+ ### Example
7
+
8
+ Below is a small style using the indented approach:
9
+
10
+ border-radius()
11
+ -webkit-border-radius arguments
12
+ -moz-border-radius arguments
13
+ border-radius arguments
14
+
15
+ body a
16
+ font 12px/1.4 "Lucida Grande", Arial, sans-serif
17
+ background black
18
+ color #ccc
19
+
20
+ form input
21
+ padding 5px
22
+ border 1px solid
23
+ border-radius 5px
24
+
25
+ Since braces, colons, and semi-colons are optional, we could write this example just as we would with normal css:
26
+
27
+ border-radius() {
28
+ -webkit-border-radius: arguments;
29
+ -moz-border-radius: arguments;
30
+ border-radius: arguments;
31
+ }
32
+
33
+ body a {
34
+ font: 12px/1.4 "Lucida Grande", Arial, sans-serif;
35
+ background: black;
36
+ color: #ccc;
37
+ }
38
+
39
+ form input {
40
+ padding: 5px;
41
+ border: 1px solid;
42
+ border-radius: 5px;
43
+ }
44
+
45
+ Since we may mix and match the two variants, the following is valid as well:
46
+
47
+ border-radius()
48
+ -webkit-border-radius: arguments;
49
+ -moz-border-radius: arguments;
50
+ border-radius: arguments;
51
+
52
+ body a {
53
+ font: 12px/1.4 "Lucida Grande", Arial, sans-serif;
54
+ background: black;
55
+ color: #ccc;
56
+ }
57
+
58
+ form input
59
+ padding: 5px;
60
+ border: 1px solid;
61
+ border-radius: 5px;
62
+
63
+ Variables, functions, mixins, and all of the other features that Stylus provides still work as expected:
64
+
65
+ main-color = white
66
+ main-hover-color = black
67
+
68
+ body a {
69
+ color: main-color;
70
+ &:hover { color: main-hover-color; }
71
+ }
72
+
73
+ body a { color: main-color; &:hover { color: main-hover-color; }}
74
+
75
+ There are currently a few exceptions to this rule, since the two styles may be mixed and matched some indentation rules still apply. So although not _every_ plain-css stylesheet will work without modification this feature still allows those who prefer css syntax may still utilize the other powerful features provided by Stylus.
76
+
77
+
@@ -0,0 +1,50 @@
1
+
2
+ ## Error Reporting
3
+
4
+ Stylus has fantastic error reporting built in for syntax, parse, and evaluation errors, complete with stack traces, line numbers, and filenames.
5
+
6
+ ### Parse Error
7
+
8
+ Parse error example:
9
+
10
+ body
11
+ form input
12
+ == padding 5px
13
+
14
+ yielding:
15
+
16
+ Error: /Users/tj/Projects/stylus/testing/test.styl:4
17
+ 3: ' form input'
18
+ 4: ' == padding 5px'
19
+
20
+ illegal unary ==
21
+
22
+ ### Evaluation Error
23
+
24
+ This "runtime" or evaluation error is caused due to passing a string to `border-radius()` instead of the expected `Unit` by using our helper `ensure(n, 'unit')`.
25
+
26
+ ensure(val, type)
27
+ unless val is a type
28
+ error('expected a ' + type + ', but got ' + typeof(val))
29
+
30
+ border-radius(n)
31
+ ensure(n, 'unit')
32
+ -webkit-border-radius n
33
+ -moz-border-radius n
34
+ border-radius n
35
+
36
+ body
37
+ border-radius '5px'
38
+
39
+ yielding:
40
+
41
+ Error: /Users/tj/Projects/stylus/examples/error.styl:12
42
+ 11: ''
43
+ 12: 'body'
44
+ 13: ' border-radius \'5px\''
45
+ 14: ''
46
+
47
+ expected a unit, but got string
48
+ at ensure() (/Users/tj/Projects/stylus/examples/error.styl:2)
49
+ at border-radius() (/Users/tj/Projects/stylus/examples/error.styl:5)
50
+ at "body" (/Users/tj/Projects/stylus/examples/error.styl:10)
@@ -0,0 +1,27 @@
1
+
2
+ ## Escaping
3
+
4
+ Stylus allows you to escape characters, effectively turning them into identifiers, so that they can be rendered as literals. For example:
5
+
6
+ body
7
+ padding 1 \+ 2
8
+
9
+ will compile to:
10
+
11
+ body {
12
+ padding: 1 + 2;
13
+ }
14
+
15
+
16
+ Not that Stylus requires that `/` is parenthesized when used in a property:
17
+
18
+ body
19
+ font 14px/1.4
20
+ font (14px/1.4)
21
+
22
+ yields:
23
+
24
+ body {
25
+ font: 14px/1.4;
26
+ font: 10px;
27
+ }
@@ -0,0 +1,159 @@
1
+
2
+ ## Stylus Executable
3
+
4
+ Stylus ships with the `stylus` executable for converting stylus to css.
5
+
6
+ Usage: stylus [options] [command] [< in [> out]]
7
+ [file|dir ...]
8
+
9
+ Commands:
10
+
11
+ help <prop> Opens help info for <prop> in
12
+ your default browser. (osx only)
13
+
14
+ Options:
15
+
16
+ -u, --use <path> Utilize the stylus plugin at <path>
17
+ -i, --interactive Start interactive REPL
18
+ -w, --watch Watch file(s) for changes and re-compile
19
+ -o, --out <dir> Output to <dir> when passing files
20
+ -C, --css <src> [dest] Convert css input to stylus
21
+ -I, --include <path> Add <path> to lookup paths
22
+ -c, --compress Compress css output
23
+ -d, --compare Display input along with output
24
+ -f, --firebug Emits debug infos in the generated css that
25
+ can be used by the FireStylus Firebug plugin
26
+ -l, --line-numbers Emits comments in the generated css
27
+ indicating the corresponding stylus line
28
+ -V, --version Display the version of stylus
29
+ -h, --help Display help information
30
+
31
+ ### STDIO Compilation Example
32
+
33
+ `stylus` reads from _stdin_ and outputs to _stdout_, so for example:
34
+
35
+ $ stylus --compress < some.styl > some.css
36
+
37
+ Try stylus some in the terminal, type below and press CTRL-D for __EOF__:
38
+
39
+ $ stylus
40
+ body
41
+ color red
42
+ font 14px Arial, sans-serif
43
+
44
+ ### Compiling Files Example
45
+
46
+ `stylus` also accepts files and directories, for example a directory named `css` will compile and output the `.css` files in the same directory.
47
+
48
+ $ stylus css
49
+
50
+ The following will output to `./public/stylesheets`:
51
+
52
+ $ stylus css --out public/stylesheets
53
+
54
+ Or a few files:
55
+
56
+ $ stylus one.styl two.styl
57
+
58
+ For development purpose, you can enable the `linenos` option to emit comments indicating
59
+ the Stylus filename and line number in the generated css:
60
+
61
+ $ stylus --line-numbers <path>
62
+
63
+ Or the `firebug` option if you want to use
64
+ the [FireStylus extension for Firebug](//github.com/LearnBoost/stylus/blob/master/docs/firebug.md):
65
+
66
+ $ stylus --firebug <path>
67
+
68
+ ### Converting CSS
69
+
70
+ If we wish to convert css to the terse Stylus syntax, we can utilize the `--css` flag.
71
+
72
+ Via stdio:
73
+
74
+ $ stylus --css < test.css > test.styl
75
+
76
+ Output a `.styl` file of the same basename:
77
+
78
+ $ stylus --css test.css
79
+
80
+ Output to a specific destination:
81
+
82
+ $ stylus --css test.css /tmp/out.styl
83
+
84
+ ### CSS Property Help
85
+
86
+ On osx `stylus help <prop>` will open your default browser and display help documentation for the given `<prop>`.
87
+
88
+ $ stylus help box-shadow
89
+
90
+ ### Interactive Shell
91
+
92
+ The Stylus REPL (Read-Eval-Print-Loop) or "interactive shell" allows you to
93
+ play around with Stylus expressions directly from your terminal. Note that this works only for expressions, not selectors etc. To use simple add the `-i`, or `--interactive` flag:
94
+
95
+ $ stylus -i
96
+ > color = white
97
+ => #fff
98
+ > color - rgb(200,50,0)
99
+ => #37cdff
100
+ > color
101
+ => #fff
102
+ > color -= rgb(200,50,0)
103
+ => #37cdff
104
+ > color
105
+ => #37cdff
106
+ > rgba(color, 0.5)
107
+ => rgba(55,205,255,0.5)
108
+
109
+ ### Utilizing Plugins
110
+
111
+ For our examples we will utilize the [nib](https://github.com/visionmedia/nib) Stylus plugin to illustrate it's CLI usage. Suppose we have the following stylus, importing nib and utilize it's `linear-gradient()` function.
112
+
113
+ @import 'nib'
114
+
115
+ body
116
+ background: linear-gradient(20px top, white, black)
117
+
118
+ Our first attempt to render using `stylus(1)` via stdio might look like this:
119
+
120
+ $ stylus < test.styl
121
+
122
+ Which would yield the following error because stylus does not know where to find nib in our machine.
123
+
124
+ Error: stdin:3
125
+ 1|
126
+ 2|
127
+ > 3| @import 'nib'
128
+ 4|
129
+ 5| body
130
+ 6| background: linear-gradient(20px top, white, black)
131
+
132
+ For plugins that simply supply stylus APIs we could add the path to the stylus lookup paths by using the `--include` or `-I` flag:
133
+
134
+ $ stylus < test.styl --include ../nib/lib
135
+
136
+ Now yielding the following output. As you might notice the calls to `gradient-data-uri()` and `create-gradient-image()` output as literals, this is because exposing the library path is not enough when the plugin provides a JavaScript API, though if we wished to only utilize the pure-stylus nib functions we would be fine.
137
+
138
+ body {
139
+ background: url(gradient-data-uri(create-gradient-image(20px, top)));
140
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #000));
141
+ background: -webkit-linear-gradient(top, #fff 0%, #000 100%);
142
+ background: -moz-linear-gradient(top, #fff 0%, #000 100%);
143
+ background: linear-gradient(top, #fff 0%, #000 100%);
144
+ }
145
+
146
+ So, what we need to do is utilize the `--use`, or `-u` flag which expects a path to a node module, with or without the ".js" extension. This `require()`s the module, expecting a function to be exported as `module.exports`, which then calls `style.use(fn())` to allow the plugin to expose itself, defining js functions etc.
147
+
148
+ $ stylus < test.styl --use ../nib/lib/nib
149
+
150
+ Yielding the expected result:
151
+
152
+ body {
153
+ background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAUCAYAAABMDlehAAAABmJLR0QA/wD/AP+gvaeTAAAAI0lEQVQImWP4+fPnf6bPnz8zMH358oUBwkIjKJBgYGNj+w8Aphk4blt0EcMAAAAASUVORK5CYII=");
154
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fff), color-stop(1, #000));
155
+ background: -webkit-linear-gradient(top, #fff 0%, #000 100%);
156
+ background: -moz-linear-gradient(top, #fff 0%, #000 100%);
157
+ background: linear-gradient(top, #fff 0%, #000 100%);
158
+ }
159
+
@@ -0,0 +1,60 @@
1
+
2
+ ## FireStylus extension for Firebug
3
+
4
+ [FireStylus](//github.com/parallel/firestylus) is a Firebug extension
5
+ that makes Firebug display the Stylus filename and line numbers of
6
+ the Stylus-generated CSS styles rather than those of the generated CSS.
7
+
8
+ ![Screenshot](//raw.github.com/parallel/firestylus/master/src/chrome/skin/screenshot.png)
9
+
10
+ ### Usage
11
+
12
+ First, you need to install [Firebug](https://addons.mozilla.org/firefox/downloads/latest/1843/addon-1843-latest.xpi?src=addondetail)
13
+ and the [FireStylus extension](//github.com/parallel/firestylus)
14
+
15
+ Then, you need to enable the Stylus's `firebug` option when generating your CSS.
16
+
17
+ Command line
18
+
19
+ $ stylus -f <path>
20
+ $ stylus --firebug <path>
21
+
22
+ Javascript API
23
+
24
+ var stylus = require('stylus');
25
+
26
+ stylus(str)
27
+ .set('firebug', true)
28
+ .render(function(err, css){
29
+ // logic
30
+ });
31
+
32
+ Connect / Express
33
+
34
+ var stylus = require('stylus');
35
+
36
+ var server = connect.createServer(
37
+ stylus.middleware({
38
+ src: __dirname
39
+ , dest: __dirname + '/public'
40
+ , firebug: true
41
+ })
42
+ , connect.static(__dirname + '/public')
43
+ );
44
+
45
+ ### Compatibility
46
+
47
+ FireStylus should work with all versions of Firefox after
48
+ and including 3.0, and all Firebug versions after and including 1.4
49
+
50
+ - Firefox 3+ (also works with version 5)
51
+ - Firebug 1.4+
52
+
53
+ ### Limitations
54
+
55
+ FireStylus and FireSass are incompatible. You cannot enable them
56
+ simultaneously.
57
+
58
+ FireStylus (like FireSass) only works in the html pane of firebug, the others,
59
+ such as the css pane won't work due to firebug limitations.
60
+
@@ -0,0 +1,26 @@
1
+
2
+ ## @font-face
3
+
4
+ The `@font-face` at-rule expects as you would expect, simply followed by a block of properties:
5
+
6
+
7
+ @font-face
8
+ font-family Geo
9
+ font-style normal
10
+ src url(fonts/geo_sans_light/GensansLight.ttf)
11
+
12
+ .ingeo
13
+ font-family Geo
14
+
15
+ yielding:
16
+
17
+
18
+ @font-face {
19
+ font-family: Geo;
20
+ font-style: normal;
21
+ src: url("fonts/geo_sans_light/GensansLight.ttf");
22
+ }
23
+ .ingeo {
24
+ font-family: Geo;
25
+ }
26
+
@@ -0,0 +1,192 @@
1
+
2
+ ## Functions
3
+
4
+ Stylus features powerful in-language function definition. Function definition appears identical to mixins, however functions may return a value.
5
+
6
+ ### Return Values
7
+
8
+ Let's try a trivial example, creating a function that adds two numbers.
9
+
10
+ add(a, b)
11
+ a + b
12
+
13
+ We may then utilize this function in conditions, as property values, etc.
14
+
15
+ body
16
+ padding add(10px, 5)
17
+
18
+ Rendering
19
+
20
+ body {
21
+ padding: 15px;
22
+ }
23
+
24
+ ### Argument Defaults
25
+
26
+ Optional arguments may default to a given expression. With Stylus we may even default arguments to leading arguments! For example:
27
+
28
+
29
+ add(a, b = a)
30
+ a + b
31
+
32
+ add(10, 5)
33
+ // => 15
34
+
35
+ add(10)
36
+ // => 20
37
+
38
+ note that since argument defaults are assignments, we can also utilize function calls for defaults:
39
+
40
+ add(a, b = unit(a, px))
41
+ a + b
42
+
43
+ ### Function Bodies
44
+
45
+ We can take our simple `add()` function further, by casting all units passed as `px` via the `unit()` built-in. Re-assigning each argument and providing a unit type string (or identifier), which disregards unit conversion.
46
+
47
+ add(a, b = a)
48
+ a = unit(a, px)
49
+ b = unit(b, px)
50
+ a + b
51
+
52
+ add(15%, 10deg)
53
+ // => 25
54
+
55
+ ### Multiple Return Values
56
+
57
+ Stylus functions can return several values, just as you can assign several values to a variable. For example the following is a valid assignment:
58
+
59
+ sizes = 15px 10px
60
+
61
+ sizes[0]
62
+ // => 15px
63
+
64
+ Similarly we may return several values:
65
+
66
+ sizes()
67
+ 15px 10px
68
+
69
+ sizes()[0]
70
+ // => 15px
71
+
72
+ One slight exception is when return values are identifiers, for example the following looks like a property assignment to Stylus since no operators are present.
73
+
74
+ swap(a, b)
75
+ b a
76
+
77
+ To disambiguate we may either wrap in parens, or utilize the `return` keyword.
78
+
79
+ swap(a, b)
80
+ (b a)
81
+
82
+ swap(a, b)
83
+ return b a
84
+
85
+ ### Conditionals
86
+
87
+ Let's say we want to create a function named `stringish()` to see if the value given can be transformed to a string. We check if `val` is a string, or an ident which is string-like. Because undefined identifiers yield themselves as the value, we may compare them to them-selves as shown below, where `yes` and `no` are used in place of `true` and `false`.
88
+
89
+
90
+ stringish(val)
91
+ if val is a 'string' or val is a 'ident'
92
+ yes
93
+ else
94
+ no
95
+
96
+ usage:
97
+
98
+ stringish('yay') == yes
99
+ // => true
100
+
101
+ stringish(yay) == yes
102
+ // => true
103
+
104
+ stringish(0) == no
105
+ // => true
106
+
107
+ __note__: `yes` and `no` are not boolean literals, they are simply undefined identifiers in this case.
108
+
109
+ Another example:
110
+
111
+
112
+ compare(a, b)
113
+ if a > b
114
+ higher
115
+ else if a < b
116
+ lower
117
+ else
118
+ equal
119
+
120
+ usage:
121
+
122
+ compare(5, 2)
123
+ // => higher
124
+
125
+ compare(1, 5)
126
+ // => lower
127
+
128
+ compare(10, 10)
129
+ // => equal
130
+
131
+ ### Aliasing
132
+
133
+ To alias a function we can simply assign a function's name to a new identifier. For example our previous `add()` function could be exposed as `plus()` as well, simply by:
134
+
135
+ plus = add
136
+
137
+ plus(1, 2)
138
+ // => 3
139
+
140
+ ### Variable Functions
141
+
142
+ In the same way that we can "alias" a function, we can pass a function as well, here our `invoke()` function accepts a function, so we can pass it `add()` or `sub()`.
143
+
144
+ invoke(a, b, fn)
145
+ fn(a, b)
146
+
147
+ add(a, b)
148
+ a + b
149
+
150
+ body
151
+ padding invoke(5, 10, add)
152
+ padding invoke(5, 10, sub)
153
+
154
+ yielding:
155
+
156
+ body {
157
+ padding: 15;
158
+ padding: -5;
159
+ }
160
+
161
+ ### arguments
162
+
163
+ The `arguments` local is available to all function bodies, and contains all the arguments passed. For example:
164
+
165
+ sum()
166
+ n = 0
167
+ for num in arguments
168
+ n = n + num
169
+
170
+ sum(1,2,3,4,5)
171
+ // => 15
172
+
173
+ ### Hash Example
174
+
175
+ Below we define the `get(hash, key)` function, which will return the
176
+ value of `key`, or `null`. We iterate each `pair` in `hash`, returning the pair's second node when the first (the `key`) matches.
177
+
178
+ get(hash, key)
179
+ return pair[1] if pair[0] == key for pair in hash
180
+
181
+ As you can see below, in-language functions paired with robust stylus expressions can provide great flexibility.
182
+
183
+ hash = (one 1) (two 2) (three 3)
184
+
185
+ get(hash, two)
186
+ // => 2
187
+
188
+ get(hash, three)
189
+ // => 3
190
+
191
+ get(hash, something)
192
+ // => null