summaryrefslogtreecommitdiffstats
path: root/thirdparty/icu4c/common/brkeng.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/icu4c/common/brkeng.h')
-rw-r--r--thirdparty/icu4c/common/brkeng.h59
1 files changed, 53 insertions, 6 deletions
diff --git a/thirdparty/icu4c/common/brkeng.h b/thirdparty/icu4c/common/brkeng.h
index 240dc8f4d3..42a3d697cf 100644
--- a/thirdparty/icu4c/common/brkeng.h
+++ b/thirdparty/icu4c/common/brkeng.h
@@ -10,6 +10,7 @@
#ifndef BRKENG_H
#define BRKENG_H
+#include "unicode/umisc.h"
#include "unicode/utypes.h"
#include "unicode/uobject.h"
#include "unicode/utext.h"
@@ -21,6 +22,7 @@ class UnicodeSet;
class UStack;
class UVector32;
class DictionaryMatcher;
+class ExternalBreakEngine;
/*******************************************************************
* LanguageBreakEngine
@@ -35,7 +37,7 @@ class DictionaryMatcher;
* <p>LanguageBreakEngines should normally be implemented so as to
* be shared between threads without locking.</p>
*/
-class LanguageBreakEngine : public UMemory {
+class LanguageBreakEngine : public UObject {
public:
/**
@@ -54,10 +56,11 @@ class LanguageBreakEngine : public UMemory {
* a particular kind of break.</p>
*
* @param c A character which begins a run that the engine might handle
+ * @param locale The locale.
* @return true if this engine handles the particular character and break
* type.
*/
- virtual UBool handles(UChar32 c) const = 0;
+ virtual UBool handles(UChar32 c, const char* locale) const = 0;
/**
* <p>Find any breaks within a run in the supplied text.</p>
@@ -81,6 +84,35 @@ class LanguageBreakEngine : public UMemory {
};
/*******************************************************************
+ * BreakEngineWrapper
+ */
+
+/**
+ * <p>BreakEngineWrapper implement LanguageBreakEngine by
+ * a thin wrapper that delegate the task to ExternalBreakEngine
+ * </p>
+ */
+class BreakEngineWrapper : public LanguageBreakEngine {
+ public:
+
+ BreakEngineWrapper(ExternalBreakEngine* engine, UErrorCode &status);
+
+ virtual ~BreakEngineWrapper();
+
+ virtual UBool handles(UChar32 c, const char* locale) const override;
+
+ virtual int32_t findBreaks( UText *text,
+ int32_t startPos,
+ int32_t endPos,
+ UVector32 &foundBreaks,
+ UBool isPhraseBreaking,
+ UErrorCode &status) const override;
+
+ private:
+ LocalPointer<ExternalBreakEngine> delegate;
+};
+
+/*******************************************************************
* LanguageBreakFactory
*/
@@ -125,9 +157,10 @@ class LanguageBreakFactory : public UMemory {
*
* @param c A character that begins a run for which a LanguageBreakEngine is
* sought.
+ * @param locale The locale.
* @return A LanguageBreakEngine with the desired characteristics, or 0.
*/
- virtual const LanguageBreakEngine *getEngineFor(UChar32 c) = 0;
+ virtual const LanguageBreakEngine *getEngineFor(UChar32 c, const char* locale) = 0;
};
@@ -174,10 +207,11 @@ class UnhandledEngine : public LanguageBreakEngine {
* a particular kind of break.</p>
*
* @param c A character which begins a run that the engine might handle
+ * @param locale The locale.
* @return true if this engine handles the particular character and break
* type.
*/
- virtual UBool handles(UChar32 c) const override;
+ virtual UBool handles(UChar32 c, const char* locale) const override;
/**
* <p>Find any breaks within a run in the supplied text.</p>
@@ -247,9 +281,18 @@ class ICULanguageBreakFactory : public LanguageBreakFactory {
*
* @param c A character that begins a run for which a LanguageBreakEngine is
* sought.
+ * @param locale The locale.
* @return A LanguageBreakEngine with the desired characteristics, or 0.
*/
- virtual const LanguageBreakEngine *getEngineFor(UChar32 c) override;
+ virtual const LanguageBreakEngine *getEngineFor(UChar32 c, const char* locale) override;
+
+ /**
+ * Add and adopt the engine and return an URegistryKey.
+ * @param engine The ExternalBreakEngine to be added and adopt. The caller
+ * pass the ownership and should not release the memory after this.
+ * @param status the error code.
+ */
+ virtual void addExternalEngine(ExternalBreakEngine* engine, UErrorCode& status);
protected:
/**
@@ -258,9 +301,10 @@ protected:
*
* @param c A character that begins a run for which a LanguageBreakEngine is
* sought.
+ * @param locale The locale.
* @return A LanguageBreakEngine with the desired characteristics, or 0.
*/
- virtual const LanguageBreakEngine *loadEngineFor(UChar32 c);
+ virtual const LanguageBreakEngine *loadEngineFor(UChar32 c, const char* locale);
/**
* <p>Create a DictionaryMatcher for the specified script and break type.</p>
@@ -269,6 +313,9 @@ protected:
* @return A DictionaryMatcher with the desired characteristics, or nullptr.
*/
virtual DictionaryMatcher *loadDictionaryMatcherFor(UScriptCode script);
+
+ private:
+ void ensureEngines(UErrorCode& status);
};
U_NAMESPACE_END