Швидке переміщення по статті:


     Основні поняття 

     Мова опису розмітки використовується для друкованої форми документів, які виводяться на принтери та Фіскальні Реєстратори (надалі ФР). 

     Основна одиниця друку - документ у форматі xml з кореневим тегом <doc>. 

Приклад 1. Найпростіший документ 

     Найпростіший документ у цій розмітці має такий вигляд: 

<doc>текст для друку</doc>

     Результат: 

| текст для друку        |


     Які пристрої підтримуються 

     У прикладах наводиться очікуване виведення на принтер з одним підтримуваним шрифтом і шириною стрічки в 30 символів. Для позначення початку і кінця рядка (країв паперу) використовується символ " | ". 

     Розмітка документа не залежить від пристроїв і під час виведення адаптується під можливості конкретного пристрою. Після друку документа на пристроях, де це підтримується, виконується розрізка стрічки. 

     Розмітка документа має працювати на пристроях із шириною стрічки 16 символів - мінімальна ширина стрічки з пристроїв, які підтримуються на момент створення цієї статті. 

Атрибути тега <doc> 

НазваМожливі значенняПризначення
bellПорожній рядок (перевіряється тільки наявність)Увімкнення кухонного дзвінка перед початком друку документа. Працює тільки для принтерів.
fontf0, f1, f2, barcode, qrcodeВибір шрифту (див. далі Керування шрифтами)
aligncenter, justify, left, rightВибір вирівнювання (див. далі Керування шрифтами)
formattercut, 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://www.knaipateam-borsch.com/ </qrcode>


Атрибути тега <qrcode> 

НазваМожливі значенняПризначення
sizetiny, small, normal, large, extralargeРозмір QR-коду
correctionlow, medium, high, ultraСтупінь корекції (завадостійкості). Для малого розміру не слід вказувати значення ultra/high, оскільки це може призвести до помилки розпізнавання QR-коду.


Розміри шрифтів для деяких пристроїв 

     У таблиці для кожного розміру шрифту вказано кількість символів у рядку. 

Назва пристроюШрифт 0Шрифт 1Шрифт 2
Comstar251515
Epson TM-T88422821
Epson TM-U220 (кодування gb2312)323216
Epson TM-U220 (усі кодування крім gb2312) 30 30 15
SPrint TM200723636
SPrint TM200 Min484824
Штрих-600302415
Posiflex422821
STAR SPxxx матричний422317
SP298423420
STAR TSPxxx483819
OPOS принтер482419
Zebra EplЗалежить від налаштувань dpiЗалежить від налаштувань dpiЗалежить від налаштувань dpi
Epson TM-U295352114

     Усі ФР підтримують форматування тільки одним шрифтом, розміри якого задаються в налаштуваннях ФР, в 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.
valignbottom, center, top За замовчуванням: topВертикальне вирівнювання в комірках цього стовпчика.
aligncenter, justify, left, rightВибір вирівнювання (див. вище Керування вирівнюванням)
formattercut, split, wrapВибір способу перенесення рядків (див. вище Керування перенесенням тексту)

     Колонки, які не розтягуються (атрибут autowidth) і для яких явно не задано розмір в атрибуті width, розподіляють місце, що залишилося від інших колонок, порівну. 


Визначення комірок

     Осередки (клітинки) визначаються тегами <c /> або <ct /> усередині тега <cells /> у напрямку зліва направо, згори вниз.

     За замовчуванням у кожному рядку таблиці виводиться стільки ж клітинок, скільки і колонок. 

     Тег <c> може містити будь-який контент, зокрема й інші теги форматування. Тег <ct /> може містити тільки текст.

     У колонках, що розтягуються (з атрибутом autowidth), має бути хоча б один осередок типу <ct />, і тільки за ним рахують ширину колонки для врахування розтягування колонки й обмежень minwidth і maxwidth.


Атрибути тега <c /> та <ct /> 

НазваМожливі значенняПризначення
colspanЦіле число, більше або рівне 0. За замовчуванням: 1Об'єднує вказану кількість колонок. 0 - комірка займає всю ширину таблиці.
fontf0, 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|
|                                                            |
|                   ДЯКУЄМО! ПРИХОДЬТЕ ЩЕ!                   |
|                                                            |
|                                                            |
|                        Гарного дня!                        |
|                                                            |