# Формат файлов gEDA/gaf

Автор: Ales V. Hvezda, ahvezda@geda.seul.org

Настоящий документ распространяется под лицензией GFDL

31 декабря 2003 г.

Перевод: Владимир Жбанов, 2009–2011 гг.

## Обзор

Здесь представлена официальная документация формата файлов gEDA/gaf (gschem and friends). Основным форматом в gEDA/gaf является формат файлов электрических принципиальных схем и символов для них. Файлы с именами, заканчивающимися на `.sch` и `.sym`, являются соответственно файлами схем и символов. Пока в gEDA/gaf нет других типов файлов, настоящий документ будет относиться только к формату файлов схем/символов.

Настоящий документ находится в обращении с версии gEDA/gaf 20040111. Он охватывает версии формата 1 и 2.

Обратите внимание, что данный формат и любые другие форматы файлов, относящиеся к gEDA, находятся под лицензией General Public License (GPL) версии 2.0. Авторские права на формат файлов схем/символов gEDA/gaf принадлежат Ales Hvezda (Copyright (C) 1998-2004 Ales Hvezda).

## Система координат

Все координаты задаются в милах (1/1000 дюйма). Это произвольное решение. Запомните, что в схемах и символах нет понятия физических длин/размеров (только при разработке принципиальных схем).

- Начало координат находится в левом нижнем углу.
- Размеры координатного пространства неограничены, но рекомендуется размещать объекты в пределах (120.0, 90.0) (x, y, дюймов).
- В большинстве случаев желательно использовать положительные координаты x и y, отрицательные значения тоже работают, но их использование не рекомендуется.

Следующий рисунок показывает настройку координатной системы:

Значение по оси X возрастает слева направо, по оси Y — снизу вверх. Координатная система располагается в “пейзажной” ориентации и соответствует листу, повёрнутому длинной стороной вниз.

## Имена файлов

Имена файлов символов заканчиваются на `.sym`. Для имён файлов символов в gEDA/gaf используется только одно соглашение: если есть несколько экземпляров символов с одинаковыми именами (как, например, 7400), то к концу основы имени файла добавляется суффикс -1, -2, -3, … -N . Пример: `7400-1.sym`, `7400-2.sym`, `7400-3.sym`…

Имена файлов схем заканчиваются на `.sch`. Раньше существовало соглашение об именах файлов схем (о добавлении -1 .. -N к основе имени файла), но сейчас оно устарело. Для схем их создатель может выбирать любые осмысленные имена.

## Типы объектов

Файл схемы/символа для gEDA/gaf состоит из следующих частей:

- Версия (v) как первый элемент в файле. Это обязательно.
- Любое количество объектов с правильными данными. Объекты указываются с помощью “типа объекта”.
- Большинство объектов описываются одной строкой, но текстовые — двумя и более.
- Не должно быть пустых строк в конце файла (они игнорируются программами).
- Для всех перечислимых типов в форматах файлов gEDA/gaf поле принимает числовое значение.

Идентификатор типа объекта обозначается одной буквой, он должен находиться в первом столбце. Идентификатор типа объекта является регистрозависимым.

Файлы схем и символов имеют общий формат. Символ — это не что иное, как совокупность примитивных объектов (линий, прямоугольников, окружностей, дуг, текста и выводов). Схема представляет собой набор символов (компонентов), соединений и шин.

Следующие разделы описывают особенности каждого из распознаваемых типов объектов. Каждый раздел содержит название объекта, описание того, в каком типе файла (sch/sym) объект может присутствовать, формат данных, описание каждого отдельного поля, подробности и предостережения для данных полей и, наконец, пример с пояснением.

Информация об индексе цвета (который используется практически для всех объектов) находится в разделе Цвета.

### Версия

Допускается: в файлах схем и символов

`type version fileformat_version`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | v
1 | version | int | Версия gEDA/gaf, в которой был сохранён данный файл
2 | fileformat_version | int | Номер версии формата файла gEDA/gaf

