Форматные подстановки

From EjudgeWiki

Навигация: Главная страница/Система ejudge/Использование/Конфигурационные файлы/serve.cfg/Форматные подстановки

Некоторые конфигурационные переменные определяют не непосредственно значения, используемые при работе сервера турнира, а шаблоны значений. Например, конфигурационная переменная team_info_url определяет шаблон URL, который используется при генерации строки таблицы результатов для каждой команды. Этот URL содержит ссылку на страницу с подробной информацией о соответствующем участнике. Поскольку URL зависит от некоторых атрибутов участника (например, от его идентификатора), шаблон URL перед использованием должен быть подвергнут преобразованию.

Другой случай, когда выполняется подстановка шаблонов, возникает при наследовании свойств задачи или тестера от абстрактной задачи или тестера соответственно. Например, конфигурационная переменная input_name описания задачи задаёт имя файла с входными данными для решения задачи. Это имя файла может быть как фиксированным (например, input.txt), так и зависеть от имени задачи (например, a.in, b.in и т. д.). В последнем случае в описании абстрактной задачи удобно указать шаблон имени входного файла, который автоматически будет раскрыт при наследовании свойств абстрактной задачи конкретной задачей.

В обоих случаях в необходимый момент выполняются форматные подстановки, которые описываются ниже. Аргументами форматной подстановки являются: форматная строка, определяющая выполняемые подстановки; информация о текущей задаче (если доступна); информация о текущей команде (если доступна); информация о текущем тестере (если доступна). Результат форматной подстановки записывается в выходную строку.

Форматная строка состоит из символов, копируемых в выходную строку без изменений, и спецификаций форматного преобразования. Спецификация форматного преобразования начинается со знака «процент» (%) и имеет следующий вид:

%[<флаги>][<ширина>][.<точность>]<спецификатор>

Здесь в квадратных скобках записаны необязательные элементы спецификации.

Элемент <флаги> позволяет использовать дополнительные возможности преобразования. Элемент <флаги> — это последовательность односимвольных флагов, перечисленных в таблице:

e Если форматное преобразование даёт пустую строку, она заменяется на строку &nbsp; Этот флаг может использоваться для генерации содержимого ячеек html-таблиц.
u Преобразовать строку, полученную в результате форматного преобразования, к верхнему регистру. Например, если короткое имя(short_name) задач в турнире имеет вид a, b и т. д., а URL, по которому находятся их условия, имеет вид A.html и т. д., то флаг u вместе с преобразованием Ps (то есть спецификация форматного преобразования %uPs) даст необходимый результат.
l Преобразовать строку, полученную в результате форматного преобразования, к нижнему регистру. Например, если короткое имя задачи (short_name) задач в турнире имеет вид A, B и т. д., а имя входного файла — a.in и т. д., то cпецификация форматного преобразования %lPs даст необходимый результат.
r Выровнять строку, полученную в результате форматного преобразования, по правому краю, дополняя её слева пробелами при необходимости.
0 Выровнять строку, полученную в результате форматного преобразования, по правому краю, дополняя её слева необходимым количеством нулей.
c Выровнять строку, полученную в результате форматного преобразования, по центру, дополняя её слева и справа пробелами при необходимости.

Если в одной спецификации форматного преобразования указаны конфликтующие флаги (например, l и u), действует флаг, указанный последним.

Элемент <ширина> задаёт минимальную ширину поля. Элемент представляет собой последовательность цифр, формирующих целое число в десятичной записи. Данный элемент работает аналогично элементу, задающему ширину в форматном преобразовании в функциях семейства printf языка Си. Если не указаны флаги r, 0 или c, форматная строка, полученная в результате форматного преобразования, выравнивается по левому краю. Если длина строки, полученной в результате форматного преобразования и отсечения по максимальной длине, задаваемого элементом <точность>, меньше указанной в элементе <ширина>, строка дополняется справа необходимым количеством пробелов. Если указан какой-либо из флагов r, 0 или c, и длина строки, полученной в результате форматного преобразования и отсечения по максимальной длине, задаваемого элементом <точность>, меньше указанной в элементе <ширина>, строка выравнивается согласно указанному флагу. Если длина строки, полученной в результате форматного преобразования и отсечения по максимальной длине, задаваемого элементом <точность>, больше указанной в элементе <ширина>, никакого выравнивания не происходит. Если элемент <ширина> не указан, его значение подразумевается равным нулю.

