- Журнал изменений в версиях системы Papyrus
- PAPYRUS (Демо)
- Papyrus: development
- ppd-chapter-000
- Введение #2
- Инструментарий
- Сборка проекта
- Code style
- Общие функции
- Базовые типы данных
- Базовые структуры данных
- Базовые алгоритмы
- Управление строковыми ресурсами
- Контроллеры анализа данных (классы семейства PPView)
- Соображения по вопросу неотрицательности товарных остатков
- Котировки
- Модель объемной оптимизации товарных запасов
- Проект SARTR
- Протокол взаимодействия
- Зарезервированные объекты
- Регламентированные задания
- Papyrus: возможности системы
- Papyrus: руководство пользователя
- Библиотека
- Все об обязательной маркировке 2021
- Все об онлайн-кассах
- Презентации
- Руководства
- Свидетельство о регистрации системы Papyrus
- Технологии и функции
Управление строковыми ресурсами
Не знаю стоит ли рассказывать о том, почему константные текстовые строки должны храниться отдельно от исходного кода. На всякий случай приведу дежурные аргументы:
В этой статье я опишу технику управления текстовыми ресурсами, применяемую в системе Papyrus. Я выше упомянул о том, что во многих системах разработки имеются инструменты управления строковыми ресурсами. Так зачем, тем не менее, я описываю какой-то иной подход? Есть несколько причин. Одна из основных: очень скромные возможности идентификации текстовых объектов в существующих решениях.С идентификации мы и начнем.
Идентификация текстовых ресурсов
Нам понадобятся следующие варианты идентификации строк:#define TXT_THEIMPORTANT_STRING 1076
15 "Это - строка с идентификатором 15"
К чему это? Например, для представления строк, наследуемых из сторонних библиотек и компонентов. Идентификацию таких строк мы не контролируем потому автогенерация числовых кодов по мнемоникам не сработает.
@somestring "Какая-то строка"А теперь в том же модуле зададим такое определение:
TXT_SOMESTRING_2 "@{somestring} 2"
При вызове из программы строки с идентификатором, соответствующем TXT_SOMESTRING_2 мы получим результат “Какая-то строка 2”.
Группировка текстовых строк
Я перечислил все методы идентификации строк, но кроме этого нам понадобится какая-нибудь группировка наборов строк. Хотелось бы отдельно определять, допустим, сообщения об ошибках и отдельно - строки для вывода в журнал. Кроме этого требования, без которого можно было бы и обойтись, есть одно специальное применение строковых групп - определение множества символов для хэш-таблиц, применяемых, например, при прямом и обратном преобразовании данных между программными комопнентами и внешними системами в формализованных тексовых форматах (xml, json, etc).
Расширенные дескрипторы строк
Еще одна мелочь которая будет полезна - расширенные дескрипторы строк. Несмотря на заумное наименование это - просто многословное дополнение к строке, которое можно использовать в качестве подсказки пользователю или при иной необходимости.Формат описания текстовых ресурсов
Теперь, когда основные нехитрые требования и принципы нам ясны, можно приступить к формату определения строковых ресурсов. Он достаточно прост (немного похож на ini-файл).Во-первых, примечания. Они подчиняются правилам c++. То есть, это либо два слэша (//) и все, что за ними до конца строки, либо многострочные примечания между /* и */.Далее, группы строк. Группа начинается с конструкции [номер-группы] заканчивается либо в конце файла, либо при появлении определения новой группы. Группы идентифицируются только лишь целыми числами. Символьные идентификаторы групп невозможны. Мне немного неудобо из-за этого, но за десятилетия использования этого формата ни разу не возникло серьезной необходимости что-то здесь менять. Для групп, определяющих набор строк для хэш-таблицы введен модификатор :hash после номера группы. Например: