78 Commits

Author SHA1 Message Date
Matthias Mullie
86448c21ac Fix recursive relative path resolving
I had to split the action of minification into a separate
method because recursively importing files requires them
to also be minified, and I don't want that one to write
to a file.
2015-03-06 12:01:30 +01:00
Matthias Mullie
0ada1eccaf Make comments-regex quantifiers posessive
Was prone to hit PREG_BACKTRACK_LIMIT_ERROR.
Should also improve performance.

Fixes #42
2015-03-02 17:59:12 +01:00
Matthias Mullie
22dbb726a0 Don't strip double semicolons before )
Fixes #40
2015-02-26 09:07:21 +01:00
Matthias Mullie
ecab1f8d17 Fix PHP5.3 closure scope issue, part 2
I assumed it would be able to access the protected property
because we're in one from the same class, so it know the
business logic.
But we're in a closure which, in PHP5.3, doesn't inherit that
scope (which was exactly what I wanted to solve)

Let's just pass it the array, since I don't want to go making
that property public.
2015-02-26 08:52:59 +01:00
Matthias Mullie
34fe14e224 Fix PHP5.3 closure scope issue 2015-02-26 08:45:22 +01:00
Matthias Mullie
778c63c8eb Don't replace reserved words by property notation
Fixes #41
2015-02-26 08:41:17 +01:00
Matthias Mullie
f50178b9c2 Path resolving code has also been moved to path converter 2015-02-21 13:52:36 +01:00
Matthias Mullie
a0c352781a Remove path conversion code, re-use other project
I've moved the giant relative path conversion code into another project.
That way, this code can be kept cleaner.
2015-02-21 00:27:29 +01:00
Matthias Mullie
4aa0c8872b Everything should extract strings first & goe through move
* Let everything go through move(), even if the file is not being
written elsewhere (it also does some cleanup)
* Reorder minify statements: string/comment parsing should come first
* Update test with url() that makes no sense
* Update same test to escape as intended (double-escape would’ve been needed)
2015-02-20 17:24:53 +01:00
Matthias Mullie
227efa7bf8 Don't touch relative paths if no target path is given
Fixes issue #38
2015-02-20 17:05:08 +01:00
Matthias Mullie
3528c67597 Get rid of any ; before }
Fixes issue #37
2015-02-16 21:12:33 +01:00
Matthias Mullie
434d0125e6 Fix coding standard violations
Thanks, php-cs-fixer
2015-02-12 13:34:50 +01:00
Matthias Mullie
5d1886a2ef Add a newline between scripts being joined
Fixes issue #35
2015-02-06 11:14:06 +01:00
Matthias Mullie
471f982e63 Improve string extraction
Test to check if ending string delimiter is escaped was flawed.
2015-02-03 18:27:30 +01:00
Matthias Mullie
e58caad5b7 Collapse multiple semicolons 2015-02-03 17:45:50 +01:00
Matthias Mullie
f54f58d8b1 Don't strip whitespace after ++ or -- 2015-02-02 19:28:35 -08:00
Matthias Mullie
3acd3c3a9b Don't eat \n following a single-line comment
It may be needed for ASI to kick in
2015-02-02 16:11:52 -08:00
Matthias Mullie
830efeb192 Fix outdated comments
I was one day planning to do this, but dismissed that idea for now.
2015-02-02 16:02:33 -08:00
Matthias Mullie
3e997eb9b3 Don't confuse keywords with keys-of-object
Unless they're preceded/followed by whitespace (which is
already stripped around most operators) or ; or {}, a
keyword is likely not a keyword, but a key of an object.

Fixes issue #33
2015-02-02 15:59:07 -08:00
Matthias Mullie
09c6c5ef72 Shorten booleans: !0 and !1 2015-02-01 12:21:27 -08:00
Matthias Mullie
26271a6c4a Also preserve backtick-encapsulated strings
Backticks can also be used for a string: it's a special
kind of string that allows string interpolation.
2015-01-24 18:24:47 -08:00
Matthias Mullie
8d67825b89 In PHP5.3, closures have no notion of where they're run at
So static:: (just like $this) won't work either.
2015-01-23 09:25:04 -08:00
Matthias Mullie
a803426906 Don't strip zero-less units
em is not only a unit, it's also an element, so it can be
(part of) a selector.
The regex was incomplete as it would be stripping 'em'
occurences even if it's not immediately preceded by 0
(because of the many for a 0 can come in: -0, 0, .0, ...)

