html5-starter 0.1.3b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. data/LICENSE +3 -0
  2. data/README.md +135 -0
  3. data/VERSION +1 -0
  4. data/lib/app/helpers/html5_boilerplate_helper.rb +47 -0
  5. data/lib/html5-boilerplate.rb +6 -0
  6. data/stylesheets/_html5-boilerplate.scss +15 -0
  7. data/stylesheets/html5-boilerplate/_fonts.scss +36 -0
  8. data/stylesheets/html5-boilerplate/_handheld.scss +8 -0
  9. data/stylesheets/html5-boilerplate/_helpers.scss +25 -0
  10. data/stylesheets/html5-boilerplate/_print.scss +20 -0
  11. data/stylesheets/html5-boilerplate/_reset.scss +50 -0
  12. data/stylesheets/html5-boilerplate/_styles.scss +100 -0
  13. data/templates/project/_flashes.html.haml +4 -0
  14. data/templates/project/_footer.html.haml +2 -0
  15. data/templates/project/_head.html.haml +32 -0
  16. data/templates/project/_header.html.haml +1 -0
  17. data/templates/project/_javascripts.html.haml +38 -0
  18. data/templates/project/_stylesheets.html.haml +8 -0
  19. data/templates/project/application.html.haml +15 -0
  20. data/templates/project/files/404.html +22 -0
  21. data/templates/project/files/apple-touch-icon.png +0 -0
  22. data/templates/project/files/build/build.xml +636 -0
  23. data/templates/project/files/build/buildinfo.properties +5 -0
  24. data/templates/project/files/build/config/build.properties +3 -0
  25. data/templates/project/files/build/config/default.properties +79 -0
  26. data/templates/project/files/build/config/project.properties +49 -0
  27. data/templates/project/files/build/createproject.sh +73 -0
  28. data/templates/project/files/build/tools/ant-contrib-1.0b3.jar +0 -0
  29. data/templates/project/files/build/tools/css-compressor/CSSCompression.php +465 -0
  30. data/templates/project/files/build/tools/css-compressor/changelog.txt +22 -0
  31. data/templates/project/files/build/tools/css-compressor/cli.php +101 -0
  32. data/templates/project/files/build/tools/css-compressor/helpers/hex2short-colors.json +39 -0
  33. data/templates/project/files/build/tools/css-compressor/helpers/hex2short-safe.json +16 -0
  34. data/templates/project/files/build/tools/css-compressor/helpers/long2hex-colors.json +127 -0
  35. data/templates/project/files/build/tools/css-compressor/lib/Cleanup.php +218 -0
  36. data/templates/project/files/build/tools/css-compressor/lib/Color.php +199 -0
  37. data/templates/project/files/build/tools/css-compressor/lib/Combine.php +191 -0
  38. data/templates/project/files/build/tools/css-compressor/lib/Combine/Aural.php +109 -0
  39. data/templates/project/files/build/tools/css-compressor/lib/Combine/Background.php +107 -0
  40. data/templates/project/files/build/tools/css-compressor/lib/Combine/Border.php +98 -0
  41. data/templates/project/files/build/tools/css-compressor/lib/Combine/BorderOutline.php +109 -0
  42. data/templates/project/files/build/tools/css-compressor/lib/Combine/BorderRadius.php +262 -0
  43. data/templates/project/files/build/tools/css-compressor/lib/Combine/Font.php +125 -0
  44. data/templates/project/files/build/tools/css-compressor/lib/Combine/List.php +104 -0
  45. data/templates/project/files/build/tools/css-compressor/lib/Combine/MarginPadding.php +190 -0
  46. data/templates/project/files/build/tools/css-compressor/lib/Compress.php +212 -0
  47. data/templates/project/files/build/tools/css-compressor/lib/Control.php +236 -0
  48. data/templates/project/files/build/tools/css-compressor/lib/Exception.php +32 -0
  49. data/templates/project/files/build/tools/css-compressor/lib/Format.php +187 -0
  50. data/templates/project/files/build/tools/css-compressor/lib/Individuals.php +307 -0
  51. data/templates/project/files/build/tools/css-compressor/lib/Numeric.php +103 -0
  52. data/templates/project/files/build/tools/css-compressor/lib/Option.php +133 -0
  53. data/templates/project/files/build/tools/css-compressor/lib/Organize.php +149 -0
  54. data/templates/project/files/build/tools/css-compressor/lib/Selectors.php +245 -0
  55. data/templates/project/files/build/tools/css-compressor/lib/Setup.php +292 -0
  56. data/templates/project/files/build/tools/css-compressor/lib/Trim.php +213 -0
  57. data/templates/project/files/build/tools/css-compressor/license.txt +21 -0
  58. data/templates/project/files/build/tools/htmlcompressor-0.9.8.jar +0 -0
  59. data/templates/project/files/build/tools/jpegtran.exe +0 -0
  60. data/templates/project/files/build/tools/optipng-0.6.4-exe/LICENSE.txt +21 -0
  61. data/templates/project/files/build/tools/optipng-0.6.4-exe/optipng.exe +0 -0
  62. data/templates/project/files/build/tools/yuicompressor-2.4.2.jar +0 -0
  63. data/templates/project/files/crossdomain.xml +25 -0
  64. data/templates/project/files/favicon.ico +0 -0
  65. data/templates/project/files/gitignore.txt +32 -0
  66. data/templates/project/files/gitignore_placeholder.txt +2 -0
  67. data/templates/project/files/google.yml +22 -0
  68. data/templates/project/files/htaccess +415 -0
  69. data/templates/project/files/humans.txt +43 -0
  70. data/templates/project/files/lighttpd.conf +149 -0
  71. data/templates/project/files/mime.types +80 -0
  72. data/templates/project/files/nginx.conf +108 -0
  73. data/templates/project/files/robots.txt +5 -0
  74. data/templates/project/files/web.config +207 -0
  75. data/templates/project/handheld.scss +8 -0
  76. data/templates/project/index.html +81 -0
  77. data/templates/project/javascripts/libs/dd_belatedpng.js +13 -0
  78. data/templates/project/javascripts/libs/jquery-1.4.4.js +7179 -0
  79. data/templates/project/javascripts/libs/jquery-1.4.4.min.js +167 -0
  80. data/templates/project/javascripts/libs/modernizr-1.6.min.js +30 -0
  81. data/templates/project/javascripts/plugins.js +13 -0
  82. data/templates/project/javascripts/rails.js +156 -0
  83. data/templates/project/javascripts/script.js +26 -0
  84. data/templates/project/manifest.rb +101 -0
  85. data/templates/project/partials/_base.scss +23 -0
  86. data/templates/project/style.scss +70 -0
  87. metadata +171 -0