- Тип обозначается буквой “v” в нижнем регистре (как в слове Victor).
- Данный объект должен находиться в каждом файле, используемом или создаваемом программными средствами gEDA/gaf.
- Формат первого поля версии — ГГГГММДД.
- Номер версии не является произвольным временным штампом. Не выдумывайте номер версии, а в противном случае не ожидайте, что программы будут работать правильно.
- “Версия gEDA/gaf, в которой был сохранён данный файл” использовалась во всех версиях gEDA/gaf до 20030921 как версия формата файла. Это поле не должно больше использоваться для определения формата файла. Сейчас оно используется только для информационных целей.
- Начиная с gEDA/gaf версии 20031004 и позже, поле `fileformat_version` используется для определения версии формата файла. Весь код формата файла должен отталкиваться от этого поля.
- `fileformat_version` возрастает при изменении формата файла.
- Исходной точкой для `fileformat_version` было значение 1. Текущее значение — 2.
- `fileformat_version` — это просто целое, без младшего номера.
- Рабочие (нестабильные) версии: 19990601, 19990610, 19990705, 19990829, 19990919, 19991011, 20000220, 20000704, 20001006, 20001217, 20010304, 20010708, 20010722, 20020209, 20020414, 20020527, 20020825, 20021103, 20030223, 20030525, 20030901, 20040111, 20040710, 20041228, 20050313, 20050820, 20060123, 20060824, 20060906, 20061020, 20070216, 20070705, 20070708, 20070818, 20071229, 20080110, 20080127, 20080706, 20081220, 20081221, 20090328, 20090829, 20090830, 20110116, 20110619, 20111231
- Стабильные версии: 20070526, 20070626, 20070902, 20071231, 20080127, 20080929, 20081220, 20081231, 20091004, 20100214, 20110115
- CVS или тестовые версии (не должны использоваться): 20030921, 20031004, 20031019, 20031231, 20050814
- Имейте в виду, что каждая из вышеперечисленных версий могла иметь свою вариацию формата файла. Настоящий документ описывает только последнюю версию формата.

Пример:

    v 20040111 1

### Линия

Допускается: в файлах схем и символов

`type x1 y1 x2 y2 color width capstyle dashstyle dashlength dashspace`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | L
1 | x1 | int/милы | Координата X первой точки
2 | y1 | int/милы | Координата Y первой точки
3 | x2 | int/милы | Координата X второй точки
4 | y2 | int/милы | Координата Y второй точки
5 | color | int | Цветовой индекс
6 | width | int/милы | Толщина линии
7 | capstyle | int | Стиль концов линии
8 | dashstyle | int | Тип линии
9 | dashlength | int/милы | Длина штриха
10 | dashspace | int/милы | Интервал между штрихами

- Параметр `capstyle` перечислимого типа:
  - END NONE = 0 (без стиля)
  - END SQUARE = 1 (квадратные концы)
  - END ROUND = 2 (круглые концы)
- Параметр `dashstyle` перечислимого типа:
  - TYPE SOLID = 0 (сплошная линия)
  - TYPE DOTTED = 1 (пунктир)
  - TYPE DASHED = 2 (штрих)
  - TYPE CENTER = 3 (штрих-пунктир)
  - TYPE PHANTOM = 4 (двойной штрих-пунктир)
- Параметр `dashlength` не используется для типов SOLID и DOTTED. В случае использования данных типов он должен принимать значение -1.
- Параметр `dashspace` не используется для типа SOLID. В случае использования данного типа он должен принимать значение -1.

Пример:

    L 23000 69000 28000 69000 3 40 0 1 -1 75

Сегмент линии от (23000, 69000) до (28000, 69000) с цветовым индексом 3, толщиной 40 милов, без стиля концов, пунктир, интервал между точками 75 милов.

### Изображение

Допускается: в файлах схем и символов

`type x1 y1 width height angle mirrored embedded
filename
[encoded picture data
encoded picture end]`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | G
1 | x | int/милы | Координата X левого нижнего угла
2 | y | int/милы | Координата Y левого нижнего угла
3 | width | int/милы | Ширина изображения
4 | height | int/милы | Высота изображения
5 | angle | int/градусы | Угол поворота изображения
6 | mirrored | char | Зеркально отражённое или нормальное изображение
7 | embedded | char | Внедрённое или ссылка на файл изображения
8 | filename | string | Путь доступа и имя файла для невнедрённого изображения
9 | encoded picture data | string | Изображение, преобразованное в последовательную форму, перекодированное в base64
10 | encoded picture end | string | Строка, содержащая только символ точки

- Данный объект является объектом изображения. Первая строка содержит все параметры изображения, вторая строка представляет собой путь доступа и имя файла изображения. Имя файла не используется, если изображение внедрено.
- Параметр угла поворота изображения `angle` может принимать только одно из следующих значений: 0, 90, 180, 270.
- Параметр `mirrored` перечислимого типа:
  - NOT MIRRORED = 0 (без отражения)
  - MIRRORED = 1 (с отражением)
- Параметр `embedded` перечислимого типа:
  - NOT EMBEDDED = 0 (не внедрённое)
  - EMBEDDED = 1 (внедрённое — пока не поддерживается)
- Поля `encoded picture data` и `encoded picture end` находятся в файле только в случае, если изображение внедрено в схему:
  - `encoded picture data`: Это многострочное поле. Изображение преобразуется в последовательную форму и затем кодируется в base64. Таким образом в закодированных данных используются только печатные символы. Поле содержит результат двух данных операций.
  - `encoded picture end`: Строка, содержащая только один символ точки '.' отмечает конец закодированных данных изображения.

