richter 01/10/28 11:29:53
Modified: . Tag: Embperl2c epdom.c epdom.h
test/cmp2 Tag: Embperl2c error.htm
test/html Tag: Embperl2c table.htm
Log:
Embperl 2 - tree structure rewrite
Revision Changes Path
No revision
No revision
1.4.2.60 +100 -165 embperl/Attic/epdom.c
Index: epdom.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.c,v
retrieving revision 1.4.2.59
retrieving revision 1.4.2.60
diff -u -r1.4.2.59 -r1.4.2.60
--- epdom.c 2001/10/26 06:19:27 1.4.2.59
+++ epdom.c 2001/10/28 19:29:52 1.4.2.60
@@ -9,7 +9,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: epdom.c,v 1.4.2.59 2001/10/26 06:19:27 richter Exp $
+# $Id: epdom.c,v 1.4.2.60 2001/10/28 19:29:52 richter Exp $
#
###################################################################################*/
@@ -130,7 +130,23 @@
}
+void dom_free_size (void * pNode, int nSize)
+ {
+ int nFree = (nSize+15)>>3 ;
+ void * pFree ;
+
+ if (nFree > sizeof (MemFree) / sizeof (void *))
+ mydie ("Node to huge for dom_malloc") ;
+
+ /* --- add to the free list --- */
+ pFree = MemFree[nFree] ;
+ MemFree[nFree] = (tUInt8 *)pNode ;
+ *((tUInt8 * *)pNode) = pFree ;
+ return ;
+ }
+
+
tNodeData * dom_realloc (tNodeData * pNode, size_t nSize)
{
int nOldSize = sizeof (tNodeData) + pNode -> numAttr * sizeof
(tAttrData) ;
@@ -758,7 +774,7 @@
register tRepeatLevelLookupItem * pLookupLevelNodeLevel = &pLookupLevelNode ->
items[nLevel & pLookupLevelNode -> nMask] ;
register tNodeData * pLnNode =
pLookupLevelNodeLevel -> pNode ;
if (!pLnNode)
- return ((struct tNodeData *)(pDomTree -> pLookup[xNode].pLookup)) ;
+ return ((struct tNodeData *)(DomTree_self(pDomTree -> xSourceNdx) ->
pLookup[xNode].pLookup)) ;
if (pLnNode -> nRepeatLevel == nLevel)
return pLnNode ;
while (pLookupLevelNodeLevel = pLookupLevelNodeLevel -> pNext)
@@ -768,7 +784,9 @@
return pLnNode ;
}
}
- return ((struct tNodeData *)(pDomTree -> pLookup[xNode].pLookup)) ;
+
+
+ return ((struct tNodeData *)(DomTree_self(pDomTree -> xSourceNdx) ->
pLookup[xNode].pLookup)) ;
}
@@ -824,6 +842,8 @@
ArrayAdd (&pDomTrees, 1) ;
memset (&pDomTrees[0], 0, sizeof (tDomTree)) ;
ArrayNew (&pFreeDomTrees, 64, sizeof (tIndex)) ;
+
+ return ok ;
}
@@ -1050,6 +1070,7 @@
pOrgDomTree = DomTree_self (xOrgDomTree) ; /* relookup in case it has moved */
pDomTree -> xDocument = pOrgDomTree -> xDocument ;
+ pDomTree -> xSourceNdx= pOrgDomTree -> xNdx ;
pDomTree -> xFilename = pOrgDomTree -> xFilename ;
ArrayClone (&pOrgDomTree -> pLookup, &pDomTree -> pLookup) ;
@@ -1187,8 +1208,10 @@
if (pCompileParent2 -> xNdx == pRunParent -> xNdx)
{
pPrevNode = Node_selfCondCloneNode (pDomTree, pCompileParent, r ->
nCurrRepeatLevel) ;
+ pRunNode = Node_selfCondCloneNode (pDomTree, pRunNode, r ->
nCurrRepeatLevel) ;
pRunNode -> xPrev = pPrevNode -> xNdx ;
pPrevNode -> xNext = pRunNode -> xNdx ;
+ pPrevNode -> xChilds = 0 ;
if (pCurrReq -> bDebug & dbgCheckpoint)
lprintf (pCurrReq, "[%d]Checkpoint: jump forward last child
DomTree=%d Index=%d Node=%d(%d) Line=%d -> Index=%d Node=%d(%d) Line=%d SVs=%d\n",
@@ -1384,15 +1407,32 @@
if (pCheckpointStatus -> xJumpFromNode)
{
- tNodeData * pToChild = Node_self (pDomTree, pCheckpointStatus ->
xJumpToNode) ;
tNodeData * pLastChild = Node_self (pDomTree, pCheckpointStatus ->
xJumpFromNode) ;
tNodeData * pParent = Node_self (pDomTree, pLastChild -> xParent) ;
tNodeData * pFirstChild = Node_self (pDomTree, pParent -> xChilds) ;
+ if (pCheckpointStatus -> xJumpToNode)
+ {
+ tIndex n = ArrayGetSize (pDomTree -> pLookup) ;
+ tIndex i ;
+ for (i = pCheckpointStatus -> xJumpToNode; i < n; i++)
+ {
+ tNodeData * pNode = Node_self (pDomTree, i) ;
+ if (pNode)
+ {
+ if (pCurrReq -> bDebug & dbgCheckpoint)
+ lprintf (pCurrReq, "[%d]Checkpoint: discard all from
checkpoint=%d DomTree=%d remove node %d\n",
+ pCurrReq -> nPid, nRunCheckpoint, r ->
xCurrDomTree, i) ;
+
+ Node_selfRemoveChild (pDomTree, pParent -> xNdx, pNode) ;
+ }
+ }
+ }
+
pFirstChild = Node_selfCondCloneNode (pDomTree, pFirstChild, pFirstChild ->
nRepeatLevel) ;
pFirstChild -> xPrev = pLastChild -> xNdx ;
pLastChild -> xNext = pFirstChild -> xNdx ;
- pToChild -> xPrev = pToChild -> xNdx ; /* mark this with no previous */
+
if (pCurrReq -> bDebug & dbgCheckpoint)
lprintf (pCurrReq, "[%d]Checkpoint: discard all from table Parent=%d
FirstChild=%d LastChild=%d\n",
pCurrReq -> nPid, pParent -> xNdx, pFirstChild -> xNdx,
pLastChild -> xNdx) ;
@@ -2103,21 +2143,27 @@
pParent -> xChilds = pChild -> xNext ;
}
- pPrev -> xNext = pNext -> xNdx ;
- pNext -> xPrev = pPrev -> xNdx ;
+ if (pPrev && pPrev -> xNext == pChild -> xNdx)
+ {
+ tNodeData * pNextL = Node_selfLevel (pDomTree, pChild -> xNext, pChild ->
nRepeatLevel) ;
+ pPrev -> xNext = pNextL -> xNdx ;
+ }
+ if (pNext && pNext -> xPrev == pChild -> xNdx)
+ {
+ tNodeData * pPrevL = Node_selfLevel (pDomTree, pChild -> xPrev, pChild ->
nRepeatLevel) ;
+ pNext -> xPrev = pPrevL -> xNdx ;
+ }
}
pDomTree -> pLookup[pChild -> xNdx].pLookup = NULL ;
- pDomTree -> pLookup[pChild -> xNdx].pLookupLevel = NULL ;
-
{
tRepeatLevelLookup * pLookupLevelNode = pDomTree -> pLookup[pChild ->
xNdx].pLookupLevel ;
if (pLookupLevelNode)
{
register tRepeatLevelLookupItem * pLookupLevelNodeLevel =
&pLookupLevelNode -> items[pChild -> nRepeatLevel & pLookupLevelNode -> nMask] ;
- tRepeatLevelLookupItem * pLast ;
+ tRepeatLevelLookupItem * pLast = NULL ;
while (pLookupLevelNodeLevel && pLookupLevelNodeLevel -> pNode != pChild)
{
pLast = pLookupLevelNodeLevel ;
@@ -2129,14 +2175,14 @@
if (pLast)
{
pLast -> pNext = pLookupLevelNodeLevel -> pNext ;
- dom_free ((tNodeData *)pLookupLevelNodeLevel) ;
+ dom_free_size (pLookupLevelNodeLevel, sizeof
(tRepeatLevelLookupItem)) ;
}
else if (pLookupLevelNodeLevel -> pNext)
{
pLast = pLookupLevelNodeLevel -> pNext ;
pLookupLevelNodeLevel -> pNode = pLast -> pNode ;
pLookupLevelNodeLevel -> pNext = pLast -> pNext ;
- dom_free ((tNodeData *)pLast) ;
+ dom_free_size (pLast, sizeof (tRepeatLevelLookupItem)) ;
}
else
{
@@ -2474,15 +2520,6 @@
pOldChild = Node_selfCondCloneNode (pDomTree, Node_selfLevel (pDomTree,
xOldChild, nRepeatLevel), nRepeatLevel) ;
- if (pOldChild -> bFlags & nflgModified)
- {
- pOldChild -> bFlags |= bFlags ;
- pOldChild = Node_selfCloneNode (pDomTree, pOldChild, nRepeatLevel, 0) ;
- xOldChild = pOldChild -> xNdx ;
- }
- /* *** lprintf (pCurrReq, "rp2--> DomTree New=%d\n", Node_selfDomTree
(pOldChild)) ; */
-
-
if (nEscMode != -1)
{
pOldChild -> nType = (nEscMode & 3)?ntypText:ntypCDATA ;
@@ -2748,23 +2785,13 @@
static tNodeData * Node_toString2 (/*i/o*/ register req * r,
/*in*/ tDomTree * pDomTree,
/*in*/ tNode xNode,
- /*in*/ tRepeatLevel nRepeatLevel,
- /*in*/ int * pOrderNdx)
+ /*in*/ tRepeatLevel * pRepeatLevel)
{
- tNode xFirstNode = xNode ;
- tNode xNextNode ;
- int nOrderNdx = *pOrderNdx ;
- int nOrderIndexNode = -1 ;
- int bCheckpointFound = 0 ;
- tNodeData * pNextNode ;
- tNodeData * pSavedNode = NULL ;
- tNodeData * pSavedNodeFrom = NULL ;
- tNodeData * pLastStartTag = NULL ;
+ tRepeatLevel nRepeatLevel = *pRepeatLevel ;
tNodeData * pNode = Node_selfLevel (pDomTree, xNode, nRepeatLevel) ;
- tNodeData * pFirstNode = pNode ;
if (pNode -> nRepeatLevel)
@@ -2775,10 +2802,8 @@
int o = pDomTree -> xNdx ;
tAttrData * pOrderIndex = Element_selfGetAttribut (pDomTree, pNode, NULL,
xOrderIndexAttr) ;
pDomTree = DomTree_self (Element_selfGetAttribut (pDomTree, pNode, NULL,
xDomTreeAttr) -> xValue) ;
- if (pOrderIndex)
- nOrderNdx = pOrderIndex -> xValue ;
if (pCurrReq -> bDebug & dbgOutput)
- lprintf (r, "[%d]toString: ** Switch from DomTree=%d to new DomTree=%d
(OrderIndex is now %d)\n", r -> nPid, o, pDomTree -> xNdx, nOrderNdx) ;
+ lprintf (r, "[%d]toString: ** Switch from DomTree=%d to new DomTree=%d\n",
r -> nPid, o, pDomTree -> xNdx) ;
}
@@ -2790,113 +2815,6 @@
{
if (pNode -> nRepeatLevel)
nRepeatLevel = pNode -> nRepeatLevel ;
-#if 0
- if (pNode -> bFlags & nflgCheckpoint)
- { /* see how the control flow contiounes */
- if ((xNextNode = pDomTree -> pOrder[nOrderNdx].xFromNode) != pNode -> xNdx
&& xNextNode)
- {
- tNodeData * pNewNode ;
- tNodeData * pNewParent ;
- tNodeData * pNewParent2 = NULL ;
- tNodeData * pParent2 = NULL ;
- tNodeData * pParent ;
-
- if (pCurrReq -> bDebug & dbgOutput)
- lprintf (r, "[%d]toString: ** Skip Node=%d to Node=%d (OrderIndex
%d)\n", r -> nPid, pNode -> xNdx, xNextNode, nOrderNdx) ;
-
- if (xNextNode == -1)
- return NULL ; /* end of flow */
-
- bCheckpointFound = 1 ;
- pSavedNode = NULL ;
- pNewNode = Node_selfLevel (pDomTree, xNextNode, nRepeatLevel) ;
- pNewParent = Node_selfParentNode (pDomTree, pNewNode, nRepeatLevel)
;
- if (pNewParent)
- pNewParent2 = Node_selfParentNode (pDomTree, pNewParent,
nRepeatLevel) ;
-
- if ((pNode -> bFlags & nflgSubCheckpoint) == 0 && (pNewNode -> bFlags
& nflgSubCheckpoint) == 0 &&
- (pParent = pLastStartTag))
- {
- if (pParent)
- pParent2 = Node_selfParentNode (pDomTree, pParent,
nRepeatLevel) ;
- while (pNewParent != pParent && (!pNewParent2 || !pParent2 ||
pNewParent2 != pParent2))
- {
- if (pParent)
- {
- char * pNodeName = Node_selfNodeName (pParent) ;
-
- if (*pNodeName == ':')
- {
- int i = 4 ;
- while (i > 0 && *pNodeName)
- if (*pNodeName++ == ':')
- i-- ;
- if (*pNodeName)
- oputs (r, pNodeName) ;
- }
- else
- {
- oputs (r, "</") ;
- oputs (r, Node_selfNodeName (pParent)) ;
- oputc (r, '>') ;
- }
- }
- else
- {
- lprintf (r, "[%d]WARN: unstructured jump\n", r -> nPid) ;
- break ;
- }
- pParent = Node_selfParentNode (pDomTree, pParent,
nRepeatLevel) ;
- if (pParent)
- pParent2 = Node_selfParentNode (pDomTree, pParent,
nRepeatLevel) ;
- }
- }
- pLastStartTag = NULL ;
- pNode = pNewNode ;
- }
- nOrderNdx++ ;
- }
-
- if (pNode -> bFlags & nflgReturn)
- { /* we should use another node to replace this one */
- tDomTreeOrder * pOrder = pDomTree -> pOrder ;
- int n = ArrayGetSize (pOrder) ;
- int i = nOrderNdx ;
- /* lprintf (r, "[%d]toString: %d = %d -> %d max = %d\n", r -> nPid,
i, pOrder[i].xFromNode, pOrder[i].xToNode, n-1) ; */
-
- while (pOrder[i].xFromNode != pNode -> xNdx && i < n)
- i++ ;
-
- if (i < n)
- {
- if ((xNextNode = pOrder[i].xToNode) != pNode -> xNdx && xNextNode)
- {
- if (pCurrReq -> bDebug & dbgOutput)
- lprintf (r, "[%d]toString: ** Replace Node=%d with Node=%d
(OrderIndex %d, initial %d)\n", r -> nPid, pNode -> xNdx, xNextNode, i, nOrderNdx) ;
- pSavedNode = pNode ;
- pNode = Node_selfLevel (pDomTree, xNextNode, nRepeatLevel) ;
- pSavedNodeFrom = pNode ;
- }
- if (i == nOrderNdx)
- nOrderNdx++, nOrderIndexNode = -1 ;
- else
- nOrderIndexNode = i ;
- }
- else
- {
- if (pCurrReq -> bDebug & dbgOutput)
- {
- lprintf (r, "[%d]toString: Failed to Replace Node=%d DomTree=%d
(initial OrderIndex %d, max = %d)\n", r -> nPid, pNode -> xNdx, pDomTree -> xNdx,
nOrderNdx, n-1) ;
- /* for (i = nOrderNdx; i < n; i++) */
- for (i = 0; i < 5; i++)
- lprintf (r, "[%d]toString: %d = %d -> %d\n", r -> nPid, i,
pOrder[i].xFromNode, pOrder[i].xToNode) ;
- }
- /* ignore this...
- mydie ("Internal Error: Orderindex out of range") ;
- */
- }
- }
-#endif
if (pCurrReq -> bDebug & dbgOutput)
lprintf (r, "[%d]toString: Node=%d(%d) RepeatLevel=%d type=%d flags=%x
text=>%s<= (#%d) SVs=%d\n", r -> nPid, pNode -> xNdx,
xNode_selfLevelNull(pDomTree,pNode), nRepeatLevel, pNode -> nType, pNode -> bFlags,
Ndx2String (pNode -> nText), pNode -> nText, sv_count) ;
@@ -2906,7 +2824,6 @@
else if (pNode -> nType == ntypDocumentFraq)
{
Node_toString (r, pDomTree, pNode -> xNdx, nRepeatLevel) ;
- /* oputs (r, "\r\n") ;*/
}
else if (pNode -> nType == ntypTag || pNode -> nType == ntypStartTag)
{
@@ -2962,10 +2879,6 @@
nNodeNameLen = strlen (pNodeName) ;
}
-
- if (pNode -> nType == ntypStartTag)
- pLastStartTag = pNode ;
-
owrite (r, pNodeStart, nNodeStartLen) ;
owrite (r, pNodeName, nNodeNameLen) ;
if (*pNodeName)
@@ -3001,7 +2914,7 @@
if (pAttr -> bFlags & aflgAttrChilds)
{
- tAttrData * pAttrNode = (tAttrData * )Node_toString2
(r, pDomTree, pAttr -> xNdx, nRepeatLevel, &nOrderNdx) ;
+ tAttrData * pAttrNode = (tAttrData * )Node_toString2
(r, pDomTree, pAttr -> xNdx, &nRepeatLevel) ;
if (pAttrNode && pAttrNode != pAttr)
{
pAttr = pAttrNode ;
@@ -3047,6 +2960,40 @@
owrite (r, s, l);
}
+ Node_toString2 (r, pDomTree, pNode -> xNdx, &nRepeatLevel) ;
+
+ if (pNode -> nType == ntypStartTag && (pNode -> bFlags & nflgIgnore) == 0)
+ {
+ char * pNodeName = Node_selfNodeName (pNode) ;
+
+ if (*pNodeName == ':')
+ {
+ int i = 4 ;
+ while (i > 0 && *pNodeName)
+ if (*pNodeName++ == ':')
+ i-- ;
+ if (*pNodeName)
+ oputs (r, pNodeName) ;
+ }
+ else
+ {
+ oputs (r, "</") ;
+ oputs (r, Node_selfNodeName (pNode)) ;
+ oputc (r, '>') ;
+ }
+ }
+
+
+ pNode = Node_selfNextSibling (pDomTree, pNode, nRepeatLevel) ;
+ }
+
+ *pRepeatLevel = nRepeatLevel ;
+
+ return NULL ;
+ }
+
+
+#if 0
if (nOrderNdx == nOrderIndexNode)
nOrderNdx++ ;
@@ -3056,32 +3003,17 @@
pNextNode = Node_selfFirstChild (pDomTree, pNode, nRepeatLevel) ;
if (pNextNode == NULL)
{
- if (pSavedNode && pSavedNodeFrom == pNode)
- {
- pNode = pSavedNode ;
- pSavedNode = NULL ;
- }
-
-
pNextNode = Node_selfNextSibling (pDomTree, pNode, nRepeatLevel) ;
while (pNextNode == NULL)
{
pNextNode = Node_selfParentNode (pDomTree, pNode, nRepeatLevel) ;
if (pNextNode == NULL || pNextNode == pFirstNode || pNextNode ->
nType == ntypAttr)
{
- *pOrderNdx = nOrderNdx ;
return bCheckpointFound?pNextNode:NULL ;
}
- if (pSavedNode && pSavedNodeFrom == pNextNode)
- {
- pNextNode = pSavedNode ;
- pSavedNode = NULL ;
- }
pNode = pNextNode ;
pNextNode = Node_selfNextSibling (pDomTree, pNextNode, nRepeatLevel) ;
-// if (pNode -> nType == ntypStartTag && (pNode -> bFlags & nflgIgnore)
== 0 &&
-// (pNextNode == NULL || (pNextNode -> bFlags & nflgCheckpoint) == 0
|| pDomTree -> pOrder[nOrderNdx].xFromNode == pNextNode -> xNdx))
if (pNode -> nType == ntypStartTag && (pNode -> bFlags & nflgIgnore)
== 0)
{
char * pNodeName = Node_selfNodeName (pNode) ;
@@ -3112,6 +3044,9 @@
return NULL ;
}
+#endif
+
+
void Node_toString (/*i/o*/ register req * r,
/*in*/ tDomTree * pDomTree,
@@ -3122,7 +3057,7 @@
{
int nOrderNdx = 0 ;
- Node_toString2 (r, pDomTree, xNode, nRepeatLevel, &nOrderNdx) ;
+ Node_toString2 (r, pDomTree, xNode, &nRepeatLevel) ;
}
1.4.2.36 +3 -1 embperl/Attic/epdom.h
Index: epdom.h
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.h,v
retrieving revision 1.4.2.35
retrieving revision 1.4.2.36
diff -u -r1.4.2.35 -r1.4.2.36
--- epdom.h 2001/10/26 06:19:28 1.4.2.35
+++ epdom.h 2001/10/28 19:29:52 1.4.2.36
@@ -9,7 +9,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: epdom.h,v 1.4.2.35 2001/10/26 06:19:28 richter Exp $
+# $Id: epdom.h,v 1.4.2.36 2001/10/28 19:29:52 richter Exp $
#
###################################################################################*/
@@ -215,6 +215,8 @@
/**< \_de Status eines checkpoints w�hrend
dem neu Erzeugen eines DomTree \endif */
tIndex xNdx ; /**< \_en Index of Dom Tree \endif */
/**< \_de Index des Dom Tree \endif */
+ tIndex xSourceNdx ; /**< \_en When a cloned DomTree this is the
index of the source Dom Tree \endif */
+ /**< \_de Wenn dieser Dom Tree gecloned ist,
ist dies der Index des Quellen Dom Tree \endif */
tNode xDocument ; /**< \_en Index of the root document node
\endif */
/**< \_en Index des Wurzelknotenes des
DomTrees \endif */
tNode xLastNode ; /**< last node that was compiled */
No revision
No revision
1.1.2.5 +2 -2 embperl/test/cmp2/Attic/error.htm
Index: error.htm
===================================================================
RCS file: /home/cvs/embperl/test/cmp2/Attic/error.htm,v
retrieving revision 1.1.2.4
retrieving revision 1.1.2.5
diff -u -r1.1.2.4 -r1.1.2.5
--- error.htm 2001/03/07 14:23:54 1.1.2.4
+++ error.htm 2001/10/28 19:29:53 1.1.2.5
@@ -11,8 +11,8 @@
^<br> syntax error at .*?error.htm line \d+, near
"\$error is here "
^<br> syntax error at .*?error.htm line \d+, near "
^<br>
-^<br>
-^<br> }
+^-<br>
+^-<br> }
^\[.*?\]ERR: 24: Line \d+: Error in Perl code: <p>
^ HTML\:\:Embperl.*?<P>
</BODY></HTML>
No revision
No revision
1.4.6.7 +2 -1 embperl/test/html/table.htm
Index: table.htm
===================================================================
RCS file: /home/cvs/embperl/test/html/table.htm,v
retrieving revision 1.4.6.6
retrieving revision 1.4.6.7
diff -u -r1.4.6.6 -r1.4.6.7
--- table.htm 2001/10/26 06:19:28 1.4.6.6
+++ table.htm 2001/10/28 19:29:53 1.4.6.7
@@ -237,7 +237,7 @@
</td>
</tr>
</table>
-
+[#
[-
# build tight loop table with array data, multidimensional 5x6
@array = sort ("Hello", "World", "2000", "Hello", "World", "2000");
@@ -251,3 +251,4 @@
</body>
</html>
+#]
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]