From 6f360b2b433be33c7d3ff92b161546e17376410b Mon Sep 17 00:00:00 2001 From: Paolo Marinelli Date: Tue, 25 Mar 2003 16:22:38 +0000 Subject: [PATCH] Added some rules in the Left Drop section --- helm/DEVEL/mathml_editor/doc/spec.tex | 432 ++++++++++++++------------ 1 file changed, 235 insertions(+), 197 deletions(-) diff --git a/helm/DEVEL/mathml_editor/doc/spec.tex b/helm/DEVEL/mathml_editor/doc/spec.tex index e1020146c..de575c719 100644 --- a/helm/DEVEL/mathml_editor/doc/spec.tex +++ b/helm/DEVEL/mathml_editor/doc/spec.tex @@ -20,12 +20,13 @@ \newcommand{\NNODE}{\texttt{n}} \newcommand{\ONODE}{\texttt{o}} \newcommand{\CNODE}{\texttt{c}} +\newcommand{\TABLE}{\texttt{table}} \newcommand{\SP}{\texttt{sp}} \newcommand{\SB}{\texttt{sb}} \newcommand{\CELL}{\texttt{cell}} \newcommand{\ROW}{\texttt{row}} -\newcommand{\SLDROP}{\hookleftarrow} -\newcommand{\NLDROP}{\leftarrow} +\newcommand{\SLDROP}{\blacktriangleleft} +\newcommand{\NLDROP}{\vartriangleleft} \begin{document} @@ -404,50 +405,179 @@ cursor with \ONODE{}, append $\tadvance$ after the \ONODE{} node \paragraph{Normal Left Drop:} $\NLDROP$ \begin{description} - \item{\verb+/cursor+}\\ - error. - \item{\verb+math/cursor+}\\ + + %******************************************************************************************************* + %************** rules handling the case in which the cursor has a preceding node *********************** + %******************************************************************************************************* + + %************************* the cursor's parent is a group or a parameter ******************************* + + %we consider an empty macro as a token. An empty macro is either undefined or simply empty. + + %rule handling the case where the cursor has a preceding token and this is the first node of a group with id + \item{\verb+g[@id][^(i||n||o||s||c[^$])#]/cursor+}\\ + remove the cursor and replace the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node with the $\NLDROP$. + \item{\verb+[(i||n||o||s||c[^$])#]/cursor+}\\ + remove the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node. + %it corresponds to the drop_prev_group(false). + \item{\verb+[g#]/cursor+}\\ + remove the cursor and append the $\NLDROP$ to the \G{} node. + %corresponds to the drop_prev_script(false). + \item{\verb+[()#]/cursor+}\\ + remove the cursor and append the $\NLDROP$ to the \SP{} or \SB{} node. + %rules handling the right open macros preceding the cursor. + \item{\verb+[(c[^p[@right-open='1']$])#]/cursor+}\\ + remove the cursor and append the $\NLDROP$ to the \PNODE{} node. + %we don't have a macro of this kind, but we don't know the future... + \item{\verb+[(c[^p[!(@right-open='1')][@left-open='1'][^$]$])#]/cursor+}\\ + remove the cursor and replace the \CNODE node with the $\NLDROP$. + \item{\verb+[(c[^p[!(@right-open='1')][@left-open='1']$])#]/cursor+}\\ + replace the \CNODE{} node with the content of the \PNODE node and replace the cursor with the $\NLDROP$. + %rules handling macro with parameter(s) and preceding the cursor. + \item{\verb+[c#]/cursor+}\\ + remove the cursor and append the $\NLDROP$ to the \CNODE{} node. + %rule handling table with rows preceding the cursor. + \item{\verb+[(table[row[cell[^g$]$]$])#]/cursor+}\\ + remove the cursor and append the $\NLDROP$ to the \G{} node, which is child of the \CELL{} node. + %rule handling tables without rows preceding the cursor. + \item{\verb+[table#]/cursor+}\\ + remove the cursor and append the $\NLDROP$ to the \TABLE{} node + + %********************************* the cursor's parent is a script ****************************** + + %rule handling the case where the script's base is an empty group with id. + \item{\verb+[^(g[@id][^$])#$]/cursor+}\\ + replace the \SP{} or \SB{} node with the $\NLDROP$. + %rule handling the case where the script's base is an empty group without id + \item{\verb+[^(g[^$])#$]/cursor+}\\ + replace the \SP{} or \SB{} node with the cursor. + %rule handling the case where the script's base is something else + \item{\verb+[^*#$]/cursor+}\\ + replace the \SP{} or \SB{} node with it's first child and insert the $\NLDROP$ after it. + + %********************************* the cursor's parent is a macro ******************************** + + %rule handling the case where the preceding node is a parameter + \item{\verb+c[p#]/cursor+}\\ + remove the cursor and append the $\NLDROP$ to the PNODE{} node. + %rule handling the case where the preceding node is a delimiter + \item{\verb+c[()#]/cursor+}\\ + remove the cursor and insert the $\NLDROP$ before the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node. + + %************************************************************************************************* + %*********** rules handling the case in which the cursor has no preceding nodes ****************** + %************************************************************************************************* + + %rule handling the case where the cursor has something else after it + \item{\verb+[#*]/cursor+}\\ nothing to drop. - \item{\verb+g[!@id][_*#_]/cursor+}\\ - replace the cursor with the $\NLDROP$. - \item{\verb+g[!@id][^#$]/cursor+}\\ - replace the cursor with the $\NLDROP$ - \item{\verb+g[@id][_*#_]/cursor+}\\ - replace the cursor with the $\NLDROP$. + + %rules handling the case where the cursor's parent is a p node and the cursor has no nodes after it. + + %rule handling the case where the p node is a left and right open macro's child and the first p node has no elements. + \item{\verb+c[^(p[@left-open='1'][^$])#$]/p[@right-open='1'][^#$]/cursor+}\\ + replace the \CNODE{} with the $\NLDROP$. + %rule handling the case where the p node is a left and right open macro's child and the first p node has elements. + \item{\verb+c[^(p[@left-open='1']#$]/p[@right-open='1'][^#$]/cursor+}\\ + replace the \CNODE{} with the content of the PNODE{} with attribute texttt{left-open='1'} and insert $\NLDROP$ after this. + %rule handling the case where the p node is right open macro's child. + \item{\verb+c[^#$]/p[@right-open='1'][^#$]/cursor+}\\ + replace the \CNODE{} with the $\NLDROP$. + %rule handling the case where the p node is a macro's child and this macro has parameter. + \item{\verb+c/p[^#$]/cursor+}\\ + remove the cursor and insert the $\NLDROP$ before the \PNODE{} node. + + %rule handling the case where the cursor has no nodes after it and its parent is a group with id \item{\verb+g[@id][^#$]/cursor+}\\ - replace the cursor with the $\NLDROP$. - \item{\verb+c[_*#_]/cursor+}\\ - replace the cursor with the $\NLDROP$. - \item{\verb+sp[^*#$]/cursor+}\\ - replace the cursor with the $\NLDROP$. - \item{\verb+c/p/cursor+}\\ - replace the cursor with the $\NLDROP$. + replace the \G{} node with the $\NLDROP$. + \end{description} \paragraph{Special Left Drop:} $\SLDROP$ + \begin{description} - \item{\verb+/cursor+}\\ - error. - \item{\verb+math/cursor+}\\ + + %******************************************************************************************************* + %************** rules handling the case in which the cursor has a preceding node *********************** + %******************************************************************************************************* + + %************************* the cursor's parent is a group or a parameter ******************************* + + %this rule is more specific than the one below which handle the case of the cursor preceded by a c node + \item{\verb+[(i||n||o||s||c[^$])#]/cursor+}\\ + remove the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node. + %it corresponds to the drop_prev_group(true). + \item{\verb+[g#]/cursor+}\\ + remove the cursor and append the it to the \G{} node. + %corresponds to the drop_prev_script(true). + \item{\verb+[()#]/cursor+}\\ + remove the cursor and append the $\SLDROP$ to the \SP{} or \SB{} node. + %rules handling the right open macros preceding the cursor. + \item{\verb+[(c[^p[@right-open='1']$])#]/cursor+}\\ + remove the cursor and append the $\SLDROP$ to the \PNODE{} node. + %we don't have a macro of this kind, but we don't know the future... + \item{\verb+[(c[^p[!(@right-open='1')][@left-open='1'][^$]$])#]/cursor+}\\ + remove the cursor and replace the \CNODE node with the cursor. + \item{\verb+[(c[^p[!(@right-open='1')][@left-open='1']$])#]/cursor+}\\ + replace the \CNODE{} node with the content of the \PNODE node. + %rule handling macro with parameter(s) and preceding the cursor. + \item{\verb+[c#]/cursor+}\\ + remove the cursor and append the $\SLDROP$ to the \CNODE{} node. + %rule handling table with rows preceding the cursor. + \item{\verb+[(table[row[cell[^g$]$]$])#]/cursor+}\\ + remove the cursor and append the it to the \G{} node, which is child of the \CELL{} node. + %rule handling tables without rows preceding the cursor. + \item{\verb+[table#]/cursor+}\\ + remove the cursor and append the $\SLDROP$ to the \TABLE{} node + + %********************************* the cursor's parent is a script ****************************** + + %rule handling the case where the script's base is an empty group with id. + \item{\verb+[^(g[@id][^$])#$]/cursor+}\\ + replace the \SP{} or \SB{} node with the \G{} node and insert the cursor after it. + %rule handling the case where the script's base is an empty group without id + \item{\verb+[^(g[^$])#$]/cursor+}\\ + replace the \SP{} or \SB{} node with the cursor. + %rule handling the case where the scrip's base is something else + \item{\verb+[^*#$]/cursor+}\\ + replace the \SP{} or \SB{} node with it's first child and insert the cursor after it. + + %********************************* the cursor's parent is a macro ******************************** + + %rule handling the case where the preceding node is a parameter + \item{\verb+c[p#]/cursor+}\\ + remove the cursor and append the $\SLDROP$ to the PNODE{} node. + %rule handling the case where the preceding node is a delimiter + \item{\verb+c[()#]/cursor+}\\ + remove the cursor and insert the it before the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node. + + %************************************************************************************************* + %*********** rules handling the case in which the cursor has no preceding nodes ****************** + %************************************************************************************************* + + %rule handling the case where the cursor has something else after it + \item{\verb+[#*]/cursor+}\\ nothing to drop. - \item{\verb+g[!@id][_*#_]/cursor+}\\ - replace the cursor with the $\SLDROP$. - \item{\verb+g[!@id][^#$]/cursor+}\\ - replace the cursor with the $\SLDROP$ - \item{\verb+g[@id][_*#_]/cursor+}\\ - replace the cursor with the $\SLDROP$. + + %rules handling the case where the cursor's parent is a p node and the cursor has no nodes after it. + + %rule handling the case where the p node is a left and right open macro's child and the first p node has no elements. + \item{\verb+c[^(p[@left-open='1'][^$])#$]/p[@right-open='1'][^#$]/cursor+}\\ + replace the \CNODE{} with the cursor. + %rule handling the case where the p node is a left and right open macro's child and the first p node has elements. + \item{\verb+c[^(p[@left-open='1']#$]/p[@right-open='1'][^#$]/cursor+}\\ + replace the \CNODE{} with the content of the PNODE{} with attribute texttt{left-open='1'} and insert cursor after this. + %rule handling the case where the p node is right open macro's child. + \item{\verb+c[^#$]/p[@right-open='1'][^#$]/cursor+}\\ + replace the \CNODE{} with the cursor. + %rule handling the case where the p node is a macro's child and this macro has parameter. + \item{\verb+c/p[^#$]/cursor+}\\ + remove the cursor and insert the $\SLDROP$ before the \PNODE{} node. + + %rule handling the case where the cursor has no nodes after it and its parent is a group with id \item{\verb+g[@id][^#$]/cursor+}\\ - replace the cursor with the $\SLDROP$. - \item{\verb+c[_*#_]/cursor+}\\ - replace the cursor with the $\SLDROP$. - \item{\verb+sp[^*#$]/cursor+}\\ - replace the cursor with the $\SLDROP$. - \item{\verb+c[p#]/cursor+}\\ - remove the cursor and append the $\SLDROP$ to the \PNODE{} node. - \item{\verb+c[#]/cursor+}\\ - remove the cursor and append it before the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node. - \item{\verb+c/p/cursor+}\\ - repace the cursor with the $\SLDROP$. + replace the \G{} node with the cursor. + \end{description} \section{Right Drop Rules} @@ -458,99 +588,80 @@ cursor with \ONODE{}, append $\tadvance$ after the \ONODE{} node \begin{description} - %drop_prev_script(false). The results aren't \NLDROP's parent dependent. - \item{\verb+.[#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and append it to the preceding script. - %drop_prev_group(false). The results are \NLDROP's parent independent. - \item{\verb+.[g#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and append it to the \G{} node. + %********************************************* \NLDROP has a preceding node ********************************************* - %drop_prev_macro(false). The results aren't \NLDROP's parent dependent, unless the macro is undefined. - \item{\verb+.[c[@pattern+$\sim$\verb+')'][g$]#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and append it to the \G{} node. - \item{\verb+.[c[@pattern='(]'][^g[^$]$]#]/+$\NLDROP$}\\ - remove the \CNODE{} node. - \item{\verb+.[c[@pattern='(]'][^g[_]$]#]/+$\NLDROP$}\\ - replace the \CNODE{} node with the content of the \G{} node. - \item{\verb+.[c[*]#]/+$\NLDROP$}\\ + %rule handling the case where the preceding node is a token or an empty macro. + \item{\verb+*[(i||n||o||s||c[^$])#]/+$\NLDROP$}\\ + remove the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or the \CNODE{} node. + %rule handling the case where the preceding node is a group + \item{\verb+*[g#]/+$\NLDROP$}\\ + remove the $\NLDROP$ append it to the \G{} node. + %rule handling the case where the preceding node is a script + \item{\verb+*[#]/+$\NLDROP$}\\ + remove the $\NLDROP$ append it to the \SP{} or \SB{} node. + %rule handling the case where the preceding node is an open-right macro + \item{\verb+*[(c[^p[@right-open='1']$])#]/+$\NLDROP$}\\ + remove the $\NLDROP$ and append it to the \PNODE{} node. + %rule handling the case where the preceding node is a left-open macro (and not right-open), and the p node of this macro has no children + \item{\verb+*[(c[^p[!(@right-open='1')][@left-open='1'][^$]$])#]/+$\NLDROP$}\\ + remove the \CNODE node. + %rule handling the case where the preceding node is a left-open macro (and not right-open), and the p node of this macro has children + \item{\verb+*[(c[^p[!(@right-open='1')][@left-open='1']$])#]/+$\NLDROP$}\\ + replace the \CNODE{} node with the content of the \PNODE{} node. + %rule handling the case where the preceding node is a macro with parameter(s) + \item{\verb+*[c#]/+$\NLDROP$}\\ remove the $\NLDROP$ and append it to the \CNODE{} node. - \item{\verb+.[c[^$]#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the \CNODE{} with the cursor. - - %drop_prev_macro(false), when the macro is undefined and the NLDROP's parent is not a group with id - \item{\verb+[c[@undefined='1']#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the \CNODE{} node with the cursor. - - %drop_prev_macro(false), when the macro is undefined and the \NLDROP's parent is a group with id. - \item{\verb+g[@id][^c[@undefined='1']#$]/+$\NLDROP$}\\ - remove the \CNODE{} node. - \item{\verb+g[@id][^c[@undefined='1']#._]+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the \CNODE{} node with the cursor. - \item{\verb+g[@id][_.c[@undefined='1']#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the \CNODE{} node with the cursor. - - %drop_prev_token(false), when the \NLDROP's parent is not a group with id. - \item{\verb+[_#_]/+$\NLDROP$}\\ - replace the node preceding the $\NLDROP$ with the cursor and remove the $\NLDROP$. - - %drop_prev_token(false), when the cursor's parent is a group with id. - \item{\verb+g[@id][^#$]/+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the \INODE{}, \NNODE{}, \ONODE{} or \SNODE{} with the $\NLDROP$. - \item{\verb+g[@id][^#._]/+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the \INODE{}, \NNODE{}, \ONODE{} or \SNODE{} with the cursor. - \item{\verb+g[@id][_.#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and replace the \INODE{}, \NNODE{}, \ONODE{} or \SNODE{} with the cursor. - - %rgreplace_father(). - \item{\verb+g[@id][^#$]/+$\NLDROP$}\\ - replace the \G{} node with the $\NLDROP$. - %situations where the \NLDROP is a script's child. - \item{\verb+[^g[^$]#$]/+$\NLDROP$}\\ - replace the \SP{} or \SB{} node with the $\NLDROP$. - \item{\verb+[^]/+$\NLDROP$}\\ - replace the \SP{} or \SB{} with the non-\G{} node and insert the $\NLDROP$ after it. + %rule handling the deletion of primes in superscript + + %there are more than one prime in the phantom group + \item{\verb+sp[!(@id)][*#$]/g[!(@id)][o#]/+$\NLDROP$}\\ + remove the \ONODE node, remove the $\NLDROP$ and insert the cursor after the \SP{} node. + %there is one and only one prime in the phantom group + \item{\verb+sp[!(@id)][*#$]/g[!(@id)][^o#]/+$\NLDROP$}\\ + replace the \SP{} node with it's first child and insert the cursor after it - %situations where the \NLDROP is a macro's child. + %*** rules handling the case where the \NLDROP's parent is a macro (with parameter) *** + + %the node preceding the \NLDROP is a delimiter + \item{\verb+c[()#]/+$\NLDROP$}\\ + remove the $\NLDROP$ and insert it before the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node. + %the node preceding the \NLDROP is parameter \item{\verb+c[p#]/+$\NLDROP$}\\ remove the $\NLDROP$ and append it to the \PNODE{} node. - \item{\verb+c[#]/+$\NLDROP$}\\ - remove the $\NLDROP$ and insert it before the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or the \CNODE node. - \item{\verb+c[^#][p[*]]/+$\NLDROP$}\\ - nothing to drop. Not all the parameters are empty. - \item{\verb+c[!p[*]][^#]/+$NLDROP$}\\ - replace the macro with the $\NLDROP$. - - %situations where the cursor is a phantom group's child and has no preceding node. - \item{\verb+math/g[!@id][^#$]/+$\NLDROP$}\\ - nothing to drop. - \item{\verb+c[@pattern='()'][^g[^$]#$]/g[!@id][^#$]/+$\NLDROP$}\\ - replace the \CNODE{} node with the $\NLDROP$ - \item{\verb+c[@pattern='()'][^g[*]#$]/g[!@id][^#$]/+$\NLDROP$}\\ - remove the $\NLDROP$, insert the $\NLDROP$ after the \CNODE{} node replace the \CNODE{} node with the content of the first \G{} node. - \item{\verb+c[@pattern='[)'][^#$]/g[!@id][^#$]/+$\NLDROP$}\\ - replace the \CNODE{} node with the $\NLDROP$. - \item{\verb+c[@pattern='(]']/g[^#$]/+$\NLDROP$}\\ - error. - \item{\verb+c[@table='1']/p[^#$]/row[^#$]/cell[^#$]/g[!@id][^#$]/+$\NLDROP$}\\ - replace the \CNODE{} with the cursor. - \item{\verb+c[@table='1']/p[row[cell[^g[!@id]$]$]#_]/row[^#$]/cell[^#$]/g[!@id][^#$]/+$\NLDROP$}\\ - remove the \ROW{} node in which the $\NLDROP$ is and append the cursor to the \G{} node. - \item{\verb+c[@table='1']/p[^#row_]/row[^#$]/cell[^#$]/g[!@id][^#$]/+$\NLDROP$}\\ - nothing to drop. - \item{\verb+row[_cell[^g[!@id]$]#_]/cell[^#$]/g[!@id][^#$]/+$\NLDROP$}\\ - remove the cell in which the $\NLDROP$ is and append the cursor to the \G{} node of the preceding \CELL{} node. - \item{\verb+row[^#cell_]/cell[^#$]/g[!@id][^#$]/+$\NLDROP$}\\ - nothing to drop. - \item{\verb+sp[^*#$]/g[^#$]/+$\NLDROP$}\\ - replace the \SP{} node with it's first child and insert the cursor after it. - \item{\verb+sp[^*#$]/g[o#_]/+$\NLDROP$}\\ - remove the \ONODE{}, remove the $\NLDROP$ and insert the cursor after the \SP{} node. - %situations where \NLDROP is a p's child - \item{\verb+c/p[^#$]/+$\NLDROP$}\\ - remove the $\NLDROP$ and insert it before the \PNODE{} node. + %********************************************* the \NLDROP has no preceding nodes **************************************************** + + %if the \NLDROP has no preceding nodes, but has following nodes... + \item{\verb+[#*]/+$\NLDROP$}\\ + replace the $\NLDROP$ with the cursor. + %rule handling the case where the $\NLDROP$ is the only child of a group with id. + \item{\verb+g[@id][^#$]/+$\NLDROP$}\\ + replace the \G{} node with the $\NLDROP$. + %\NLDROP is the first child of a macro with no inserted parameter + \item{\verb+c[!(p[*])][^#]/+$\NLDROP$}\\ + replace the \CNODE{} with the $\NLDROP$. + %\NLDROP is the first child of a macro with some inserted parameter + \item{\verb+c[p[*]][^#]/+$\NLDROP$}\\ + put the cursor in the first \PNODE{} node. + + + %**** rule handling the case where the \NLDROP has a preceding token or a preceding empty macro, which is either undefined or empty **** + + %%the \NLDROP's parent is neither a macro nor a phantom group which in turn is a sp's child and the token is a prime + %\item{\verb+*[(i||n||o||s||c[^$])#]/+$\NLDROP$}\\ + %replace the \INODE{}, \NNODE{}, \SNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node with the cursor and remove the $\NLDROP$. + %%the \NLDROP's parent is a macro with argument + %\item{\verb+c[((!(p[@left-open='1']))&(!(p[@right-open+'1'])))][(i||n||o||s||c[^$])#]/+$\NLDROP$}\\ + %remove the $\NLDROP$ and insert it before the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or \CNODE{} node. + %%rule handling the case where the \NLDROP's parent is a phantom group, which in turn is a sp's child + %\item{\verb+sp[!(@id)][^*#$]/g[!(@id)][o#$]/+$\NLDROP$}\\ + %remove the \ONODE{} node + + %********************************* rules handling the case where the \NLDROP has a preceding group ************************************** + \item{\verb+*[g#]/+$\NLDROP$}\\ + remove the $\NLDROP$ and append it to the \G{} node. \end{description} @@ -558,80 +669,7 @@ cursor with \ONODE{}, append $\tadvance$ after the \ONODE{} node \begin{description} - %drop_prev_script(true). The results aren't cursor's parent dependent. - \item{\verb+.[#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and append it to the preceding script. - - %drop_prev_group(true). The results are cursor's parent independent. - \item{\verb+.[g#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and append it to the \G{} node. - - %drop_prev_macro(true). The results aren't cursor's parent dependent. - \item{\verb+.[c[undefined='1']#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and replace the \CNODE{} with the cursor. - \item{\verb+.[c[@pattern~')'][g$]#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and append the cursor to the \G{} node. - \item{\verb+.[c[@pattern='(]'][^g[^$]$]#]/+$\SLDROP$}\\ - remove the \CNODE{} node and replace the $\SLDROP$ with the cursor. - \item{\verb+.[c[@pattern='(]'][^g[_]$]#]/+$\SLDROP$}\\ - replace the \CNODE{} node with the content of the \G{} node and replace the $\SLDROP$ with the cursor. - \item{\verb+.[c[*]#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and append it to the \CNODE{} node. - \item{\verb+.[c[^$]#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and replace the \CNODE{} with the cursor. - %here, we have to return the macro's name to the lexer. - - %drop_prev_token(true). The results aren't \SLDROP's parent dependent. - \item{\verb+.[_#_]/+$\SLDROP$}\\ - replace the node preceding the $\SLDROP$ with the cursor and remove the $\SLDROP$. - - %situations where the \SLDROP is a script's child. - \item{\verb+[^g[@id][^$]#$]/+$\SLDROP$}\\ - replace the \SP{} or \SB{} node with the \G{} node and insert the cursor after it. - \item{\verb+[^]/+$\SLDROP$}\\ - replace the \SP{} or \SB{} with the cursor. - \item{\verb+[^*#$]/+$\SLDROP$}\\ - replace the \SP{} or \SB{} node with it's first child and insert the cursor after it. - - %situations where the \SLDROP is a macro's child. - \item{\verb+c[p#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and append it to the \PNODE{} node. - \item{\verb+c[#]/+$\SLDROP$}\\ - remove the $\SLDROP$ and insert the cursor before the \INODE{}, \NNODE{}, \ONODE{}, \SNODE{} or the \CNODE node. - \item{\verb+c[^#][p[*]]/+$\SLDROP$}\\ - nothing to drop. Not all the parameters are empty. - \item{\verb+c[!p[*]][^#]/+$SLDROP$}\\ - replace the macro with the cursor. - - %situations where the \SLDROP is a phantom group's child and has no preceding node. - \item{\verb+math/g[!@id][^#$]/+$\SLDROP$}\\ - nothing to drop. - \item{\verb+c[@pattern='()'][^g[^$]#$]/g[!@id][^#$]/+$\SLDROP$}\\ - replace the \CNODE{} node with the cursor. - \item{\verb+c[@pattern='()'][^g[*]#$]/g[!@id][^#$]/+$\SLDROP$}\\ - replace the \CNODE{} with the content of the first group and insert the cursor after it. - \item{\verb+c[@pattern='[)'][^#$]/g[!@id][^#$]/+$\SLDROP$}\\ - replace the \CNODE{} node with the cursor. - \item{\verb+c[@pattern='(]']/g[^#$]/+$\SLDROP$}\\ - error. - \item{\verb+c[@table='1']/p[^#$]/row[^#$]/cell[^#$]/g[!@id][^#$]/+$\SLDROP$}\\ - replace the \ROW{} with the cursor. - \item{\verb+c[@table='1']/p[row[cell[^g[!@id]$]$]#_]/row[^#$]/cell[^#$]/g[!@id][^#$]/+$\SLDROP$}\\ - remove the \ROW{} node in which the $\SLDROP$ is and append the cursor to the \G{} node. - \item{\verb+c[@table='1']/p[^#row_]/row[^#$]/cell[^#$]/g[!@id][^#$]/+$\SLDROP$}\\ - nothing to drop. - \item{\verb+row[_cell[^g[!@id]$]#_]/cell[^#$]/g[!@id][^#$]/+$\SLDROP$}\\ - remove the cell in which the $\SLDROP$ is and append the cursor to the \G{} node of the preceding \CELL{} node. - \item{\verb+row[^#cell_]/cell[^#$]/g[!@id][^#$]/+$\SLDROP$}\\ - nothing to drop. - \item{\verb+sp[^*#$]/g[^#$]/+$\SLDROP$}\\ - replace the \SP{} node with it's first child and insert the cursor after it. - \item{\verb+sp[^*#$]/g[o#_]/+$\SLDROP$}\\ - remove the \ONODE{}, remove the $\SLDROP$ and insert the cursor after the \SP{} node. - - %situations where the \SLDROP is a p's child - \item{\verb+c/p[^#$]/+$\SLDROP$}\\ - remove the $\SLDROP$ and insert it before the \PNODE{}. + \item{special left}\\ \end{description} -- 2.39.2