LibreOffice Module dbaccess (master) 1
sqledit.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <sal/config.h>
21
22#include <cassert>
23
24#include <com/sun/star/beans/XMultiPropertySet.hpp>
25#include <com/sun/star/beans/XPropertiesChangeListener.hpp>
26#include <com/sun/star/container/XHierarchicalNameAccess.hpp>
27#include <officecfg/Office/Common.hxx>
28#include <editeng/eeitem.hxx>
29#include <editeng/colritem.hxx>
30#include <editeng/fhgtitem.hxx>
31#include <editeng/fontitem.hxx>
32#include <editeng/wghtitem.hxx>
33#include <sqledit.hxx>
36#include <svl/itempool.hxx>
37#include <svl/itemset.hxx>
38#include <vcl/commandevent.hxx>
39#include <vcl/event.hxx>
40#include <vcl/settings.hxx>
41#include <vcl/specialchars.hxx>
42#include <vcl/svapp.hxx>
43
44using namespace dbaui;
45
47 public cppu::WeakImplHelper< css::beans::XPropertiesChangeListener >
48{
49public:
50 explicit ChangesListener(SQLEditView& editor): editor_(editor) {}
51
52private:
53 virtual ~ChangesListener() override {}
54
55 virtual void SAL_CALL disposing(css::lang::EventObject const &) override
56 {
57 std::unique_lock g(editor_.m_mutex);
58 editor_.m_notifier.clear();
59 }
60
61 virtual void SAL_CALL propertiesChange(
62 css::uno::Sequence< css::beans::PropertyChangeEvent > const &) override
63 {
66 }
67
69};
70
71SQLEditView::SQLEditView(std::unique_ptr<weld::ScrolledWindow> xScrolledWindow)
72 : m_xScrolledWindow(std::move(xScrolledWindow))
73 , m_aUpdateDataTimer("dbaccess SQLEditView m_aUpdateDataTimer")
74 , m_aHighlighter(HighlighterLanguage::SQL)
75 , m_bInUpdate(false)
76 , m_bDisableInternalUndo(false)
77{
78 m_xScrolledWindow->connect_vadjustment_changed(LINK(this, SQLEditView, ScrollHdl));
79}
80
82{
83 GetEditEngine()->EnableUndo(false);
85}
86
88{
89 OUString sFontName(officecfg::Office::Common::Font::SourceViewFont::FontName::get().value_or(OUString()));
90 if (sFontName.isEmpty())
91 {
92 vcl::Font aTmpFont(OutputDevice::GetDefaultFont(DefaultFontType::FIXED, Application::GetSettings().GetUILanguageTag().getLanguageType(), GetDefaultFontFlags::OnlyOne));
93 sFontName = aTmpFont.GetFamilyName();
94 }
95
96 Size aFontSize(0, officecfg::Office::Common::Font::SourceViewFont::FontHeight::get());
97 vcl::Font aAppFont(sFontName, aFontSize);
98
99 pItemPool->SetPoolDefaultItem(SvxFontItem(aAppFont.GetFamilyType(), aAppFont.GetFamilyName(),
100 "", PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW,
102 pItemPool->SetPoolDefaultItem(SvxFontItem(aAppFont.GetFamilyType(), aAppFont.GetFamilyName(),
103 "", PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW,
105 pItemPool->SetPoolDefaultItem(SvxFontItem(aAppFont.GetFamilyType(), aAppFont.GetFamilyName(),
106 "", PITCH_DONTKNOW, RTL_TEXTENCODING_DONTKNOW,
108
109 pItemPool->SetPoolDefaultItem(
110 SvxFontHeightItem(aAppFont.GetFontHeight() * 20, 100, EE_CHAR_FONTHEIGHT));
111 pItemPool->SetPoolDefaultItem(
113 pItemPool->SetPoolDefaultItem(
115}
116
118{
119 assert(!m_pItemPool);
122 m_xEditEngine.reset(new EditEngine(m_pItemPool.get()));
123}
124
126{
127 WeldEditView::SetDrawingArea(pDrawingArea);
128
129 EditEngine& rEditEngine = *GetEditEngine();
130
131 rEditEngine.SetDefaultHorizontalTextDirection(EEHorizontalTextDirection::L2R);
132 rEditEngine.SetModifyHdl(LINK(this, SQLEditView, ModifyHdl));
133 rEditEngine.SetStatusEventHdl(LINK(this, SQLEditView, EditStatusHdl));
134
136 m_aUpdateDataTimer.SetInvokeHandler(LINK(this, SQLEditView, ImplUpdateDataHdl));
137
138 ImplSetFont();
139
140 // Listen for change of Font and Color Settings:
141 // Using "this" in ctor is a little fishy, but should work here at least as
142 // long as there are no derivations:
143 m_listener = new ChangesListener(*this);
144 css::uno::Reference< css::beans::XMultiPropertySet > n(
145 officecfg::Office::Common::Font::SourceViewFont::get(),
146 css::uno::UNO_QUERY_THROW);
147 {
148 std::unique_lock g(m_mutex);
149 m_notifier = n;
150 }
151 css::uno::Sequence< OUString > s { "FontHeight", "FontName" };
152 n->addPropertiesChangeListener(s, m_listener);
153 m_ColorConfig.AddListener(this);
154}
155
157{
158 css::uno::Reference< css::beans::XMultiPropertySet > n;
159 {
160 std::unique_lock g(m_mutex);
161 n = m_notifier;
162 }
163 if (n.is()) {
164 n->removePropertiesChangeListener(m_listener);
165 }
166 m_ColorConfig.RemoveListener(this);
167}
168
169void SQLEditView::SetTextAndUpdate(const OUString& rNewText)
170{
171 SetText(rNewText);
172 UpdateData();
173}
174
176{
177 if (m_bInUpdate)
178 return;
179 m_aUpdateDataTimer.Start();
180}
181
182IMPL_LINK_NOARG(SQLEditView, ImplUpdateDataHdl, Timer*, void)
183{
184 UpdateData();
185}
186
188{
190}
191
193{
194 m_bInUpdate = true;
195 EditEngine& rEditEngine = *GetEditEngine();
196
197 bool bModified = rEditEngine.IsModified();
198 bool bUndoEnabled = rEditEngine.IsUndoEnabled();
199 rEditEngine.EnableUndo(false);
200
201 // syntax highlighting
202 for (sal_Int32 nLine=0; nLine < rEditEngine.GetParagraphCount(); ++nLine)
203 {
204 OUString aLine( rEditEngine.GetText( nLine ) );
205
206 ESelection aAllLine(nLine, 0, nLine, EE_TEXTPOS_ALL);
207 rEditEngine.RemoveAttribs(aAllLine, false, EE_CHAR_COLOR);
208 rEditEngine.RemoveAttribs(aAllLine, false, EE_CHAR_WEIGHT);
209 rEditEngine.RemoveAttribs(aAllLine, false, EE_CHAR_WEIGHT_CJK);
210 rEditEngine.RemoveAttribs(aAllLine, false, EE_CHAR_WEIGHT_CTL);
211
212 std::vector<HighlightPortion> aPortions;
213 m_aHighlighter.getHighlightPortions( aLine, aPortions );
214 for (auto const& portion : aPortions)
215 {
216 SfxItemSet aSet(rEditEngine.GetEmptyItemSet());
217 aSet.Put(SvxColorItem(GetColorValue(portion.tokenType), EE_CHAR_COLOR));
218 rEditEngine.QuickSetAttribs(aSet, ESelection(nLine, portion.nBegin, nLine, portion.nEnd));
219 }
220 }
221
222 rEditEngine.ClearModifyFlag();
223
224 m_bInUpdate = false;
225
226 rEditEngine.EnableUndo(bUndoEnabled);
227
228 if (bModified)
229 m_aModifyLink.Call(nullptr);
230
231 Invalidate();
232}
233
234void SQLEditView::DoBracketHilight(sal_uInt16 nKey)
235{
236 ESelection aCurrentPos = m_xEditView->GetSelection();
237 sal_Int32 nStartPos = aCurrentPos.nStartPos;
238 const sal_uInt32 nStartPara = aCurrentPos.nStartPara;
239 sal_uInt16 nCount = 0;
240 int nChar = -1;
241
242 switch (nKey)
243 {
244 case '\'': // no break
245 case '"':
246 {
247 nChar = nKey;
248 break;
249 }
250 case '}' :
251 {
252 nChar = '{';
253 break;
254 }
255 case ')':
256 {
257 nChar = '(';
258 break;
259 }
260 case ']':
261 {
262 nChar = '[';
263 break;
264 }
265 }
266
267 if (nChar == -1)
268 return;
269
270 bool bUndoEnabled = m_xEditEngine->IsUndoEnabled();
271 m_xEditEngine->EnableUndo(false);
272
273 sal_uInt32 nPara = nStartPara;
274 do
275 {
276 if (nPara == nStartPara && nStartPos == 0)
277 continue;
278
279 OUString aLine( m_xEditEngine->GetText( nPara ) );
280
281 if (aLine.isEmpty())
282 continue;
283
284 for (sal_Int32 i = (nPara==nStartPara) ? nStartPos-1 : aLine.getLength()-1; i>0; --i)
285 {
286 if (aLine[i] == nChar)
287 {
288 if (!nCount)
289 {
290 SfxItemSet aSet(m_xEditEngine->GetEmptyItemSet());
291 aSet.Put(SvxColorItem(Color(0,0,0), EE_CHAR_COLOR));
295
296 m_xEditEngine->QuickSetAttribs(aSet, ESelection(nPara, i, nPara, i + 1));
297 m_xEditEngine->QuickSetAttribs(aSet, ESelection(nStartPara, nStartPos, nStartPara, nStartPos));
298 return;
299 }
300 else
301 --nCount;
302 }
303 if (aLine[i] == nKey)
304 ++nCount;
305 }
306 } while (nPara--);
307
308 m_xEditEngine->EnableUndo(bUndoEnabled);
309}
310
312{
313 Color aColor;
314 switch (eLanguage)
315 {
316 case HighlighterLanguage::SQL:
317 {
318 switch (aToken)
319 {
320 case TokenType::Identifier: aColor = rColorConfig.GetColorValue(svtools::SQLIDENTIFIER).nColor; break;
321 case TokenType::Number: aColor = rColorConfig.GetColorValue(svtools::SQLNUMBER).nColor; break;
322 case TokenType::String: aColor = rColorConfig.GetColorValue(svtools::SQLSTRING).nColor; break;
323 case TokenType::Operator: aColor = rColorConfig.GetColorValue(svtools::SQLOPERATOR).nColor; break;
324 case TokenType::Keywords: aColor = rColorConfig.GetColorValue(svtools::SQLKEYWORD).nColor; break;
325 case TokenType::Parameter: aColor = rColorConfig.GetColorValue(svtools::SQLPARAMETER).nColor; break;
326 case TokenType::Comment: aColor = rColorConfig.GetColorValue(svtools::SQLCOMMENT).nColor; break;
327 default: aColor = Color(0,0,0);
328 }
329 break;
330 }
331 case HighlighterLanguage::Basic:
332 {
333 switch (aToken)
334 {
335 case TokenType::Identifier: aColor = Color(255,0,0); break;
336 case TokenType::Comment: aColor = Color(0,0,45); break;
337 case TokenType::Number: aColor = Color(204,102,204); break;
338 case TokenType::String: aColor = Color(0,255,45); break;
339 case TokenType::Operator: aColor = Color(0,0,100); break;
340 case TokenType::Keywords: aColor = Color(0,0,255); break;
341 case TokenType::Error : aColor = Color(0,255,255); break;
342 default: aColor = Color(0,0,0);
343 }
344 break;
345 }
346 default: aColor = Color(0,0,0);
347
348 }
349 return aColor;
350}
351
353{
355
357 {
358 KeyFuncType eFunc = rKEvt.GetKeyCode().GetFunction();
359 if (eFunc == KeyFuncType::UNDO || eFunc == KeyFuncType::REDO)
360 return false;
361 }
362
363 return WeldEditView::KeyInput(rKEvt);
364}
365
367{
368 if (rCEvt.GetCommand() == CommandEventId::ContextMenu)
369 {
370 ::tools::Rectangle aRect(rCEvt.GetMousePosPixel(), Size(1, 1));
371 weld::Widget* pPopupParent = GetDrawingArea();
372 std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(pPopupParent, "vcl/ui/editmenu.ui"));
373 std::unique_ptr<weld::Menu> xContextMenu(xBuilder->weld_menu("menu"));
374
375 bool bEnableCut = true;
376 bool bEnableCopy = true;
377 bool bEnableDelete = true;
378 bool bEnablePaste = true;
379 bool bEnableSpecialChar = true;
380
381 EditView* pEditView = GetEditView();
382
383 if (!pEditView->HasSelection())
384 {
385 bEnableCut = false;
386 bEnableCopy = false;
387 bEnableDelete = false;
388 }
389
390 if (pEditView->IsReadOnly())
391 {
392 bEnableCut = false;
393 bEnablePaste = false;
394 bEnableDelete = false;
395 bEnableSpecialChar = false;
396 }
397
398 xContextMenu->set_sensitive("cut", bEnableCut);
399 xContextMenu->set_sensitive("copy", bEnableCopy);
400 xContextMenu->set_sensitive("delete", bEnableDelete);
401 xContextMenu->set_sensitive("paste", bEnablePaste);
402 xContextMenu->set_sensitive("specialchar", bEnableSpecialChar);
403 xContextMenu->set_visible("undo", false);
404 xContextMenu->set_visible("specialchar", vcl::GetGetSpecialCharsFunction() != nullptr);
405
406 OUString sCommand = xContextMenu->popup_at_rect(pPopupParent, aRect);
407
408 if (sCommand == "cut")
409 pEditView->Cut();
410 else if (sCommand == "copy")
411 pEditView->Copy();
412 else if (sCommand == "paste")
413 pEditView->Paste();
414 else if (sCommand == "delete")
415 pEditView->DeleteSelected();
416 else if (sCommand == "selectall")
417 {
418 sal_Int32 nPar = m_xEditEngine->GetParagraphCount();
419 if (nPar)
420 {
421 sal_Int32 nLen = m_xEditEngine->GetTextLen(nPar - 1);
422 pEditView->SetSelection(ESelection(0, 0, nPar - 1, nLen));
423 }
424 }
425 else if (sCommand == "specialchar")
426 {
427 OUString aChars = vcl::GetGetSpecialCharsFunction()(pPopupParent, m_xEditEngine->GetStandardFont(0));
428 if (!aChars.isEmpty())
429 {
430 pEditView->InsertText(aChars);
431 }
432 }
433
434 return true;
435 }
436 return WeldEditView::Command(rCEvt);
437}
438
440{
441 // editengine height has changed or editview scroll pos has changed
443}
444
446{
447 EditEngine *pEditEngine = GetEditEngine();
448 if (!pEditEngine)
449 return;
451 return;
452 EditView* pEditView = GetEditView();
453 if (!pEditView)
454 return;
455
456 int nVUpper = pEditEngine->GetTextHeight();
457 int nVCurrentDocPos = pEditView->GetVisArea().Top();
458 const Size aOut(pEditView->GetOutputArea().GetSize());
459 int nVStepIncrement = aOut.Height() * 2 / 10;
460 int nVPageIncrement = aOut.Height() * 8 / 10;
461 int nVPageSize = aOut.Height();
462
463 /* limit the page size to below nUpper because gtk's gtk_scrolled_window_start_deceleration has
464 effectively...
465
466 lower = gtk_adjustment_get_lower
467 upper = gtk_adjustment_get_upper - gtk_adjustment_get_page_size
468
469 and requires that upper > lower or the deceleration animation never ends
470 */
471 nVPageSize = std::min(nVPageSize, nVUpper);
472
473 m_xScrolledWindow->vadjustment_configure(nVCurrentDocPos, 0, nVUpper,
474 nVStepIncrement, nVPageIncrement, nVPageSize);
475}
476
478{
479 DoScroll();
480}
481
483{
484 Resize();
485}
486
488{
489 if (m_xEditView)
490 {
491 auto currentDocPos = m_xEditView->GetVisArea().Top();
492 auto nDiff = currentDocPos - m_xScrolledWindow->vadjustment_get_value();
493 // we expect SetScrollBarRange callback to be triggered by Scroll
494 // to set where we ended up
495 m_xEditView->Scroll(0, nDiff);
496 }
497}
498
500{
501 UpdateData();
502}
503
505{
506 // see SmEditWindow::DataChanged for a similar case
507 SetItemPoolFont(m_pItemPool.get()); // change default font
508 // re-create with the new font
509 EditEngine& rEditEngine = *GetEditEngine();
510 OUString aTxt(rEditEngine.GetText());
511 rEditEngine.Clear();
512 SetTextAndUpdate(aTxt);
513}
514
515/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
static const AllSettings & GetSettings()
static std::unique_ptr< weld::Builder > CreateBuilder(weld::Widget *pParent, const OUString &rUIFile, bool bMobile=false, sal_uInt64 nLOKWindowId=0)
CommandEventId GetCommand() const
const Point & GetMousePosPixel() const
OUString GetText(LineEnd eEnd=LINEEND_LF) const
void Clear()
sal_Int32 GetParagraphCount() const
void EnableUndo(bool bEnable)
void RemoveAttribs(const ESelection &rSelection, bool bRemoveParaAttribs, sal_uInt16 nWhich)
sal_uInt32 GetTextHeight() const
bool IsUndoEnabled() const
void ClearModifyFlag()
void SetDefaultHorizontalTextDirection(EEHorizontalTextDirection eHTextDir)
static rtl::Reference< SfxItemPool > CreatePool()
bool IsModified() const
const SfxItemSet & GetEmptyItemSet() const
void SetStatusEventHdl(const Link< EditStatus &, void > &rLink)
void QuickSetAttribs(const SfxItemSet &rSet, const ESelection &rSel)
void SetModifyHdl(const Link< LinkParamNone *, void > &rLink)
bool IsReadOnly() const
void Copy()
tools::Rectangle GetVisArea() const
bool HasSelection() const
void Cut()
void SetSelection(const ESelection &rNewSel)
void InsertText(const OUString &rNew, bool bSelect=false, bool bLOKShowSelect=true)
void DeleteSelected()
const tools::Rectangle & GetOutputArea() const
void Paste()
sal_Unicode GetCharCode() const
const vcl::KeyCode & GetKeyCode() const
static vcl::Font GetDefaultFont(DefaultFontType nType, LanguageType eLang, GetDefaultFontFlags nFlags, const OutputDevice *pOutDev=nullptr)
virtual void SAL_CALL propertiesChange(css::uno::Sequence< css::beans::PropertyChangeEvent > const &) override
Definition: sqledit.cxx:61
virtual void SAL_CALL disposing(css::lang::EventObject const &) override
Definition: sqledit.cxx:55
virtual ~ChangesListener() override
Definition: sqledit.cxx:53
ChangesListener(SQLEditView &editor)
Definition: sqledit.cxx:50
void SetPoolDefaultItem(const SfxPoolItem &)
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
constexpr tools::Long Height() const
void getHighlightPortions(std::u16string_view rLine, std::vector< HighlightPortion > &pPortions) const
HighlighterLanguage GetLanguage() const
void SetTimeout(sal_uInt64 nTimeoutMs)
void SetInvokeHandler(const Link< Timer *, void > &rLink)
std::unique_ptr< EditEngine > m_xEditEngine
std::unique_ptr< EditView > m_xEditView
virtual bool Command(const CommandEvent &rCEvt) override
virtual void SetDrawingArea(weld::DrawingArea *pDrawingArea) override
virtual EditView * GetEditView() const
void SetText(const OUString &rStr)
virtual EditEngine * GetEditEngine() const
virtual bool KeyInput(const KeyEvent &rKEvt) override
const svtools::ColorConfig m_aColorConfig
Definition: sqledit.hxx:42
virtual void ConfigurationChanged(utl::ConfigurationBroadcaster *, ConfigurationHints) override
Definition: sqledit.cxx:499
rtl::Reference< ChangesListener > m_listener
Definition: sqledit.hxx:48
void DoBracketHilight(sal_uInt16 nKey)
Definition: sqledit.cxx:234
void DisableInternalUndo()
Definition: sqledit.cxx:81
void SetScrollBarRange()
Definition: sqledit.cxx:445
bool m_bDisableInternalUndo
Definition: sqledit.hxx:53
virtual ~SQLEditView() override
Definition: sqledit.cxx:156
static void SetItemPoolFont(SfxItemPool *pItemPool)
Definition: sqledit.cxx:87
virtual void EditViewScrollStateChange() override
Definition: sqledit.cxx:439
virtual bool KeyInput(const KeyEvent &rKEvt) override
Definition: sqledit.cxx:352
static Color GetSyntaxHighlightColor(const svtools::ColorConfig &rColorConfig, HighlighterLanguage eLanguage, TokenType aToken)
Definition: sqledit.cxx:311
Link< LinkParamNone *, void > m_aModifyLink
Definition: sqledit.hxx:41
virtual void SetDrawingArea(weld::DrawingArea *pDrawingArea) override
Definition: sqledit.cxx:125
std::unique_ptr< weld::ScrolledWindow > m_xScrolledWindow
Definition: sqledit.hxx:40
virtual bool Command(const CommandEvent &rCEvt) override
Definition: sqledit.cxx:366
svtools::ColorConfig m_ColorConfig
Definition: sqledit.hxx:45
const SyntaxHighlighter m_aHighlighter
Definition: sqledit.hxx:44
void SetTextAndUpdate(const OUString &rNewText)
Definition: sqledit.cxx:169
rtl::Reference< SfxItemPool > m_pItemPool
Definition: sqledit.hxx:46
friend class ChangesListener
Definition: sqledit.hxx:37
css::uno::Reference< css::beans::XMultiPropertySet > m_notifier
Definition: sqledit.hxx:50
virtual void makeEditEngine() override
Definition: sqledit.cxx:117
Color GetColorValue(TokenType aToken)
Definition: sqledit.cxx:187
Timer m_aUpdateDataTimer
Definition: sqledit.hxx:43
std::mutex m_mutex
Definition: sqledit.hxx:49
ColorConfigValue GetColorValue(ColorConfigEntry eEntry, bool bSmart=true) const
constexpr tools::Long Top() const
constexpr Size GetSize() const
tools::Long GetFontHeight() const
FontFamily GetFamilyType()
const OUString & GetFamilyName() const
KeyFuncType GetFunction() const
int nCount
#define EE_TEXTPOS_ALL
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CJK(EE_CHAR_START+17)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT(EE_CHAR_START+2)
constexpr TypedWhichId< SvxWeightItem > EE_CHAR_WEIGHT(EE_CHAR_START+4)
constexpr TypedWhichId< SvxColorItem > EE_CHAR_COLOR(EE_CHAR_START+0)
constexpr TypedWhichId< SvxWeightItem > EE_CHAR_WEIGHT_CTL(EE_CHAR_START+22)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT_CTL(EE_CHAR_START+20)
constexpr TypedWhichId< SvxWeightItem > EE_CHAR_WEIGHT_CJK(EE_CHAR_START+21)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO_CTL(EE_CHAR_START+18)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT_CJK(EE_CHAR_START+19)
constexpr TypedWhichId< SvxFontItem > EE_CHAR_FONTINFO(EE_CHAR_START+1)
PITCH_DONTKNOW
WEIGHT_ULTRABOLD
sal_Int64 n
KeyFuncType
IMPL_LINK_NOARG(OApplicationController, OnClipboardChanged, TransferableDataHelper *, void)
int i
FncGetSpecialChars GetGetSpecialCharsFunction()
ConfigurationHints
sal_Int32 nStartPara
sal_Int32 nStartPos
HighlighterLanguage
TokenType
SQL