Пример 1:

    G 16900 35800 1400 2175 0 0 0
    ../bitmaps/logo.jpg

Объект изображения с левым нижним углом в (16900, 35800). Ширина изображения 1400 милов, высота 2175 милов. Поворот изображения 0 градусов и оно ни отражённое, ни внедрённое.

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

Пример 2:

    G 16900 35800 1400 2175 0 0 1
    ../bitmaps/logo.jpg
    AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB
    .

Объект изображения с левым нижним углом в (16900, 35800). Ширина изображения 1400 милов, высота 2175 милов.

Поворот изображения 0 градусов, оно не отражённое, но внедрённое.

Путь доступа и имя файла изображения отображается во второй строке. Так как это изображение внедрённое, путь доступа и имя файла не используются.

Закодированные данные изображения являются только примером (это не настоящие данные). Последняя строка, содержащая один символ точки '.' указывает конец закодированных данных.

### Прямоугольник

Допускается: в файлах схем и символов

`type x y width height color width capstyle dashstyle dashlength dashspace filltype fillwidth angle1 pitch1 angle2 pitch2`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | B
1 | x | int/милы | Координата X левого нижнего угла
2 | y | int/милы | Координата Y левого нижнего угла
3 | width | int/милы | Ширина прямоугольника (в направлении x)
4 | height | int/милы | Высота прямоугольника (в направлении y)
5 | color | int | Цветовой индекс
6 | width | int/милы | Толщина линий
7 | capstyle | int/милы | Стиль концов линий
8 | dashstyle | int | Тип линий
9 | dashlength | int/милы | Длина штриха
10 | dashspace | int/милы | Интервал между штрихами
11 | filltype | int | Тип заполнения
12 | fillwidth | int/милы | Толщина линий заполнения
13 | angle1 | int/градусы | Первый угол заполнения
14 | pitch1 | int/милы | Первый шаг/интервал заполнения
15 | angle2 | int/градусы | Второй угол заполнения
16 | pitch2 | int/милы | Второй шаг/интервал заполнения

- Параметр `capstyle` перечислимого типа:
  - END NONE = 0 (без стиля)
  - END SQUARE = 1 (квадратные концы)
  - END ROUND = 2 (круглые концы)
- Параметр `dashstyle` перечислимого типа:
  - TYPE SOLID = 0 (сплошная линия)
  - TYPE DOTTED = 1 (пунктир)
  - TYPE DASHED = 2 (штрих)
  - TYPE CENTER = 3 (штрих-пунктир)
  - TYPE PHANTOM = 4 (двойной штрих-пунктир)
- Параметр `dashlength` не используется для типов SOLID и DOTTED. В случае использования данных типов он должен принимать значение -1.
- Параметр `dashspace` не используется для типа SOLID. В случае использования данного типа он должен принимать значение -1.
- Параметр `filltype` перечислимого типа:
  - FILLING HOLLOW = 0 (без заполнения)
  - FILLING FILL = 1 (сплошное заполнение)
  - FILLING MESH = 2 (сетка)
  - FILLING HATCH = 3 (штриховка)
  - FILLING VOID = 4 (не используется)
- Если значение `filltype` равно 0 (FILLING HOLLOW), то все остальные параметры заполнения должны иметь значение -1.
- Тип заполнения FILLING FILL используется для заполнения сплошным цветом.
- Для типа заполнения FILLING MESH заполнением или штриховкой управляют две пары наклон/интервал.
- Для типа заполнения FILLING HATCH используется только первая пара наклон/интервал.

Пример:

    B 33000 67300 2000 2000 3 60 0 2 75 50 0 -1 -1 -1 -1 -1

Прямоугольник с нижним левым углом в (33000, 67300) шириной и высотой (2000, 2000), цветовой индекс 3, толщина линий 60 милов, без стиля концов, штриховые линии, длина штриха 75 милов, интервал между штрихами 50 милов, без заполнения, остальные параметры не установлены.

### Окружность

Допускается: в файлах схем и символов

`type x y radius color width capstyle dashstyle dashlength dashspace filltype fillwidth angle1 pitch1 angle2 pitch2`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | V
1 | x | int/милы | Координата X центра
2 | y | int/милы | Координата Y центра
3 | radius | int/милы | Радиус окружности
4 | color | int | Цветовой индекс
5 | width | int/милы | Толщина линии окружности
6 | capstyle | int/милы | 0 (не используется)
7 | dashstyle | int | Тип линии
8 | dashlength | int/милы | Длина штриха
9 | dashspace | int/милы | Интервал между штрихами
10 | filltype | int | Тип заполнения
11 | fillwidth | int/милы | Толщина линий заполнения
12 | angle1 | int/градусы | Первый угол заполнения
13 | pitch1 | int/милы | Первый шаг/интервал заполнения
14 | angle2 | int/градусы | Второй угол заполнения
15 | pitch2 | int/милы | Второй шаг/интервал заполнения

