## フォーマッター

フォーマッターは、生データを読みやすいテキストに変換するために使用されます。データにはコロン（:）を使って適用し、チェーンで呼び出すことができます。各フォーマッターの出力が次の入力となる仕組みです。フォーマッターによっては、定数パラメーターや動的パラメーターをサポートしています。

### 概要

#### 1. 構文の説明
フォーマッターの基本的な呼び出し形式は次のとおりです。
```
{d.属性:formatter1:formatter2(...)}
```  
例えば、文字列 `"JOHN"` を `"John"` に変換する例では、まず `lowerCase` を使ってすべての文字を小文字に変換し、次に `ucFirst` で最初の文字を大文字にします。

#### 2. 例
データ：
```json
{
  "name": "JOHN",
  "birthday": "2000-01-31"
}
```
テンプレート：
```
My name is {d.name:lowerCase:ucFirst}. I was born on {d.birthday:formatD(LL)}.
```

#### 3. 結果
レンダリング後の出力は次のとおりです。
```
My name is John. I was born on January 31, 2000.
```

### 定数パラメーター

#### 1. 構文の説明
多くのフォーマッターは、1つまたは複数の定数パラメーターをサポートしています。これらはカンマで区切られ、出力の変更のために丸括弧で囲まれます。例えば、`:prepend(myPrefix)` はテキストの前に「myPrefix」を追加します。  
**注意：** パラメーターにカンマやスペースが含まれる場合は、`prepend('my prefix')` のように、単一引用符で囲む必要があります。

#### 2. 例
テンプレートの例（具体的なフォーマッターの使い方は、それぞれの説明を参照してください）。

#### 3. 結果
出力には、指定されたプレフィックスがテキストの前に追加されます。

### 動的パラメーター

#### 1. 構文の説明
フォーマッターは動的パラメーターもサポートしています。これらのパラメーターはドット（.）で始まり、引用符で囲む必要はありません。  
動的パラメーターを指定する方法は2つあります。
- **絶対JSONパス**：`d.` または `c.` で始まります（ルートデータまたは補足データを参照）。
- **相対JSONパス**：単一のドット（.）で始まり、現在の親オブジェクトからプロパティを検索することを示します。

例えば：
```
{d.subObject.qtyB:add(d.subObject.qtyC)}
```
相対パスとして記述することもできます。
```
{d.subObject.qtyB:add(.qtyC)}
```
上位レベル（親またはそれ以上）のデータにアクセスする必要がある場合は、複数のドットを使用できます。
```
{d.subObject.qtyB:add(..qtyA):add(.qtyC)}
```

#### 2. 例
データ：
```json
{
  "id": 10,
  "qtyA": 20,
  "subObject": {
    "qtyB": 5,
    "qtyC": 3
  },
  "subArray": [{
    "id": 1000,
    "qtyE": 3
  }]
}
```
テンプレートでの使用例：
```
{d.subObject.qtyB:add(d.subObject.qtyC)}      // 結果：8 (5 + 3)
{d.subObject.qtyB:add(.qtyC)}                   // 結果：8
{d.subObject.qtyB:add(..qtyA):add(.qtyC)}        // 結果：28 (5 + 20 + 3)
{d.subArray[0].qtyE:add(..subObject.qtyC)}       // 結果：6 (3 + 3)
```

#### 3. 結果
各例の結果はそれぞれ 8、8、28、6 となります。

> **注意：** カスタムイテレーターや配列フィルターを動的パラメーターとして使用することはできません。例えば：
> ```
> {d.subObject.qtyB:add(..subArray[i].qtyE)}
> {d.subObject.qtyB:add(d.subArray[i].qtyE)}
> ```