xref: /AOO41X/main/sw/inc/breakit.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef _BREAKIT_HXX
29 #define _BREAKIT_HXX
30 
31 #include <tools/solar.h>
32 #include <i18npool/lang.h>
33 #include <com/sun/star/uno/Reference.h>
34 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
35 #include <com/sun/star/i18n/XBreakIterator.hpp>
36 #include <com/sun/star/i18n/XScriptTypeDetector.hpp>
37 #include <com/sun/star/i18n/ForbiddenCharacters.hdl>
38 #include <swdllapi.h>
39 
40 class String;
41 
42 /*************************************************************************
43  *						class SwBreakIt
44  *************************************************************************/
45 
46 
47 class SW_DLLPUBLIC SwBreakIt
48 {
49     com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > m_xMSF;
50     mutable com::sun::star::uno::Reference< com::sun::star::i18n::XBreakIterator > xBreak;
51     com::sun::star::uno::Reference< com::sun::star::i18n::XScriptTypeDetector > xCTLDetect;
52 
53 
54     com::sun::star::lang::Locale * m_pLocale;
55     com::sun::star::i18n::ForbiddenCharacters * m_pForbidden;
56 
57 	LanguageType aLast;          // language of the current locale
58 	LanguageType aForbiddenLang; // language of the current forbiddenChar struct
59 
60 	void _GetLocale( const LanguageType aLang );
61 	void _GetForbidden( const LanguageType	aLang );
62 
63     void createBreakIterator() const;
64     void createScriptTypeDetector();
65 
66 	// forbidden and not implemented.
67 	SwBreakIt();
68 	SwBreakIt( const SwBreakIt &);
69 	SwBreakIt & operator= ( const SwBreakIt &);
70 
71 	// private (see @ _Create, _Delete).
72 	explicit SwBreakIt(
73         const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > & rxMSF);
74 	~SwBreakIt();
75 
76 public:
77 	// private (see @ source/core/bastyp/init.cxx).
78 	static void _Create(
79         const com::sun::star::uno::Reference< com::sun::star::lang::XMultiServiceFactory > & rxMSF);
80 	static void _Delete();
81 
82 public:
83 	static SwBreakIt * Get();
84 
85     com::sun::star::uno::Reference< com::sun::star::i18n::XBreakIterator > GetBreakIter()
86 	{
87         createBreakIterator();
88 		return xBreak;
89 	}
90 
91     com::sun::star::uno::Reference< com::sun::star::i18n::XScriptTypeDetector > GetScriptTypeDetector()
92     {
93         createScriptTypeDetector();
94         return xCTLDetect;
95     }
96 
97     const com::sun::star::lang::Locale& GetLocale( const LanguageType aLang )
98 	{
99 		if( !m_pLocale || aLast != aLang )
100 			_GetLocale( aLang );
101 		return *m_pLocale;
102 	}
103 
104     const com::sun::star::i18n::ForbiddenCharacters& GetForbidden( const LanguageType aLang )
105 	{
106 		if( !m_pForbidden || aForbiddenLang != aLang )
107 			_GetForbidden( aLang );
108 		return *m_pForbidden;
109 	}
110 
111 	sal_uInt16 GetRealScriptOfText( const String& rTxt, xub_StrLen nPos ) const;
112    	sal_uInt16 GetAllScriptsOfText( const String& rTxt ) const;
113 };
114 
115 #define SW_BREAKITER()  SwBreakIt::Get()
116 #define SW_XBREAKITER() SW_BREAKITER()->GetBreakIter()
117 
118 // @@@ backward compatibility @@@
119 SW_DLLPUBLIC extern SwBreakIt* pBreakIt;
120 
121 #endif
122 
123