Основні поняття
Мова опису розмітки використовується для друкованої форми документів, які виводяться на принтери та Фіскальні Реєстратори (надалі ФР).
Основна одиниця друку – документ у форматі xml з кореневим тегом <doc>.
Приклад 1. Найпростіший документ
Найпростіший документ у цій розмітці має такий вигляд:
<doc>текст для друку</doc>
Результат:
| текст для друку |
Які пристрої підтримуються
У прикладах наводиться очікуване виведення на принтер з одним підтримуваним шрифтом і шириною стрічки в 30 символів. Для позначення початку і кінця рядка (країв паперу) використовується символ ” | “.
Розмітка документа не залежить від пристроїв і під час виведення адаптується під можливості конкретного пристрою. Після друку документа на пристроях, де це підтримується, виконується розрізка стрічки.
Розмітка документа має працювати на пристроях із шириною стрічки 16 символів – мінімальна ширина стрічки з пристроїв, які підтримуються на момент створення цієї статті.
Атрибути тега <doc>
| Назва | Можливі значення | Призначення |
| bell | Порожній рядок (перевіряється тільки наявність) | Увімкнення кухонного дзвінка перед початком друку документа. Працює тільки для принтерів. |
| font | f0, f1, f2, barcode, qrcode | Вибір шрифту (див. нижче Керування шрифтами) |
| align | center, justify, left, right | Вибір вирівнювання (див. далі Керування шрифтами) |
| formatter | cut, split, wrap | Вибір способу перенесення рядків (див. нижче Керування перенесенням тексту) |
Теги форматування
Керування шрифтами
Є три розміри шрифту. Вони нумеруються цифрами від 0 до 2 у порядку збільшення розміру: шрифт номер 0 – найменший, шрифт номер 2 – найбільший. Якщо явно не вказано шрифт, то за замовчуванням використовується шрифт номер 0.
Усі теги, зазначені в таблиці нижче, змінюють шрифт для всіх вкладених у них елементів.
Теги для керування шрифтами
| Назва | Призначення | |
| <f0></f0> | Форматування вкладеного контенту шрифтом розміру 0. | |
| <f1></f1> | Форматування вкладеного контенту шрифтом розміру 1. | |
| <f2></f2> | Форматування вкладеного контенту шрифтом розміру 2. | |
| <barcode></barcode> | Форматування вкладеного тексту як штрих-код. Підтримує тільки текст. Якщо пристрій не підтримує друк штрих-кодів, то цей тег буде проігноровано. | |
| <qrcode></qrcode> | Форматування вкладеного тексту як двовимірний штрих-код (QR-код). Підтримує тільки текст. Якщо пристрій не підтримує виведення штрихкодів, то цей тег буде проігноровано. Опціональні атрибути розміру size QR-коду і ступеня завадостійкості correction. Приклад тега:<qrcode size=”normal” correction=”medium”> https://syrvehub.com/ </qrcode> | |
Атрибути тега <qrcode>
| Назва | Можливі значення | Призначення |
| size | tiny, small, normal, large, extralarge | Розмір QR-коду |
| correction | low, medium, high, ultra | Ступінь корекції (завадостійкості). Для малого розміру не слід вказувати значення ultra/high, оскільки це може призвести до помилки розпізнавання QR-коду. |
Розміри шрифтів для деяких пристроїв
У таблиці для кожного розміру шрифту вказано кількість символів у рядку.
| Назва пристрою | Шрифт 0 | Шрифт 1 | Шрифт 2 |
| Comstar | 25 | 15 | 15 |
| Epson TM-T88 | 42 | 28 | 21 |
| Epson TM-U220 (кодування gb2312) | 32 | 32 | 16 |
| Epson TM-U220 (усі кодування крім gb2312) | 30 | 30 | 15 |
| SPrint TM200 | 72 | 36 | 36 |
| SPrint TM200 Min | 48 | 48 | 24 |
| Штрих-600 | 30 | 24 | 15 |
| Posiflex | 42 | 28 | 21 |
| STAR SPxxx матричний | 42 | 23 | 17 |
| SP298 | 42 | 34 | 20 |
| STAR TSPxxx | 48 | 38 | 19 |
| OPOS принтер | 48 | 24 | 19 |
| Zebra Epl | Залежить від налаштувань dpi | Залежить від налаштувань dpi | Залежить від налаштувань dpi |
| Epson TM-U295 | 35 | 21 | 14 |
Усі ФР підтримують форматування тільки одним шрифтом, розміри якого задаються в налаштуваннях ФР, в Syrve Office.
Теги й атрибути зміни шрифтів заборонені всередині таблиць, для цього необхідно користуватися атрибутом font для комірок таблиці.
Керування вирівнюванням
За замовчуванням у документі задано вирівнювання по лівому краю. У таблиці подано теги, що дають змогу змінювати спосіб вирівнювання для всіх вкладених у них елементів.
Теги для керування вирівнюванням
| Назва | Призначення |
| <center></center> | Вирівнювання по центру. |
| <justify></justify> | Вирівнювання по ширині. |
| <left></left> | Вирівнювання по лівому краю. |
| <right></right> | Вирівнювання по правому краю. |
Друк зображень
За замовчуванням у документі друк зображень вимкнено. Тег для друку зображень:
| Назва | Призначення |
| <logo>index</logo> | Друк раніше завантаженого зображення з енергонезалежної пам’яті або також з пам’яті пристрою (NV image store) з числовим індексом index. |
Керування перенесенням тексту
За замовчуванням у документі використовується перенесення тексту в будь-якому місці. У таблиці перелічено теги, які можна використовувати для перенесення тексту в документі.
Теги для керування перенесенням тексту
| Назва | Призначення |
| <split></split> | Розбити текст на рядки, при перенесенні на пробільних символах (пробіл, табуляція тощо). |
| <wrap></wrap> | Розбити текст на рядки, при перенесенні в будь-якому місці. |
| <cut></cut> | Обрізати текст, який не поміщається в рядок. |
| <br /> | Перехід на новий рядок. Перехід здійсниться тільки якщо поточний рядок порожній. Будь- яка кількість підряд-рядних <br /> на виході дадуть один порожній рядок. |
| <np /> | Новий параграф. Після його застосування, наступний за ним текст почнеться з нового рядка, і водночас, якщо попередній параграф було відформатовано по ширині, то останній рядок цього параграфа буде вирівняно по лівому краю (аналогічно працює MS Word). |
| <nobr /> | Нерозривний пробіл. Слова, які йдуть через нерозривний пробіл, сприйматимуться як єдине слово. Це означає, що вони не розбиватимуться під час форматування під час використання split formatter або justify alignment. |
Інші теги форматування
За замовчуванням порожній простір між символами заповнюється пробілами. Тег <fill /> дає змогу перевизначити цю поведінку.
| Назва | Призначення |
| <fill /> | Перевизначає символ, який використовується для заповнення порожнього простору. Новий символ (або набір символів) задається атрибутом @symbol. Не успадковується таблицею, якщо її обернути тегом <fill />. |
Слід враховувати, що тег <fill /> не перевизначає пробільні символи користувацького тексту.
Приклад 2. Демонстрація тега <fill />
<doc>
<left> текст з пробілом </left>
<fill symbols=".">
<br />
<left> текст з пробілом </left>
<np />
<table>
<columns>
<column />
<column />
</columns>
<cells>
<c>лівий текст</c>
<c>
<right>правий текст</right>
</c>
</cells>
</table>
</fill>
</doc>
Результат:
| текст з пробілом | | текст з пробілом ...................| |.....................................| |лівий текст правий текст|
Таблиці
Форматування таблиць – основний спосіб форматування документів.
Таблиця визначається тегом <table></table>, який містить обов’язкові дочірні теги: <columns></columns> (колонки таблиці), <cells></cells> (клітинки таблиці), які, своєю чергою, мають містити хоча б одне визначення колонки та комірки відповідно.
Атрибути тега <table />
| Назва | Можливі значення | Призначення |
| cellspacing | Ціле число, більше або рівне 0. За замовчуванням: 1 | Ширина, у символах, внутрішніх відступів між колонками. |
Приклад 3. Найпростіший документ із таблицею
<doc>
<table>
<columns>
<column />
</columns>
<cells>
<c>Текст</c>
</cells>
</table>
</doc>
Визначення колонок
Колонки визначаються тегами <column /> усередині тега <columns /> у напрямку зліва направо. Для всіх клітинок кожної колонки можна задавати спосіб форматування за допомогою загальних атрибутів форматування: font, align і formatter (див. вище Атрибути тега <doc>).
Атрибути тега <column />
| Назва | Можливі значення | Призначення |
| autowidth | Будь-яке, важливий факт наявності атрибута. | Чи розтягується колонка під вміст. |
| minwidth | Ціле число, більше або рівне 1. За замовчуванням: 1 | Мінімальна ширина колонки, у символах. Використовується тільки для колонок, що розтягуються. |
| maxwidth | Ціле число, більше або рівне 1. За замовчуванням: не задано | Максимальна ширина колонки, у символах. Використовується тільки для колонок, що розтягуються. |
| width | Ціле число, більше або рівне 1. За замовчуванням: не задано | Фіксована ширина колонки. Не можна використовувати спільно з autowidth. |
| valign | bottom, center, top За замовчуванням: top | Вертикальне вирівнювання в комірках цього стовпчика. |
| align | center, justify, left, right | Вибір вирівнювання (див. вище Керування вирівнюванням) |
| formatter | cut, split, wrap | Вибір способу перенесення рядків (див. вище Керування перенесенням тексту) |
Колонки, які не розтягуються (атрибут autowidth) і для яких явно не задано розмір в атрибуті width, розподіляють місце, що залишилося від інших колонок, порівну.
Визначення комірок
Осередки (клітинки) визначаються тегами <c /> або <ct /> усередині тега <cells /> у напрямку зліва направо, згори вниз.
За замовчуванням у кожному рядку таблиці виводиться стільки ж клітинок, скільки і колонок.
Тег <c> може містити будь-який контент, зокрема й інші теги форматування. Тег <ct /> може містити тільки текст.
У колонках, що розтягуються (з атрибутом autowidth), має бути хоча б один осередок типу <ct />, і тільки за ним рахують ширину колонки для врахування розтягування колонки й обмежень minwidth і maxwidth.
Атрибути тега <c /> та <ct />
| Назва | Можливі значення | Призначення |
| colspan | Ціле число, більше або рівне 0. За замовчуванням: 1 | Об’єднує вказану кількість колонок. 0 – комірка займає всю ширину таблиці. |
| font | f0, f1, f2 | Встановлює шрифт для рядка таблиці. Цей атрибут має бути встановлений для першої комірки рядка, атрибут в інших комірках ігнорується. |
Вкладені таблиці
Механізм форматування підтримує таблиці, вкладені в таблиці.
Але є особливість: якщо таблицю вкладено в клітинку, що не займає весь рядок, то шрифт у ній зафіксовано, він дорівнює поточному шрифту рядка батьківської таблиці. Атрибути зміни шрифтів для рядків вкладеної таблиці будуть проігноровані.
Вкладена таблиця, що не займає весь рядок батьківської
<doc>
<table>
<columns>
<column width="10" />
<column />
</columns>
<cells>
<c>котрийсь текст</c>
<c>котрийсь інший текст</c>
<c font="f1">
<table cellspacing="0">
<columns>
<column />
<column valign="bottom" />
</columns>
<cells>
<c>f0c1</c>
<c>f0c2</c>
<c font="f2">f2c1</c>
<c>f2c2</c>
</cells>
</table>
</c>
<c>текст у батьківській таблиці</c>
</cells>
</table>
</doc>
<f0>, <f1> – це умовне позначення для рядків, що друкуються шрифтом f0 і f1.
У цьому прикладі для першого рядка застосовано шрифт <f0>, тому що це шрифт за замовчуванням для документа і він не перевизначений.
Шрифт вкладеної таблиці визначається шрифтом, заданим для рядка батьківської таблиці, у якому знаходиться вкладена таблиця. Перевизначення для другого рядка вкладеної таблиці (font=”f2″) не спрацювало, оскільки таблиця не займає цілий рядок батьківської таблиці.
Макроси DocPreprocess.xslt
Макроси – це теги, які не визначені в базовому наборі тегів форматування, і є скороченими версіями деяких типових конструкцій.
Будемо позначати @attribute значення атрибута attribute з вихідного тега.
| Назва тега | Опис |
| <line /> | Виводить один рядок, заповнений символом @symbols. За замовчуванням: @symbols=’-‘, тобто в результаті застосування тега <line /> без атрибутів на виході вийде горизонтальна лінія на всю ширину документа. Підсумкова розмітка:<fill symbols=”@symbols”> <np /> </fill> |
| <linecell /> | Додає клітинку на всю ширину таблиці, заповнену символом @symbols. За замовчуванням @symbols=’-‘, тобто в результаті застосування тега <linecell /> без атрибутів на виході вийде горизонтальна лінія на всю ширину таблиці. Підсумкова розмітка:<c colspan=”0″> <fill symbols=”@symbols”> <np /> </fill> </c> |
| <pair /> | Виводить в один рядок пару значень @left, @right, вирівняні вліво і вправо відповідно. Якщо @fit=’left’, то підсумкова розмітка:<table> <columns> <column align=”left” autowidth=”” /> <column align=”right” /> </columns> <cells> <ct>@left</ct> <ct>@right</ct> </cells> </table>Якщо @fit=’right’, то підсумкова розмітка:<table> <columns> <column align=”left” /> <column align=”right” autowidth=”” /> </columns> <cells> <ct>@left</ct> <ct>@right</ct> </cells> </table> |
| leftpair | Виводить в один рядок пару значень @left, @right, обидва вирівняні вліво.Підсумкова розмітка:<table> <columns> <column align=”left” autowidth=”” /> <column align=”left” /> </columns> <cells> <ct>@left</ct> <ct>@right</ct> </cells> </table> |
Приклад 4. Форматування пречека
<doc>
<left>
<split>
****************************************** Мій ресторан ----- ТОВ «Syrve» РНОКПП 1234657890 ****************************************** </split>
</left>
<center>ГОСТЬОВИЙ РАХУНОК</center>
<pair fit="right" left=“Основний зал" right=“Стіл: 2" />
<pair fit="right" left=“Відкрито: 13.03.2023 16:39" right=“Замовлення №459" />
<left>Офіціант: Орест</left>
<table>
<columns>
<column />
<column align="right" autowidth="" />
<column align="right" autowidth="" />
</columns>
<cells>
<linecell />
<ct>Найменування</ct>
<ct>К-сть</ct>
<ct>Сума</ct>
<linecell />
<c colspan="0">Гість 1</c>
<ct>Ковбаска</ct>
<ct>1</ct>
<ct>10.00</ct>
<ct> +1</ct>
<ct />
<ct>1.00</ct>
<ct>Горілка. Безалкогольна. Так, це можливо;)</ct>
<ct>1</ct>
<ct>20.00</ct>
<ct> +9</ct>
<ct />
<ct />
<c colspan="2" />
<c>
<line />
</c>
<c colspan="2">Всього до сплати Гість 1:</c>
<ct>31.00</ct>
<linecell symbols=" " />
<c colspan="0">Гість 2</c>
<ct>Ковбаска</ct>
<ct>1</ct>
<ct>10.00</ct>
<c colspan="2" />
<c>
<line />
</c>
<c colspan="2">Всього до сплати Гість 2:</c>
<ct>10.00</ct>
<linecell />
<c colspan="2">ВСЬОГО ДО СПЛАТИ:</c>
<ct>41.00</ct>
</cells>
</table>
<np />
<center>
<split>
ДЯКУЄМО! ПРИХОДЬТЕ ЩЕ! </split>
</center>
<np />
<np />
<center>Гарного дня!</center>
<np />
</doc>
Результат:
|****************************************** |
|Мій ресторан ----- ТОВ «Syrve» |
|РНОКПП 1234657890 |
|****************************************** |
| ГОСТЬОВИЙ РАХУНОК |
|Основний зал Стіл: 2 |
|Відкрито: 13.03.2023 16:39 Замовлення №459|
|Офіціант: Орест |
|------------------------------------------------------------|
|Найменування К-сть Сума|
|------------------------------------------------------------|
|Гість 1 |
|Ковбаска 1 10.00|
| +1 1.00|
|Горілка. Безалкогольна. Так, це можливо;) 1 20.00|
| +9 |
| ------|
|Всього до сплати Гість 1: 31.00|
| |
|Гість 2 |
|Ковбаска 1 10.00|
| ------|
|Всього до сплати Гість 2: 10.00|
|------------------------------------------------------------|
|ВСЬОГО ДО СПЛАТИ: 41.00|
| |
| ДЯКУЄМО! ПРИХОДЬТЕ ЩЕ! |
| |
| |
| Гарного дня! |
| |