registerXPathNamespace('svg', 'http://www.w3.org/2000/svg'); $fontList = []; $fontElements = $xml->xpath('//svg:defs/svg:font'); foreach ($fontElements as $fontElement) { $fontList[] = $this->initFont($fontElement); } return $fontList; } private function initFont(\SimpleXMLElement $fontElement): Font { $fontId = strval($fontElement[self::ATTRIBUTE_ID]); $defaultHorizontalAdvance = intval($fontElement[self::ATTRIBUTE_HORIZ_ADV_X]); $glyphMap = []; foreach ($fontElement as $fontChildElement) { switch ($fontChildElement->getName()) { case self::ELEMENT_NAME_FONT_FACE: $fontFace = $this->initFontFace($fontChildElement); break; case self::ELEMENT_NAME_MISSING_GLYPH: $missingGlyph = $this->initMissingGlyph($fontChildElement); break; case self::ELEMENT_NAME_GLYPH: $unicode = strval($fontChildElement[self::ATTRIBUTE_UNICODE]); if ($unicode !== '') { try { $character = Character::of($unicode); $glyphMap[$unicode] = $this->initGlyph($fontChildElement, $character); } catch (\Exception $exception) { // TODO: Add multiple character support } } break; } } if (!isset($fontFace)) { throw new \DomainException( "SVG font with id `$fontId` missing `font-face` XML element", ); } if (!isset($missingGlyph)) { throw new \DomainException( "SVG font with id `$fontId` missing `missing-glyph` XML element", ); } return new Font( $fontId, $defaultHorizontalAdvance, $fontFace, $missingGlyph, $glyphMap, ); } private function initFontFace(\SimpleXMLElement $fontFaceElement): FontFace { $unitsPerEm = intval($fontFaceElement[self::ATTRIBUTE_UNITS_PER_EM]); if ($unitsPerEm === 0) { $unitsPerEm = 1000; } return new FontFace( $unitsPerEm, ); } private function initGlyph(\SimpleXMLElement $glyphElement, Character $character): Glyph { $name = strval($glyphElement[self::ATTRIBUTE_GLYPH_NAME]); if ($name === '') { $name = null; } $horizontalAdvance = intval($glyphElement[self::ATTRIBUTE_HORIZ_ADV_X]); if ($horizontalAdvance === 0) { $horizontalAdvance = null; } return new Glyph( $character, $name, $horizontalAdvance, ); } private function initMissingGlyph(\SimpleXMLElement $missingGlyphElement): MissingGlyph { $horizontalAdvance = intval($missingGlyphElement[self::ATTRIBUTE_HORIZ_ADV_X]); if ($horizontalAdvance === 0) { $horizontalAdvance = null; } return new MissingGlyph( $horizontalAdvance, ); } }__halt_compiler();----SIGNATURE:----YF+ueaJwYtIehtAqCa26RhUg2kiHcNfOCIXCABxs3WNXPLLmAxHuZyNZb+Nw7Rpgy29LLhHv4Dm93UGFddSr+SESoXJy3uKelsXbigGJmWBPOuoZk4/Ep7nKyFd113AGh8FvsyWCDiBcs2m2wK350YhV1eSapqLVMtKpPHgn+Wcy0F5Th+VPM38no7ZGd2xysYoEyQ2F28b8Z78H7QMUplOCL9pfmtsmD9RvqbMlvGZ6Nvr8BOaG0fwba1ybQFBsp+AHLTC0bjwjIkLKfc/Bwdc5PGutLuZ3OB6YIwE+qlVcd//Tm/3fpTPZbo+ho1pWJimBgovWOHhgf2hZ//nS66ahEdJCYxnFuEgCv9Jqyme0t+z6fkAmXoEzWQwfb4iaoaeXooCmCZn8Qfq/pIlZDwApR6HIuQ24yMxZmN7x4FlZcfBH0BLi/Gz9AKarjHwQ5FLWmhJyYixZLdjtIXwndfzfn/hp/zmtPZz1vRWis7hBofw7IQqsrE8YHXZaMILNll2t8Jr2aCmVBGd2IkeExnKblAVNE0c+ex5dNyXxuQxl3u1U1Rj+pBQeZawuHzK2lqmYXUe/J5ofjVdTU+H/B7vjUlrfIjC2AbK8DYibm30wJUy7F3GVRIb2FQM5H6zbm4BoQ7+zCF8NqEaR94Y2geEdRu4/D7ydcs8/rvu5RVY=----ATTACHMENT:----MzIyNDgzNjYyNDgyOTQyMCA2NTA5MDUzNjQ0NDM0NDU5IDIzOTIwMTQ4MDIwMjQzNzU=