richter 00/06/13 07:31:35
Modified: . Tag: Embperl2 epcomp.c epdom.c epdom.h
Embperl Tag: Embperl2 Syntax.pm
test/html Tag: Embperl2 if.htm
Log:
Embperl 2 - Nesting of Attr and If
Revision Changes Path
No revision
No revision
1.1.2.31 +138 -118 embperl/Attic/epcomp.c
Index: epcomp.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epcomp.c,v
retrieving revision 1.1.2.30
retrieving revision 1.1.2.31
diff -u -r1.1.2.30 -r1.1.2.31
--- epcomp.c 2000/06/13 04:52:11 1.1.2.30
+++ epcomp.c 2000/06/13 14:30:48 1.1.2.31
@@ -633,151 +633,171 @@
}
- while (pAttr = Element_selfGetNthAttribut (pDomTree, pNode, nAttr++))
- {
- if (pAttr -> bFlags & aflgAttrChilds)
- {
- tNodeData * pChild = Node_selfFirstChild (pDomTree, (tNodeData *)pAttr)
;
+ nNdx = Node_selfNodeNameNdx (pNode) ;
+
+ if (nNdx <= nMaxEmbperlCmd)
+ pCmd = &pEmbperlCmds[nNdx] ;
+ else
+ pCmd = NULL ;
- while (pChild)
+ if (pCmd == NULL || (pCmd -> bRemoveNode & 8) == 0)
+ { /* calculate attributes before tag, but not when tag should be ignored in
output stream */
+ while (pAttr = Element_selfGetNthAttribut (pDomTree, pNode, nAttr++))
+ {
+ if (pAttr -> bFlags & aflgAttrChilds)
{
- embperl_CompileNode (pDomTree, pChild -> xNdx, bCheckpointPending) ;
- pChild = Node_selfNextSibling (pDomTree, pChild) ;
- }
- }
+ tNodeData * pChild = Node_selfFirstChild (pDomTree, (tNodeData
*)pAttr) ;
- }
+ while (pChild)
+ {
+ embperl_CompileNode (pDomTree, pChild -> xNdx,
bCheckpointPending) ;
+ pChild = Node_selfNextSibling (pDomTree, pChild) ;
+ }
+ }
+ }
+ }
- nNdx = Node_selfNodeNameNdx (pNode) ;
+ if (pCmd)
+ {
+ int i ;
- if (nNdx <= nMaxEmbperlCmd)
- {
- pCmd = &pEmbperlCmds[nNdx] ;
- if (pCmd)
+ for (i = 0; i < pCmd -> numCompileTimePerlCode; i++)
{
- int i ;
-
- for (i = 0; i < pCmd -> numCompileTimePerlCode; i++)
+ if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd ->
sCompileTimePerlCode[i], &pCode))
{
- if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd ->
sCompileTimePerlCode[i], &pCode))
- {
- SV * pSV ;
- int rc ;
+ SV * pSV ;
+ int rc ;
- if (pCode)
- {
- int l = ArrayGetSize (pCode) ;
- if (pCurrReq -> bDebug & dbgParse)
- lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d CompileTimeCode:
%*.*s\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ;
+ if (pCode)
+ {
+ int l = ArrayGetSize (pCode) ;
+ if (pCurrReq -> bDebug & dbgParse)
+ lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d CompileTimeCode:
%*.*s\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ;
- pSV = newSVpvf("package %s ; \n#line %d \"%s\"\n%*.*s",
- pCurrReq -> Buf.sEvalPackage, pNode -> nLinenumber,
sSourcefile, l,l, pCode) ;
- if ((rc = EvalDirect (pCurrReq, pSV)) != ok)
- LogError (pCurrReq, rc) ;
- SvREFCNT_dec(pSV);
- }
- break ;
- }
+ pSV = newSVpvf("package %s ; \n#line %d \"%s\"\n%*.*s",
+ pCurrReq -> Buf.sEvalPackage, pNode -> nLinenumber,
sSourcefile, l,l, pCode) ;
+ if ((rc = EvalDirect (pCurrReq, pSV)) != ok)
+ LogError (pCurrReq, rc) ;
+ SvREFCNT_dec(pSV);
+ }
+ break ;
}
- for (i = 0; i < pCmd -> numPerlCode; i++)
+ }
+ for (i = 0; i < pCmd -> numPerlCode; i++)
+ {
+ if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPerlCode[i],
&pCode))
{
- if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd ->
sPerlCode[i], &pCode))
+ if (pCode)
{
- if (pCode)
+ int l = ArrayGetSize (pCode) ;
+
+ if (l)
{
- int l = ArrayGetSize (pCode) ;
+ char buf [32] ;
- if (l)
+ if (pNode -> nLinenumber)
{
- char buf [32] ;
+ int l2 = sprintf (buf, "#line %d \"", pNode ->
nLinenumber) ;
- if (pNode -> nLinenumber)
- {
- int l2 = sprintf (buf, "#line %d \"", pNode ->
nLinenumber) ;
-
- StringAdd (&pProg, buf, l2) ;
- StringAdd (&pProg, sSourcefile, nSourcefile) ;
- StringAdd (&pProg, "\"\n", 2) ;
- }
-
- if (pCmd -> bPerlCodeRemove)
- nStartCodeOffset = StringAdd (&pProg, " ", 1) ;
- StringAdd (&pProg, pCode, l) ;
- StringAdd (&pProg, "\n", 1) ;
- if (pCurrReq -> bDebug & dbgParse)
- lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Code:
%*.*s\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ;
- }
- }
- break ;
- }
+ StringAdd (&pProg, buf, l2) ;
+ StringAdd (&pProg, sSourcefile, nSourcefile) ;
+ StringAdd (&pProg, "\"\n", 2) ;
+ }
+
+ if (pCmd -> bPerlCodeRemove)
+ nStartCodeOffset = StringAdd (&pProg, " ", 1) ;
+ StringAdd (&pProg, pCode, l) ;
+ StringAdd (&pProg, "\n", 1) ;
+ if (pCurrReq -> bDebug & dbgParse)
+ lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Code: %*.*s\n",
pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber, l, l, pCode) ;
+ }
+ }
+ break ;
}
+ }
- if (pCmd -> bRemoveNode & 6)
- {
- tNodeData * pNextNode = Node_selfFirstChild (pDomTree, pNode) ;
- if (pNextNode == NULL || (pNextNode -> nType != ntypText && pNextNode
-> nType != ntypCDATA))
- pNextNode = Node_selfNextSibling (pDomTree, pNode) ;
- if (pNextNode)
- {
- const char * sText = Node_selfNodeName (pNextNode) ;
- const char * p = sText ;
-
- while (*p && isspace (*p))
- p++;
- if (p > sText && (pCmd -> bRemoveNode & 4))
- p-- ;
-
- if (p > sText)
- { /* remove spaces */
- if (*p)
- Node_replaceChildWithCDATA(pDomTree, -1, pNextNode ->
xNdx, p, strlen (p), -1, 0) ;
- else
- Node_selfRemoveChild(pDomTree, -1, pNextNode) ;
- }
+ if (pCmd -> bRemoveNode & 6)
+ {
+ tNodeData * pNextNode = Node_selfFirstChild (pDomTree, pNode) ;
+ if (pNextNode == NULL || (pNextNode -> nType != ntypText && pNextNode ->
nType != ntypCDATA))
+ pNextNode = Node_selfNextSibling (pDomTree, pNode) ;
+ if (pNextNode)
+ {
+ const char * sText = Node_selfNodeName (pNextNode) ;
+ const char * p = sText ;
+ while (*p && isspace (*p))
+ p++;
+ if (p > sText && (pCmd -> bRemoveNode & 4))
+ p-- ;
+
+ if (p > sText)
+ { /* remove spaces */
+ if (*p)
+ Node_replaceChildWithCDATA(pDomTree, -1, pNextNode -> xNdx, p,
strlen (p), -1, 0) ;
+ else
+ Node_selfRemoveChild(pDomTree, -1, pNextNode) ;
}
- }
- if (pCmd -> sMayJump)
- if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sMayJump,
&sStackValue))
- {
- *bCheckpointPending = -1 ;
- if (pCurrReq -> bDebug & dbgParse)
- lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Set Checkpoint
pending\n", pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber) ;
- }
-
- if (pCmd -> bRemoveNode & 1)
- Node_selfRemoveChild(pDomTree, -1, pNode) ;
- else if (pCmd -> bRemoveNode & 8)
- pNode -> bFlags |= nflgIgnore ;
- if (nCheckpointCodeOffset && (pNode -> bFlags == 0 || (pNode -> bFlags &
nflgIgnore)))
- {
- pProg[nCheckpointCodeOffset] = '#' ;
+ }
+ }
+ if (pCmd -> sMayJump)
+ if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sMayJump,
&sStackValue))
+ {
+ *bCheckpointPending = -1 ;
if (pCurrReq -> bDebug & dbgParse)
- lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Remove Checkpoint\n",
pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber) ;
- nCheckpointCodeOffset = 0 ;
+ lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Set Checkpoint pending\n",
pCurrReq -> nPid, pNode -> xNdx, pNode -> nLinenumber) ;
+ }
+
+ if (pCmd -> bRemoveNode & 1)
+ Node_selfRemoveChild(pDomTree, -1, pNode) ;
+ else if (pCmd -> bRemoveNode & 8)
+ pNode -> bFlags |= nflgIgnore ;
+
+ if (nCheckpointCodeOffset && (pNode -> bFlags == 0 || (pNode -> bFlags &
nflgIgnore)))
+ {
+ pProg[nCheckpointCodeOffset] = '#' ;
+ if (pCurrReq -> bDebug & dbgParse)
+ lprintf (pCurrReq, "[%d]EPCOMP: #%d L%d Remove Checkpoint\n", pCurrReq
-> nPid, pNode -> xNdx, pNode -> nLinenumber) ;
+ nCheckpointCodeOffset = 0 ;
+ }
+
+ if (pCmd -> sStackName && pCmd -> sPushStack)
+ {
+ if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPushStack,
&sStackValue))
+ {
+ embperl_CompilePushStack (pDomTree, pCmd -> sStackName,
sStackValue) ;
}
-
- if (pCmd -> sStackName && pCmd -> sPushStack)
- {
- if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPushStack,
&sStackValue))
- {
- embperl_CompilePushStack (pDomTree, pCmd -> sStackName,
sStackValue) ;
- }
- }
- if (pCmd -> sStackName2 && pCmd -> sPushStack2)
- {
- if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd ->
sPushStack2, &sStackValue))
- {
- embperl_CompilePushStack (pDomTree, pCmd -> sStackName2,
sStackValue) ;
- }
- }
+ }
+ if (pCmd -> sStackName2 && pCmd -> sPushStack2)
+ {
+ if (embperl_CompileToPerlCode (pDomTree, pNode, pCmd -> sPushStack2,
&sStackValue))
+ {
+ embperl_CompilePushStack (pDomTree, pCmd -> sStackName2,
sStackValue) ;
+ }
}
}
- else
- pCmd = NULL ;
+
+ if (pCmd && (pCmd -> bRemoveNode & 8) != 0)
+ { /* calculate attributes after tag when tag should be ignored in output
stream */
+ while (pAttr = Element_selfGetNthAttribut (pDomTree, pNode, nAttr++))
+ {
+ if (pAttr -> bFlags & aflgAttrChilds)
+ {
+ tNodeData * pChild = Node_selfFirstChild (pDomTree, (tNodeData
*)pAttr) ;
+
+ while (pChild)
+ {
+ embperl_CompileNode (pDomTree, pChild -> xNdx,
bCheckpointPending) ;
+ pChild = Node_selfNextSibling (pDomTree, pChild) ;
+ }
+ }
+
+ }
+ }
+
if (pCmd == NULL || pCmd -> bCompileChilds)
{
xChildNode = pNode -> bFlags?Node_firstChild (pDomTree, xNode):0 ;
1.1.2.34 +13 -3 embperl/Attic/epdom.c
Index: epdom.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.c,v
retrieving revision 1.1.2.33
retrieving revision 1.1.2.34
diff -u -r1.1.2.33 -r1.1.2.34
--- epdom.c 2000/06/13 04:52:12 1.1.2.33
+++ epdom.c 2000/06/13 14:30:49 1.1.2.34
@@ -1461,7 +1461,7 @@
-void Node_toString2 (/*in*/ tDomTree * pDomTree,
+tNodeData * Node_toString2 (/*in*/ tDomTree * pDomTree,
/*i/o*/ register req * r,
/*in*/ tNode xNode,
/*in*/ int * pOrderNdx)
@@ -1588,7 +1588,15 @@
if (pAttr -> bFlags & aflgAttrChilds)
{
- Node_toString2 (pDomTree, r, pAttr -> xNdx, &nOrderNdx) ;
+ tAttrData * pAttrNode = (tAttrData * )Node_toString2
(pDomTree, r, pAttr -> xNdx, &nOrderNdx) ;
+ if (pAttrNode && pAttrNode != pAttr)
+ {
+ pAttr = pAttrNode ;
+ pNode = Attr_selfNode(pAttr) ;
+ n = pNode -> numAttr - Attr_selfAttrNum (pAttr) - 1
;
+ if (n < 0)
+ n = 0 ;
+ }
}
else
{
@@ -1639,7 +1647,7 @@
if (pNextNode == NULL || pNextNode == pFirstNode || pNextNode ->
nType == ntypAttr)
{
*pOrderNdx = nOrderNdx ;
- return ;
+ return pNextNode ;
}
pNode = pNextNode ;
@@ -1659,6 +1667,8 @@
}
*pOrderNdx = nOrderNdx ;
+
+ return NULL ;
}
void Node_toString (/*in*/ tDomTree * pDomTree,
1.1.2.25 +5 -0 embperl/Attic/epdom.h
Index: epdom.h
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.h,v
retrieving revision 1.1.2.24
retrieving revision 1.1.2.25
diff -u -r1.1.2.24 -r1.1.2.25
--- epdom.h 2000/06/09 14:23:02 1.1.2.24
+++ epdom.h 2000/06/13 14:30:50 1.1.2.25
@@ -274,6 +274,7 @@
#define Node_selfNodeName(pNode) (Ndx2String (pNode -> nText))
#define Node_nodeName(pDomTree,pNode) (Ndx2String (Node_self
(pDomTree,xNode) -> nText))
#define Node_selfPad(pNode) ((struct tNodePad * )(((tUInt8 *)pNode) - pNode
-> nPadOffset))
+#define Node_selfFirstAttr(pNodePad) ((tAttrData *)(pNode + 1))
tNodeData * Node_selfCloneNode (/*in*/ tDomTree * pDomTree,
/*in*/ tNodeData * pNode,
@@ -335,8 +336,12 @@
/*in*/ int bClone) ;
#define Attr_self(pDomTree,xAttr) ((struct tAttrData *)(pDomTree ->
pLookup[xAttr]))
+#define Attr_selfNode(pAttr) ((struct tNodeData * )(((tUInt8 *)pAttr) -
pAttr -> nNodeOffset))
+#define Attr_selfAttrNum(pAttr) (pAttr - Node_selfFirstAttr
(Attr_selfNode(pAttr)))
char * Attr_selfValue (/*in*/ tDomTree * pDomTree,
/*in*/ struct tAttrData * pAttr,
/*out*/ char * * ppAttr) ;
+
+
No revision
No revision
1.1.2.24 +12 -7 embperl/Embperl/Attic/Syntax.pm
Index: Syntax.pm
===================================================================
RCS file: /home/cvs/embperl/Embperl/Attic/Syntax.pm,v
retrieving revision 1.1.2.23
retrieving revision 1.1.2.24
diff -u -r1.1.2.23 -r1.1.2.24
--- Syntax.pm 2000/06/13 07:59:05 1.1.2.23
+++ Syntax.pm 2000/06/13 14:31:01 1.1.2.24
@@ -10,7 +10,7 @@
# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
# WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
-# $Id: Syntax.pm,v 1.1.2.23 2000/06/13 07:59:05 richter Exp $
+# $Id: Syntax.pm,v 1.1.2.24 2000/06/13 14:31:01 richter Exp $
#
###################################################################################
@@ -489,14 +489,13 @@
%MetaCmds = (
'if' => {
'text' => 'if',
- 'nodetype' => ntypStartTag,
+ 'nodetype' => ntypTag,
'cdatatype' => ntypAttrValue,
'unescape' => 1,
'endtag' => 'endif',
'procinfo' => {
embperl => {
perlcode => 'if (%&<noname>%) { ',
- perlcodeend => '}',
removenode => 10,
mayjump => 1,
}
@@ -504,13 +503,12 @@
},
'else' => {
'text' => 'else',
- 'nodetype' => ntypEndStartTag,
+ 'nodetype' => ntypTag,
'unescape' => 1,
'endtag' => 'endif',
'procinfo' => {
embperl => {
- perlcode => 'else {',
- perlcodeend => '}',
+ perlcode => '} else {',
removenode => 10,
mayjump => 1,
}
@@ -518,7 +516,14 @@
},
'endif' => {
'text' => 'endif',
- 'nodetype' => ntypEndTag,
+ 'nodetype' => ntypTag,
+ 'procinfo' => {
+ embperl => {
+ perlcode => '}',
+ removenode => 10,
+ mayjump => 1,
+ }
+ },
},
'elsif' => {
'text' => 'elsif',
No revision
No revision
1.3.2.4 +2 -2 embperl/test/html/if.htm
Index: if.htm
===================================================================
RCS file: /home/cvs/embperl/test/html/if.htm,v
retrieving revision 1.3.2.3
retrieving revision 1.3.2.4
diff -u -r1.3.2.3 -r1.3.2.4
--- if.htm 2000/06/13 07:59:05 1.3.2.3
+++ if.htm 2000/06/13 14:31:09 1.3.2.4
@@ -344,9 +344,9 @@
##]
<IMG
[$ if (($server_type eq "iii.co.uk")) $]
- SRC="/i/www.[+ $server_type +]/[+ $badge || "iiilogo_narrow_if" +].gif"
WIDTH="[+ $icon_width +]" HEIGHT="[+ $icon_height +]" BORDER="0"
+qqq SRC="/i/www.[+ $server_type +]/[+ $badge || "iiilogo_narrow_if" +].gif"
WIDTH="[+ $icon_width +]" HEIGHT="[+ $icon_height +]" BORDER="0"
[$ else $]
- SRC="/icons/[+ $badge || "iiilogo_narrow_else" +].gif" WIDTH="[+ $icon_width
+]" HEIGHT="[+ $icon_height +]" BORDER="0"
+www SRC="/icons/[+ $badge || "iiilogo_narrow_else" +].gif" WIDTH="[+ $icon_width
+]" HEIGHT="[+ $icon_height +]" BORDER="0"
[$ endif $]
[$ if ($badge eq "iit") $]
ALT="iit logo"
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]