frontsau 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +16 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +30 -0
- data/Rakefile +2 -0
- data/bin/frontsau +15 -0
- data/bin/frontsau-phaml-compiler +35 -0
- data/example/.frontsau +12 -0
- data/example/assets/head.jpg +0 -0
- data/example/assets/script.js +4 -0
- data/example/assets/style.css +6 -0
- data/example/css/includes.sass +2 -0
- data/example/css/style.sass +6 -0
- data/example/image/head.jpg +0 -0
- data/example/index.html +0 -0
- data/example/js/script.coffee +1 -0
- data/frontsau.gemspec +41 -0
- data/lib/Phamlp/Phamlp.php +72 -0
- data/lib/Phamlp/PhamlpException.php +31 -0
- data/lib/Phamlp/haml/HamlException.php +29 -0
- data/lib/Phamlp/haml/HamlHelpers.php +199 -0
- data/lib/Phamlp/haml/HamlParser.php +1250 -0
- data/lib/Phamlp/haml/filters/HamlBaseFilter.php +30 -0
- data/lib/Phamlp/haml/filters/HamlCdataFilter.php +29 -0
- data/lib/Phamlp/haml/filters/HamlCssFilter.php +30 -0
- data/lib/Phamlp/haml/filters/HamlEscapedFilter.php +32 -0
- data/lib/Phamlp/haml/filters/HamlJavascriptFilter.php +31 -0
- data/lib/Phamlp/haml/filters/HamlPhpFilter.php +27 -0
- data/lib/Phamlp/haml/filters/HamlPlainFilter.php +28 -0
- data/lib/Phamlp/haml/filters/HamlPreserveFilter.php +29 -0
- data/lib/Phamlp/haml/filters/HamlSassFilter.php +37 -0
- data/lib/Phamlp/haml/filters/HamlScssFilter.php +37 -0
- data/lib/Phamlp/haml/filters/_HamlMarkdownFilter.php +50 -0
- data/lib/Phamlp/haml/filters/_HamlTextileFilter.php +50 -0
- data/lib/Phamlp/haml/messages/_i18n.php +32 -0
- data/lib/Phamlp/haml/messages/de.php +32 -0
- data/lib/Phamlp/haml/messages/fr.php +32 -0
- data/lib/Phamlp/haml/renderers/HamlCompactRenderer.php +32 -0
- data/lib/Phamlp/haml/renderers/HamlCompressedRenderer.php +48 -0
- data/lib/Phamlp/haml/renderers/HamlExpandedRenderer.php +58 -0
- data/lib/Phamlp/haml/renderers/HamlNestedRenderer.php +77 -0
- data/lib/Phamlp/haml/renderers/HamlRenderer.php +137 -0
- data/lib/Phamlp/haml/tree/HamlCodeBlockNode.php +58 -0
- data/lib/Phamlp/haml/tree/HamlCommentNode.php +41 -0
- data/lib/Phamlp/haml/tree/HamlDoctypeNode.php +27 -0
- data/lib/Phamlp/haml/tree/HamlElementNode.php +52 -0
- data/lib/Phamlp/haml/tree/HamlFilterNode.php +50 -0
- data/lib/Phamlp/haml/tree/HamlHelperNode.php +73 -0
- data/lib/Phamlp/haml/tree/HamlNode.php +253 -0
- data/lib/Phamlp/haml/tree/HamlNodeExceptions.php +19 -0
- data/lib/Phamlp/haml/tree/HamlRootNode.php +58 -0
- data/lib/Phamlp/sass/SassException.php +29 -0
- data/lib/Phamlp/sass/SassFile.php +164 -0
- data/lib/Phamlp/sass/SassParser.php +848 -0
- data/lib/Phamlp/sass/extensions/compass/config.php +65 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/_blueprint.scss +47 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_buttons.scss +101 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_colors.scss +32 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_debug.scss +11 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_fancy-type.scss +86 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_form.scss +68 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_grid.scss +249 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_ie.scss +109 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_interaction.scss +57 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_link-icons.scss +37 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_liquid.scss +147 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_print.scss +93 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_reset.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_rtl.scss +133 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_scaffolding.scss +54 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_typography.scss +104 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/_utilities.scss +37 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/stylesheets/blueprint/reset/_utilities.scss +58 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/basic/grid.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/basic/ie.sass +4 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/basic/manifest.rb +30 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/basic/partials/_base.sass +10 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/basic/print.sass +4 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/basic/screen.sass +12 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/buttons/buttons/cross.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/buttons/buttons/key.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/buttons/buttons/tick.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/buttons/buttons.sass +49 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/buttons/manifest.rb +17 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/doc.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/email.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/external.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/feed.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/im.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/pdf.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/visited.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons/xls.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/link_icons.sass +13 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/link_icons/manifest.rb +23 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/project/grid.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/project/ie.sass +16 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/project/manifest.rb +30 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/project/partials/_base.sass +11 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/project/print.sass +8 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/project/screen.sass +45 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/grid.png +0 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/ie.sass +16 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/manifest.rb +33 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/partials/_base.sass +10 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/partials/_form.sass +6 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/partials/_page.sass +18 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/partials/_two_col.sass +38 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/print.sass +5 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/blueprint/templates/semantic/screen.sass +14 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/_compass.scss +2 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/_css3.scss +15 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/_layout.scss +1 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/_reset.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/_utilities.scss +6 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_background-clip.scss +43 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_background-origin.scss +42 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_background-size.scss +14 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_border-radius.scss +135 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_box-shadow.scss +50 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_box-sizing.scss +13 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_box.scss +112 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_columns.scss +55 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_font-face.scss +33 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_gradient.scss +82 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_inline-block.scss +12 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_opacity.scss +27 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_shared.scss +47 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_text-shadow.scss +25 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_transform.scss +85 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/css3/_transition.scss +85 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/layout/_sticky-footer.scss +23 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/reset/_utilities.scss +133 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/_general.scss +6 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/_links.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/_lists.scss +4 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/_print.scss +17 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/_sprites.scss +1 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/_tables.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/_text.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/general/_clearfix.scss +31 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/general/_float.scss +15 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/general/_hacks.scss +35 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/general/_min.scss +16 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/general/_reset.scss +2 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/general/_tabs.scss +1 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/general/_tag-cloud.scss +18 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/links/_hover-link.scss +5 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/links/_link-colors.scss +28 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/links/_unstyled-link.scss +7 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/lists/_bullets.scss +34 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/lists/_horizontal-list.scss +52 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/lists/_inline-block-list.scss +47 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/lists/_inline-list.scss +29 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/sprites/_sprite-img.scss +56 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/tables/_alternating-rows-and-columns.scss +20 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/tables/_borders.scss +27 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/tables/_scaffolding.scss +9 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/text/_ellipsis.scss +25 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/text/_nowrap.scss +2 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/stylesheets/compass/utilities/text/_replacement.scss +34 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/ellipsis/ellipsis.sass +9 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/ellipsis/manifest.rb +27 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/ellipsis/xml/ellipsis.xml +14 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/extension/manifest.rb +20 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/extension/stylesheets/main.sass +1 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/extension/templates/project/manifest.rb +2 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/extension/templates/project/screen.sass +2 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/project/USAGE.markdown +32 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/project/ie.sass +6 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/project/manifest.rb +4 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/project/print.sass +6 -0
- data/lib/Phamlp/sass/extensions/compass/frameworks/compass/templates/project/screen.sass +7 -0
- data/lib/Phamlp/sass/extensions/compass/functions/colourStops.php +268 -0
- data/lib/Phamlp/sass/extensions/compass/functions/constants.php +44 -0
- data/lib/Phamlp/sass/extensions/compass/functions/fontFiles.php +30 -0
- data/lib/Phamlp/sass/extensions/compass/functions/imageSize.php +39 -0
- data/lib/Phamlp/sass/extensions/compass/functions/inlineData.php +84 -0
- data/lib/Phamlp/sass/extensions/compass/functions/lists.php +47 -0
- data/lib/Phamlp/sass/extensions/compass/functions/selectors.php +128 -0
- data/lib/Phamlp/sass/extensions/compass/functions/urls.php +143 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/_compass.scss +2 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/_css3.scss +15 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/_layout.scss +1 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/_reset.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/_utilities.scss +6 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_background-clip.scss +43 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_background-origin.scss +42 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_background-size.scss +14 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_border-radius.scss +135 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_box-shadow.scss +50 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_box-sizing.scss +13 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_box.scss +112 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_columns.scss +55 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_font-face.scss +33 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_gradient.scss +96 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_inline-block.scss +12 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_opacity.scss +27 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_shared.scss +47 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_text-shadow.scss +25 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_transform.scss +85 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/css3/_transition.scss +85 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/layout/_sticky-footer.scss +23 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/reset/_utilities.scss +133 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/_general.scss +6 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/_links.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/_lists.scss +4 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/_print.scss +17 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/_sprites.scss +1 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/_tables.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/_text.scss +3 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/general/_clearfix.scss +31 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/general/_float.scss +15 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/general/_hacks.scss +35 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/general/_min.scss +16 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/general/_reset.scss +2 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/general/_tabs.scss +1 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/general/_tag-cloud.scss +18 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/links/_hover-link.scss +5 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/links/_link-colors.scss +28 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/links/_unstyled-link.scss +7 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/lists/_bullets.scss +34 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/lists/_horizontal-list.scss +52 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/lists/_inline-block-list.scss +47 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/lists/_inline-list.scss +29 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/sprites/_sprite-img.scss +56 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/tables/_alternating-rows-and-columns.scss +20 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/tables/_borders.scss +27 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/tables/_scaffolding.scss +9 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/text/_ellipsis.scss +25 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/text/_nowrap.scss +2 -0
- data/lib/Phamlp/sass/extensions/compass/stylesheets/compass/utilities/text/_replacement.scss +34 -0
- data/lib/Phamlp/sass/messages/_i18n.php +122 -0
- data/lib/Phamlp/sass/messages/de.php +70 -0
- data/lib/Phamlp/sass/messages/fr.php +70 -0
- data/lib/Phamlp/sass/renderers/SassCompactRenderer.php +130 -0
- data/lib/Phamlp/sass/renderers/SassCompressedRenderer.php +102 -0
- data/lib/Phamlp/sass/renderers/SassExpandedRenderer.php +62 -0
- data/lib/Phamlp/sass/renderers/SassNestedRenderer.php +61 -0
- data/lib/Phamlp/sass/renderers/SassRenderer.php +51 -0
- data/lib/Phamlp/sass/script/SassScriptFunction.php +169 -0
- data/lib/Phamlp/sass/script/SassScriptFunctions.php +751 -0
- data/lib/Phamlp/sass/script/SassScriptLexer.php +114 -0
- data/lib/Phamlp/sass/script/SassScriptOperation.php +151 -0
- data/lib/Phamlp/sass/script/SassScriptParser.php +192 -0
- data/lib/Phamlp/sass/script/SassScriptParserExceptions.php +40 -0
- data/lib/Phamlp/sass/script/SassScriptVariable.php +57 -0
- data/lib/Phamlp/sass/script/literals/SassBoolean.php +67 -0
- data/lib/Phamlp/sass/script/literals/SassColour.php +886 -0
- data/lib/Phamlp/sass/script/literals/SassLiteral.php +359 -0
- data/lib/Phamlp/sass/script/literals/SassLiteralExceptions.php +47 -0
- data/lib/Phamlp/sass/script/literals/SassNumber.php +503 -0
- data/lib/Phamlp/sass/script/literals/SassString.php +106 -0
- data/lib/Phamlp/sass/tree/SassCommentNode.php +64 -0
- data/lib/Phamlp/sass/tree/SassContext.php +120 -0
- data/lib/Phamlp/sass/tree/SassDebugNode.php +84 -0
- data/lib/Phamlp/sass/tree/SassDirectiveNode.php +76 -0
- data/lib/Phamlp/sass/tree/SassElseNode.php +28 -0
- data/lib/Phamlp/sass/tree/SassExtendNode.php +47 -0
- data/lib/Phamlp/sass/tree/SassForNode.php +99 -0
- data/lib/Phamlp/sass/tree/SassIfNode.php +95 -0
- data/lib/Phamlp/sass/tree/SassImportNode.php +69 -0
- data/lib/Phamlp/sass/tree/SassMixinDefinitionNode.php +88 -0
- data/lib/Phamlp/sass/tree/SassMixinNode.php +91 -0
- data/lib/Phamlp/sass/tree/SassNode.php +342 -0
- data/lib/Phamlp/sass/tree/SassNodeExceptions.php +117 -0
- data/lib/Phamlp/sass/tree/SassPropertyNode.php +239 -0
- data/lib/Phamlp/sass/tree/SassRootNode.php +100 -0
- data/lib/Phamlp/sass/tree/SassRuleNode.php +337 -0
- data/lib/Phamlp/sass/tree/SassVariableNode.php +90 -0
- data/lib/Phamlp/sass/tree/SassWhileNode.php +64 -0
- data/lib/frontsau/assets/rack.rb +12 -0
- data/lib/frontsau/assets/sprockets.rb +59 -0
- data/lib/frontsau/assets/static_assets_compiler.rb +50 -0
- data/lib/frontsau/assets/url_rewriter.rb +22 -0
- data/lib/frontsau/assets/watcher.rb +60 -0
- data/lib/frontsau/thor_app.rb +118 -0
- data/lib/frontsau/version.rb +3 -0
- data/lib/frontsau.rb +64 -0
- metadata +578 -0
@@ -0,0 +1,751 @@
|
|
1
|
+
<?php
|
2
|
+
/**
|
3
|
+
* SassScript functions class file.
|
4
|
+
*
|
5
|
+
* Methods in this module are accessible from the SassScript context.
|
6
|
+
* For example, you can write:
|
7
|
+
*
|
8
|
+
* $colour = hsl(120, 100%, 50%)
|
9
|
+
* and it will call SassFunctions::hsl().
|
10
|
+
*
|
11
|
+
* There are a few things to keep in mind when modifying this module.
|
12
|
+
* First of all, the arguments passed are SassLiteral objects.
|
13
|
+
* Literal objects are also expected to be returned.
|
14
|
+
*
|
15
|
+
* Most Literal objects support the SassLiteral->value accessor
|
16
|
+
* for getting their values. Colour objects, though, must be accessed using
|
17
|
+
* SassColour::rgb().
|
18
|
+
*
|
19
|
+
* Second, making functions accessible from Sass introduces the temptation
|
20
|
+
* to do things like database access within stylesheets.
|
21
|
+
* This temptation must be resisted.
|
22
|
+
* Keep in mind that Sass stylesheets are only compiled once and then left as
|
23
|
+
* static CSS files. Any dynamic CSS should be left in <style> tags in the
|
24
|
+
* HTML.
|
25
|
+
*
|
26
|
+
* @author Chris Yates <chris.l.yates@gmail.com>
|
27
|
+
* @copyright Copyright (c) 2010 PBM Web Development
|
28
|
+
* @license http://phamlp.googlecode.com/files/license.txt
|
29
|
+
* @package PHamlP
|
30
|
+
* @subpackage Sass.script
|
31
|
+
*/
|
32
|
+
|
33
|
+
/**
|
34
|
+
* SassScript functions class.
|
35
|
+
* A collection of functions for use in SassSCript.
|
36
|
+
* @package PHamlP
|
37
|
+
* @subpackage Sass.script
|
38
|
+
*/
|
39
|
+
class SassScriptFunctions {
|
40
|
+
const DECREASE = false;
|
41
|
+
const INCREASE = true;
|
42
|
+
|
43
|
+
/*
|
44
|
+
* Colour Creation
|
45
|
+
*/
|
46
|
+
|
47
|
+
/**
|
48
|
+
* Creates a SassColour object from red, green, and blue values.
|
49
|
+
* @param SassNumber the red component.
|
50
|
+
* A number between 0 and 255 inclusive, or between 0% and 100% inclusive
|
51
|
+
* @param SassNumber the green component.
|
52
|
+
* A number between 0 and 255 inclusive, or between 0% and 100% inclusive
|
53
|
+
* @param SassNumber the blue component.
|
54
|
+
* A number between 0 and 255 inclusive, or between 0% and 100% inclusive
|
55
|
+
* @return new SassColour SassColour object
|
56
|
+
* @throws SassScriptFunctionException if red, green, or blue are out of bounds
|
57
|
+
*/
|
58
|
+
public static function rgb($red, $green, $blue) {
|
59
|
+
return self::rgba($red, $green, $blue, new SassNumber(1));
|
60
|
+
}
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Creates a SassColour object from red, green, and blue values and alpha
|
64
|
+
* channel (opacity).
|
65
|
+
* There are two overloads:
|
66
|
+
* * rgba(red, green, blue, alpha)
|
67
|
+
* @param SassNumber the red component.
|
68
|
+
* A number between 0 and 255 inclusive, or between 0% and 100% inclusive
|
69
|
+
* @param SassNumber the green component.
|
70
|
+
* A number between 0 and 255 inclusive, or between 0% and 100% inclusive
|
71
|
+
* @param SassNumber the blue component.
|
72
|
+
* A number between 0 and 255 inclusive, or between 0% and 100% inclusive
|
73
|
+
* @param SassNumber The alpha channel. A number between 0 and 1.
|
74
|
+
*
|
75
|
+
* * rgba(colour, alpha)
|
76
|
+
* @param SassColour a SassColour object
|
77
|
+
* @param SassNumber The alpha channel. A number between 0 and 1.
|
78
|
+
*
|
79
|
+
* @return new SassColour SassColour object
|
80
|
+
* @throws SassScriptFunctionException if any of the red, green, or blue
|
81
|
+
* colour components are out of bounds, or or the colour is not a colour, or
|
82
|
+
* alpha is out of bounds
|
83
|
+
*/
|
84
|
+
public static function rgba() {
|
85
|
+
switch (func_num_args()) {
|
86
|
+
case 2:
|
87
|
+
$colour = func_get_arg(0);
|
88
|
+
$alpha = func_get_arg(1);
|
89
|
+
SassLiteral::assertType($colour, 'SassColour');
|
90
|
+
SassLiteral::assertType($alpha, 'SassNumber');
|
91
|
+
SassLiteral::assertInRange($alpha, 0, 1);
|
92
|
+
return $colour->with(array('alpha' => $alpha->value));
|
93
|
+
break;
|
94
|
+
case 4:
|
95
|
+
$rgba = array();
|
96
|
+
$components = func_get_args();
|
97
|
+
$alpha = array_pop($components);
|
98
|
+
foreach($components as $component) {
|
99
|
+
SassLiteral::assertType($component, 'SassNumber');
|
100
|
+
if ($component->units == '%') {
|
101
|
+
SassLiteral::assertInRange($component, 0, 100, '%');
|
102
|
+
$rgba[] = $component->value * 2.55;
|
103
|
+
}
|
104
|
+
else {
|
105
|
+
SassLiteral::assertInRange($component, 0, 255);
|
106
|
+
$rgba[] = $component->value;
|
107
|
+
}
|
108
|
+
}
|
109
|
+
SassLiteral::assertType($alpha, 'SassNumber');
|
110
|
+
SassLiteral::assertInRange($alpha, 0, 1);
|
111
|
+
$rgba[] = $alpha->value;
|
112
|
+
return new SassColour($rgba);
|
113
|
+
break;
|
114
|
+
default:
|
115
|
+
throw new SassScriptFunctionException('Incorrect argument count for {method}; expected {expected}, received {received}', array('{method}' => __METHOD__, '{expected}' => '2 or 4', '{received}' => func_num_args()), SassScriptParser::$context->node);
|
116
|
+
}
|
117
|
+
}
|
118
|
+
|
119
|
+
/**
|
120
|
+
* Creates a SassColour object from hue, saturation, and lightness.
|
121
|
+
* Uses the algorithm from the
|
122
|
+
* {@link http://www.w3.org/TR/css3-colour/#hsl-colour CSS3 spec}.
|
123
|
+
* @param float The hue of the colour in degrees.
|
124
|
+
* Should be between 0 and 360 inclusive
|
125
|
+
* @param mixed The saturation of the colour as a percentage.
|
126
|
+
* Must be between '0%' and 100%, inclusive
|
127
|
+
* @param mixed The lightness of the colour as a percentage.
|
128
|
+
* Must be between 0% and 100%, inclusive
|
129
|
+
* @return new SassColour The resulting colour
|
130
|
+
* @throws SassScriptFunctionException if saturation or lightness are out of bounds
|
131
|
+
*/
|
132
|
+
public static function hsl($h, $s, $l) {
|
133
|
+
return self::hsla($h, $s, $l, new SassNumber(1));
|
134
|
+
}
|
135
|
+
|
136
|
+
/**
|
137
|
+
* Creates a SassColour object from hue, saturation, lightness and alpha
|
138
|
+
* channel (opacity).
|
139
|
+
* @param SassNumber The hue of the colour in degrees.
|
140
|
+
* Should be between 0 and 360 inclusive
|
141
|
+
* @param SassNumber The saturation of the colour as a percentage.
|
142
|
+
* Must be between 0% and 100% inclusive
|
143
|
+
* @param SassNumber The lightness of the colour as a percentage.
|
144
|
+
* Must be between 0% and 100% inclusive
|
145
|
+
* @param float The alpha channel. A number between 0 and 1.
|
146
|
+
* @return new SassColour The resulting colour
|
147
|
+
* @throws SassScriptFunctionException if saturation, lightness or alpha are
|
148
|
+
* out of bounds
|
149
|
+
*/
|
150
|
+
public static function hsla($h, $s, $l, $a) {
|
151
|
+
SassLiteral::assertType($h, 'SassNumber');
|
152
|
+
SassLiteral::assertType($s, 'SassNumber');
|
153
|
+
SassLiteral::assertType($l, 'SassNumber');
|
154
|
+
SassLiteral::assertType($a, 'SassNumber');
|
155
|
+
SassLiteral::assertInRange($s, 0, 100, '%');
|
156
|
+
SassLiteral::assertInRange($l, 0, 100, '%');
|
157
|
+
SassLiteral::assertInRange($a, 0, 1);
|
158
|
+
return new SassColour(array('hue'=>$h, 'saturation'=>$s, 'lightness'=>$l, 'alpha'=>$a));
|
159
|
+
}
|
160
|
+
|
161
|
+
/*
|
162
|
+
* Colour Information
|
163
|
+
*/
|
164
|
+
|
165
|
+
/**
|
166
|
+
* Returns the red component of a colour.
|
167
|
+
* @param SassColour The colour
|
168
|
+
* @return new SassNumber The red component of colour
|
169
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
170
|
+
*/
|
171
|
+
public static function red($colour) {
|
172
|
+
SassLiteral::assertType($colour, 'SassColour');
|
173
|
+
return new SassNumber($colour->red);
|
174
|
+
}
|
175
|
+
|
176
|
+
/**
|
177
|
+
* Returns the green component of a colour.
|
178
|
+
* @param SassColour The colour
|
179
|
+
* @return new SassNumber The green component of colour
|
180
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
181
|
+
*/
|
182
|
+
public static function green($colour) {
|
183
|
+
SassLiteral::assertType($colour, 'SassColour');
|
184
|
+
return new SassNumber($colour->green);
|
185
|
+
}
|
186
|
+
|
187
|
+
/**
|
188
|
+
* Returns the blue component of a colour.
|
189
|
+
* @param SassColour The colour
|
190
|
+
* @return new SassNumber The blue component of colour
|
191
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
192
|
+
*/
|
193
|
+
public static function blue($colour) {
|
194
|
+
SassLiteral::assertType($colour, 'SassColour');
|
195
|
+
return new SassNumber($colour->blue);
|
196
|
+
}
|
197
|
+
|
198
|
+
/**
|
199
|
+
* Returns the hue component of a colour.
|
200
|
+
* @param SassColour The colour
|
201
|
+
* @return new SassNumber The hue component of colour
|
202
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
203
|
+
*/
|
204
|
+
public static function hue($colour) {
|
205
|
+
SassLiteral::assertType($colour, 'SassColour');
|
206
|
+
return new SassNumber($colour->hue);
|
207
|
+
}
|
208
|
+
|
209
|
+
/**
|
210
|
+
* Returns the saturation component of a colour.
|
211
|
+
* @param SassColour The colour
|
212
|
+
* @return new SassNumber The saturation component of colour
|
213
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
214
|
+
*/
|
215
|
+
public static function saturation($colour) {
|
216
|
+
SassLiteral::assertType($colour, 'SassColour');
|
217
|
+
return new SassNumber($colour->saturation);
|
218
|
+
}
|
219
|
+
|
220
|
+
/**
|
221
|
+
* Returns the lightness component of a colour.
|
222
|
+
* @param SassColour The colour
|
223
|
+
* @return new SassNumber The lightness component of colour
|
224
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
225
|
+
*/
|
226
|
+
public static function lightness($colour) {
|
227
|
+
SassLiteral::assertType($colour, 'SassColour');
|
228
|
+
return new SassNumber($colour->lightness);
|
229
|
+
}
|
230
|
+
|
231
|
+
/**
|
232
|
+
* Returns the alpha component (opacity) of a colour.
|
233
|
+
* @param SassColour The colour
|
234
|
+
* @return new SassNumber The alpha component (opacity) of colour
|
235
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
236
|
+
*/
|
237
|
+
public static function alpha($colour) {
|
238
|
+
SassLiteral::assertType($colour, 'SassColour');
|
239
|
+
return new SassNumber($colour->alpha);
|
240
|
+
}
|
241
|
+
|
242
|
+
/**
|
243
|
+
* Returns the alpha component (opacity) of a colour.
|
244
|
+
* @param SassColour The colour
|
245
|
+
* @return new SassNumber The alpha component (opacity) of colour
|
246
|
+
* @throws SassScriptFunctionException If $colour is not a colour
|
247
|
+
*/
|
248
|
+
public static function opacity($colour) {
|
249
|
+
SassLiteral::assertType($colour, 'SassColour');
|
250
|
+
return new SassNumber($colour->alpha);
|
251
|
+
}
|
252
|
+
|
253
|
+
/*
|
254
|
+
* Colour Adjustments
|
255
|
+
*/
|
256
|
+
|
257
|
+
/**
|
258
|
+
* Changes the hue of a colour while retaining the lightness and saturation.
|
259
|
+
* @param SassColour The colour to adjust
|
260
|
+
* @param SassNumber The amount to adjust the colour by
|
261
|
+
* @return new SassColour The adjusted colour
|
262
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
263
|
+
* $degrees is not a number
|
264
|
+
*/
|
265
|
+
public static function adjust_hue($colour, $degrees) {
|
266
|
+
SassLiteral::assertType($colour, 'SassColour');
|
267
|
+
SassLiteral::assertType($degrees, 'SassNumber');
|
268
|
+
return $colour->with(array('hue' => $colour->hue + $degrees->value));
|
269
|
+
}
|
270
|
+
|
271
|
+
/**
|
272
|
+
* Makes a colour lighter.
|
273
|
+
* @param SassColour The colour to lighten
|
274
|
+
* @param SassNumber The amount to lighten the colour by
|
275
|
+
* @param SassBoolean Whether the amount is a proportion of the current value
|
276
|
+
* (true) or the total range (false).
|
277
|
+
* The default is false - the amount is a proportion of the total range.
|
278
|
+
* If the colour lightness value is 40% and the amount is 50%,
|
279
|
+
* the resulting colour lightness value is 90% if the amount is a proportion
|
280
|
+
* of the total range, whereas it is 60% if the amount is a proportion of the
|
281
|
+
* current value.
|
282
|
+
* @return new SassColour The lightened colour
|
283
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
284
|
+
* $amount is not a number
|
285
|
+
* @see lighten_rel
|
286
|
+
*/
|
287
|
+
public static function lighten($colour, $amount, $ofCurrent = false) {
|
288
|
+
return self::adjust($colour, $amount, $ofCurrent, 'lightness', self::INCREASE, 0, 100, '%');
|
289
|
+
}
|
290
|
+
|
291
|
+
/**
|
292
|
+
* Makes a colour darker.
|
293
|
+
* @param SassColour The colour to darken
|
294
|
+
* @param SassNumber The amount to darken the colour by
|
295
|
+
* @param SassBoolean Whether the amount is a proportion of the current value
|
296
|
+
* (true) or the total range (false).
|
297
|
+
* The default is false - the amount is a proportion of the total range.
|
298
|
+
* If the colour lightness value is 80% and the amount is 50%,
|
299
|
+
* the resulting colour lightness value is 30% if the amount is a proportion
|
300
|
+
* of the total range, whereas it is 40% if the amount is a proportion of the
|
301
|
+
* current value.
|
302
|
+
* @return new SassColour The darkened colour
|
303
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
304
|
+
* $amount is not a number
|
305
|
+
* @see adjust
|
306
|
+
*/
|
307
|
+
public static function darken($colour, $amount, $ofCurrent = false) {
|
308
|
+
return self::adjust($colour, $amount, $ofCurrent, 'lightness', self::DECREASE, 0, 100, '%');
|
309
|
+
}
|
310
|
+
|
311
|
+
/**
|
312
|
+
* Makes a colour more saturated.
|
313
|
+
* @param SassColour The colour to saturate
|
314
|
+
* @param SassNumber The amount to saturate the colour by
|
315
|
+
* @param SassBoolean Whether the amount is a proportion of the current value
|
316
|
+
* (true) or the total range (false).
|
317
|
+
* The default is false - the amount is a proportion of the total range.
|
318
|
+
* If the colour saturation value is 40% and the amount is 50%,
|
319
|
+
* the resulting colour saturation value is 90% if the amount is a proportion
|
320
|
+
* of the total range, whereas it is 60% if the amount is a proportion of the
|
321
|
+
* current value.
|
322
|
+
* @return new SassColour The saturated colour
|
323
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
324
|
+
* $amount is not a number
|
325
|
+
* @see adjust
|
326
|
+
*/
|
327
|
+
public static function saturate($colour, $amount, $ofCurrent = false) {
|
328
|
+
return self::adjust($colour, $amount, $ofCurrent, 'saturation', self::INCREASE, 0, 100, '%');
|
329
|
+
}
|
330
|
+
|
331
|
+
/**
|
332
|
+
* Makes a colour less saturated.
|
333
|
+
* @param SassColour The colour to desaturate
|
334
|
+
* @param SassNumber The amount to desaturate the colour by
|
335
|
+
* @param SassBoolean Whether the amount is a proportion of the current value
|
336
|
+
* (true) or the total range (false).
|
337
|
+
* The default is false - the amount is a proportion of the total range.
|
338
|
+
* If the colour saturation value is 80% and the amount is 50%,
|
339
|
+
* the resulting colour saturation value is 30% if the amount is a proportion
|
340
|
+
* of the total range, whereas it is 40% if the amount is a proportion of the
|
341
|
+
* current value.
|
342
|
+
* @return new SassColour The desaturateed colour
|
343
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
344
|
+
* $amount is not a number
|
345
|
+
* @see adjust
|
346
|
+
*/
|
347
|
+
public static function desaturate($colour, $amount, $ofCurrent = false) {
|
348
|
+
return self::adjust($colour, $amount, $ofCurrent, 'saturation', self::DECREASE, 0, 100, '%');
|
349
|
+
}
|
350
|
+
|
351
|
+
/**
|
352
|
+
* Makes a colour more opaque.
|
353
|
+
* @param SassColour The colour to opacify
|
354
|
+
* @param SassNumber The amount to opacify the colour by
|
355
|
+
* If this is a unitless number between 0 and 1 the adjustment is absolute,
|
356
|
+
* if it is a percentage the adjustment is relative.
|
357
|
+
* If the colour alpha value is 0.4
|
358
|
+
* if the amount is 0.5 the resulting colour alpha value is 0.9,
|
359
|
+
* whereas if the amount is 50% the resulting colour alpha value is 0.6.
|
360
|
+
* @return new SassColour The opacified colour
|
361
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
362
|
+
* $amount is not a number
|
363
|
+
* @see opacify_rel
|
364
|
+
*/
|
365
|
+
public static function opacify($colour, $amount, $ofCurrent = false) {
|
366
|
+
$units = self::units($amount);
|
367
|
+
return self::adjust($colour, $amount, $ofCurrent, 'alpha', self::INCREASE, 0, ($units === '%' ? 100 : 1), $units);
|
368
|
+
}
|
369
|
+
|
370
|
+
/**
|
371
|
+
* Makes a colour more transparent.
|
372
|
+
* @param SassColour The colour to transparentize
|
373
|
+
* @param SassNumber The amount to transparentize the colour by.
|
374
|
+
* If this is a unitless number between 0 and 1 the adjustment is absolute,
|
375
|
+
* if it is a percentage the adjustment is relative.
|
376
|
+
* If the colour alpha value is 0.8
|
377
|
+
* if the amount is 0.5 the resulting colour alpha value is 0.3,
|
378
|
+
* whereas if the amount is 50% the resulting colour alpha value is 0.4.
|
379
|
+
* @return new SassColour The transparentized colour
|
380
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
381
|
+
* $amount is not a number
|
382
|
+
*/
|
383
|
+
public static function transparentize($colour, $amount, $ofCurrent = false) {
|
384
|
+
$units = self::units($amount);
|
385
|
+
return self::adjust($colour, $amount, $ofCurrent, 'alpha', self::DECREASE, 0, ($units === '%' ? 100 : 1), $units);
|
386
|
+
}
|
387
|
+
|
388
|
+
/**
|
389
|
+
* Makes a colour more opaque.
|
390
|
+
* Alias for {@link opacify}.
|
391
|
+
* @param SassColour The colour to opacify
|
392
|
+
* @param SassNumber The amount to opacify the colour by
|
393
|
+
* @param SassBoolean Whether the amount is a proportion of the current value
|
394
|
+
* (true) or the total range (false).
|
395
|
+
* @return new SassColour The opacified colour
|
396
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
397
|
+
* $amount is not a number
|
398
|
+
* @see opacify
|
399
|
+
*/
|
400
|
+
public static function fade_in($colour, $amount, $ofCurrent = false) {
|
401
|
+
return self::opacify($colour, $amount, $ofCurrent);
|
402
|
+
}
|
403
|
+
|
404
|
+
/**
|
405
|
+
* Makes a colour more transparent.
|
406
|
+
* Alias for {@link transparentize}.
|
407
|
+
* @param SassColour The colour to transparentize
|
408
|
+
* @param SassNumber The amount to transparentize the colour by
|
409
|
+
* @param SassBoolean Whether the amount is a proportion of the current value
|
410
|
+
* (true) or the total range (false).
|
411
|
+
* @return new SassColour The transparentized colour
|
412
|
+
* @throws SassScriptFunctionException If $colour is not a colour or
|
413
|
+
* $amount is not a number
|
414
|
+
* @see transparentize
|
415
|
+
*/
|
416
|
+
public static function fade_out($colour, $amount, $ofCurrent = false) {
|
417
|
+
return self::transparentize($colour, $amount, $ofCurrent);
|
418
|
+
}
|
419
|
+
|
420
|
+
/**
|
421
|
+
* Returns the complement of a colour.
|
422
|
+
* Rotates the hue by 180 degrees.
|
423
|
+
* @param SassColour The colour
|
424
|
+
* @return new SassColour The comlemented colour
|
425
|
+
* @uses adjust_hue()
|
426
|
+
*/
|
427
|
+
public static function complement($colour) {
|
428
|
+
return self::adjust_hue($colour, new SassNumber('180deg'));
|
429
|
+
}
|
430
|
+
|
431
|
+
/**
|
432
|
+
* Greyscale for non-english speakers.
|
433
|
+
* @param SassColour The colour
|
434
|
+
* @return new SassColour The greyscale colour
|
435
|
+
* @see desaturate
|
436
|
+
*/
|
437
|
+
public static function grayscale($colour) {
|
438
|
+
return self::desaturate($colour, new SassNumber(100));
|
439
|
+
}
|
440
|
+
|
441
|
+
/**
|
442
|
+
* Converts a colour to greyscale.
|
443
|
+
* Reduces the saturation to zero.
|
444
|
+
* @param SassColour The colour
|
445
|
+
* @return new SassColour The greyscale colour
|
446
|
+
* @see desaturate
|
447
|
+
*/
|
448
|
+
public static function greyscale($colour) {
|
449
|
+
return self::desaturate($colour, new SassNumber(100));
|
450
|
+
}
|
451
|
+
|
452
|
+
/**
|
453
|
+
* Mixes two colours together.
|
454
|
+
* Takes the average of each of the RGB components, optionally weighted by the
|
455
|
+
* given percentage. The opacity of the colours is also considered when
|
456
|
+
* weighting the components.
|
457
|
+
* The weight specifies the amount of the first colour that should be included
|
458
|
+
* in the returned colour. The default, 50%, means that half the first colour
|
459
|
+
* and half the second colour should be used. 25% means that a quarter of the
|
460
|
+
* first colour and three quarters of the second colour should be used.
|
461
|
+
* For example:
|
462
|
+
* mix(#f00, #00f) => #7f007f
|
463
|
+
* mix(#f00, #00f, 25%) => #3f00bf
|
464
|
+
* mix(rgba(255, 0, 0, 0.5), #00f) => rgba(63, 0, 191, 0.75)
|
465
|
+
*
|
466
|
+
* @param SassColour The first colour
|
467
|
+
* @param SassColour The second colour
|
468
|
+
* @param float Percentage of the first colour to use
|
469
|
+
* @return new SassColour The mixed colour
|
470
|
+
* @throws SassScriptFunctionException If $colour1 or $colour2 is
|
471
|
+
* not a colour
|
472
|
+
*/
|
473
|
+
public static function mix($colour1, $colour2, $weight = null) {
|
474
|
+
if (is_null($weight)) $weight = new SassNumber('50%');
|
475
|
+
SassLiteral::assertType($colour1, 'SassColour');
|
476
|
+
SassLiteral::assertType($colour2, 'SassColour');
|
477
|
+
SassLiteral::assertType($weight, 'SassNumber');
|
478
|
+
SassLiteral::assertInRange($weight, 0, 100, '%');
|
479
|
+
|
480
|
+
/*
|
481
|
+
* This algorithm factors in both the user-provided weight
|
482
|
+
* and the difference between the alpha values of the two colours
|
483
|
+
* to decide how to perform the weighted average of the two RGB values.
|
484
|
+
*
|
485
|
+
* It works by first normalizing both parameters to be within [-1, 1],
|
486
|
+
* where 1 indicates "only use colour1", -1 indicates "only use colour 0",
|
487
|
+
* and all values in between indicated a proportionately weighted average.
|
488
|
+
*
|
489
|
+
* Once we have the normalized variables w and a,
|
490
|
+
* we apply the formula (w + a)/(1 + w*a)
|
491
|
+
* to get the combined weight (in [-1, 1]) of colour1.
|
492
|
+
* This formula has two especially nice properties:
|
493
|
+
*
|
494
|
+
* * When either w or a are -1 or 1, the combined weight is also that number
|
495
|
+
* (cases where w * a == -1 are undefined, and handled as a special case).
|
496
|
+
*
|
497
|
+
* * When a is 0, the combined weight is w, and vice versa
|
498
|
+
*
|
499
|
+
* Finally, the weight of colour1 is renormalized to be within [0, 1]
|
500
|
+
* and the weight of colour2 is given by 1 minus the weight of colour1.
|
501
|
+
*/
|
502
|
+
|
503
|
+
$p = $weight->value/100;
|
504
|
+
$w = $p * 2 - 1;
|
505
|
+
$a = $colour1->alpha - $colour2->alpha;
|
506
|
+
|
507
|
+
$w1 = ((($w * $a == -1) ? $w : ($w + $a)/(1 + $w * $a)) + 1) / 2;
|
508
|
+
$w2 = 1 - $w1;
|
509
|
+
|
510
|
+
$rgb1 = $colour1->rgb();
|
511
|
+
$rgb2 = $colour2->rgb();
|
512
|
+
$rgba = array();
|
513
|
+
foreach ($rgb1 as $key=>$value) {
|
514
|
+
$rgba[$key] = $value * $w1 + $rgb2[$key] * $w2;
|
515
|
+
} // foreach
|
516
|
+
$rgba[] = $colour1->alpha * $p + $colour2->alpha * (1 - $p);
|
517
|
+
return new SassColour($rgba);
|
518
|
+
}
|
519
|
+
|
520
|
+
/**
|
521
|
+
* Adjusts the colour
|
522
|
+
* @param SassColour the colour to adjust
|
523
|
+
* @param SassNumber the amount to adust by
|
524
|
+
* @param boolean whether the amount is a proportion of the current value or
|
525
|
+
* the total range
|
526
|
+
* @param string the attribute to adjust
|
527
|
+
* @param boolean whether to decrease (false) or increase (true) the value of the attribute
|
528
|
+
* @param float minimum value the amount can be
|
529
|
+
* @param float maximum value the amount can bemixed
|
530
|
+
* @param string amount units
|
531
|
+
*/
|
532
|
+
private static function adjust($colour, $amount, $ofCurrent, $attribute, $op, $min, $max, $units='') {
|
533
|
+
SassLiteral::assertType($colour, 'SassColour');
|
534
|
+
SassLiteral::assertType($amount, 'SassNumber');
|
535
|
+
SassLiteral::assertInRange($amount, $min, $max, $units);
|
536
|
+
if (!is_bool($ofCurrent)) {
|
537
|
+
SassLiteral::assertType($ofCurrent, 'SassBoolean');
|
538
|
+
$ofCurrent = $ofCurrent->value;
|
539
|
+
}
|
540
|
+
|
541
|
+
$amount = $amount->value * (($attribute === 'alpha' && $ofCurrent && $units === '') ? 100 : 1);
|
542
|
+
|
543
|
+
return $colour->with(array(
|
544
|
+
$attribute => self::inRange((
|
545
|
+
$ofCurrent ?
|
546
|
+
$colour->$attribute * (1 + ($amount * ($op === self::INCREASE ? 1 : -1))/100) :
|
547
|
+
$colour->$attribute + ($amount * ($op === self::INCREASE ? 1 : -1))
|
548
|
+
), $min, $max)
|
549
|
+
));
|
550
|
+
}
|
551
|
+
|
552
|
+
/*
|
553
|
+
* Number Functions
|
554
|
+
*/
|
555
|
+
|
556
|
+
/**
|
557
|
+
* Finds the absolute value of a number.
|
558
|
+
* For example:
|
559
|
+
* abs(10px) => 10px
|
560
|
+
* abs(-10px) => 10px
|
561
|
+
*
|
562
|
+
* @param SassNumber The number to round
|
563
|
+
* @return SassNumber The absolute value of the number
|
564
|
+
* @throws SassScriptFunctionException If $number is not a number
|
565
|
+
*/
|
566
|
+
public static function abs($number) {
|
567
|
+
SassLiteral::assertType($number, 'SassNumber');
|
568
|
+
return new SassNumber(abs($number->value).$number->units);
|
569
|
+
}
|
570
|
+
|
571
|
+
/**
|
572
|
+
* Rounds a number up to the nearest whole number.
|
573
|
+
* For example:
|
574
|
+
* ceil(10.4px) => 11px
|
575
|
+
* ceil(10.6px) => 11px
|
576
|
+
*
|
577
|
+
* @param SassNumber The number to round
|
578
|
+
* @return new SassNumber The rounded number
|
579
|
+
* @throws SassScriptFunctionException If $number is not a number
|
580
|
+
*/
|
581
|
+
public static function ceil($number) {
|
582
|
+
SassLiteral::assertType($number, 'SassNumber');
|
583
|
+
return new SassNumber(ceil($number->value).$number->units);
|
584
|
+
}
|
585
|
+
|
586
|
+
/**
|
587
|
+
* Rounds down to the nearest whole number.
|
588
|
+
* For example:
|
589
|
+
* floor(10.4px) => 10px
|
590
|
+
* floor(10.6px) => 10px
|
591
|
+
*
|
592
|
+
* @param SassNumber The number to round
|
593
|
+
* @return new SassNumber The rounded number
|
594
|
+
* @throws SassScriptFunctionException If $value is not a number
|
595
|
+
*/
|
596
|
+
public static function floor($number) {
|
597
|
+
SassLiteral::assertType($number, 'SassNumber');
|
598
|
+
return new SassNumber(floor($number->value).$number->units);
|
599
|
+
}
|
600
|
+
|
601
|
+
/**
|
602
|
+
* Rounds a number to the nearest whole number.
|
603
|
+
* For example:
|
604
|
+
* round(10.4px) => 10px
|
605
|
+
* round(10.6px) => 11px
|
606
|
+
*
|
607
|
+
* @param SassNumber The number to round
|
608
|
+
* @return new SassNumber The rounded number
|
609
|
+
* @throws SassScriptFunctionException If $number is not a number
|
610
|
+
*/
|
611
|
+
public static function round($number) {
|
612
|
+
SassLiteral::assertType($number, 'SassNumber');
|
613
|
+
return new SassNumber(round($number->value).$number->units);
|
614
|
+
}
|
615
|
+
|
616
|
+
/**
|
617
|
+
* Returns true if two numbers are similar enough to be added, subtracted,
|
618
|
+
* or compared.
|
619
|
+
* @param SassNumber The first number to test
|
620
|
+
* @param SassNumber The second number to test
|
621
|
+
* @return new SassBoolean True if the numbers are similar
|
622
|
+
* @throws SassScriptFunctionException If $number1 or $number2 is not
|
623
|
+
* a number
|
624
|
+
*/
|
625
|
+
public static function comparable($number1, $number2) {
|
626
|
+
SassLiteral::assertType($number1, 'SassNumber');
|
627
|
+
SassLiteral::assertType($number2, 'SassNumber');
|
628
|
+
return new SassBoolean($number1->isComparableTo($number2));
|
629
|
+
}
|
630
|
+
|
631
|
+
/**
|
632
|
+
* Converts a decimal number to a percentage.
|
633
|
+
* For example:
|
634
|
+
* percentage(100px / 50px) => 200%
|
635
|
+
*
|
636
|
+
* @param SassNumber The decimal number to convert to a percentage
|
637
|
+
* @return new SassNumber The number as a percentage
|
638
|
+
* @throws SassScriptFunctionException If $number isn't a unitless number
|
639
|
+
*/
|
640
|
+
public static function percentage($number) {
|
641
|
+
if (!$number instanceof SassNumber || $number->hasUnits()) {
|
642
|
+
throw new SassScriptFunctionException('{what} must be a {type}', array('{what}'=>'number', '{type}'=>'unitless SassNumber'), SassScriptParser::$context->node);
|
643
|
+
}
|
644
|
+
$number->value *= 100;
|
645
|
+
$number->units = '%';
|
646
|
+
return $number;
|
647
|
+
}
|
648
|
+
|
649
|
+
/**
|
650
|
+
* Inspects the unit of the number, returning it as a quoted string.
|
651
|
+
* Alias for units.
|
652
|
+
* @param SassNumber The number to inspect
|
653
|
+
* @return new SassString The units of the number
|
654
|
+
* @throws SassScriptFunctionException If $number is not a number
|
655
|
+
* @see units
|
656
|
+
*/
|
657
|
+
public static function unit($number) {
|
658
|
+
return self::units($number);
|
659
|
+
}
|
660
|
+
|
661
|
+
/**
|
662
|
+
* Inspects the units of the number, returning it as a quoted string.
|
663
|
+
* @param SassNumber The number to inspect
|
664
|
+
* @return new SassString The units of the number
|
665
|
+
* @throws SassScriptFunctionException If $number is not a number
|
666
|
+
*/
|
667
|
+
public static function units($number) {
|
668
|
+
SassLiteral::assertType($number, 'SassNumber');
|
669
|
+
return new SassString($number->units);
|
670
|
+
}
|
671
|
+
|
672
|
+
/**
|
673
|
+
* Inspects the unit of the number, returning a boolean indicating if it is
|
674
|
+
* unitless.
|
675
|
+
* @param SassNumber The number to inspect
|
676
|
+
* @return new SassBoolean True if the number is unitless, false if it has units.
|
677
|
+
* @throws SassScriptFunctionException If $number is not a number
|
678
|
+
*/
|
679
|
+
public static function unitless() {
|
680
|
+
SassLiteral::assertType($number, 'SassNumber');
|
681
|
+
return new SassBoolean(!$number->hasUnits());
|
682
|
+
}
|
683
|
+
|
684
|
+
/*
|
685
|
+
* String Functions
|
686
|
+
*/
|
687
|
+
|
688
|
+
/**
|
689
|
+
* Add quotes to a string if the string isn't quoted,
|
690
|
+
* or returns the same string if it is.
|
691
|
+
* @param string String to quote
|
692
|
+
* @return new SassString Quoted string
|
693
|
+
* @throws SassScriptFunctionException If $string is not a string
|
694
|
+
* @see unquote
|
695
|
+
*/
|
696
|
+
public static function quote($string) {
|
697
|
+
SassLiteral::assertType($string, 'SassString');
|
698
|
+
return new SassString('"'.$string->value.'"');
|
699
|
+
}
|
700
|
+
|
701
|
+
/**
|
702
|
+
* Removes quotes from a string if the string is quoted, or returns the same
|
703
|
+
* string if it's not.
|
704
|
+
* @param string String to unquote
|
705
|
+
* @return new SassString Unuoted string
|
706
|
+
* @throws SassScriptFunctionException If $string is not a string
|
707
|
+
* @see quote
|
708
|
+
*/
|
709
|
+
public static function unquote($string) {
|
710
|
+
SassLiteral::assertType($string, 'SassString');
|
711
|
+
return new SassString($string->value);
|
712
|
+
}
|
713
|
+
|
714
|
+
/**
|
715
|
+
* Returns the variable whose name is the string.
|
716
|
+
* @param string String to unquote
|
717
|
+
* @return
|
718
|
+
* @throws SassScriptFunctionException If $string is not a string
|
719
|
+
*/
|
720
|
+
public static function get_var($string) {
|
721
|
+
SassLiteral::assertType($string, 'SassString');
|
722
|
+
return new SassString($string->toVar());
|
723
|
+
}
|
724
|
+
|
725
|
+
/*
|
726
|
+
* Misc. Functions
|
727
|
+
*/
|
728
|
+
|
729
|
+
/**
|
730
|
+
* Inspects the type of the argument, returning it as an unquoted string.
|
731
|
+
* @param SassLiteral The object to inspect
|
732
|
+
* @return new SassString The type of object
|
733
|
+
* @throws SassScriptFunctionException If $obj is not an instance of a
|
734
|
+
* SassLiteral
|
735
|
+
*/
|
736
|
+
public static function type_of($obj) {
|
737
|
+
SassLiteral::assertType($obj, SassLiteral);
|
738
|
+
return new SassString($obj->typeOf);
|
739
|
+
}
|
740
|
+
|
741
|
+
/**
|
742
|
+
* Ensures the value is within the given range, clipping it if needed.
|
743
|
+
* @param float the value to test
|
744
|
+
* @param float the minimum value
|
745
|
+
* @param float the maximum value
|
746
|
+
* @return the value clipped to the range
|
747
|
+
*/
|
748
|
+
private static function inRange($value, $min, $max) {
|
749
|
+
return ($value < $min ? $min : ($value > $max ? $max : $value));
|
750
|
+
}
|
751
|
+
}
|