From 3dace612dc08581732d30e162b37c1d69e6d43aa Mon Sep 17 00:00:00 2001 From: "[1000i100] Millicent Billette" <git@1000i100.fr> Date: Thu, 1 Apr 2021 02:29:29 +0200 Subject: [PATCH] WiP: extract branch from dictionary-tree (deprecated) --- src/dictionary-tree.mjs | 24 ++++++++++++++++++++++++ src/dictionary-tree.test.mjs | 18 ++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/dictionary-tree.mjs b/src/dictionary-tree.mjs index c07d603..21f4dc2 100644 --- a/src/dictionary-tree.mjs +++ b/src/dictionary-tree.mjs @@ -131,3 +131,27 @@ export function serialize(treeStruct) { if (isStep(treeStruct)) return treeStruct.step.map(serialize).join(''); throw new Error(`Error: how to serialize ${JSON.stringify(treeStruct)} RAW: ${treeStruct}`); } + +/* +export function extract(treeNavArray,fromTreeWrapped){ + if(!Array.isArray(treeNavArray)) throw new Error(`treeNav: ${JSON.stringify(treeNavArray)} should be an integer array.`); + let extractedTree = ''; + if(treeNavArray.length === 0) return fromTreeWrapped.pop(); + if (typeof fromTreeWrapped[0] === 'string') throw new Error(`invalid treeNav pointer ${JSON.stringify(treeNavArray)} in ${serialize(fromTreeWrapped[0])} no branch ${treeNavArray[0]}.`); + if (Array.isArray(fromTreeWrapped[0])) { + const branch = treeNavArray.shift(); + const extractedTree = fromTreeWrapped[0][branch]; // recursive here ? + //fromTreeWrapped[0] = [].concat(branch>0?fromTreeWrapped[0].slice(0,branch-1):[],fromTreeWrapped[0].slice(branch+1,fromTreeWrapped[0].length)); + return extractedTree; + } + if (isStep(fromTreeWrapped[0])) { + const extractedTree = {step:[]}; + fromTreeWrapped[0].step.forEach() + + f + } + + + return extractedTree; +} +*/ diff --git a/src/dictionary-tree.test.mjs b/src/dictionary-tree.test.mjs index b9ff604..74c4501 100644 --- a/src/dictionary-tree.test.mjs +++ b/src/dictionary-tree.test.mjs @@ -18,3 +18,21 @@ test('build complexe tree with (|) pattern', t => t.is(buildTreeStruct('(a(|b@@@ )); test('serialize tree to a(b|c)', t => t.is(app.serialize({step: ['a', ['b', 'c']]}), 'a(b|c)')); test('serialize incorrect tree throw', t => t.throws(() => app.serialize({plop: ['a']}))); + +const exempleTree = ()=>app.buildTreeStruct('a(b(c|d)|e(f|g|h)ij(k|l)|@@@@m)') +test.skip('extract subtree ae(f|g|h)ij(k|l) from a(b(c|d)|e(f|g|h)ij(k|l)|@@@@m)',t =>{ + const srcTree = exempleTree(); + const treePointer = [1]; + const extractedTree = app.extract(treePointer,[srcTree]); + + t.is(JSON.stringify(extractedTree), expected({step: ['ae', ['f', 'g', 'h'], 'ij']})) + t.is(app.serialize(srcTree), 'a(b(c|d)|@@@@k)') +}); +test.skip('extract subtree aehij from a(b(c|d)|e(f|g|h)ij(k|l)|@@@@m)',t =>{ + const srcTree = exempleTree(); + const treePointer = [1,2]; + const extractedTree = app.extract(treePointer,[srcTree]); + + t.is(extractedTree, 'aehij'); + t.is(app.serialize(srcTree), 'a(b(c|d)|e(f|g)ij|@@@@k)') +}); -- GitLab