Example #1
0
        /// <summary>
        /// Sets an option in an XML parser.
        /// </summary>
        /// <param name="parser">A reference to the XML parser to set an option in. </param>
        /// <param name="option">
        /// One of the following options: XML_OPTION_CASE_FOLDING, XML_OPTION_SKIP_TAGSTART,
        /// XML_OPTION_SKIP_WHITE, XML_OPTION_TARGET_ENCODING.
        /// </param>
        /// <param name="value">The option's new value. </param>
        /// <returns>
        /// This function returns FALSE if parser does not refer to a valid parser, or if the option could
        /// not be set. Else the option is set and TRUE is returned.
        /// </returns>
        public static bool xml_parser_set_option(PhpResource parser, XmlOption option, PhpValue value)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null)
            {
                switch (option)
                {
                case XmlOption.XML_OPTION_CASE_FOLDING:
                    xmlParser.EnableCaseFolding = value.ToBoolean();
                    return(true);

                case XmlOption.XML_OPTION_SKIP_WHITE:
                    xmlParser.EnableSkipWhitespace = value.ToBoolean();
                    return(true);

                case XmlOption.XML_OPTION_SKIP_TAGSTART:
                case XmlOption.XML_OPTION_TARGET_ENCODING:
                default:
                    PhpException.Throw(PhpError.Warning, "invalid option value");
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Example #2
0
        /// <summary>
        /// Gets an option value from an XML parser.
        /// </summary>
        /// <param name="parser">A reference to the XML parser to get an option from. </param>
        /// <param name="option">
        /// Which option to fetch. XML_OPTION_CASE_FOLDING and XML_OPTION_TARGET_ENCODING are available.
        /// </param>
        /// <returns>
        /// This function returns FALSE if parser does not refer to a valid parser or if option isn't valid
        /// (generates also a E_WARNING). Else the option's value is returned.
        /// </returns>
        public static PhpValue xml_parser_get_option(PhpResource parser, int option)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null)
            {
                switch ((XmlOption)option)
                {
                case XmlOption.XML_OPTION_CASE_FOLDING:
                    return((PhpValue)xmlParser.EnableCaseFolding);

                case XmlOption.XML_OPTION_SKIP_WHITE:
                    return((PhpValue)xmlParser.EnableSkipWhitespace);

                case XmlOption.XML_OPTION_SKIP_TAGSTART:
                case XmlOption.XML_OPTION_TARGET_ENCODING:
                default:
                    PhpException.Throw(PhpError.Warning, "invalid option value");
                    return(PhpValue.False);
                }
            }
            else
            {
                return(PhpValue.False);
            }
        }
Example #3
0
        /// <summary>
        /// This function parses an XML string into 2 parallel array structures, one (index) containing
        /// pointers to the location of the appropriate values in the values array. These last two
        /// parameters must be passed by reference.
        /// </summary>
        /// <param name="parser">A reference to the XML parser. </param>
        /// <param name="data">A string containing the XML data. </param>
        /// <param name="values">An array containing the values of the XML data.</param>
        /// <param name="index">
        /// An array containing pointers to the location of the appropriate values in the $values.
        /// </param>
        /// <returns>
        /// Returns 0 for failure and 1 for success. This is not the same as FALSE and TRUE, be careful
        /// with operators such as ===.
        /// </returns>
        public static int xml_parse_into_struct(PhpResource parser, string data, PhpAlias values, PhpAlias index = null)
        {
            if (values == null)
            {
                PhpException.Throw(PhpError.Warning, "values argument should not be null");
                return(0);
            }

            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null)
            {
                var values_arr = new PhpArray();
                values.Value = (PhpValue)values_arr;

                PhpArray index_arr;
                if (index != null)
                {
                    index.Value = (PhpValue)(index_arr = new PhpArray());
                }
                else
                {
                    index_arr = null;
                }

                return(xmlParser.ParseIntoStruct(data, values_arr, index_arr) ? 1 : 0);
            }

            PhpException.Throw(PhpError.Warning, "parser argument should contain valid XML parser");
            return(0);
        }