- Параметр `dashstyle` перечислимого типа:
  - TYPE SOLID = 0 (сплошная линия)
  - TYPE DOTTED = 1 (пунктир)
  - TYPE DASHED = 2 (штрих)
  - TYPE CENTER = 3 (штрих-пунктир)
  - TYPE PHANTOM = 4 (двойной штрих-пунктир)
- Параметр `dashlength` не используется для типов SOLID и DOTTED. В случае использования данных типов он должен принимать значение -1.
- Параметр `dashspace` не используется для типа SOLID. В случае использования данного типа он должен принимать значение -1.
- Параметр `filltype` перечислимого типа:
  - FILLING HOLLOW = 0 (без заполнения)
  - FILLING FILL = 1 (сплошное заполнение)
  - FILLING MESH = 2 (сетка)
  - FILLING HATCH = 3 (штриховка)
  - FILLING VOID = 4 (не используется)
- Если значение `filltype` равно 0 (FILLING HOLLOW), то все остальные параметры заполнения должны иметь значение -1.
- Тип заполнения FILLING FILL используется для заполнения сплошным цветом.
- Для типа заполнения FILLING MESH заполнением или штриховкой управляют две пары наклон/интервал.
- Для типа заполнения FILLING HATCH используется только первая пара наклон/интервал.

Пример:

    V 38000 67000 900 3 0 0 2 75 50 2 10 20 30 90 50

Окружность с центром в (38000, 67000) и радиусом 900 милов, цветовой индекс 3, толщина линии 0 милов (наименьший размер), без стиля концов, штриховая линия, длина штриха 75 милов, интервал между штрихами 50 милов, заполнение сеткой, линии сетки толщиной 10 милов, первая линия сетки под углом 20 градусов с интервалом в 30 милов, вторая линия сетки под углом 90 градусов с интервалом в 50 милов.

### Дуга

Допускается: в файлах схем и символов

`type x y radius startangle sweepangle color width capstyle dashstyle dashlength dashspace`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | A
1 | x | int/милы | Координата X центра
2 | y | int/милы | Координата Y центра
3 | radius | int/милы | Радиус дуги
4 | startangle | int/градусы | Начальный угол дуги
5 | sweepangle | int/градусы | Угол разворота дуги
6 | color | int | Цветовой индекс
7 | width | int/милы | Толщина линии окружности
8 | capstyle | int | Стиль концов линии
9 | dashstyle | int | Тип линии
10 | dashlength | int/милы | Длина штриха
11 | dashspace | int/милы | Интервал между штрихами

- Угол `startangle` может быть отрицательным, но это не рекомендуется.
- Угол `sweepangle` может быть отрицательным, но это не рекомендуется.
- Параметр `capstyle` перечислимого типа:
  - END NONE = 0 (без стиля)
  - END SQUARE = 1 (квадратные концы)
  - END ROUND = 2 (круглые концы)
- Параметр `dashstyle` перечислимого типа:
  - TYPE SOLID = 0 (сплошная линия)
  - TYPE DOTTED = 1 (пунктир)
  - TYPE DASHED = 2 (штрих)
  - TYPE CENTER = 3 (штрих-пунктир)
  - TYPE PHANTOM = 4 (двойной штрих-пунктир)
- Параметр `dashlength` не используется для типов SOLID и DOTTED. В случае использования данных типов он должен принимать значение -1.
- Параметр `dashspace` не используется для типа SOLID. В случае использования данного типа он должен принимать значение -1.

Пример:

    A 30600 75000 2000 0 45 3 0 0 3 75 50

Дуга с центром в (30600, 75000) и радиусом 2000 милов, начальный угол 0 градусов, угол разворота дуги 45 градусов, цветовой индекс 3, толщина линии 0 милов (наименьший размер), без стиля концов, штрих-пунктир, длина штриха 75 милов, интервал между штрихами 50 милов.

### Текст и атрибуты

В зависимости от контекста текстовые объекты могут играть разные роли. Вне какого-либо окружения они представляют собой строки текста, содержащие какую-либо информацию. Заключённые в фигурные скобки, они интерпретируются как атрибуты. См. раздел Атрибуты.

Допускается: в файлах схем и символов

`type x y color size visibility show_name_value angle alignment num_lines
string line 1
string line 2
string line 3
…
string line N`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | T
1 | x | int/милы | Координата X первой точки
2 | y | int/милы | Координата Y первой точки
3 | color | int | Цветовой индекс
4 | size | int/пункты | Размер текста
5 | visibility | int | Видимость текста
6 | show_name_value | int | Управление видимостью атрибута
7 | angle | int/градусы | Угол поворота текста
8 | alignment | int | Выравнивание/точка привязки текста
9 | num_lines | int | Количество строк текста (начальное значение 1)
10 | string line 1 … N | string | Собственно отдельные строки текста

