1
0
mirror of https://github.com/salexdv/bsl_console.git synced 2025-02-15 13:53:04 +02:00

Расширение ключевых слов запроса. Корректировка синтаксиса в части выделения ключевых слов, когда они таковыми не являются.

This commit is contained in:
salexdv 2020-09-28 22:36:34 +03:00
parent 08213bfc5d
commit 058428e355
2 changed files with 49 additions and 32 deletions

View File

@ -121,19 +121,37 @@ define([], function () {
// escape sequences
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
queryWords: [
'Выбрать', 'Из', 'Как', 'Значение', 'Различные', 'Тип', 'СгруппированоПо',
'Разрешенные', 'Первые', 'Поместить', 'Уничтожить', 'Упорядочить', 'По',
'Итоги', 'Общие', 'Автоупорядочивание', 'Сгруппировать', 'Объединить', 'Все',
'ВЫБРАТЬ', 'РАЗРЕШЕННЫЕ', 'РАЗЛИЧНЫЕ', 'ПЕРВЫЕ', 'КАК', 'ПУСТАЯТАБЛИЦА', 'ПОМЕСТИТЬ',
'ИЗ', 'ВНУТРЕННЕЕ', 'ЛЕВОЕ', 'ВНЕШНЕЕ', 'ПРАВОЕ', 'ПОЛНОЕ', 'СОЕДИНЕНИЕ',
'ГДЕ', 'СГРУППИРОВАТЬ', 'ПО', 'ИМЕЮЩИЕ', 'ОБЪЕДИНИТЬ', 'ВСЕ', 'УПОРЯДОЧИТЬ',
'АВТОУПОРЯДОЧИВАНИЕ', 'ИТОГИ', 'ОБЩИЕ', 'ТОЛЬКО', 'ИЕРАРХИЯ', 'ПЕРИОДАМИ', 'ДЛЯ',
'ИЗМЕНЕНИЯ', 'SELECT', 'ALLOWED', 'DISTINCT', 'TOP', 'AS', 'EMPTYTABLE',
'INTO', 'FROM', 'INNER', 'LEFT', ' OUTER', 'RIGHT', 'FULL',
'JOIN', 'ON', 'WHERE', 'GROUP', 'BY', 'HAVING', 'UNION',
'ALL', 'ORDER', 'AUTOORDER', 'TOTALS', 'OVERALL', 'ONLY', 'HIERARCHY',
'СГРУППИРОВАНОПО', 'GROUPEDBY', 'БУЛЕВО', 'BOOLEAN', 'ВОЗР', 'ASC',
'ГРУППИРУЮЩИМ', 'GROUPING', 'ЗНАЧЕНИЕ', 'VALUE', 'ИНДЕКСИРОВАТЬ', 'INDEX',
'НАБОРАМ', 'SETS', 'ТИП', 'TYPE', 'ТИПЗНАЧЕНИЯ', 'VALUETYPE',
'УБЫВ', 'DESC', 'УНИЧТОЖИТЬ', 'DROP'
],
queryExp: [
'Выбор', 'Когда', 'Тогда', 'Иначе', 'Конец', 'Ложь', 'Истина', 'И', 'ИЛИ', 'НЕ',
'ЕстьNull', 'В', 'Секунда', 'Минута', 'Час', 'День', 'Неделя', 'Месяц',
'Квартал', 'Год', 'Декада', 'Полугодие', 'Подстрока', 'ДеньГода', 'ДеньНедели',
'НачалоПериода', 'КонецПериода', 'ДобавитьКДате', 'РазностьДат', 'Сумма',
'Минимум', 'Максимум', 'Среднее', 'Количество', 'Представление',
'ПредставлениеСсылки', 'ТипЗначения', 'АвтономерЗаписи', 'Подобно', 'ВИерархии',
'Есть', 'Null', 'Ссылка', 'Выразить', 'ДатаВремя',
'Сумма', 'Максимум', 'Минимум',
'АВТОНОМЕРЗАПИСИ', 'RECORDAUTONUMBER', 'В', 'IN', 'ВЫБОР', 'CASE',
'ВЫРАЗИТЬ', 'CAST', 'ГОД', 'YEAR', 'ДАТА', 'DATE', 'ДАТАВРЕМЯ',
'DATETIME', 'ДЕКАДА', 'TENDAYS', 'ДЕНЬ', 'DAY', 'ДЕНЬГОДА',
'DAYOFYEAR', 'ДЕНЬНЕДЕЛИ ', 'WEEKDAY', 'ДОБАВИТЬКДАТЕ', 'DATEADD',
'ЕСТЬ', 'IS', 'ЕСТЬNULL', 'ISNULL', 'И', 'AND', 'ИЕРАРХИИ',
'HIERARCHY', 'ИЛИ', 'OR', 'ИНАЧЕ', 'ELSE', 'ИСТИНА', 'TRUE',
'КВАРТАЛ', 'QUARTER', 'КОЛИЧЕСТВО', 'COUNT', 'КОНЕЦПЕРИОДА',
'ENDOFPERIOD', 'КОНЕЦ', 'END', 'ЛОЖЬ', 'FALSE', 'МАКСИМУМ',
'MAX', 'МЕЖДУ', 'BETWEEN', 'МЕСЯЦ', 'MONTH', 'МИНИМУМ', 'MIN',
'МИНУТА', 'MINUTE', 'НАЧАЛОПЕРИОДА', 'BEGINOFPERIOD', 'НЕ', 'NOT',
'НЕДЕЛЯ', 'WEEK', 'НЕОПРЕДЕЛЕНО', 'UNDEFINED', 'ПОДОБНО', 'LIKE',
'ПОДСТРОКА', 'SUBSTRING', 'ПОЛУГОДИЕ', 'HALFYEAR', 'ПРЕДСТАВЛЕНИЕ',
'PRESENTATION', 'ПРЕДСТАВЛЕНИЕССЫЛКИ', 'REFPRESENTATION',
'РАЗНОСТЬДАТ', 'DATEDIFF ', 'СЕКУНДА', 'SECOND', 'СПЕЦСИМВОЛ',
'ESCAPE', 'СРЕДНЕЕ', 'AVG', 'ССЫЛКА', 'REFS', 'СТРОКА', 'STRING',
'СУММА', 'SUM', 'ТОГДА', 'THEN', 'УБЫВ', 'DESC', 'ЧАС', 'HOUR',
'ЧИСЛО', 'NUMBER'
],
queryOperators: /[=><+\-*\/%;,]+/,
// The main tokenizer for our languages
@ -273,24 +291,17 @@ define([], function () {
defaultToken: '',
tokenPostfix: 'bsl',
ignoreCase: true,
keywords: [
'Выбрать', 'Из', 'Как', 'Значение', 'Различные', 'Тип', 'СгруппированоПо',
'Разрешенные', 'Первые', 'Поместить', 'Уничтожить', 'Упорядочить', 'По',
'Итоги', 'Общие', 'Автоупорядочивание', 'Сгруппировать', 'Объединить', 'Все',
],
expressions: [
'Выбор', 'Когда', 'Тогда', 'Иначе', 'Конец', 'Ложь', 'Истина', 'И', 'ИЛИ', 'НЕ',
'ЕстьNull', 'В', 'Секунда', 'Минута', 'Час', 'День', 'Неделя', 'Месяц',
'Квартал', 'Год', 'Декада', 'Полугодие', 'Подстрока', 'ДеньГода', 'ДеньНедели',
'НачалоПериода', 'КонецПериода', 'ДобавитьКДате', 'РазностьДат', 'Сумма',
'Минимум', 'Максимум', 'Среднее', 'Количество', 'Представление',
'ПредставлениеСсылки', 'ТипЗначения', 'АвтономерЗаписи', 'Подобно', 'ВИерархии',
'Есть', 'Null', 'Ссылка', 'Выразить', 'ДатаВремя',
'Сумма', 'Максимум', 'Минимум',
],
keywords: bsl_language.rules.queryWords,
expressions: bsl_language.rules.queryExp,
as : '\u041A\u0410\u041A',
operators: /[=><+\-*\/%;,]+/,
tokenizer: {
root: [
root: [
[/(как|as\s)(.+)(,?)/, [
{token: 'query.keyword'},
{token: 'query'},
{token: 'query.operator'}
]],
[/[a-zA-Z\u0410-\u044F_][a-zA-Z\u0410-\u044F_0-9]*/, { cases: {
'@keywords': 'query.keyword',
'@expressions': 'query.exp',
@ -298,9 +309,11 @@ define([], function () {
}}],
[/".*"/, 'query.string'],
[/&[a-zA-Z\u0410-\u044F_][a-zA-Z\u0410-\u044F_0-9]*/, 'query.param'],
[/&/, 'query.param'],
[/[()]/, 'query.brackets'],
[/&/, 'query.param'],
[/[()]/, 'query.brackets'],
[/\/\/.*$/, 'comment'],
[/\..*?\s/, 'query'],
[/[^ ]+\.[^ ]+/, 'query'],
[/@operators/, 'query.operator'],
[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/, 'query.float'],
[/[0-9_]+/, 'query.int'],

View File

@ -32,22 +32,26 @@
' НДСЗаписиКнигиПродажОбороты.Организация КАК Организация,',
' НДСЗаписиКнигиПродажОбороты.Покупатель КАК Покупатель,',
' НДСЗаписиКнигиПродажОбороты.СчетФактура КАК СчетФактура,',
' НДСЗаписиКнигиПродажОбороты.СчетФактура.Ссылка КАК Ссылка,',
' НДСЗаписиКнигиПродажОбороты.ВидЦенности КАК ВидЦенности,',
' НДСЗаписиКнигиПродажОбороты.СтавкаНДС КАК СтавкаНДС,',
' НДСЗаписиКнигиПродажОбороты._ДопРеквизит КАК НачалоПериода,',
' НДСЗаписиКнигиПродажОбороты.ДатаОплаты КАК ДатаОплаты,',
' НДСЗаписиКнигиПродажОбороты.ДокументОплаты КАК ДокументОплаты,',
' НДСЗаписиКнигиПродажОбороты.Событие КАК Событие,',
' НДСЗаписиКнигиПродажОбороты.СуммаБезНДСОборот * -1 КАК СуммаБезНДССторно,',
' НДСЗаписиКнигиПродажОбороты.НДСОборот * -1 КАК НДССторно,',
' НДСЗаписиКнигиПродажОбороты.СуммаБезНДСОборот КАК СуммаБезНДС,',
' НДСЗаписиКнигиПродажОбороты.НДСОборот КАК НДС,',
' НДСЗаписиКнигиПродажОбороты.НДСОборот AS НДС,',
' НДСЗаписиКнигиПродажОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента',
' "ИСТИНА" КАК СтроковыйЛитерал,',
' ВЫБОР',
' КОГДА НДСЗаписиКнигиПродажОбороты.СчетФактура = ЗНАЧЕНИЕ(Документы.СчетаФактурыВыданные.ПустаяСсылка)',
' КОГДА НДСЗаписиКнигиПродажОбороты.СчетФактура = ЗНАЧЕНИЕ(Документ.СчетФактураВыданный.ПустаяСсылка)',
' ТОГДА ИСТИНА',
' ИНАЧЕ "ЛОЖЬ"',
' КОНЕЦ КАК ПолеСВыбором',
' КОНЕЦ КАК ПолеСВыбором,',
' Ссылка.ДоговорКонтрагента КАК ДоговорКонтрагента',
' НДСЗаписиКнигиПродажОбороты.НДСОборот КАК Выразить',
'ИЗ',
' РегистрНакопления.НДСЗаписиКнигиПродаж.Обороты(',
' &НачалоПериода,',