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,73 @@
1
+
2
+ ## Connect Middleware
3
+
4
+ Stylus ships with Connect middleware for auto-compiling Stylus sheets when modified.
5
+
6
+ ## stylus.middleware(options)
7
+
8
+ Return Connect middleware with the given `options`.
9
+
10
+ #### Options
11
+
12
+ `force` When __true__ styles will always re-compile
13
+ `src` Source directory used to find .styl files
14
+ `dest` Destination directory used to output .css files
15
+ when undefined defaults to `src`.
16
+ `compress` Whether the output .css files should be compressed
17
+ `compile` Custom compile function, accepting the arguments
18
+ `(str, path)` returning the renderer.
19
+ `firebug` Emits debug infos in the generated css that can
20
+ be used by the FireStylus Firebug plugin
21
+ `linenos` Emits comments in the generated css indicating
22
+ the corresponding stylus line
23
+
24
+ #### Examples
25
+
26
+ Here we set up the custom compile function so that we may
27
+ alter the renderer by providing additional settings.
28
+
29
+ By default the compile function simply sets the `filename`
30
+ and renders the CSS.
31
+
32
+ function compile(str, path) {
33
+ return stylus(str)
34
+ .import(__dirname + '/css/mixins/blueprint')
35
+ .import(__dirname + '/css/mixins/css3')
36
+ .set('filename', path)
37
+ .set('warn', true)
38
+ .set('compress', true);
39
+ }
40
+
41
+ Pass the middleware to Connect, grabbing .styl files from this directory
42
+ and saving .css files to _./public_. Also supplying our custom `compile` function.
43
+
44
+ Following that we have a `staticProvider` layer setup to serve the .css
45
+ files generated by Stylus.
46
+
47
+ var stylus = require('stylus');
48
+
49
+ var server = connect.createServer(
50
+ stylus.middleware({
51
+ src: __dirname
52
+ , dest: __dirname + '/public'
53
+ , compile: compile
54
+ })
55
+ , connect.staticProvider(__dirname + '/public')
56
+ );
57
+
58
+ When `force` is used, the styles will be unconditionally re-compiled, however
59
+ even without this option the Stylus middleware is smart enough to detect changes in `@import`ed files.
60
+
61
+ For development purpose, you can enable the `firebug` option if you want to
62
+ use the [FireStylus extension for Firebug](//github.com/LearnBoost/stylus/blob/master/docs/firebug.md)
63
+ and/or the `linenos` option to emit debug infos in the generated css.
64
+
65
+ function compile(str, path) {
66
+ return stylus(str)
67
+ .import(__dirname + '/css/mixins/blueprint')
68
+ .import(__dirname + '/css/mixins/css3')
69
+ .set('filename', path)
70
+ .set('warn', true)
71
+ .set('firebug', true)
72
+ .set('linenos', true);
73
+ }
@@ -0,0 +1,130 @@
1
+
2
+ ## Mixins
3
+
4
+ Both mixins and functions are defined in the same manor, however they are applied in different ways. For example we have a `border-radius(n)` function defined below, which is invoked as a _mixin_, aka a statement rather than part of an expression.
5
+
6
+ When `border-radius()` is invoked within a selector, the properties are expanded and copied into the selector.
7
+
8
+ border-radius(n)
9
+ -webkit-border-radius n
10
+ -moz-border-radius n
11
+ border-radius n
12
+
13
+ form input[type=button]
14
+ border-radius(5px)
15
+
16
+ compiles to:
17
+
18
+ form input[type=button] {
19
+ -webkit-border-radius: 5px;
20
+ -moz-border-radius: 5px;
21
+ border-radius: 5px;
22
+ }
23
+
24
+ When utilizing mixins, we can omit the parens all together, providing is with fantastic transparent vendor property support:
25
+
26
+ border-radius(n)
27
+ -webkit-border-radius n
28
+ -moz-border-radius n
29
+ border-radius n
30
+
31
+ form input[type=button]
32
+ border-radius 5px
33
+
34
+ Note that the `border-radius` within our mixin is treated as a property, and not a recursive function invocation. To take this further we we may utilize the automatic `arguments` local variable, containing the expression passed, allowing more than one value to be passed:
35
+
36
+ border-radius()
37
+ -webkit-border-radius arguments
38
+ -moz-border-radius arguments
39
+ border-radius arguments
40
+
41
+ now allowing us to pass values such as `border-radius 1px 2px / 3px 4px`.
42
+
43
+ Another great example of this, is adding transparent support for vendor specifics such as `opacity` support for IE:
44
+
45
+ support-for-ie ?= true
46
+
47
+ opacity(n)
48
+ opacity n
49
+ if support-for-ie
50
+ filter unquote('progid:DXImageTransform.Microsoft.Alpha(Opacity=' + round(n * 100) + ')')
51
+
52
+ #logo
53
+ &:hover
54
+ opacity 0.5
55
+
56
+ rendering:
57
+
58
+ #logo:hover {
59
+ opacity: 0.5;
60
+ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
61
+ }
62
+
63
+ ### Parent References
64
+
65
+ Mixins may utilize the parent reference character `&`, acting on the parent instead of further nesting. For example lets say we wish to create a `stripe(even, odd)` mixin for striping table row, we provide both `even` and `odd` with default color values, and assign the `background-color` property on the row. Nested within the `tr` we use `&` to reference the `tr`, providing the `even` color.
66
+
67
+ stripe(even = #fff, odd = #eee)
68
+ tr
69
+ background-color odd
70
+ &.even
71
+ &:nth-child(even)
72
+ background-color even
73
+
74
+ We may then utilize the mixin as shown below:
75
+
76
+ table
77
+ stripe()
78
+ td
79
+ padding 4px 10px
80
+
81
+ table#users
82
+ stripe(#303030, #494848)
83
+ td
84
+ color white
85
+
86
+ Another way to define the `stripe()` mixin without parent reference:
87
+
88
+ stripe(even = #fff, odd = #eee)
89
+ tr
90
+ background-color odd
91
+ tr.even
92
+ tr:nth-child(even)
93
+ background-color even
94
+
95
+ If we wished, we could invoke `stripe()` as if it were a property:
96
+
97
+ stripe #fff #000
98
+
99
+ ### Mixing Mixins in Mixins
100
+
101
+ Mixins can of course utilize other mixins, to build up their own selector's and properties. For example, below we create `comma-list()` to inline (via `inline-list()`) and comma-separate an un-ordered list.
102
+
103
+
104
+ inline-list()
105
+ li
106
+ display inline
107
+
108
+ comma-list()
109
+ inline-list()
110
+ li
111
+ &:after
112
+ content ', '
113
+ &:last-child:after
114
+ content ''
115
+
116
+ ul
117
+ comma-list()
118
+
119
+ rendering:
120
+
121
+ ul li:after {
122
+ content: ", ";
123
+ }
124
+ ul li:last-child:after {
125
+ content: "";
126
+ }
127
+ ul li {
128
+ display: inline;
129
+ }
130
+
@@ -0,0 +1,451 @@
1
+
2
+ ## Operator Precedence
3
+
4
+ Below is the operator precedence table, highest to lowest:
5
+
6
+ []
7
+ ! ~ + -
8
+ is defined
9
+ ** * / %
10
+ + -
11
+ ... ..
12
+ <= >= < >
13
+ in
14
+ == is != is not isnt
15
+ is a
16
+ && and || or
17
+ ?:
18
+ = := ?= += -= *= /= %=
19
+ not
20
+ if unless
21
+
22
+ ## Unary Operators
23
+
24
+ The following unary operators are available, `!`, `not`, `-`, `+`, and `~`.
25
+
26
+ !0
27
+ // => true
28
+
29
+ !!0
30
+ // => false
31
+
32
+ !1
33
+ // => false
34
+
35
+ !!5px
36
+ // => true
37
+
38
+ -5px
39
+ // => -5px
40
+
41
+ --5px
42
+ // => 5px
43
+
44
+ not true
45
+ // => false
46
+
47
+ not not true
48
+ // => true
49
+
50
+ The logical `not` operator has low precedence, therefore the following example could be replaced with
51
+
52
+ a = 0
53
+ b = 1
54
+
55
+ !a and !b
56
+ // => false
57
+ // pased as: (!a) and (!b)
58
+
59
+ with:
60
+
61
+ not a or b
62
+ // => false
63
+ // parsed as: not (a or b)
64
+
65
+ ## Binary Operators
66
+
67
+ ### Subscript []
68
+
69
+ The subscript operator allows us to grab a value in an expression via index. Parenthesized expressions may act as tuples, so for example `(15px 5px)`, `(1 2 3)`.
70
+
71
+ Below is an example where we utilize tuples for error handling, showing the versatility of such a construct. As
72
+
73
+ add(a, b)
74
+ if a is a 'unit' and b is a 'unit'
75
+ a + b
76
+ else
77
+ (error 'a and b must be units!')
78
+
79
+ body
80
+ padding add(1,'5')
81
+ // => padding: error "a and b must be units";
82
+
83
+ padding add(1,'5')[0]
84
+ // => padding: error;
85
+
86
+ padding add(1,'5')[0] == error
87
+ // => padding: true;
88
+
89
+ padding add(1,'5')[1]
90
+ // => padding: "a and b must be units";
91
+
92
+ A more complex example, invoking the `error()` built-in function with the error message returned, when the ident (the first value) equals `error`.
93
+
94
+
95
+ if (val = add(1,'5'))[0] == error
96
+ error(val[1])
97
+
98
+ ## Range .. ...
99
+
100
+ Both the inclusive (`..`) and exclusive (`...`) range operators are provided, expanding to expressions:
101
+
102
+ 1..5
103
+ // => 1 2 3 4 5
104
+
105
+ 1...5
106
+ // => 1 2 3 4
107
+
108
+ ### Additive: + -
109
+
110
+ multiplicative and additive binary operators work as expected, and type conversion is applied within unit type classes, or default to the literal value. For example if we perform `5s - 2px` we will get `3s`.
111
+
112
+ 15px - 5px
113
+ // => 10px
114
+
115
+ 5 - 2
116
+ // => 3
117
+
118
+ 5in - 50mm
119
+ // => 3.031in
120
+
121
+ 5s - 1000ms
122
+ // => 4s
123
+
124
+ 20mm + 4in
125
+ // => 121.6mm
126
+
127
+ "foo " + "bar"
128
+ // => "foo bar"
129
+
130
+ "num " + 15
131
+ // => "num 15"
132
+
133
+ ### Multiplicative: / * %
134
+
135
+ 2000ms + (1s * 2)
136
+ // => 4ms
137
+
138
+ 5s / 2
139
+ // => 2.5s
140
+
141
+ 4 % 2
142
+ // => 0
143
+
144
+ When using `/` within a property value you must wrap with parens. The following for example is taken literally, to support css line-height:
145
+
146
+ font: 14px/1.5;
147
+
148
+ whereas the following is evaluated, dividing `14px` by `1.5`:
149
+
150
+ font: (14px/1.5);
151
+
152
+ this exception is _only_ required for the `/` operator.
153
+
154
+ ### Exponent: **
155
+
156
+ The Exponent operator:
157
+
158
+ 2 ** 8
159
+ // => 256
160
+
161
+ ### Equality & Relational: == != >= <= > <
162
+
163
+ Equality operators can be used to equate units, colors, strings, and even identifiers. This is a powerful concept, as even arbitrary identifiers such as as `wahoo` can be utilized as atoms, a function could return `yes` or `no` instead of `true` or `false` (although not advised).
164
+
165
+ 5 == 5
166
+ // => true
167
+
168
+ 10 < 5
169
+ // => true
170
+
171
+ #fff == #fff
172
+ // => true
173
+
174
+ true == false
175
+ // => false
176
+
177
+ wahoo == yay
178
+ // => false
179
+
180
+ wahoo == wahoo
181
+ // => true
182
+
183
+ "test" == "test"
184
+ // => true
185
+
186
+ true is true
187
+ // => true
188
+
189
+ 'hey' is not 'bye'
190
+ // => true
191
+
192
+ 'hey' isnt 'bye'
193
+ // => true
194
+
195
+ (foo bar) == (foo bar)
196
+ // => true
197
+
198
+ (1 2 3) == (1 2 3)
199
+ // => true
200
+
201
+ (1 2 3) == (1 1 3)
202
+ // => false
203
+
204
+ Only exact values match, for example `0 == false`, and `null == false` are both `false`.
205
+
206
+ Aliases:
207
+
208
+ == is
209
+ != is not
210
+ != isnt
211
+
212
+ ## Truthfulness
213
+
214
+ Nearly everything within Stylus resolves to `true`, including units with a suffix, for example even `0%`, `0px`, etc will resolve to `true`, since commonly in Stylus a mixin or function may accept such units as valid, however `0` itself is `false` in terms of arithmetic.
215
+
216
+ `true` examples:
217
+
218
+ 0%
219
+ 0px
220
+ 1px
221
+ -1
222
+ -1px
223
+ hey
224
+ 'hey'
225
+ (0px 0px 0px)
226
+
227
+ `false` examples:
228
+
229
+ 0
230
+ null
231
+ false
232
+ ''
233
+ (0 0 0)
234
+
235
+ ### Logical Operators: && || and or
236
+
237
+ Logical operators `&&` and `||` are aliased `and` / `or` which apply the same precedence.
238
+
239
+ 5 && 3
240
+ // => 3
241
+
242
+ 0 || 5
243
+ // => 5
244
+
245
+ 0 && 5
246
+ // => 0
247
+
248
+ #fff is a 'rgba' and 15 is a 'unit'
249
+ // => true
250
+
251
+ ### Existence Operator: in
252
+
253
+ Checks for the existence of the _left-hand_ operand within the _right-hand_ expression.
254
+
255
+ Simple examples:
256
+
257
+ nums = 1 2 3
258
+ 1 in nums
259
+ // => true
260
+
261
+ 5 in nums
262
+ // => false
263
+
264
+ Some undefined identifiers:
265
+
266
+ words = foo bar baz
267
+ bar in words
268
+ // => true
269
+
270
+ HEY in words
271
+ // => false
272
+
273
+ Works with tuples too:
274
+
275
+ vals = (error 'one') (error 'two')
276
+ error in vals
277
+ // => false
278
+
279
+ (error 'one') in vals
280
+ // => true
281
+
282
+ (error 'two') in vals
283
+ // => true
284
+
285
+ (error 'something') in vals
286
+ // => false
287
+
288
+ Example usage in mixin:
289
+
290
+ pad(types = padding, n = 5px)
291
+ if padding in types
292
+ padding n
293
+ if margin in types
294
+ margin n
295
+
296
+ body
297
+ pad()
298
+
299
+ body
300
+ pad(margin)
301
+
302
+ body
303
+ pad(padding margin, 10px)
304
+
305
+ yielding:
306
+
307
+ body {
308
+ padding: 5px;
309
+ }
310
+ body {
311
+ margin: 5px;
312
+ }
313
+ body {
314
+ padding: 10px;
315
+ margin: 10px;
316
+ }
317
+
318
+ ### Conditional Assignment: ?= :=
319
+
320
+ The conditional assignment operator `?=` (aliased as `:=`) lets us define variables without clobbering old values (when present). This operator expands to an `is defined` binary operation within a ternary, for example the following are equivalent:
321
+
322
+ color := white
323
+ color ?= white
324
+ color = color is defined ? color : white
325
+
326
+ For example when using `=` we simply re-assign:
327
+
328
+ color = white
329
+ color = black
330
+
331
+ color
332
+ // => black
333
+
334
+ However when using `?=` our second attempt fails since the variable is already defined:
335
+
336
+ color = white
337
+ color ?= black
338
+
339
+ color
340
+ // => white
341
+
342
+ ### Instance Check: is a
343
+
344
+ Stylus provides a binary operator named `is a` used to type check.
345
+
346
+ 15 is a 'unit'
347
+ // => true
348
+
349
+ #fff is a 'rgba'
350
+ // => true
351
+
352
+ 15 is a 'rgba'
353
+ // => false
354
+
355
+ Alternatively we could use the `type()` BIF:
356
+
357
+ type(#fff) == 'rgba'
358
+ // => true
359
+
360
+ 'color' is the one special-case, evaluating to true when the
361
+ left-hand operand is an `RGBA` or `HSLA` node.
362
+
363
+ ### Variable Definition: is defined
364
+
365
+ This pseudo binary operator does not accept a right-hand operator, and does _not_ evaluate the left. This allows us to check if a variable has a value assigned to it.
366
+
367
+ foo is defined
368
+ // => false
369
+
370
+ foo = 15px
371
+ foo is defined
372
+ // => true
373
+
374
+ #fff is defined
375
+ // => 'invalid "is defined" check on non-variable #fff'
376
+
377
+ Alternatively one can use the `lookup(name)` built-in function to do this, or to perform dynamic lookups:
378
+
379
+ name = 'blue'
380
+ lookup('light-' + name)
381
+ // => null
382
+
383
+ light-blue = #80e2e9
384
+ lookup('light-' + name)
385
+ // => #80e2e9
386
+
387
+ This operator is essential, as an undefined identifier is still a truthy value. For example:
388
+
389
+ body
390
+ if ohnoes
391
+ padding 5px
392
+
393
+ _will_ yield the following css when undefined:
394
+
395
+ body {
396
+ padding: 5px;
397
+ }
398
+
399
+ however this will be safe:
400
+
401
+ body
402
+ if ohnoes is defined
403
+ padding 5px
404
+
405
+ ## Ternary
406
+
407
+ The ternary operator works as we would expect in most languages, being the only operator with three operands, the _condition_ expression, the _truth_ expression and the _false_ expression.
408
+
409
+ num = 15
410
+ num ? unit(num, 'px') : 20px
411
+ // => 15px
412
+
413
+ ## Color Operations
414
+
415
+ Operations on colors provide a terse, expressive way to alter components. For example we can operate on each RGB:
416
+
417
+ #0e0 + #0e0
418
+ // => #0f0
419
+
420
+ Another example is adjust the lightness value by adding or subtracting a percentage. To lighten a color we add, to darken we subtract.
421
+
422
+ #888 + 50%
423
+ // => #c3c3c3
424
+
425
+ #888 - 50%
426
+ // => #444
427
+
428
+ Adjust the hue is also possible by adding or subtracting with degrees, for example adding `50deg` to this red value, resulting in a yellow:
429
+
430
+ #f00 + 50deg
431
+ // => #ffd500
432
+
433
+ Values clamp appropriately, for example we can "spin" the hue 180 degrees, and if the current value is `320deg`, it will resolve to `140deg`.
434
+
435
+ We may also tweak several values at once, including the alpha by using `rgb()`, `rgba()`, `hsl()`, or `hsla()`:
436
+
437
+ #f00 - rgba(100,0,0,0.5)
438
+ // => rgba(155,0,0,0.5)
439
+
440
+ ## Sprintf
441
+
442
+ The string sprintf-like operator `%` can be used to generate a literal value, internally passing arguments through the `s()` built-in:
443
+
444
+ 'X::Microsoft::Crap(%s)' % #fc0
445
+ // => X::Microsoft::Crap(#fc0)
446
+
447
+ Multiple values should be parenthesized:
448
+
449
+ '-webkit-gradient(%s, %s, %s)' % (linear (0 0) (0 100%))
450
+ // => -webkit-gradient(linear, 0 0, 0 100%)
451
+