bixbite 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. data/LICENSE +20 -0
  2. data/README.markdown +49 -0
  3. data/VERSION +1 -0
  4. data/bin/bixbite +73 -0
  5. data/lib/bixbite.rb +13 -0
  6. data/lib/bixbite/command.rb +14 -0
  7. data/lib/bixbite/create.rb +76 -0
  8. data/template/Rakefile +25 -0
  9. data/template/assets/bixbite/Rakefile.rb +297 -0
  10. data/template/assets/naturaldocs/NaturalDocs/Config/Languages.txt +286 -0
  11. data/template/assets/naturaldocs/NaturalDocs/Config/Topics.txt +382 -0
  12. data/template/assets/naturaldocs/NaturalDocs/Help/customizinglanguages.html +52 -0
  13. data/template/assets/naturaldocs/NaturalDocs/Help/customizingtopics.html +74 -0
  14. data/template/assets/naturaldocs/NaturalDocs/Help/documenting.html +58 -0
  15. data/template/assets/naturaldocs/NaturalDocs/Help/documenting/reference.html +146 -0
  16. data/template/assets/naturaldocs/NaturalDocs/Help/documenting/walkthrough.html +180 -0
  17. data/template/assets/naturaldocs/NaturalDocs/Help/example/Default.css +528 -0
  18. data/template/assets/naturaldocs/NaturalDocs/Help/example/NaturalDocs.js +204 -0
  19. data/template/assets/naturaldocs/NaturalDocs/Help/examples.css +90 -0
  20. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/background.png +0 -0
  21. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/leftside.png +0 -0
  22. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/logo.png +0 -0
  23. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbody.png +0 -0
  24. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overbodybg.png +0 -0
  25. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overleftmargin.png +0 -0
  26. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenu.png +0 -0
  27. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/overmenubg.png +0 -0
  28. data/template/assets/naturaldocs/NaturalDocs/Help/images/header/rightside.png +0 -0
  29. data/template/assets/naturaldocs/NaturalDocs/Help/images/logo.gif +0 -0
  30. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/about.png +0 -0
  31. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/background.png +0 -0
  32. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomleft.png +0 -0
  33. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/bottomright.png +0 -0
  34. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/community.png +0 -0
  35. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/customizing.png +0 -0
  36. data/template/assets/naturaldocs/NaturalDocs/Help/images/menu/using.png +0 -0
  37. data/template/assets/naturaldocs/NaturalDocs/Help/index.html +9 -0
  38. data/template/assets/naturaldocs/NaturalDocs/Help/javascript/BrowserStyles.js +77 -0
  39. data/template/assets/naturaldocs/NaturalDocs/Help/javascript/PNGHandling.js +72 -0
  40. data/template/assets/naturaldocs/NaturalDocs/Help/keywords.html +38 -0
  41. data/template/assets/naturaldocs/NaturalDocs/Help/languages.html +32 -0
  42. data/template/assets/naturaldocs/NaturalDocs/Help/menu.html +79 -0
  43. data/template/assets/naturaldocs/NaturalDocs/Help/output.html +84 -0
  44. data/template/assets/naturaldocs/NaturalDocs/Help/running.html +40 -0
  45. data/template/assets/naturaldocs/NaturalDocs/Help/styles.css +290 -0
  46. data/template/assets/naturaldocs/NaturalDocs/Help/styles.html +52 -0
  47. data/template/assets/naturaldocs/NaturalDocs/Help/troubleshooting.html +18 -0
  48. data/template/assets/naturaldocs/NaturalDocs/Info/CSSGuide.txt +947 -0
  49. data/template/assets/naturaldocs/NaturalDocs/Info/File Parsing.txt +83 -0
  50. data/template/assets/naturaldocs/NaturalDocs/Info/HTMLTestCases.pm +269 -0
  51. data/template/assets/naturaldocs/NaturalDocs/Info/Languages.txt +107 -0
  52. data/template/assets/naturaldocs/NaturalDocs/Info/NDMarkup.txt +91 -0
  53. data/template/assets/naturaldocs/NaturalDocs/Info/Symbol Management.txt +59 -0
  54. data/template/assets/naturaldocs/NaturalDocs/Info/images/Logo.png +0 -0
  55. data/template/assets/naturaldocs/NaturalDocs/JavaScript/NaturalDocs.js +836 -0
  56. data/template/assets/naturaldocs/NaturalDocs/License-GPL.txt +341 -0
  57. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/BinaryFile.pm +294 -0
  58. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder.pm +280 -0
  59. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/Base.pm +348 -0
  60. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/FramedHTML.pm +345 -0
  61. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTML.pm +398 -0
  62. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Builder/HTMLBase.pm +3693 -0
  63. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy.pm +860 -0
  64. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/Class.pm +412 -0
  65. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ClassHierarchy/File.pm +157 -0
  66. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ConfigFile.pm +497 -0
  67. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Constants.pm +165 -0
  68. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/DefineMembers.pm +100 -0
  69. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Error.pm +305 -0
  70. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/File.pm +540 -0
  71. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable.pm +383 -0
  72. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/Reference.pm +44 -0
  73. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ImageReferenceTable/String.pm +110 -0
  74. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages.pm +1475 -0
  75. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/ActionScript.pm +1473 -0
  76. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Ada.pm +38 -0
  77. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced.pm +828 -0
  78. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/Scope.pm +95 -0
  79. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Advanced/ScopeChange.pm +70 -0
  80. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Base.pm +832 -0
  81. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/CSharp.pm +1484 -0
  82. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/PLSQL.pm +319 -0
  83. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Pascal.pm +143 -0
  84. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Perl.pm +1370 -0
  85. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype.pm +92 -0
  86. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Prototype/Parameter.pm +87 -0
  87. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Simple.pm +503 -0
  88. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Languages/Tcl.pm +219 -0
  89. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu.pm +3406 -0
  90. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Menu/Entry.pm +201 -0
  91. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/NDMarkup.pm +76 -0
  92. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser.pm +1331 -0
  93. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/JavaDoc.pm +464 -0
  94. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/Native.pm +1060 -0
  95. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Parser/ParsedTopic.pm +253 -0
  96. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project.pm +1402 -0
  97. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/ImageFile.pm +160 -0
  98. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Project/SourceFile.pm +113 -0
  99. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/ReferenceString.pm +334 -0
  100. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings.pm +1418 -0
  101. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Settings/BuildTarget.pm +66 -0
  102. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB.pm +678 -0
  103. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Extension.pm +84 -0
  104. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/File.pm +129 -0
  105. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/Item.pm +201 -0
  106. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/ItemDefinition.pm +45 -0
  107. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SourceDB/WatchedFileDefinitions.pm +159 -0
  108. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/StatusMessage.pm +102 -0
  109. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolString.pm +212 -0
  110. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable.pm +1984 -0
  111. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/File.pm +186 -0
  112. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/IndexElement.pm +522 -0
  113. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Reference.pm +273 -0
  114. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/ReferenceTarget.pm +97 -0
  115. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/Symbol.pm +428 -0
  116. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/SymbolTable/SymbolDefinition.pm +96 -0
  117. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics.pm +1319 -0
  118. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Topics/Type.pm +151 -0
  119. data/template/assets/naturaldocs/NaturalDocs/Modules/NaturalDocs/Version.pm +384 -0
  120. data/template/assets/naturaldocs/NaturalDocs/NaturalDocs +400 -0
  121. data/template/assets/naturaldocs/NaturalDocs/NaturalDocs.bat +17 -0
  122. data/template/assets/naturaldocs/NaturalDocs/Styles/Default.css +767 -0
  123. data/template/assets/naturaldocs/NaturalDocs/Styles/Roman.css +765 -0
  124. data/template/assets/naturaldocs/NaturalDocs/Styles/Small.css +763 -0
  125. data/template/assets/utilities/pngout +0 -0
  126. data/template/deploy/public_html/.htaccess +0 -0
  127. data/template/documentation/js/.htaccess +0 -0
  128. data/template/src/html/.htaccess +76 -0
  129. data/template/src/html/css/cmn/global.css +96 -0
  130. data/template/src/html/css/cmn/ie.css +15 -0
  131. data/template/src/html/css/cmn/ie6.css +15 -0
  132. data/template/src/html/images/cmn/.htaccess +0 -0
  133. data/template/src/html/images/tmp/.htaccess +0 -0
  134. data/template/src/html/includes/debug.inc +5 -0
  135. data/template/src/html/includes/footer.inc +52 -0
  136. data/template/src/html/includes/header.inc +61 -0
  137. data/template/src/html/includes/html.inc +3 -0
  138. data/template/src/html/includes/namespace.inc +19 -0
  139. data/template/src/html/includes/page.inc +151 -0
  140. data/template/src/html/index.html +35 -0
  141. data/template/src/html/js/cmn/bootstrap.js +74 -0
  142. data/template/src/html/js/cmn/global.js +142 -0
  143. data/template/src/html/js/cmn/lib/LAB.js +348 -0
  144. data/template/src/html/min/.htaccess +4 -0
  145. data/template/src/html/min/MinifyCLI.php +19 -0
  146. data/template/src/html/min/README.txt +132 -0
  147. data/template/src/html/min/builder/_index.js +242 -0
  148. data/template/src/html/min/builder/bm.js +36 -0
  149. data/template/src/html/min/builder/index.php +182 -0
  150. data/template/src/html/min/builder/ocCheck.php +36 -0
  151. data/template/src/html/min/builder/rewriteTest.js +1 -0
  152. data/template/src/html/min/config.php +187 -0
  153. data/template/src/html/min/groupsConfig.php +34 -0
  154. data/template/src/html/min/index.php +66 -0
  155. data/template/src/html/min/lib/FirePHP.php +1370 -0
  156. data/template/src/html/min/lib/HTTP/ConditionalGet.php +348 -0
  157. data/template/src/html/min/lib/HTTP/Encoder.php +326 -0
  158. data/template/src/html/min/lib/JSMin.php +314 -0
  159. data/template/src/html/min/lib/JSMinPlus.php +1872 -0
  160. data/template/src/html/min/lib/Minify.php +532 -0
  161. data/template/src/html/min/lib/Minify/Build.php +103 -0
  162. data/template/src/html/min/lib/Minify/CSS.php +83 -0
  163. data/template/src/html/min/lib/Minify/CSS/Compressor.php +250 -0
  164. data/template/src/html/min/lib/Minify/CSS/UriRewriter.php +270 -0
  165. data/template/src/html/min/lib/Minify/Cache/APC.php +130 -0
  166. data/template/src/html/min/lib/Minify/Cache/File.php +125 -0
  167. data/template/src/html/min/lib/Minify/Cache/Memcache.php +137 -0
  168. data/template/src/html/min/lib/Minify/ClosureCompiler.php +85 -0
  169. data/template/src/html/min/lib/Minify/CommentPreserver.php +90 -0
  170. data/template/src/html/min/lib/Minify/Controller/Base.php +202 -0
  171. data/template/src/html/min/lib/Minify/Controller/Files.php +78 -0
  172. data/template/src/html/min/lib/Minify/Controller/Groups.php +94 -0
  173. data/template/src/html/min/lib/Minify/Controller/MinApp.php +132 -0
  174. data/template/src/html/min/lib/Minify/Controller/Page.php +82 -0
  175. data/template/src/html/min/lib/Minify/Controller/Version1.php +118 -0
  176. data/template/src/html/min/lib/Minify/HTML.php +245 -0
  177. data/template/src/html/min/lib/Minify/ImportProcessor.php +157 -0
  178. data/template/src/html/min/lib/Minify/Lines.php +131 -0
  179. data/template/src/html/min/lib/Minify/Logger.php +45 -0
  180. data/template/src/html/min/lib/Minify/Packer.php +37 -0
  181. data/template/src/html/min/lib/Minify/Source.php +187 -0
  182. data/template/src/html/min/lib/Minify/YUICompressor.php +139 -0
  183. data/template/src/html/min/lib/Solar/Dir.php +199 -0
  184. data/template/src/html/min/lib/closure-compiler.jar +0 -0
  185. data/template/src/html/min/lib/yuicompressor-2.4.2.jar +0 -0
  186. data/template/src/html/min/utils.php +90 -0
  187. data/template/src/templates/css/template.css +7 -0
  188. data/template/src/templates/js/template.js +72 -0
  189. data/template/src/templates/template.html +18 -0
  190. data/template/src/yaml/config.yml +46 -0
  191. data/template/src/yaml/deploy.yml +35 -0
  192. data/test/bixbite_test.rb +7 -0
  193. data/test/test_helper.rb +10 -0
  194. metadata +278 -0