Элемент <точность> задаёт максимальную длину строки, получаемой в результате раскрытия спецификатора форматного преобразования. Элемент представляет собой последовательность цифр, формирующих целое число в десятичной записи. Данный элемент работает аналогично элементу, задающему точность в форматном преобразовании в функциях семейства printf языка Си. Раскрытие спецификатора форматного преобразования даёт строку, которая подвергается ограничению на максимальную длину. Например, спецификатор форматного преобразования Ps раскрывается в строку короткого имени (short_name) текущей задачи. Если результат раскрытия спецификатора длиннее, чем указано в элементе <точность>, он обрезается по заданной длине. Если результат раскрытия спецификатора короче, чем указано в элементе <точность>, он сохраняется неизменным. Строка, полученная после применения ограничения на максимальную длину, подвергается преобразованиям выравнивания до минимальной длины, как описано выше. Если элемент <точность> не задан, его значение подразумевается неограниченным.

Элемент <спецификатор> (спецификатор форматного преобразования) указывает данные, которые подставляются вместо спецификации форматного преобразования. Спецификатор состоит из двух букв, где первая буква — это секция, из которой берётся информация: P — текущая задача, T — текущий тестер, M — текущий участник. Вторая буква определяет поле секции. Все поддерживаемые спецификаторы форматного преобразования перечислены в таблице:

Глобальные параметры (G)

Gr Корневой каталог турнира

Параметры задачи (P)

Pi Идентификатор задачи (поле id)
Ps Короткое имя задачи (поле short_name)
Pl Полное имя задачи (поле long_name)
PS Имя задачи в таблице результатов (поле stand_name)
PL Внутреннее имя задачи (поле internal_name)

Параметры языка программирования (L)

Li Идентификатор языка программирования (поле id)
Ln Краткое название языка программирования (поле short_name)
Ll Полное название языка программирования (поле long_name)
La Архитектура языка программирования (поле arch)
Ls Суффикс файлов с исходным текстом (поле src_sfx)
Le Суффикс исполняемых файлов (поле exe_sfx)

Параметры тестирования (T)

Ti Идентификатор тестера (поле id)
Tn Имя тестера (поле name)
Tj Идентификатор задачи, которую проверяет тестер (поле problem)
Tp Короткое имя задачи, которую проверяет тестер (поле problem_name)
Ta Архитектура, на которой работает тестер (поле arch)
Tk Ключ тестера (поле key)

Параметры тестирования использовать не рекомендуется.

Параметры участника (M)

Mi Идентификатор участника
Mn Имя (псевдоним) участника
Ml Регистрационное имя (login) участника
Mc Поле «город» (city) регистрационной формы участника. Если данное поле не заполнялось, заменяется на пустую строку
MC Поле «город (англ.)» (city_en) регистрационной формы участника
Mo Поле «страна» (country) регистрационной формы участника
MO Поле «страна (англ.)» (country_en) регистрационной формы участника
Mr Поле «регион» (region) регистрационной формы участника
Mt Поле «краткое название учебного заведения» (inst_short) регистрационной формы участника
MT Поле «краткое название учебного заведения (англ.)» (inst_short_en) регистрационной формы участника
Mu Поле «название учебного заведения» (inst) регистрационной формы участника
MU Поле «название учебного заведения (англ.)» (inst_en) регистрационной формы участника
Mf Поле «краткое название факультета» (fac_short) регистрационной формы участника
MF Поле «краткое название факультета (англ.)» (fac_short_en) регистрационной формы участника
Md Поле «название факультета» (fac) регистрационной формы участника
MD Поле «название факультета (англ.)» (fac_en) регистрационной формы участника
ML Поле «размещение» (location)
Mp Поле «имя принтера» (printer_name)
My Поле «id экзамена» (exam_id)
MY Поле «шифр» (exam_cypher)
M1 Поле extra1