- Данный объект является многострочным. Первая строка содержит все параметры текста, а последующие содержат собственно текст.
- Должно быть точно `num_lines` строк текста, следующих за строкой T … .
- Максимальная длина отдельных строк текста составляет 1024, но ограничений на количество строк нет.
- Минимальный размер составляет 2 пункта (пункт=1/72 дюйма).
- Максимального размера нет.
- Пара координат является точкой привязки текстового элемента.
- Параметр `visibility` перечислимого типа:
  - INVISIBLE = 0 (невидимый)
  - VISIBLE = 1 (видимый)
- Параметр `show_name_value` перечислимого типа:
  - SHOW NAME VALUE = 0 (показывать имя и значение атрибута)
  - SHOW VALUE = 1 (показывать только значение атрибута)
  - SHOW NAME = 2 (показывать только имя атрибута)
- Параметр `show_name_value` действителен только в случае, если строка является атрибутом (чтобы строка считалась атрибутом, она должна иметь вид: `имя_атрибута=значение`).
- Параметр угла поворота текста `angle` может принимать только одно из следующих значений: 0, 90, 180, 270. При значении 270 всегда будет производиться вертикальный текст.
- Параметр выравнивания/привязки `alignment` управляет относительным положением точки привязки.
- Параметр `alignment` может принимать значения от 0 до 8.
  На следующем рисунке показано действие значений параметра `alignment`.

- Исходное значение параметра `num_lines` всегда равно 1.
  Поле `num_lines` было добавлено начиная с версии 1 формата файла. Предыдущие версии (0 и ранее) поддерживали только однострочные текстовые объекты.
- Горизонтальная черта над текстовыми строками задаётся ограничивающими текст с двух сторон маркерами надчёркивания вида “\_”. Символ обратной косой черты записывается в виде “\\”.

Пример 1:

    T 16900 35800 3 10 1 0 0 0 1
    Text string!

Текстовый объект с точкой привязки в (16900, 35800), цветовой индекс 3, размером 10 пунктов, видимый, флаги атрибута не действуют (объект не является атрибутом), точка привязки в левом нижнем углу, без поворота, строка: Text string!

Пример 2:

    T 16900 35800 3 10 1 0 0 0 5
    Text string line 1
    Text string line 2
    Text string line 3
    Text string line 4
    Text string line 5

Данный текстовый объект подобен указанному в примере выше, но здесь пять строк текста.

Пример 3:

    T 10000 20000 3 10 1 1 8 90 1
    pinlabel=R/\_W\_

Текстовый объект с точкой привязки (10000, 20000), цветовой индекс 3, размером 10 пунктов, видимый, видимо только значение атрибута, точка привязки находится в верхнем правом углу, текст повёрнут на 90 градусов, строка: “R/W”, над буквой “W” горизонтальная черта.

### Соединение

Допускается: ТОЛЬКО в файлах схем

`type x1 y1 x2 y2 color`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | N
1 | x1 | int/милы | Координата X первой точки
2 | y1 | int/милы | Координата Y первой точки
3 | x2 | int/милы | Координата X второй точки
4 | y2 | int/милы | Координата Y второй точки
5 | color | int | Цветовой индекс

- Соединения могут использоваться только в файлах схем.
- Нельзя использовать соединения нулевой длины (они отбрасываются программами).

Пример:

    N 12700 29400 32900 29400 4

Сегмент соединения от (12700, 29400) до (32900, 29400) с цветовым индексом 4.

### Шина

Допускается: ТОЛЬКО в файлах схем

`type x1 y1 x2 y2 color ripperdir`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | U
1 | x1 | int/милы | Координата X первой точки
2 | y1 | int/милы | Координата Y первой точки
3 | x2 | int/милы | Координата X второй точки
4 | y2 | int/милы | Координата Y второй точки
5 | color | int | Цветовой индекс
6 | ripperdir | int | Направление ответвлений от шины

- Значение параметра `ripperdir` для свежесозданной шины устанавливается в 0.
- При первом подключении соединения к шине параметр `ripperdir` принимает значение 1 или -1. Это значение определяет направление символа ответвления (ripper). Направление ответвления для объекта шины остаётся одним и тем же на всё время существования данного объекта.
- Шины могут использоваться только в файлах схем.
- Нельзя использовать шины нулевой длины (они отбрасываются программами).

Пример:

    U 27300 37400 27300 35300 3 0

Сегмент шины от (27300, 37400) до (27300, 35300) с цветовым индексом 3 и без подключения соединений к данному сегменту.

### Вывод

Допускается: ТОЛЬКО в файлах символов