@@ -0,0 +1,130 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_Cache_APC
4
+ * @package Minify
5
+ */
6
+
7
+ /**
8
+ * APC-based cache class for Minify
9
+ *
10
+ * <code>
11
+ * Minify::setCache(new Minify_Cache_APC());
12
+ * </code>
13
+ *
14
+ * @package Minify
15
+ * @author Chris Edwards
16
+ **/
17
+ class Minify_Cache_APC {
18
+
19
+ /**
20
+ * Create a Minify_Cache_APC object, to be passed to
21
+ * Minify::setCache().
22
+ *
23
+ *
24
+ * @param int $expire seconds until expiration (default = 0
25
+ * meaning the item will not get an expiration date)
26
+ *
27
+ * @return null
28
+ */
29
+ public function __construct($expire = 0)
30
+ {
31
+ $this->_exp = $expire;
32
+ }
33
+
34
+ /**
35
+ * Write data to cache.
36
+ *
37
+ * @param string $id cache id
38
+ *
39
+ * @param string $data
40
+ *
41
+ * @return bool success
42
+ */
43
+ public function store($id, $data)
44
+ {
45
+ return apc_store($id, "{$_SERVER['REQUEST_TIME']}|{$data}", $this->_exp);
46
+ }
47
+
48
+ /**
49
+ * Get the size of a cache entry
50
+ *
51
+ * @param string $id cache id
52
+ *
53
+ * @return int size in bytes
54
+ */
55
+ public function getSize($id)
56
+ {
57
+ return $this->_fetch($id)
58
+ ? strlen($this->_data)
59
+ : false;
60
+ }
61
+
62
+ /**
63
+ * Does a valid cache entry exist?
64
+ *
65
+ * @param string $id cache id
66
+ *
67
+ * @param int $srcMtime mtime of the original source file(s)
68
+ *
69
+ * @return bool exists
70
+ */
71
+ public function isValid($id, $srcMtime)
72
+ {
73
+ return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
74
+ }
75
+
76
+ /**
77
+ * Send the cached content to output
78
+ *
79
+ * @param string $id cache id
80
+ */
81
+ public function display($id)
82
+ {
83
+ echo $this->_fetch($id)
84
+ ? $this->_data
85
+ : '';
86
+ }
87
+
88
+ /**
89
+ * Fetch the cached content
90
+ *
91
+ * @param string $id cache id
92
+ *
93
+ * @return string
94
+ */
95
+ public function fetch($id)
96
+ {
97
+ return $this->_fetch($id)
98
+ ? $this->_data
99
+ : '';
100
+ }
101
+
102
+ private $_exp = null;
103
+
104
+ // cache of most recently fetched id
105
+ private $_lm = null;
106
+ private $_data = null;
107
+ private $_id = null;
108
+
109
+ /**
110
+ * Fetch data and timestamp from apc, store in instance
111
+ *
112
+ * @param string $id
113
+ *
114
+ * @return bool success
115
+ */
116
+ private function _fetch($id)
117
+ {
118
+ if ($this->_id === $id) {
119
+ return true;
120
+ }
121
+ $ret = apc_fetch($id);
122
+ if (false === $ret) {
123
+ $this->_id = null;
124
+ return false;
125
+ }
126
+ list($this->_lm, $this->_data) = explode('|', $ret, 2);
127
+ $this->_id = $id;
128
+ return true;
129
+ }
130
+ }
@@ -0,0 +1,125 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_Cache_File
4
+ * @package Minify
5
+ */
6
+
7
+ class Minify_Cache_File {
8
+
9
+ public function __construct($path = '', $fileLocking = false)
10
+ {
11
+ if (! $path) {
12
+ require_once 'Solar/Dir.php';
13
+ $path = rtrim(Solar_Dir::tmp(), DIRECTORY_SEPARATOR);
14
+ }
15
+ $this->_locking = $fileLocking;
16
+ $this->_path = $path;
17
+ }
18
+
19
+ /**
20
+ * Write data to cache.
21
+ *
22
+ * @param string $id cache id (e.g. a filename)
23
+ *
24
+ * @param string $data
25
+ *
26
+ * @return bool success
27
+ */
28
+ public function store($id, $data)
29
+ {
30
+ $flag = $this->_locking
31
+ ? LOCK_EX
32
+ : null;
33
+ if (is_file($this->_path . '/' . $id)) {
34
+ @unlink($this->_path . '/' . $id);
35
+ }
36
+ if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) {
37
+ return false;
38
+ }
39
+ // write control
40
+ if ($data !== $this->fetch($id)) {
41
+ @unlink($file);
42
+ return false;
43
+ }
44
+ return true;
45
+ }
46
+
47
+ /**
48
+ * Get the size of a cache entry
49
+ *
50
+ * @param string $id cache id (e.g. a filename)
51
+ *
52
+ * @return int size in bytes
53
+ */
54
+ public function getSize($id)
55
+ {
56
+ return filesize($this->_path . '/' . $id);
57
+ }
58
+
59
+ /**
60
+ * Does a valid cache entry exist?
61
+ *
62
+ * @param string $id cache id (e.g. a filename)
63
+ *
64
+ * @param int $srcMtime mtime of the original source file(s)
65
+ *
66
+ * @return bool exists
67
+ */
68
+ public function isValid($id, $srcMtime)
69
+ {
70
+ $file = $this->_path . '/' . $id;
71
+ return (is_file($file) && (filemtime($file) >= $srcMtime));
72
+ }
73
+
74
+ /**
75
+ * Send the cached content to output
76
+ *
77
+ * @param string $id cache id (e.g. a filename)
78
+ */
79
+ public function display($id)
80
+ {
81
+ if ($this->_locking) {
82
+ $fp = fopen($this->_path . '/' . $id, 'rb');
83
+ flock($fp, LOCK_SH);
84
+ fpassthru($fp);
85
+ flock($fp, LOCK_UN);
86
+ fclose($fp);
87
+ } else {
88
+ readfile($this->_path . '/' . $id);
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Fetch the cached content
94
+ *
95
+ * @param string $id cache id (e.g. a filename)
96
+ *
97
+ * @return string
98
+ */
99
+ public function fetch($id)
100
+ {
101
+ if ($this->_locking) {
102
+ $fp = fopen($this->_path . '/' . $id, 'rb');
103
+ flock($fp, LOCK_SH);
104
+ $ret = stream_get_contents($fp);
105
+ flock($fp, LOCK_UN);
106
+ fclose($fp);
107
+ return $ret;
108
+ } else {
109
+ return file_get_contents($this->_path . '/' . $id);
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Fetch the cache path used
115
+ *
116
+ * @return string
117
+ */
118
+ public function getPath()
119
+ {
120
+ return $this->_path;
121
+ }
122
+
123
+ private $_path = null;
124
+ private $_locking = null;
125
+ }
@@ -0,0 +1,137 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_Cache_Memcache
4
+ * @package Minify
5
+ */
6
+
7
+ /**
8
+ * Memcache-based cache class for Minify
9
+ *
10
+ * <code>
11
+ * // fall back to disk caching if memcache can't connect
12
+ * $memcache = new Memcache;
13
+ * if ($memcache->connect('localhost', 11211)) {
14
+ * Minify::setCache(new Minify_Cache_Memcache($memcache));
15
+ * } else {
16
+ * Minify::setCache();
17
+ * }
18
+ * </code>
19
+ **/
20
+ class Minify_Cache_Memcache {
21
+
22
+ /**
23
+ * Create a Minify_Cache_Memcache object, to be passed to
24
+ * Minify::setCache().
25
+ *
26
+ * @param Memcache $memcache already-connected instance
27
+ *
28
+ * @param int $expire seconds until expiration (default = 0
29
+ * meaning the item will not get an expiration date)
30
+ *
31
+ * @return null
32
+ */
33
+ public function __construct($memcache, $expire = 0)
34
+ {
35
+ $this->_mc = $memcache;
36
+ $this->_exp = $expire;
37
+ }
38
+
39
+ /**
40
+ * Write data to cache.
41
+ *
42
+ * @param string $id cache id
43
+ *
44
+ * @param string $data
45
+ *
46
+ * @return bool success
47
+ */
48
+ public function store($id, $data)
49
+ {
50
+ return $this->_mc->set($id, "{$_SERVER['REQUEST_TIME']}|{$data}", 0, $this->_exp);
51
+ }
52
+
53
+
54
+ /**
55
+ * Get the size of a cache entry
56
+ *
57
+ * @param string $id cache id
58
+ *
59
+ * @return int size in bytes
60
+ */
61
+ public function getSize($id)
62
+ {
63
+ return $this->_fetch($id)
64
+ ? strlen($this->_data)
65
+ : false;
66
+ }
67
+
68
+ /**
69
+ * Does a valid cache entry exist?
70
+ *
71
+ * @param string $id cache id
72
+ *
73
+ * @param int $srcMtime mtime of the original source file(s)
74
+ *
75
+ * @return bool exists
76
+ */
77
+ public function isValid($id, $srcMtime)
78
+ {
79
+ return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
80
+ }
81
+
82
+ /**
83
+ * Send the cached content to output
84
+ *
85
+ * @param string $id cache id
86
+ */
87
+ public function display($id)
88
+ {
89
+ echo $this->_fetch($id)
90
+ ? $this->_data
91
+ : '';
92
+ }
93
+
94
+ /**
95
+ * Fetch the cached content
96
+ *
97
+ * @param string $id cache id
98
+ *
99
+ * @return string
100
+ */
101
+ public function fetch($id)
102
+ {
103
+ return $this->_fetch($id)
104
+ ? $this->_data
105
+ : '';
106
+ }
107
+
108
+ private $_mc = null;
109
+ private $_exp = null;
110
+
111
+ // cache of most recently fetched id
112
+ private $_lm = null;
113
+ private $_data = null;
114
+ private $_id = null;
115
+
116
+ /**
117
+ * Fetch data and timestamp from memcache, store in instance
118
+ *
119
+ * @param string $id
120
+ *
121
+ * @return bool success
122
+ */
123
+ private function _fetch($id)
124
+ {
125
+ if ($this->_id === $id) {
126
+ return true;
127
+ }
128
+ $ret = $this->_mc->get($id);
129
+ if (false === $ret) {
130
+ $this->_id = null;
131
+ return false;
132
+ }
133
+ list($this->_lm, $this->_data) = explode('|', $ret, 2);
134
+ $this->_id = $id;
135
+ return true;
136
+ }
137
+ }
@@ -0,0 +1,85 @@
1
+ <?php
2
+ /**
3
+ * Class Minify_ClosureCompiler
4
+ * @package Minify
5
+ */
6
+
7
+ /**
8
+ * Compress Javascript using the Google Closure Compiler
9
+ *
10
+ * You must set $jarFile and $tempDir before calling the minify functions.
11
+ * Also, depending on your shell's environment, you may need to specify
12
+ * the full path to java in $javaExecutable or use putenv() to setup the
13
+ * Java environment.
14
+ *
15
+ * <code>
16
+ * Minify_ClosureCompiler::$jarFile = '/path/to/yuicompressor-2.3.5.jar';
17
+ * Minify_ClosureCompiler::$tempDir = '/tmp';
18
+ * $code = Minify_ClosureCompiler::minifyJs(
19
+ * $code
20
+ * ,array('nomunge' => true, 'line-break' => 1000)
21
+ * );
22
+ * </code>
23
+ *
24
+ * @package Minify
25
+ * @author Richard Herrera <rich@doctyper.com>
26
+ */
27
+ class Minify_ClosureCompiler {
28
+
29
+ /**
30
+ * Filepath of the Closure Compiler jar file. This must be set before
31
+ * calling minifyJs()
32
+ *
33
+ * @var string
34
+ */
35
+ public static $jarFile = null;
36
+
37
+ /**
38
+ * Writable temp directory. This must be set before calling minifyJs()
39
+ *
40
+ * @var string
41
+ */
42
+ public static $tempDir = null;
43
+
44
+ /**
45
+ * Filepath of "java" executable (may be needed if not in shell's PATH)
46
+ *
47
+ * @var string
48
+ */
49
+ public static $javaExecutable = 'java';
50
+
51
+ /**
52
+ * Minify a Javascript string
53
+ *
54
+ * @param string $content
55
+ *
56
+ * @param array $options (verbose is ignored)
57
+ *
58
+ * @return string
59
+ */
60
+ public static function minifyJs($content, $options = array())
61
+ {
62
+ self::_prepare();
63
+ if (!($tmpFile = tempnam(self::$tempDir, 'gc_'))) {
64
+ throw new Exception('Minify_ClosureCompiler : could not create temp file.');
65
+ }
66
+ file_put_contents($tmpFile, $content);
67
+ $output = exec(self::_getCmd($options, $tmpFile));
68
+ exec(self::_getCmd($options, $tmpFile), $output);
69
+ unlink($tmpFile);
70
+ return implode("", $output);
71
+ }
72
+
73
+ private static function _getCmd($userOptions, $tmpFile)
74
+ {
75
+ $cmd = self::$javaExecutable . ' -jar ' . escapeshellarg(self::$jarFile);
76
+ return $cmd . ' --js ' . escapeshellarg($tmpFile);
77
+ }
78
+
79
+ private static function _prepare()
80
+ {
81
+ if (!is_file(self::$jarFile) || !is_dir(self::$tempDir) || !is_writable(self::$tempDir)) {
82
+ throw new Exception('Minify_ClosureCompiler : $jarFile and $tempDir must be set.');
83
+ }
84
+ }
85
+ }