richter 00/05/29 00:34:32
Modified: . Tag: Embperl2 Embperl.xs epcomp.c epdom.c epdom.h
epparse.c
Embperl Tag: Embperl2 Syntax.pm
test/cmp Tag: Embperl2 escape.htm
test/html Tag: Embperl2 input.htm
Log:
- Embperl 2 - Input / Textarea tags
Revision Changes Path
No revision
No revision
1.26.2.11 +19 -6 embperl/Embperl.xs
Index: Embperl.xs
===================================================================
RCS file: /home/cvs/embperl/Embperl.xs,v
retrieving revision 1.26.2.10
retrieving revision 1.26.2.11
diff -u -r1.26.2.10 -r1.26.2.11
--- Embperl.xs 2000/05/26 23:31:03 1.26.2.10
+++ Embperl.xs 2000/05/29 07:34:29 1.26.2.11
@@ -635,7 +635,7 @@
SV * sText
CODE:
IV l ;
- char * s = SvPV (sText, l) ;
+ char * s = SV2String (sText, l) ;
Node_replaceChildWithCDATA (DomTree_self(xDomTree), -1, xOldChild, s, l,
(pCurrReq -> nCurrEscMode & 3)== 3?1 + (pCurrReq -> nCurrEscMode & 4):pCurrReq ->
nCurrEscMode, nflgModified | nflgReturn) ;
pCurrReq -> nCurrEscMode = pCurrReq -> nEscMode ;
pCurrReq -> bEscModeSet = -1 ;
@@ -669,7 +669,7 @@
ppSV = av_fetch (pAV, i, 0) ;
if (ppSV && *ppSV)
{
- s = SvPV (*ppSV, l) ;
+ s = SV2String (*ppSV, l) ;
xNode = Node_appendChild (pDomTree, ntypText, 0, s, l, xOldChild,
0) ;
if (pCurrReq -> nCurrEscMode & 2)
Node_self (pDomTree, xNode) -> bFlags |= nflgEscUrl ;
@@ -683,7 +683,7 @@
}
else
{
- char * s = SvPV (sText, l) ;
+ char * s = SV2String (sText, l) ;
Node_replaceChildWithCDATA (DomTree_self(xDomTree), -1, xOldChild, s, l,
(pCurrReq -> nCurrEscMode & 3) == 3?2 + (pCurrReq -> nCurrEscMode & 4):pCurrReq ->
nCurrEscMode, nflgModified | nflgReturn) ;
}
@@ -704,6 +704,19 @@
void
+embperl_Node_appendChild (xDomTree, xParent, nType, sText)
+ int xDomTree
+ int xParent
+ int nType
+ SV * sText
+CODE:
+ IV nText ;
+ char * sT = SV2String (sText, nText) ;
+ tDomTree * pDomTree = DomTree_self(xDomTree) ;
+ Node_appendChild (pDomTree, nType, 0, sT, nText, xParent, 0) ;
+
+
+void
embperl_DomTree_checkpoint (xDomTree, xChild)
int xDomTree
int xChild
@@ -731,8 +744,8 @@
CODE:
IV nAttr ;
IV nText ;
- char * sT = SvPV (sText, nText) ;
- char * sA = SvPV (sAttr, nAttr) ;
+ char * sT = SV2String (sText, nText) ;
+ char * sA = SV2String (sAttr, nAttr) ;
tDomTree * pDomTree = DomTree_self (xDomTree) ;
Element_selfSetAttribut (pDomTree, Node_self (pDomTree, xNode), sA, nAttr, sT,
nText) ;
@@ -747,7 +760,7 @@
SV * sAttr
CODE:
IV nAttr ;
- char * sA = SvPV (sAttr, nAttr) ;
+ char * sA = SV2String (sAttr, nAttr) ;
tDomTree * pDomTree = DomTree_self (xDomTree) ;
Element_selfRemoveAttribut (pDomTree, Node_self (pDomTree, xNode), sA, nAttr) ;
1.1.2.16 +78 -70 embperl/Attic/epcomp.c
Index: epcomp.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epcomp.c,v
retrieving revision 1.1.2.15
retrieving revision 1.1.2.16
diff -u -r1.1.2.15 -r1.1.2.16
--- epcomp.c 2000/05/26 23:31:04 1.1.2.15
+++ epcomp.c 2000/05/29 07:34:29 1.1.2.16
@@ -161,49 +161,52 @@
{
const char * or ;
const char * eq = strchr (p, ':') ;
- const char * e = eq?eq:q;
+ const char * e = eq && eq < q?eq:q;
int nChildNo = atoi (p) ;
struct tNodeData * pChildNode = Node_selfNthChild (pDomTree, pNode, nChildNo) ;
- const char * sText = Node_selfNodeName(pChildNode) ;
+ const char * sText ;
- if (op == '=' && eq)
+ if (pChildNode)
{
- eq++ ;
- do
+ sText = Node_selfNodeName(pChildNode) ;
+ if (op == '=' && eq)
{
- or = strchr (eq + 1, '|') ;
- e = or?or - 1:q - 1 ;
- if (strncmp (sText, eq, e - eq) == 0)
- break ;
- if (or == NULL)
- return 0 ;
- eq = or + 1 ;
+ eq++ ;
+ do
+ {
+ or = strchr (eq + 1, '|') ;
+ e = or?or - 1:q - 1 ;
+ if (strncmp (sText, eq, e - eq) == 0)
+ break ;
+ if (or == NULL)
+ return 0 ;
+ eq = or + 1 ;
+ }
+ while (or) ;
}
- while (or) ;
- }
- else if (op == '~' && eq)
- {
- eq++ ;
- do
+ else if (op == '~' && eq)
{
- or = strchr (eq + 1, '|') ;
- e = or?or - 1:q - 1 ;
- if (strstrn (sText, eq, e - eq))
- break ;
- if (or == NULL)
- return 0 ;
- eq = or + 1 ;
+ eq++ ;
+ do
+ {
+ or = strchr (eq + 1, '|') ;
+ e = or?or - 1:q - 1 ;
+ if (strstrn (sText, eq, e - eq))
+ break ;
+ if (or == NULL)
+ return 0 ;
+ eq = or + 1 ;
+ }
+ while (or) ;
}
- while (or) ;
- }
- else if (op == '!' && pChildNode)
- {
- return 0 ;
- }
- else if (op == '*' && !pChildNode)
- {
- return 0 ;
+ else if (op == '!' && pChildNode)
+ {
+ return 0 ;
+ }
}
+ else
+ if (op != '!')
+ return 0 ;
if (pChildNode && out)
StringAdd (&pCode, sText, 0) ;
@@ -234,53 +237,58 @@
{
const char * or ;
const char * eq = strchr (p, ':') ;
- const char * e = eq?eq:q;
+ const char * e = eq && eq < q?eq:q;
tAttrData * pChildNode = Element_selfGetAttribut (pDomTree, pNode, p, e - p) ;
- const char * sText = Ndx2String (pChildNode -> xName) ;
+ const char * sText ;
- if (op == '=' && eq)
+
+ if (pChildNode)
{
- eq++ ;
- do
+ if (pChildNode -> bFlags & aflgAttrChilds)
+ sText = Node_selfNodeName (Node_selfFirstChild (pDomTree, (tNodeData
*)pChildNode)) ;
+ else
+ sText = Ndx2String (pChildNode -> xValue) ;
+ if (op == '=' && eq)
{
- or = strchr (eq + 1, '|') ;
- e = or?or - 1:q - 1 ;
- if (strncmp (sText, eq, e - eq) == 0)
- break ;
- if (or == NULL)
- return 0 ;
- eq = or + 1 ;
+ eq++ ;
+ do
+ {
+ or = strchr (eq + 1, '|') ;
+ e = or?or - 1:q - 1 ;
+ if (strncmp (sText, eq, e - eq) == 0)
+ break ;
+ if (or == NULL)
+ return 0 ;
+ eq = or + 1 ;
+ }
+ while (or) ;
}
- while (or) ;
- }
- else if (op == '~' && eq)
- {
- eq++ ;
- do
+ else if (op == '~' && eq)
{
- or = strchr (eq + 1, '|') ;
- e = or?or - 1:q - 1 ;
- if (strstrn (sText, eq, e - eq))
- break ;
- if (or == NULL)
- return 0 ;
- eq = or + 1 ;
+ eq++ ;
+ do
+ {
+ or = strchr (eq + 1, '|') ;
+ e = or?or - 1:q - 1 ;
+ if (strstrn (sText, eq, e - eq))
+ break ;
+ if (or == NULL)
+ return 0 ;
+ eq = or + 1 ;
+ }
+ while (or) ;
}
- while (or) ;
- }
- else if (op == '!' && pChildNode)
- {
- return 0 ;
- }
- else if (op == '*' && !pChildNode)
- {
- return 0 ;
+ else if (op == '!' && pChildNode)
+ {
+ return 0 ;
+ }
}
+ else
+ if (op != '!')
+ return 0 ;
if (pChildNode && out && pChildNode -> xValue != 0)
{
- if (pChildNode -> bFlags & aflgAttrChilds)
- sText = Node_selfNodeName (Node_selfFirstChild (pDomTree, (tNodeData
*)pChildNode)) ;
StringAdd (&pCode, sText, 0) ;
}
else
1.1.2.20 +160 -60 embperl/Attic/epdom.c
Index: epdom.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.c,v
retrieving revision 1.1.2.19
retrieving revision 1.1.2.20
diff -u -r1.1.2.19 -r1.1.2.20
--- epdom.c 2000/05/26 23:31:05 1.1.2.19
+++ epdom.c 2000/05/29 07:34:30 1.1.2.20
@@ -18,6 +18,7 @@
HV * pStringTableHash ; /* Hash to translate strings to index number */
HE * * pStringTableArray ; /* Array with pointers to strings */
+
tDomTree * pDomTrees ;
int nInitialNodePadSize = 196 ;
@@ -275,6 +276,10 @@
HE * pHEKey ;
int nNdx ;
+
+ if (sText == NULL)
+ return 0 ;
+
if ((ppSV = hv_fetch (pStringTableHash, (char *)sText, nLen, 0)) != NULL)
if (*ppSV != NULL && SvTYPE (*ppSV) == SVt_IV)
return SvIV (*ppSV) ;
@@ -308,10 +313,31 @@
int DomInit (void)
{
+ SV * pSVKey ;
+ SV * pSVNdx ;
+ HE * pHEKey ;
+
pStringTableHash = newHV () ;
ArrayNew (&pStringTableArray, 128, sizeof (HE *)) ;
- String2Ndx ("", 0) ;
+
+ ArrayAdd (&pStringTableArray, 2) ;
+ /* NULL */
+ pSVNdx = newSViv (0) ;
+ SvREFCNT_inc (pSVNdx) ;
+ pSVKey = newSVpvn ("", 0) ;
+ pHEKey = hv_store_ent (pStringTableHash, pSVKey, pSVNdx, 0) ;
+ pStringTableArray[0] = pHEKey ;
+
+ /* "" */
+ pSVNdx = newSViv (1) ;
+ SvREFCNT_inc (pSVNdx) ;
+ pSVKey = newSVpvn ("", 0) ;
+ pHEKey = hv_store_ent (pStringTableHash, pSVKey, pSVNdx, 0) ;
+ pStringTableArray[1] = pHEKey ;
+
+ numStr+=2 ;
+
xNoName = String2Ndx ("<noname>", 8) ;
ArrayNew (&pDomTrees, 16, sizeof (tDomTree)) ;
@@ -479,13 +505,19 @@
static struct tNodePad * NewPad (/*in*/ tDomTree * pDomTree,
- /*in*/ tIndex xParent)
+ /*in*/ tIndex xParent,
+ /*in*/ int nSize)
{
tIndex xNdx = ArrayAdd (&pDomTree -> pLookup, 1) ;
struct tNodePad * pChilds ;
- if ((pDomTree -> pLookup[xNdx] = pChilds = dom_malloc (nInitialNodePadSize)) ==
NULL)
+ if (nSize == 0)
+ nSize = nInitialNodePadSize ;
+ else
+ nSize = (nSize + sizeof (struct tNodePad) / nInitialNodePadSize + 1) *
nInitialNodePadSize ;
+
+ if ((pDomTree -> pLookup[xNdx] = pChilds = dom_malloc (nSize)) == NULL)
return NULL ;
pChilds -> nType = ntypPad ;
@@ -539,6 +571,56 @@
}
+/* ------------------------------------------------------------------------ */
+/* */
+/* NodePad_splitPad */
+/* */
+/* Split a pad into two */
+/* */
+/* ------------------------------------------------------------------------ */
+
+tNodePad * NodePad_splitPad (/*in*/ tDomTree * pDomTree,
+ /*in*/ tNodePad * pPad,
+ /*in*/ tNodeData * pNewFirstNode,
+ /*in*/ int nNewNodeSize)
+
+ {
+ struct tNodePad * pFirst;
+ struct tNodePad * pNext = NewPad (pDomTree, pPad -> xParent,
nNewNodeSize) ;
+ struct tNodeData * pNewNode = NodePad_selfFirstChild (pDomTree, pNext) ;
+ int nCopySize ;
+ int nOffset ;
+
+
+ pNext -> xPrev = pPad -> xNdx ;
+ pNext -> xNext = pPad -> xNext ;
+ pNext -> xFirst = pPad -> xFirst ;
+
+ pFirst = NodePad_self (pDomTree, pPad -> xFirst) ;
+ if (pFirst -> xLast == pPad -> xNdx || pFirst -> xLast == 0)
+ pFirst -> xLast = pNext -> xNdx ;
+
+ pPad -> xNext = pNext -> xNdx ;
+
+ nCopySize = pPad -> nFill - pNewFirstNode -> nPadOffset ;
+ memcpy (pNewNode, pNewFirstNode, nCopySize) ;
+ pPad -> nFill -= nCopySize ;
+ pNext -> nFill += nCopySize ;
+
+ while (pNewNode)
+ {
+ pNewNode -> nPadOffset = ((tUInt8 *)pNewNode) - ((tUInt8 *)pNext) ;
+ pDomTree -> pLookup[pNewNode -> xNdx] = pNewNode ;
+ nOffset = sizeof (struct tNodeData) + sizeof (struct tAttrData) * pNewNode ->
numAttr ;
+ if (pNext -> nFill <= pNewNode -> nPadOffset + nOffset)
+ break ;
+ pNewNode = (struct tNodeData *)(((tUInt8 *)pNewNode) + nOffset) ;
+ }
+
+ return pNext ;
+ }
+
+
/* ------------------------------------------------------------------------ */
/* */
@@ -568,33 +650,14 @@
tIndex xNdx ;
if (((tUInt8 *)pNew) - ((tUInt8 *)pPad) != pPad -> nFill)
- { /* not last child in pad -> make room */
- mydie ("not last child in pad -> make room") ;
-
-
+ { /* not last child in pad -> move following node to new pad */
+ NodePad_splitPad (pDomTree, pPad, (tNodeData *)pNew, 0) ;
}
if (((tUInt8 *)pNew) - ((tUInt8 *)pPad) + sizeof (struct tAttrData) > pPad ->
nMax)
{ /* pad full -> move into new pad */
- struct tNodePad * pNext = NewPad (pDomTree, pPad -> xParent) ;
- int nNodeSize = ((tUInt8 *)pNew) - ((tUInt8 *)pParent) ;
- struct tNodeData * pNewParent = (struct tNodeData * )(pNext + 1) ;
- /* lprintf (pCurrReq, "[%d]PARSE: NewPad Extent Attr: %d -> %d\n",
pCurrReq -> nPid, pPad -> xParent, pNext -> xNdx) ; */
-
- if (nNodeSize + sizeof (struct tNodePad) >= nInitialNodePadSize)
- mydie ("pad too small for attr -> make room") ;
-
- pNext -> xPrev = pPad -> xNdx ;
- pPad -> xNext = pNext -> xNdx ;
- ((struct tNodePad *)(pDomTree -> pLookup[pPad->xFirst])) -> xLast = pNext
-> xNdx ;
- pNext -> xFirst = pPad->xFirst ;
-
- memcpy (pNewParent, pParent, nNodeSize) ;
- pNewParent -> nPadOffset = pNext -> nFill ;
- pDomTree -> pLookup[xParent] = pParent = pNewParent ;
+ pPad = NodePad_splitPad (pDomTree, pPad, pParent, ((tUInt8 *)pNew) -
((tUInt8 *)pParent) + sizeof (struct tAttrData)) ;
+ pParent = NodePad_selfFirstChild (pDomTree, pPad) ;
pNew = ((struct tAttrData * )(pParent + 1)) + pParent -> numAttr ;
- pPad -> nFill -= nNodeSize ;
- pNext -> nFill += nNodeSize ;
- pPad = pNext ;
}
xNdx = ArrayAdd (&pDomTree -> pLookup, 1) ;
@@ -623,6 +686,20 @@
if (pNew -> nType != ntypAttr)
{
+ if (nType == ntypAttrValue)
+ {
+ int i ;
+
+ for (i = 0; i < nTextLen; i++)
+ {
+ if (!isspace (sText[i]))
+ break ;
+ }
+
+ if (i == nTextLen)
+ return 1 ; /* do not add only spaces as cdata inside a tag */
+ }
+
pNew = ((tAttrData *)(pParent + 1)) + pParent -> numAttr - 1 ;
if (pParent -> numAttr == 0 || pNew -> xName != xNoName)
{
@@ -666,7 +743,7 @@
if (((tAttrData *)pParent) -> bFlags & aflgAttrChilds)
pChilds = NodePad_self (pDomTree, ((tAttrData *)pParent) -> xValue)
;
else
- pChilds = NewPad (pDomTree, xParent) ;
+ pChilds = NewPad (pDomTree, xParent, 0) ;
/* lprintf (pCurrReq, "[%d]PARSE: NewPad NewAttrChild: %d -> %d\n",
pCurrReq -> nPid, xParent, pChilds -> xNdx) ; */
if (((tAttrData *)pParent) -> bFlags & aflgAttrValue)
@@ -684,7 +761,7 @@
}
else if (!pParent || !pParent -> xChilds)
{
- pChilds = NewPad (pDomTree, xParent) ;
+ pChilds = NewPad (pDomTree, xParent, 0) ;
/* lprintf (pCurrReq, "[%d]PARSE: NewPad NewChild: %d -> %d\n", pCurrReq
-> nPid, xParent, pChilds -> xNdx) ; */
if (pParent)
@@ -698,13 +775,13 @@
if (pChilds -> nFill + sizeof (struct tNodeData) > pChilds -> nMax)
{ /* pad full -> make room */
- struct tNodePad * pNext = NewPad (pDomTree, xParent) ;
+ struct tNodePad * pNext = NewPad (pDomTree, xParent, 0) ;
/* lprintf (pCurrReq, "[%d]PARSE: NewPad Extent Childs: %d -> %d\n",
pCurrReq -> nPid, xParent, pNext -> xNdx) ; */
- pNext -> xPrev = pChilds -> xNdx ;
- pChilds -> xNext = pNext -> xNdx ;
- pFirst -> xLast = pNext -> xNdx ;
- pNext -> xFirst = pFirst -> xFirst ;
+ pNext -> xPrev = pChilds -> xNdx ;
+ pChilds -> xNext = pNext -> xNdx ;
+ pFirst -> xLast = pNext -> xNdx ;
+ pNext -> xFirst = pFirst -> xFirst ;
pChilds = pNext ;
}
@@ -803,7 +880,7 @@
if (pOldChild -> bFlags & nflgModified)
{
- tNodePad * pPad = NewPad (pDomTree, Node_parentNode (pDomTree, xOldChild)) ;
+ tNodePad * pPad = NewPad (pDomTree, Node_parentNode (pDomTree, xOldChild), 0) ;
tNodeData * pNew = (struct tNodeData *)(pPad + 1) ;
@@ -1097,33 +1174,36 @@
while (n--)
{
- char * s ;
- int l ;
- if (pAttr -> xName != xNoName || n + 1 == pNode -> numAttr)
- oputc (r, ' ') ;
- if (pAttr -> xName != xNoName)
- {
- Ndx2StringLen (pAttr -> xName,s,l) ;
- owrite (r, s, l);
- }
-
- if (pAttr -> xValue)
+ if (pAttr -> bFlags)
{
- if (pAttr -> xName != xNoName)
- oputs (r, "=\"") ;
-
- if (pAttr -> bFlags & aflgAttrChilds)
- {
- Node_toString2 (pDomTree, r, pAttr -> xNdx, &nOrderNdx) ;
- }
- else
- {
- Ndx2StringLen (pAttr -> xValue, s, l) ;
- owrite (r, s, l) ;
- }
+ char * s ;
+ int l ;
+ if (pAttr -> xName != xNoName || n + 1 == pNode -> numAttr)
+ oputc (r, ' ') ;
if (pAttr -> xName != xNoName)
- oputc (r, '"') ;
- }
+ {
+ Ndx2StringLen (pAttr -> xName,s,l) ;
+ owrite (r, s, l);
+ }
+
+ if (pAttr -> xValue)
+ {
+ if (pAttr -> xName != xNoName)
+ oputs (r, "=\"") ;
+
+ if (pAttr -> bFlags & aflgAttrChilds)
+ {
+ Node_toString2 (pDomTree, r, pAttr -> xNdx, &nOrderNdx) ;
+ }
+ else
+ {
+ Ndx2StringLen (pAttr -> xValue, s, l) ;
+ owrite (r, s, l) ;
+ }
+ if (pAttr -> xName != xNoName)
+ oputc (r, '"') ;
+ }
+ }
pAttr++ ;
}
oputc (r, '>') ;
@@ -1368,9 +1448,29 @@
{
struct tAttrData * pAttr = Element_selfGetAttribut (pDomTree, pNode, sAttrName,
nAttrNameLen) ;
-
+
if (pAttr)
pAttr -> bFlags = 0 ;
+ /*
+ int nCopyAttr ;
+
+ if (pAttr)
+ {
+ nAttr = pAttr - ((struct tAttrData * )(pNode + 1)) ;
+ pNode -> numAttr-- ;
+ nCopyAttr = pNode -> numAttr - nAttr ;
+ if (nCopyAttr)
+ {
+ memcpy (pAttr, pAttr + 1, nCopyAttr * sizeof (tAttrData)) ;
+ while (nCopyAttr--)
+ {
+ pDomTree -> pLookup[pAttr -> xNdx] = pAttr ;
+ pAttr++ ;
+ }
+ }
+ }
+ */
+
return pAttr ;
}
1.1.2.16 +2 -0 embperl/Attic/epdom.h
Index: epdom.h
===================================================================
RCS file: /home/cvs/embperl/Attic/epdom.h,v
retrieving revision 1.1.2.15
retrieving revision 1.1.2.16
diff -u -r1.1.2.15 -r1.1.2.16
--- epdom.h 2000/05/26 23:31:06 1.1.2.15
+++ epdom.h 2000/05/29 07:34:30 1.1.2.16
@@ -159,6 +159,8 @@
/*in*/ int nLen) ;
+#define SV2String(pSV,l) (SvOK (pSV)?SvPV (pSV, l):(l=0,NULL))
+
#define Ndx2String(nNdx) (HeKEY (pStringTableArray[nNdx]))
#define Ndx2StringLen(nNdx,sVal,nLen) { HE * pHE = pStringTableArray[nNdx] ;
nLen=HeKLEN(pHE) ; sVal = HeKEY (pHE) ; }
1.1.2.17 +2 -2 embperl/Attic/epparse.c
Index: epparse.c
===================================================================
RCS file: /home/cvs/embperl/Attic/epparse.c,v
retrieving revision 1.1.2.16
retrieving revision 1.1.2.17
diff -u -r1.1.2.16 -r1.1.2.17
--- epparse.c 2000/05/24 14:33:26 1.1.2.16
+++ epparse.c 2000/05/29 07:34:30 1.1.2.17
@@ -341,7 +341,7 @@
return rc ;
p -> pFollowedBy = pNewTokenTable ;
- if ((rc = BuildSubTokenTable (r, pHash, pKey, "inside", p -> sEndText,
&pNewTokenTable)))
+ if ((rc = BuildSubTokenTable (r, pHash, pKey, "inside", "",
&pNewTokenTable)))
return rc ;
p -> pInside = pNewTokenTable ;
@@ -631,7 +631,7 @@
else if (sEndText == NULL ||
(*pCurr == *sEndText && strncmp (pCurr, sEndText, nEndText) == 0))
{
- if (pCurr - pCurrStart && nCDataType)
+ if ((pCurr - pCurrStart != 0 || nCDataType == ntypAttrValue) && nCDataType)
if (!(xNewNode = Node_appendChild (r -> pCurrDomTree, nCDataType, 0,
pCurrStart, pCurr - pCurrStart, xParentNode, level)))
return 1 ;
pCurr += nEndText ;
No revision
No revision
1.1.2.10 +64 -9 embperl/Embperl/Attic/Syntax.pm
Index: Syntax.pm
===================================================================
RCS file: /home/cvs/embperl/Embperl/Attic/Syntax.pm,v
retrieving revision 1.1.2.9
retrieving revision 1.1.2.10
diff -u -r1.1.2.9 -r1.1.2.10
--- Syntax.pm 2000/05/26 23:31:09 1.1.2.9
+++ Syntax.pm 2000/05/29 07:34:31 1.1.2.10
@@ -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.9 2000/05/26 23:31:09 richter Exp $
+# $Id: Syntax.pm,v 1.1.2.10 2000/05/29 07:34:31 richter Exp $
#
###################################################################################
@@ -63,6 +63,12 @@
}
+###################################################################################
+#
+# Default Syntax
+#
+###################################################################################
+
%Cmds = (
@@ -233,19 +239,45 @@
'type' => { 'text' => 'type', 'nodename' => 'type', follow =>
\%AssignAttr },
'name' => { 'text' => 'name', 'nodename' => 'name', follow =>
\%AssignAttr },
'value' => { 'text' => 'value', 'nodename' => 'value', follow =>
\%AssignAttr },
+ 'checked' => { 'text' => 'checked', 'nodetype' => ntypAttr, },
%Cmds,
},
'procinfo' => {
embperl => {
perlcode =>
[
- 'if ($fdat{\'%&*name%\'} eq \'%&*value%\') {
HTML::Embperl::Node::Element_setAttribut (%$n%, \'checked\', undef) } else
{HTML::Embperl::Node::Element_removeAttribut (%$n%, \'checked\') };
%&=type:radio|checkbox% ',
- 'HTML::Embperl::Node::Element_setAttribut (%$n%, \'value\',
$fdat{\'%&*name%\'}) ; %&!value%',
+ 'if ($fdat{\'%&*name%\'} eq \'%&*value%\') {
XML::Embperl::DOM::Element_setAttribut (%$n%, \'checked\', undef) } else
{XML::Embperl::DOM::Element_removeAttribut (%$n%, \'checked\') };
%&=-type:radio|checkbox% ',
+ 'XML::Embperl::DOM::Element_setAttribut (%$n%, \'value\',
$fdat{\'%&*name%\'} || \'\') ; %&!value%',
'$idat{\'%&*name%\'} = \'%&*value%\' ; ',
]
}
},
},
+ 'textarea' => {
+ 'text' => 'textarea',
+ 'nodetype' => ntypStartTag,
+ 'forcetype' => ntypAttrValue,
+ 'cdatatype' => ntypAttrValue,
+ 'inside' =>
+ {
+ 'name' => { 'text' => 'name', 'nodename' => 'name', follow =>
\%AssignAttr },
+ %Cmds,
+ },
+ 'procinfo' => {
+ embperl => {
+ perlcode =>
+ [
+ 'XML::Embperl::DOM::Node_appendChild (%$n%,
HTML::Embperl::Syntax::ntypText, $fdat{\'%#&*name%\'}) ; %#!-0%',
+ '$idat{\'%&*name%\'} = \'%#*0%\' ; ',
+ ]
+ }
+ },
+ },
+ '/textarea' => {
+ 'text' => '/textarea',
+ 'nodetype' => ntypEndTag,
+ 'cdatatype' => 0,
+ },
'tr' => {
'text' => 'tr',
'nodetype' => ntypStartTag,
@@ -596,28 +628,51 @@
=item %#N%
Text of childnode number N (starting with zero)
+
+=item %#*N%
+
+Value of attribute <attr>. Attrbute must exist.
-=item %<attr>%
+=item %#!N%
+Text of childnode number N (starting with zero). Child must not exist.
+
+=item %#=N:<value1>|<value2>|<value3>%
+
+Text of childnode number N (starting with zero). Child must have the value =
<value1> or <value2> etc.
+
+=item %#~N:<value1>|<value2>|<value3>%
+
+Text of childnode number N (starting with zero). Child must contain the substring
<value1> or <value2> etc.
+
+=item %&<attr>%
+
Value of attribute <attr>.
-=item %*<attr>%
+=item %&*<attr>%
Value of attribute <attr>. Attrbute must exist.
+
+=item %&!<attr>%
-=item %!<attr>%
+Value of attribute <attr>. Attribute must not exist.
-Value of attribute <attr>. Attrbute must not exist.
+=item %&=<attr>:<value1>|<value2>|<value3>%
-=item %=<attr>=<value>%
+Value of attribute <attr>. Attribute must have the value = <value1> or <value2> etc.
-Value of attribute <attr>. Attrbute must have the value = <value>.
+=item %&~<attr>:<value1>|<value2>|<value3>%
+Value of attribute <attr>. Attribute must contain the substring <value1> or
<value2> etc.
+
=item %$n%
Node number.
=back
+
+writing a minus sign (-) after * ! = or ~ will cause the child/attribute
+not to be included, but the condition is evaluated.
=item removenode => <removelevel>
No revision
No revision
1.15.2.2 +1 -1 embperl/test/cmp/escape.htm
Index: escape.htm
===================================================================
RCS file: /home/cvs/embperl/test/cmp/escape.htm,v
retrieving revision 1.15.2.1
retrieving revision 1.15.2.2
diff -u -r1.15.2.1 -r1.15.2.2
--- escape.htm 2000/05/24 08:47:33 1.15.2.1
+++ escape.htm 2000/05/29 07:34:31 1.15.2.2
@@ -28,7 +28,7 @@
A Tag 8: <A TARGET=8 HREF="8">x</A>
A Tag 9: <A HREF="9" TARGET="9">x</A>
A Tag 10: <A TARGET="10" HREF="10" TARGET="10">x</A>
-A Tag 11: <A HREF="11" >x</A>
+A Tag 11: <A HREF="11">x</A>
A Tag 12: <A HREF="12">x</A>
A Tag 13: <A HREF="abcd%20%3E">x</A>
A Tag 14: <A HREF="abcd%20%3E">x</A>
No revision
No revision
1.9.2.4 +5 -4 embperl/test/html/input.htm
Index: input.htm
===================================================================
RCS file: /home/cvs/embperl/test/html/input.htm,v
retrieving revision 1.9.2.3
retrieving revision 1.9.2.4
diff -u -r1.9.2.3 -r1.9.2.4
--- input.htm 2000/05/08 18:16:28 1.9.2.3
+++ input.htm 2000/05/29 07:34:32 1.9.2.4
@@ -1,6 +1,7 @@
-<table><table></table></table>
-<html>
+<input type="checkbox" value="cbv1" name="cb1" checked >
+
+<html>
<head>
<title>Test for interpretation of input tag</title>
</head>
@@ -20,8 +21,8 @@
<form action="inhalt.htm" method="POST">
<p> </p>
- <input name=neu1 value="[+ 1 > 2 +]" >
- <input name=[+ $name +] value="[+ 1 > 2 +]">
+ <input name=neu1 value="[+ 1 > 2?'yes':'no' +]" >
+ <input name=[+ $name || 'undef' +] value="[+ 1 > 2 +]">
<input>
<input >
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]