База данных пользователей (U)

Ui Идентификатор участника
Un Имя (псевдоним) участника
Ul Регистрационное имя (login) участника
Ue e-mail участника
Uz Регистрационный пароль (если не закодирован)
UZ Турнирный пароль (если не закодирован)
UM Информация об участниках (см. ниже)
Uc Поле «город» (city) регистрационной формы участника. Если данное поле не заполнялось, заменяется на пустую строку
UC Поле «город (англ.)» (city_en) регистрационной формы участника
Uo Поле «страна» (country) регистрационной формы участника
UO Поле «страна (англ.)» (country_en) регистрационной формы участника
Ur Поле «регион» (region) регистрационной формы участника
Ut Поле «краткое название учебного заведения» (inst_short) регистрационной формы участника
UT Поле «краткое название учебного заведения (англ.)» (inst_short_en) регистрационной формы участника
Uu Поле «название учебного заведения» (inst) регистрационной формы участника
UU Поле «название учебного заведения (англ.)» (inst_en) регистрационной формы участника
Uf Поле «краткое название факультета» (fac_short) регистрационной формы участника
UF Поле «краткое название факультета (англ.)» (fac_short_en) регистрационной формы участника
Ud Поле «название факультета» (fac) регистрационной формы участника
UD Поле «название факультета (англ.)» (fac_en) регистрационной формы участника
UL Поле «размещение» (location)
Up Поле «имя принтера» (printer_name)
Uy Поле «id экзамена» (exam_id)
UY Поле «шифр» (exam_cypher)
Uh Поле homepage
UH Поле phones
UP Поле languages
U0 Поле field0
U1 Поле field1
U2 Поле field2
U3 Поле field3
U4 Поле field4
U5 Поле field5
U6 Поле field6
U7 Поле field7
U8 Поле field8
U9 Поле field9

Информация об участниках (UM)

UMp основной участник команды или личный участник
UMr запасной участник команды
UMa руководитель
UMc тренер
UMg гость

Если в команде зарегистрировано более одного участника в соответствующей категории, то после кода участника необходимо указать номер участника в соответствующей категории. Например, UMp2 - это второй основной участник команды.

После задания участника указывается поле информации об участнике:

f имя (firstname)
F имя (англ.) (firstname_en)
m отчество (middlename)
M отчество (англ.) (middlename_en)
s фамилия (surname)
S фамилия (англ.) (surname_en)
g группа (group)
G группа (англ.) (group_en)
e e-mail
h домашняя страница (homepage)
o должность (occupation)
O должность (англ.) (occupation_en)
t Поле «краткое название учебного заведения» (inst_short) регистрационной формы участника
T Поле «краткое название учебного заведения (англ.)» (inst_short_en) регистрационной формы участника
u Поле «название учебного заведения» (inst) регистрационной формы участника
U Поле «название учебного заведения (англ.)» (inst_en) регистрационной формы участника
a Поле «краткое название факультета» (fac_short) регистрационной формы участника
A Поле «краткое название факультета (англ.)» (fac_short_en) регистрационной формы участника
d Поле «название факультета» (fac) регистрационной формы участника
D Поле «название факультета (англ.)» (fac_en) регистрационной формы участника
H Поле phones
b Статус (status)
B Статус (англ.) (status_en)
c Класс/курс (grade)
C Порядковый номер

Например, для вывода английских фамилий трех участников команды может использоваться форматное преобразование %UMp1S, %UMp2S, %UMp3S.