Example #4
0
        public static int xml_get_current_line_number(PhpResource parser)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null)
            {
                return(xmlParser.CurrentLineNumber);
            }

            return(-1);
        }
Example #5
0
        public static int xml_get_current_byte_index(PhpResource parser)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null)
            {
                return(xmlParser.CurrentByteIndex);
            }

            return(-1);
        }
Example #6
0
        public static int xml_get_error_code(PhpResource parser)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null)
            {
                return(xmlParser.ErrorCode);
            }

            return(-1);
        }
Example #7
0
        /// <summary>
        /// This function allows to use parser inside object. All callback functions could be set with
        /// xml_set_element_handler() etc and assumed to be methods of object.
        /// </summary>
        /// <param name="parser">A reference to the XML parser to use inside the object. </param>
        /// <param name="objRef">The object where to use the XML parser.</param>
        /// <returns>Returns TRUE on success or FALSE on failure. </returns>
        public static bool xml_set_object(PhpResource parser, PhpValue objRef)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null)
            {
                xmlParser.HandlerObject = objRef.AsObject();
                return(true);
            }

            return(false);
        }
Example #8
0
        /// <summary>
        /// Sets the external entity reference handler function for the XML parser parser.
        /// </summary>
        /// <param name="parser">
        /// A reference to the XML parser to set up external entity reference handler function.
        /// </param>
        /// <param name="external_entity_ref_handler">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <returns>Returns TRUE on success or FALSE on failure. </returns>
        public static bool xml_set_external_entity_ref_handler(PhpResource parser, PhpValue external_entity_ref_handler)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser == null)
            {
                return(false);
            }

            PhpException.FunctionNotSupported("xml_set_external_entity_ref_handler");
            return(false);
        }
Example #9
0
        /// <summary>
        /// Sets the unparsed entity declaration handler function for the XML parser parser.
        /// </summary>
        /// <param name="parser">
        /// A reference to the XML parser to set up unparsed entity declaration handler function.
        /// </param>
        /// <param name="hdl">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <returns>Returns TRUE on success or FALSE on failure. </returns>
        public static bool xml_set_unparsed_entity_decl_handler(PhpResource parser, PhpValue hdl)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser == null)
            {
                return(false);
            }

            PhpException.FunctionNotSupported(nameof(xml_set_unparsed_entity_decl_handler));
            return(false);
        }
Example #10
0
        /// <summary>
        /// Sets the default handler function for the XML parser parser.
        /// </summary>
        /// <param name="parser">
        /// A reference to the XML parser to set up default handler function.
        /// </param>
        /// <param name="default_handler">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <returns>Returns TRUE on success or FALSE on failure.</returns>
        public static bool xml_set_default_handler(PhpResource parser, PhpValue default_handler)
        {
            IPhpCallable callback;
            var          xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null && (callback = xmlParser.ToCallback(default_handler)) != null)
            {
                xmlParser.DefaultHandler = callback;
                return(true);
            }

            return(false);
        }
Example #11
0
        /// <summary>
        /// Sets the processing instruction (PI) handler function for the XML parser parser.
        /// </summary>
        /// <param name="parser">
        /// A reference to the XML parser to set up processing instruction (PI) handler function.
        /// </param>
        /// <param name="processing_instruction_handler">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <returns>Returns TRUE on success or FALSE on failure. </returns>
        public static bool xml_set_processing_instruction_handler(PhpResource parser, PhpValue processing_instruction_handler)
        {
            IPhpCallable callback;
            var          xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null && (callback = xmlParser.ToCallback(processing_instruction_handler)) != null)
            {
                xmlParser.ProcessingInstructionHandler = callback;
                return(true);
            }

            return(false);
        }