`type x1 y1 x2 y2 color pintype whichend`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | P
1 | x1 | int/милы | Координата X первой точки
2 | y1 | int/милы | Координата Y первой точки
3 | x2 | int/милы | Координата X второй точки
4 | y2 | int/милы | Координата Y второй точки
5 | color | int | Цветовой индекс
6 | pintype | int | Тип вывода
7 | whichend | int | Указывает активный конец

- Параметр `pintype` перечислимого типа:
  - NORMAL PIN = 0
  - BUS PIN = 1 (не используется)
- `whichend` определяет какой конец вывода является точкой соединения. Другие выводы или соединения могут подключаться только к данной точке.
- Значение 0 параметра `whichend` определяет для соединения первую точку вывода, значение 1 — вторую.
- Выводы могут использоваться только в файлах символов.
- Допускается использовать выводы нулевой длины.

Пример:

    P 0 200 200 200 1 0 0

Вывод от (0, 200) до (200, 200) с цветовым индексом 1, обычный вывод, для соединения используется первая точка.

### Компонент

Допускается: ТОЛЬКО в файлах схем

`type x y selectable angle mirror basename`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | C
1 | x | int/милы | Координата X точки привязки
2 | y | int/милы | Координата Y точки привязки
3 | selectable | int | Флаг выделения
4 | angle | int/градусы | Угол поворота компонента
5 | mirror | int | Отражение относительно оси Y
6 | basename | string | Имя файла компонента

- Параметр `selectable` принимает значение 1 для выделяемых, и 0 для невыделяемых компонентов.
- Параметр угла поворота компонента `angle` может принимать только одно из следующих значений: 0, 90, 180, 270.
- Параметр угла поворота `angle` может принимать только положительные значения.
- Значение флага `mirror` равно 0, если компонент не отражён (относительно оси Y).
- Значение флага `mirror` равно 1, если компонент зеркально отражён (относительно оси Y).
- `basename` определяет имя файла компонента. Это имя относительное, то есть не содержит полного пути доступа к данному файлу.

Пример:

    C 18600 19900 1 0 0 7400-1.sym

Компонент с точкой привязки в (18600,19900), выделяемый, без поворота, без отражения, имя файла компонента 7400-1.sym.

### Контур

Допускается: в файлах схем и символов

Действителен: с версии 2 формата файла (выпуск 1.5.1)

`type color width capstyle dashstyle dashlength dashspace filltype fillwidth angle1 pitch1 angle2 pitch2 numlines
path data line 1
path data line 2
path data line 3
…
path data line N`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | H
1 | color | int | Цветовой индекс
2 | width | int/милы | Толщина линий
3 | capstyle | int | Стиль концов линий
4 | dashstyle | int | Тип линий
5 | dashlength | int/милы | Длина штриха
6 | dashspace | int/милы | Интервал между штрихами
7 | filltype | int | Тип заполнения
8 | fillwidth | int/милы | Толщина линий заполнения
9 | angle1 | int/градусы | Первый угол заполнения
10 | pitch1 | int/милы | Первый шаг/интервал заполнения
11 | angle2 | int/градусы | Второй угол заполнения
12 | pitch2 | int/милы | Второй шаг/интервал заполнения
13 | num_lines | int | Количество строк данных контура (начальное значение 1)
14 | path data line 1 … N | path data | Отдельные строки данных контура

- Параметр `capstyle` перечислимого типа:
  - END NONE = 0 (без стиля)
  - END SQUARE = 1 (квадратные концы)
  - END ROUND = 2 (круглые концы)
- Параметр `dashstyle` перечислимого типа:
  - TYPE SOLID = 0 (сплошная линия)
  - TYPE DOTTED = 1 (пунктир)
  - TYPE DASHED = 2 (штрих)
  - TYPE CENTER = 3 (штрих-пунктир)
  - TYPE PHANTOM = 4 (двойной штрих-пунктир)
- Параметр `dashlength` не используется для типов SOLID и DOTTED. В случае использования данных типов он должен принимать значение -1.
- Параметр `dashspace` не используется для типа SOLID. В случае использования данного типа он должен принимать значение -1.
- Параметр `filltype` перечислимого типа:
  - FILLING HOLLOW = 0 (без заполнения)
  - FILLING FILL = 1 (сплошное заполнение)
  - FILLING MESH = 2 (сетка)
  - FILLING HATCH = 3 (штриховка)
  - FILLING VOID = 4 (не используется)
- Если значение `filltype` равно 0 (FILLING HOLLOW), то все остальные параметры заполнения должны иметь значение -1.
- Тип заполнения FILLING FILL используется для заполнения сплошным цветом.
- Для типа заполнения FILLING MESH заполнением или штриховкой управляют две пары наклон/интервал.
- Для типа заполнения FILLING HATCH используется только первая пара наклон/интервал.

