]> matita.cs.unibo.it Git - helm.git/blob - helm/DEVEL/mathml_editor/src/domnav.cc
Initial revision
[helm.git] / helm / DEVEL / mathml_editor / src / domnav.cc
1
2 DOM::Element
3 getRightmostChild(const DOM::Element& p)
4 {
5   if (p)
6     {
7       if (DOM::Element last = g.get_lastChild())
8         if (last.get_nodeName() == "g" && last.get_firstChild())
9           return getRightmostChild(last);
10         else
11           return last;
12       else
13         return 0;
14     }
15   else
16     return 0;
17 }
18
19 DOM::Element
20 prevLinearSibling(const DOM::Element& p)
21 {
22   if (p)
23     {
24       DOM::Element prev = p.get_prevSibling();
25       if (!prev) return 0;
26       else if (prev.get_nodeName() != "g" && prev.get_firstChild()) return prev;
27       else return prevLinearSibling(prev.get_lastChild());
28     }
29   else
30     return 0;
31 }
32
33 DOM::Element
34 getCore(const DOM::Element& p)
35 {
36   if (p)
37     {
38       if (p.get_nodeName() == "sb" || p.get_nodeName() == "sp")
39         return getCore(p.get_firstChild());
40       else return p;
41     }
42   else
43     return 0;
44 }
45
46 void
47 replace(const DOM::Element& p0, const DOM::Element& p1)
48 {
49   if (DOM::Element parent = p0.get_parentNode())
50     parent.replaceChild(p0, p1);
51 }
52
53 bool
54 isInferred(const DOM::Element& p)
55 {
56   if (p) return p.hasAttribute("id");
57   else return false;
58 }
59
60 bool
61 isMacro(const DOM::Element& p, const TString& s)
62 {
63   return p && p.get_nodeName() == "m" && p.getAttribute("name") == s;
64 }
65
66 bool
67 isGroup(const DOM::Element& p)
68 {
69   return p && p.get_nodeName() == "g";
70 }
71
72 bool
73 isSb(const DOM::Element& p)
74 {
75   return p && p.get_nodeName() == "sb";
76 }
77
78 bool
79 isSp(const DOM::Element& p)
80 {
81   return p && p.get_nodeName() == "sp";
82 }
83
84 bool
85 isPrimes(const DOM::Element& p)
86 {
87   return isGroup(p) && isMacro(p.get_lastChild, "prime");
88 }
89
90 bool
91 isOperator(const DOM::Element& p)
92 {
93   if (DOM::Element core = getCore(p))
94     return dictionary.isOperator(core.get_nodeName());
95   else
96     return false;
97 }
98
99 bool
100 isDelimiter(const DOM::Element& p)
101 {
102   if (DOM::Element core = getCore(p))
103     return dictionary.isDelimiter(core.get_nodeName());
104   else
105     return false;
106 }
107
108 bool
109 isFunction(const DOM::Element& p)
110 {
111   if (DOM::Element core = getCore(p))
112     return dictionary.isFunction(core.get_nodeName());
113   else
114     return false;
115 }