* Normalizer callback for xmlToObject — converts TMX XML into Tiled JSON format. * @ignore
(obj, item, parse)
| 259 | * @ignore |
| 260 | */ |
| 261 | function normalizeTMX(obj, item, parse) { |
| 262 | const nodeName = item.nodeName; |
| 263 | |
| 264 | switch (nodeName) { |
| 265 | case "data": { |
| 266 | const data = parse(item); |
| 267 | const encoding = data.encoding || "xml"; |
| 268 | const compression = data.compression; |
| 269 | |
| 270 | // infinite maps: decode each chunk |
| 271 | if (data.chunks !== undefined) { |
| 272 | const srcChunks = data.chunks; |
| 273 | const chunks = obj.chunks || (obj.chunks = []); |
| 274 | for (let i = 0, len = srcChunks.length; i < len; i++) { |
| 275 | const c = srcChunks[i]; |
| 276 | chunks.push({ |
| 277 | x: +c.x, |
| 278 | y: +c.y, |
| 279 | width: +c.width, |
| 280 | height: +c.height, |
| 281 | data: decode(c.text, encoding, compression), |
| 282 | }); |
| 283 | } |
| 284 | obj.encoding = "none"; |
| 285 | } |
| 286 | |
| 287 | // finite maps (guard: data.text can exist alongside chunks) |
| 288 | if (data.text !== undefined && obj.chunks === undefined) { |
| 289 | obj.data = decode(data.text, encoding, compression); |
| 290 | obj.encoding = "none"; |
| 291 | } |
| 292 | break; |
| 293 | } |
| 294 | |
| 295 | case "chunk": { |
| 296 | const chunks = obj.chunks || (obj.chunks = []); |
| 297 | chunks.push(parse(item)); |
| 298 | break; |
| 299 | } |
| 300 | |
| 301 | case "imagelayer": |
| 302 | case "layer": |
| 303 | case "objectgroup": |
| 304 | case "group": { |
| 305 | const layer = parse(item); |
| 306 | layer.type = nodeName === "layer" ? "tilelayer" : nodeName; |
| 307 | if (layer.image) { |
| 308 | // flattenImage equivalent for image layers |
| 309 | if (layer.image.source) { |
| 310 | layer.image = layer.image.source; |
| 311 | } else if (layer.image.data) { |
| 312 | const format = layer.image.format || "png"; |
| 313 | const base64 = layer.image.data.text || layer.image.data; |
| 314 | layer.image = cacheEmbeddedImage( |
| 315 | base64, |
| 316 | format, |
| 317 | layer.image.width ? +layer.image.width : undefined, |
| 318 | layer.image.height ? +layer.image.height : undefined, |
nothing calls this directly
no test coverage detected