@@ -0,0 +1,125 @@
1
+ <?php
2
+ /**
3
+ * CSS Compressor [VERSION]
4
+ * [DATE]
5
+ * Corey Hart @ http://www.codenothing.com
6
+ */
7
+
8
+ Class CSSCompression_Combine_Font
9
+ {
10
+ /**
11
+ * Combine Patterns
12
+ *
13
+ * @class Control: Compression Controller
14
+ * @class Combine: Combine Controller
15
+ * @param (regex) rfont: Font matching
16
+ * @param (array) groupings: Set of font combinationals
17
+ */
18
+ private $Control;
19
+ private $Combine;
20
+ private $rfont = "/(^|(?<!\\\);)(font|line)-(style|variant|weight|size|height|family):(.*?)((?<!\\\);|$)/";
21
+ private $groupings = array(
22
+ array( 'font-style', 'font-variant', 'font-weight', 'size/height', 'font-family' ),
23
+ array( 'font-style', 'font-variant', 'font-weight', 'font-size', 'font-family' ),
24
+ array( 'font-style', 'font-variant', 'size/height', 'font-family' ),
25
+ array( 'font-style', 'font-variant', 'font-size', 'font-family' ),
26
+ array( 'font-style', 'font-weight', 'size/height', 'font-family' ),
27
+ array( 'font-style', 'font-weight', 'font-size', 'font-family' ),
28
+ array( 'font-variant', 'font-weight', 'size/height', 'font-family' ),
29
+ array( 'font-variant', 'font-weight', 'font-size', 'font-family' ),
30
+ array( 'font-weight', 'size/height', 'font-family' ),
31
+ array( 'font-weight', 'font-size', 'font-family' ),
32
+ array( 'font-variant', 'size/height', 'font-family' ),
33
+ array( 'font-variant', 'font-size', 'font-family' ),
34
+ array( 'font-style', 'size/height', 'font-family' ),
35
+ array( 'font-style', 'font-size', 'font-family' ),
36
+ array( 'size/height', 'font-family' ),
37
+ array( 'font-size', 'font-family' ),
38
+ );
39
+
40
+ /**
41
+ * Stash a reference to the controller & combiner
42
+ *
43
+ * @param (class) control: CSSCompression Controller
44
+ * @param (class) combine: CSSCompression Combiner
45
+ */
46
+ public function __construct( CSSCompression_Control $control, CSSCompression_Combine $combine ) {
47
+ $this->Control = $control;
48
+ $this->Combine = $combine;
49
+ }
50
+
51
+ /**
52
+ * Combines multiple font-definitions into single definition
53
+ *
54
+ * @param (string) val: Rule Set
55
+ */
56
+ public function combine( $val ) {
57
+ $storage = $this->storage( $val );
58
+
59
+ // Loop through each property check and see if they can be replaced
60
+ foreach ( $this->groupings as $props ) {
61
+ if ( $replace = $this->Combine->searchDefinitions( 'font', $storage, $props ) ) {
62
+ break;
63
+ }
64
+ }
65
+
66
+ // If replacement string found, run it on all declarations
67
+ if ( $replace ) {
68
+ $pos = 0;
69
+ while ( preg_match( $this->rfont, $val, $match, PREG_OFFSET_CAPTURE, $pos ) ) {
70
+ if ( ! isset( $storage['line-height'] ) && stripos( $match[ 0 ][ 0 ], 'line-height') === 0 ) {
71
+ $pos = $match[ 0 ][ 1 ] + strlen( $match[ 0 ][ 0 ] ) - 1;
72
+ continue;
73
+ }
74
+ $colon = strlen( $match[ 1 ][ 0 ] );
75
+ $val = substr_replace( $val, $replace, $match[ 0 ][ 1 ] + $colon, strlen( $match[ 0 ][ 0 ] ) - $colon );
76
+ $pos = $match[ 0 ][ 1 ] + strlen( $replace ) - $colon - 1;
77
+ $replace = '';
78
+ }
79
+ }
80
+
81
+ // Return converted val
82
+ return $val;
83
+ }
84
+
85
+ /**
86
+ * Builds a storage object for iteration
87
+ *
88
+ * @param (string) val: Rule Set
89
+ */
90
+ private function storage( $val ) {
91
+ $storage = array();
92
+
93
+ // Find all possible occurences and build the replacement
94
+ $pos = 0;
95
+ while ( preg_match( $this->rfont, $val, $match, PREG_OFFSET_CAPTURE, $pos ) ) {
96
+ $storage[ $match[ 2 ][ 0 ] . '-' . $match[ 3 ][ 0 ] ] = $match[ 4 ][ 0 ];
97
+ $pos = $match[ 0 ][ 1 ] + strlen( $match[ 0 ][ 0 ] ) - 1;
98
+ }
99
+
100
+ // Combine font-size & line-height if possible
101
+ if ( isset( $storage['font-size'] ) && isset( $storage['line-height'] ) ) {
102
+ $storage['size/height'] = $storage['font-size'] . '/' . $storage['line-height'];
103
+ unset( $storage['font-size'], $storage['line-height'] );
104
+ }
105
+
106
+ return $storage;
107
+ }
108
+
109
+ /**
110
+ * Access to private methods for testing
111
+ *
112
+ * @param (string) method: Method to be called
113
+ * @param (array) args: Array of paramters to be passed in
114
+ */
115
+ public function access( $method, $args ) {
116
+ if ( method_exists( $this, $method ) ) {
117
+ return call_user_func_array( array( $this, $method ), $args );
118
+ }
119
+ else {
120
+ throw new CSSCompression_Exception( "Unknown method in Font Class - " . $method );
121
+ }
122
+ }
123
+ };
124
+
125
+ ?>
@@ -0,0 +1,104 @@
1
+ <?php
2
+ /**
3
+ * CSS Compressor [VERSION]
4
+ * [DATE]
5
+ * Corey Hart @ http://www.codenothing.com
6
+ */
7
+
8
+ Class CSSCompression_Combine_List
9
+ {
10
+ /**
11
+ * Combine Patterns
12
+ *
13
+ * @class Control: Compression Controller
14
+ * @class Combine: Combine Controller
15
+ * @param (regex) rlist: List style matching
16
+ * @param (array) groupings: Group of list combinationals
17
+ */
18
+ private $Control;
19
+ private $Combine;
20
+ private $rlist = "/(^|(?<!\\\);)list-style-(type|position|image):(.*?)((?<!\\\);|$)/";
21
+ private $groupings = array(
22
+ array( 'type', 'position', 'image' ),
23
+ array( 'type', 'position' ),
24
+ array( 'type', 'image' ),
25
+ array( 'position', 'image' ),
26
+ array( 'type' ),
27
+ array( 'position' ),
28
+ array( 'image' ),
29
+ );
30
+
31
+ /**
32
+ * Stash a reference to the controller & combiner
33
+ *
34
+ * @param (class) control: CSSCompression Controller
35
+ * @param (class) combine: CSSCompression Combiner
36
+ */
37
+ public function __construct( CSSCompression_Control $control, CSSCompression_Combine $combine ) {
38
+ $this->Control = $control;
39
+ $this->Combine = $combine;
40
+ }
41
+
42
+ /**
43
+ * Combines multiple list style props into single definition
44
+ *
45
+ * @param (string) val: Rule Set
46
+ */
47
+ public function combine( $val ) {
48
+ // If replacement string found, run it on all declarations
49
+ if ( ( $replace = $this->replace( $val ) ) !== false ) {
50
+ $pos = 0;
51
+ while ( preg_match( $this->rlist, $val, $match, PREG_OFFSET_CAPTURE, $pos ) ) {
52
+ $colon = strlen( $match[ 1 ][ 0 ] );
53
+ $val = substr_replace( $val, $replace, $match[ 0 ][ 1 ] + $colon, strlen( $match[ 0 ][ 0 ] ) - $colon );
54
+ $pos = $match[ 0 ][ 1 ] + strlen( $replace ) - $colon - 1;
55
+ $replace = '';
56
+ }
57
+ }
58
+
59
+ // Return converted val
60
+ return $val;
61
+ }
62
+
63
+ /**
64
+ * Build the replacement string for list props
65
+ *
66
+ * @param (string) val: Rule Set
67
+ */
68
+ private function replace( $val ) {
69
+ $storage = array();
70
+ $pos = 0;
71
+
72
+ // Find all possible occurences and build the replacement
73
+ while ( preg_match( $this->rlist, $val, $match, PREG_OFFSET_CAPTURE, $pos ) ) {
74
+ $storage[ $match[ 2 ][ 0 ] ] = $match[ 3 ][ 0 ];
75
+ $pos = $match[ 0 ][ 1 ] + strlen( $match[ 0 ][ 0 ] ) - 1;
76
+ }
77
+
78
+ // Run background checks and get replacement str
79
+ foreach ( $this->groupings as $props ) {
80
+ if ( $replace = $this->Combine->searchDefinitions( 'list-style', $storage, $props ) ) {
81
+ return $replace;
82
+ }
83
+ }
84
+
85
+ return false;
86
+ }
87
+
88
+ /**
89
+ * Access to private methods for testing
90
+ *
91
+ * @param (string) method: Method to be called
92
+ * @param (array) args: Array of paramters to be passed in
93
+ */
94
+ public function access( $method, $args ) {
95
+ if ( method_exists( $this, $method ) ) {
96
+ return call_user_func_array( array( $this, $method ), $args );
97
+ }
98
+ else {
99
+ throw new CSSCompression_Exception( "Unknown method in List Class - " . $method );
100
+ }
101
+ }
102
+ };
103
+
104
+ ?>
@@ -0,0 +1,190 @@
1
+ <?php
2
+ /**
3
+ * CSS Compressor [VERSION]
4
+ * [DATE]
5
+ * Corey Hart @ http://www.codenothing.com
6
+ */
7
+
8
+ Class CSSCompression_Combine_MarginPadding
9
+ {
10
+ /**
11
+ * Combine Patterns
12
+ *
13
+ * @class Control: Compression Controller
14
+ * @class Combine: Combine Controller
15
+ * @param (regex) rspace: Checks for space without an escape '\' character before it
16
+ * @param (regex) rmp: Margin/Padding matching
17
+ * @param (regex) rmpbase: Margin/Padding base match
18
+ */
19
+ private $Control;
20
+ private $Combine;
21
+ private $rspace = "/(?<!\\\)\s/";
22
+ private $rmp = "/(^|(?<!\\\);)(margin|padding)-(top|right|bottom|left):(.*?)((?<!\\\);|$)/";
23
+ private $rmpbase = "/(^|(?<!\\\);)(margin|padding):(.*?)((?<!\\\);|$)/";
24
+
25
+ /**
26
+ * Stash a reference to the controller & combiner
27
+ *
28
+ * @param (class) control: CSSCompression Controller
29
+ * @param (class) combine: CSSCompression Combiner
30
+ */
31
+ public function __construct( CSSCompression_Control $control, CSSCompression_Combine $combine ) {
32
+ $this->Control = $control;
33
+ $this->Combine = $combine;
34
+ }
35
+
36
+ /**
37
+ * Combines multiple directional properties of
38
+ * margin/padding into single definition.
39
+ *
40
+ * @param (string) val: Rule Set
41
+ */
42
+ public function combine( $val ) {
43
+ $val = $this->expand( $val );
44
+ $storage = $this->storage( $val );
45
+ $pos = 0;
46
+
47
+ // Now rebuild the string replacing all instances of margin/padding if shorthand exists
48
+ while ( preg_match( $this->rmp, $val, $match, PREG_OFFSET_CAPTURE, $pos ) ) {
49
+ $prop = $match[ 2 ][ 0 ];
50
+ if ( isset( $storage[ $prop ] ) ) {
51
+ $colon = strlen( $match[ 1 ][ 0 ] );
52
+ $val = substr_replace( $val, $storage[ $prop ], $match[ 0 ][ 1 ] + $colon, strlen( $match[ 0 ][ 0 ] ) - $colon );
53
+ $pos = $match[ 0 ][ 1 ] + strlen( $storage[ $prop ] ) - $colon - 1;
54
+ $storage[ $prop ] = '';
55
+ }
56
+ else {
57
+ $pos = $match[ 0 ][ 1 ] + strlen( $match[ 0 ][ 0 ] ) - 1;
58
+ }
59
+ }
60
+
61
+ // Return converted val
62
+ return $val;
63
+ }
64
+
65
+ /**
66
+ * Build the storage object for iteration
67
+ *
68
+ * @param (string) val: Rule Set
69
+ */
70
+ private function storage( $val ) {
71
+ $storage = array();
72
+ $pos = 0;
73
+
74
+ // Find all possible occurences of margin/padding and mark their directional value
75
+ while ( preg_match( $this->rmp, $val, $match, PREG_OFFSET_CAPTURE, $pos ) ) {
76
+ if ( ! isset( $storage[ $match[ 2 ][ 0 ] ] ) ) {
77
+ $storage[ $match[ 2 ][ 0 ] ] = array( $match[ 3 ][ 0 ] => $match[ 4 ][ 0 ] );
78
+ }
79
+
80
+ // Override double written properties
81
+ $storage[ $match[ 2 ][ 0 ] ][ $match[ 3 ][ 0 ] ] = $match[ 4 ][ 0 ];
82
+ $pos = $match[ 0 ][ 1 ] + strlen( $match[ 0 ][ 0 ] ) - 1;
83
+ }
84
+
85
+ // Go through each tag for possible combination
86
+ foreach ( $storage as $tag => $arr ) {
87
+ // Only combine if all 4 definitions are found
88
+ if ( count( $arr ) == 4 && ! $this->Combine->checkUncombinables( $arr ) ) {
89
+ // All 4 are the same
90
+ if ( $arr['top'] == $arr['bottom'] && $arr['left'] == $arr['right'] && $arr['top'] == $arr['left'] ) {
91
+ $storage[ $tag ] = "$tag:" . $arr['top'] . ';';
92
+ }
93
+ // Opposites are the same
94
+ else if ( $arr['top'] == $arr['bottom'] && $arr['left'] == $arr['right'] ) {
95
+ $storage[ $tag ] = "$tag:" . $arr['top'] . ' ' . $arr['left'] . ';';
96
+ }
97
+ // 3-point directional
98
+ else if ( $arr['right'] == $arr['left'] ) {
99
+ $storage[ $tag ] = "$tag:" . $arr['top'] . ' ' . $arr['right'] . ' ' . $arr['bottom'] . ';';
100
+ }
101
+ // none are the same, but can still use shorthand notation
102
+ else {
103
+ $storage[ $tag ] = "$tag:" . $arr['top'] . ' ' . $arr['right'] . ' ' . $arr['bottom'] . ' ' . $arr['left'] . ';';
104
+ }
105
+ }
106
+ else {
107
+ unset( $storage[ $tag ] );
108
+ }
109
+ }
110
+
111
+ return $storage;
112
+ }
113
+
114
+ /**
115
+ * Explodes shorthanded margin/padding properties for later combination
116
+ *
117
+ * @param (string) val: Rule set
118
+ */
119
+ private function expand( $val ) {
120
+ $pos = 0;
121
+ while ( preg_match( $this->rmpbase, $val, $match, PREG_OFFSET_CAPTURE, $pos ) ) {
122
+ $replace = '';
123
+ $prop = $match[ 2 ][ 0 ];
124
+ $value = preg_split( $this->rspace, trim( $match[ 3 ][ 0 ] ) );
125
+ $positions = array(
126
+ 'top' => 0,
127
+ 'right' => 0,
128
+ 'bottom' => 0,
129
+ 'left' => 0
130
+ );
131
+
132
+ // Skip uncombinables
133
+ if ( $this->Combine->checkUncombinables( $value ) ) {
134
+ $pos = $match[ 0 ][ 1 ] + strlen( $match[ 0 ][ 0 ] );
135
+ continue;
136
+ }
137
+
138
+ // Each position needs a value
139
+ switch ( count( $value ) ) {
140
+ case 1:
141
+ $positions['top'] = $positions['right'] = $positions['bottom'] = $positions['left'] = $value[ 0 ];
142
+ break;
143
+ case 2:
144
+ $positions['top'] = $positions['bottom'] = $value[ 0 ];
145
+ $positions['right'] = $positions['left'] = $value[ 1 ];
146
+ break;
147
+ case 3:
148
+ $positions['top'] = $value[ 0 ];
149
+ $positions['right'] = $positions['left'] = $value[ 1 ];
150
+ $positions['bottom'] = $value[ 2 ];
151
+ break;
152
+ case 4:
153
+ $positions['top'] = $value[ 0 ];
154
+ $positions['right'] = $value[ 1 ];
155
+ $positions['bottom'] = $value[ 2 ];
156
+ $positions['left'] = $value[ 3 ];
157
+ break;
158
+ default:
159
+ continue;
160
+ }
161
+
162
+ // Build the replacement
163
+ foreach ( $positions as $p => $v ) {
164
+ $replace .= "$prop-$p:$v;";
165
+ }
166
+ $colon = strlen( $match[ 1 ][ 0 ] );
167
+ $val = substr_replace( $val, $replace, $match[ 0 ][ 1 ] + $colon, strlen( $match[ 0 ][ 0 ] ) - $colon );
168
+ $pos = $match[ 0 ][ 1 ] + strlen( $replace ) - $colon - 1;
169
+ }
170
+
171
+ return $val;
172
+ }
173
+
174
+ /**
175
+ * Access to private methods for testing
176
+ *
177
+ * @param (string) method: Method to be called
178
+ * @param (array) args: Array of paramters to be passed in
179
+ */
180
+ public function access( $method, $args ) {
181
+ if ( method_exists( $this, $method ) ) {
182
+ return call_user_func_array( array( $this, $method ), $args );
183
+ }
184
+ else {
185
+ throw new CSSCompression_Exception( "Unknown method in MarginPadding Class - " . $method );
186
+ }
187
+ }
188
+ };
189
+
190
+ ?>
@@ -0,0 +1,212 @@
1
+ <?php
2
+ /**
3
+ * CSS Compressor [VERSION]
4
+ * [DATE]
5
+ * Corey Hart @ http://www.codenothing.com
6
+ */
7
+
8
+ Class CSSCompression_Compress
9
+ {
10
+ /**
11
+ * Trim Patterns
12
+ *
13
+ * @param (array) options: Reference to options
14
+ * @param (array) stats: Reference to stats
15
+ * @param (regex) rsemicolon: Checks for semicolon without an escape '\' character before it
16
+ * @param (regex) rcolon: Checks for colon without an escape '\' character before it
17
+ * @param (regex) rspace: Checks for space without an escape '\' character before it
18
+ */
19
+ private $options = array();
20
+ private $stats = array();
21
+ private $rsemicolon = "/(?<!\\\);/";
22
+ private $rcolon = "/(?<!\\\):/";
23
+ private $rspace = "/(?<!\\\)\s/";
24
+
25
+ /**
26
+ * Other inner classes that get used within compression
27
+ *
28
+ * @class Control: Compression Controller
29
+ * @class Trim: Trim Instance
30
+ * @class Setup: Setup Instance
31
+ * @class Format: Formatting Instance
32
+ * @class Combine: Combine Instance
33
+ * @class Cleanup: Cleanup Instance
34
+ * @class Organize: Organize Instance
35
+ * @class Selectors: Selectors Instance
36
+ * @param (array) others: List of above classes for copying
37
+ */
38
+ private $Control;
39
+ private $Trim;
40
+ private $Setup;
41
+ private $Format;
42
+ private $Combine;
43
+ private $Cleanup;
44
+ private $Organize;
45
+ private $Selectors;
46
+ private $others = array(
47
+ 'Trim',
48
+ 'Setup',
49
+ 'Format',
50
+ 'Combine',
51
+ 'Cleanup',
52
+ 'Organize',
53
+ 'Selectors',
54
+ );
55
+
56
+ /**
57
+ * Stash a reference to the controller on each instantiation
58
+ *
59
+ * @param (class) control: CSSCompression Controller
60
+ */
61
+ public function __construct( CSSCompression_Control $control ) {
62
+ $this->Control = $control;
63
+ $this->options = &$control->Option->options;
64
+ $this->stats = &$control->stats;
65
+
66
+ foreach ( $this->others as $class ) {
67
+ $this->$class = $control->$class;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Centralized function to run css compression.
73
+ *
74
+ * @param (string) css: Stylesheet to compresss
75
+ */
76
+ public function compress( $css ) {
77
+ $setup = $this->setup( $css );
78
+ $setup = $this->rulesets( $setup );
79
+ $css = $this->readability( $setup );
80
+
81
+ // Attach plea to top of page with unknown blocks
82
+ if ( $this->options['add-unknown'] && count( $setup['unknown'] ) ) {
83
+ $css = "/*\nThere are unknown blocks in the sheet, please please please open an issue with your sheet attached to it:\n"
84
+ . "https://github.com/codenothing/css-compressor/issues\n"
85
+ . "Thank You --\n\n"
86
+ . implode( "\n", $setup['unknown'] )
87
+ . "\n*/\n"
88
+ . $css;
89
+ }
90
+
91
+ // Mark final file size
92
+ $this->stats['after']['size'] = strlen( $css = trim( $css ) );
93
+
94
+ // Return compressed css
95
+ return $css;
96
+ }
97
+
98
+ /**
99
+ * Runs css through initial setup handlers
100
+ *
101
+ * @param (string) css: Sheet to compress
102
+ */
103
+ private function setup( $css ) {
104
+ // Initial stats
105
+ $this->stats['before']['time'] = microtime( true );
106
+ $this->stats['before']['size'] = strlen( $css );
107
+
108
+ // Initial trimming
109
+ $css = $this->Trim->trim( $css );
110
+
111
+ // Do a little tokenizing, compress each property individually
112
+ $setup = $this->Setup->setup( $css );
113
+
114
+ // Mark number of selectors pre-combine
115
+ $this->stats['before']['selectors'] = count( $setup['selectors'] );
116
+
117
+ return $setup;
118
+ }
119
+
120
+ /**
121
+ * Focus compressions on each rule set
122
+ *
123
+ * @param (array) setup: Array containing selectors and rule sets
124
+ */
125
+ private function rulesets( $setup ) {
126
+ // Do selector specific compressions
127
+ $this->Selectors->selectors( $setup['selectors'] );
128
+
129
+ // Look at each group of properties as a whole, and compress/combine similiar definitions
130
+ $this->Combine->combine( $setup['selectors'], $setup['details'] );
131
+
132
+ // If order isn't important, run comination functions before and after compressions to catch all instances
133
+ // Be sure to prune before hand for higher chance of matching
134
+ if ( $this->options['organize'] ) {
135
+ $this->Cleanup->cleanup( $setup['selectors'], $setup['details'] );
136
+ $this->Organize->organize( $setup['selectors'], $setup['details'] );
137
+ $this->Combine->combine( $setup['selectors'], $setup['details'] );
138
+ }
139
+
140
+ // Do final maintenace work, remove injected property/values
141
+ $this->Cleanup->cleanup( $setup['selectors'], $setup['details'] );
142
+
143
+ // Run final counters before full cleanup
144
+ $this->finalCount( $setup['selectors'], $setup['details'] );
145
+
146
+ return $setup;
147
+ }
148
+
149
+ /**
150
+ * Runs final counts on selectors and props
151
+ *
152
+ * @param (array) selectors: Selector rules
153
+ * @param (array) details: Rule sets
154
+ */
155
+ private function finalCount( $selectors, $details ) {
156
+ // Selectors and props
157
+ $this->stats['after']['selectors'] = count( $selectors );
158
+ foreach ( $details as $item ) {
159
+ $props = preg_split( $this->rsemicolon, $item );
160
+
161
+ // Make sure count is true
162
+ foreach ( $props as $k => $v ) {
163
+ if ( ! isset( $v ) || $v == '' ) {
164
+ unset( $props[ $k ] );
165
+ }
166
+ }
167
+ $this->stats['after']['props'] += count( $props );
168
+ }
169
+
170
+ // Final count for stats
171
+ $this->stats['after']['time'] = microtime( true );
172
+ }
173
+
174
+ /**
175
+ * Formats the compressed rule sets into a stylesheet
176
+ *
177
+ * @param (array) setup: Array containing selectors and rule sets
178
+ */
179
+ private function readability( $setup ) {
180
+ // Format css to users preference
181
+ $css = $this->Format->readability( $this->options['readability'], $setup['selectors'], $setup['details'] );
182
+
183
+ // Intros
184
+ foreach ( $setup as $value ) {
185
+ if ( $value && is_string( $value ) ) {
186
+ $css = $value . $css;
187
+ }
188
+ }
189
+
190
+ // Remove escapables
191
+ $css = $this->Cleanup->removeInjections( $css );
192
+
193
+ return $css;
194
+ }
195
+
196
+ /**
197
+ * Access to private methods for testing
198
+ *
199
+ * @param (string) method: Method to be called
200
+ * @param (array) args: Array of paramters to be passed in
201
+ */
202
+ public function access( $method, $args ) {
203
+ if ( method_exists( $this, $method ) ) {
204
+ return call_user_func_array( array( $this, $method ), $args );
205
+ }
206
+ else {
207
+ throw new CSSCompression_Exception( "Unknown method in Compress Class - " . $method );
208
+ }
209
+ }
210
+ };
211
+
212
+ ?>