From e339d2d7b3f5e23a5fe1bec2bcc1488f6bc509d8 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 1 Oct 2025 12:22:52 +0300 Subject: [PATCH 1/3] Added keywords for query syntax in 1C version 7.x. Added keywords for 1C query syntax. Added metadata to the v8_meta_keywords constant --- src/languages/1c.js | 40 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/src/languages/1c.js b/src/languages/1c.js index ef06c7438a..21f3bf0241 100644 --- a/src/languages/1c.js +++ b/src/languages/1c.js @@ -13,13 +13,25 @@ export default function(hljs) { const v7_keywords = 'далее '; + const v7_query_keywords = + 'ВЫБРАТЬ ИЗ ГДЕ УПОРЯДОЧИТЬ ПО ИТОГИ ПО ОБЩИЕ СГРУППИРОВАТЬ ПО ' + + 'СВЯЗАННЫЙ ЛЕВЫЙ ПРАВЫЙ ВНУТРЕННИЙ ПОЛНЫЙ ОБЪЕДИНЕНИЕ РАЗРЕШЕННЫЕ ' + + 'КАК И НЕ ИЛИ ВЫРАЗИТЬ В КОЛИЧЕСТВО УНИКАЛЬНЫЕ ' + + 'ПЕРВЫЕ ВСЕ НУЛЕВЫЕ НЕНУЛЕВЫЕ ПОМЕТКИУДАЛЕНИЯ АВТОУПОРЯДОЧИВАНИЕ ' + + 'ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ ДНЕЙ '; + // v8 ключевые слова ==> keyword const v8_keywords = 'возврат вызватьисключение выполнить для если и из или иначе иначеесли исключение каждого конецесли ' + 'конецпопытки конеццикла не новый перейти перем по пока попытка прервать продолжить тогда цикл экспорт '; + // ключевые слова синтаксиса запросов + const v8_query_keywords = + 'ВЫБРАТЬ КАК ИЗ ЛЕВОЕ СОЕДИНЕНИЕ ПО ГДЕ РАЗРЕШЕННЫЕ ВЫРАЗИТЬ СТРОКА В ' + + 'ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ UNION ОБЪЕДИНИТЬ ИТОГИ СГРУППИРОВАТЬ УПОРЯДОЧИТЬ ИМЕЮЩИЕ ВНУТРЕННЕЕ СОЕДИНЕНИЕ НЕ И'; + // keyword : ключевые слова - const KEYWORD = v7_keywords + v8_keywords; + const KEYWORD = v7_keywords + v7_query_keywords + v8_keywords + v8_query_keywords; // v7 уникальные директивы, отсутствующие в v8 ==> meta-keyword const v7_meta_keywords = @@ -29,7 +41,10 @@ export default function(hljs) { const v8_meta_keywords = 'вебклиент вместо внешнеесоединение клиент конецобласти мобильноеприложениеклиент мобильноеприложениесервер ' + 'наклиенте наклиентенасервере наклиентенасерверебезконтекста насервере насерверебезконтекста область перед ' - + 'после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент '; + + 'после сервер толстыйклиентобычноеприложение толстыйклиентуправляемоеприложение тонкийклиент ' + // Дополнительные объекты + + 'внешнийисточникданных внешняяобработка внешнийотчет ' + + 'общийреквизит общиймодуль общаяформа общиймакет '; // meta-keyword : ключевые слова в инструкциях препроцессора, директивах компиляции, аннотациях const METAKEYWORD = v7_meta_keywords + v8_meta_keywords; @@ -421,6 +436,13 @@ export default function(hljs) { // number : числа const NUMBERS = hljs.inherit(hljs.NUMBER_MODE); + // operator : Звездочка для выбора всех полей + const OPERATORS = { + className: 'selector', + begin: /\*/, + relevance: 0 + }; + // string : строки const STRINGS = { className: 'string', @@ -485,6 +507,17 @@ export default function(hljs) { { begin: 'конецпроцедуры|конецфункции', keywords: 'конецпроцедуры конецфункции' + }, + { + begin: 'ЕСТЬNULL|ВЫРАЗИТЬ|РАЗНОСТЬДАТ|ДАТАВРЕМЯ|ГОД|МЕСЯЦ|ДЕНЬ|ДЕНЬГОДА|ДЕНЬНЕДЕЛИ|НЕДЕЛЯГОДА|ЧАС|МИНУТА|СЕКУНДА|НАЧАЛОПЕРИОДА|КОНЕЦПЕРИОДА|ДОБАВИТЬКДАТЕ|СУММА|КОЛИЧЕСТВО|МИНИМУМ|МАКСИМУМ|СРЕДНЕЕ', + end: '\\(', + returnBegin: true, + contains: [ + { + className: 'title', + begin: UNDERSCORE_IDENT_RE + } + ] } ], contains: [ @@ -536,7 +569,8 @@ export default function(hljs) { NUMBERS, STRINGS, DATE, - PUNCTUATION + PUNCTUATION, + OPERATORS ] }; } From c022155a04a31d115b818bbf2467f9a662121a61 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 1 Oct 2025 15:42:20 +0300 Subject: [PATCH 2/3] A new color has been added to highlight built-in 1C functions. --- src/languages/1c.js | 2 +- src/styles/1c-light.css | 47 ++++++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/languages/1c.js b/src/languages/1c.js index 21f3bf0241..2998c3fd37 100644 --- a/src/languages/1c.js +++ b/src/languages/1c.js @@ -514,7 +514,7 @@ export default function(hljs) { returnBegin: true, contains: [ { - className: 'title', + className: 'function-built_in', begin: UNDERSCORE_IDENT_RE } ] diff --git a/src/styles/1c-light.css b/src/styles/1c-light.css index c254db3dc3..9cabb319da 100644 --- a/src/styles/1c-light.css +++ b/src/styles/1c-light.css @@ -7,37 +7,41 @@ License: see project LICENSE Touched: 2023 */ - + /* end baseline CSS */ - + .hljs { color: #0000ff; background: #ffffff; } - + /* Base color: saturation 0; */ - + .hljs-subst { /* default */ } - + /* purposely ignored */ .hljs-formula, .hljs-attr, .hljs-property {} - + .hljs-comment { color: #008000; } .hljs-tag { color: #444a; } - + .hljs-tag .hljs-name, .hljs-tag .hljs-attr { color: #444; } - + + .hljs-function-built_in { + color: #800080 + } + .hljs-punctuation, .hljs-function, .hljs-keyword, @@ -52,7 +56,7 @@ .hljs-params { color: #0000ff; } - + /* User color: hue: 0 */ .hljs-string, @@ -65,12 +69,12 @@ .hljs-deletion { color: #000000; } - + .hljs-title, .hljs-section { color: #0000ff; } - + .hljs-regexp, .hljs-variable, .hljs-template-variable, @@ -79,28 +83,28 @@ .hljs-operator, .hljs-selector-pseudo { color: #ab5656; - } - + } + /* Language color: hue: 90; */ - + .hljs-literal { color: #ff0000; } - + .hljs-built_in, .hljs-bullet, .hljs-code, .hljs-addition { color: #0000ff; } - - + + /* Meta color: hue: 200 */ - + .hljs-meta { color: #963200; } - + .hljs-meta .hljs-string { color: #963200; } @@ -108,14 +112,13 @@ .hljs-meta .hljs-keyword { color: #963200; } - + /* Misc effects */ .hljs-emphasis { font-style: italic; } - + .hljs-strong { font-weight: bold; } - \ No newline at end of file From d19b5f47f3d4ddc9f8719fd5cd68bcd1c1da7d93 Mon Sep 17 00:00:00 2001 From: alex Date: Wed, 1 Oct 2025 16:03:44 +0300 Subject: [PATCH 3/3] 1c added to common category --- src/languages/1c.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/languages/1c.js b/src/languages/1c.js index 2998c3fd37..a463318863 100644 --- a/src/languages/1c.js +++ b/src/languages/1c.js @@ -2,7 +2,7 @@ Language: 1C:Enterprise Author: Stanislav Belov Description: built-in language 1C:Enterprise (v7, v8) -Category: enterprise +Category: enterprise, common */ export default function(hljs) {