mirror of
https://github.com/pierre42100/comunic
synced 2025-07-12 13:02:59 +00:00
First commit
This commit is contained in:
62
3rdparty/luminous/languages/sql.php
vendored
Executable file
62
3rdparty/luminous/languages/sql.php
vendored
Executable file
@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
class LuminousSQLScanner extends LuminousSimpleScanner {
|
||||
public function init() {
|
||||
$this->case_sensitive = false;
|
||||
// $this->remove_stream_filter('oo-syntax');
|
||||
$this->remove_filter('comment-to-doc');
|
||||
$this->remove_filter('constant');
|
||||
include(dirname(__FILE__) . '/include/sql.php');
|
||||
$this->add_identifier_mapping('KEYWORD', $keywords);
|
||||
$this->add_identifier_mapping('TYPE', $types);
|
||||
$this->add_identifier_mapping('VALUE', $values);
|
||||
$this->add_identifier_mapping('OPERATOR', $operators);
|
||||
$this->add_identifier_mapping('FUNCTION', $functions);
|
||||
|
||||
|
||||
$this->add_pattern('IDENT', '/[a-zA-Z_]+\w*/');
|
||||
$this->add_pattern('COMMENT', LuminousTokenPresets::$C_COMMENT_ML);
|
||||
// # is for MySQL.
|
||||
$this->add_pattern('COMMENT', '/(?:\#|--).*/');
|
||||
$this->add_pattern('STRING', LuminousTokenPresets::$SQL_SINGLE_STR_BSLASH);
|
||||
$this->add_pattern('STRING', LuminousTokenPresets::$DOUBLE_STR);
|
||||
$this->add_pattern('STRING', '/ ` (?> [^\\\\`]+ | \\\\. )* (?: `|$)/x');
|
||||
$this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_HEX);
|
||||
$this->add_pattern('NUMERIC', LuminousTokenPresets::$NUM_REAL);
|
||||
|
||||
$this->add_pattern('OPERATOR', '/[¬!%^&*\\-=+~:<>\\|\\/]+/');
|
||||
|
||||
$this->add_pattern('KEYWORD', '/\\?/');
|
||||
}
|
||||
|
||||
public static function guess_language($src, $info) {
|
||||
// we have to be careful not to assign too much weighting to
|
||||
// generic SQL keywords, which will often appear in other languages
|
||||
// when those languages are executing SQL statements
|
||||
//
|
||||
// All in all, SQL is pretty hard to recognise because generally speaking,
|
||||
// an SQL dump will probably contain only a tiny fraction of SQL keywords
|
||||
// with the majority of the text just being data.
|
||||
$p = 0.0;
|
||||
// if we're lucky, the top line will be a comment containing the phrase
|
||||
// 'SQL' or 'dump'
|
||||
if (strpos($info['trimmed'], '--') === 0 && isset($info['lines'][0])
|
||||
&& (
|
||||
stripos($info['lines'][0], 'sql') !== false)
|
||||
|| stripos($info['lines'][0], 'dump' !== false)
|
||||
)
|
||||
$p = 0.5;
|
||||
|
||||
|
||||
foreach(array('SELECT', 'CREATE TABLE', 'INSERT INTO', 'DROP TABLE',
|
||||
'INNER JOIN', 'OUTER JOIN') as $str)
|
||||
{
|
||||
if (strpos($src, $str) !== false) $p += 0.01;
|
||||
}
|
||||
// single line comments --
|
||||
if (preg_match_all('/^--/m', $src, $m) > 5)
|
||||
$p += 0.05;
|
||||
if (preg_match('/VARCHAR\(\d+\)/', $src)) $p += 0.05;
|
||||
return $p;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user