From df1ec2fe9490f2949ad2a94677e7132ff4e5b49e Mon Sep 17 00:00:00 2001 From: Marc Durdin Date: Wed, 25 Sep 2024 07:33:42 -0700 Subject: [PATCH] fix(developer): ignore excess whitespace in `` attribute Cherry-pick-of: #12468 Fixes: #12449 --- developer/src/kmc-ldml/src/compiler/layr.ts | 2 +- .../sections/layr/row-keys-whitespace.xml | 18 +++++++++++++ developer/src/kmc-ldml/test/test-layr.ts | 25 +++++++++++++++++++ 3 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml diff --git a/developer/src/kmc-ldml/src/compiler/layr.ts b/developer/src/kmc-ldml/src/compiler/layr.ts index 8056144b25..bc7ee38e1e 100644 --- a/developer/src/kmc-ldml/src/compiler/layr.ts +++ b/developer/src/kmc-ldml/src/compiler/layr.ts @@ -63,7 +63,7 @@ export class LayrCompiler extends SectionCompiler { for (const layer of layers.layer) { const rows = layer.row.map((row) => { const erow: LayrRow = { - keys: row.keys.split(' ').map((id) => sections.strs.allocString(id)), + keys: row.keys.trim().split(/[ \t]+/).map((id) => sections.strs.allocString(id)), }; return erow; }); diff --git a/developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml b/developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml new file mode 100644 index 0000000000..f8d1a629d5 --- /dev/null +++ b/developer/src/kmc-ldml/test/fixtures/sections/layr/row-keys-whitespace.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/developer/src/kmc-ldml/test/test-layr.ts b/developer/src/kmc-ldml/test/test-layr.ts index 32d212a009..bc275d0ea1 100644 --- a/developer/src/kmc-ldml/test/test-layr.ts +++ b/developer/src/kmc-ldml/test/test-layr.ts @@ -129,5 +129,30 @@ describe('layr', function () { ]); }, }, + { + subpath: 'sections/layr/row-keys-whitespace.xml', + callback(sect) { + const layr = sect; + assert.ok(layr); + assert.equal(compilerTestCallbacks.messages.length, 0); + + assert.equal(layr.lists?.length, 1); + const list0 = layr.lists[0]; + assert.ok(list0); + assert.equal(list0.layers.length, 1); + assert.equal(list0.hardware.value, 'us'); + const layer0 = list0.layers[0]; + assert.ok(layer0); + assert.equal(layer0.rows.length, 2); + assert.equal(layer0.id.value, 'base'); + assert.equal(layer0.mod, constants.keys_mod_none); + for(const row of layer0.rows) { + assert.ok(row); + assert.equal(row.keys.length, 2); + assert.equal(row.keys[0]?.value, 'grave'); + assert.equal(row.keys[1]?.value, 'mistake'); + } + }, + }, ]); });