亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? editor.cxx

?? 最強(qiáng)源代碼編輯控件
?? CXX
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	topLine = 0;
	posTopLine = 0;

	lengthForEncode = -1;

	needUpdateUI = true;
	braces[0] = invalidPosition;
	braces[1] = invalidPosition;
	bracesMatchStyle = STYLE_BRACEBAD;
	highlightGuideColumn = 0;

	theEdge = 0;

	paintState = notPainting;

	modEventMask = SC_MODEVENTMASKALL;

	pdoc = new Document();
	pdoc->AddRef();
	pdoc->AddWatcher(this, 0);

	recordingMacro = false;
	foldFlags = 0;

	wrapState = eWrapNone;
	wrapWidth = LineLayout::wrapWidthInfinite;
	wrapStart = wrapLineLarge;
	wrapEnd = wrapLineLarge;
	wrapVisualFlags = 0;
	wrapVisualFlagsLocation = 0;
	wrapVisualStartIndent = 0;
	actualWrapVisualStartIndent = 0;

	convertPastes = true;

	hsStart = -1;
	hsEnd = -1;

	llc.SetLevel(LineLayoutCache::llcCaret);
}

Editor::~Editor() {
	pdoc->RemoveWatcher(this, 0);
	pdoc->Release();
	pdoc = 0;
	DropGraphics();
	delete pixmapLine;
	delete pixmapSelMargin;
	delete pixmapSelPattern;
	delete pixmapIndentGuide;
	delete pixmapIndentGuideHighlight;
}

void Editor::Finalise() {
	SetIdle(false);
	CancelModes();
}

void Editor::DropGraphics() {
	pixmapLine->Release();
	pixmapSelMargin->Release();
	pixmapSelPattern->Release();
	pixmapIndentGuide->Release();
	pixmapIndentGuideHighlight->Release();
}

void Editor::InvalidateStyleData() {
	stylesValid = false;
	palette.Release();
	DropGraphics();
	llc.Invalidate(LineLayout::llInvalid);
	if (selType == selRectangle) {
		xStartSelect = XFromPosition(anchor);
		xEndSelect = XFromPosition(currentPos);
	}
}

void Editor::InvalidateStyleRedraw() {
	NeedWrapping();
	InvalidateStyleData();
	Redraw();
}

void Editor::RefreshColourPalette(Palette &pal, bool want) {
	vs.RefreshColourPalette(pal, want);
}

void Editor::RefreshStyleData() {
	if (!stylesValid) {
		stylesValid = true;
		AutoSurface surface(this);
		if (surface) {
			vs.Refresh(*surface);
			RefreshColourPalette(palette, true);
			palette.Allocate(wMain);
			RefreshColourPalette(palette, false);
		}
		SetScrollBars();
	}
}

PRectangle Editor::GetClientRectangle() {
	return wMain.GetClientPosition();
}

PRectangle Editor::GetTextRectangle() {
	PRectangle rc = GetClientRectangle();
	rc.left += vs.fixedColumnWidth;
	rc.right -= vs.rightMarginWidth;
	return rc;
}

int Editor::LinesOnScreen() {
	PRectangle rcClient = GetClientRectangle();
	int htClient = rcClient.bottom - rcClient.top;
	//Platform::DebugPrintf("lines on screen = %d\n", htClient / lineHeight + 1);
	return htClient / vs.lineHeight;
}

int Editor::LinesToScroll() {
	int retVal = LinesOnScreen() - 1;
	if (retVal < 1)
		return 1;
	else
		return retVal;
}

int Editor::MaxScrollPos() {
	//Platform::DebugPrintf("Lines %d screen = %d maxScroll = %d\n",
	//LinesTotal(), LinesOnScreen(), LinesTotal() - LinesOnScreen() + 1);
	int retVal = cs.LinesDisplayed();
	if (endAtLastLine) {
		retVal -= LinesOnScreen();
	} else {
		retVal--;
	}
	if (retVal < 0) {
		return 0;
	} else {
		return retVal;
	}
}

static inline bool IsControlCharacter(int ch) {
	// iscntrl returns true for lots of chars > 127 which are displayable
	return ch >= 0 && ch < ' ';
}