- Формат данных контура умышленно выбран подобным формату контуров в стандарте W3C SVG.
- Выпущенное в gEDA подмножество синтаксиса контуров SVG документировано ниже в разделе Данные контура.
- Детали реализации; код libgeda взят из librsvg, библиотеки синтаксического анализа SVG. В результате большая часть синтаксиса контуров SVG читается правильно, однако синтаксис всегда внутренне нормализуется в абсолютные команды `move`, `line`, `bezier curve` и `close-path` (и сохраняется в таком виде).
- Координаты всего контура указываются в стандартной координатной системе gschem.

Пример:

    H 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1 5
    M 410,240
    L 501,200
    L 455,295
    L 435,265
    z

Контур, начинающийся в (410,240), с линиями, начинающимися оттуда и соединяющими точки (501,200), (455,295), (435,265), замыкающийся обратно в исходную точку. Цветовой индекс 3, толщина линий 10 милов, без стиля концов, сплошная. Данные контура содержат 5 строк.

### Шрифт

Допускается: ТОЛЬКО в специальных файлах шрифтов

`type character width flag`

Поз. | Поле | Тип/единица | Описание
--- | --- | --- | ---
# | type | char | F
1 | character | char | Определяемый символ
2 | width | int/милы | Ширина символа (в милах)
3 | flag | int | Специальный флаг пробела

- Это специальный объект, который должен использоваться ТОЛЬКО в файлах определения шрифтов.
- Если определяемый символ шрифта является символом пробела (с кодом 32), то значение флага `flag` должно быть 1, иначе 0.

Пример:

    F 11 1

Выше приведено определение символа пробела в шрифте.

## Цвета

В формате файлов символов и схем gEDA/gaf цвета определяются посредством целочисленного индекса. Соответствие между числом и цветом основывается на типе объекта. Для каждого типа объекта обычно используется один или более цветов. Здесь приведена таблица соответствия цветовых индексов типам объектов:

Индекс | Тип объекта | Примечание
--- | --- | ---
0 | BACKGROUND_COLOR | Фон
1 | PIN_COLOR | Вывод
2 | NET_ENDPOINT_COLOR | Конечная точка соединения
3 | GRAPHIC_COLOR | Графический объект
4 | NET_COLOR | Соединение
5 | ATTRIBUTE_COLOR | Атрибут
6 | LOGIC_BUBBLE_COLOR | Логическая инверсия
7 | GRID_COLOR | Сетка
8 | DETACHED_ATTRIBUTE_COLOR | Неприкреплённый атрибут
9 | TEXT_COLOR | Текст
10 | BUS_COLOR | Шина
11 | SELECT_COLOR | Выделение
12 | BOUNDINGBOX_COLOR | Контур объекта
13 | ZOOM_BOX_COLOR | Контур области масштабирования
14 | STROKE_COLOR | Жесты
15 | LOCK_COLOR | Заблокированный объект
16 | OUTPUT_BACKGROUND_COLOR | Выходной фон
17 | FREESTYLE1_COLOR | Свободный стиль 1
18 | FREESTYLE2_COLOR | Свободный стиль 2
19 | FREESTYLE3_COLOR | Свободный стиль 3
20 | FREESTYLE4_COLOR | Свободный стиль 4
21 | JUNCTION_COLOR | Точка соединения
22 | MESH_GRID_MAJOR_COLOR | Главная штриховка сетки
23 | MESH_GRID_MINOR_COLOR | Второстепенная штриховка сетки

Фактический цвет, связанный с цветовым индексом, определяется на основе используемых инструментов. Объектам обычно назначается соответствующий им цветовой индекс, но допустимо (иногда) назначать цвет, отличный от присущего данному типу объектов.

## Атрибуты

Атрибуты заключаются в фигурные скобки {} и могут быть только текстовыми объектами. Атрибуты представляют собой текстовые элементы вида `имя_атрибута=значение`. Если текст не содержит пары `имя_атрибута=значение`, он не является атрибутом. Атрибуты прикрепляются к предшествующему объекту. Вот пример:

    P 988 500 1300 500 1
    {
    T 1000 570 5 8 1 1 0
    pinseq=3
    T 1000 550 5 8 1 1 0
    pinnumber=3
    }

Данный объект является выводом, имеющим атрибуты `pinnumber=3` и `pinseq=3` (`имя_атрибута=значение`). Внутри фигурных скобок {} может находиться несколько текстовых объектов (T … и текстовая строка обязательны). С версии 20021103 в качестве атрибутов можно использовать только текстовые элементы. Прикрепление других типов объектов в качестве атрибутов не поддерживается.

Можно использовать также атрибуты “верхнего уровня”. Эти атрибуты не прикрепляются ни к какому объекту, а просто представляют собой текстовые объекты вида `имя_атрибута=значение`.

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

