function getValue(node, attribute){ return parseInt(_AN_Call_getattribute('getAttribute', node, attribute), 10); } var ParseXMLBitmapFont = function (xml, xSpacing, ySpacing, frame){ if (xSpacing === undefined) { xSpacing = 0; } if (ySpacing === undefined) { ySpacing = 0; } var data = { } ; var info = _AN_Call_getelementsbytagname('getElementsByTagName', xml, 'info')[0]; var common = _AN_Call_getelementsbytagname('getElementsByTagName', xml, 'common')[0]; data.font = _AN_Call_getattribute('getAttribute', info, 'face'); data.size = getValue(info, 'size'); data.lineHeight = getValue(common, 'lineHeight') + ySpacing; data.chars = { } ; var letters = _AN_Call_getelementsbytagname('getElementsByTagName', xml, 'char'); var x = 0; var y = 0; var cx = 0; var cy = 0; var adjustForTrim = (frame !== undefined && frame.trimmed); if (adjustForTrim) { var top = frame.height; var left = frame.width; } var diff = 0; for (var i = 0; i < _AN_Read_length('length', letters); i++ ){ var node = letters[i]; var charCode = getValue(node, 'id'); var gx = getValue(node, 'x'); var gy = getValue(node, 'y'); var gw = getValue(node, 'width'); var gh = getValue(node, 'height'); if (adjustForTrim) { if (gx < left) { left = gx; } if (gy < top) { top = gy; } } data.chars[charCode] = { x: gx, y: gy, width: gw, height: gh, centerX: Math.floor(gw / 2), centerY: Math.floor(gh / 2), xOffset: getValue(node, 'xoffset'), yOffset: getValue(node, 'yoffset'), xAdvance: getValue(node, 'xadvance') + xSpacing, data: { } , kerning: { } } ; } if (adjustForTrim && top !== 0 && left !== 0) { for (var code in data.chars){ var glyph = data.chars[code]; glyph.x -= frame.x; glyph.y -= frame.y; } } var kernings = _AN_Call_getelementsbytagname('getElementsByTagName', xml, 'kerning'); for (i = 0; i < _AN_Read_length('length', kernings); i++ ){ var kern = kernings[i]; var first = getValue(kern, 'first'); var second = getValue(kern, 'second'); var amount = getValue(kern, 'amount'); data.chars[second].kerning[first] = amount; } return data; } ; module.exports = ParseXMLBitmapFont;