summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Shetye2024-10-16 20:44:03 +0530
committerSunil Shetye2024-10-16 20:51:03 +0530
commitcdc40723190d605822bd569a66ada24a9d3b6d7c (patch)
treee8a47ff0cc53b639180fed99e0b7a282a3e1f9d4
parent70cc65b87ee34f204e1d8e5592993c006738bf9e (diff)
downloadCommon-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.xsl6
-rw-r--r--blocks/eda-frontend/src/utils/GalleryUtils.js18
-rw-r--r--blocks/xcos2xml/ports/port.xsl16
-rwxr-xr-xblocks/xcos2xml/replacesplitblocks.sh4
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"