private $logger;
/**
- * Constructor.
- *
* Primary job is to initialize the XMLParser
+ * @param LoggerInterface|null $logger
*/
function __construct( LoggerInterface $logger = null ) {
-
if ( !function_exists( 'xml_parser_create_ns' ) ) {
// this should already be checked by this point
throw new RuntimeException( 'XMP support requires XML Parser' );
* For example in jpeg's with extendedXMP
*/
private function resetXMLParser() {
-
$this->destroyXMLParser();
$this->xmlParser = xml_parser_create_ns( 'UTF-8', ' ' );
/**
* Check if this instance supports using this class
+ * @return bool
*/
public static function isSupported() {
return function_exists( 'xml_parser_create_ns' ) && class_exists( 'XMLReader' );
if ( isset( $data['xmp-exif']['GPSAltitudeRef'] )
&& isset( $data['xmp-exif']['GPSAltitude'] )
) {
-
// Must convert to a real before multiplying by -1
// XMPValidate guarantees there will always be a '/' in this value.
list( $nom, $denom ) = explode( '/', $data['xmp-exif']['GPSAltitude'] );
* @throws RuntimeException On invalid data
*/
function char( $parser, $data ) {
-
$data = trim( $data );
if ( trim( $data ) === "" ) {
return;
* @throws RuntimeException
*/
private function endElementNested( $elm ) {
-
/* cur item must be the same as $elm, unless if in MODE_STRUCT
- in which case it could also be rdf:Description */
+ * in which case it could also be rdf:Description */
if ( $this->curItem[0] !== $elm
&& !( $elm === self::NS_RDF . ' Description'
&& $this->mode[0] === self::MODE_STRUCT )
* @param string $elm Namespace and element
*/
private function endElementModeQDesc( $elm ) {
-
if ( $elm === self::NS_RDF . ' value' ) {
list( $ns, $tag ) = explode( ' ', $this->curItem[0], 2 );
$this->saveValue( $ns, $tag, $this->charContent );
if ( $elm === self::NS_RDF . ' Seq' ) {
array_unshift( $this->mode, self::MODE_LI );
} elseif ( $elm === self::NS_RDF . ' Bag' ) {
- # bug 27105
+ # T29105
$this->logger->info( __METHOD__ . ' Expected an rdf:Seq, but got an rdf:Bag. Pretending'
. ' it is a Seq, since some buggy software is known to screw this up.' );
array_unshift( $this->mode, self::MODE_LI );
*/
private function startElementModeInitial( $ns, $tag, $attribs ) {
if ( $ns !== self::NS_RDF ) {
-
if ( isset( $this->items[$ns][$tag] ) ) {
if ( isset( $this->items[$ns][$tag]['structPart'] ) ) {
// If this element is supposed to appear only as
*/
private function startElementModeStruct( $ns, $tag, $attribs ) {
if ( $ns !== self::NS_RDF ) {
-
if ( isset( $this->items[$ns][$tag] ) ) {
if ( isset( $this->items[$ns][$this->ancestorStruct]['children'] )
&& !isset( $this->items[$ns][$this->ancestorStruct]['children'][$tag] )
}
} else {
array_unshift( $this->mode, self::MODE_IGNORE );
- array_unshift( $this->curItem, $elm );
+ array_unshift( $this->curItem, $ns . ' ' . $tag );
return;
}
* @throws RuntimeException
*/
function startElement( $parser, $elm, $attribs ) {
-
if ( $elm === self::NS_RDF . ' RDF'
|| $elm === 'adobe:ns:meta/ xmpmeta'
|| $elm === 'adobe:ns:meta/ xapmeta'
* @param string $val Value to save
*/
private function saveValue( $ns, $tag, $val ) {
-
$info =& $this->items[$ns][$tag];
$finalName = isset( $info['map_name'] )
? $info['map_name'] : $tag;