diff options
author | Sunil Shetye | 2024-10-16 20:44:03 +0530 |
---|---|---|
committer | Sunil Shetye | 2024-10-16 20:51:03 +0530 |
commit | cdc40723190d605822bd569a66ada24a9d3b6d7c (patch) | |
tree | e8a47ff0cc53b639180fed99e0b7a282a3e1f9d4 | |
parent | 70cc65b87ee34f204e1d8e5592993c006738bf9e (diff) | |
download | Common-Interface-Project-cdc40723190d605822bd569a66ada24a9d3b6d7c.tar.gz Common-Interface-Project-cdc40723190d605822bd569a66ada24a9d3b6d7c.tar.bz2 Common-Interface-Project-cdc40723190d605822bd569a66ada24a9d3b6d7c.zip |
do not count SplitBlock inside SuperBlockDiagram
replace with the exact XPath
SplitBlock => /XcosDiagram/mxGraphModel/root/SplitBlock
-rw-r--r-- | blocks/eda-frontend/public/splitblock.xsl | 6 | ||||
-rw-r--r-- | blocks/eda-frontend/src/utils/GalleryUtils.js | 18 | ||||
-rw-r--r-- | blocks/xcos2xml/ports/port.xsl | 16 | ||||
-rwxr-xr-x | blocks/xcos2xml/replacesplitblocks.sh | 4 |
4 files changed, 20 insertions, 24 deletions
diff --git a/blocks/eda-frontend/public/splitblock.xsl b/blocks/eda-frontend/public/splitblock.xsl index 115d03d0..15cec80b 100644 --- a/blocks/eda-frontend/public/splitblock.xsl +++ b/blocks/eda-frontend/public/splitblock.xsl @@ -236,7 +236,7 @@ </xsl:for-each> </xsl:template> - <xsl:template match="SplitBlock[position() = 1]"> + <xsl:template match="/XcosDiagram/mxGraphModel/root/SplitBlock[position() = 1]"> <xsl:variable name="InputPort" select="key('k-input', @id)" /> <xsl:variable name="OutputPort" select="key('k-output', @id)" /> @@ -439,7 +439,7 @@ <xsl:template match="ExplicitInputPort | ExplicitOutputPort | ImplicitInputPort | ImplicitOutputPort | ControlPort | CommandPort"> <xsl:variable name="parentId" select="@parent"/> - <xsl:variable name="SPLIT" select="//SplitBlock[position() = 1]"/> + <xsl:variable name="SPLIT" select="/XcosDiagram/mxGraphModel/root/SplitBlock[position() = 1]"/> <xsl:if test="$parentId != $SPLIT/@id" > <xsl:copy> @@ -455,7 +455,7 @@ <xsl:variable name="targetId" select="@target"/> <xsl:variable name="targetElement" select="//*[@id = $targetId]"/> <xsl:variable name="targetElemId" select="$targetElement/@parent"/> - <xsl:variable name="SPLITID" select="//SplitBlock[position() = 1]/@id"/> + <xsl:variable name="SPLITID" select="/XcosDiagram/mxGraphModel/root/SplitBlock[position() = 1]/@id"/> <xsl:if test="$sourceElemId != $SPLITID and $targetElemId != $SPLITID"> <xsl:variable name="tgtsrcid" select="//*[@id = $targetElement/@source]/@parent"/> diff --git a/blocks/eda-frontend/src/utils/GalleryUtils.js b/blocks/eda-frontend/src/utils/GalleryUtils.js index d43f5870..cebfd93c 100644 --- a/blocks/eda-frontend/src/utils/GalleryUtils.js +++ b/blocks/eda-frontend/src/utils/GalleryUtils.js @@ -20,7 +20,13 @@ const getSplitXsltProcessor = async () => { return processor } -const splitBlock = /<SplitBlock /g +const splitBlockXPathCount = 'count(/XcosDiagram/mxGraphModel/root/SplitBlock)' + +const countNodesByXPath = (xpath, contextNode) => { + const result = contextNode.evaluate(xpath, contextNode, null, XPathResult.NUMBER_TYPE, null) + + return result.numberValue +} export const transformXcos = async (xmlDoc) => { const splitProcessor = await getSplitXsltProcessor() @@ -36,9 +42,7 @@ const removeOneSplit = (xmlDoc, count, splitProcessor) => { } xmlDoc = splitProcessor.transformToDocument(xmlDoc) - const dataDump = new XMLSerializer().serializeToString(xmlDoc) - const matches = dataDump.match(splitBlock) - const newCount = matches ? matches.length : 0 + const newCount = countNodesByXPath(splitBlockXPathCount, xmlDoc) if (newCount !== count - 1) { console.error('newCount=', newCount, ', count=', count) throw new Error('count mismatch') @@ -59,8 +63,7 @@ const removeSplits1 = (xmlDoc, splitProcessor) => { return removeNextSplit(xmlDoc, count, splitProcessor) } - const dataDump = new XMLSerializer().serializeToString(xmlDoc) - const count = dataDump.match(splitBlock).length + const count = countNodesByXPath(splitBlockXPathCount, xmlDoc) console.log('count=', count) if (count === 0) { return xmlDoc @@ -87,8 +90,7 @@ const removeSplits = async (xmlDoc, splitProcessor, delay) => { }) } - const dataDump = new XMLSerializer().serializeToString(xmlDoc) - const count = dataDump.match(splitBlock).length + const count = countNodesByXPath(splitBlockXPathCount, xmlDoc) console.log('count=', count) if (count === 0) { return xmlDoc diff --git a/blocks/xcos2xml/ports/port.xsl b/blocks/xcos2xml/ports/port.xsl index 4bba0dd9..0c001c75 100644 --- a/blocks/xcos2xml/ports/port.xsl +++ b/blocks/xcos2xml/ports/port.xsl @@ -1,16 +1,10 @@ -<xsl:template match="ExplicitInputPort | ExplicitOutputPort | ImplicitInputPort | ImplicitOutputPort | ControlPort | CommandPort"> - <xsl:variable name="parentId" select="@parent"/> - <xsl:variable name="parentElement" select="//*[@id = $parentId]"/> + <xsl:template match="ExplicitInputPort | ExplicitOutputPort | ImplicitInputPort | ImplicitOutputPort | ControlPort | CommandPort"> - <!-- <xsl:choose> --> - <!-- <xsl:when test="name($parentElement) != 'SplitBlock'" > --> - <xsl:copy> - <xsl:copy-of select="@*"/> - </xsl:copy> - <!-- </xsl:when> --> - <!-- </xsl:choose> --> + <xsl:copy> + <xsl:copy-of select="@*"/> + </xsl:copy> - </xsl:template> + </xsl:template> <xsl:template name="port"> <xsl:param name="id" /> diff --git a/blocks/xcos2xml/replacesplitblocks.sh b/blocks/xcos2xml/replacesplitblocks.sh index d223c5cd..d703b6fa 100755 --- a/blocks/xcos2xml/replacesplitblocks.sh +++ b/blocks/xcos2xml/replacesplitblocks.sh @@ -68,7 +68,7 @@ if test -n "$INPUTXML"; then Xcos/MxGraphParser.py "$INPUTXML" >&2 fi -count=$( grep -c '<SplitBlock' "$INPUT" ) || : +count=$( grep -c '^ <SplitBlock' "$INPUT" ) || : INPUT1="$BASE-$count.xml" echo "Creating $INPUT1" >&2 cp -f "$INPUT" "$INPUT1" @@ -78,7 +78,7 @@ while test $count -gt 0; do xsltproc "$SPLITXSL" "$INPUT1" > "$TMPFILE1" xmllint --format "$TMPFILE1" > "$TMPFILE2" - count=$( grep -c '<SplitBlock' "$TMPFILE2" ) || : + count=$( grep -c '^ <SplitBlock' "$TMPFILE2" ) || : INPUT1="$BASE-$count.xml" echo "Creating $INPUT1" >&2 cp -f "$TMPFILE2" "$INPUT1" |