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,503 @@
|
|
1
|
+
<?php
|
2
|
+
/* SVN FILE: $Id: SassNumber.php 118 2010-09-21 09:45:11Z chris.l.yates@gmail.com $ */
|
3
|
+
/**
|
4
|
+
* SassNumber 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
|
+
* SassNumber class.
|
16
|
+
* Provides operations and type testing for Sass numbers.
|
17
|
+
* Units are of the passed value are converted the those of the class value
|
18
|
+
* if it has units. e.g. 2cm + 20mm = 4cm while 2 + 20mm = 22mm.
|
19
|
+
* @package PHamlP
|
20
|
+
* @subpackage Sass.script.literals
|
21
|
+
*/
|
22
|
+
class SassNumber extends SassLiteral {
|
23
|
+
/**
|
24
|
+
* Regx for matching and extracting numbers
|
25
|
+
*/
|
26
|
+
const MATCH = '/^((?:-)?(?:\d*\.)?\d+)(([a-z%]+)(\s*[\*\/]\s*[a-z%]+)*)?/i';
|
27
|
+
const VALUE = 1;
|
28
|
+
const UNITS = 2;
|
29
|
+
/**
|
30
|
+
* The number of decimal digits to round to.
|
31
|
+
* If the units are pixels the result is always
|
32
|
+
* rounded down to the nearest integer.
|
33
|
+
*/
|
34
|
+
const PRECISION = 4;
|
35
|
+
|
36
|
+
/**
|
37
|
+
* @var array Conversion factors for units using inches as the base unit
|
38
|
+
* (only because pt and pc are expressed as fraction of an inch, so makes the
|
39
|
+
* numbers easy to understand).
|
40
|
+
* Conversions are based on the following
|
41
|
+
* in: inches — 1 inch = 2.54 centimeters
|
42
|
+
* cm: centimeters
|
43
|
+
* mm: millimeters
|
44
|
+
* pc: picas — 1 pica = 12 points
|
45
|
+
* pt: points — 1 point = 1/72nd of an inch
|
46
|
+
*/
|
47
|
+
static private $unitConversion = array(
|
48
|
+
'in' => 1,
|
49
|
+
'cm' => 2.54,
|
50
|
+
'mm' => 25.4,
|
51
|
+
'pc' => 6,
|
52
|
+
'pt' => 72
|
53
|
+
);
|
54
|
+
|
55
|
+
/**
|
56
|
+
* @var array numerator units of this number
|
57
|
+
*/
|
58
|
+
private $numeratorUnits = array();
|
59
|
+
|
60
|
+
/**
|
61
|
+
* @var array denominator units of this number
|
62
|
+
*/
|
63
|
+
private $denominatorUnits = array();
|
64
|
+
|
65
|
+
/**
|
66
|
+
* @var boolean whether this number is in an expression or a literal number
|
67
|
+
* Used to determine whether division should take place
|
68
|
+
*/
|
69
|
+
public $inExpression = true;
|
70
|
+
|
71
|
+
/**
|
72
|
+
* class constructor.
|
73
|
+
* Sets the value and units of the number.
|
74
|
+
* @param string number
|
75
|
+
* @return SassNumber
|
76
|
+
*/
|
77
|
+
public function __construct($value) {
|
78
|
+
preg_match(self::MATCH, $value, $matches);
|
79
|
+
$this->value = $matches[self::VALUE];
|
80
|
+
if (!empty($matches[self::UNITS])) {
|
81
|
+
$units = explode('/', $matches[self::UNITS]);
|
82
|
+
$numeratorUnits = $denominatorUnits = array();
|
83
|
+
|
84
|
+
foreach (explode('*', $units[0]) as $unit) {
|
85
|
+
$numeratorUnits[] = trim($unit);
|
86
|
+
}
|
87
|
+
if (isset($units[1])) {
|
88
|
+
foreach (explode('*', $units[1]) as $unit) {
|
89
|
+
$denominatorUnits[] = trim($unit);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
$units = $this->removeCommonUnits($numeratorUnits, $denominatorUnits);
|
93
|
+
$this->numeratorUnits = $units[0];
|
94
|
+
$this->denominatorUnits = $units[1];
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
/**
|
99
|
+
* Adds the value of other to the value of this
|
100
|
+
* @param mixed SassNumber|SassColour: value to add
|
101
|
+
* @return mixed SassNumber if other is a SassNumber or
|
102
|
+
* SassColour if it is a SassColour
|
103
|
+
*/
|
104
|
+
public function op_plus($other) {
|
105
|
+
if ($other instanceof SassColour) {
|
106
|
+
return $other->op_plus($this);
|
107
|
+
}
|
108
|
+
elseif (!$other instanceof SassNumber) {
|
109
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
110
|
+
}
|
111
|
+
else {
|
112
|
+
$other = $this->convert($other);
|
113
|
+
return new SassNumber(($this->value + $other->value).$this->units);
|
114
|
+
}
|
115
|
+
}
|
116
|
+
|
117
|
+
/**
|
118
|
+
* Unary + operator
|
119
|
+
* @return SassNumber the value of this number
|
120
|
+
*/
|
121
|
+
public function op_unary_plus() {
|
122
|
+
return $this;
|
123
|
+
}
|
124
|
+
|
125
|
+
/**
|
126
|
+
* Subtracts the value of other from this value
|
127
|
+
* @param mixed SassNumber|SassColour: value to subtract
|
128
|
+
* @return mixed SassNumber if other is a SassNumber or
|
129
|
+
* SassColour if it is a SassColour
|
130
|
+
*/
|
131
|
+
public function op_minus($other) {
|
132
|
+
if ($other instanceof SassColour) {
|
133
|
+
return $other->op_minus($this);
|
134
|
+
}
|
135
|
+
elseif (!$other instanceof SassNumber) {
|
136
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
137
|
+
}
|
138
|
+
else {
|
139
|
+
$other = $this->convert($other);
|
140
|
+
return new SassNumber(($this->value - $other->value).$this->units);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
|
144
|
+
/**
|
145
|
+
* Unary - operator
|
146
|
+
* @return SassNumber the negative value of this number
|
147
|
+
*/
|
148
|
+
public function op_unary_minus() {
|
149
|
+
return new SassNumber(($this->value * -1).$this->units);
|
150
|
+
}
|
151
|
+
|
152
|
+
/**
|
153
|
+
* Multiplies this value by the value of other
|
154
|
+
* @param mixed SassNumber|SassColour: value to multiply by
|
155
|
+
* @return mixed SassNumber if other is a SassNumber or
|
156
|
+
* SassColour if it is a SassColour
|
157
|
+
*/
|
158
|
+
public function op_times($other) {
|
159
|
+
if ($other instanceof SassColour) {
|
160
|
+
return $other->op_times($this);
|
161
|
+
}
|
162
|
+
elseif (!$other instanceof SassNumber) {
|
163
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
164
|
+
}
|
165
|
+
else {
|
166
|
+
return new SassNumber(($this->value * $other->value).$this->unitString(
|
167
|
+
array_merge($this->numeratorUnits, $other->numeratorUnits),
|
168
|
+
array_merge($this->denominatorUnits, $other->denominatorUnits)
|
169
|
+
));
|
170
|
+
}
|
171
|
+
}
|
172
|
+
|
173
|
+
/**
|
174
|
+
* Divides this value by the value of other
|
175
|
+
* @param mixed SassNumber|SassColour: value to divide by
|
176
|
+
* @return mixed SassNumber if other is a SassNumber or
|
177
|
+
* SassColour if it is a SassColour
|
178
|
+
*/
|
179
|
+
public function op_div($other) {
|
180
|
+
if ($other instanceof SassColour) {
|
181
|
+
return $other->op_div($this);
|
182
|
+
}
|
183
|
+
elseif (!$other instanceof SassNumber) {
|
184
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
185
|
+
}
|
186
|
+
elseif ($this->inExpression || $other->inExpression) {
|
187
|
+
return new SassNumber(($this->value / $other->value).$this->unitString(
|
188
|
+
array_merge($this->numeratorUnits, $other->denominatorUnits),
|
189
|
+
array_merge($this->denominatorUnits, $other->numeratorUnits)
|
190
|
+
));
|
191
|
+
}
|
192
|
+
else {
|
193
|
+
return parent::op_div($other);
|
194
|
+
}
|
195
|
+
}
|
196
|
+
|
197
|
+
/**
|
198
|
+
* The SassScript == operation.
|
199
|
+
* @return SassBoolean SassBoolean object with the value true if the values
|
200
|
+
* of this and other are equal, false if they are not
|
201
|
+
*/
|
202
|
+
public function op_eq($other) {
|
203
|
+
if (!$other instanceof SassNumber) {
|
204
|
+
return new SassBoolean(false);
|
205
|
+
}
|
206
|
+
try {
|
207
|
+
return new SassBoolean($this->value == $this->convert($other)->value);
|
208
|
+
}
|
209
|
+
catch (Exception $e) {
|
210
|
+
return new SassBoolean(false);
|
211
|
+
}
|
212
|
+
}
|
213
|
+
|
214
|
+
/**
|
215
|
+
* The SassScript > operation.
|
216
|
+
* @param sassLiteral the value to compare to this
|
217
|
+
* @return SassBoolean SassBoolean object with the value true if the values
|
218
|
+
* of this is greater than the value of other, false if it is not
|
219
|
+
*/
|
220
|
+
public function op_gt($other) {
|
221
|
+
if (!$other instanceof SassNumber) {
|
222
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
223
|
+
}
|
224
|
+
return new SassBoolean($this->value > $this->convert($other)->value);
|
225
|
+
}
|
226
|
+
|
227
|
+
/**
|
228
|
+
* The SassScript >= operation.
|
229
|
+
* @param sassLiteral the value to compare to this
|
230
|
+
* @return SassBoolean SassBoolean object with the value true if the values
|
231
|
+
* of this is greater than or equal to the value of other, false if it is not
|
232
|
+
*/
|
233
|
+
public function op_gte($other) {
|
234
|
+
if (!$other instanceof SassNumber) {
|
235
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
236
|
+
}
|
237
|
+
return new SassBoolean($this->value >= $this->convert($other)->value);
|
238
|
+
}
|
239
|
+
|
240
|
+
/**
|
241
|
+
* The SassScript < operation.
|
242
|
+
* @param sassLiteral the value to compare to this
|
243
|
+
* @return SassBoolean SassBoolean object with the value true if the values
|
244
|
+
* of this is less than the value of other, false if it is not
|
245
|
+
*/
|
246
|
+
public function op_lt($other) {
|
247
|
+
if (!$other instanceof SassNumber) {
|
248
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
249
|
+
}
|
250
|
+
return new SassBoolean($this->value < $this->convert($other)->value);
|
251
|
+
}
|
252
|
+
|
253
|
+
/**
|
254
|
+
* The SassScript <= operation.
|
255
|
+
* @param sassLiteral the value to compare to this
|
256
|
+
* @return SassBoolean SassBoolean object with the value true if the values
|
257
|
+
* of this is less than or equal to the value of other, false if it is not
|
258
|
+
*/
|
259
|
+
public function op_lte($other) {
|
260
|
+
if (!$other instanceof SassNumber) {
|
261
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'number')), SassScriptParser::$context->node);
|
262
|
+
}
|
263
|
+
return new SassBoolean($this->value <= $this->convert($other)->value);
|
264
|
+
}
|
265
|
+
|
266
|
+
/**
|
267
|
+
* Takes the modulus (remainder) of this value divided by the value of other
|
268
|
+
* @param string value to divide by
|
269
|
+
* @return mixed SassNumber if other is a SassNumber or
|
270
|
+
* SassColour if it is a SassColour
|
271
|
+
*/
|
272
|
+
public function op_modulo($other) {
|
273
|
+
if (!$other instanceof SassNumber || !$other->isUnitless()) {
|
274
|
+
throw new SassNumberException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Number'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
275
|
+
}
|
276
|
+
$this->value %= $this->convert($other)->value;
|
277
|
+
return $this;
|
278
|
+
}
|
279
|
+
|
280
|
+
/**
|
281
|
+
* Converts values and units.
|
282
|
+
* If this is a unitless numeber it will take the units of other; if not
|
283
|
+
* other is coerced to the units of this.
|
284
|
+
* @param SassNumber the other number
|
285
|
+
* @return SassNumber the other number with its value and units coerced if neccessary
|
286
|
+
* @throws SassNumberException if the units are incompatible
|
287
|
+
*/
|
288
|
+
private function convert($other) {
|
289
|
+
if ($this->isUnitless()) {
|
290
|
+
$this->numeratorUnits = $other->numeratorUnits;
|
291
|
+
$this->denominatorUnits = $other->denominatorUnits;
|
292
|
+
}
|
293
|
+
else {
|
294
|
+
$other = $other->coerce($this->numeratorUnits, $this->denominatorUnits);
|
295
|
+
}
|
296
|
+
return $other;
|
297
|
+
}
|
298
|
+
|
299
|
+
/**
|
300
|
+
* Returns the value of this number converted to other units.
|
301
|
+
* The conversion takes into account the relationship between e.g. mm and cm,
|
302
|
+
* as well as between e.g. in and cm.
|
303
|
+
*
|
304
|
+
* If this number is unitless, it will simply return itself with the given units.
|
305
|
+
* @param array $numeratorUnits
|
306
|
+
* @param array $denominatorUnits
|
307
|
+
* @return SassNumber
|
308
|
+
*/
|
309
|
+
public function coerce($numeratorUnits, $denominatorUnits) {
|
310
|
+
return new SassNumber(($this->isUnitless() ?
|
311
|
+
$this->value :
|
312
|
+
$this->value *
|
313
|
+
$this->coercionFactor($this->numeratorUnits, $numeratorUnits) /
|
314
|
+
$this->coercionFactor($this->denominatorUnits, $denominatorUnits)
|
315
|
+
).join(' * ', $numeratorUnits) .
|
316
|
+
(!empty($denominatorUnits) ? ' / ' . join(' * ', $denominatorUnits) : ''));
|
317
|
+
}
|
318
|
+
|
319
|
+
/**
|
320
|
+
* Calculates the corecion factor to apply to the value
|
321
|
+
* @param array units being converted from
|
322
|
+
* @param array units being converted to
|
323
|
+
* @return float the coercion factor to apply
|
324
|
+
*/
|
325
|
+
private function coercionFactor($fromUnits, $toUnits) {
|
326
|
+
$units = $this->removeCommonUnits($fromUnits, $toUnits);
|
327
|
+
$fromUnits = $units[0];
|
328
|
+
$toUnits = $units[1];
|
329
|
+
|
330
|
+
if (sizeof($fromUnits) !== sizeof($toUnits) || !$this->areConvertable(array_merge($fromUnits, $toUnits))) {
|
331
|
+
throw new SassNumberException("Incompatible units: '{from}' and '{to}'", array('{from}'=>join(' * ', $fromUnits), '{to}'=>join(' * ', $toUnits)), SassScriptParser::$context->node);
|
332
|
+
}
|
333
|
+
|
334
|
+
$coercionFactor = 1;
|
335
|
+
foreach ($fromUnits as $i=>$from) {
|
336
|
+
if (array_key_exists($from) && array_key_exists($from)) {
|
337
|
+
$coercionFactor *=
|
338
|
+
self::$unitConversion[$toUnits[$i]] / self::$unitConversion[$from];
|
339
|
+
}
|
340
|
+
else {
|
341
|
+
throw new SassNumberException("Incompatible units: '{from}' and '{to}",
|
342
|
+
array('{from}'=>join(' * ', $fromUnits), '{to}'=>join(' * ', $toUnits)),
|
343
|
+
SassScriptParser::$context->node);
|
344
|
+
}
|
345
|
+
}
|
346
|
+
return $coercionFactor;
|
347
|
+
}
|
348
|
+
|
349
|
+
/**
|
350
|
+
* Returns a value indicating if all the units are capable of being converted
|
351
|
+
* @param array units to test
|
352
|
+
* @return boolean true if all units can be converted, false if not
|
353
|
+
*/
|
354
|
+
private function areConvertable($units) {
|
355
|
+
$convertable = array_keys(self::$unitConversion);
|
356
|
+
foreach ($units as $unit) {
|
357
|
+
if (!in_array($unit, $convertable))
|
358
|
+
return false;
|
359
|
+
}
|
360
|
+
return true;
|
361
|
+
}
|
362
|
+
|
363
|
+
/**
|
364
|
+
* Removes common units from each set.
|
365
|
+
* We don't use array_diff because we want (for eaxmple) mm*mm/mm*cm to
|
366
|
+
* end up as mm/cm.
|
367
|
+
* @param array first set of units
|
368
|
+
* @param array second set of units
|
369
|
+
* @return array both sets of units with common units removed
|
370
|
+
*/
|
371
|
+
private function removeCommonUnits($u1, $u2) {
|
372
|
+
$_u1 = array();
|
373
|
+
while (!empty($u1)) {
|
374
|
+
$u = array_shift($u1);
|
375
|
+
$i = array_search($u, $u2);
|
376
|
+
if ($i !== false) {
|
377
|
+
unset($u2[$i]);
|
378
|
+
}
|
379
|
+
else {
|
380
|
+
$_u1[] = $u;
|
381
|
+
}
|
382
|
+
}
|
383
|
+
return (array($_u1, $u2));
|
384
|
+
}
|
385
|
+
|
386
|
+
/**
|
387
|
+
* Returns a value indicating if this number is unitless.
|
388
|
+
* @return boolean true if this number is unitless, false if not
|
389
|
+
*/
|
390
|
+
public function isUnitless() {
|
391
|
+
return empty($this->numeratorUnits) && empty($this->denominatorUnits);
|
392
|
+
}
|
393
|
+
|
394
|
+
/**
|
395
|
+
* Returns a value indicating if this number has units that can be represented
|
396
|
+
* in CSS.
|
397
|
+
* @return boolean true if this number has units that can be represented in
|
398
|
+
* CSS, false if not
|
399
|
+
*/
|
400
|
+
public function hasLegalUnits() {
|
401
|
+
return (empty($this->numeratorUnits) || count($this->numeratorUnits) === 1) &&
|
402
|
+
empty($this->denominatorUnits);
|
403
|
+
}
|
404
|
+
|
405
|
+
/**
|
406
|
+
* Returns a string representation of the units.
|
407
|
+
* @return string the units
|
408
|
+
*/
|
409
|
+
public function unitString($numeratorUnits, $denominatorUnits) {
|
410
|
+
return join(' * ', $numeratorUnits) .
|
411
|
+
(!empty($denominatorUnits) ? ' / ' . join(' * ', $denominatorUnits) : '');
|
412
|
+
}
|
413
|
+
|
414
|
+
/**
|
415
|
+
* Returns the units of this number.
|
416
|
+
* @return string the units of this number
|
417
|
+
*/
|
418
|
+
public function getUnits() {
|
419
|
+
return $this->unitString($this->numeratorUnits, $this->denominatorUnits);
|
420
|
+
}
|
421
|
+
|
422
|
+
/**
|
423
|
+
* Returns the denominator units of this number.
|
424
|
+
* @return string the denominator units of this number
|
425
|
+
*/
|
426
|
+
public function getDenominatorUnits() {
|
427
|
+
return join(' * ', $this->denominatorUnits);
|
428
|
+
}
|
429
|
+
|
430
|
+
/**
|
431
|
+
* Returns the numerator units of this number.
|
432
|
+
* @return string the numerator units of this number
|
433
|
+
*/
|
434
|
+
public function getNumeratorUnits() {
|
435
|
+
return join(' * ', $this->numeratorUnits);
|
436
|
+
}
|
437
|
+
|
438
|
+
/**
|
439
|
+
* Returns a value indicating if this number can be compared to other.
|
440
|
+
* @return boolean true if this number can be compared to other, false if not
|
441
|
+
*/
|
442
|
+
public function isComparableTo($other) {
|
443
|
+
try {
|
444
|
+
$this->op_plus($other);
|
445
|
+
return true;
|
446
|
+
}
|
447
|
+
catch (Exception $e) {
|
448
|
+
return false;
|
449
|
+
}
|
450
|
+
}
|
451
|
+
|
452
|
+
/**
|
453
|
+
* Returns a value indicating if this number is an integer.
|
454
|
+
* @return boolean true if this number is an integer, false if not
|
455
|
+
*/
|
456
|
+
public function isInt() {
|
457
|
+
return $this->value % 1 === 0;
|
458
|
+
}
|
459
|
+
|
460
|
+
/**
|
461
|
+
* Returns the value of this number.
|
462
|
+
* @return float the value of this number.
|
463
|
+
*/
|
464
|
+
public function getValue() {
|
465
|
+
return $this->value;
|
466
|
+
}
|
467
|
+
|
468
|
+
/**
|
469
|
+
* Returns the integer value.
|
470
|
+
* @return integer the integer value.
|
471
|
+
* @throws SassNumberException if the number is not an integer
|
472
|
+
*/
|
473
|
+
public function toInt() {
|
474
|
+
if (!$this->isInt()) {
|
475
|
+
throw new SassNumberException('Not an integer: {value}', array('{value}'=>$this->value), SassScriptParser::$context->node);
|
476
|
+
}
|
477
|
+
return intval($this->value);
|
478
|
+
}
|
479
|
+
|
480
|
+
/**
|
481
|
+
* Converts the number to a string with it's units if any.
|
482
|
+
* If the units are px the result is rounded down to the nearest integer,
|
483
|
+
* otherwise the result is rounded to the specified precision.
|
484
|
+
* @return string number as a string with it's units if any
|
485
|
+
*/
|
486
|
+
public function toString() {
|
487
|
+
if (!$this->hasLegalUnits()) {
|
488
|
+
throw new SassNumberException('Invalid {what}', array('{what}'=>"CSS units ({$this->units})"), SassScriptParser::$context->node);
|
489
|
+
}
|
490
|
+
return ($this->units == 'px' ? floor($this->value) :
|
491
|
+
round($this->value, self::PRECISION)).$this->units;
|
492
|
+
}
|
493
|
+
|
494
|
+
/**
|
495
|
+
* Returns a value indicating if a token of this type can be matched at
|
496
|
+
* the start of the subject string.
|
497
|
+
* @param string the subject string
|
498
|
+
* @return mixed match at the start of the string or false if no match
|
499
|
+
*/
|
500
|
+
public static function isa($subject) {
|
501
|
+
return (preg_match(self::MATCH, $subject, $matches) ? $matches[0] : false);
|
502
|
+
}
|
503
|
+
}
|
@@ -0,0 +1,106 @@
|
|
1
|
+
<?php
|
2
|
+
/* SVN FILE: $Id: SassString.php 118 2010-09-21 09:45:11Z chris.l.yates@gmail.com $ */
|
3
|
+
/**
|
4
|
+
* SassString 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
|
+
* SassString class.
|
16
|
+
* Provides operations and type testing for Sass strings.
|
17
|
+
* @package PHamlP
|
18
|
+
* @subpackage Sass.script.literals
|
19
|
+
*/
|
20
|
+
class SassString extends SassLiteral {
|
21
|
+
const MATCH = '/^(((["\'])(.*)(\3))|(-[a-zA-Z][^\s]*))/i';
|
22
|
+
const _MATCH = '/^(["\'])(.*?)(\1)?$/'; // Used to match strings such as "Times New Roman",serif
|
23
|
+
const VALUE = 2;
|
24
|
+
const QUOTE = 3;
|
25
|
+
|
26
|
+
/**
|
27
|
+
* @var string string quote type; double or single quotes, or unquoted.
|
28
|
+
*/
|
29
|
+
private $quote;
|
30
|
+
|
31
|
+
/**
|
32
|
+
* class constructor
|
33
|
+
* @param string string
|
34
|
+
* @return SassString
|
35
|
+
*/
|
36
|
+
public function __construct($value) {
|
37
|
+
preg_match(self::_MATCH, $value, $matches);
|
38
|
+
if ((isset($matches[self::QUOTE]))) {
|
39
|
+
$this->quote = $matches[self::QUOTE];
|
40
|
+
$this->value = $matches[self::VALUE];
|
41
|
+
}
|
42
|
+
else {
|
43
|
+
$this->quote = '';
|
44
|
+
$this->value = $value;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* String addition.
|
50
|
+
* Concatenates this and other.
|
51
|
+
* The resulting string will be quoted in the same way as this.
|
52
|
+
* @param sassString string to add to this
|
53
|
+
* @return sassString the string result
|
54
|
+
*/
|
55
|
+
public function op_plus($other) {
|
56
|
+
if (!($other instanceof SassString)) {
|
57
|
+
throw new SassStringException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Value'), '{type}'=>Phamlp::t('sass', 'string')), SassScriptParser::$context->node);
|
58
|
+
}
|
59
|
+
$this->value .= $other->value;
|
60
|
+
return $this;
|
61
|
+
}
|
62
|
+
|
63
|
+
/**
|
64
|
+
* String multiplication.
|
65
|
+
* this is repeated other times
|
66
|
+
* @param sassNumber the number of times to repeat this
|
67
|
+
* @return sassString the string result
|
68
|
+
*/
|
69
|
+
public function op_times($other) {
|
70
|
+
if (!($other instanceof SassNumber) || !$other->isUnitless()) {
|
71
|
+
throw new SassStringException('{what} must be a {type}', array('{what}'=>Phamlp::t('sass', 'Value'), '{type}'=>Phamlp::t('sass', 'unitless number')), SassScriptParser::$context->node);
|
72
|
+
}
|
73
|
+
$this->value = str_repeat($this->value, $other->value);
|
74
|
+
return $this;
|
75
|
+
}
|
76
|
+
|
77
|
+
/**
|
78
|
+
* Returns the value of this string.
|
79
|
+
* @return string the string
|
80
|
+
*/
|
81
|
+
public function getValue() {
|
82
|
+
return $this->value;
|
83
|
+
}
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Returns a string representation of the value.
|
87
|
+
* @return string string representation of the value.
|
88
|
+
*/
|
89
|
+
public function toString() {
|
90
|
+
return $this->quote.$this->value.$this->quote;
|
91
|
+
}
|
92
|
+
|
93
|
+
public function toVar() {
|
94
|
+
return SassScriptParser::$context->getVariable($this->value);
|
95
|
+
}
|
96
|
+
|
97
|
+
/**
|
98
|
+
* Returns a value indicating if a token of this type can be matched at
|
99
|
+
* the start of the subject string.
|
100
|
+
* @param string the subject string
|
101
|
+
* @return mixed match at the start of the string or false if no match
|
102
|
+
*/
|
103
|
+
public static function isa($subject) {
|
104
|
+
return (preg_match(self::MATCH, $subject, $matches) ? $matches[0] : false);
|
105
|
+
}
|
106
|
+
}
|
@@ -0,0 +1,64 @@
|
|
1
|
+
<?php
|
2
|
+
/* SVN FILE: $Id: SassCommentNode.php 49 2010-04-04 10:51:24Z chris.l.yates $ */
|
3
|
+
/**
|
4
|
+
* SassCommentNode 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.tree
|
10
|
+
*/
|
11
|
+
|
12
|
+
/**
|
13
|
+
* SassCommentNode class.
|
14
|
+
* Represents a CSS comment.
|
15
|
+
* @package PHamlP
|
16
|
+
* @subpackage Sass.tree
|
17
|
+
*/
|
18
|
+
class SassCommentNode extends SassNode {
|
19
|
+
const NODE_IDENTIFIER = '/';
|
20
|
+
const MATCH = '%^/\*\s*(.*?)\s*(\*/)?$%s';
|
21
|
+
const COMMENT = 1;
|
22
|
+
|
23
|
+
private $value;
|
24
|
+
|
25
|
+
/**
|
26
|
+
* SassCommentNode constructor.
|
27
|
+
* @param object source token
|
28
|
+
* @return CommentNode
|
29
|
+
*/
|
30
|
+
public function __construct($token) {
|
31
|
+
parent::__construct($token);
|
32
|
+
preg_match(self::MATCH, $token->source, $matches);
|
33
|
+
$this->value = $matches[self::COMMENT];
|
34
|
+
}
|
35
|
+
|
36
|
+
protected function getValue() {
|
37
|
+
return $this->value;
|
38
|
+
}
|
39
|
+
|
40
|
+
/**
|
41
|
+
* Parse this node.
|
42
|
+
* @return array the parsed node - an empty array
|
43
|
+
*/
|
44
|
+
public function parse($context) {
|
45
|
+
return array($this);
|
46
|
+
}
|
47
|
+
|
48
|
+
/**
|
49
|
+
* Render this node.
|
50
|
+
* @return string the rendered node
|
51
|
+
*/
|
52
|
+
public function render() {
|
53
|
+
return $this->renderer->renderComment($this);
|
54
|
+
}
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Returns a value indicating if the token represents this type of node.
|
58
|
+
* @param object token
|
59
|
+
* @return boolean true if the token represents this type of node, false if not
|
60
|
+
*/
|
61
|
+
public static function isa($token) {
|
62
|
+
return $token->source[0] === self::NODE_IDENTIFIER;
|
63
|
+
}
|
64
|
+
}
|