25 #include <com/sun/star/beans/XMultiPropertySet.hpp>
26 #include <com/sun/star/beans/XPropertiesChangeListener.hpp>
27 #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
29 #include <officecfg/Office/Common.hxx>
30 #include <rtl/ustring.hxx>
59 sal_uInt16 nStart, nEnd;
65 #define MAX_SYNTAX_HIGHLIGHT 20
66 #define MAX_HIGHLIGHTTIME 200
82 const sal_uInt16 nStrLen = rSource.getLength();
83 sal_uInt16 nInsert = 0;
84 sal_uInt16 nActPos = 0;
86 sal_uInt16 nPortEnd = 0;
88 while(nActPos < nStrLen)
90 if((nActPos < nStrLen - 2) && (rSource[nActPos] == cOpenBracket))
94 if(nPortEnd < nActPos - 1 )
97 aText.nStart = nPortEnd;
100 aText.nEnd = nActPos - 1;
102 aPortionList.push_back( aText );
107 if(cExclamation == cFollowFirst)
110 if(cMinus == cFollowNext &&
111 nActPos < nStrLen - 3 && cMinus == rSource[nActPos + 3])
117 nPortStart = nActPos;
118 nPortEnd = nActPos + 1;
120 else if(cSlash == cFollowFirst)
123 nPortStart = nActPos;
129 sal_uInt16 nSrchPos = nActPos;
130 while(++nSrchPos < nStrLen - 1)
133 if( cNext == cSpace ||
138 else if(cNext == cCloseBracket)
143 if(nSrchPos > nActPos + 1)
146 OUString sToken = rSource.copy(nActPos + 1, nSrchPos - nActPos - 1 );
147 sToken = sToken.toAsciiUpperCase();
149 if(nToken != HtmlTokenId::NONE)
154 nPortStart = nActPos;
162 <<
" not recognised!");
171 for(sal_uInt16
i = nPortEnd;
i < nStrLen;
i++)
172 if(cCloseBracket == rSource[
i])
182 nPortEnd = nStrLen - 1;
188 aTextPortion.nStart = nPortStart + 1;
189 aTextPortion.nEnd = nPortEnd;
190 aTextPortion.eType = eFoundType;
191 aPortionList.push_back( aTextPortion );
199 if(nInsert && nPortEnd < nActPos - 1)
201 aText.nStart = nPortEnd + 1;
202 aText.nEnd = nActPos - 1;
204 aPortionList.push_back( aText );
210 public cppu::WeakImplHelper< css::beans::XPropertiesChangeListener >
218 virtual void SAL_CALL
disposing(css::lang::EventObject
const &)
override
225 css::uno::Sequence< css::beans::PropertyChangeEvent >
const &)
override
238 m_pHScrollbar(nullptr),
239 m_pVScrollbar(nullptr),
241 m_pSrcView(pParentView),
245 m_eSourceEncoding(osl_getThreadTextEncoding()),
247 m_bHighlighting(false),
248 m_aSyntaxIdle(
"sw uibase SwSrcEditWindow Syntax")
256 css::uno::Reference< css::beans::XMultiPropertySet >
n(
258 css::uno::UNO_QUERY_THROW);
260 osl::MutexGuard g(
mutex_);
263 css::uno::Sequence< OUString > s(2);
266 n->addPropertiesChangeListener(s,
m_xListener.get());
276 css::uno::Reference< css::beans::XMultiPropertySet >
n;
278 osl::MutexGuard g(
mutex_);
282 n->removePropertiesChangeListener(
m_xListener.get());
304 Window::DataChanged( rDCEvt );
308 case DataChangedEventType::SETTINGS:
313 if( rDCEvt.
GetFlags() & AllSettingsFlags::STYLE )
330 if ( nMaxVisAreaStart < 0 )
331 nMaxVisAreaStart = 0;
332 if (
m_pTextView->GetStartDocPos().Y() > nMaxVisAreaStart )
335 aStartDocPos.setY( nMaxVisAreaStart );
340 Size aScrollSz(aOutSz.
Width() - nScrollStd, nScrollStd );
345 aScrollSz.setWidth( aScrollSz.Height() );
346 aScrollSz.setHeight( aOutSz.
Height() );
347 aScrollPos =
Point(aOutSz.
Width() - nScrollStd, 0);
358 if(m_nStartLine < m_pTextEngine->GetParagraphCount())
375 Window::DataChanged( rDCEvt );
379 case DataChangedEventType::SETTINGS:
381 if( rDCEvt.
GetFlags() & AllSettingsFlags::STYLE )
427 case CommandEventId::ContextMenu:
430 case CommandEventId::Wheel:
431 case CommandEventId::StartAutoScroll:
432 case CommandEventId::AutoScroll:
435 if( !pWData || CommandWheelMode::ZOOM != pWData->
GetMode() )
446 Window::Command(rCEvt);
462 Window::KeyInput( rKEvt );
468 rBindings.
Update( SID_BASICIDE_STAT_POS );
571 if(pScroll == m_pVScrollbar)
573 tools::Long nDiff = m_pTextView->GetStartDocPos().Y() - pScroll->GetThumbPos();
574 GetTextView()->Scroll( 0, nDiff );
575 m_pTextView->ShowCursor(
false );
576 pScroll->SetThumbPos( m_pTextView->GetStartDocPos().Y() );
580 tools::Long nDiff = m_pTextView->GetStartDocPos().X() - pScroll->GetThumbPos();
581 GetTextView()->Scroll( nDiff, 0 );
582 m_pTextView->ShowCursor(
false );
583 pScroll->SetThumbPos( m_pTextView->GetStartDocPos().X() );
585 GetSrcView()->GetViewFrame()->GetBindings().Invalidate( SID_TABLE_CELL );
591 SAL_WARN_IF(m_pTextView ==
nullptr,
"sw",
"No View yet, but syntax highlighting?!");
593 m_bHighlighting =
true;
602 if(!m_aSyntaxLineTable.empty())
603 for(sal_uInt16
i = 0;
i < 80 && nCount < 40;
i++, nCur++)
605 if(m_aSyntaxLineTable.find(nCur) != m_aSyntaxLineTable.end())
607 DoSyntaxHighlight( nCur );
608 m_aSyntaxLineTable.erase( nCur );
610 if(m_aSyntaxLineTable.empty())
622 sal_uInt16 nLine = *m_aSyntaxLineTable.begin();
623 DoSyntaxHighlight( nLine );
624 m_aSyntaxLineTable.erase(nLine);
632 if(!m_aSyntaxLineTable.empty() && !pIdle->IsActive())
637 m_nCurTextWidth = m_pTextEngine->CalcTextWidth() + 25;
638 if ( m_nCurTextWidth != nPrevTextWidth )
639 SetScrollBarRanges();
640 m_bHighlighting =
false;
673 size_t nCount = aPortionList.size();
678 if ( rLast.nStart > rLast.nEnd )
681 aPortionList.pop_back();
690 sal_uInt16 nLastEnd = 0;
692 for (
size_t i = 0;
i < nCount;
i++ )
695 if ( r.nStart > r.nEnd )
698 if ( r.nStart > nLastEnd )
705 if ( (
i == (nCount-1) ) && ( r.nEnd < rSource.getLength() ) )
706 r.nEnd = rSource.getLength();
712 if ( r.nStart > r.nEnd )
719 Color aColor(
SW_MOD()->GetColorConfig().GetColorValue(r.eType).nColor);
730 switch (pTextHint->GetId())
732 case SfxHintId::TextViewScrolled:
737 case SfxHintId::TextHeightChanged:
744 case SfxHintId::TextParaInserted:
745 case SfxHintId::TextParaContentChanged:
759 Window::Invalidate();
766 case CommandEventId::Wheel:
767 case CommandEventId::StartAutoScroll:
768 case CommandEventId::AutoScroll:
771 if( !pWData || CommandWheelMode::ZOOM != pWData->
GetMode() )
776 Window::Command(rCEvt);
796 case RTL_TEXTENCODING_UTF7 :
797 case RTL_TEXTENCODING_UTF8 :
801 case RTL_TEXTENCODING_ISO_8859_3:
802 case RTL_TEXTENCODING_ISO_8859_1 :
803 case RTL_TEXTENCODING_MS_1252 :
804 case RTL_TEXTENCODING_APPLE_ROMAN :
805 case RTL_TEXTENCODING_IBM_850 :
806 case RTL_TEXTENCODING_ISO_8859_14 :
807 case RTL_TEXTENCODING_ISO_8859_15 :
815 case RTL_TEXTENCODING_IBM_865 :
823 case RTL_TEXTENCODING_ISO_8859_10 :
824 case RTL_TEXTENCODING_ISO_8859_13 :
825 case RTL_TEXTENCODING_ISO_8859_2 :
826 case RTL_TEXTENCODING_IBM_852 :
827 case RTL_TEXTENCODING_MS_1250 :
828 case RTL_TEXTENCODING_APPLE_CENTEURO :
835 case RTL_TEXTENCODING_ISO_8859_4 :
836 case RTL_TEXTENCODING_IBM_775 :
837 case RTL_TEXTENCODING_MS_1257 :
844 case RTL_TEXTENCODING_APPLE_FARSI : aLanguages[0] =
LANGUAGE_FARSI;
break;
847 case RTL_TEXTENCODING_IBM_861 :
848 case RTL_TEXTENCODING_APPLE_ICELAND :
854 case RTL_TEXTENCODING_IBM_437 :
857 case RTL_TEXTENCODING_IBM_862 :
858 case RTL_TEXTENCODING_MS_1255 :
859 case RTL_TEXTENCODING_APPLE_HEBREW :
860 case RTL_TEXTENCODING_ISO_8859_8 :
864 case RTL_TEXTENCODING_IBM_857 :
865 case RTL_TEXTENCODING_MS_1254 :
866 case RTL_TEXTENCODING_APPLE_TURKISH:
867 case RTL_TEXTENCODING_ISO_8859_9 :
871 case RTL_TEXTENCODING_IBM_860 :
875 case RTL_TEXTENCODING_IBM_869 :
876 case RTL_TEXTENCODING_MS_1253 :
877 case RTL_TEXTENCODING_APPLE_GREEK :
878 case RTL_TEXTENCODING_ISO_8859_7 :
879 case RTL_TEXTENCODING_IBM_737 :
883 case RTL_TEXTENCODING_KOI8_R :
884 case RTL_TEXTENCODING_ISO_8859_5 :
885 case RTL_TEXTENCODING_IBM_855 :
886 case RTL_TEXTENCODING_MS_1251 :
887 case RTL_TEXTENCODING_IBM_866 :
888 case RTL_TEXTENCODING_APPLE_CYRILLIC :
892 case RTL_TEXTENCODING_APPLE_UKRAINIAN:
893 case RTL_TEXTENCODING_KOI8_U:
897 case RTL_TEXTENCODING_IBM_864 :
898 case RTL_TEXTENCODING_MS_1256 :
899 case RTL_TEXTENCODING_ISO_8859_6 :
900 case RTL_TEXTENCODING_APPLE_ARABIC :
904 case RTL_TEXTENCODING_APPLE_CHINTRAD :
905 case RTL_TEXTENCODING_MS_950 :
906 case RTL_TEXTENCODING_GBT_12345 :
907 case RTL_TEXTENCODING_BIG5 :
908 case RTL_TEXTENCODING_EUC_TW :
909 case RTL_TEXTENCODING_BIG5_HKSCS :
913 case RTL_TEXTENCODING_EUC_JP :
914 case RTL_TEXTENCODING_ISO_2022_JP :
915 case RTL_TEXTENCODING_JIS_X_0201 :
916 case RTL_TEXTENCODING_JIS_X_0208 :
917 case RTL_TEXTENCODING_JIS_X_0212 :
918 case RTL_TEXTENCODING_APPLE_JAPANESE :
919 case RTL_TEXTENCODING_MS_932 :
920 case RTL_TEXTENCODING_SHIFT_JIS :
924 case RTL_TEXTENCODING_GB_2312 :
925 case RTL_TEXTENCODING_MS_936 :
926 case RTL_TEXTENCODING_GBK :
927 case RTL_TEXTENCODING_GB_18030 :
928 case RTL_TEXTENCODING_APPLE_CHINSIMP :
929 case RTL_TEXTENCODING_EUC_CN :
930 case RTL_TEXTENCODING_ISO_2022_CN :
934 case RTL_TEXTENCODING_APPLE_KOREAN :
935 case RTL_TEXTENCODING_MS_949 :
936 case RTL_TEXTENCODING_EUC_KR :
937 case RTL_TEXTENCODING_ISO_2022_KR :
938 case RTL_TEXTENCODING_MS_1361 :
942 case RTL_TEXTENCODING_APPLE_THAI :
943 case RTL_TEXTENCODING_MS_874 :
944 case RTL_TEXTENCODING_TIS_620 :
955 value_or(OUString()));
956 if(sFontName.isEmpty())
css::uno::Reference< css::linguistic2::XProofreadingIterator > get(css::uno::Reference< css::uno::XComponentContext > const &context)
SfxViewFrame * GetViewFrame() const
#define LINK(Instance, Class, Member)
virtual void EnableRTL(bool bEnable=true) override
void SetFillColor(const Color &)
static vcl::Font GetDefaultFont(DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice *pOutDev=nullptr)
TextEngine * GetTextEngine()
const vcl::Font & GetFont() const
std::vector< TextPortion > TextPortions
virtual void SetModified(bool=true) override
void SetFontSize(const Size &)
virtual void Command(const CommandEvent &rCEvt) override
const OUString & GetFamilyName() const
#define LANGUAGE_ARABIC_SAUDI_ARABIA
void MouseButtonUp(const MouseEvent &rMouseEvent)
void SetFont(const vcl::Font &rFont)
#define LANGUAGE_ICELANDIC
friend class ChangesListener
void MouseMove(const MouseEvent &rMouseEvent)
const LanguageTag & GetUILanguageTag() const
virtual void KeyInput(const KeyEvent &rKeyEvt) override
void HandleWheelCommand(const CommandEvent &rCEvt)
#define MAX_HIGHLIGHTTIME
LanguageType getLanguageType(bool bResolveSystem=true) const
virtual void MouseMove(const MouseEvent &rMEvt) override
#define LANGUAGE_LITHUANIAN
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
Any GetTime(const OUString &val)
VclPtr< ScrollBar > m_pVScrollbar
sal_uInt16 GetGroup() const
sal_uInt16 GetCode() const
#define LANGUAGE_UKRAINIAN
DataChangedEventType GetType() const
void SetHelpId(const OString &)
const CommandWheelData * GetWheelData() const
rtl::Reference< ChangesListener > m_xListener
void Invalidate(sal_uInt16 nId)
virtual void dispose() override
virtual void DataChanged(const DataChangedEvent &) override
#define LANGUAGE_FRENCH_CANADIAN
static bool lcl_GetLanguagesForEncoding(rtl_TextEncoding eEnc, LanguageType aLanguages[])
bool HandleScrollCommand(const CommandEvent &rCmd, ScrollBar *pHScrl, ScrollBar *pVScrl)
void ExecutePopup(const OUString &rResName, vcl::Window *pWin=nullptr, const Point *pPos=nullptr)
VclPtr< ScrollBar > m_pHScrollbar
static void lcl_Highlight(const OUString &rSource, TextPortions &aPortionList)
#define LANGUAGE_HUNGARIAN
virtual void MouseButtonDown(const MouseEvent &rMEvt) override
#define LANGUAGE_PORTUGUESE
virtual void MouseButtonUp(const MouseEvent &rMEvt) override
virtual void SAL_CALL propertiesChange(css::uno::Sequence< css::beans::PropertyChangeEvent > const &) override
std::unique_ptr< ExtTextEngine > m_pTextEngine
static bool DoesKeyChangeText(const KeyEvent &rKeyEvent)
const vcl::Font & GetFont() const
sal_uLong GetValue() const
VclPtr< TextViewOutWin > m_pOutWin
AllSettingsFlags GetFlags() const
static SfxViewShell * Current()
virtual void Start() override
void SetTextEncoding(rtl_TextEncoding eEncoding)
FontMetric Get(const OUString &rName, const OUString &rStyleName) const
void DoSyntaxHighlight(sal_uInt16 nPara)
virtual void SetOutputSizePixel(const Size &rNewSize)
constexpr sal_uInt16 KEYGROUP_CURSOR
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE) override
#define LANGUAGE_ROMANIAN
#define LANGUAGE_NORWEGIAN
#define LANGUAGE_CROATIAN
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
void ShowCursor(bool bGotoCursor=true, bool bForceVisCursor=true)
TextEngine * GetTextEngine() const
const SfxPoolItem * GetItem(sal_uInt16 nSlotId) const
virtual void Resize() override
bool KeyInput(const KeyEvent &rKeyEvent)
void ImpDoHighlight(const OUString &rSource, sal_uInt16 nLineOff)
void SetAutoScroll(bool bAutoScroll)
virtual void SAL_CALL disposing(css::lang::EventObject const &) override
SwSrcEditWindow & editor_
SfxBindings & GetBindings()
CommandWheelMode GetMode() const
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
tools::Long Width() const
CommandEventId GetCommand() const
#define LANGUAGE_ESTONIAN
virtual void DataChanged(const DataChangedEvent &) override
virtual void Command(const CommandEvent &rCEvt) override
const TextPaM & GetStart() const
const Size & GetFontSize() const
#define LANGUAGE_CHINESE_SIMPLIFIED
const AllSettings & GetSettings() const
Size GetOutputSizePixel() const
void StartListening(SfxBroadcaster &rBroadcaster, DuplicateHandling eDuplicateHanding=DuplicateHandling::Unexpected)
tools::Long GetScrollBarSize() const
vcl::Window * GetParent() const
IMPL_LINK(SwSrcEditWindow, ScrollHdl, ScrollBar *, pScroll, void)
void MouseButtonDown(const MouseEvent &rMouseEvent)
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
void SetScrollBarRanges()
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &) override
css::uno::Reference< css::beans::XMultiPropertySet > m_xNotifier
void SetPointFont(vcl::RenderContext &rRenderContext, const vcl::Font &rFont)
Point LogicToPixel(const Point &rLogicPt) const
void Update(sal_uInt16 nId)
rtl_TextEncoding m_eSourceEncoding
void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect)
void SetPointer(PointerStyle)
const vcl::KeyCode & GetKeyCode() const
void SetTextView(TextView *pView)
#define SAL_WARN_IF(condition, area, stream)
std::set< sal_uInt16 > m_aSyntaxLineTable
void SetFont(const vcl::Font &rNewFont)
const o3tl::enumarray< SvxAdjust, unsigned short > aSvxToUnoAdjust USHRT_MAX
void SetTransparent(bool bTransparent)
tools::Long GetTextHeight() const
virtual ~SwSrcEditWindow() override
#define MAX_SYNTAX_HIGHLIGHT
tools::Long AdjustWidth(tools::Long n)
std::unique_ptr< TextView > m_pTextView
static VclPtr< reference_type > Create(Arg &&...arg)
void EndListening(SfxBroadcaster &rBroadcaster, bool bRemoveAllDuplicates=false)
tools::Long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
tools::Long Height() const
virtual void GetFocus() override
void SetInvokeHandler(const Link< Timer *, void > &rLink)
virtual ~ChangesListener() override
const Color & GetWindowColor() const
tools::Long AdjustHeight(tools::Long n)
ChangesListener(SwSrcEditWindow &editor)
void setHeight(tools::Long nHeight)
#define SAL_WARN(area, stream)
#define LANGUAGE_CHINESE_TRADITIONAL
tools::Long m_nCurTextWidth
SwSrcEditWindow(vcl::Window *pParent, SwSrcView *pParentView)
const FontList * GetFontList() const
constexpr sal_uInt16 KEY_INSERT
#define LANGUAGE_JAPANESE
virtual void dispose() override
WinBits const WB_CLIPCHILDREN
void Command(const CommandEvent &rCEvt)
sal_uInt32 GetPara() const
#define HID_SOURCE_EDITWIN
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)
SwDocShell * GetDocShell()