From 058428e3558441fa724f2416b51d1f6a977acde3 Mon Sep 17 00:00:00 2001 From: salexdv Date: Mon, 28 Sep 2020 22:36:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=20=D1=81=D0=BB=D0=BE=D0=B2=20=D0=B7=D0=B0=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D0=B0.=20=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=81=D0=B8=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D0=BA=D1=81=D0=B8=D1=81=D0=B0=20=D0=B2=20=D1=87?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D0=B8=20=D0=B2=D1=8B=D0=B4=D0=B5=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B2=D1=8B?= =?UTF-8?q?=D1=85=20=D1=81=D0=BB=D0=BE=D0=B2,=20=D0=BA=D0=BE=D0=B3=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=BE=D0=BD=D0=B8=20=D1=82=D0=B0=D0=BA=D0=BE=D0=B2?= =?UTF-8?q?=D1=8B=D0=BC=D0=B8=20=D0=BD=D0=B5=20=D1=8F=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D1=8E=D1=82=D1=81=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bsl_language.js | 71 +++++++++++++++++++++++++++------------------ src/test_query.html | 10 +++++-- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/bsl_language.js b/src/bsl_language.js index 7fcaee2..0e4a7a5 100644 --- a/src/bsl_language.js +++ b/src/bsl_language.js @@ -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'], diff --git a/src/test_query.html b/src/test_query.html index 2fe681c..f4bb50d 100644 --- a/src/test_query.html +++ b/src/test_query.html @@ -32,22 +32,26 @@ ' НДСЗаписиКнигиПродажОбороты.Организация КАК Организация,', ' НДСЗаписиКнигиПродажОбороты.Покупатель КАК Покупатель,', ' НДСЗаписиКнигиПродажОбороты.СчетФактура КАК СчетФактура,', + ' НДСЗаписиКнигиПродажОбороты.СчетФактура.Ссылка КАК Ссылка,', ' НДСЗаписиКнигиПродажОбороты.ВидЦенности КАК ВидЦенности,', ' НДСЗаписиКнигиПродажОбороты.СтавкаНДС КАК СтавкаНДС,', + ' НДСЗаписиКнигиПродажОбороты._ДопРеквизит КАК НачалоПериода,', ' НДСЗаписиКнигиПродажОбороты.ДатаОплаты КАК ДатаОплаты,', ' НДСЗаписиКнигиПродажОбороты.ДокументОплаты КАК ДокументОплаты,', ' НДСЗаписиКнигиПродажОбороты.Событие КАК Событие,', ' НДСЗаписиКнигиПродажОбороты.СуммаБезНДСОборот * -1 КАК СуммаБезНДССторно,', ' НДСЗаписиКнигиПродажОбороты.НДСОборот * -1 КАК НДССторно,', ' НДСЗаписиКнигиПродажОбороты.СуммаБезНДСОборот КАК СуммаБезНДС,', - ' НДСЗаписиКнигиПродажОбороты.НДСОборот КАК НДС,', + ' НДСЗаписиКнигиПродажОбороты.НДСОборот AS НДС,', ' НДСЗаписиКнигиПродажОбороты.ДоговорКонтрагента КАК ДоговорКонтрагента', ' "ИСТИНА" КАК СтроковыйЛитерал,', ' ВЫБОР', - ' КОГДА НДСЗаписиКнигиПродажОбороты.СчетФактура = ЗНАЧЕНИЕ(Документы.СчетаФактурыВыданные.ПустаяСсылка)', + ' КОГДА НДСЗаписиКнигиПродажОбороты.СчетФактура = ЗНАЧЕНИЕ(Документ.СчетФактураВыданный.ПустаяСсылка)', ' ТОГДА ИСТИНА', ' ИНАЧЕ "ЛОЖЬ"', - ' КОНЕЦ КАК ПолеСВыбором', + ' КОНЕЦ КАК ПолеСВыбором,', + ' Ссылка.ДоговорКонтрагента КАК ДоговорКонтрагента', + ' НДСЗаписиКнигиПродажОбороты.НДСОборот КАК Выразить', 'ИЗ', ' РегистрНакопления.НДСЗаписиКнигиПродаж.Обороты(', ' &НачалоПериода,',