Skip to content

Instantly share code, notes, and snippets.

@kangax
Created November 21, 2008 22:49
Show Gist options
  • Save kangax/27678 to your computer and use it in GitHub Desktop.
Save kangax/27678 to your computer and use it in GitHub Desktop.
/*
transform-list:
wsp* transforms? wsp*
transforms:
transform
| transform comma-wsp+ transforms
transform:
matrix
| translate
| scale
| rotate
| skewX
| skewY
matrix:
"matrix" wsp* "(" wsp*
number comma-wsp
number comma-wsp
number comma-wsp
number comma-wsp
number comma-wsp
number wsp* ")"
translate:
"translate" wsp* "(" wsp* number ( comma-wsp number )? wsp* ")"
scale:
"scale" wsp* "(" wsp* number ( comma-wsp number )? wsp* ")"
rotate:
"rotate" wsp* "(" wsp* number ( comma-wsp number comma-wsp number )? wsp* ")"
skewX:
"skewX" wsp* "(" wsp* number wsp* ")"
skewY:
"skewY" wsp* "(" wsp* number wsp* ")"
number:
sign? integer-constant
| sign? floating-point-constant
comma-wsp:
(wsp+ comma? wsp*) | (comma wsp*)
comma:
","
integer-constant:
digit-sequence
floating-point-constant:
fractional-constant exponent?
| digit-sequence exponent
fractional-constant:
digit-sequence? "." digit-sequence
| digit-sequence "."
exponent:
( "e" | "E" ) sign? digit-sequence
sign:
"+" | "-"
digit-sequence:
digit
| digit digit-sequence
digit:
"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
wsp:
(#x20 | #x9 | #xD | #xA)
*/
(function(){
var wsp = '(\\u0020|\\u0009|\\u000D|\\u000A)';
var digit = '\\d';
var digit_sequence = digit + '*';
var sign = '[-+]';
var exponent = '[eE]' + sign + '?' + digit_sequence;
var fractional_constant =
'(' +
digit_sequence + '?' + '\\.' + digit_sequence +
'|' +
digit_sequence + '\\.' +
')';
var floating_point_constant =
'(' +
fractional_constant + exponent + '?' +
'|' +
digit_sequence + exponent +
')';
var integer_constant = digit_sequence;
var comma = ',';
var comma_wsp =
'(' +
'(' + wsp + '+' + comma + '?' + wsp + '+' + ')' +
'|' +
'(' + comma + wsp + '*' + ')' +
')';
var number =
'(' +
sign + '?' + integer_constant +
'|' +
sign + '?' + floating_point_constant +
')';
var skewY = '(' + 'skewY' + wsp + '*' + '(' + wsp + '*' + number + wsp + '*' + ')' + ')';
var skewX = '(' + 'skewX' + wsp + '*' + '(' + wsp + '*' + number + wsp + '*' + ')' + ')';
var rotate =
'(' +
'rotate' + wsp + '*' +
'(' + wsp + '*' +
number + '(' + comma_wsp + number + comma_wsp + number + ')' + '?' + wsp + '*' +
')' +
')';
var scale =
'(' +
'scale' + wsp + '*' +
'(' + wsp + '*' +
number + '(' + comma_wsp + number + ')?' + wsp + '*' +
')' +
')';
var translate =
'(' +
'translate' + wsp + '*' +
'(' + wsp + '*' +
number + '(' + comma_wsp + number + ')?' + wsp + '*' +
')' +
')';
var matrix =
'(' +
'matrix' + wsp + '*' +
'(' +
wsp + '*' +
number + comma_wsp +
number + comma_wsp +
number + comma_wsp +
number + comma_wsp +
number + comma_wsp +
number +
wsp + '*' +
')' +
')';
var transform =
'(' +
matrix |
translate |
scale |
rotate |
skewX |
skewY
')';
var transforms = '(' + transform + comma_wsp ')'
return new RegExp(transform_list);
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment