Sha256: 82793c6c5445663208d127d5f6e8e4bcc2f159b20545034687fd500827e1e776

Contents?: true

Size: 1.44 KB

Versions: 8

Compression:

Stored size: 1.44 KB

Contents

module Nokogiri
  module XML
    class RelaxNG < Schema
      def validate_document(document) # :nodoc:
        errors = []

        ctx = LibXML.xmlRelaxNGNewValidCtxt(cstruct)
        raise RuntimeError.new("Could not create a validation context") if ctx.null?

        LibXML.xmlRelaxNGSetValidStructuredErrors(ctx,
          SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?

        LibXML.xmlRelaxNGValidateDoc(ctx, document.cstruct)

        LibXML.xmlRelaxNGFreeValidCtxt(ctx)

        errors
      end
      private :validate_document

      def self.read_memory(content) # :nodoc:
        ctx = LibXML.xmlRelaxNGNewMemParserCtxt(content, content.length)

        errors = []

        LibXML.xmlSetStructuredErrorFunc(nil, SyntaxError.error_array_pusher(errors))
        LibXML.xmlRelaxNGSetParserStructuredErrors(
          ctx, SyntaxError.error_array_pusher(errors), nil) unless Nokogiri.is_2_6_16?

        schema_ptr = LibXML.xmlRelaxNGParse(ctx)

        LibXML.xmlSetStructuredErrorFunc(nil, nil)
        LibXML.xmlRelaxNGFreeParserCtxt(ctx)

        if schema_ptr.null?
          error = LibXML.xmlGetLastError
          if error
            raise SyntaxError.wrap(error)
          else
            raise RuntimeError, "Could not parse document"
          end
        end

        schema = allocate
        schema.cstruct = LibXML::XmlRelaxNG.new schema_ptr
        schema.errors = errors
        schema
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
nokogiri-1.3.0-x86-mingw32 lib/nokogiri/ffi/xml/relax_ng.rb
nokogiri-1.3.0-java lib/nokogiri/ffi/xml/relax_ng.rb
nokogiri-1.3.0-x86-mswin32 lib/nokogiri/ffi/xml/relax_ng.rb
nokogiri-1.3.1-x86-mingw32 lib/nokogiri/ffi/xml/relax_ng.rb
nokogiri-1.3.0 lib/nokogiri/ffi/xml/relax_ng.rb
nokogiri-1.3.1-java lib/nokogiri/ffi/xml/relax_ng.rb
nokogiri-1.3.1 lib/nokogiri/ffi/xml/relax_ng.rb
nokogiri-1.3.1-x86-mswin32 lib/nokogiri/ffi/xml/relax_ng.rb