remove open if block after {/if}
This commit is contained in:
parent
788acba66b
commit
86c1676614
@ -85,8 +85,8 @@ function findPlacesToFillInString(str, compartment) {
|
|||||||
* @returns {{startChild: Node, endChild:Node, content: DocumentFragment}}
|
* @returns {{startChild: Node, endChild:Node, content: DocumentFragment}}
|
||||||
*/
|
*/
|
||||||
function extractBlockContent(blockStartNode, blockEndNode) {
|
function extractBlockContent(blockStartNode, blockEndNode) {
|
||||||
console.log('[extractBlockContent] blockStartNode', blockStartNode.textContent)
|
//console.log('[extractBlockContent] blockStartNode', blockStartNode.textContent)
|
||||||
console.log('[extractBlockContent] blockEndNode', blockEndNode.textContent)
|
//console.log('[extractBlockContent] blockEndNode', blockEndNode.textContent)
|
||||||
|
|
||||||
// find common ancestor of blockStartNode and blockEndNode
|
// find common ancestor of blockStartNode and blockEndNode
|
||||||
let commonAncestor
|
let commonAncestor
|
||||||
@ -123,8 +123,8 @@ function extractBlockContent(blockStartNode, blockEndNode) {
|
|||||||
const startChild = startAncestryToCommonAncestor.at(-1)
|
const startChild = startAncestryToCommonAncestor.at(-1)
|
||||||
const endChild = endAncestryToCommonAncestor.at(-1)
|
const endChild = endAncestryToCommonAncestor.at(-1)
|
||||||
|
|
||||||
console.log('[extractBlockContent] startChild', startChild.textContent)
|
//console.log('[extractBlockContent] startChild', startChild.textContent)
|
||||||
console.log('[extractBlockContent] endChild', endChild.textContent)
|
//console.log('[extractBlockContent] endChild', endChild.textContent)
|
||||||
|
|
||||||
// Extract DOM content in a documentFragment
|
// Extract DOM content in a documentFragment
|
||||||
/** @type {DocumentFragment} */
|
/** @type {DocumentFragment} */
|
||||||
@ -178,7 +178,7 @@ function extractBlockContent(blockStartNode, blockEndNode) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
console.log('repeatedPatternArray', repeatedPatternArray.map(n => n.textContent))
|
//console.log('repeatedPatternArray', repeatedPatternArray.map(n => n.textContent))
|
||||||
|
|
||||||
|
|
||||||
for(const sibling of repeatedPatternArray) {
|
for(const sibling of repeatedPatternArray) {
|
||||||
@ -186,7 +186,7 @@ function extractBlockContent(blockStartNode, blockEndNode) {
|
|||||||
contentFragment.appendChild(sibling)
|
contentFragment.appendChild(sibling)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('extractBlockContent contentFragment', contentFragment.textContent)
|
//console.log('extractBlockContent contentFragment', contentFragment.textContent)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
startChild,
|
startChild,
|
||||||
@ -252,9 +252,6 @@ function fillIfBlock(ifOpeningMarkerNode, ifElseMarkerNode, ifClosingMarkerNode,
|
|||||||
.add(startIfThenChild).add(endIfThenChild)
|
.add(startIfThenChild).add(endIfThenChild)
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('chosen fragment', chosenFragment?.textContent)
|
|
||||||
|
|
||||||
|
|
||||||
if(chosenFragment) {
|
if(chosenFragment) {
|
||||||
fillOdtElementTemplate(
|
fillOdtElementTemplate(
|
||||||
chosenFragment,
|
chosenFragment,
|
||||||
@ -410,9 +407,11 @@ export default function fillOdtElementTemplate(rootElement, compartment) {
|
|||||||
let ifBlockConditionExpression
|
let ifBlockConditionExpression
|
||||||
// Traverse "in document order"
|
// Traverse "in document order"
|
||||||
|
|
||||||
|
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
traverse(rootElement, currentNode => {
|
traverse(rootElement, currentNode => {
|
||||||
//console.log('currentlyUnclosedBlocks', currentlyUnclosedBlocks)
|
//console.log('currentlyOpenBlocks', currentlyOpenBlocks)
|
||||||
|
|
||||||
const insideAnOpenBlock = currentlyOpenBlocks.length >= 1
|
const insideAnOpenBlock = currentlyOpenBlocks.length >= 1
|
||||||
|
|
||||||
if(currentNode.nodeType === Node.TEXT_NODE) {
|
if(currentNode.nodeType === Node.TEXT_NODE) {
|
||||||
@ -521,9 +520,9 @@ export default function fillOdtElementTemplate(rootElement, compartment) {
|
|||||||
/**
|
/**
|
||||||
* Looking for {/if}
|
* Looking for {/if}
|
||||||
*/
|
*/
|
||||||
const hasClosingMarker = text.includes(closingIfMarker);
|
const ifClosingMarker = text.includes(closingIfMarker);
|
||||||
|
|
||||||
if(hasClosingMarker) {
|
if(ifClosingMarker) {
|
||||||
if(!insideAnOpenBlock)
|
if(!insideAnOpenBlock)
|
||||||
throw new Error('{/if} without a corresponding {#if}')
|
throw new Error('{/if} without a corresponding {#if}')
|
||||||
|
|
||||||
@ -546,6 +545,8 @@ export default function fillOdtElementTemplate(rootElement, compartment) {
|
|||||||
else {
|
else {
|
||||||
// do nothing because the marker is too deep
|
// do nothing because the marker is too deep
|
||||||
}
|
}
|
||||||
|
|
||||||
|
currentlyOpenBlocks.pop()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -200,8 +200,8 @@ function consolidateMarkers(document){
|
|||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
if(positionedMarkers.length >= 1)
|
//if(positionedMarkers.length >= 1)
|
||||||
console.log('positionedMarkers', positionedMarkers)
|
// console.log('positionedMarkers', positionedMarkers)
|
||||||
|
|
||||||
|
|
||||||
while(consolidatedMarkers.length < positionedMarkers.length) {
|
while(consolidatedMarkers.length < positionedMarkers.length) {
|
||||||
@ -324,7 +324,7 @@ function consolidateMarkers(document){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('consolidatedMarkers', consolidatedMarkers)
|
//console.log('consolidatedMarkers', consolidatedMarkers)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -551,22 +551,7 @@ export default function prepareTemplateDOMTree(document){
|
|||||||
// after consolidateMarkers, each marker is in at most one text node
|
// after consolidateMarkers, each marker is in at most one text node
|
||||||
// (formatting with markers is removed)
|
// (formatting with markers is removed)
|
||||||
|
|
||||||
console.log('document text after consolidateMarkers', document.documentElement.textContent)
|
|
||||||
/*traverse(document, (node) => {
|
|
||||||
if(node.nodeType === Node.TEXT_NODE || node.nodeName.startsWith('text')){
|
|
||||||
console.log('node', node.nodeName, node.textContent)
|
|
||||||
}
|
|
||||||
})*/
|
|
||||||
|
|
||||||
|
|
||||||
isolateMarkerText(document)
|
isolateMarkerText(document)
|
||||||
// after isolateMarkerText, each marker is in exactly one text node
|
// after isolateMarkerText, each marker is in exactly one text node
|
||||||
// (markers are separated from text that was before or after in the same text node)
|
// (markers are separated from text that was before or after in the same text node)
|
||||||
|
|
||||||
console.log('document text after isolateMarkerText', document.documentElement.textContent)
|
|
||||||
/*traverse(document, (node) => {
|
|
||||||
if(node.nodeType === Node.TEXT_NODE || node.nodeName.startsWith('text')){
|
|
||||||
console.log('node', node.nodeName, node.textContent)
|
|
||||||
}
|
|
||||||
})*/
|
|
||||||
}
|
}
|
||||||
@ -6,7 +6,7 @@ import {getOdtTemplate} from '../../scripts/odf/odtTemplate-forNode.js'
|
|||||||
import {fillOdtTemplate, getOdtTextContent} from '../../exports.js'
|
import {fillOdtTemplate, getOdtTextContent} from '../../exports.js'
|
||||||
|
|
||||||
|
|
||||||
test.skip('basic template filling with {#if}', async t => {
|
test('basic template filling with {#if}', async t => {
|
||||||
const templatePath = join(import.meta.dirname, '../fixtures/description-nombre.odt')
|
const templatePath = join(import.meta.dirname, '../fixtures/description-nombre.odt')
|
||||||
const templateContent = `Description du nombre {n}
|
const templateContent = `Description du nombre {n}
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ n est un grand nombre
|
|||||||
|
|
||||||
|
|
||||||
test('weird bug', async t => {
|
test('weird bug', async t => {
|
||||||
const templatePath = join(import.meta.dirname, '../fixtures/weird-if-bug.odt')
|
const templatePath = join(import.meta.dirname, '../fixtures/left-branch-content-and-two-consecutive-ifs.odt')
|
||||||
const templateContent = `Utilisation de sources lumineuses : {#if scientifique.source_lumineuses}Oui{:else}Non{/if}
|
const templateContent = `Utilisation de sources lumineuses : {#if scientifique.source_lumineuses}Oui{:else}Non{/if}
|
||||||
{#if scientifique.source_lumineuses && scientifique.modalités_source_lumineuses }
|
{#if scientifique.source_lumineuses && scientifique.modalités_source_lumineuses }
|
||||||
Modalités d’utilisation de sources lumineuses : {scientifique.modalités_source_lumineuses}
|
Modalités d’utilisation de sources lumineuses : {scientifique.modalités_source_lumineuses}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user