mirror of
https://gitlab.com/drummyfish/anarch.git
synced 2024-11-25 02:12:19 -05:00
420 lines
15 KiB
C
420 lines
15 KiB
C
// © 2016 and later: Unicode, Inc. and others.
|
|
// License & terms of use: http://www.unicode.org/copyright.html
|
|
/*
|
|
**********************************************************************
|
|
* Copyright (C) 2005-2013, International Business Machines
|
|
* Corporation and others. All Rights Reserved.
|
|
**********************************************************************
|
|
* file name: ucsdet.h
|
|
* encoding: UTF-8
|
|
* indentation:4
|
|
*
|
|
* created on: 2005Aug04
|
|
* created by: Andy Heninger
|
|
*
|
|
* ICU Character Set Detection, API for C
|
|
*
|
|
* Draft version 18 Oct 2005
|
|
*
|
|
*/
|
|
|
|
#ifndef __UCSDET_H
|
|
#define __UCSDET_H
|
|
|
|
#include "unicode/utypes.h"
|
|
|
|
#if !UCONFIG_NO_CONVERSION
|
|
|
|
#include "unicode/localpointer.h"
|
|
#include "unicode/uenum.h"
|
|
|
|
/**
|
|
* \file
|
|
* \brief C API: Charset Detection API
|
|
*
|
|
* This API provides a facility for detecting the
|
|
* charset or encoding of character data in an unknown text format.
|
|
* The input data can be from an array of bytes.
|
|
* <p>
|
|
* Character set detection is at best an imprecise operation. The detection
|
|
* process will attempt to identify the charset that best matches the characteristics
|
|
* of the byte data, but the process is partly statistical in nature, and
|
|
* the results can not be guaranteed to always be correct.
|
|
* <p>
|
|
* For best accuracy in charset detection, the input data should be primarily
|
|
* in a single language, and a minimum of a few hundred bytes worth of plain text
|
|
* in the language are needed. The detection process will attempt to
|
|
* ignore html or xml style markup that could otherwise obscure the content.
|
|
* <p>
|
|
* An alternative to the ICU Charset Detector is the
|
|
* Compact Encoding Detector, https://github.com/google/compact_enc_det.
|
|
* It often gives more accurate results, especially with short input samples.
|
|
*/
|
|
|
|
|
|
struct UCharsetDetector;
|
|
/**
|
|
* Structure representing a charset detector
|
|
* @stable ICU 3.6
|
|
*/
|
|
typedef struct UCharsetDetector UCharsetDetector;
|
|
|
|
struct UCharsetMatch;
|
|
/**
|
|
* Opaque structure representing a match that was identified
|
|
* from a charset detection operation.
|
|
* @stable ICU 3.6
|
|
*/
|
|
typedef struct UCharsetMatch UCharsetMatch;
|
|
|
|
/**
|
|
* Open a charset detector.
|
|
*
|
|
* @param status Any error conditions occurring during the open
|
|
* operation are reported back in this variable.
|
|
* @return the newly opened charset detector.
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE UCharsetDetector * U_EXPORT2
|
|
ucsdet_open(UErrorCode *status);
|
|
|
|
/**
|
|
* Close a charset detector. All storage and any other resources
|
|
* owned by this charset detector will be released. Failure to
|
|
* close a charset detector when finished with it can result in
|
|
* memory leaks in the application.
|
|
*
|
|
* @param ucsd The charset detector to be closed.
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE void U_EXPORT2
|
|
ucsdet_close(UCharsetDetector *ucsd);
|
|
|
|
#if U_SHOW_CPLUSPLUS_API
|
|
|
|
U_NAMESPACE_BEGIN
|
|
|
|
/**
|
|
* \class LocalUCharsetDetectorPointer
|
|
* "Smart pointer" class, closes a UCharsetDetector via ucsdet_close().
|
|
* For most methods see the LocalPointerBase base class.
|
|
*
|
|
* @see LocalPointerBase
|
|
* @see LocalPointer
|
|
* @stable ICU 4.4
|
|
*/
|
|
U_DEFINE_LOCAL_OPEN_POINTER(LocalUCharsetDetectorPointer, UCharsetDetector, ucsdet_close);
|
|
|
|
U_NAMESPACE_END
|
|
|
|
#endif
|
|
|
|
/**
|
|
* Set the input byte data whose charset is to detected.
|
|
*
|
|
* Ownership of the input text byte array remains with the caller.
|
|
* The input string must not be altered or deleted until the charset
|
|
* detector is either closed or reset to refer to different input text.
|
|
*
|
|
* @param ucsd the charset detector to be used.
|
|
* @param textIn the input text of unknown encoding. .
|
|
* @param len the length of the input text, or -1 if the text
|
|
* is NUL terminated.
|
|
* @param status any error conditions are reported back in this variable.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE void U_EXPORT2
|
|
ucsdet_setText(UCharsetDetector *ucsd, const char *textIn, int32_t len, UErrorCode *status);
|
|
|
|
|
|
/** Set the declared encoding for charset detection.
|
|
* The declared encoding of an input text is an encoding obtained
|
|
* by the user from an http header or xml declaration or similar source that
|
|
* can be provided as an additional hint to the charset detector.
|
|
*
|
|
* How and whether the declared encoding will be used during the
|
|
* detection process is TBD.
|
|
*
|
|
* @param ucsd the charset detector to be used.
|
|
* @param encoding an encoding for the current data obtained from
|
|
* a header or declaration or other source outside
|
|
* of the byte data itself.
|
|
* @param length the length of the encoding name, or -1 if the name string
|
|
* is NUL terminated.
|
|
* @param status any error conditions are reported back in this variable.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE void U_EXPORT2
|
|
ucsdet_setDeclaredEncoding(UCharsetDetector *ucsd, const char *encoding, int32_t length, UErrorCode *status);
|
|
|
|
|
|
/**
|
|
* Return the charset that best matches the supplied input data.
|
|
*
|
|
* Note though, that because the detection
|
|
* only looks at the start of the input data,
|
|
* there is a possibility that the returned charset will fail to handle
|
|
* the full set of input data.
|
|
* <p>
|
|
* The returned UCharsetMatch object is owned by the UCharsetDetector.
|
|
* It will remain valid until the detector input is reset, or until
|
|
* the detector is closed.
|
|
* <p>
|
|
* The function will fail if
|
|
* <ul>
|
|
* <li>no charset appears to match the data.</li>
|
|
* <li>no input text has been provided</li>
|
|
* </ul>
|
|
*
|
|
* @param ucsd the charset detector to be used.
|
|
* @param status any error conditions are reported back in this variable.
|
|
* @return a UCharsetMatch representing the best matching charset,
|
|
* or NULL if no charset matches the byte data.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE const UCharsetMatch * U_EXPORT2
|
|
ucsdet_detect(UCharsetDetector *ucsd, UErrorCode *status);
|
|
|
|
|
|
/**
|
|
* Find all charset matches that appear to be consistent with the input,
|
|
* returning an array of results. The results are ordered with the
|
|
* best quality match first.
|
|
*
|
|
* Because the detection only looks at a limited amount of the
|
|
* input byte data, some of the returned charsets may fail to handle
|
|
* the all of input data.
|
|
* <p>
|
|
* The returned UCharsetMatch objects are owned by the UCharsetDetector.
|
|
* They will remain valid until the detector is closed or modified
|
|
*
|
|
* <p>
|
|
* Return an error if
|
|
* <ul>
|
|
* <li>no charsets appear to match the input data.</li>
|
|
* <li>no input text has been provided</li>
|
|
* </ul>
|
|
*
|
|
* @param ucsd the charset detector to be used.
|
|
* @param matchesFound pointer to a variable that will be set to the
|
|
* number of charsets identified that are consistent with
|
|
* the input data. Output only.
|
|
* @param status any error conditions are reported back in this variable.
|
|
* @return A pointer to an array of pointers to UCharSetMatch objects.
|
|
* This array, and the UCharSetMatch instances to which it refers,
|
|
* are owned by the UCharsetDetector, and will remain valid until
|
|
* the detector is closed or modified.
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE const UCharsetMatch ** U_EXPORT2
|
|
ucsdet_detectAll(UCharsetDetector *ucsd, int32_t *matchesFound, UErrorCode *status);
|
|
|
|
|
|
|
|
/**
|
|
* Get the name of the charset represented by a UCharsetMatch.
|
|
*
|
|
* The storage for the returned name string is owned by the
|
|
* UCharsetMatch, and will remain valid while the UCharsetMatch
|
|
* is valid.
|
|
*
|
|
* The name returned is suitable for use with the ICU conversion APIs.
|
|
*
|
|
* @param ucsm The charset match object.
|
|
* @param status Any error conditions are reported back in this variable.
|
|
* @return The name of the matching charset.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE const char * U_EXPORT2
|
|
ucsdet_getName(const UCharsetMatch *ucsm, UErrorCode *status);
|
|
|
|
/**
|
|
* Get a confidence number for the quality of the match of the byte
|
|
* data with the charset. Confidence numbers range from zero to 100,
|
|
* with 100 representing complete confidence and zero representing
|
|
* no confidence.
|
|
*
|
|
* The confidence values are somewhat arbitrary. They define an
|
|
* an ordering within the results for any single detection operation
|
|
* but are not generally comparable between the results for different input.
|
|
*
|
|
* A confidence value of ten does have a general meaning - it is used
|
|
* for charsets that can represent the input data, but for which there
|
|
* is no other indication that suggests that the charset is the correct one.
|
|
* Pure 7 bit ASCII data, for example, is compatible with a
|
|
* great many charsets, most of which will appear as possible matches
|
|
* with a confidence of 10.
|
|
*
|
|
* @param ucsm The charset match object.
|
|
* @param status Any error conditions are reported back in this variable.
|
|
* @return A confidence number for the charset match.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE int32_t U_EXPORT2
|
|
ucsdet_getConfidence(const UCharsetMatch *ucsm, UErrorCode *status);
|
|
|
|
/**
|
|
* Get the RFC 3066 code for the language of the input data.
|
|
*
|
|
* The Charset Detection service is intended primarily for detecting
|
|
* charsets, not language. For some, but not all, charsets, a language is
|
|
* identified as a byproduct of the detection process, and that is what
|
|
* is returned by this function.
|
|
*
|
|
* CAUTION:
|
|
* 1. Language information is not available for input data encoded in
|
|
* all charsets. In particular, no language is identified
|
|
* for UTF-8 input data.
|
|
*
|
|
* 2. Closely related languages may sometimes be confused.
|
|
*
|
|
* If more accurate language detection is required, a linguistic
|
|
* analysis package should be used.
|
|
*
|
|
* The storage for the returned name string is owned by the
|
|
* UCharsetMatch, and will remain valid while the UCharsetMatch
|
|
* is valid.
|
|
*
|
|
* @param ucsm The charset match object.
|
|
* @param status Any error conditions are reported back in this variable.
|
|
* @return The RFC 3066 code for the language of the input data, or
|
|
* an empty string if the language could not be determined.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE const char * U_EXPORT2
|
|
ucsdet_getLanguage(const UCharsetMatch *ucsm, UErrorCode *status);
|
|
|
|
|
|
/**
|
|
* Get the entire input text as a UChar string, placing it into
|
|
* a caller-supplied buffer. A terminating
|
|
* NUL character will be appended to the buffer if space is available.
|
|
*
|
|
* The number of UChars in the output string, not including the terminating
|
|
* NUL, is returned.
|
|
*
|
|
* If the supplied buffer is smaller than required to hold the output,
|
|
* the contents of the buffer are undefined. The full output string length
|
|
* (in UChars) is returned as always, and can be used to allocate a buffer
|
|
* of the correct size.
|
|
*
|
|
*
|
|
* @param ucsm The charset match object.
|
|
* @param buf A UChar buffer to be filled with the converted text data.
|
|
* @param cap The capacity of the buffer in UChars.
|
|
* @param status Any error conditions are reported back in this variable.
|
|
* @return The number of UChars in the output string.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE int32_t U_EXPORT2
|
|
ucsdet_getUChars(const UCharsetMatch *ucsm,
|
|
UChar *buf, int32_t cap, UErrorCode *status);
|
|
|
|
|
|
|
|
/**
|
|
* Get an iterator over the set of all detectable charsets -
|
|
* over the charsets that are known to the charset detection
|
|
* service.
|
|
*
|
|
* The returned UEnumeration provides access to the names of
|
|
* the charsets.
|
|
*
|
|
* <p>
|
|
* The state of the Charset detector that is passed in does not
|
|
* affect the result of this function, but requiring a valid, open
|
|
* charset detector as a parameter insures that the charset detection
|
|
* service has been safely initialized and that the required detection
|
|
* data is available.
|
|
*
|
|
* <p>
|
|
* <b>Note:</b> Multiple different charset encodings in a same family may use
|
|
* a single shared name in this implementation. For example, this method returns
|
|
* an array including "ISO-8859-1" (ISO Latin 1), but not including "windows-1252"
|
|
* (Windows Latin 1). However, actual detection result could be "windows-1252"
|
|
* when the input data matches Latin 1 code points with any points only available
|
|
* in "windows-1252".
|
|
*
|
|
* @param ucsd a Charset detector.
|
|
* @param status Any error conditions are reported back in this variable.
|
|
* @return an iterator providing access to the detectable charset names.
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE UEnumeration * U_EXPORT2
|
|
ucsdet_getAllDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status);
|
|
|
|
/**
|
|
* Test whether input filtering is enabled for this charset detector.
|
|
* Input filtering removes text that appears to be HTML or xml
|
|
* markup from the input before applying the code page detection
|
|
* heuristics.
|
|
*
|
|
* @param ucsd The charset detector to check.
|
|
* @return TRUE if filtering is enabled.
|
|
* @stable ICU 3.6
|
|
*/
|
|
|
|
U_STABLE UBool U_EXPORT2
|
|
ucsdet_isInputFilterEnabled(const UCharsetDetector *ucsd);
|
|
|
|
|
|
/**
|
|
* Enable filtering of input text. If filtering is enabled,
|
|
* text within angle brackets ("<" and ">") will be removed
|
|
* before detection, which will remove most HTML or xml markup.
|
|
*
|
|
* @param ucsd the charset detector to be modified.
|
|
* @param filter <code>true</code> to enable input text filtering.
|
|
* @return The previous setting.
|
|
*
|
|
* @stable ICU 3.6
|
|
*/
|
|
U_STABLE UBool U_EXPORT2
|
|
ucsdet_enableInputFilter(UCharsetDetector *ucsd, UBool filter);
|
|
|
|
#ifndef U_HIDE_INTERNAL_API
|
|
/**
|
|
* Get an iterator over the set of detectable charsets -
|
|
* over the charsets that are enabled by the specified charset detector.
|
|
*
|
|
* The returned UEnumeration provides access to the names of
|
|
* the charsets.
|
|
*
|
|
* @param ucsd a Charset detector.
|
|
* @param status Any error conditions are reported back in this variable.
|
|
* @return an iterator providing access to the detectable charset names by
|
|
* the specified charset detector.
|
|
* @internal
|
|
*/
|
|
U_INTERNAL UEnumeration * U_EXPORT2
|
|
ucsdet_getDetectableCharsets(const UCharsetDetector *ucsd, UErrorCode *status);
|
|
|
|
/**
|
|
* Enable or disable individual charset encoding.
|
|
* A name of charset encoding must be included in the names returned by
|
|
* {@link #ucsdet_getAllDetectableCharsets()}.
|
|
*
|
|
* @param ucsd a Charset detector.
|
|
* @param encoding encoding the name of charset encoding.
|
|
* @param enabled <code>TRUE</code> to enable, or <code>FALSE</code> to disable the
|
|
* charset encoding.
|
|
* @param status receives the return status. When the name of charset encoding
|
|
* is not supported, U_ILLEGAL_ARGUMENT_ERROR is set.
|
|
* @internal
|
|
*/
|
|
U_INTERNAL void U_EXPORT2
|
|
ucsdet_setDetectableCharset(UCharsetDetector *ucsd, const char *encoding, UBool enabled, UErrorCode *status);
|
|
#endif /* U_HIDE_INTERNAL_API */
|
|
|
|
#endif
|
|
#endif /* __UCSDET_H */
|
|
|
|
|