geany  1.38
About: Geany is a text editor (using GTK2) with basic features of an integrated development environment (syntax highlighting, code folding, symbol name auto-completion, ...). F: office T: editor programming GTK+ IDE
  Fossies Dox: geany-1.38.tar.bz2  ("unofficial" and yet experimental doxygen-generated source code documentation)  

ScintillaBase.cxx
Go to the documentation of this file.
1// Scintilla source code edit control
2/** @file ScintillaBase.cxx
3 ** An enhanced subclass of Editor with calltips, autocomplete and context menu.
4 **/
5// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
6// The License.txt file describes the conditions under which this software may be distributed.
7
8#include <cstddef>
9#include <cstdlib>
10#include <cassert>
11#include <cstring>
12
13#include <stdexcept>
14#include <string>
15#include <vector>
16#include <map>
17#include <algorithm>
18#include <memory>
19
20#include "Platform.h"
21
22#include "ILoader.h"
23#include "ILexer.h"
24#include "Scintilla.h"
25
26#ifdef SCI_LEXER
27#include "SciLexer.h"
28#endif
29
30#include "PropSetSimple.h"
31#include "CharacterCategory.h"
32
33#ifdef SCI_LEXER
34#include "LexerModule.h"
35#include "Catalogue.h"
36#endif
37
38#include "Position.h"
39#include "UniqueString.h"
40#include "SplitVector.h"
41#include "Partitioning.h"
42#include "RunStyles.h"
43#include "ContractionState.h"
44#include "CellBuffer.h"
45#include "CallTip.h"
46#include "KeyMap.h"
47#include "Indicator.h"
48#include "LineMarker.h"
49#include "Style.h"
50#include "ViewStyle.h"
51#include "CharClassify.h"
52#include "Decoration.h"
53#include "CaseFolder.h"
54#include "Document.h"
55#include "Selection.h"
56#include "PositionCache.h"
57#include "EditModel.h"
58#include "MarginView.h"
59#include "EditView.h"
60#include "Editor.h"
61#include "AutoComplete.h"
62#include "ScintillaBase.h"
63
64#ifdef SCI_LEXER
65#include "ExternalLexer.h"
66#endif
67
68using namespace Scintilla;
69
70ScintillaBase::ScintillaBase() {
72 listType = 0;
73 maxListWidth = 0;
75#ifdef SCI_LEXER
77#endif
78}
79
81}
82
85 popup.Destroy();
86}
87
88void ScintillaBase::AddCharUTF(const char *s, unsigned int len, bool /*treatAsDBCS*/) {
90}
91
92void ScintillaBase::InsertCharacter(const char *s, unsigned int len, CharacterSource charSource) {
93 const bool isFillUp = ac.Active() && ac.IsFillUpChar(s[0]);
94 if (!isFillUp) {
95 Editor::InsertCharacter(s, len, charSource);
96 }
97 if (ac.Active()) {
99 // For fill ups add the character after the autocompletion has
100 // triggered so containers see the key so can display a calltip.
101 if (isFillUp) {
102 Editor::InsertCharacter(s, len, charSource);
103 }
104 }
105}
106
107void ScintillaBase::Command(int cmdId) {
108
109 switch (cmdId) {
110
111 case idAutoComplete: // Nothing to do
112
113 break;
114
115 case idCallTip: // Nothing to do
116
117 break;
118
119 case idcmdUndo:
120 WndProc(SCI_UNDO, 0, 0);
121 break;
122
123 case idcmdRedo:
124 WndProc(SCI_REDO, 0, 0);
125 break;
126
127 case idcmdCut:
128 WndProc(SCI_CUT, 0, 0);
129 break;
130
131 case idcmdCopy:
132 WndProc(SCI_COPY, 0, 0);
133 break;
134
135 case idcmdPaste:
136 WndProc(SCI_PASTE, 0, 0);
137 break;
138
139 case idcmdDelete:
140 WndProc(SCI_CLEAR, 0, 0);
141 break;
142
143 case idcmdSelectAll:
144 WndProc(SCI_SELECTALL, 0, 0);
145 break;
146 }
147}
148
149int ScintillaBase::KeyCommand(unsigned int iMessage) {
150 // Most key commands cancel autocompletion mode
151 if (ac.Active()) {
152 switch (iMessage) {
153 // Except for these
154 case SCI_LINEDOWN:
156 return 0;
157 case SCI_LINEUP:
159 return 0;
160 case SCI_PAGEDOWN:
161 AutoCompleteMove(ac.lb->GetVisibleRows());
162 return 0;
163 case SCI_PAGEUP:
164 AutoCompleteMove(-ac.lb->GetVisibleRows());
165 return 0;
166 case SCI_VCHOME:
167 AutoCompleteMove(-5000);
168 return 0;
169 case SCI_LINEEND:
170 AutoCompleteMove(5000);
171 return 0;
172 case SCI_DELETEBACK:
173 DelCharBack(true);
176 return 0;
178 DelCharBack(false);
181 return 0;
182 case SCI_TAB:
184 return 0;
185 case SCI_NEWLINE:
187 return 0;
188
189 default:
191 }
192 }
193
194 if (ct.inCallTipMode) {
195 if (
196 (iMessage != SCI_CHARLEFT) &&
197 (iMessage != SCI_CHARLEFTEXTEND) &&
198 (iMessage != SCI_CHARRIGHT) &&
199 (iMessage != SCI_CHARRIGHTEXTEND) &&
200 (iMessage != SCI_EDITTOGGLEOVERTYPE) &&
201 (iMessage != SCI_DELETEBACK) &&
202 (iMessage != SCI_DELETEBACKNOTLINE)
203 ) {
205 }
206 if ((iMessage == SCI_DELETEBACK) || (iMessage == SCI_DELETEBACKNOTLINE)) {
207 if (sel.MainCaret() <= ct.posStartCallTip) {
209 }
210 }
211 }
212 return Editor::KeyCommand(iMessage);
213}
214
216 switch (plbe->event) {
219 break;
222 break;
223 }
224}
225
226void ScintillaBase::AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, const char *text, Sci::Position textLen) {
227 UndoGroup ug(pdoc);
229 pdoc->DeleteChars(startPos, removeLen);
230 const Sci::Position lengthInserted = pdoc->InsertString(startPos, text, textLen);
231 SetEmptySelection(startPos + lengthInserted);
232 } else {
233 // SC_MULTIAUTOC_EACH
234 for (size_t r=0; r<sel.Count(); r++) {
236 sel.Range(r).End().Position())) {
237 Sci::Position positionInsert = sel.Range(r).Start().Position();
238 positionInsert = RealizeVirtualSpace(positionInsert, sel.Range(r).caret.VirtualSpace());
239 if (positionInsert - removeLen >= 0) {
240 positionInsert -= removeLen;
241 pdoc->DeleteChars(positionInsert, removeLen);
242 }
243 const Sci::Position lengthInserted = pdoc->InsertString(positionInsert, text, textLen);
244 if (lengthInserted > 0) {
245 sel.Range(r).caret.SetPosition(positionInsert + lengthInserted);
246 sel.Range(r).anchor.SetPosition(positionInsert + lengthInserted);
247 }
249 }
250 }
251 }
252}
253
255 //Platform::DebugPrintf("AutoComplete %s\n", list);
257
258 if (ac.chooseSingle && (listType == 0)) {
259 if (list && !strchr(list, ac.GetSeparator())) {
260 const char *typeSep = strchr(list, ac.GetTypesep());
261 const Sci::Position lenInsert = typeSep ?
262 (typeSep-list) : strlen(list);
263 if (ac.ignoreCase) {
264 // May need to convert the case before invocation, so remove lenEntered characters
265 AutoCompleteInsert(sel.MainCaret() - lenEntered, lenEntered, list, lenInsert);
266 } else {
267 AutoCompleteInsert(sel.MainCaret(), 0, list + lenEntered, lenInsert - lenEntered);
268 }
269 ac.Cancel();
270 return;
271 }
272 }
274 lenEntered, vs.lineHeight, IsUnicodeMode(), technology);
275
276 const PRectangle rcClient = GetClientRectangle();
277 Point pt = LocationFromPosition(sel.MainCaret() - lenEntered);
278 PRectangle rcPopupBounds = wMain.GetMonitorRect(pt);
279 if (rcPopupBounds.Height() == 0)
280 rcPopupBounds = rcClient;
281
282 int heightLB = ac.heightLBDefault;
283 int widthLB = ac.widthLBDefault;
284 if (pt.x >= rcClient.right - widthLB) {
285 HorizontalScrollTo(static_cast<int>(xOffset + pt.x - rcClient.right + widthLB));
286 Redraw();
287 pt = PointMainCaret();
288 }
289 if (wMargin.Created()) {
290 pt = pt + GetVisibleOriginInMain();
291 }
292 PRectangle rcac;
293 rcac.left = pt.x - ac.lb->CaretFromEdge();
294 if (pt.y >= rcPopupBounds.bottom - heightLB && // Won't fit below.
295 pt.y >= (rcPopupBounds.bottom + rcPopupBounds.top) / 2) { // and there is more room above.
296 rcac.top = pt.y - heightLB;
297 if (rcac.top < rcPopupBounds.top) {
298 heightLB -= static_cast<int>(rcPopupBounds.top - rcac.top);
299 rcac.top = rcPopupBounds.top;
300 }
301 } else {
302 rcac.top = pt.y + vs.lineHeight;
303 }
304 rcac.right = rcac.left + widthLB;
305 rcac.bottom = static_cast<XYPOSITION>(std::min(static_cast<int>(rcac.top) + heightLB, static_cast<int>(rcPopupBounds.bottom)));
306 ac.lb->SetPositionRelative(rcac, &wMain);
307 ac.lb->SetFont(vs.styles[STYLE_DEFAULT].font);
308 const unsigned int aveCharWidth = static_cast<unsigned int>(vs.styles[STYLE_DEFAULT].aveCharWidth);
309 ac.lb->SetAverageCharWidth(aveCharWidth);
310 ac.lb->SetDelegate(this);
311
312 ac.SetList(list ? list : "");
313
314 // Fiddle the position of the list so it is right next to the target and wide enough for all its strings
315 PRectangle rcList = ac.lb->GetDesiredRect();
316 const int heightAlloced = static_cast<int>(rcList.bottom - rcList.top);
317 widthLB = std::max(widthLB, static_cast<int>(rcList.right - rcList.left));
318 if (maxListWidth != 0)
319 widthLB = std::min(widthLB, static_cast<int>(aveCharWidth)*maxListWidth);
320 // Make an allowance for large strings in list
321 rcList.left = pt.x - ac.lb->CaretFromEdge();
322 rcList.right = rcList.left + widthLB;
323 if (((pt.y + vs.lineHeight) >= (rcPopupBounds.bottom - heightAlloced)) && // Won't fit below.
324 ((pt.y + vs.lineHeight / 2) >= (rcPopupBounds.bottom + rcPopupBounds.top) / 2)) { // and there is more room above.
325 rcList.top = pt.y - heightAlloced;
326 } else {
327 rcList.top = pt.y + vs.lineHeight;
328 }
329 rcList.bottom = rcList.top + heightAlloced;
330 ac.lb->SetPositionRelative(rcList, &wMain);
331 ac.Show(true);
332 if (lenEntered != 0) {
334 }
335}
336
338 if (ac.Active()) {
339 SCNotification scn = {};
341 scn.wParam = 0;
342 scn.listType = 0;
343 NotifyParent(scn);
344 }
345 ac.Cancel();
346}
347
349 ac.Move(delta);
350}
351
353 std::string wordCurrent = RangeText(ac.posStart - ac.startLen, sel.MainCaret());
354 ac.Select(wordCurrent.c_str());
355}
356
358 const int item = ac.GetSelection();
359 std::string selected;
360 if (item != -1) {
361 selected = ac.GetValue(item);
362 }
363
364 SCNotification scn = {};
366 scn.message = 0;
367 scn.wParam = listType;
368 scn.listType = listType;
369 const Sci::Position firstPos = ac.posStart - ac.startLen;
370 scn.position = firstPos;
371 scn.lParam = firstPos;
372 scn.text = selected.c_str();
373 NotifyParent(scn);
374}
375
377 if (ac.IsFillUpChar(ch)) {
379 } else if (ac.IsStopChar(ch)) {
381 } else {
383 }
384}
385
387 if (sel.MainCaret() < ac.posStart - ac.startLen) {
389 } else if (ac.cancelAtStartPos && (sel.MainCaret() <= ac.posStart)) {
391 } else {
393 }
394 SCNotification scn = {};
396 scn.wParam = 0;
397 scn.listType = 0;
398 NotifyParent(scn);
399}
400
401void ScintillaBase::AutoCompleteCompleted(char ch, unsigned int completionMethod) {
402 const int item = ac.GetSelection();
403 if (item == -1) {
405 return;
406 }
407 const std::string selected = ac.GetValue(item);
408
409 ac.Show(false);
410
411 SCNotification scn = {};
413 scn.message = 0;
414 scn.ch = ch;
415 scn.listCompletionMethod = completionMethod;
416 scn.wParam = listType;
417 scn.listType = listType;
418 const Sci::Position firstPos = ac.posStart - ac.startLen;
419 scn.position = firstPos;
420 scn.lParam = firstPos;
421 scn.text = selected.c_str();
422 NotifyParent(scn);
423
424 if (!ac.Active())
425 return;
426 ac.Cancel();
427
428 if (listType > 0)
429 return;
430
431 Sci::Position endPos = sel.MainCaret();
432 if (ac.dropRestOfWord)
433 endPos = pdoc->ExtendWordSelect(endPos, 1, true);
434 if (endPos < firstPos)
435 return;
436 AutoCompleteInsert(firstPos, endPos - firstPos, selected.c_str(), selected.length());
438
440 NotifyParent(scn);
441
442}
443
445 if (!ac.Active())
446 return -1;
447 return ac.GetSelection();
448}
449
451 if (ac.Active()) {
452 const int item = ac.GetSelection();
453 if (item != -1) {
454 const std::string selected = ac.GetValue(item);
455 if (buffer)
456 memcpy(buffer, selected.c_str(), selected.length()+1);
457 return static_cast<int>(selected.length());
458 }
459 }
460 if (buffer)
461 *buffer = '\0';
462 return 0;
463}
464
465void ScintillaBase::CallTipShow(Point pt, const char *defn) {
466 ac.Cancel();
467 // If container knows about STYLE_CALLTIP then use it in place of the
468 // STYLE_DEFAULT for the face name, size and character set. Also use it
469 // for the foreground and background colour.
470 const int ctStyle = ct.UseStyleCallTip() ? STYLE_CALLTIP : STYLE_DEFAULT;
471 if (ct.UseStyleCallTip()) {
473 }
474 if (wMargin.Created()) {
475 pt = pt + GetVisibleOriginInMain();
476 }
479 defn,
480 vs.styles[ctStyle].fontName,
481 vs.styles[ctStyle].sizeZoomed,
482 CodePage(),
483 vs.styles[ctStyle].characterSet,
485 wMain);
486 // If the call-tip window would be out of the client
487 // space
488 const PRectangle rcClient = GetClientRectangle();
489 const int offset = vs.lineHeight + static_cast<int>(rc.Height());
490 // adjust so it displays above the text.
491 if (rc.bottom > rcClient.bottom && rc.Height() < rcClient.Height()) {
492 rc.top -= offset;
493 rc.bottom -= offset;
494 }
495 // adjust so it displays below the text.
496 if (rc.top < rcClient.top && rc.Height() < rcClient.Height()) {
497 rc.top += offset;
498 rc.bottom += offset;
499 }
500 // Now display the window.
503 ct.wCallTip.Show();
504}
505
507 SCNotification scn = {};
509 scn.position = ct.clickPlace;
510 NotifyParent(scn);
511}
512
513bool ScintillaBase::ShouldDisplayPopup(Point ptInWindowCoordinates) const {
514 return (displayPopupMenu == SC_POPUP_ALL ||
515 (displayPopupMenu == SC_POPUP_TEXT && !PointInSelMargin(ptInWindowCoordinates)));
516}
517
519 if (displayPopupMenu) {
520 const bool writable = !WndProc(SCI_GETREADONLY, 0, 0);
522 AddToPopUp("Undo", idcmdUndo, writable && pdoc->CanUndo());
523 AddToPopUp("Redo", idcmdRedo, writable && pdoc->CanRedo());
524 AddToPopUp("");
525 AddToPopUp("Cut", idcmdCut, writable && !sel.Empty());
526 AddToPopUp("Copy", idcmdCopy, !sel.Empty());
527 AddToPopUp("Paste", idcmdPaste, writable && WndProc(SCI_CANPASTE, 0, 0));
528 AddToPopUp("Delete", idcmdDelete, writable && !sel.Empty());
529 AddToPopUp("");
530 AddToPopUp("Select All", idcmdSelectAll);
531 popup.Show(pt, wMain);
532 }
533}
534
539}
540
541void ScintillaBase::ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers) {
542 CancelModes();
543 Editor::ButtonDownWithModifiers(pt, curTime, modifiers);
544}
545
546void ScintillaBase::RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers) {
547 CancelModes();
548 Editor::RightButtonDownWithModifiers(pt, curTime, modifiers);
549}
550
551#ifdef SCI_LEXER
552
553namespace Scintilla {
554
555class LexState : public LexInterface {
556 const LexerModule *lexCurrent;
557 void SetLexerModule(const LexerModule *lex);
558 PropSetSimple props;
559 int interfaceVersion;
560public:
561 int lexLanguage;
562
563 explicit LexState(Document *pdoc_);
564 // Deleted so LexState objects can not be copied.
565 LexState(const LexState &) = delete;
566 LexState(LexState &&) = delete;
567 LexState &operator=(const LexState &) = delete;
568 LexState &operator=(LexState &&) = delete;
569 ~LexState() override;
570 void SetLexer(uptr_t wParam);
571 void SetLexerLanguage(const char *languageName);
572 const char *DescribeWordListSets();
573 void SetWordList(int n, const char *wl);
574 const char *GetName() const;
575 void *PrivateCall(int operation, void *pointer);
576 const char *PropertyNames();
577 int PropertyType(const char *name);
578 const char *DescribeProperty(const char *name);
579 void PropSet(const char *key, const char *val);
580 const char *PropGet(const char *key) const;
581 int PropGetInt(const char *key, int defaultValue=0) const;
582 size_t PropGetExpanded(const char *key, char *result) const;
583
584 int LineEndTypesSupported() override;
585 int AllocateSubStyles(int styleBase, int numberStyles);
586 int SubStylesStart(int styleBase);
587 int SubStylesLength(int styleBase);
588 int StyleFromSubStyle(int subStyle);
589 int PrimaryStyleFromStyle(int style);
590 void FreeSubStyles();
591 void SetIdentifiers(int style, const char *identifiers);
592 int DistanceToSecondaryStyles();
593 const char *GetSubStyleBases();
594 int NamedStyles();
595 const char *NameOfStyle(int style);
596 const char *TagsOfStyle(int style);
597 const char *DescriptionOfStyle(int style);
598};
599
600}
601
602LexState::LexState(Document *pdoc_) : LexInterface(pdoc_) {
603 lexCurrent = nullptr;
604 performingStyle = false;
605 interfaceVersion = lvOriginal;
606 lexLanguage = SCLEX_CONTAINER;
607}
608
609LexState::~LexState() {
610 if (instance) {
611 instance->Release();
612 instance = nullptr;
613 }
614}
615
616LexState *ScintillaBase::DocumentLexState() {
617 if (!pdoc->GetLexInterface()) {
618 pdoc->SetLexInterface(Sci::make_unique<LexState>(pdoc));
619 }
620 return dynamic_cast<LexState *>(pdoc->GetLexInterface());
621}
622
623void LexState::SetLexerModule(const LexerModule *lex) {
624 if (lex != lexCurrent) {
625 if (instance) {
626 instance->Release();
627 instance = nullptr;
628 }
629 interfaceVersion = lvOriginal;
630 lexCurrent = lex;
631 if (lexCurrent) {
632 instance = lexCurrent->Create();
633 interfaceVersion = instance->Version();
634 }
635 pdoc->LexerChanged();
636 }
637}
638
639void LexState::SetLexer(uptr_t wParam) {
640 lexLanguage = static_cast<int>(wParam);
641 if (lexLanguage == SCLEX_CONTAINER) {
642 SetLexerModule(nullptr);
643 } else {
644 const LexerModule *lex = Catalogue::Find(lexLanguage);
645 if (!lex)
647 SetLexerModule(lex);
648 }
649}
650
651void LexState::SetLexerLanguage(const char *languageName) {
652 const LexerModule *lex = Catalogue::Find(languageName);
653 if (!lex)
655 if (lex)
656 lexLanguage = lex->GetLanguage();
657 SetLexerModule(lex);
658}
659
660const char *LexState::DescribeWordListSets() {
661 if (instance) {
662 return instance->DescribeWordListSets();
663 } else {
664 return nullptr;
665 }
666}
667
668void LexState::SetWordList(int n, const char *wl) {
669 if (instance) {
670 const Sci_Position firstModification = instance->WordListSet(n, wl);
671 if (firstModification >= 0) {
672 pdoc->ModifiedAt(firstModification);
673 }
674 }
675}
676
677const char *LexState::GetName() const {
678 if (lexCurrent) {
679 return lexCurrent->languageName;
680 }
681 if (instance) {
682 if (instance->Version() >= lvIdentity) {
683 return static_cast<ILexerWithIdentity *>(instance)->GetName();
684 }
685 }
686 return "";
687}
688
689void *LexState::PrivateCall(int operation, void *pointer) {
690 if (pdoc && instance) {
691 return instance->PrivateCall(operation, pointer);
692 } else {
693 return nullptr;
694 }
695}
696
697const char *LexState::PropertyNames() {
698 if (instance) {
699 return instance->PropertyNames();
700 } else {
701 return nullptr;
702 }
703}
704
705int LexState::PropertyType(const char *name) {
706 if (instance) {
707 return instance->PropertyType(name);
708 } else {
709 return SC_TYPE_BOOLEAN;
710 }
711}
712
713const char *LexState::DescribeProperty(const char *name) {
714 if (instance) {
715 return instance->DescribeProperty(name);
716 } else {
717 return nullptr;
718 }
719}
720
721void LexState::PropSet(const char *key, const char *val) {
722 props.Set(key, val, strlen(key), strlen(val));
723 if (instance) {
724 const Sci_Position firstModification = instance->PropertySet(key, val);
725 if (firstModification >= 0) {
726 pdoc->ModifiedAt(firstModification);
727 }
728 }
729}
730
731const char *LexState::PropGet(const char *key) const {
732 return props.Get(key);
733}
734
735int LexState::PropGetInt(const char *key, int defaultValue) const {
736 return props.GetInt(key, defaultValue);
737}
738
739size_t LexState::PropGetExpanded(const char *key, char *result) const {
740 return props.GetExpanded(key, result);
741}
742
743int LexState::LineEndTypesSupported() {
744 if (instance && (interfaceVersion >= lvSubStyles)) {
745 return static_cast<ILexerWithSubStyles *>(instance)->LineEndTypesSupported();
746 }
747 return 0;
748}
749
750int LexState::AllocateSubStyles(int styleBase, int numberStyles) {
751 if (instance && (interfaceVersion >= lvSubStyles)) {
752 return static_cast<ILexerWithSubStyles *>(instance)->AllocateSubStyles(styleBase, numberStyles);
753 }
754 return -1;
755}
756
757int LexState::SubStylesStart(int styleBase) {
758 if (instance && (interfaceVersion >= lvSubStyles)) {
759 return static_cast<ILexerWithSubStyles *>(instance)->SubStylesStart(styleBase);
760 }
761 return -1;
762}
763
764int LexState::SubStylesLength(int styleBase) {
765 if (instance && (interfaceVersion >= lvSubStyles)) {
766 return static_cast<ILexerWithSubStyles *>(instance)->SubStylesLength(styleBase);
767 }
768 return 0;
769}
770
771int LexState::StyleFromSubStyle(int subStyle) {
772 if (instance && (interfaceVersion >= lvSubStyles)) {
773 return static_cast<ILexerWithSubStyles *>(instance)->StyleFromSubStyle(subStyle);
774 }
775 return 0;
776}
777
778int LexState::PrimaryStyleFromStyle(int style) {
779 if (instance && (interfaceVersion >= lvSubStyles)) {
780 return static_cast<ILexerWithSubStyles *>(instance)->PrimaryStyleFromStyle(style);
781 }
782 return 0;
783}
784
785void LexState::FreeSubStyles() {
786 if (instance && (interfaceVersion >= lvSubStyles)) {
787 static_cast<ILexerWithSubStyles *>(instance)->FreeSubStyles();
788 }
789}
790
791void LexState::SetIdentifiers(int style, const char *identifiers) {
792 if (instance && (interfaceVersion >= lvSubStyles)) {
793 static_cast<ILexerWithSubStyles *>(instance)->SetIdentifiers(style, identifiers);
794 pdoc->ModifiedAt(0);
795 }
796}
797
798int LexState::DistanceToSecondaryStyles() {
799 if (instance && (interfaceVersion >= lvSubStyles)) {
800 return static_cast<ILexerWithSubStyles *>(instance)->DistanceToSecondaryStyles();
801 }
802 return 0;
803}
804
805const char *LexState::GetSubStyleBases() {
806 if (instance && (interfaceVersion >= lvSubStyles)) {
807 return static_cast<ILexerWithSubStyles *>(instance)->GetSubStyleBases();
808 }
809 return "";
810}
811
812int LexState::NamedStyles() {
813 if (instance && (interfaceVersion >= lvMetaData)) {
814 return static_cast<ILexerWithMetaData *>(instance)->NamedStyles();
815 } else {
816 return -1;
817 }
818}
819
820const char *LexState::NameOfStyle(int style) {
821 if (instance && (interfaceVersion >= lvMetaData)) {
822 return static_cast<ILexerWithMetaData *>(instance)->NameOfStyle(style);
823 } else {
824 return nullptr;
825 }
826}
827
828const char *LexState::TagsOfStyle(int style) {
829 if (instance && (interfaceVersion >= lvMetaData)) {
830 return static_cast<ILexerWithMetaData *>(instance)->TagsOfStyle(style);
831 } else {
832 return nullptr;
833 }
834}
835
836const char *LexState::DescriptionOfStyle(int style) {
837 if (instance && (interfaceVersion >= lvMetaData)) {
838 return static_cast<ILexerWithMetaData *>(instance)->DescriptionOfStyle(style);
839 } else {
840 return nullptr;
841 }
842}
843
844#endif
845
847#ifdef SCI_LEXER
848 if (DocumentLexState()->lexLanguage != SCLEX_CONTAINER) {
849 const Sci::Line lineEndStyled =
851 const Sci::Position endStyled =
852 pdoc->LineStart(lineEndStyled);
853 DocumentLexState()->Colourise(endStyled, endStyleNeeded);
854 return;
855 }
856#endif
857 Editor::NotifyStyleToNeeded(endStyleNeeded);
858}
859
861#ifdef SCI_LEXER
862 vs.EnsureStyle(0xff);
863#endif
864}
865
866sptr_t ScintillaBase::WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) {
867 switch (iMessage) {
868 case SCI_AUTOCSHOW:
869 listType = 0;
870 AutoCompleteStart(static_cast<Sci::Position>(wParam), ConstCharPtrFromSPtr(lParam));
871 break;
872
873 case SCI_AUTOCCANCEL:
874 ac.Cancel();
875 break;
876
877 case SCI_AUTOCACTIVE:
878 return ac.Active();
879
881 return ac.posStart;
882
885 break;
886
888 ac.SetSeparator(static_cast<char>(wParam));
889 break;
890
892 return ac.GetSeparator();
893
894 case SCI_AUTOCSTOPS:
896 break;
897
898 case SCI_AUTOCSELECT:
900 break;
901
903 return AutoCompleteGetCurrent();
904
907
909 ac.cancelAtStartPos = wParam != 0;
910 break;
911
913 return ac.cancelAtStartPos;
914
917 break;
918
920 ac.chooseSingle = wParam != 0;
921 break;
922
924 return ac.chooseSingle;
925
927 ac.ignoreCase = wParam != 0;
928 break;
929
931 return ac.ignoreCase;
932
934 ac.ignoreCaseBehaviour = static_cast<unsigned int>(wParam);
935 break;
936
938 return ac.ignoreCaseBehaviour;
939
941 multiAutoCMode = static_cast<int>(wParam);
942 break;
943
945 return multiAutoCMode;
946
948 ac.autoSort = static_cast<int>(wParam);
949 break;
950
952 return ac.autoSort;
953
954 case SCI_USERLISTSHOW:
955 listType = static_cast<int>(wParam);
957 break;
958
960 ac.autoHide = wParam != 0;
961 break;
962
964 return ac.autoHide;
965
967 ac.dropRestOfWord = wParam != 0;
968 break;
969
971 return ac.dropRestOfWord;
972
974 ac.lb->SetVisibleRows(static_cast<int>(wParam));
975 break;
976
978 return ac.lb->GetVisibleRows();
979
981 maxListWidth = static_cast<int>(wParam);
982 break;
983
985 return maxListWidth;
986
988 ac.lb->RegisterImage(static_cast<int>(wParam), ConstCharPtrFromSPtr(lParam));
989 break;
990
992 ac.lb->RegisterRGBAImage(static_cast<int>(wParam), static_cast<int>(sizeRGBAImage.x), static_cast<int>(sizeRGBAImage.y),
993 ConstUCharPtrFromSPtr(lParam));
994 break;
995
997 ac.lb->ClearRegisteredImages();
998 break;
999
1001 ac.SetTypesep(static_cast<char>(wParam));
1002 break;
1003
1005 return ac.GetTypesep();
1006
1007 case SCI_CALLTIPSHOW:
1009 ConstCharPtrFromSPtr(lParam));
1010 break;
1011
1012 case SCI_CALLTIPCANCEL:
1013 ct.CallTipCancel();
1014 break;
1015
1016 case SCI_CALLTIPACTIVE:
1017 return ct.inCallTipMode;
1018
1020 return ct.posStartCallTip;
1021
1023 ct.posStartCallTip = wParam;
1024 break;
1025
1026 case SCI_CALLTIPSETHLT:
1027 ct.SetHighlight(wParam, lParam);
1028 break;
1029
1030 case SCI_CALLTIPSETBACK:
1031 ct.colourBG = ColourDesired(static_cast<int>(wParam));
1034 break;
1035
1036 case SCI_CALLTIPSETFORE:
1037 ct.colourUnSel = ColourDesired(static_cast<int>(wParam));
1040 break;
1041
1043 ct.colourSel = ColourDesired(static_cast<int>(wParam));
1045 break;
1046
1048 ct.SetTabSize(static_cast<int>(wParam));
1050 break;
1051
1053 ct.SetPosition(wParam != 0);
1055 break;
1056
1057 case SCI_USEPOPUP:
1058 displayPopupMenu = static_cast<int>(wParam);
1059 break;
1060
1061#ifdef SCI_LEXER
1062 case SCI_SETLEXER:
1063 DocumentLexState()->SetLexer(static_cast<int>(wParam));
1064 break;
1065
1066 case SCI_GETLEXER:
1067 return DocumentLexState()->lexLanguage;
1068
1069 case SCI_COLOURISE:
1070 if (DocumentLexState()->lexLanguage == SCLEX_CONTAINER) {
1071 pdoc->ModifiedAt(static_cast<Sci::Position>(wParam));
1072 NotifyStyleToNeeded((lParam == -1) ? pdoc->Length() : lParam);
1073 } else {
1074 DocumentLexState()->Colourise(static_cast<Sci::Position>(wParam), lParam);
1075 }
1076 Redraw();
1077 break;
1078
1079 case SCI_SETPROPERTY:
1080 DocumentLexState()->PropSet(ConstCharPtrFromUPtr(wParam),
1081 ConstCharPtrFromSPtr(lParam));
1082 break;
1083
1084 case SCI_GETPROPERTY:
1085 return StringResult(lParam, DocumentLexState()->PropGet(ConstCharPtrFromUPtr(wParam)));
1086
1088 return DocumentLexState()->PropGetExpanded(ConstCharPtrFromUPtr(wParam),
1089 CharPtrFromSPtr(lParam));
1090
1091 case SCI_GETPROPERTYINT:
1092 return DocumentLexState()->PropGetInt(ConstCharPtrFromUPtr(wParam), static_cast<int>(lParam));
1093
1094 case SCI_SETKEYWORDS:
1095 DocumentLexState()->SetWordList(static_cast<int>(wParam), ConstCharPtrFromSPtr(lParam));
1096 break;
1097
1099 DocumentLexState()->SetLexerLanguage(ConstCharPtrFromSPtr(lParam));
1100 break;
1101
1103 return StringResult(lParam, DocumentLexState()->GetName());
1104
1107 break;
1108
1110 return reinterpret_cast<sptr_t>(
1111 DocumentLexState()->PrivateCall(static_cast<int>(wParam), reinterpret_cast<void *>(lParam)));
1112
1113#ifdef INCLUDE_DEPRECATED_FEATURES
1114 case SCI_GETSTYLEBITSNEEDED:
1115 return 8;
1116#endif
1117
1118 case SCI_PROPERTYNAMES:
1119 return StringResult(lParam, DocumentLexState()->PropertyNames());
1120
1121 case SCI_PROPERTYTYPE:
1122 return DocumentLexState()->PropertyType(ConstCharPtrFromUPtr(wParam));
1123
1125 return StringResult(lParam,
1126 DocumentLexState()->DescribeProperty(ConstCharPtrFromUPtr(wParam)));
1127
1129 return StringResult(lParam, DocumentLexState()->DescribeWordListSets());
1130
1132 return DocumentLexState()->LineEndTypesSupported();
1133
1135 return DocumentLexState()->AllocateSubStyles(static_cast<int>(wParam), static_cast<int>(lParam));
1136
1138 return DocumentLexState()->SubStylesStart(static_cast<int>(wParam));
1139
1141 return DocumentLexState()->SubStylesLength(static_cast<int>(wParam));
1142
1144 return DocumentLexState()->StyleFromSubStyle(static_cast<int>(wParam));
1145
1147 return DocumentLexState()->PrimaryStyleFromStyle(static_cast<int>(wParam));
1148
1149 case SCI_FREESUBSTYLES:
1150 DocumentLexState()->FreeSubStyles();
1151 break;
1152
1153 case SCI_SETIDENTIFIERS:
1154 DocumentLexState()->SetIdentifiers(static_cast<int>(wParam),
1155 ConstCharPtrFromSPtr(lParam));
1156 break;
1157
1159 return DocumentLexState()->DistanceToSecondaryStyles();
1160
1162 return StringResult(lParam, DocumentLexState()->GetSubStyleBases());
1163
1164 case SCI_GETNAMEDSTYLES:
1165 return DocumentLexState()->NamedStyles();
1166
1167 case SCI_NAMEOFSTYLE:
1168 return StringResult(lParam, DocumentLexState()->
1169 NameOfStyle(static_cast<int>(wParam)));
1170
1171 case SCI_TAGSOFSTYLE:
1172 return StringResult(lParam, DocumentLexState()->
1173 TagsOfStyle(static_cast<int>(wParam)));
1174
1176 return StringResult(lParam, DocumentLexState()->
1177 DescriptionOfStyle(static_cast<int>(wParam)));
1178
1179#endif
1180
1181 default:
1182 return Editor::WndProc(iMessage, wParam, lParam);
1183 }
1184 return 0;
1185}
Defines the auto completion list box.
Interface to the call tip control.
Classes for case folding.
Lexer infrastructure.
Manages the text of the document.
Character classifications used by Document and RESearch.
Returns the Unicode general category of a character.
Manages visibility of lines for folding and wrapping.
Visual elements added over text.
Text document that handles notifications, DBCS, styling, words and end of line.
Defines the editor state that must be visible to EditorView.
Defines the appearance of the main text area of the editor window.
Defines the main editor class.
Support external lexers in DLLs or shared libraries.
Interface between Scintilla and lexers.
Interface for loading into a Scintilla document from a background thread.
Defines the style of indicators which are text decorations such as underlining.
Defines a mapping between keystrokes and commands.
Colourise for particular languages.
Defines the look of a line marker in the margin .
Defines the appearance of the editor margin.
Data structure used to partition an interval.
Interface to platform facilities.
Classes for caching layout information.
Defines global type name Position in the Sci internal namespace.
A basic string to string map.
Data structure used to store sparse styles.
Interface to the added lexer functions in the SciLexer version of the edit control.
#define SCLEX_NULL
Definition: SciLexer.h:18
#define SCLEX_CONTAINER
Definition: SciLexer.h:17
ptrdiff_t Sci_Position
Definition: Sci_Position.h:15
Defines an enhanced subclass of Editor with calltips, autocomplete and context menu.
Interface to the edit control.
#define SCI_DESCRIPTIONOFSTYLE
Definition: Scintilla.h:1059
#define SCI_AUTOCPOSSTART
Definition: Scintilla.h:349
#define SCI_SETKEYWORDS
Definition: Scintilla.h:1031
intptr_t sptr_t
Definition: Scintilla.h:35
#define SCI_AUTOCSETSEPARATOR
Definition: Scintilla.h:352
#define SCI_FREESUBSTYLES
Definition: Scintilla.h:1052
#define SCI_AUTOCSHOW
Definition: Scintilla.h:346
#define SCI_AUTOCSETAUTOHIDE
Definition: Scintilla.h:363
#define SCI_AUTOCGETMAXWIDTH
Definition: Scintilla.h:372
#define SCI_ALLOCATESUBSTYLES
Definition: Scintilla.h:1047
#define SCI_GETSUBSTYLESSTART
Definition: Scintilla.h:1048
#define SCI_NEWLINE
Definition: Scintilla.h:653
#define SCI_CALLTIPSETHLT
Definition: Scintilla.h:485
#define SCI_LINEUP
Definition: Scintilla.h:626
#define SCI_CALLTIPSETFOREHLT
Definition: Scintilla.h:488
#define SC_AC_COMMAND
Definition: Scintilla.h:1122
#define SCI_DESCRIBEKEYWORDSETS
Definition: Scintilla.h:1045
#define SCI_AUTOCACTIVE
Definition: Scintilla.h:348
#define SCI_AUTOCGETCASEINSENSITIVEBEHAVIOUR
Definition: Scintilla.h:822
#define SCI_AUTOCGETCURRENTTEXT
Definition: Scintilla.h:818
#define SCI_SELECTALL
Definition: Scintilla.h:62
#define SCI_PROPERTYTYPE
Definition: Scintilla.h:1043
#define SCI_CALLTIPPOSSTART
Definition: Scintilla.h:483
#define SC_AC_DOUBLECLICK
Definition: Scintilla.h:1119
#define SCN_AUTOCCOMPLETED
Definition: Scintilla.h:1155
#define SCI_GETLEXERLANGUAGE
Definition: Scintilla.h:1037
#define SCI_CHARRIGHT
Definition: Scintilla.h:630
#define SCI_GETSTYLEFROMSUBSTYLE
Definition: Scintilla.h:1050
#define SCI_AUTOCGETTYPESEPARATOR
Definition: Scintilla.h:369
#define SCI_PASTE
Definition: Scintilla.h:452
#define SCI_VCHOME
Definition: Scintilla.h:655
#define SCN_AUTOCCANCELLED
Definition: Scintilla.h:1150
#define SCI_EDITTOGGLEOVERTYPE
Definition: Scintilla.h:648
#define SCI_AUTOCGETMULTI
Definition: Scintilla.h:826
#define SCI_LINEDOWN
Definition: Scintilla.h:624
#define SCI_CALLTIPCANCEL
Definition: Scintilla.h:481
#define SCI_GETNAMEDSTYLES
Definition: Scintilla.h:1056
#define SCI_GETPROPERTYINT
Definition: Scintilla.h:1036
#define SCI_DELETEBACKNOTLINE
Definition: Scintilla.h:671
#define SCI_AUTOCSETMAXWIDTH
Definition: Scintilla.h:371
#define SCI_CALLTIPACTIVE
Definition: Scintilla.h:482
#define SCI_DISTANCETOSECONDARYSTYLES
Definition: Scintilla.h:1054
#define SCN_AUTOCSELECTION
Definition: Scintilla.h:1147
#define SCI_PAGEUP
Definition: Scintilla.h:644
#define SCI_GETPROPERTYEXPANDED
Definition: Scintilla.h:1035
#define SCI_SETLEXERLANGUAGE
Definition: Scintilla.h:1032
#define SCI_DELETEBACK
Definition: Scintilla.h:650
#define SC_MULTIAUTOC_ONCE
Definition: Scintilla.h:823
uintptr_t uptr_t
Definition: Scintilla.h:33
#define SCI_AUTOCSETMAXHEIGHT
Definition: Scintilla.h:373
#define SCN_CALLTIPCLICK
Definition: Scintilla.h:1146
#define SCI_AUTOCGETIGNORECASE
Definition: Scintilla.h:361
#define SCI_REGISTERRGBAIMAGE
Definition: Scintilla.h:987
#define SCI_AUTOCSETTYPESEPARATOR
Definition: Scintilla.h:370
#define SCI_GETREADONLY
Definition: Scintilla.h:398
#define SCI_UNDO
Definition: Scintilla.h:449
#define SCI_CHARLEFT
Definition: Scintilla.h:628
#define SCI_AUTOCSETORDER
Definition: Scintilla.h:830
#define SCI_CALLTIPSETBACK
Definition: Scintilla.h:486
#define STYLE_CALLTIP
Definition: Scintilla.h:203
#define SCI_SETPROPERTY
Definition: Scintilla.h:1029
int Scintilla_LinkLexers(void)
Definition: Catalogue.cxx:49
#define SCI_AUTOCSELECT
Definition: Scintilla.h:354
#define SCI_GETLEXER
Definition: Scintilla.h:1027
#define SCI_GETLINEENDTYPESSUPPORTED
Definition: Scintilla.h:1046
#define SCI_AUTOCSETCANCELATSTART
Definition: Scintilla.h:355
#define SCI_USERLISTSHOW
Definition: Scintilla.h:362
#define STYLE_DEFAULT
Definition: Scintilla.h:197
#define SCI_CALLTIPSHOW
Definition: Scintilla.h:480
#define SCI_CALLTIPSETPOSSTART
Definition: Scintilla.h:484
#define SCI_AUTOCSETCASEINSENSITIVEBEHAVIOUR
Definition: Scintilla.h:821
#define SCI_CALLTIPSETPOSITION
Definition: Scintilla.h:490
#define SCI_GETSUBSTYLESLENGTH
Definition: Scintilla.h:1049
#define SCN_USERLISTSELECTION
Definition: Scintilla.h:1139
#define SCI_COPY
Definition: Scintilla.h:451
#define SCI_SETIDENTIFIERS
Definition: Scintilla.h:1053
#define SCI_AUTOCSETCHOOSESINGLE
Definition: Scintilla.h:358
#define SCI_CHARRIGHTEXTEND
Definition: Scintilla.h:631
#define SCN_AUTOCSELECTIONCHANGE
Definition: Scintilla.h:1157
#define SC_POPUP_ALL
Definition: Scintilla.h:714
#define SC_AC_TAB
Definition: Scintilla.h:1120
#define SCI_AUTOCGETCHOOSESINGLE
Definition: Scintilla.h:359
#define SCI_LOADLEXERLIBRARY
Definition: Scintilla.h:1033
#define SCN_AUTOCCHARDELETED
Definition: Scintilla.h:1151
#define SCI_DESCRIBEPROPERTY
Definition: Scintilla.h:1044
#define SCI_AUTOCGETCURRENT
Definition: Scintilla.h:817
#define SCI_REGISTERIMAGE
Definition: Scintilla.h:367
#define SCI_PROPERTYNAMES
Definition: Scintilla.h:1039
#define SC_TYPE_BOOLEAN
Definition: Scintilla.h:1040
#define SC_AC_NEWLINE
Definition: Scintilla.h:1121
#define SCI_AUTOCCANCEL
Definition: Scintilla.h:347
#define SCI_PRIVATELEXERCALL
Definition: Scintilla.h:1038
#define SCI_AUTOCGETCANCELATSTART
Definition: Scintilla.h:356
#define SCI_AUTOCSETIGNORECASE
Definition: Scintilla.h:360
#define SCI_SETLEXER
Definition: Scintilla.h:1026
#define SCI_AUTOCSETDROPRESTOFWORD
Definition: Scintilla.h:365
#define SCI_TAB
Definition: Scintilla.h:651
#define SC_POPUP_TEXT
Definition: Scintilla.h:715
#define SCI_GETSUBSTYLEBASES
Definition: Scintilla.h:1055
#define SCI_TAGSOFSTYLE
Definition: Scintilla.h:1058
#define SCI_CANPASTE
Definition: Scintilla.h:446
#define SCI_USEPOPUP
Definition: Scintilla.h:716
#define SCI_AUTOCGETAUTOHIDE
Definition: Scintilla.h:364
#define SCI_AUTOCGETDROPRESTOFWORD
Definition: Scintilla.h:366
#define SCI_GETPRIMARYSTYLEFROMSTYLE
Definition: Scintilla.h:1051
#define SCI_CALLTIPUSESTYLE
Definition: Scintilla.h:489
#define SC_AC_FILLUP
Definition: Scintilla.h:1118
#define SCI_COLOURISE
Definition: Scintilla.h:1028
#define SCI_REDO
Definition: Scintilla.h:60
#define SCI_CHARLEFTEXTEND
Definition: Scintilla.h:629
#define SCI_AUTOCSETMULTI
Definition: Scintilla.h:825
#define SCI_GETPROPERTY
Definition: Scintilla.h:1034
#define SCI_LINEEND
Definition: Scintilla.h:638
#define SCI_AUTOCGETORDER
Definition: Scintilla.h:831
#define SCI_CLEARREGISTEREDIMAGES
Definition: Scintilla.h:368
#define SCI_CLEAR
Definition: Scintilla.h:453
#define SCI_NAMEOFSTYLE
Definition: Scintilla.h:1057
#define SCI_AUTOCGETSEPARATOR
Definition: Scintilla.h:353
#define SCI_AUTOCSETFILLUPS
Definition: Scintilla.h:357
#define SCI_AUTOCSTOPS
Definition: Scintilla.h:351
#define SCI_CUT
Definition: Scintilla.h:450
#define SCI_PAGEDOWN
Definition: Scintilla.h:646
#define SCI_AUTOCCOMPLETE
Definition: Scintilla.h:350
#define SCI_AUTOCGETMAXHEIGHT
Definition: Scintilla.h:374
#define SCI_CALLTIPSETFORE
Definition: Scintilla.h:487
Classes maintaining the selection.
Main data structure for holding arrays that handle insertions and deletions efficiently.
Defines the font and colour style for a class of text.
Define UniqueString, a unique_ptr based string type for storage in containers and an allocator for Un...
Store information on how the document is to be viewed.
bool IsFillUpChar(char ch) const noexcept
Sci::Position startLen
Definition: AutoComplete.h:30
bool IsStopChar(char ch) const noexcept
int GetSelection() const
Return the position of the currently selected list item.
char GetSeparator() const noexcept
char GetTypesep() const noexcept
void SetTypesep(char separator_)
The typesep character is used for separating the word from the type.
bool Active() const noexcept
Is the auto completion list displayed?
void SetFillUpChars(const char *fillUpChars_)
The fillup chars are characters which, when typed, fill up the selected word.
int autoSort
SC_ORDER_PRESORTED: Assume the list is presorted; selection will fail if it is not alphabetical SC_O...
Definition: AutoComplete.h:42
Sci::Position posStart
Definition: AutoComplete.h:29
void Start(Window &parent, int ctrlID, Sci::Position position, Point location, Sci::Position startLen_, int lineHeight, bool unicodeMode, int technology)
Display the auto completion list positioned to be near a character position.
std::unique_ptr< ListBox > lb
Definition: AutoComplete.h:28
std::string GetValue(int item) const
Return the value of an item in the list.
void SetSeparator(char separator_)
The separator character is used when interpreting the list in SetList.
void Select(const char *word)
Select a list element that starts with word as the current element.
void Move(int delta)
Move the current list element by delta, scrolling appropriately.
void SetList(const char *list)
The list string contains a sequence of words separated by the separator character.
bool cancelAtStartPos
Should autocompletion be cancelled if editor's currentPos <= startPos?
Definition: AutoComplete.h:32
void SetStopChars(const char *stopChars_)
The stop chars are characters which, when typed, cause the auto completion list to disappear.
unsigned int ignoreCaseBehaviour
Definition: AutoComplete.h:35
Sci::Position posStartCallTip
Definition: CallTip.h:46
bool UseStyleCallTip() const noexcept
Used to determine which STYLE_xxxx to use for call tip information.
Definition: CallTip.cxx:341
ColourDesired colourBG
Definition: CallTip.h:47
void SetPosition(bool aboveText) noexcept
Set calltip position.
Definition: CallTip.cxx:337
PRectangle CallTipStart(Sci::Position pos, Point pt, int textHeight, const char *defn, const char *faceName, int size, int codePage_, int characterSet, int technology, const Window &wParent)
Setup the calltip and return a rectangle of the area required.
Definition: CallTip.cxx:273
bool inCallTipMode
Definition: CallTip.h:45
void SetForeBack(const ColourDesired &fore, const ColourDesired &back) noexcept
Definition: CallTip.cxx:347
void SetTabSize(int tabSz) noexcept
Set the tab size in pixels for the call tip. 0 or -ve means no tab expand.
Definition: CallTip.cxx:330
ColourDesired colourUnSel
Definition: CallTip.h:48
Window wCallTip
Definition: CallTip.h:43
void SetHighlight(size_t start, size_t end)
Set a range of characters to be displayed in a highlight style.
Definition: CallTip.cxx:317
void CallTipCancel()
Definition: CallTip.cxx:310
ColourDesired colourSel
Definition: CallTip.h:49
static const LexerModule * Find(int language)
Definition: Catalogue.cxx:33
bool DeleteChars(Sci::Position pos, Sci::Position len)
Definition: Document.cxx:1204
Sci::Line SciLineFromPosition(Sci::Position pos) const noexcept
Definition: Document.cxx:441
Sci_Position SCI_METHOD Length() const override
Definition: Document.h:430
Sci::Position ExtendWordSelect(Sci::Position pos, int delta, bool onlyWordCharacters=false) const
Used by commands that want to select whole words.
Definition: Document.cxx:1802
bool CanUndo() const noexcept
Definition: Document.h:351
Sci::Position InsertString(Sci::Position position, const char *s, Sci::Position insertLength)
Insert a string with a length.
Definition: Document.cxx:1246
void SetLexInterface(std::unique_ptr< LexInterface > pLexInterface) noexcept
Definition: Document.cxx:2292
Sci::Position GetEndStyled() const noexcept
Definition: Document.h:458
LexInterface * GetLexInterface() const noexcept
Definition: Document.cxx:2288
bool CanRedo() const noexcept
Definition: Document.h:352
void ModifiedAt(Sci::Position pos) noexcept
Definition: Document.cxx:1188
Sci_Position SCI_METHOD LineStart(Sci_Position line) const override
Definition: Document.cxx:395
int xOffset
Horizontal scrolled amount in pixels.
Definition: EditModel.h:27
Document * pdoc
Definition: EditModel.h:53
virtual void NotifyParent(SCNotification scn)=0
bool IsUnicodeMode() const noexcept
Definition: Editor.cxx:5628
static const char * ConstCharPtrFromSPtr(sptr_t lParam) noexcept
Definition: Editor.h:588
static sptr_t StringResult(sptr_t lParam, const char *val) noexcept
Definition: Editor.cxx:5800
bool PointInSelMargin(Point pt) const
Definition: Editor.cxx:4405
virtual int KeyCommand(unsigned int iMessage)
Definition: Editor.cxx:3692
void DelCharBack(bool allowLineStartDeletion)
Definition: Editor.cxx:2266
ViewStyle vs
Definition: Editor.h:171
Point LocationFromPosition(SelectionPosition pos, PointEnd pe=peDefault)
Definition: Editor.cxx:381
virtual sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam)
Definition: Editor.cxx:5824
Point GetVisibleOriginInMain() const override
Definition: Editor.cxx:298
void SetEmptySelection(SelectionPosition currentPos_)
Definition: Editor.cxx:713
void InvalidateStyleRedraw()
Definition: Editor.cxx:280
virtual void Finalise()
Definition: Editor.cxx:201
virtual PRectangle GetClientRectangle() const
Definition: Editor.cxx:322
static const char * ConstCharPtrFromUPtr(uptr_t wParam) noexcept
Definition: Editor.h:603
void EnsureCaretVisible(bool useMargin=true, bool vert=true, bool horiz=true)
Definition: Editor.cxx:1414
virtual void Redraw()
Definition: Editor.cxx:484
virtual void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers)
Definition: Editor.cxx:4518
std::string RangeText(Sci::Position start, Sci::Position end) const
Definition: Editor.cxx:4199
static const unsigned char * ConstUCharPtrFromSPtr(sptr_t lParam) noexcept
Definition: Editor.h:591
virtual void InsertCharacter(const char *s, unsigned int len, CharacterSource charSource)
Definition: Editor.cxx:1909
int CodePage() const noexcept
Definition: Editor.cxx:5632
Point sizeRGBAImage
Definition: Editor.h:173
void SetLastXChosen()
Choose the x position that the caret will try to stick to as it moves up and down.
Definition: Editor.cxx:944
virtual void NotifyStyleToNeeded(Sci::Position endStyleNeeded)
Definition: Editor.cxx:2332
void HorizontalScrollTo(int xPos)
Definition: Editor.cxx:984
Sci::Position RealizeVirtualSpace(Sci::Position position, Sci::Position virtualSpace)
Definition: Editor.cxx:1874
Window wMain
On GTK+, Scintilla is a container widget holding two scroll bars whereas on Windows there is just one...
Definition: Editor.h:165
bool RangeContainsProtected(Sci::Position start, Sci::Position end) const noexcept
Definition: Editor.cxx:789
static char * CharPtrFromSPtr(sptr_t lParam) noexcept
Definition: Editor.h:594
Point PointMainCaret()
Definition: Editor.cxx:936
Window wMargin
May be separate when using a scroll view for wMain.
Definition: Editor.h:166
virtual void CancelModes()
Definition: Editor.cxx:3069
virtual void RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers)
Definition: Editor.cxx:4699
virtual void * PrivateCall(int operation, void *pointer)=0
A LexerModule is responsible for lexing and folding a particular language.
Definition: LexerModule.h:27
void Show(Point pt, Window &w)
Definition: PlatGTK.cxx:1922
void CreatePopUp()
Definition: PlatGTK.cxx:1902
A geometric rectangle class.
Definition: Platform.h:131
XYPOSITION right
Definition: Platform.h:135
constexpr XYPOSITION Height() const noexcept
Definition: Platform.h:177
XYPOSITION bottom
Definition: Platform.h:136
A geometric point class.
Definition: Platform.h:99
XYPOSITION y
Definition: Platform.h:102
XYPOSITION x
Definition: Platform.h:101
void ListNotify(ListBoxEvent *plbe) override
void CancelModes() override
void AutoCompleteStart(Sci::Position lenEntered, const char *list)
void AutoCompleteCompleted(char ch, unsigned int completionMethod)
void Finalise() override
void CallTipShow(Point pt, const char *defn)
int AutoCompleteGetCurrentText(char *buffer) const
sptr_t WndProc(unsigned int iMessage, uptr_t wParam, sptr_t lParam) override
void NotifyStyleToNeeded(Sci::Position endStyleNeeded) override
void AutoCompleteMove(int delta)
void AutoCompleteInsert(Sci::Position startPos, Sci::Position removeLen, const char *text, Sci::Position textLen)
bool ShouldDisplayPopup(Point ptInWindowCoordinates) const
int multiAutoCMode
Maximum width of list, in average character widths.
Definition: ScintillaBase.h:45
int AutoCompleteGetCurrent() const
virtual void AddToPopUp(const char *label, int cmd=0, bool enabled=true)=0
void RightButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers) override
int KeyCommand(unsigned int iMessage) override
virtual void AddCharUTF(const char *s, unsigned int len, bool treatAsDBCS=false)
virtual void CreateCallTipWindow(PRectangle rc)=0
void InsertCharacter(const char *s, unsigned int len, CharacterSource charSource) override
void AutoCompleteCharacterAdded(char ch)
void NotifyLexerChanged(Document *doc, void *userData) override
int listType
0 is an autocomplete list
Definition: ScintillaBase.h:43
void ButtonDownWithModifiers(Point pt, unsigned int curTime, int modifiers) override
Sci::Position Position() const noexcept
Definition: Selection.h:34
Sci::Position VirtualSpace() const noexcept
Definition: Selection.h:41
void SetPosition(Sci::Position position_) noexcept
Definition: Selection.h:37
size_t Count() const noexcept
Definition: Selection.cxx:237
SelectionRange & Range(size_t r) noexcept
Definition: Selection.cxx:250
bool Empty() const noexcept
Definition: Selection.cxx:282
Sci::Position MainCaret() const noexcept
Definition: Selection.cxx:204
std::vector< Style > styles
Definition: ViewStyle.h:84
void EnsureStyle(size_t index)
Definition: ViewStyle.cxx:367
PRectangle GetMonitorRect(Point pt)
Definition: PlatGTK.cxx:1134
bool Created() const noexcept
Definition: Platform.h:413
void SetPositionRelative(PRectangle rc, const Window *relativeTo)
Definition: PlatGTK.cxx:1031
void Show(bool show=true)
Definition: PlatGTK.cxx:1064
const gchar * name
Definition: document.c:3219
gchar * text
Definition: editor.c:83
#define selected(var, feature)
Definition: error.c:22
tokenInfo * list
unsigned int max
static objcKeyword lex(lexingState *st)
Definition: geany_objc.c:271
ptrdiff_t Position
Definition: Position.h:19
ptrdiff_t Line
Definition: Position.h:20
Styling buffer using one element for each run rather than using a filled buffer.
Definition: Converter.h:9
float XYPOSITION
Definition: Platform.h:81
void ExternalLexerLoad(const char *path)
@ lvMetaData
Definition: ILexer.h:49
@ lvOriginal
Definition: ILexer.h:49
@ lvSubStyles
Definition: ILexer.h:49
@ lvIdentity
Definition: ILexer.h:49
Sci_Position position
Definition: Scintilla.h:1230
Sci_NotifyHeader nmhdr
Definition: Scintilla.h:1229
int listCompletionMethod
Definition: Scintilla.h:1263
const char * text
Definition: Scintilla.h:1245
unsigned int code
Definition: Scintilla.h:1225
Listbox management.
Definition: Platform.h:436
enum Scintilla::ListBoxEvent::EventType event
SelectionPosition caret
Definition: Selection.h:87
void ClearVirtualSpace() noexcept
Definition: Selection.h:115
SelectionPosition Start() const noexcept
Definition: Selection.h:124
SelectionPosition End() const noexcept
Definition: Selection.h:127
SelectionPosition anchor
Definition: Selection.h:88