@@ -46,7 +46,8 @@ where type ∈ ["e-notation", "rational", "complex-cartesian", "complex-polar"]
46
46
"""
47
47
function parse_cn_w_sep (node)
48
48
# node = clean_attributes(node)
49
- txts = findall (" text()" , node)
49
+ # txts = findall("text()", node)
50
+ txts = [n for n in eachnode (node) if istext (n)]
50
51
length (txts) != 2 && error (" stop, collaborate, and listen!, problem with <cn>" )
51
52
x1, x2 = map (x -> Meta. parse (x. content), txts)
52
53
t = node[" type" ]
76
77
# ######### Parse piecewise ###################################################
77
78
78
79
function parse_piecewise (node)
79
- return process_pieces (elements (node))
80
- end
80
+ ns = elements (node)
81
+ pieces = filter (x -> nodename (x) == " piece" , ns)
82
+ others = filter (x -> nodename (x) == " otherwise" , ns)
81
83
82
- function process_pieces (pieces)
83
- if length (pieces) == 1
84
- return process_piece (pieces[1 ])
84
+ if length (others) > 0
85
+ otherwise = parse_node (firstelement (others[1 ]))
85
86
else
86
- return process_piece (pieces[ 1 ], process_pieces (pieces[ 2 : end ]))
87
+ otherwise = 0.0
87
88
end
88
- end
89
89
90
- function process_piece (node)
91
- if nodename (node) != " otherwise"
92
- @warn " expect an otherwise"
93
- else
94
- return parse_node (firstelement (node))
95
- end
90
+ return process_pieces (pieces, otherwise)
96
91
end
97
92
98
- function process_piece (node, otherwise)
99
- if nodename (node) == " otherwise"
100
- return parse_node (firstelement (node))
101
- elseif nodename (node) == " piece"
102
- c = parse_node .(elements (node))
103
- return IfElse. ifelse (c[2 ] > 0.5 , c[1 ], otherwise)
104
- end
93
+ function process_pieces (pieces, otherwise)
94
+ node = pieces[1 ]
95
+ c = parse_node .(elements (node))
96
+ return IfElse. ifelse (c[2 ] > 0.5 , c[1 ],
97
+ length (pieces)== 1 ? otherwise : process_pieces (pieces[2 : end ], otherwise))
105
98
end
106
99
107
100
"""
0 commit comments