const char *ControlCharacterString(unsigned char ch) {
	const char *reps[] = {
		"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",
		"BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI",
		"DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB",
		"CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US"
	};
	if (ch < (sizeof(reps) / sizeof(reps[0]))) {
		return reps[ch];
	} else {
		return "BAD";
	}
}

/**
 * Convenience class to ensure LineLayout objects are always disposed.
 */
class AutoLineLayout {
	LineLayoutCache &llc;
	LineLayout *ll;
	AutoLineLayout &operator=(const AutoLineLayout &) { return * this; }
public:
	AutoLineLayout(LineLayoutCache &llc_, LineLayout *ll_) : llc(llc_), ll(ll_) {}
	~AutoLineLayout() {
		llc.Dispose(ll);
		ll = 0;
	}
	LineLayout *operator->() const {
		return ll;
	}
	operator LineLayout *() const {
		return ll;
	}
	void Set(LineLayout *ll_) {
		llc.Dispose(ll);
		ll = ll_;
	}
};

/**
 * Allows to iterate through the lines of a selection.
 * Althought it can be called for a stream selection, in most cases
 * it is inefficient and it should be used only for
 * a rectangular or a line selection.
 */
class SelectionLineIterator {
private:
	Editor *ed;
	int line;	///< Current line within the iteration.
	bool forward;	///< True if iterating by increasing line number, false otherwise.
	int selStart, selEnd;	///< Positions of the start and end of the selection relative to the start of the document.
	int minX, maxX;	///< Left and right of selection rectangle.

public:
	int lineStart, lineEnd;	///< Line numbers, first and last lines of the selection.
	int startPos, endPos;	///< Positions of the beginning and end of the selection on the current line.

	void Reset() {
		if (forward) {
			line = lineStart;
		} else {
			line = lineEnd;
		}
	}

	SelectionLineIterator(Editor *ed_, bool forward_ = true) : line(0), startPos(0), endPos(0) {
		ed = ed_;
		forward = forward_;
		selStart = ed->SelectionStart();
		selEnd = ed->SelectionEnd();
		lineStart = ed->pdoc->LineFromPosition(selStart);
		lineEnd = ed->pdoc->LineFromPosition(selEnd);
		// Left of rectangle
		minX = Platform::Minimum(ed->xStartSelect, ed->xEndSelect);
		// Right of rectangle
		maxX = Platform::Maximum(ed->xStartSelect, ed->xEndSelect);
		Reset();
	}
	~SelectionLineIterator() {}

	void SetAt(int line) {
		if (line < lineStart || line > lineEnd) {
			startPos = endPos = INVALID_POSITION;
		} else {
			if (ed->selType == ed->selRectangle) {
				// Measure line and return character closest to minX
				startPos = ed->PositionFromLineX(line, minX);
				// Measure line and return character closest to maxX
				endPos = ed->PositionFromLineX(line, maxX);
			} else if (ed->selType == ed->selLines) {
				startPos = ed->pdoc->LineStart(line);
				endPos = ed->pdoc->LineStart(line + 1);
			} else {	// Stream selection, here only for completion
				if (line == lineStart) {
					startPos = selStart;
				} else {
					startPos = ed->pdoc->LineStart(line);
				}
				if (line == lineEnd) {
					endPos = selEnd;
				} else {
					endPos = ed->pdoc->LineStart(line + 1);
				}
			}
		}
	}
	bool Iterate() {
		SetAt(line);
		if (forward) {
			line++;
		} else {
			line--;
		}
		return startPos != INVALID_POSITION;
	}
};

