# Структура тела документа

- Human documentation: [https://docs.univer.ai/ru-RU/guides/docs/model/document-body](https://docs.univer.ai/ru-RU/guides/docs/model/document-body)

- Agent Markdown: [https://docs.univer.ai/ru-RU/guides/docs/model/document-body.md](https://docs.univer.ai/ru-RU/guides/docs/model/document-body.md)

- Requested language: `ru-RU`

- Content language: `ru-RU`

- Documentation version: `1.2.0`

- Source: [docs/model/document-body.ru-RU.mdx](https://github.com/dream-num/documentation/blob/dev/content/guides/docs/model/document-body.ru-RU.mdx)

---

## IDocumentBody

`IDocumentBody` хранит основное потоковое содержимое документа Univer Docs.

Сам текст хранится в `dataStream`. Стили и структурная информация хранятся в параллельных массивах и связываются с текстом по индексам.

### Свойства

| Свойство           | Тип                      | Описание                                                                                                                              |
| ------------------ | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| dataStream         | `string`                 | Поток обычного текста тела документа. Абзацы, разрывы разделов, таблицы и пользовательские блоки обозначаются специальными символами. |
| textRuns?          | `ITextRun[]`             | Диапазоны стилей символов.                                                                                                            |
| paragraphs?        | `IParagraph[]`           | Метаданные и стили абзацев.                                                                                                           |
| sectionBreaks?     | `ISectionBreak[]`        | Метаданные разрывов разделов.                                                                                                         |
| customBlocks?      | `ICustomBlock[]`         | Заполнители блоков, определяемых плагинами.                                                                                           |
| tables?            | `ICustomTable[]`         | Маркеры таблиц в теле документа. Определения таблиц хранятся в `IDocumentData.tableSource`.                                           |
| columnGroups?      | `ICustomColumnGroup[]`   | Маркеры групп колонок.                                                                                                                |
| blockRanges?       | `IDocumentBlockRange[]`  | Диапазоны структурированных блоков, таких как выноски, цитаты и блоки кода.                                                           |
| customRanges?      | `ICustomRange[]`         | Специальные диапазоны: гиперссылки, поля, закладки, комментарии, упоминания и диапазоны, определяемые плагинами.                      |
| customDecorations? | `ICustomDecoration[]`    | Диапазоны оформления, например подсветка комментариев.                                                                                |
| payloads?          | `Record<string, string>` | Временные полезные данные для копирования и вставки. Это поле не сохраняется.                                                         |

### dataStream

`dataStream` — источник достоверных данных для текста тела документа. Абзац обычно заканчивается последовательностью `\r\n`.

```typescript
const body: IDocumentBody = {
  dataStream: 'Title\r\nHello Univer\r\n',
  paragraphs: [
    { startIndex: 5, paragraphId: 'p-title' },
    { startIndex: 19, paragraphId: 'p-body' },
  ],
}
```

### Специальные символы

Некоторые элементы документа представлены в `dataStream` управляющими символами, которые средство отрисовки преобразует в соответствующие элементы:

| Символ | Значение                            |
| ------ | ----------------------------------- |
| `\r\n` | Разрыв абзаца                       |
| `\n`   | Разрыв раздела                      |
| `\f`   | Разрыв страницы                     |
| `\v`   | Разрыв колонки                      |
| `\t`   | Табуляция                           |
| `\0`   | Конец документа                     |
| `\b`   | Заполнитель пользовательского блока |

Таблицы и пользовательские диапазоны также используют управляющие символы внутри структуры. При работе с таблицами, ссылками, комментариями и блочными функциями рекомендуется использовать Facade API или команды, а не вводить управляющие символы вручную.

## Связь с IDocumentData

`IDocumentBody` хранит только основной поток документа. Внешние ресурсы хранятся в `IDocumentData`:

* `tableSource` хранит определения таблиц.
* `drawings` хранит изображения и графические объекты.
* `headers` и `footers` содержат собственные объекты `IDocumentBody`.
* `lists` хранит определения списков, на которые ссылаются маркеры абзацев.
* `resources` хранит данные, определяемые плагинами.