Fixes bug #31
2015-01-23 09:15:25 -08:00
Matthias Mullie
8f12edd022 Fix propertyNotation forced on simple 1-key arrays
Fixes bug #31
2015-01-23 08:58:52 -08:00
Matthias Mullie
b41b101c68 Slightly speed up property regex
Placeholder can now only be numeric anyway
2015-01-11 17:49:21 +01:00
Matthias Mullie
d09508204e Remove some chars from palceholder text
Should speed up next regexes, a few less chars
2015-01-11 17:41:03 +01:00
Matthias Mullie
e2ee427f26 Fix propertyNotation regex 2015-01-11 17:39:46 +01:00
Matthias Mullie
b45004a092 Don't mess up when there's whitespace between url( and ['"]
Fixed issue #29
2015-01-09 14:41:14 +01:00
Matthias Mullie
2ef177940e Stricter checking when replacing 0-like values 2015-01-09 13:24:48 +01:00
Matthias Mullie
8f38d48a38 Fix propertyNotation
I originally executed this on content where string had not yet been replaced.
Because this could cause false positives and match content inside strings, I
switched it to be executed after strings had been extracted.

However, this means those array key texts were also replaced, by something that
always looks like a valid variable. I've now moved that check to match the
extracted value, which we'll be replacing.
2015-01-09 11:19:24 +01:00
Matthias Mullie
620f98fd09 Fix issue 26 2015-01-07 12:13:43 +01:00
Matthias Mullie
e1cda93bfa Make property notation safe - can't replace occurrences in strings now 2014-12-31 16:33:52 +01:00
Matthias Mullie
9c160601ad Replaces all occurrences of array['key'] by array.key 2014-12-31 16:07:08 +01:00
Matthias Mullie
bbdc79ef65 Drastically speed up replacements by remembering next match offsets 2014-12-30 14:36:25 +01:00
Matthias Mullie
e13143b35c Limit what zeroes can be truncated 2014-12-07 18:35:07 +01:00
Matthias Mullie
609c6f4cfc Don't collapse zeroes in hex color values 2014-12-07 14:02:46 +01:00
Matthias Mullie
e1d4a6e43f Improve zero-value shortening
Fixes issue #24
2014-12-05 14:34:27 +01:00
Matthias Mullie
d1dcea7ef1 Add units that are allowed to be stripped for zero-valies 2014-12-04 20:09:49 +01:00
Matthias Mullie
f5d1bd2c9a Don't strip minus in 0 with digits 2014-12-04 20:08:57 +01:00
Matthias Mullie
2ddefccaf8 Shorten zero-values 2014-11-20 21:42:49 +01:00
Matthias Mullie
06da58831b Whitespace around - and + can't always just be stripped 2014-11-20 21:39:05 +01:00
Matthias Mullie
0fd3218639 Don't assume paths are set
Both from and/or to can be nothing (when fed plain content
instead of reading from a file, or when just returning content
instead of writing to new file)

In those cases, realpath() wouldn't make sense and would just
return the `pwd`, converting paths relative to whatever PHP
script is running.
2014-10-30 13:44:20 +01:00
Matthias Mullie
4b5f6d3e17 Handle relative from & to paths in path conversion 2014-10-30 10:43:48 +01:00
Matthias Mullie
5bbd856b02 Improve CSS minifier, add some whitespace rules
Meanwhile also moved to use the same method JS does to
extract strings, which allows us to be more agressive on
stripping whitespace.
2014-10-30 10:16:31 +01:00
Matthias Mullie
610d690b0c Move string extraction to shared minify class
Strings are the same for both CSS & JS.
2014-10-30 09:39:03 +01:00
Matthias Mullie
60631dbdba Don't run the importFiles regex if there's nothing to import 2014-10-29 17:54:21 +01:00
Matthias Mullie
8378037ee4 Add tests for recent issues 2014-10-20 11:08:51 +02:00
Matthias Mullie
362696fff2 Fix @import without specified media
Had to split the regex into 2 separate ones; the possible
@import syntaxes made it impossible to be strict on having
" or ' inside url(), which made it impossible to be strict
on the media.
2014-10-20 10:47:25 +02:00
Matthias Mullie
63b2eb37ee Strip BOM 2014-10-20 10:17:48 +02:00
Matthias Mullie
7b5abfe181 Seperate JS files by ; & more thorough checking for ++ & -- 2014-10-14 11:30:23 +02:00