idx: 全バリアントを1つのorderに並べ、出力時に取捨して番号を詰める

排他キーも別々の要素として並べる。出力はバリアントを選択した構成を単位とし、
対象外のキーを除いた並びの位置をそのままキー番号にする。同じ配線の排他キーは
選択後に同時には残らないため、番号を共有させる必要がない。
保存したorderは選択で書き換えず、番号の互換性は出力レイアウトごとに扱う。

6d0eba9 で「IDXは番号を共有できる」と書いたが、共有をやめる形に変える。
コミュニティレイアウトの並びを取捨で得られるかは、この方式では未検証のため
IDXのP-1として残す。

Journal: journal/2026-09-22-idx-variant-output.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DKW58HEg8zAQoLrkWByPfD
This commit is contained in:
2026-09-22 18:36:09 +09:00
co-authored by Claude Opus 5
parent c31360a772
commit 76c349fa0c
7 changed files with 128 additions and 70 deletions
+17 -22
View File
@@ -424,8 +424,9 @@ ELC・IDX・MAPはどれもPHYを参照する。ELCはIDXを参照せず、MAP
各フィールドの意味は `IDXレイヤー.md` を正とする。
番号を振るキーの並びだけを持つ。並びの位置がキー番号になるため、欠番・重複・番号の飛びは
構造として起こらない。
全バリアントの対象キーIDを、重複なく1つの並びに持つ。同じ配線を使う排他キーも別々の要素とする。
出力時は選択したバリアントで使わないキーを除き、残った並びの位置を0から連続するキー番号とする。
保存した `order` は変更しない。
### 基本構造
@@ -434,7 +435,7 @@ ELC・IDX・MAPはどれもPHYを参照する。ELCはIDXを参照せず、MAP
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://beyond-kle.org/schemas/idx-layer.json",
"title": "IDX Layer - Key Identification",
"description": "Ordered list of PHY keys; the position in the list is the key number",
"description": "Ordered PHY key IDs across all variants. Output key numbers are contiguous positions after filtering by variant selection",
"type": "object",
"required": ["version", "phyReference", "order"],
"properties": {
@@ -450,20 +451,10 @@ ELC・IDX・MAPはどれもPHYを参照する。ELCはIDXを参照せず、MAP
"order": {
"type": "array",
"uniqueItems": true,
"description": "Each PHY key has its own entry, including mutually exclusive keys wired to the same terminals. Variant selection does not modify this list",
"items": {
"oneOf": [
{
"type": "string",
"description": "Reference to PHY layer key ID"
},
{
"type": "array",
"minItems": 2,
"uniqueItems": true,
"items": { "type": "string" },
"description": "Mutually exclusive variant keys sharing this key number. They must be wired to the same terminals in ELC"
}
]
"type": "string",
"description": "Reference to PHY layer key ID"
}
}
}
@@ -622,7 +613,8 @@ ELC・IDX・MAPはどれもPHYを参照する。ELCはIDXを参照せず、MAP
## 4. MAPレイヤー JSON Schema
キーの参照にはPHYのキーIDを使う。キー番号は参照しない。
配列としての並べ替えは、ファームウェア出力時にIDXの並び順で行う。
配列としての並べ替えは、ファームウェア出力時にバリアント選択後のIDXの並び順で行う。
キー番号と接続先の対応表も同じ並びで生成し、MAPの保存データは変更しない。
### 基本構造
@@ -685,8 +677,8 @@ ELC・IDX・MAPはどれもPHYを参照する。ELCはIDXを参照せず、MAP
### PHY → IDX変換
1. PHYレイヤーからキーのリストを取得
2. 番号を振るキーを選び、並び順を決める
1. PHYレイヤーから全バリアントのキーのリストを取得
2. 番号を振る対象キーを1つの `order` に重複なく並べる。同じ配線の排他キーも別々の要素にする
### PHY → ELC変換
@@ -696,9 +688,12 @@ ELC・IDX・MAPはどれもPHYを参照する。ELCはIDXを参照せず、MAP
### IDX + ELC + MAP → ファームウェア出力
1. ELCの配線から、ターゲットが要求する row / col を割り当て
2. IDXの並び順に従って、MAPのキーコードを配列へ並べ替え
3. VIA/QMK形式への出力
1. PHYのVariantGroupごとにバリアントを選び、共通キーと、祖先を含めて選択されたバリアントのキーを特定
2. IDXの `order` から対象外のキーを除き、残った順序のまま出力用のキー番号を0から連続して割り当て
3. ELCの配線から、ターゲットが要求する row / col を割り当て、手順2の並びでキー番号との対応表を生成
4. 同じ並びでMAPのキーコードを配列へ並べ替え、VIA/QMK形式へ出力
保存したPHY・IDX・ELC・MAPは書き換えない。ELCのLEDチェーンの並び・番号は、このキーの取捨では変わらない。
## 次のステップ