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,886 @@
|
|
1
|
+
<?php
|
2
|
+
/* SVN FILE: $Id: SassColour.php 118 2010-09-21 09:45:11Z chris.l.yates@gmail.com $ */
|
3
|
+
/**
|
4
|
+
* SassColour class file.
|
5
|
+
* @author Chris Yates <chris.l.yates@gmail.com>
|
6
|
+
* @copyright Copyright (c) 2010 PBM Web Development
|
7
|
+
* @license http://phamlp.googlecode.com/files/license.txt
|
8
|
+
* @package PHamlP
|
9
|
+
* @subpackage Sass.script.literals
|
10
|
+
*/
|
11
|
+
|
12
|
+
require_once('SassLiteral.php');
|
13
|
+
|
14
|
+
/**
|
15
|
+
* SassColour class.
|
16
|
+
* A SassScript object representing a CSS colour.
|
17
|
+
*
|
18
|
+
* A colour may be represented internally as RGBA, HSLA, or both. It is
|
19
|
+
* originally represented as whatever its input is; if it’s created with RGB
|
20
|
+
* values, it’s represented as RGBA, and if it’s created with HSL values, it’s
|
21
|
+
* represented as HSLA. Once a property is accessed that requires the other
|
22
|
+
* representation – for example, SassColour::red for an HSL color – that
|
23
|
+
* component is calculated and cached.
|
24
|
+
*
|
25
|
+
* The alpha channel of a color is independent of its RGB or HSL representation.
|
26
|
+
* It’s always stored, as 1 if nothing else is specified. If only the alpha
|
27
|
+
* channel is modified using SassColour::with(), the cached RGB and HSL values
|
28
|
+
* are retained.
|
29
|
+
*
|
30
|
+
* Colour operations are all piecewise, e.g. when adding two colours each
|
31
|
+
* component is added independantly; Rr = R1 + R2, Gr = G1 + G2, Br = B1 + B2.
|
32
|
+
*
|
33
|
+
* Colours are returned as a named colour if possible or #rrggbb.
|
34
|
+
*
|
35
|
+
* @package PHamlP
|
36
|
+
* @subpackage Sass.script.literals
|
37
|
+
*/
|
38
|
+
class SassColour extends SassLiteral {
|
39
|
+
/**@#+
|
40
|
+
* Regexes for matching and extracting colours
|
41
|
+
*/
|
42
|
+
const MATCH = '/^((#([\da-f]{6}|[\da-f]{3}))|transparent|{CSS_COLOURS})/';
|
43
|
+
const EXTRACT_3 = '/#([\da-f])([\da-f])([\da-f])/';
|
44
|
+
const EXTRACT_6 = '/#([\da-f]{2})([\da-f]{2})([\da-f]{2})/';
|
45
|
+
const TRANSPARENT = 'transparent';
|
46
|
+
/**@#-*/
|
47
|
+
|
48
|
+
/**@#-*/
|
49
|
+
static private $svgColours = array(
|
50
|
+
'aliceblue' => '#f0f8ff',
|
51
|
+
'antiquewhite' => '#faebd7',
|
52
|
+
'aqua' => '#00ffff',
|
53
|
+
'aquamarine' => '#7fffd4',
|
54
|
+
'azure' => '#f0ffff',
|
55
|
+
'beige' => '#f5f5dc',
|
56
|
+
'bisque' => '#ffe4c4',
|
57
|
+
'black' => '#000000',
|
58
|
+
'blanchedalmond' => '#ffebcd',
|
59
|
+
'blue' => '#0000ff',
|
60
|
+
'blueviolet' => '#8a2be2',
|
61
|
+
'brown' => '#a52a2a',
|
62
|
+
'burlywood' => '#deb887',
|
63
|
+
'cadetblue' => '#5f9ea0',
|
64
|
+
'chartreuse' => '#7fff00',
|
65
|
+
'chocolate' => '#d2691e',
|
66
|
+
'coral' => '#ff7f50',
|
67
|
+
'cornflowerblue' => '#6495ed',
|
68
|
+
'cornsilk' => '#fff8dc',
|
69
|
+
'crimson' => '#dc143c',
|
70
|
+
'cyan' => '#00ffff',
|
71
|
+
'darkblue' => '#00008b',
|
72
|
+
'darkcyan' => '#008b8b',
|
73
|
+
'darkgoldenrod' => '#b8860b',
|
74
|
+
'darkgray' => '#a9a9a9',
|
75
|
+
'darkgreen' => '#006400',
|
76
|
+
'darkgrey' => '#a9a9a9',
|
77
|
+
'darkkhaki' => '#bdb76b',
|
78
|
+
'darkmagenta' => '#8b008b',
|
79
|
+
'darkolivegreen' => '#556b2f',
|
80
|
+
'darkorange' => '#ff8c00',
|
81
|
+
'darkorchid' => '#9932cc',
|
82
|
+
'darkred' => '#8b0000',
|
83
|
+
'darksalmon' => '#e9967a',
|
84
|
+
'darkseagreen' => '#8fbc8f',
|
85
|
+
'darkslateblue' => '#483d8b',
|
86
|
+
'darkslategray' => '#2f4f4f',
|
87
|
+
'darkslategrey' => '#2f4f4f',
|
88
|
+
'darkturquoise' => '#00ced1',
|
89
|
+
'darkviolet' => '#9400d3',
|
90
|
+
'deeppink' => '#ff1493',
|
91
|
+
'deepskyblue' => '#00bfff',
|
92
|
+
'dimgray' => '#696969',
|
93
|
+
'dimgrey' => '#696969',
|
94
|
+
'dodgerblue' => '#1e90ff',
|
95
|
+
'firebrick' => '#b22222',
|
96
|
+
'floralwhite' => '#fffaf0',
|
97
|
+
'forestgreen' => '#228b22',
|
98
|
+
'fuchsia' => '#ff00ff',
|
99
|
+
'gainsboro' => '#dcdcdc',
|
100
|
+
'ghostwhite' => '#f8f8ff',
|
101
|
+
'gold' => '#ffd700',
|
102
|
+
'goldenrod' => '#daa520',
|
103
|
+
'gray' => '#808080',
|
104
|
+
'green' => '#008000',
|
105
|
+
'greenyellow' => '#adff2f',
|
106
|
+
'grey' => '#808080',
|
107
|
+
'honeydew' => '#f0fff0',
|
108
|
+
'hotpink' => '#ff69b4',
|
109
|
+
'indianred' => '#cd5c5c',
|
110
|
+
'indigo' => '#4b0082',
|
111
|
+
'ivory' => '#fffff0',
|
112
|
+
'khaki' => '#f0e68c',
|
113
|
+
'lavender' => '#e6e6fa',
|
114
|
+
'lavenderblush' => '#fff0f5',
|
115
|
+
'lawngreen' => '#7cfc00',
|
116
|
+
'lemonchiffon' => '#fffacd',
|
117
|
+
'lightblue' => '#add8e6',
|
118
|
+
'lightcoral' => '#f08080',
|
119
|
+
'lightcyan' => '#e0ffff',
|
120
|
+
'lightgoldenrodyellow' => '#fafad2',
|
121
|
+
'lightgray' => '#d3d3d3',
|
122
|
+
'lightgreen' => '#90ee90',
|
123
|
+
'lightgrey' => '#d3d3d3',
|
124
|
+
'lightpink' => '#ffb6c1',
|
125
|
+
'lightsalmon' => '#ffa07a',
|
126
|
+
'lightseagreen' => '#20b2aa',
|
127
|
+
'lightskyblue' => '#87cefa',
|
128
|
+
'lightslategray' => '#778899',
|
129
|
+
'lightslategrey' => '#778899',
|
130
|
+
'lightsteelblue' => '#b0c4de',
|
131
|
+
'lightyellow' => '#ffffe0',
|
132
|
+
'lime' => '#00ff00',
|
133
|
+
'limegreen' => '#32cd32',
|
134
|
+
'linen' => '#faf0e6',
|
135
|
+
'magenta' => '#ff00ff',
|
136
|
+
'maroon' => '#800000',
|
137
|
+
'mediumaquamarine' => '#66cdaa',
|
138
|
+
'mediumblue' => '#0000cd',
|
139
|
+
'mediumorchid' => '#ba55d3',
|
140
|
+
'mediumpurple' => '#9370db',
|
141
|
+
'mediumseagreen' => '#3cb371',
|
142
|
+
'mediumslateblue' => '#7b68ee',
|
143
|
+
'mediumspringgreen' => '#00fa9a',
|
144
|
+
'mediumturquoise' => '#48d1cc',
|
145
|
+
'mediumvioletred' => '#c71585',
|
146
|
+
'midnightblue' => '#191970',
|
147
|
+
'mintcream' => '#f5fffa',
|
148
|
+
'mistyrose' => '#ffe4e1',
|
149
|
+
'moccasin' => '#ffe4b5',
|
150
|
+
'navajowhite' => '#ffdead',
|
151
|
+
'navy' => '#000080',
|
152
|
+
'oldlace' => '#fdf5e6',
|
153
|
+
'olive' => '#808000',
|
154
|
+
'olivedrab' => '#6b8e23',
|
155
|
+
'orange' => '#ffa500',
|
156
|
+
'orangered' => '#ff4500',
|
157
|
+
'orchid' => '#da70d6',
|
158
|
+
'palegoldenrod' => '#eee8aa',
|
159
|
+
'palegreen' => '#98fb98',
|
160
|
+
'paleturquoise' => '#afeeee',
|
161
|
+
'palevioletred' => '#db7093',
|
162
|
+
'papayawhip' => '#ffefd5',
|
163
|
+
'peachpuff' => '#ffdab9',
|
164
|
+
'peru' => '#cd853f',
|
165
|
+
'pink' => '#ffc0cb',
|
166
|
+
'plum' => '#dda0dd',
|
167
|
+
'powderblue' => '#b0e0e6',
|
168
|
+
'purple' => '#800080',
|
169
|
+
'red' => '#ff0000',
|
170
|
+
'rosybrown' => '#bc8f8f',
|
171
|
+
'royalblue' => '#4169e1',
|
172
|
+
'saddlebrown' => '#8b4513',
|
173
|
+
'salmon' => '#fa8072',
|
174
|
+
'sandybrown' => '#f4a460',
|
175
|
+
'seagreen' => '#2e8b57',
|
176
|
+
'seashell' => '#fff5ee',
|
177
|
+
'sienna' => '#a0522d',
|
178
|
+
'silver' => '#c0c0c0',
|
179
|
+
'skyblue' => '#87ceeb',
|
180
|
+
'slateblue' => '#6a5acd',
|
181
|
+
'slategray' => '#708090',
|
182
|
+
'slategrey' => '#708090',
|
183
|
+
'snow' => '#fffafa',
|
184
|
+
'springgreen' => '#00ff7f',
|
185
|
+
'steelblue' => '#4682b4',
|
186
|
+
'tan' => '#d2b48c',
|
187
|
+
'teal' => '#008080',
|
188
|
+
'thistle' => '#d8bfd8',
|
189
|
+
'tomato' => '#ff6347',
|
190
|
+
'turquoise' => '#40e0d0',
|
191
|
+
'violet' => '#ee82ee',
|
192
|
+
'wheat' => '#f5deb3',
|
193
|
+
'white' => '#ffffff',
|
194
|
+
'whitesmoke' => '#f5f5f5',
|
195
|
+
'yellow' => '#ffff00',
|
196
|
+
'yellowgreen' => '#9acd32'
|
197
|
+
);
|
198
|
+
|
199
|
+
/**
|
200
|
+
* @var array reverse array (value => name) of named SVG1.0 colours
|
201
|
+
*/
|
202
|
+
static private $_svgColours;
|
203
|
+
|
204
|
+
/**
|
205
|
+
* @var array reverse array (value => name) of named HTML4 colours
|
206
|
+
*/
|
207
|
+
static private $_html4Colours = array(
|
208
|
+
'#000000' => 'black',
|
209
|
+
'#000080' => 'navy',
|
210
|
+
'#0000ff' => 'blue',
|
211
|
+
'#008000' => 'green',
|
212
|
+
'#008080' => 'teal',
|
213
|
+
'#00ff00' => 'lime',
|
214
|
+
'#00ffff' => 'aqua',
|
215
|
+
'#800000' => 'maroon',
|
216
|
+
'#800080' => 'purple',
|
217
|
+
'#808000' => 'olive',
|
218
|
+
'#808080' => 'gray',
|
219
|
+
'#c0c0c0' => 'silver',
|
220
|
+
'#ff0000' => 'red',
|
221
|
+
'#ff00ff' => 'fuchsia',
|
222
|
+
'#ffff00' => 'yellow',
|
223
|
+
'#ffffff' => 'white',
|
224
|
+
);
|
225
|
+
|
226
|
+
static private $regex;
|
227
|
+
|
228
|
+
/**@#+
|
229
|
+
* RGB colour components
|
230
|
+
*/
|
231
|
+
/**
|
232
|
+
* @var array RGB colour components. Used to check for RGB attributes.
|
233
|
+
*/
|
234
|
+
static private $rgb = array('red', 'green', 'blue');
|
235
|
+
/**
|
236
|
+
* @var integer red component. 0 - 255
|
237
|
+
*/
|
238
|
+
private $red;
|
239
|
+
/**
|
240
|
+
* @var integer green component. 0 - 255
|
241
|
+
*/
|
242
|
+
private $green;
|
243
|
+
/**
|
244
|
+
* @var integer blue component. 0 - 255
|
245
|
+
*/
|
246
|
+
private $blue;
|
247
|
+
/**@#-*/
|
248
|
+
/**@#+
|
249
|
+
* HSL colour components
|
250
|
+
*/
|
251
|
+
/**
|
252
|
+
* @var array HSL colour components. Used to check for HSL attributes.
|
253
|
+
*/
|
254
|
+
static private $hsl = array('hue', 'saturation', 'lightness');
|
255
|
+
/**
|
256
|
+
* @var float hue component. 0 - 360
|
257
|
+
*/
|
258
|
+
private $hue;
|
259
|
+
/**
|
260
|
+
* @var float saturation component. 0 - 100
|
261
|
+
*/
|
262
|
+
private $saturation;
|
263
|
+
/**
|
264
|
+
* @var float lightness component. 0 - 100
|
265
|
+
*/
|
266
|
+
private $lightness;
|
267
|
+
/**@#-*/
|
268
|
+
/**
|
269
|
+
* @var float alpha component. 0 - 1
|
270
|
+
*/
|
271
|
+
private $alpha = 1;
|
272
|
+
|
273
|
+
/**
|
274
|
+
* Constructs an RGB or HSL color object, optionally with an alpha channel.
|
275
|
+
* RGB values must be between 0 and 255. Saturation and lightness values must
|
276
|
+
* be between 0 and 100. The alpha value must be between 0 and 1.
|
277
|
+
* The colour can be specified as:
|
278
|
+
* + a string that is an SVG colour or of the form #rgb or #rrggbb
|
279
|
+
* + an array with either 'red', 'green', and 'blue' keys, and optionally
|
280
|
+
* an alpha key.
|
281
|
+
* + an array with 'hue', 'saturation', and 'lightness' keys, and optionally
|
282
|
+
* an alpha key.
|
283
|
+
* + an array of red, green, and blue values, and optionally an alpha value.
|
284
|
+
* @param mixed the colour
|
285
|
+
* @return SassColour
|
286
|
+
*/
|
287
|
+
public function __construct($colour) {
|
288
|
+
if (is_string($colour)) {
|
289
|
+
$colour = strtolower($colour);
|
290
|
+
if ($colour === self::TRANSPARENT) {
|
291
|
+
$this->red = 0;
|
292
|
+
$this->green = 0;
|
293
|
+
$this->blue = 0;
|
294
|
+
$this->alpha = 0;
|
295
|
+
}
|
296
|
+
else {
|
297
|
+
if (array_key_exists($colour, self::$svgColours)) {
|
298
|
+
$colour = self::$svgColours[$colour];
|
299
|
+
}
|
300
|
+
if (strlen($colour) == 4) {
|
301
|
+
preg_match(self::EXTRACT_3, $colour, $matches);
|
302
|
+
for ($i = 1; $i < 4; $i++) {
|
303
|
+
$matches[$i] = str_repeat($matches[$i], 2);
|
304
|
+
}
|
305
|
+
}
|
306
|
+
else {
|
307
|
+
preg_match(self::EXTRACT_6, $colour, $matches);
|
308
|
+
}
|
309
|
+
|
310
|
+
if (empty($matches)) {
|
311
|
+
throw new SassColourException('Invalid {what}', array('{what}'=>'SassColour string'), SassScriptParser::$context->node);
|
312
|
+
}
|
313
|
+
$this->red = intval($matches[1], 16);
|
314
|
+
$this->green = intval($matches[2], 16);
|
315
|
+
$this->blue = intval($matches[3], 16);
|
316
|
+
$this->alpha = 1;
|
317
|
+
}
|
318
|
+
}
|
319
|
+
elseif (is_array($colour)) {
|
320
|
+
$scheme = $this->assertValid($colour);
|
321
|
+
if ($scheme == 'rgb') {
|
322
|
+
$this->red = $colour['red'];
|
323
|
+
$this->green = $colour['green'];
|
324
|
+
$this->blue = $colour['blue'];
|
325
|
+
$this->alpha = (isset($colour['alpha']) ? $colour['alpha'] : 1);
|
326
|
+
}
|
327
|
+
elseif ($scheme == 'hsl') {
|
328
|
+
$this->hue = $colour['hue'];
|
329
|
+
$this->saturation = $colour['saturation'];
|
330
|
+
$this->lightness = $colour['lightness'];
|
331
|
+
$this->alpha = (isset($colour['alpha']) ? $colour['alpha'] : 1);
|
332
|
+
}
|
333
|
+
else {
|
334
|
+
$this->red = $colour[0];
|
335
|
+
$this->green = $colour[1];
|
336
|
+
$this->blue = $colour[2];
|
337
|
+
$this->alpha = (isset($colour[3]) ? $colour[3] : 1);
|
338
|
+
}
|
339
|
+
}
|
340
|
+
else {
|
341
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Colour', '{type}'=>'array'), SassScriptParser::$context->node);
|
342
|
+
}
|
343
|
+
}
|
344
|
+
|
345
|
+
/**
|
346
|
+
* Colour addition
|
347
|
+
* @param mixed SassColour|SassNumber value to add
|
348
|
+
* @return sassColour the colour result
|
349
|
+
*/
|
350
|
+
public function op_plus($other) {
|
351
|
+
if ($other instanceof SassNumber) {
|
352
|
+
if (!$other->isUnitless()) {
|
353
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
354
|
+
}
|
355
|
+
$this->red = $this->getRed() + $other->value;
|
356
|
+
$this->green = $this->getGreen() + $other->value;
|
357
|
+
$this->blue = $this->getBlue() + $other->value;
|
358
|
+
}
|
359
|
+
elseif (!$other instanceof SassColour) {
|
360
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
361
|
+
}
|
362
|
+
else {
|
363
|
+
$this->red = $this->getRed() + $other->getRed();
|
364
|
+
$this->green = $this->getGreen() + $other->getGreen();
|
365
|
+
$this->blue = $this->getBlue() + $other->getBlue();
|
366
|
+
}
|
367
|
+
return $this;
|
368
|
+
}
|
369
|
+
|
370
|
+
/**
|
371
|
+
* Colour subraction
|
372
|
+
* @param mixed value (SassColour or SassNumber) to subtract
|
373
|
+
* @return sassColour the colour result
|
374
|
+
*/
|
375
|
+
public function op_minus($other) {
|
376
|
+
if ($other instanceof SassNumber) {
|
377
|
+
if (!$other->isUnitless()) {
|
378
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
379
|
+
}
|
380
|
+
$this->red = $this->getRed() - $other->value;
|
381
|
+
$this->green = $this->getGreen() - $other->value;
|
382
|
+
$this->blue = $this->getBlue() - $other->value;
|
383
|
+
}
|
384
|
+
elseif (!$other instanceof SassColour) {
|
385
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
386
|
+
}
|
387
|
+
else {
|
388
|
+
$this->red = $this->getRed() - $other->getRed();
|
389
|
+
$this->green = $this->getGreen() - $other->getGreen();
|
390
|
+
$this->blue = $this->getBlue() - $other->getBlue();
|
391
|
+
}
|
392
|
+
return $this;
|
393
|
+
}
|
394
|
+
|
395
|
+
/**
|
396
|
+
* Colour multiplication
|
397
|
+
* @param mixed SassColour|SassNumber value to multiply by
|
398
|
+
* @return sassColour the colour result
|
399
|
+
*/
|
400
|
+
public function op_times($other) {
|
401
|
+
if ($other instanceof SassNumber) {
|
402
|
+
if (!$other->isUnitless()) {
|
403
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
404
|
+
}
|
405
|
+
$this->red = $this->getRed() * $other->value;
|
406
|
+
$this->green = $this->getGreen() * $other->value;
|
407
|
+
$this->blue = $this->getBlue() * $other->value;
|
408
|
+
}
|
409
|
+
elseif (!$other instanceof SassColour) {
|
410
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
411
|
+
}
|
412
|
+
else {
|
413
|
+
$this->red = $this->getRed() * $other->getRed();
|
414
|
+
$this->green = $this->getGreen() * $other->getGreen();
|
415
|
+
$this->blue = $this->getBlue() * $other->getBlue();
|
416
|
+
}
|
417
|
+
return $this;
|
418
|
+
}
|
419
|
+
|
420
|
+
/**
|
421
|
+
* Colour division
|
422
|
+
* @param mixed value (SassColour or SassNumber) to divide by
|
423
|
+
* @return sassColour the colour result
|
424
|
+
*/
|
425
|
+
public function op_div($other) {
|
426
|
+
if ($other instanceof SassNumber) {
|
427
|
+
if (!$other->isUnitless()) {
|
428
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
429
|
+
}
|
430
|
+
$this->red = $this->getRed() / $other->value;
|
431
|
+
$this->green = $this->getGreen() / $other->value;
|
432
|
+
$this->blue = $this->getBlue() / $other->value;
|
433
|
+
}
|
434
|
+
elseif (!$other instanceof SassColour) {
|
435
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
436
|
+
}
|
437
|
+
else {
|
438
|
+
$this->red = $this->getRed() / $other->getRed();
|
439
|
+
$this->green = $this->getGreen() / $other->getGreen();
|
440
|
+
$this->blue = $this->getBlue() / $other->getBlue();
|
441
|
+
}
|
442
|
+
return $this;
|
443
|
+
}
|
444
|
+
|
445
|
+
/**
|
446
|
+
* Colour modulus
|
447
|
+
* @param mixed value (SassColour or SassNumber) to divide by
|
448
|
+
* @return sassColour the colour result
|
449
|
+
*/
|
450
|
+
public function op_modulo($other) {
|
451
|
+
if ($other instanceof SassNumber) {
|
452
|
+
if (!$other->isUnitless()) {
|
453
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
454
|
+
}
|
455
|
+
$this->red = $this->getRed() % $other->value;
|
456
|
+
$this->green = $this->getGreen() % $other->value;
|
457
|
+
$this->blue = $this->getBlue() % $other->value;
|
458
|
+
}
|
459
|
+
elseif (!$other instanceof SassColour) {
|
460
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
461
|
+
}
|
462
|
+
else {
|
463
|
+
$this->red = $this->getRed() % $other->getRed();
|
464
|
+
$this->green = $this->getGreen() % $other->getGreen();
|
465
|
+
$this->blue = $this->getBlue() % $other->getBlue();
|
466
|
+
}
|
467
|
+
return $this;
|
468
|
+
}
|
469
|
+
|
470
|
+
/**
|
471
|
+
* Colour bitwise AND
|
472
|
+
* @param mixed value (SassColour or SassNumber) to bitwise AND with
|
473
|
+
* @return sassColour the colour result
|
474
|
+
*/
|
475
|
+
public function op_bw_and($other) {
|
476
|
+
if ($other instanceof SassNumber) {
|
477
|
+
if (!$other->isUnitless()) {
|
478
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
479
|
+
}
|
480
|
+
$this->red = $this->getRed() & $other->value;
|
481
|
+
$this->green = $this->getGreen() & $other->value;
|
482
|
+
$this->blue = $this->getBlue() & $other->value;
|
483
|
+
}
|
484
|
+
elseif (!$other instanceof SassColour) {
|
485
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
486
|
+
}
|
487
|
+
else {
|
488
|
+
$this->red = $this->getRed() & $other->getRed();
|
489
|
+
$this->green = $this->getGreen() & $other->getGreen();
|
490
|
+
$this->blue = $this->getBlue() & $other->getBlue();
|
491
|
+
}
|
492
|
+
return $this;
|
493
|
+
}
|
494
|
+
|
495
|
+
/**
|
496
|
+
* Colour bitwise OR
|
497
|
+
* @param mixed value (SassColour or SassNumber) to bitwise OR with
|
498
|
+
* @return sassColour the colour result
|
499
|
+
*/
|
500
|
+
public function op_bw_or($other) {
|
501
|
+
if ($other instanceof SassNumber) {
|
502
|
+
if (!$other->isUnitless()) {
|
503
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
504
|
+
}
|
505
|
+
$this->red = $this->getRed() | $other->value;
|
506
|
+
$this->green = $this->getGreen() | $other->value;
|
507
|
+
$this->blue = $this->getBlue() | $other->value;
|
508
|
+
}
|
509
|
+
elseif (!$other instanceof SassColour) {
|
510
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
511
|
+
}
|
512
|
+
else {
|
513
|
+
$this->red = $this->getRed() | $other->getRed();
|
514
|
+
$this->green = $this->getGreen() | $other->getGreen();
|
515
|
+
$this->blue = $this->getBlue() | $other->getBlue();
|
516
|
+
}
|
517
|
+
return $this;
|
518
|
+
}
|
519
|
+
|
520
|
+
/**
|
521
|
+
* Colour bitwise XOR
|
522
|
+
* @param mixed value (SassColour or SassNumber) to bitwise XOR with
|
523
|
+
* @return sassColour the colour result
|
524
|
+
*/
|
525
|
+
public function op_bw_xor($other) {
|
526
|
+
if ($other instanceof SassNumber) {
|
527
|
+
if (!$other->isUnitless()) {
|
528
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
529
|
+
}
|
530
|
+
$this->red = $this->getRed() ^ $other->value;
|
531
|
+
$this->green = $this->getGreen() ^ $other->value;
|
532
|
+
$this->blue = $this->getBlue() ^ $other->value;
|
533
|
+
}
|
534
|
+
elseif (!$other instanceof SassColour) {
|
535
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>'Argument', '{type}'=>'SassColour or SassNumber'), SassScriptParser::$context->node);
|
536
|
+
}
|
537
|
+
else {
|
538
|
+
$this->red = $this->getRed() ^ $other->getRed();
|
539
|
+
$this->green = $this->getGreen() ^ $other->getGreen();
|
540
|
+
$this->blue = $this->getBlue() ^ $other->getBlue();
|
541
|
+
}
|
542
|
+
return $this;
|
543
|
+
}
|
544
|
+
|
545
|
+
/**
|
546
|
+
* Colour bitwise NOT
|
547
|
+
* @return sassColour the colour result
|
548
|
+
*/
|
549
|
+
public function op_not() {
|
550
|
+
$this->red = ~$this->getRed();
|
551
|
+
$this->green = ~$this->getGreen();
|
552
|
+
$this->blue = ~$this->getBlue();
|
553
|
+
return $this;
|
554
|
+
}
|
555
|
+
|
556
|
+
/**
|
557
|
+
* Colour bitwise Shift Left
|
558
|
+
* @param sassNumber amount to shift left by
|
559
|
+
* @return sassColour the colour result
|
560
|
+
*/
|
561
|
+
public function op_shiftl($other) {
|
562
|
+
if (!$other instanceof SassNumber ||!$other->isUnitless()) {
|
563
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
564
|
+
}
|
565
|
+
$this->red = $this->getRed() << $other->value;
|
566
|
+
$this->green = $this->getGreen() << $other->value;
|
567
|
+
$this->blue = $this->getBlue() << $other->value;
|
568
|
+
return $this;
|
569
|
+
}
|
570
|
+
|
571
|
+
/**
|
572
|
+
* Colour bitwise Shift Right
|
573
|
+
* @param sassNumber amount to shift right by
|
574
|
+
* @return sassColour the colour result
|
575
|
+
*/
|
576
|
+
public function op_shiftr($other) {
|
577
|
+
if (!$other instanceof SassNumber || !$other->isUnitless()) {
|
578
|
+
throw new SassColourException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
579
|
+
}
|
580
|
+
$this->red = $this->getRed() >> $other->value;
|
581
|
+
$this->green = $this->getGreen() >> $other->value;
|
582
|
+
$this->blue = $this->getBlue() >> $other->value;
|
583
|
+
return $this;
|
584
|
+
}
|
585
|
+
|
586
|
+
/**
|
587
|
+
* Returns a copy of this colour with one or more channels changed.
|
588
|
+
* RGB or HSL attributes may be changed, but not both at once.
|
589
|
+
* @param array attributes to change
|
590
|
+
*/
|
591
|
+
public function with($attributes) {
|
592
|
+
if ($this->assertValid($attributes, false) === 'hsl') {
|
593
|
+
$colour = array_merge(array(
|
594
|
+
'hue' => $this->getHue(),
|
595
|
+
'saturation' => $this->getSaturation(),
|
596
|
+
'lightness' => $this->getLightness(),
|
597
|
+
'alpha' => $this->alpha
|
598
|
+
), $attributes);
|
599
|
+
}
|
600
|
+
else {
|
601
|
+
$colour = array_merge(array(
|
602
|
+
'red' => $this->getRed(),
|
603
|
+
'green' => $this->getGreen(),
|
604
|
+
'blue' => $this->getBlue(),
|
605
|
+
'alpha' => $this->alpha
|
606
|
+
), $attributes);
|
607
|
+
}
|
608
|
+
return new SassColour($colour);
|
609
|
+
}
|
610
|
+
|
611
|
+
/**
|
612
|
+
* Returns the alpha component (opacity) of this colour.
|
613
|
+
* @return float the alpha component (opacity) of this colour.
|
614
|
+
*/
|
615
|
+
public function getAlpha() {
|
616
|
+
return $this->alpha;
|
617
|
+
}
|
618
|
+
|
619
|
+
/**
|
620
|
+
* Returns the hue of this colour.
|
621
|
+
* @return float the hue of this colour.
|
622
|
+
*/
|
623
|
+
public function getHue() {
|
624
|
+
if (is_null($this->hue)) {
|
625
|
+
$this->rgb2hsl();
|
626
|
+
}
|
627
|
+
return $this->hue;
|
628
|
+
}
|
629
|
+
|
630
|
+
/**
|
631
|
+
* Returns the saturation of this colour.
|
632
|
+
* @return float the saturation of this colour.
|
633
|
+
*/
|
634
|
+
public function getSaturation() {
|
635
|
+
if (is_null($this->saturation)) {
|
636
|
+
$this->rgb2hsl();
|
637
|
+
}
|
638
|
+
return $this->saturation;
|
639
|
+
}
|
640
|
+
|
641
|
+
/**
|
642
|
+
* Returns the lightness of this colour.
|
643
|
+
* @return float the lightness of this colour.
|
644
|
+
*/
|
645
|
+
public function getLightness() {
|
646
|
+
if (is_null($this->lightness)) {
|
647
|
+
$this->rgb2hsl();
|
648
|
+
}
|
649
|
+
return $this->lightness;
|
650
|
+
}
|
651
|
+
|
652
|
+
/**
|
653
|
+
* Returns the blue component of this colour.
|
654
|
+
* @return integer the blue component of this colour.
|
655
|
+
*/
|
656
|
+
public function getBlue() {
|
657
|
+
if (is_null($this->blue)) {
|
658
|
+
$this->hsl2rgb();
|
659
|
+
}
|
660
|
+
$component = round(abs($this->blue));
|
661
|
+
return ($component > 255 ? $component % 255 : $component);
|
662
|
+
}
|
663
|
+
|
664
|
+
/**
|
665
|
+
* Returns the green component of this colour.
|
666
|
+
* @return integer the green component of this colour.
|
667
|
+
*/
|
668
|
+
public function getGreen() {
|
669
|
+
if (is_null($this->green)) {
|
670
|
+
$this->hsl2rgb();
|
671
|
+
}
|
672
|
+
$component = round(abs($this->green));
|
673
|
+
return ($component > 255 ? $component % 255 : $component);
|
674
|
+
}
|
675
|
+
|
676
|
+
/**
|
677
|
+
* Returns the red component of this colour.
|
678
|
+
* @return integer the red component of this colour.
|
679
|
+
*/
|
680
|
+
public function getRed() {
|
681
|
+
if (is_null($this->red)) {
|
682
|
+
$this->hsl2rgb();
|
683
|
+
}
|
684
|
+
$component = round(abs($this->red));
|
685
|
+
return ($component > 255 ? $component % 255 : $component);
|
686
|
+
}
|
687
|
+
|
688
|
+
/**
|
689
|
+
* Returns an array with the RGB components of this colour.
|
690
|
+
* @return array the RGB components of this colour
|
691
|
+
*/
|
692
|
+
public function getRgb() {
|
693
|
+
return array($this->red, $this->green, $this->blue);
|
694
|
+
}
|
695
|
+
|
696
|
+
/**
|
697
|
+
* Returns an array with the RGB and alpha components of this colour.
|
698
|
+
* @return array the RGB and alpha components of this colour
|
699
|
+
*/
|
700
|
+
public function getRgba() {
|
701
|
+
return array($this->getRed(), $this->getGreen(), $this->getBlue(), $this->alpha);
|
702
|
+
}
|
703
|
+
|
704
|
+
/**
|
705
|
+
* Returns an array with the HSL components of this colour.
|
706
|
+
* @return array the HSL components of this colour
|
707
|
+
*/
|
708
|
+
public function getHsl() {
|
709
|
+
return array($this->getHue(), $this->getSaturation(), $this->getLightness());
|
710
|
+
}
|
711
|
+
|
712
|
+
/**
|
713
|
+
* Returns an array with the HSL and alpha components of this colour.
|
714
|
+
* @return array the HSL and alpha components of this colour
|
715
|
+
*/
|
716
|
+
public function getHsla() {
|
717
|
+
return array($this->getHue(), $this->getSaturation(), $this->getLightness(), $this->alpha);
|
718
|
+
}
|
719
|
+
|
720
|
+
/**
|
721
|
+
* Returns the value of this colour.
|
722
|
+
* @return array the colour
|
723
|
+
* @deprecated
|
724
|
+
*/
|
725
|
+
public function getValue() {
|
726
|
+
return $this->rgb;
|
727
|
+
}
|
728
|
+
|
729
|
+
/**
|
730
|
+
* Returns whether this colour object is translucent; that is, whether the alpha channel is non-1.
|
731
|
+
* @return boolean true if this colour is translucent, false if not
|
732
|
+
*/
|
733
|
+
public function isTranslucent() {
|
734
|
+
return $this->alpha < 1;
|
735
|
+
}
|
736
|
+
|
737
|
+
/**
|
738
|
+
* Converts the colour to a string.
|
739
|
+
* @param boolean whether to use CSS3 SVG1.0 colour names
|
740
|
+
* @return string the colour as a named colour, rgba(r,g,g,a) or #rrggbb
|
741
|
+
*/
|
742
|
+
public function toString($css3 = false) {
|
743
|
+
$rgba = $this->rgba;
|
744
|
+
|
745
|
+
if ($rgba[3] == 0) {
|
746
|
+
return 'transparent';
|
747
|
+
}
|
748
|
+
elseif ($rgba[3] < 1) {
|
749
|
+
return sprintf('rgba(%d,%d,%d,%1.2f)', $rgba[0], $rgba[1], $rgba[2], $rgba[3]);
|
750
|
+
}
|
751
|
+
else {
|
752
|
+
$colour = sprintf('#%02x%02x%02x', $rgba[0], $rgba[1], $rgba[2]);
|
753
|
+
}
|
754
|
+
if ($css3) {
|
755
|
+
|
756
|
+
if (empty(self::$_svgColours)) {
|
757
|
+
self::$_svgColours = array_flip(self::$svgColours);
|
758
|
+
}
|
759
|
+
return (array_key_exists($colour, self::$svgColours) ?
|
760
|
+
self::$_svgColours[$colour] : $colour);
|
761
|
+
}
|
762
|
+
else {
|
763
|
+
return (array_key_exists($colour, self::$_html4Colours) ?
|
764
|
+
self::$_html4Colours[$colour] : $colour);
|
765
|
+
}
|
766
|
+
}
|
767
|
+
|
768
|
+
/**
|
769
|
+
* Converts from HSL to RGB colourspace
|
770
|
+
* Algorithm from the CSS3 spec: {@link http://www.w3.org/TR/css3-color/#hsl-color}
|
771
|
+
* @uses hue2rgb()
|
772
|
+
*/
|
773
|
+
private function hsl2rgb() {
|
774
|
+
$h = ($this->hue % 360)/360;
|
775
|
+
$s = $this->saturation/100;
|
776
|
+
$l = $this->lightness/100;
|
777
|
+
|
778
|
+
$m1 = ($l <= 0.5 ? $l * ($s + 1) : $l + $s - $l * $s);
|
779
|
+
$m2 = $l * 2 - $m1;
|
780
|
+
|
781
|
+
$this->red = $this->hue2rgb($m1, $m2, $h + 1/3);
|
782
|
+
$this->green = $this->hue2rgb($m1, $m2, $h);
|
783
|
+
$this->blue = $this->hue2rgb($m1, $m2, $h - 1/3);
|
784
|
+
}
|
785
|
+
|
786
|
+
/**
|
787
|
+
* Converts from hue to RGB colourspace
|
788
|
+
*/
|
789
|
+
private function hue2rgb($m1, $m2, $h) {
|
790
|
+
$h += ($h < 0 ? 1 : ($h > 1 ? -1 : 0));
|
791
|
+
|
792
|
+
if ($h * 6 < 1) {
|
793
|
+
$c = $m2 + ($m1 - $m2) * $h * 6;
|
794
|
+
}
|
795
|
+
elseif ($h * 2 < 1) {
|
796
|
+
$c = $m1;
|
797
|
+
}
|
798
|
+
elseif ($h * 3 < 2) {
|
799
|
+
$c = $m2 + ($m1 - $m2) * (2/3 - $h) * 6;
|
800
|
+
}
|
801
|
+
else {
|
802
|
+
$c = $m2;
|
803
|
+
}
|
804
|
+
return $c * 255;
|
805
|
+
}
|
806
|
+
|
807
|
+
/**
|
808
|
+
* Converts from RGB to HSL colourspace
|
809
|
+
* Algorithm adapted from {@link http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV}
|
810
|
+
*/
|
811
|
+
private function rgb2hsl() {
|
812
|
+
$rgb = array($this->red/255, $this->green/255, $this->blue/255);
|
813
|
+
$max = max($rgb);
|
814
|
+
$min = min($rgb);
|
815
|
+
$c = $max - $min;
|
816
|
+
|
817
|
+
// Lightness
|
818
|
+
$l = ($max + $min)/2;
|
819
|
+
$this->lightness = $l * 100;
|
820
|
+
|
821
|
+
// Saturation
|
822
|
+
$this->saturation = ($c ? ($l <= 0.5 ? $c/(2 * $l) : $c/(2 - 2 * $l)) : 0 ) * 100;
|
823
|
+
|
824
|
+
// Hue
|
825
|
+
switch($max) {
|
826
|
+
case $min:
|
827
|
+
$h = 0;
|
828
|
+
break;
|
829
|
+
case $rgb[0]:
|
830
|
+
$h = (($rgb[1] - $rgb[2])/$c) % 6;
|
831
|
+
break;
|
832
|
+
case $rgb[1]:
|
833
|
+
$h = (($rgb[2] - $rgb[0])/$c) + 2;
|
834
|
+
break;
|
835
|
+
case $rgb[2]:
|
836
|
+
$h = (($rgb[0] - $rgb[1])/$c) + 4;
|
837
|
+
break;
|
838
|
+
}
|
839
|
+
$this->hue = $h * 60;
|
840
|
+
}
|
841
|
+
|
842
|
+
/**
|
843
|
+
* Asserts that the colour space is valid.
|
844
|
+
* Returns the name of the colour space: 'rgb' if red, green, or blue keys given;
|
845
|
+
* 'hsl' if hue, saturation or lightness keys given; null if a non-associative array
|
846
|
+
* @param array the colour to test
|
847
|
+
* @param boolean whether all colour space keys must be given
|
848
|
+
* @return string name of the colour space
|
849
|
+
* @throws SassColourException if mixed colour space keys given or not all
|
850
|
+
* keys for a colour space are required but not given (contructor)
|
851
|
+
*/
|
852
|
+
private function assertValid($colour, $all = true) {
|
853
|
+
if (array_key_exists('red', $colour) || array_key_exists('green', $colour) || array_key_exists('blue', $colour)) {
|
854
|
+
if (array_key_exists('hue', $colour) || array_key_exists('saturation', $colour) || array_key_exists('lightness', $colour)) {
|
855
|
+
throw new SassColourException('SassColour can not have HSL and RGB keys specified', array(), SassScriptParser::$context->node);
|
856
|
+
}
|
857
|
+
if ($all && (!array_key_exists('red', $colour) || !array_key_exists('green', $colour) || !array_key_exists('blue', $colour))) {
|
858
|
+
throw new SassColourException('SassColour must have all {colourSpace} keys specified', array('{colourSpace}'=>'RGB'), SassScriptParser::$context->node);
|
859
|
+
}
|
860
|
+
return 'rgb';
|
861
|
+
}
|
862
|
+
elseif (array_key_exists('hue', $colour) || array_key_exists('saturation', $colour) || array_key_exists('lightness', $colour)) {
|
863
|
+
if ($all && (!array_key_exists('hue', $colour) || !array_key_exists('saturation', $colour) || !array_key_exists('lightness', $colour))) {
|
864
|
+
throw new SassColourException('SassColour must have all {colourSpace} keys specified', array('{colourSpace}'=>'HSL'), SassScriptParser::$context->node);
|
865
|
+
}
|
866
|
+
return 'hsl';
|
867
|
+
}
|
868
|
+
elseif ($all && sizeof($colour) < 3) {
|
869
|
+
throw new SassColourException('SassColour array must have at least 3 elements', array(), SassScriptParser::$context->node);
|
870
|
+
}
|
871
|
+
}
|
872
|
+
|
873
|
+
/**
|
874
|
+
* Returns a value indicating if a token of this type can be matched at
|
875
|
+
* the start of the subject string.
|
876
|
+
* @param string the subject string
|
877
|
+
* @return mixed match at the start of the string or false if no match
|
878
|
+
*/
|
879
|
+
static public function isa($subject) {
|
880
|
+
if (empty(self::$regex)) {
|
881
|
+
self::$regex = str_replace('{CSS_COLOURS}', join('|', array_reverse(array_keys(self::$svgColours))), self::MATCH);
|
882
|
+
}
|
883
|
+
return (preg_match(self::$regex, strtolower($subject), $matches) ?
|
884
|
+
$matches[0] : false);
|
885
|
+
}
|
886
|
+
}
|