| 208 | } |
| 209 | |
| 210 | static void emit_property(UdlBuf *b, const char *ps, const char *pe) { |
| 211 | char pn[MAX_NAME]; |
| 212 | extract_attr(ps, pe, "name", pn, sizeof(pn)); |
| 213 | if (!pn[0]) |
| 214 | return; |
| 215 | char pt[MAX_NAME] = ""; |
| 216 | elem_content(ps, pe, "Type", pt, sizeof(pt)); |
| 217 | PropParam params[MAX_PARAMS]; |
| 218 | int np = 0; |
| 219 | const char *pp = ps; |
| 220 | while (pp < pe && np < MAX_PARAMS) { |
| 221 | const char *po = find_s(pp, pe, "<Parameter "); |
| 222 | if (!po) |
| 223 | break; |
| 224 | const char *pg = find_s(po, pe, ">"); |
| 225 | if (!pg) |
| 226 | break; |
| 227 | extract_attr(po, pg, "name", params[np].param_name, MAX_NAME); |
| 228 | extract_attr(po, pg, "value", params[np].param_value, MAX_NAME); |
| 229 | if (!params[np].param_value[0]) { |
| 230 | char db[MAX_NAME]; |
| 231 | const char *a = elem_content(po, pe, "Parameter", db, MAX_NAME); |
| 232 | if (a && db[0]) |
| 233 | strncpy(params[np].param_value, db, MAX_NAME - 1); |
| 234 | } |
| 235 | if (params[np].param_name[0]) |
| 236 | np++; |
| 237 | pp = pg + 1; |
| 238 | } |
| 239 | ub_app(b, "Property "); |
| 240 | ub_app(b, pn); |
| 241 | if (pt[0]) { |
| 242 | ub_app(b, " As "); |
| 243 | ub_app(b, pt); |
| 244 | } |
| 245 | if (np > 0) { |
| 246 | ub_app(b, "("); |
| 247 | for (int i = 0; i < np; i++) { |
| 248 | if (i > 0) |
| 249 | ub_app(b, ", "); |
| 250 | ub_app(b, params[i].param_name); |
| 251 | if (params[i].param_value[0]) { |
| 252 | ub_app(b, " = "); |
| 253 | ub_app(b, params[i].param_value); |
| 254 | } |
| 255 | } |
| 256 | ub_app(b, ")"); |
| 257 | } |
| 258 | ub_app(b, ";\n\n"); |
| 259 | } |
| 260 | |
| 261 | static void emit_parameter(UdlBuf *b, const char *ps, const char *pe) { |
| 262 | char pn[MAX_NAME]; |
no test coverage detected