Point Editor::LocationFromPosition(int pos) {
	Point pt;
	RefreshStyleData();
	if (pos == INVALID_POSITION)
		return pt;
	int line = pdoc->LineFromPosition(pos);
	int lineVisible = cs.DisplayFromDoc(line);
	//Platform::DebugPrintf("line=%d\n", line);
	AutoSurface surface(this);
	AutoLineLayout ll(llc, RetrieveLineLayout(line));
	if (surface && ll) {
		// -1 because of adding in for visible lines in following loop.
		pt.y = (lineVisible - topLine - 1) * vs.lineHeight;
		pt.x = 0;
		unsigned int posLineStart = pdoc->LineStart(line);
		LayoutLine(line, surface, vs, ll, wrapWidth);
		int posInLine = pos - posLineStart;
		// In case of very long line put x at arbitrary large position
		if (posInLine > ll->maxLineLength) {
			pt.x = ll->positions[ll->maxLineLength] - ll->positions[ll->LineStart(ll->lines)];
		}

		for (int subLine = 0; subLine < ll->lines; subLine++) {
			if ((posInLine >= ll->LineStart(subLine)) && (posInLine <= ll->LineStart(subLine + 1))) {
				pt.x = ll->positions[posInLine] - ll->positions[ll->LineStart(subLine)];
				if (actualWrapVisualStartIndent != 0) {
					int lineStart = ll->LineStart(subLine);
					if (lineStart != 0)	// Wrapped
						pt.x += actualWrapVisualStartIndent * vs.aveCharWidth;
				}
			}
			if (posInLine >= ll->LineStart(subLine)) {
				pt.y += vs.lineHeight;
			}
		}
		pt.x += vs.fixedColumnWidth - xOffset;
	}
	return pt;
}

int Editor::XFromPosition(int pos) {
	Point pt = LocationFromPosition(pos);
	return pt.x - vs.fixedColumnWidth + xOffset;
}

int Editor::LineFromLocation(Point pt) {
	return cs.DocFromDisplay(pt.y / vs.lineHeight + topLine);
}

void Editor::SetTopLine(int topLineNew) {
	topLine = topLineNew;
	posTopLine = pdoc->LineStart(cs.DocFromDisplay(topLine));
}

static inline bool IsEOLChar(char ch) {
	return (ch == '\r') || (ch == '\n');
}

int Editor::PositionFromLocation(Point pt) {
	RefreshStyleData();
	pt.x = pt.x - vs.fixedColumnWidth + xOffset;
	int visibleLine = pt.y / vs.lineHeight + topLine;
	if (pt.y < 0) {	// Division rounds towards 0
		visibleLine = (pt.y - (vs.lineHeight - 1)) / vs.lineHeight + topLine;
	}
	if (visibleLine < 0)
		visibleLine = 0;
	int lineDoc = cs.DocFromDisplay(visibleLine);
	if (lineDoc >= pdoc->LinesTotal())
		return pdoc->Length();
	unsigned int posLineStart = pdoc->LineStart(lineDoc);
	int retVal = posLineStart;
	AutoSurface surface(this);
	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc));
	if (surface && ll) {
		LayoutLine(lineDoc, surface, vs, ll, wrapWidth);
		int lineStartSet = cs.DisplayFromDoc(lineDoc);
		int subLine = visibleLine - lineStartSet;
		if (subLine < ll->lines) {
			int lineStart = ll->LineStart(subLine);
			int lineEnd = ll->LineStart(subLine + 1);
			int subLineStart = ll->positions[lineStart];

			if (actualWrapVisualStartIndent != 0) {
				if (lineStart != 0)	// Wrapped
					pt.x -= actualWrapVisualStartIndent * vs.aveCharWidth;
			}
			for (int i = lineStart; i < lineEnd; i++) {
				if (pt.x < (((ll->positions[i] + ll->positions[i + 1]) / 2) - subLineStart) ||
				        IsEOLChar(ll->chars[i])) {
					return pdoc->MovePositionOutsideChar(i + posLineStart, 1);
				}
			}
			return lineEnd + posLineStart;
		}
		retVal = ll->numCharsInLine + posLineStart;
	}
	return retVal;
}

