. * * @file * @ingroup Skins */ function libxml_display_error( $error ) { $return = ''; switch ( $error->level ) { case LIBXML_ERR_WARNING: $return .= "Warning $error->code: "; break; case LIBXML_ERR_ERROR: $return .= "Error $error->code: "; break; case LIBXML_ERR_FATAL: $return .= "Fatal Error $error->code: "; break; } $return .= trim( $error->message ); if ( $error->file ) { $return .= " in $error->file"; } $return .= " on line $error->line\n"; return $return; } function libxml_display_errors() { $errors = libxml_get_errors(); print "\n"; foreach ( $errors as $error ) { print libxml_display_error( $error ); } print "\n"; libxml_clear_errors(); } // FIXME: WTF? Move into validateFile()? libxml_use_internal_errors( true ); function validateFile( $filename ) { print $filename . ': '; if ( !file_exists( $filename ) ) { print "File not found.\n"; return; } if ( !is_file( $filename ) ) { print "Not a file.\n"; return; } $xml = new DOMDocument(); $xml->load( $filename ); if ( !$xml->relaxNGValidate( 'https://cmln.github.io/chameleon/schema/1.0/layout.rng' ) ) { libxml_display_errors(); } else { print "Ok!\n"; } } $files = $argv; array_shift( $files ); foreach ( $files as $file ) { validateFile( $file ); }