## Внедрённые компоненты

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

    C 18600 21500 1 0 0 EMBEDDED555-1.sym
    [
    ...
    ... Embedded primitive objects
    ...
    ]

В примере выше, `555-1.sym` — это компонент. Тег EMBEDDED и [ ] — отличительные характеристики внедрённого компонента. Если требуется отменить внедрение компонента, символ `имя_компонента.sym` должен присутствовать в одной из используемых библиотек.

## Данные контура

Формат данных контуров gEDA/gaf умышленно определён таким образом, чтобы он соответствовал подмножеству таковых в стандарте W3C SVG.

- Детали реализации; код libgeda взят из librsvg, библиотеки синтаксического анализа SVG. В результате большая часть синтаксиса контуров SVG читается правильно, однако синтаксис всегда внутренне нормализуется в абсолютные команды `move`, `line`, `bezier curve` и `close-path` (и сохраняется в таком виде).
- Координаты всего контура указываются в стандартной координатной системе gschem.

- Команды для контуров, выводимые и гарантированно обрабатываемые в gEDA, перечислены в нижеследующей таблице.
  (Текст взят из вышеуказанной спецификации SVG).

- В приведённой ниже таблице используются следующие условные обозначения:
  - (): группировка параметров
  - +: требуется 1 заданный параметр или более

Команда | Название | Параметры | Описание
--- | --- | --- | ---
M (абсолютная) | moveto | (x,y)+ | Начало нового подконтура в заданной координате `(x,y)`. `M` (в верхнем регистре) указывает, что далее следуют абсолютные координаты; `m` (в нижнем регистре) указывает, что далее следуют относительные координаты. Если команда `moveto` в относительных координатах (`m`) является первым элементом контура, её координаты рассматриваются как абсолютные. Если после `moveto` указано несколько пар координат, последующие пары рассматриваются как неявные команды `lineto`.
L (абсолютная) | lineto | (x,y)+ | Вычерчивается линия из текущей точки в точку, заданную координатами `(x,y)`, которая становится новой текущей. `L` (в верхнем регистре) указывает, что далее следуют абсолютные координаты; `l` (в нижнем регистре) указывает, что далее следуют относительные координаты. Для вычерчивания ломаной линии может указываться несколько пар координат. В конце команды новой текущей точкой станет последняя заданная пара координат.
C (абсолютная) | curveto | (x1,y1 x2,y2 x,y)+ | Вычерчивается кривая Безье с кубической интерполяцией из текущей точки в точку `(x,y)`, используя `(x1,y1)` как контрольную точку в начале кривой и `(x2,y2)` как контрольную точку в конце кривой. `C` (в верхнем регистре) указывает, что далее следуют абсолютные координаты; `c` (в нижнем регистре) указывает, что далее следуют относительные координаты. Для вычерчивания сложной кривой Безье может указываться несколько наборов координат. В конце команды новой текущей точкой станет последняя пара координат `(x,y)` сложной кривой.
Z или z | closepath | (нет) | Закрывает текущий подконтур вычерчиванием прямой линии из текущей точки в исходную точку данного подконтура.

- В настоящее время вывод вышеуказанных команд в gEDA производится только в виде версий с абсолютными координатами.
- В настоящее время вывод команд `M`, `L`, `C` в gEDA производится перед каждым набором координат, даже в случаях, если они могли бы быть опущены в соответствии со спецификацией SVG.
- В выводе gEDA между координатами `x,y` помещаются запятые. В соответствии со спецификацией SVG они могут замещаться пробельными символами.
- В настоящее время gEDA не поддерживает более одного подконтура.
- В настоящее время gEDA выводит по одной строке данных контура на команду + набор координат.

Для примера начертим внешний контур символа AND по американскому стандарту. Данные контура:

    M 100,100 L 500,100 C 700,100 800,275 800,400
    C 800,525 700,700 500,700 L 100,700 z

И полная схема:

    v 20080706 1
    H 3 0 0 0 -1 -1 0 2 20 100 -1 -1 6
    M 100,100
    L 500,100
    C 700,100 800,275 800,400
    C 800,525 700,700 500,700
    L 100,700
    z

Здесь показан итоговый контур (с начерченными для иллюстрации их положения контрольными точками):

## История изменений документа

30 ноября 2002 г. | Создан fileformats.tex из fileformats.html.
1 декабря 2002 г. | Продолжена работа над данным документом.
4 октября 2003 г. | Добавлена информация о новом флаге версии формата файла.
19 октября 2003 г. | Добавлено поле `num_lines` для текстового объекта.
2 ноября 2008 г. | Добавлен объект контура, версия формата файла изменена на 2
26 мая, 2011 г. | В таблицы параметров добавлены столбцы позиции