// Like PositionFromLocation but INVALID_POSITION returned when not near any text.
int Editor::PositionFromLocationClose(Point pt) {
	RefreshStyleData();
	PRectangle rcClient = GetTextRectangle();
	if (!rcClient.Contains(pt))
		return INVALID_POSITION;
	if (pt.x < vs.fixedColumnWidth)
		return INVALID_POSITION;
	if (pt.y < 0)
		return INVALID_POSITION;
	pt.x = pt.x - vs.fixedColumnWidth + xOffset;
	int visibleLine = pt.y / vs.lineHeight + topLine;
	if (pt.y < 0) {	// Division rounds towards 0
		visibleLine = (pt.y - (vs.lineHeight - 1)) / vs.lineHeight + topLine;
	}
	int lineDoc = cs.DocFromDisplay(visibleLine);
	if (lineDoc < 0)
		return INVALID_POSITION;
	if (lineDoc >= pdoc->LinesTotal())
		return INVALID_POSITION;
	AutoSurface surface(this);
	AutoLineLayout ll(llc, RetrieveLineLayout(lineDoc));
	if (surface && ll) {
		LayoutLine(lineDoc, surface, vs, ll, wrapWidth);
		unsigned int posLineStart = pdoc->LineStart(lineDoc);
		int lineStartSet = cs.DisplayFromDoc(lineDoc);
		int subLine = visibleLine - lineStartSet;
		if (subLine < ll->lines) {
			int lineStart = ll->LineStart(subLine);
			int lineEnd = ll->LineStart(subLine + 1);
			int subLineStart = ll->positions[lineStart];

			if (actualWrapVisualStartIndent != 0) {
				if (lineStart != 0)	// Wrapped
					pt.x -= actualWrapVisualStartIndent * vs.aveCharWidth;
			}
			for (int i = lineStart; i < lineEnd; i++) {
				if (pt.x < (((ll->positions[i] + ll->positions[i + 1]) / 2) - subLineStart) ||
				        IsEOLChar(ll->chars[i])) {
					return pdoc->MovePositionOutsideChar(i + posLineStart, 1);
				}
			}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品一区二区三区乱码| 欧美一级免费观看| 成人一级视频在线观看| 韩国成人在线视频| 精品无码三级在线观看视频| 蜜芽一区二区三区| 免费看日韩a级影片| 秋霞电影网一区二区| 五月天精品一区二区三区| 日韩专区中文字幕一区二区| 日韩精品欧美精品| 老司机午夜精品| 久久精品国产亚洲高清剧情介绍| 美女尤物国产一区| 精品在线一区二区| 国产美女精品在线| 国产盗摄精品一区二区三区在线| 国产福利精品一区二区| 成人在线视频一区二区| 99久久99久久精品免费看蜜桃| 91色在线porny| 欧美男生操女生| 日韩一级黄色大片| 久久精品日产第一区二区三区高清版 | 久久国产夜色精品鲁鲁99| 久久不见久久见中文字幕免费| 国产在线国偷精品产拍免费yy| 国产精品1区2区3区| 99久久精品国产精品久久| 欧美性videosxxxxx| 日韩三级视频中文字幕| 久久网站最新地址| 综合电影一区二区三区| 性久久久久久久久久久久| 极品少妇一区二区| 波多野结衣中文一区| 欧美在线观看一二区| 日韩精品一区二区三区蜜臀| 欧美高清在线视频| 亚洲国产乱码最新视频| 久久99国产乱子伦精品免费| 成人精品小蝌蚪| 欧美男生操女生| 久久日一线二线三线suv| 成人欧美一区二区三区视频网页| 天天爽夜夜爽夜夜爽精品视频| 狠狠色综合色综合网络| 99久久99久久精品国产片果冻| 欧美丰满嫩嫩电影| 国产精品无码永久免费888| 亚洲高清久久久| 丁香婷婷综合网| 欧美日本视频在线| 国产精品网站在线观看| 午夜精品123| 国产成人免费视频网站高清观看视频| 在线视频你懂得一区| ww亚洲ww在线观看国产| 亚洲精品国产一区二区三区四区在线| 男男gaygay亚洲| 99国内精品久久| 精品毛片乱码1区2区3区| 亚洲视频中文字幕| 精品一区二区三区的国产在线播放| 99亚偷拍自图区亚洲| 日韩午夜电影在线观看| 亚洲天堂a在线| 男女性色大片免费观看一区二区| 91日韩一区二区三区| 久久久www成人免费无遮挡大片| 午夜激情综合网| 色综合天天综合网天天看片| 2020国产精品| 国产一区日韩二区欧美三区| 欧美色电影在线| 中文字幕一区二区视频| 国产精品综合在线视频| 欧美丰满嫩嫩电影| 亚洲精品欧美激情| av一区二区久久| 久久久无码精品亚洲日韩按摩| 日韩av电影天堂| 欧美性淫爽ww久久久久无| 中文字幕在线观看一区二区| 国产精品一区二区x88av| 欧美一区二区高清| 亚洲成人第一页| 91电影在线观看| 亚洲欧美日韩在线播放| 国产91精品久久久久久久网曝门| 日韩视频免费直播| 亚洲午夜久久久久中文字幕久| www.色精品| 国产精品女主播av| 国产成人精品免费看| 精品国产3级a| 久久成人免费电影| 欧美一区二区三区小说| 午夜精品国产更新| 欧美日韩国产一二三| 一区二区三区91| 欧美专区亚洲专区| 亚洲欧美日韩在线不卡| 91麻豆精品在线观看| 亚洲人成精品久久久久| 91亚洲精品久久久蜜桃| 亚洲人成在线播放网站岛国| av成人免费在线| 中文字幕一区二区三区在线观看| bt欧美亚洲午夜电影天堂| 国产午夜精品久久久久久久| 国产91对白在线观看九色| 国产日产欧美一区二区三区| 国产成人在线视频免费播放| 国产欧美日韩在线看| 北条麻妃一区二区三区| 中文字幕一区二区三区不卡在线 | 日本亚洲欧美天堂免费| 91精品国产丝袜白色高跟鞋| 亚洲午夜久久久久久久久电影院| 日本道精品一区二区三区| 一区二区三区在线观看视频| 欧美日韩情趣电影| 男女视频一区二区| 久久嫩草精品久久久久| 高清不卡在线观看av| 中文字幕在线不卡国产视频| 91污在线观看| 性感美女极品91精品| 精品国产一区二区三区四区四| 国产精品一区久久久久| 亚洲欧美综合网| 欧美综合在线视频| 日韩成人午夜精品| 久久综合色婷婷| 97超碰欧美中文字幕| 亚洲三级免费电影| 日韩一区二区中文字幕| 国产精品一区二区久激情瑜伽| 亚洲日本成人在线观看| 欧美日本不卡视频| 国产中文字幕一区| 亚洲私人影院在线观看| 3d成人h动漫网站入口| 国产激情偷乱视频一区二区三区| 亚洲欧洲日产国码二区| 91精品国产免费| 成人蜜臀av电影| 日本免费新一区视频| 国产日韩欧美制服另类| 欧美性色黄大片手机版| 久久99精品久久久久久| 日韩一区在线播放| 欧美一区二区成人6969| 成a人片国产精品| 丝袜脚交一区二区| 精品国产欧美一区二区| 日本高清不卡视频| 国内精品免费**视频| 亚洲最新在线观看| 欧美精品一区二区三区蜜桃视频| 成人听书哪个软件好| 亚洲一区二区视频| 国产欧美一区二区三区在线看蜜臀| 欧美视频在线一区二区三区 | 伊人夜夜躁av伊人久久| 精品久久国产97色综合| 色婷婷国产精品| 国产一区二区在线观看视频| 亚洲国产精品久久久久婷婷884| 日韩三级av在线播放| 91极品美女在线| 成人开心网精品视频| 精品一区二区av| 亚洲国产精品一区二区尤物区| 久久精品一区蜜桃臀影院| 一本大道久久a久久综合| 国产成人午夜精品影院观看视频 | 日韩在线a电影| 亚洲人妖av一区二区| 久久综合色婷婷| 欧美日韩国产小视频| 91女厕偷拍女厕偷拍高清| 国产激情一区二区三区| 狂野欧美性猛交blacked| 亚洲一二三四区不卡| 中文字幕一区二区三中文字幕| 精品国产露脸精彩对白| 欧美日韩国产综合久久| 日本久久电影网| www.亚洲色图.com| 国产精品原创巨作av| 精品一区二区成人精品| 日韩精品久久久久久| 亚洲高清免费观看高清完整版在线观看| 蜜桃av噜噜一区| 五月天久久比比资源色| 午夜欧美大尺度福利影院在线看| 中文字幕中文字幕一区| 亚洲国产岛国毛片在线|