18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project**********************************************************************
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   Copyright (C) 1999-2004, International Business Machines
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   Corporation and others.  All Rights Reserved.
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project**********************************************************************
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   Date        Name        Description
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   03/14/00    aliu        Creation.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   06/27/00    aliu        Change from C++ class to C struct
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project**********************************************************************
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef PARSEERR_H
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PARSEERR_H
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "unicode/utypes.h"
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The capacity of the context strings in UParseError.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum { U_PARSE_CONTEXT_LEN = 16 };
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * A UParseError struct is used to returned detailed information about
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * parsing errors.  It is used by ICU parsing engines that parse long
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * rules, patterns, or programs, where the text being parsed is long
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * enough that more information than a UErrorCode is needed to
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * localize the error.
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <p>The line, offset, and context fields are optional; parsing
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * engines may choose not to use to use them.
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <p>The preContext and postContext strings include some part of the
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * context surrounding the error.  If the source text is "let for=7"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * and "for" is the error (e.g., because it is a reserved word), then
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * some examples of what a parser might produce are the following:
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <pre>
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * preContext   postContext
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ""           ""            The parser does not support context
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * "let "       "=7"          Pre- and post-context only
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * "let "       "for=7"       Pre- and post-context and error text
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ""           "for"         Error text only
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * </pre>
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * <p>Examples of engines which use UParseError (or may use it in the
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * future) are Transliterator, RuleBasedBreakIterator, and
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * RegexPattern.
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef struct UParseError {
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /**
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * The line on which the error occured.  If the parser uses this
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * field, it sets it to the line number of the source text line on
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * which the error appears, which will be be a value >= 1.  If the
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * parse does not support line numbers, the value will be <= 0.
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * @stable ICU 2.0
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t        line;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /**
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * The character offset to the error.  If the line field is >= 1,
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * then this is the offset from the start of the line.  Otherwise,
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * this is the offset from the start of the text.  If the parser
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * does not support this field, it will have a value < 0.
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * @stable ICU 2.0
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    int32_t        offset;
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /**
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * Textual context before the error.  Null-terminated.  The empty
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * string if not supported by parser.
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * @stable ICU 2.0
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    UChar          preContext[U_PARSE_CONTEXT_LEN];
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    /**
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * The error itself and/or textual context after the error.
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * Null-terminated.  The empty string if not supported by parser.
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     * @stable ICU 2.0
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project     */
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    UChar          postContext[U_PARSE_CONTEXT_LEN];
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} UParseError;
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
89