Текст (изначально) есть материализованная человеческая речь. Поэтому в первом приближении структура текста сходна со структурой речи: фразы — слова — фонемы для речи превращаются в фразы — слова — буквы для фонетических систем или в фразы — лексемы — знаки (иероглифы) для нефонетических. Таким образом, элементарной информационной единицей для представления текста является символ текста (буква, фонема, иероглиф).
Хочется иметь возможность изображать и обрабатывать любой текст из тех, что печатаются в книгах. Что именно хочется изображать/кодировать?
Каково общее количество символов, которые хочется изображать:
Всего для исчерпывающего кодирования фонетических систем письменности требуется изображать (кодировать) несколько сотен (а может быть, и более 1000) символов.
Если хочется кодировать нефонетическое письмо (например, иероглифы), то количество потребных кодов увеличивается до тысяч.
American Standard Code for Information Interchange (см. таблицу ниже) использовал 7 битов. Всего можно было изобразить до 128 символов, но из них печатных было 96. 8-й бит использовали по-разному:
Примечание: В дальнейшем изложении все приводимые коды даны в десятичном виде, если система счисления не обозначена явно.
Они занимают часть кодов, начиная с 48, и упорядочены, что позволяет легко:
код_цифры = число + 30h
код_прописной_буквы = порядковый_номер + 40h
код_строчной_буквы = порядковый_номер + 60h
Кроме того, упорядочение позволяет легко программировать сортировку записей, включая и левые пробелы, по алфавиту или по возрастанию чисел.
Арифметические знаки и знаки препинания расположены с алфавитно-цифровыми “вперемешку”.
В технике передачи символьной информации (телеграфии) надо было передавать не только печатные символы, но и дополнительную управляющую информацию, такую, как:
Для этого в таблице ASCII была выделена часть кодов с 0 по 31. Некоторые наиболее употребительные управляющие коды с их обозначениями, пришедшими из техники телеграфной связи, даны в таблице (см. таблицу ниже):
Управляющие символы называют Control-кодами (от английского слова "управление").
На старых примитивных устройствах символьного ввода-вывода — телетайпах — с каждой клавишей был однозначно связан формируемый код. Для формирования же управляющих кодов на телетайпах делалась специальная клавиша Control, удержание которой "обнуляло" три старших бита в коде, формируемом при нажатии "обычной" алфавитно-цифровой клавиши. Например, для ввода управляющего символа ESC с кодом 1Bh надо было нажать клавишу с символом ; (код 3Bh) или клавишу с символом (код 5Bh). Любой из этих кодов при обнуленных трех старших битах давал код 1Bh (символа ESC). Отсюда название клавиши Ctrl на современных клавиатурах.
Среди управляющих символов отметим символы, ипользуемые для расширения количества изображаемых символов. Это прежде всего SO (код 14) и SI (код 15), которые и раньше использовались для переключения наборов символов (например латинского и русского при 7-битовой кодировке).
Кроме того, это символ ESC (код 27). С этого кода начинаются последовательности символов, называемые управляющими. Эти последовательности также используются для переключения кодовых таблиц, а, кроме того, для изменения многих других свойств символьных устройств (клавиатур, дисплеев, принтеров и т.п.). Управляющие языки принтеров (фирм Epson, Hewlett-Paccard) основаны на таких Esc-последовательностях. Принцип формирования Esc-последовательности состоит в следующем: если в потоке кодов встретился код ESC, то несколько следующих кодов не являются кодами изображаемых символов (хотя и могут совпадать с ними), а несут информацию о команде для устройства.
Например, для Epson-совместимых принтеров:
Esc ! n — Эта последовательность из трех символов выдается на принтер в общем потоке символов. Символы ! n не печатаются, а вызывают переключение на встроенный шрифт принтера с номером n (диапазон номеров зависит от модели принтера). Это пример простой команды. Длина последовательности переменная и определяется видом команды. В данном случае символ ! говорит, что требуется переключить шрифт и что еще один символ (байт ) не должен печататься, а несет информацию о номере шрифта.
А вот более сложная команда: Esc & 0 n1nka1d1...dm. Символы & 0 после Esc говорят, что это команда, которая переопределяет конфигурацию символов текущего фонта, загруженного в ОЗУ принтера. Байты n1 и nk задают начальный и конечный коды диапазона символов, очертания которых будут переопределяться. Байт a1 задает размер матрицы, в которой рисуется символ. Байты d1 … dm определяют конфигурацию символов.
Изображение, воспринимаемое зрительным анализатором человека (глазами), представляет собой образ динамической трехмерной сцены.
С течением времени изменяются как свойства предметов и источников (такие, как яркость и отражающие свойства), так и их взаимное положение в пространстве. Глаз воспринимает световое поле E(x,y,t,f); x, y — координаты, t — время, f — частота света. Наиболее сложная задача, которую решают современные средства ВТ при отображении графики, — моделирование динамических трехмерных сцен.
Для перехода от непрерывного представления 2D-изображения должны быть выполнены две операции:
Отметим, что цифровые цветные/полутоновые 2D-изображения, полученные пространственной дискретизацией, являются растровыми, т.е. в них описываются индивидуально характеристики каждого пиксела изображения.
Упрощение растрового многоуровневого можно проводить в двух направлениях:
Когда IBM сделал свой PC, он использовал 8-й бит и расширил кодовую таблицу (см. таблицу ниже).
Коды | Назначение |
128...175 | Иностранные символы |
176...213 | Символы псевдографики |
224...254 | Научные символы |
Использовали символы переключения регистров для замены части символов — латинские буквы заменяли русскими. Так делалось в стандартном ASCII. В поток символов вставляли, например SI и SO, которые трактовались как РУС и ЛАТ. В тексте, где русские и латинские буквы чередуются, — до двух байтов на символ.
В кодировке IBM для русификации были использованы коды из второй половины 256-байтовой кодовой таблицы. При использовании любой конкретной схемы замены часть программ будет работать (отображать на экране) неверно. Существовало и использовалось несколько способов расположения русских символов.
Этот подход — расширение идеи с переключением регистров или кодировок. Могут быть выбраны управляющие последовательности для смены кодовых страниц. Кодовые страницы — стандартизованы международно.
Посмотрите в каталоге DOS файл country.txt.
x-cp866 (DOS)
koi8-r (UNIX)
x-cp1251 (Windows)
iso-8859-5
x-koi8-u (UNIX)
x-cp866-u(DOS)
Для разметки текста могут использоваться два способа. Первый состоит в использовании специальных "не символьных" кодировок, в пределе приводящих к кодированию образа документа как растрового или векторного изображения. Другой способ состоит в добавлении внутрь текста специальных последовательностей символов для разметки, которые должны интерпретироваться не как символы.
Примеры языков/систем кодирования: SGML (Standard Generic Markup Language); HTML (HyperText Markup Language); ; TROFF (Unix); PostScript; PDF.
Postscript был разработан Джоном Уорноком и Чаком Гешке из Adobe Systems в начале 80-х гг. Исходно Postscript использовался как ядро механизма печати компьютеров Apple, но вскоре стал широко распространенным стандартом для большинства компьютерных систем. Интерпретаторы Postscript (в виде программных или аппаратных компонентов) для печати документов присутствуют практически во всех современных компьютерных системах.
В Postscript используется модель изображения текста (или рисунков) на чистой странице. Когда страница готова, она выводится на печать и начинается "прорисовка" изображения очередной страницы. Это есть не что иное, как метод компиляции. Каждый документ Postscript включает в себя программу, которая печатает на принтере (или отображает на экране монитора) следующие друг за другом страницы.
Программа Postscript состоит из четырех компонентов:
Postscript был разработан как архитектура виртуальной машины, предназначенной для создания печатных документов. В большинстве приложений не предполагается, что программист будет читать текст документа Postscript. Тем не менее, синтаксис Postscript достаточно прост и легок для восприятия. Существуют образовательные программы для обучения этому языку программирования. Его синтаксис и семантика отличаются простотой, а доступность программ для отображения на экране документов Postscript означает, что у любого пользователя имеется возможность доступа к интерпретатору виртуальной машины, на которой можно тестировать свои Postscript-программы. Следующим этапом развития Postscript стало создание фирмой Adobe формата PDF (Portable Document Format — формат переносимых документов). PDF -это форма сжатия файлов Postscript. Программы чтения PDF-файлов свободно распространяются по Интернету, а большинство web-браузеров могут отображать PDF-файлы.
Напишем программу, рисующую квадрат со стороной один дюйм, расположенный в центре страницы:
newpath 200 300 moveto 0 72 rlineto 0 -72 rlineto -72 0 rlineto 5 setlinewidth stroke showpage
HTML вовсе не является языком программирования. HTML — это язык разметки. Вы используете HTML для разметки текстового документа, точно так же, как это делает редактор при помощи жирного красного карандаша. Эти пометки служат для определения формата (или стиля), который будет использован при выводе текста на экран монитора.
Если у вас есть желание выделить часть текста на Web-странице жирным шрифтом, вы отметите ее следующим образом:
<B>this text appears bold</B>
Символы <В> "включают" жирный шрифт, а </В> "выключают" его. Они называются тэгами (от англ. tag — ярлык, признак.) и не отображаются на экране. Они лишь предписывают выводить заключенный между ними текст жирным шрифтом.
Стандарт Unicode использует два байта для изображения символа. Количество кодов — 65536. Текстовые файлы становятся вдвое длиннее. Однако многие текстовые редакторы сочетают текст с графикой и используют свои форматы с большим количеством управляющей информации — реальное увеличение объема — около 25%.
Требуется значительный объем ОЗУ для хранения таблицы фонтов. ArialCyr в Windows занимает немного больше 50 кБайт на 256 символов. Фонт для 50000 символов — в 200 раз больше — 10 МБайт ???
Во многих алфавитах символы составные. Немецкий, французский -
буквы с диакритическими знаками.
Иврит и арабский — тексты справа-налево, а числа слева направо. В
арабском не два набора символов (строчные — прописные), а четыре.
В китайском, японском, корейском — десятки тысяч иероглифов ....
1977 год — стандарт ISO-646 на кодирование символов.
1983 год — начало разработки нового стандарта ISO-10646, в котором предполагалось:
В 1987...1991 годах создается некоммерческая организация: консорциум Unicode, в ее техническом комитете ведущие компании, например, Borland, IBM, Lotus, Microsoft, Nowell, Sun и многие другие. Предполагалось, что Unicode к 1995 году станет стандартом "де юре" (см. таблица ниже).
Коды | Описание |
0...127 | Нынешний ASCII |
...8191 | Различные алфавиты (лат., кирилица, увропейские, иврит...) |
8192...12287 | Знаки пунктуации, математические символы, орнаменты |
12288...16383 | Фонетические и др., спец. символы китайского, корейского, японского языков |
16384...59391 | Китайские, корейские, японские иероглифы |
59392...65024 | Блок для частного использования |
65025...65536 | Блок обеспечения совместимости |
Числа представляются кодами символов соответствующих цифр и букв:
-32.655E-3 — 10 байтов с кодами символов.
Такой формат одинаково воспринимается любой вычислительной системой: перед использованием числового значения оно формируется системой путем преобразования из символьной строки во внутреннее представление.
Пример. Формат CSV (comma separated values) — используется многими электронными таблицами для обмена данными.
По уровню имеется только два значения (при преобразовании из полутонового существенным будет выбор порога). В данном случае битовое поле, соответствующее одному пикселу, имеет длину один бит.
а описываем только точки, принадлежащие элементам графических объектов (например для задания окружности указываем координаты центра, радиус и атрибуты рисования — цвет линии и т.п.). Выбирается некоторый набор элементарных объектов (примитивов) — отрезок прямой, окружность, прямоугольник и т.п. Изображение "строится" из этих примитивов. Переход от растрового к векторному представлению (векторизация) является нетривиальной задачей.
Это частный и достаточно простой случай векторного представления. Используются только угловые точки фигур, в промежутках применяется линейная интерполяция, т.е. изображение строится только из отрезков прямых.