Опубликован: 15.06.2004 | Доступ: свободный | Студентов: 2557 / 712 | Оценка: 4.35 / 3.96 | Длительность: 27:47:00
ISBN: 978-5-9556-0011-6
Лекция 13:

Языково-культурная среда

Определение языково-культурной среды

Определение языково-культурной среды помещается в файлы, к описанию формата которых мы и приступаем. Можно считать, что в подобных файлах, называемых далее файлами определения среды, содержится "исходный текст" определения, поскольку, чтобы возыметь действие, они должны быть обработаны утилитой localedef или эквивалентным средством.

Файл определения среды должен содержать определение одной или нескольких категорий, которое может сводиться к директиве copy (см. далее).

Определение категории состоит из заголовка, тела и хвостовика. Заголовок именует категорию; он должен начинаться с символов LC_ . Хвостовик строится из слова END и имени, употребленного в качестве заголовка.

Первому заголовку могут предшествовать строки, переопределяющие символ комментария (по умолчанию – # ) и управляющий символ ( \ ).

Тело категории состоит из одной или нескольких строк, содержащих идентификатор и, возможно, следующие за ним операнды. В качестве идентификатора может выступать как ключевое слово, именующее отдельный элемент языково-культурной среды, так и элемент алфавитного сравнения символов. Ключевые слова должны быть уникальными в пределах среды и не начинаться с префикса LC_.

Операндами могут быть символы, элементы сравнения и цепочки символов. Цепочки символов заключаются в двойные кавычки, операнды разделяются точками с запятой и, возможно, пробелами.

Символы и элементы сравнения представляются определенными ниже именами. Кроме того, символы могут обозначаться естественным образом или кодами; правда, при этом определение языково-культурной среды теряет в мобильности.

Имена символов заключаются в угловые скобки (например, <A>, <z> и т.п.). Такая конструкция должна в точности совпадать с именем, определенным в файле отображения символов, который специфицирует опция -f утилиты localedef.

Реализация должна поддерживать по крайней мере один набор символов и соответствующий файл отображения. Любой набор должен включать в себя все элементы из так называемого мобильного набора символов, определяемого стандартом POSIX-2001 (их имена перечислены в листинге 13.2).

Файл отображения символов имеет довольно простую структуру. Если отвлечься от несущественных деталей, он должен состоять из директив вида

<
имя_символа> <код> <комментарий>

Эти директивы заключаются между строками

Эти директивы заключаются между строками

и

END CHARMAP

Перед строкой CHARMAP может располагаться определение имени набора символов, которое задается директивой

<
code_set_name> имя

Фрагмент возможного описания набора символов KOI8-R показан в листинге 13.1.

<
code_set_name> KOI8-R
<comment_char> %
<escape_char> /
% version: 1.0
% source: RFC1489 via Gabor Kiss <kissg@sztaki.hu>
% and Andrey A. Chernov <ache@astral.msk.su>
CHARMAP
<U0000> /x00 NULL (NUL)
<U0001> /x01 START OF HEADING (SOH)
<U0002> /x02 START OF TEXT (STX)
. . .
<U0020> /x20 SPACE
<U0021> /x21 EXCLAMATION MARK
. . .
<U0030> /x30 DIGIT ZERO
<U0031> /x31 DIGIT ONE
. . .
<U0041> /x41 LATIN CAPITAL LETTER A
<U0042> /x42 LATIN CAPITAL LETTER B
. . .
<U0061> /x61 LATIN SMALL LETTER A
<U0062> /x62 LATIN SMALL LETTER B
. . .
<U044E> /xc0 CYRILLIC SMALL LETTER YU
<U0430> /xc1 CYRILLIC SMALL LETTER A
<U0431> /xc2 CYRILLIC SMALL LETTER BE
. . .
<U0429> /xfd CYRILLIC CAPITAL LETTER SHCHA
<U0427> /xfe CYRILLIC CAPITAL LETTER CHE
<U042A> /xff CYRILLIC CAPITAL LETTER HARD SIGN
END CHARMAP
13.1. Фрагмент файла отображения символов для кодировки KOI8-R.

Опишем теперь формат определения категорий языково-культурной среды.

Категория LC_CTYPE определяет классификацию символов, преобразование регистра и другие атрибуты. К ней относятся следующие ключевые слова: upper (прописные буквы; для POSIX-среды – 26 латинских букв верхнего регистра), lower (строчные буквы), alpha (буквы), digit (цифры), alnum (буквы и цифры), space (пробельные символы; для POSIX-среды в их число, помимо пробела, входят перевод строки, т абуляция и т.п.), cntrl (управляющие символы), punct (знаки пунктуации), graph (печатные символы за исключением пробела), print (печатные символы), xdigit (шестнадцатеричные цифры), blank (для POSIX-средыпробел и табуляция).

С ключевым словом copy задается имя существующей среды, у которой наследуется определение категории. При наличии данной директивы другие ключевые слова недопустимы.

Ключевое слово charclass позволяет задать имена специфичных для определяемой среды классов символов. Каждый такой класс далее должен быть описан в определении категории LC_CTYPE по образу и подобию перечисленных выше стандартных классов.

Ключевое слово toupper открывает определение отображения малых букв в большие. Операнд этого слова представляет собой пару символов, заключенных в скобки и разделенных запятой. Аналогичным образом устроен элемент tolower.

В листинге 13.2 показано определение категории LC_CTYPE для POSIX-среды.

LC_CTYPE
# POSIX-среда, категория LC_CTYPE
# "alpha" по определению есть объединение элементов
"upper" и "lower"
# "alnum" по определению есть объединение элементов
"alpha" и "digit"
# "print" по определению есть объединение элементов
"alnum", "punct" и <space>
# "graph" по определению есть объединение элементов
"alnum" и "punct"
#
upper <A>;<B>;<C>;<D>;<E>;<F>;<G>;<H>;<I>;<J>;<K>;\
<L>;<M>;<N>;<O>;<P>;<Q>;<R>;<S>;<T>;<U>;<V>;<W>;\
<X>;<Y>;<Z>
#
lower <a>;<b>;<c>;<d>;<e>;<f>;<g>;<h>;<i>;<j>;<k>;\
<l>;<m>;<n>;<o>;<p>;<q>;<r>;<s>;<t>;<u>;<v>;<w>;\
<x>;<y>;<z>
#
digit <zero>;<one>;<two>;<three>;<four>;<five>;\
<six>;<seven>;<eight>;<nine>
#
space <tab>;<newline>;<vertical-tab>;<form-feed>;\
<carriage-return>;<space>
#
cntrl <alert>;<backspace>;<tab>;<newline>;\
<vertical-tab>;<form-feed>;<carriage-return>;\
<NUL>;<SOH>;<STX>;<ETX>;<EOT>;<ENQ>;<ACK>;<SO>;\
<SI>;<DLE>;<DC1>;<DC2>;<DC3>;<DC4>;<NAK>;<SYN>;\
<ETB>;<CAN>;<EM>;<SUB>;<ESC>;<IS4>;<IS3>;<IS2>;\
<IS1>;<DEL>
#
punct <exclamation-mark>;<quotation-mark>;\
<number-sign>;<dollar-sign>;<percent-sign>;\
<ampersand>;<apostrophe>;<left-parenthesis>;\
<right-parenthesis>;<asterisk>;<plus-sign>;\
<comma>;<hyphen>;<period>;<slash>;<colon>;\
<semicolon>;<less-than-sign>;<equals-sign>;\
<greater-than-sign>;<question-mark>;\
<commercial-at>;<left-square-bracket>;\
<backslash>;<right-square-bracket>;\
<circumflex>;<underscore>;<grave-accent>;\
<left-curly-bracket>;<vertical-line>;\
<right-curly-bracket>;<tilde>
#
xdigit <zero>;<one>;<two>;<three>;<four>;<five>;\
<six>;<seven>;<eight>;<nine>;<A>;<B>;<C>;<D>;\
<E>;<F>;<a>;<b>;<c>;<d>;<e>;<f>
#
blank <space>;<tab>
#
toupper (<a>,<A>);(<b>,<B>);(<c>,<C>);(<d>,<D>);\
(<e>,<E>);(<f>,<F>);(<g>,<G>);(<h>,<H>);\
(<i>,<I>);(<j>,<J>);(<k>,<K>);(<l>,<L>);(<m>,<M>);\
(<n>,<N>);(<o>,<O>);(<p>,<P>);(<q>,<Q>);(<r>,<R>);\
(<s>,<S>);(<t>,<T>);(<u>,<U>);(<v>,<V>);(<w>,<W>);\
(<x>,<X>);(<y>,<Y>);(<z>,<Z>)
#
tolower (<A>,<a>);(<B>,<b>);(<C>,<c>);(<D>,<d>);\
(<E>,<e>);(<F>,<f>);(<G>,<g>);(<H>,<h>);\
(<I>,<i>);(<J>,<j>);(<K>,<k>);(<L>,<l>);\
(<M>,<m>);(<N>,<n>);(<O>,<o>);(<P>,<p>);\(
<Q>,<q>);(<R>,<r>);(<S>,<s>);(<T>,<t>);\
<U>,<u>);(<V>,<v>);(<W>,<w>);(<X>,<x>);(\
<Y>,<y>);(<Z>,<z>)
END LC_CTYPE
13.2. Определение категории LC_CTYPE для POSIX-среды.
Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?