xref: /MusicPlayer2/scintilla/src/EditModel.cxx (revision 8af74909132ed5e696cb05b6689ae4baf14c1c96)
1*8af74909SZhong Yang // Scintilla source code edit control
2*8af74909SZhong Yang /** @file EditModel.cxx
3*8af74909SZhong Yang  ** Defines the editor state that must be visible to EditorView.
4*8af74909SZhong Yang  **/
5*8af74909SZhong Yang // Copyright 1998-2014 by Neil Hodgson <[email protected]>
6*8af74909SZhong Yang // The License.txt file describes the conditions under which this software may be distributed.
7*8af74909SZhong Yang 
8*8af74909SZhong Yang #include <cstddef>
9*8af74909SZhong Yang #include <cstdlib>
10*8af74909SZhong Yang #include <cassert>
11*8af74909SZhong Yang #include <cstring>
12*8af74909SZhong Yang #include <cmath>
13*8af74909SZhong Yang 
14*8af74909SZhong Yang #include <stdexcept>
15*8af74909SZhong Yang #include <string>
16*8af74909SZhong Yang #include <string_view>
17*8af74909SZhong Yang #include <vector>
18*8af74909SZhong Yang #include <map>
19*8af74909SZhong Yang #include <algorithm>
20*8af74909SZhong Yang #include <memory>
21*8af74909SZhong Yang 
22*8af74909SZhong Yang #include "Platform.h"
23*8af74909SZhong Yang 
24*8af74909SZhong Yang #include "ILoader.h"
25*8af74909SZhong Yang #include "ILexer.h"
26*8af74909SZhong Yang #include "Scintilla.h"
27*8af74909SZhong Yang 
28*8af74909SZhong Yang #include "CharacterCategory.h"
29*8af74909SZhong Yang 
30*8af74909SZhong Yang #include "Position.h"
31*8af74909SZhong Yang #include "UniqueString.h"
32*8af74909SZhong Yang #include "SplitVector.h"
33*8af74909SZhong Yang #include "Partitioning.h"
34*8af74909SZhong Yang #include "RunStyles.h"
35*8af74909SZhong Yang #include "ContractionState.h"
36*8af74909SZhong Yang #include "CellBuffer.h"
37*8af74909SZhong Yang #include "KeyMap.h"
38*8af74909SZhong Yang #include "Indicator.h"
39*8af74909SZhong Yang #include "LineMarker.h"
40*8af74909SZhong Yang #include "Style.h"
41*8af74909SZhong Yang #include "ViewStyle.h"
42*8af74909SZhong Yang #include "CharClassify.h"
43*8af74909SZhong Yang #include "Decoration.h"
44*8af74909SZhong Yang #include "CaseFolder.h"
45*8af74909SZhong Yang #include "Document.h"
46*8af74909SZhong Yang #include "UniConversion.h"
47*8af74909SZhong Yang #include "Selection.h"
48*8af74909SZhong Yang #include "PositionCache.h"
49*8af74909SZhong Yang #include "EditModel.h"
50*8af74909SZhong Yang 
51*8af74909SZhong Yang using namespace Scintilla;
52*8af74909SZhong Yang 
Caret()53*8af74909SZhong Yang Caret::Caret() noexcept :
54*8af74909SZhong Yang 	active(false), on(false), period(500) {}
55*8af74909SZhong Yang 
EditModel()56*8af74909SZhong Yang EditModel::EditModel() : braces{} {
57*8af74909SZhong Yang 	inOverstrike = false;
58*8af74909SZhong Yang 	xOffset = 0;
59*8af74909SZhong Yang 	trackLineWidth = false;
60*8af74909SZhong Yang 	posDrag = SelectionPosition(Sci::invalidPosition);
61*8af74909SZhong Yang 	braces[0] = Sci::invalidPosition;
62*8af74909SZhong Yang 	braces[1] = Sci::invalidPosition;
63*8af74909SZhong Yang 	bracesMatchStyle = STYLE_BRACEBAD;
64*8af74909SZhong Yang 	highlightGuideColumn = 0;
65*8af74909SZhong Yang 	primarySelection = true;
66*8af74909SZhong Yang 	imeInteraction = imeWindowed;
67*8af74909SZhong Yang 	bidirectional = Bidirectional::bidiDisabled;
68*8af74909SZhong Yang 	foldFlags = 0;
69*8af74909SZhong Yang 	foldDisplayTextStyle = SC_FOLDDISPLAYTEXT_HIDDEN;
70*8af74909SZhong Yang 	hotspot = Range(Sci::invalidPosition);
71*8af74909SZhong Yang 	hoverIndicatorPos = Sci::invalidPosition;
72*8af74909SZhong Yang 	wrapWidth = LineLayout::wrapWidthInfinite;
73*8af74909SZhong Yang 	pdoc = new Document(SC_DOCUMENTOPTION_DEFAULT);
74*8af74909SZhong Yang 	pdoc->AddRef();
75*8af74909SZhong Yang 	pcs = ContractionStateCreate(pdoc->IsLarge());
76*8af74909SZhong Yang }
77*8af74909SZhong Yang 
~EditModel()78*8af74909SZhong Yang EditModel::~EditModel() {
79*8af74909SZhong Yang 	pdoc->Release();
80*8af74909SZhong Yang 	pdoc = nullptr;
81*8af74909SZhong Yang }
82*8af74909SZhong Yang 
BidirectionalEnabled() const83*8af74909SZhong Yang bool EditModel::BidirectionalEnabled() const noexcept {
84*8af74909SZhong Yang 	return (bidirectional != Bidirectional::bidiDisabled) &&
85*8af74909SZhong Yang 		(SC_CP_UTF8 == pdoc->dbcsCodePage);
86*8af74909SZhong Yang }
87*8af74909SZhong Yang 
BidirectionalR2L() const88*8af74909SZhong Yang bool EditModel::BidirectionalR2L() const noexcept {
89*8af74909SZhong Yang 	return bidirectional == Bidirectional::bidiR2L;
90*8af74909SZhong Yang }
91*8af74909SZhong Yang 
SetDefaultFoldDisplayText(const char * text)92*8af74909SZhong Yang void EditModel::SetDefaultFoldDisplayText(const char *text) {
93*8af74909SZhong Yang 	defaultFoldDisplayText = IsNullOrEmpty(text) ? UniqueString() : UniqueStringCopy(text);
94*8af74909SZhong Yang }
95*8af74909SZhong Yang 
GetDefaultFoldDisplayText() const96*8af74909SZhong Yang const char *EditModel::GetDefaultFoldDisplayText() const noexcept {
97*8af74909SZhong Yang 	return defaultFoldDisplayText.get();
98*8af74909SZhong Yang }
99*8af74909SZhong Yang 
GetFoldDisplayText(Sci::Line lineDoc) const100*8af74909SZhong Yang const char *EditModel::GetFoldDisplayText(Sci::Line lineDoc) const noexcept {
101*8af74909SZhong Yang 	if (foldDisplayTextStyle == SC_FOLDDISPLAYTEXT_HIDDEN || pcs->GetExpanded(lineDoc)) {
102*8af74909SZhong Yang 		return nullptr;
103*8af74909SZhong Yang 	}
104*8af74909SZhong Yang 
105*8af74909SZhong Yang 	const char *text = pcs->GetFoldDisplayText(lineDoc);
106*8af74909SZhong Yang 	return text ? text : defaultFoldDisplayText.get();
107*8af74909SZhong Yang }
108