-
-
Notifications
You must be signed in to change notification settings - Fork 227
Шаблон текста модуля плагина для парсера встроенного языка
Левкин Сергей edited this page Jun 2, 2023
·
1 revision
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОписаниеПеременных
Перем Типы;
Перем Токены;
Перем Исходник;
Перем ТаблицаТокенов;
Перем ТаблицаОшибок;
Перем ТаблицаЗамен;
Перем Стек;
Перем Счетчики;
Перем Директивы;
Перем Аннотации;
Перем СимволыПрепроцессора;
Перем Результат;
#КонецОбласти
#Область ПрограммныйИнтерфейс
Процедура Открыть(Парсер, Параметры) Экспорт
Типы = Парсер.Типы();
Токены = Парсер.Токены();
Исходник = Парсер.Исходник();
ТаблицаТокенов = Парсер.ТаблицаТокенов();
ТаблицаОшибок = Парсер.ТаблицаОшибок();
ТаблицаЗамен = Парсер.ТаблицаЗамен();
Стек = Парсер.Стек();
Счетчики = Парсер.Счетчики();
Директивы = Парсер.Директивы();
Аннотации = Парсер.Аннотации();
СимволыПрепроцессора = Парсер.СимволыПрепроцессора();
Результат = Новый Массив;
КонецПроцедуры
Функция Закрыть() Экспорт
// ...
Возврат СтрСоединить(Результат);
КонецФункции
Функция Подписки() Экспорт
Перем Подписки;
Подписки = Новый Массив;
Подписки.Добавить("ПосетитьОператорПрисваивания");
//Подписки.Добавить("ПокинутьОператорПрисваивания");
Возврат Подписки;
КонецФункции
#Область РеализацияПодписок
Процедура ПосетитьОператорПрисваивания(ОператорПрисваивания) Экспорт
Ошибка("Ошибка в операторе присваивания", ОператорПрисваивания.Начало, ОператорПрисваивания.Конец);
КонецПроцедуры // ПосетитьОператорПрисваивания()
//Процедура ПокинутьОператорПрисваивания(ОператорПрисваивания) Экспорт
//
//КонецПроцедуры // ПокинутьОператорПрисваивания()
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура Ошибка(Текст, Начало, Конец = Неопределено, ЕстьЗамена = Ложь)
Ошибка = ТаблицаОшибок.Добавить();
Ошибка.Источник = "ИмяЭтогоПлагина";
Ошибка.Текст = Текст;
Ошибка.ПозицияНачала = Начало.Позиция;
Ошибка.НомерСтрокиНачала = Начало.НомерСтроки;
Ошибка.НомерКолонкиНачала = Начало.НомерКолонки;
Если Конец = Неопределено Или Конец = Начало Тогда
Ошибка.ПозицияКонца = Начало.Позиция + Начало.Длина;
Ошибка.НомерСтрокиКонца = Начало.НомерСтроки;
Ошибка.НомерКолонкиКонца = Начало.НомерКолонки + Начало.Длина;
Иначе
Ошибка.ПозицияКонца = Конец.Позиция + Конец.Длина;
Ошибка.НомерСтрокиКонца = Конец.НомерСтроки;
Ошибка.НомерКолонкиКонца = Конец.НомерКолонки + Конец.Длина;
КонецЕсли;
Ошибка.ЕстьЗамена = ЕстьЗамена;
КонецПроцедуры
Процедура Замена(Текст, Начало, Конец = Неопределено)
НоваяЗамена = ТаблицаЗамен.Добавить();
НоваяЗамена.Источник = "ИмяЭтогоПлагина";
НоваяЗамена.Текст = Текст;
НоваяЗамена.Позиция = Начало.Позиция;
Если Конец = Неопределено Тогда
НоваяЗамена.Длина = Начало.Длина;
Иначе
НоваяЗамена.Длина = Конец.Позиция + Конец.Длина - Начало.Позиция;
КонецЕсли;
КонецПроцедуры
Процедура Вставка(Текст, Позиция)
НоваяЗамена = ТаблицаЗамен.Добавить();
НоваяЗамена.Источник = "ИмяЭтогоПлагина";
НоваяЗамена.Текст = Текст;
НоваяЗамена.Позиция = Позиция;
НоваяЗамена.Длина = 0;
КонецПроцедуры
#КонецОбласти
#КонецЕсли