1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?php
- /**
- * Class Minify_CommentPreserver
- * @package Minify
- */
- /**
- * Process a string in pieces preserving C-style comments that begin with "/*!"
- *
- * @package Minify
- * @author Stephen Clay <steve@mrclay.org>
- */
- class Minify_CommentPreserver {
-
- /**
- * String to be prepended to each preserved comment
- *
- * @var string
- */
- public static $prepend = "\n";
-
- /**
- * String to be appended to each preserved comment
- *
- * @var string
- */
- public static $append = "\n";
-
- /**
- * Process a string outside of C-style comments that begin with "/*!"
- *
- * On each non-empty string outside these comments, the given processor
- * function will be called. The comments will be surrounded by
- * Minify_CommentPreserver::$preprend and Minify_CommentPreserver::$append.
- *
- * @param string $content
- * @param callback $processor function
- * @param array $args array of extra arguments to pass to the processor
- * function (default = array())
- * @return string
- */
- public static function process($content, $processor, $args = array())
- {
- $ret = '';
- while (true) {
- list($beforeComment, $comment, $afterComment) = self::_nextComment($content);
- if ('' !== $beforeComment) {
- $callArgs = $args;
- array_unshift($callArgs, $beforeComment);
- $ret .= call_user_func_array($processor, $callArgs);
- }
- if (false === $comment) {
- break;
- }
- $ret .= $comment;
- $content = $afterComment;
- }
- return $ret;
- }
-
- /**
- * Extract comments that YUI Compressor preserves.
- *
- * @param string $in input
- *
- * @return array 3 elements are returned. If a YUI comment is found, the
- * 2nd element is the comment and the 1st and 3rd are the surrounding
- * strings. If no comment is found, the entire string is returned as the
- * 1st element and the other two are false.
- */
- private static function _nextComment($in)
- {
- if (
- false === ($start = strpos($in, '/*!'))
- || false === ($end = strpos($in, '*/', $start + 3))
- ) {
- return array($in, false, false);
- }
- $ret = array(
- substr($in, 0, $start)
- ,self::$prepend . '/*!' . substr($in, $start + 3, $end - $start - 1) . self::$append
- );
- $endChars = (strlen($in) - $end - 2);
- $ret[] = (0 === $endChars)
- ? ''
- : substr($in, -$endChars);
- return $ret;
- }
- }
|