*/ class SyntaxExtension extends \Twig_Extension { public function getFilters() { return array( 'format_sql' => new \Twig_Filter_Method($this, 'formatSQL', array('is_safe' => array('html'))), ); } public function getName() { return 'propel_syntax_extension'; } public function formatSQL($sql) { // list of keywords to prepend a newline in output $newlines = array( 'FROM', '(((FULL|LEFT|RIGHT)? ?(OUTER|INNER)?|CROSS|NATURAL)? JOIN)', 'VALUES', 'WHERE', 'ORDER BY', 'GROUP BY', 'HAVING', 'LIMIT', ); // list of keywords to highlight $keywords = array_merge($newlines, array( // base 'SELECT', 'UPDATE', 'DELETE', 'INSERT', 'REPLACE', 'SET', 'INTO', 'AS', 'DISTINCT', // most used methods 'COUNT', 'AVG', 'MIN', 'MAX', // joins 'ON', 'USING', // where clause '(IS (NOT)?)?NULL', '(NOT )?IN', '(NOT )?I?LIKE', 'AND', 'OR', 'XOR', 'BETWEEN', // order, group, limit .. 'ASC', 'DESC', 'OFFSET', )); $sql = preg_replace(array( '/\b('.implode('|', $newlines).')\b/', '/\b('.implode('|', $keywords).')\b/', '/(\/\*.*\*\/)/', '/(`[^`.]*`)/', '/(([0-9a-zA-Z$_]+)\.([0-9a-zA-Z$_]+))/', ), array( '
\\1', '\\1', '\\1', '\\1', '\\1', ), $sql); return $sql; } }