Example #12
0
        /// <summary>
        /// Set a handler to be called when a namespace is declared. Namespace declarations occur
        /// inside start tags. But the namespace declaration start handler is called before the start
        /// tag handler for each namespace declared in that start tag.
        /// </summary>
        /// <param name="parser">
        /// A reference to the XML parser.
        /// </param>
        /// <param name="start_namespace_decl_handler">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <returns>Returns TRUE on success or FALSE on failure. </returns>
        public static bool xml_set_start_namespace_decl_handler(PhpResource parser, PhpValue start_namespace_decl_handler)
        {
            IPhpCallable callback;
            var          xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null && (callback = xmlParser.ToCallback(start_namespace_decl_handler)) != null)
            {
                xmlParser.StartNamespaceDeclHandler = callback;
                return(true);
            }

            return(false);
        }
Example #13
0
        /// <summary>
        /// Sets the character data handler function for the XML parser parser.
        /// </summary>
        /// <param name="parser">
        /// A reference to the XML parser to set up character data handler function.
        /// </param>
        /// <param name="character_data_handler">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <returns>Returns TRUE on success or FALSE on failure. </returns>
        public static bool xml_set_character_data_handler(PhpResource parser, PhpValue character_data_handler)
        {
            IPhpCallable callback;
            var          xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null && (callback = xmlParser.ToCallback(character_data_handler)) != null)
            {
                xmlParser.CharacterDataHandler = callback;
                return(true);
            }

            return(false);
        }
Example #14
0
        /// <summary>
        /// Sets the element handler functions for the XML parser. start_element_handler and
        /// end_element_handler are strings containing the names of functions that must exist
        /// when xml_parse() is called for parser.
        /// </summary>
        /// <param name="parser">
        /// A reference to the XML parser to set up start and end element handler functions.
        /// </param>
        /// <param name="start_element_handler">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <param name="end_element_handler">
        /// String (or array) containing the name of a function that must exist when xml_parse() is
        /// called for parser.
        /// </param>
        /// <returns>Returns TRUE on success or FALSE on failure. </returns>
        public static bool xml_set_element_handler(PhpResource parser, PhpValue start_element_handler, PhpValue end_element_handler)
        {
            IPhpCallable callback_start, callback_end;
            var          xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser != null && (callback_start = xmlParser.ToCallback(start_element_handler)) != null && (callback_end = xmlParser.ToCallback(end_element_handler)) != null)
            {
                xmlParser.StartElementHandler = callback_start;
                xmlParser.EndElementHandler   = callback_end;

                return(true);
            }

            return(false);
        }
Example #15
0
        /// <summary>
        /// Frees the given XML parser.
        /// </summary>
        /// <param name="parser">A reference to the XML parser to free.</param>
        /// <returns>
        /// This function returns FALSE if parser does not refer to a valid parser, or else it frees the
        /// parser and returns TRUE.
        /// </returns>
        public static bool xml_parser_free(PhpResource parser)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            if (xmlParser == null)
            {
                return(false);
            }

            // Since .NET hasn't online XML parser, we need the whole XML data to parse them properly.
            // Notice user, he has to parse the XML by passing is_final=true to the last xml_parse function call.
            if (!xmlParser.InputQueueIsEmpty)
            {
                PhpException.Throw(PhpError.Notice, Resources.LibResources.not_parsed_data_left);
            }

            xmlParser.Dispose();
            return(true);
        }
Example #16
0
        /// <summary>
        /// Parses an XML document. The handlers for the configured events are called as many times as
        /// necessary.
        /// </summary>
        /// <param name="parser">A reference to the XML parser to use.</param>
        /// <param name="data">
        /// Chunk of data to parse. A document may be parsed piece-wise by calling xml_parse() several
        /// times with new data, as long as the is_final parameter is set and TRUE when the last data is
        /// parsed.
        /// </param>
        /// <param name="is_final">If set and TRUE, data is the last piece of data sent in this parse.</param>
        /// <returns>
        /// <para>Returns 1 on success or 0 on failure.</para>
        /// <para>
        /// For unsuccessful parses, error information can be retrieved with xml_get_error_code(),
        /// xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number() and
        /// xml_get_current_byte_index().
        /// </para>
        /// </returns>
        public static int xml_parse(PhpResource parser, string data, bool is_final = false)
        {
            var xmlParser = XmlParserResource.ValidResource(parser);

            return((xmlParser != null && xmlParser.Parse(data, is_final)) ? 1 : 0);
        }