# 機能設計書 27-絵文字サポート

## 概要

本ドキュメントは、Doom Emacsにおける絵文字サポート機能の設計を記述する。emojifyパッケージを使用し、バッファ内の絵文字コード（`:smile:`等）を実際の絵文字画像またはUnicode文字に変換して表示する機能を提供する。

### 本機能の処理概要

**業務上の目的・背景**：現代のコミュニケーションにおいて絵文字は重要な役割を果たしており、ドキュメントやコメント内での絵文字の使用は表現力を豊かにする。本機能により、Emacs内でGitHubスタイル（`:emoji_name:`）やASCIIスタイル（`:)`）の絵文字コードを視覚的な絵文字として表示できる。

**機能の利用シーン**：Markdownファイルの編集、コミットメッセージの作成、コードコメントの編集、ドキュメント作成、チャットアプリケーション（IRC、Slack連携等）での利用。

**主要な処理内容**：
1. バッファ内の絵文字コードの検出
2. 絵文字スタイル（ASCII、GitHub、Unicode）に基づく変換
3. 絵文字画像またはUnicode文字での表示
4. グローバルemojifyモードによる全バッファでの有効化

**関連システム・外部連携**：emojifyパッケージとの連携。

**権限による制御**：本機能は全ユーザーが利用可能であり、権限による制御は行わない。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 25 | Emoji | 主機能 | 絵文字入力・表示支援 |

## 機能種別

UI表示 / テキスト変換

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| emojify-styles | list | No | 有効にする絵文字スタイルのリスト | 'ascii、'github、'unicodeの組み合わせ |
| +ascii | flag | No | ASCIIスタイル絵文字（`:)`等）を有効化 | モジュールフラグ |
| +github | flag | No | GitHubスタイル絵文字（`:smile:`等）を有効化 | モジュールフラグ |
| +unicode | flag | No | Unicode絵文字を有効化 | モジュールフラグ |

### 入力データソース

- バッファ内のテキスト
- モジュールフラグ（+ascii、+github、+unicode）

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 絵文字表示 | image/text | 絵文字画像またはUnicode文字 |

### 出力先

- バッファ内のテキスト表示（オーバーレイ）

## 処理フロー

### 処理シーケンス

```
1. doom-first-buffer-hookの実行
   └─ global-emojify-mode有効化
2. バッファ内絵文字コードの検出
   └─ emojify-stylesに基づくパターンマッチ
3. 絵文字の変換と表示
   └─ オーバーレイによる画像/Unicode表示
```

### フローチャート

```mermaid
flowchart TD
    A[doom-first-buffer-hook] --> B[global-emojify-mode有効化]
    B --> C[バッファ内スキャン]
    C --> D{絵文字コード検出}
    D -->|:smile:等| E[GitHubスタイル処理]
    D -->|:)等| F[ASCIIスタイル処理]
    D -->|Unicode| G[Unicodeスタイル処理]
    E --> H[絵文字表示]
    F --> H
    G --> H
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-27-01 | スタイル選択 | 有効なモジュールフラグに基づいてemojify-stylesを設定 | モジュール初期化時 |
| BR-27-02 | グローバル有効化 | doom-first-buffer-hookでglobal-emojify-modeを有効化 | Emacs起動後最初のバッファ作成時 |

### 計算ロジック

特になし

## データベース操作仕様

本機能はデータベース操作を行わない。

## エラー処理

### エラーケース一覧

エラーケースは特になし

### リトライ仕様

リトライ処理は実装されていない

## トランザクション仕様

該当なし

## パフォーマンス要件

- 絵文字変換はバッファ表示時にオーバーレイとして実行
- 大量の絵文字を含むバッファでは若干のオーバーヘッドが発生する可能性

## セキュリティ考慮事項

- 絵文字画像は信頼できるパッケージソースからのみ読み込み

## 備考

- デフォルトでは全スタイル（ascii、github、unicode）は無効
- 使用するスタイルは明示的にモジュールフラグで指定が必要

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: 設定を理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.el | `modules/ui/emoji/config.el` | emojifyパッケージの設定 |
| 1-2 | packages.el | `modules/ui/emoji/packages.el` | パッケージ依存定義 |

**読解のコツ**: `modulep!`マクロでモジュールフラグの有無をチェックし、`emojify-styles`を動的に構築している。

**主要処理フロー**:
- **3行目**: `use-package! emojify` - emojifyパッケージの設定開始
- **4行目**: `doom-first-buffer`フックでglobal-emojify-mode有効化
- **6-10行目**: モジュールフラグに基づくemojify-styles構築
  - `+ascii`フラグで'asciiスタイル追加
  - `+github`フラグで'githubスタイル追加
  - `+unicode`フラグで'unicodeスタイル追加
- **12行目**: `emojify-set-emoji-styles`でスタイル適用

### プログラム呼び出し階層図

```
doom-first-buffer-hook
    │
    └─ global-emojify-mode
           │
           ├─ emojify-styles (スタイルリスト)
           │      ├─ +ascii → 'ascii
           │      ├─ +github → 'github
           │      └─ +unicode → 'unicode
           │
           └─ emojify-set-emoji-styles
```

### データフロー図

```
[入力]               [処理]                    [出力]

モジュールフラグ ───▶ emojify-styles構築 ───▶ スタイルリスト
       │
       ▼
doom-first-buffer ───▶ global-emojify-mode ───▶ バッファスキャン
                                                     │
バッファテキスト ───────────────────────────────────▶ 絵文字検出
                                                     │
                                                     ▼
                                              オーバーレイ表示
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| config.el | `modules/ui/emoji/config.el` | ソース | メイン設定ファイル |
| packages.el | `modules/ui/emoji/packages.el` | 設定 | パッケージ依存定義 |
