From 2e8a7f111cfab06d8b23a0f3c7a60e62987c6855 Mon Sep 17 00:00:00 2001 From: Ilya Date: Sun, 16 Feb 2025 14:19:45 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D0=B5=D0=BC=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0=D1=80=D0=B8?= =?UTF-8?q?=D1=8F=20\\"=20=D0=B8=20\\n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/classes/IoTScenario.cpp | 11 ++++++++++- src/modules/sceninfo.json | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/classes/IoTScenario.cpp b/src/classes/IoTScenario.cpp index 34b6eb0f..754d12c5 100644 --- a/src/classes/IoTScenario.cpp +++ b/src/classes/IoTScenario.cpp @@ -707,7 +707,16 @@ int IoTScenario::gettok() { IdentifierStr = ""; LastChar = getLastChar(); while (LastChar != '"' && LastChar != EOF) { - IdentifierStr += (char)LastChar; + if (LastChar == '\\') { // обработка экранированных символов в строке + LastChar = getLastChar(); + if (LastChar == '"') { + IdentifierStr += '"'; + } else if (LastChar == 'n') { + IdentifierStr += '\n'; + } + } else { + IdentifierStr += (char)LastChar; + } LastChar = getLastChar(); } LastChar = getLastChar(); diff --git a/src/modules/sceninfo.json b/src/modules/sceninfo.json index 551f6d0e..53265548 100644 --- a/src/modules/sceninfo.json +++ b/src/modules/sceninfo.json @@ -7,7 +7,7 @@ "moduleName": "Scenario", "moduleVersion": "1.0", "title": "Сценарии", - "moduleDesc": "Сценарии позволяют реализовать индивидуальный алгоритм работы контроллера с учетом происходящих событий. Они представляют из себя описательный язык того, что нужно сделать при наступлении того или иного события, учитывая конкретные условия. \nВ базе языка - выражение вида: “Если условие истина, то выполнить одно действие, а если нет, то иное”. При этом проверка такого выражения будет осуществляться только при наступлении события связанного с элементом конфигурации, который упоминается в этом выражении. \nУсловием или действием может быть любое разрешенное выражение. Они все при выполнении возвращают значение. Выражение может состоять из: идентификаторов элементов конфигурации, чисел (целые, дробные и отрицательные), строк в кавычках, операций сравнения < > <= >= == !=, операций присваивания значений =, математических операций +-*/, логических операций &|, комментариев после символа #, функций (в параметрах которых так же могут быть любые разрешенные выражения), конструкции ветвления IfThenElse, группирующие блоки выражений {}", + "moduleDesc": "Сценарии позволяют реализовать индивидуальный алгоритм работы контроллера с учетом происходящих событий. Они представляют из себя описательный язык того, что нужно сделать при наступлении того или иного события, учитывая конкретные условия. \nВ базе языка - выражение вида: “Если условие истина, то выполнить одно действие, а если нет, то иное”. При этом проверка такого выражения будет осуществляться только при наступлении события связанного с элементом конфигурации, который упоминается в этом выражении. \nУсловием или действием может быть любое разрешенное выражение. Они все при выполнении возвращают значение. Выражение может состоять из: идентификаторов элементов конфигурации, чисел (целые, дробные и отрицательные), строк в кавычках, операций сравнения < > <= >= == !=, операций присваивания значений =, математических операций +-*/, логических операций &|, комментариев после символа #, функций (в параметрах которых так же могут быть любые разрешенные выражения), конструкции ветвления IfThenElse, группирующие блоки выражений {}, экранирование символа кавычек и переноса строки", "funcInfo": [ { "name": "getIntFromNet",