本文整理汇总了C#中ScintillaNet.ScintillaControl.SetLineIndentation方法的典型用法代码示例。如果您正苦于以下问题:C# ScintillaControl.SetLineIndentation方法的具体用法?C# ScintillaControl.SetLineIndentation怎么用?C# ScintillaControl.SetLineIndentation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ScintillaNet.ScintillaControl
的用法示例。
在下文中一共展示了ScintillaControl.SetLineIndentation方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetOrSetPointOfInsertion
/// <summary>
/// Looks for the best next position to insert new code, inserting new lines if needed
/// </summary>
/// <param name="startPos">The position inside the Scintilla document to start looking for the insertion position</param>
/// <param name="endPos">The end position inside the Scintilla document</param>
/// <param name="baseLine">The line inside the document to use as the base for the indentation level and detect if the desired point
/// matches the end line</param>
/// <param name="sci">The ScintillaControl where our document resides</param>
/// <returns>The insertion point position</returns>
private static int GetOrSetPointOfInsertion(int startPos, int endPos, int baseLine, ScintillaControl sci)
{
char[] characterClass = { ' ', '\r', '\n', '\t' };
int nCount = 0;
int extraLine = 1;
int initialLn = sci.LineFromPosition(startPos);
int baseIndent = sci.GetLineIndentation(baseLine);
bool found = false;
while (startPos <= endPos)
{
char c = (char)sci.CharAt(startPos);
if (Array.IndexOf(characterClass, c) == -1)
{
int endLn = sci.LineFromPosition(startPos);
if (endLn == baseLine || endLn == initialLn)
{
sci.InsertText(startPos, sci.NewLineMarker);
// Do we want to set the line indentation no matter what? {\r\t\t\t\r} -> {\r\t\r}
// Better results in most cases, but maybe highly unwanted in others?
sci.SetLineIndentation(++endLn, baseIndent + sci.Indent);
startPos = sci.LineIndentPosition(endLn);
}
if (c == '}')
{
sci.InsertText(startPos, sci.NewLineMarker);
sci.SetLineIndentation(endLn + 1, baseIndent);
// In relation with previous comment... we'll reinden this one: {\r} -> {\r\t\r}
if (sci.GetLineIndentation(endLn) <= baseIndent)
{
sci.SetLineIndentation(endLn, baseIndent + sci.Indent);
startPos = sci.LineIndentPosition(endLn);
}
}
found = true;
break;
}
else if (sci.EOLMode == 1 && c == '\r' && (++nCount) > extraLine)
{
found = true;
break;
}
else if (c == '\n' && (++nCount) > extraLine)
{
if (sci.EOLMode != 2)
{
startPos--;
}
found = true;
break;
}
startPos++;
}
if (!found) startPos--;
return startPos;
}
示例2: GenerateExtractMethod
public static void GenerateExtractMethod(ScintillaControl Sci, string NewName)
{
FileModel cFile;
IASContext context = ASContext.Context;
string selection = Sci.SelText;
if (string.IsNullOrEmpty(selection))
{
return;
}
if (selection.TrimStart().Length == 0)
{
return;
}
Sci.SetSel(Sci.SelectionStart + selection.Length - selection.TrimStart().Length,
Sci.SelectionEnd);
Sci.CurrentPos = Sci.SelectionEnd;
int lineStart = Sci.LineFromPosition(Sci.SelectionStart);
int lineEnd = Sci.LineFromPosition(Sci.SelectionEnd);
int firstLineIndent = Sci.GetLineIndentation(lineStart);
int entryPointIndent = Sci.Indent;
for (int i = lineStart; i <= lineEnd; i++)
{
int indent = Sci.GetLineIndentation(i);
if (i > lineStart)
{
Sci.SetLineIndentation(i, indent - firstLineIndent + entryPointIndent);
}
}
string selText = Sci.SelText;
string template = TemplateUtils.GetTemplate("CallFunction");
template = TemplateUtils.ReplaceTemplateVariable(template, "Name", NewName);
template = TemplateUtils.ReplaceTemplateVariable(template, "Arguments", "");
InsertCode(Sci.CurrentPos, template + ";", Sci);
cFile = ASContext.Context.CurrentModel;
ASFileParser parser = new ASFileParser();
parser.ParseSrc(cFile, Sci.Text);
FoundDeclaration found = GetDeclarationAtLine(Sci, lineStart);
if (found == null || found.member == null)
{
return;
}
lookupPosition = Sci.CurrentPos;
AddLookupPosition();
MemberModel latest = TemplateUtils.GetTemplateBlockMember(Sci, TemplateUtils.GetBoundary("PrivateMethods"));
if (latest == null)
latest = GetLatestMemberForFunction(found.inClass, GetDefaultVisibility(found.inClass), found.member);
if (latest == null)
latest = found.member;
int position = Sci.PositionFromLine(latest.LineTo + 1) - ((Sci.EOLMode == 0) ? 2 : 1);
Sci.SetSel(position, position);
FlagType flags = FlagType.Function;
if ((found.member.Flags & FlagType.Static) > 0)
{
flags |= FlagType.Static;
}
MemberModel m = new MemberModel(NewName, context.Features.voidKey, flags, GetDefaultVisibility(found.inClass));
template = NewLine + TemplateUtils.GetTemplate("Function");
template = TemplateUtils.ToDeclarationWithModifiersString(m, template);
template = TemplateUtils.ReplaceTemplateVariable(template, "Body", selText);
template = TemplateUtils.ReplaceTemplateVariable(template, "BlankLine", NewLine);
InsertCode(position, template, Sci);
}
示例3: AutoCloseBrace
/// <summary>
/// Add closing brace to a code block.
/// If enabled, move the starting brace to a new line.
/// </summary>
/// <param name="Sci"></param>
/// <param name="txt"></param>
/// <param name="line"></param>
public static void AutoCloseBrace(ScintillaControl Sci, int line)
{
// find matching brace
int bracePos = Sci.LineEndPosition(line - 1) - 1;
while ((bracePos > 0) && (Sci.CharAt(bracePos) != '{')) bracePos--;
if (bracePos == 0 || Sci.BaseStyleAt(bracePos) != 5) return;
int match = Sci.SafeBraceMatch(bracePos);
int start = line;
int indent = Sci.GetLineIndentation(start - 1);
if (match > 0)
{
int endIndent = Sci.GetLineIndentation(Sci.LineFromPosition(match));
if (endIndent + Sci.TabWidth > indent)
return;
}
// find where to include the closing brace
int startIndent = indent;
int count = Sci.LineCount;
int lastLine = line;
int position;
string txt = Sci.GetLine(line).Trim();
line++;
int eolMode = Sci.EOLMode;
string NL = LineEndDetector.GetNewLineMarker(eolMode);
if (txt.Length > 0 && ")]};,".IndexOf(txt[0]) >= 0)
{
Sci.BeginUndoAction();
try
{
position = Sci.CurrentPos;
Sci.InsertText(position, NL + "}");
Sci.SetLineIndentation(line, startIndent);
}
finally
{
Sci.EndUndoAction();
}
return;
}
else
{
while (line < count - 1)
{
txt = Sci.GetLine(line).TrimEnd();
if (txt.Length != 0)
{
indent = Sci.GetLineIndentation(line);
if (indent <= startIndent) break;
lastLine = line;
}
else break;
line++;
}
}
if (line >= count - 1) lastLine = start;
// insert closing brace
Sci.BeginUndoAction();
try
{
position = Sci.LineEndPosition(lastLine);
Sci.InsertText(position, NL + "}");
Sci.SetLineIndentation(lastLine + 1, startIndent);
}
finally
{
Sci.EndUndoAction();
}
}
示例4: OnChar
//.........这里部分代码省略.........
}
}
}
if (tmpTags.Count > 0)
indent = sci.GetLineIndentation(sci.LineFromPosition(tmpTags.Pop().Position));
else if (tmpTag.Name != null)
{
subIndent = true;
checkStart = "</" + tmpTag.Name;
indent = sci.GetLineIndentation(sci.LineFromPosition(tmpTag.Position));
}
else
{
indent = sci.GetLineIndentation(sci.LineFromPosition(tmpTag.Position));
}
}
}
else if (ctag.Name != null)
{
// Indentation. Some IDEs use the tag position, VS uses the tag start line indentation.
indent = sci.GetLineIndentation(sci.LineFromPosition(ctag.Position));
checkStart = "</" + ctag.Name;
if (ctag.Name.ToLower() == "script" || ctag.Name.ToLower() == "style")
subIndent = false;
}
try
{
sci.BeginUndoAction();
if (checkStart != null)
{
text = sci.GetLine(line).TrimStart();
if (text.StartsWith(checkStart))
{
sci.SetLineIndentation(line, indent);
sci.InsertText(sci.PositionFromLine(line), LineEndDetector.GetNewLineMarker(sci.EOLMode));
}
}
// Indent the code
if (subIndent) indent += sci.Indent;
sci.SetLineIndentation(line, indent);
position = sci.LineIndentPosition(line);
sci.SetSel(position, position);
}
finally { sci.EndUndoAction(); }
return;
}
else if (!text.EndsWith(">"))
{
ctag = GetXMLContextTag(sci, sci.CurrentPos);
if (ctag.Tag == null || ctag.Name == null) return;
// We're inside a tag. Visual Studio indents with regards to the first line, other IDEs indent using the indentation of the last line with text.
int indent;
string tag = (ctag.Tag.IndexOf('\r') > 0 || ctag.Tag.IndexOf('\n') > 0) ? ctag.Tag.Substring(0, ctag.Tag.IndexOfAny(new[] {'\r', '\n'})).TrimEnd() : ctag.Tag.TrimEnd();
if (tag.EndsWith("\""))
{
int i;
int l = tag.Length;
for (i = ctag.Name.Length + 1; i < l; i++)
{
if (!char.IsWhiteSpace(tag[i]))
break;
}
indent = sci.Column(ctag.Position) + sci.MBSafePosition(i);
}
else
{
示例5: OnChar
/// <summary>
/// Handles the incoming character
/// </summary>
public static void OnChar(ScintillaControl sci, Int32 value)
{
if (cType == XMLType.Invalid || (sci.ConfigurationLanguage != "xml" && sci.ConfigurationLanguage != "html"))
return;
XMLContextTag ctag;
Int32 position = sci.CurrentPos;
if (sci.BaseStyleAt(position) == 6 && value != '"')
return; // in XML attribute
Char c = ' ';
DataEvent de;
switch (value)
{
case 10:
// Shift+Enter to insert <BR/>
Int32 line = sci.LineFromPosition(position);
if (Control.ModifierKeys == Keys.Shift)
{
ctag = GetXMLContextTag(sci, position);
if (ctag.Tag == null || ctag.Tag.EndsWith(">"))
{
int start = sci.PositionFromLine(line)-((sci.EOLMode == 0)? 2:1);
sci.SetSel(start, position);
sci.ReplaceSel((PluginSettings.UpperCaseHtmlTags) ? "<BR/>" : "<br/>");
sci.SetSel(start+5, start+5);
return;
}
}
if (PluginSettings.SmartIndenter)
{
// Get last non-empty line
String text = "";
Int32 line2 = line - 1;
while (line2 >= 0 && text.Length == 0)
{
text = sci.GetLine(line2).TrimEnd();
line2--;
}
if ((text.EndsWith(">") && !text.EndsWith("?>") && !text.EndsWith("%>") && !closingTag.IsMatch(text)) || text.EndsWith("<!--") || text.EndsWith("<![CDATA["))
{
// Get the previous tag
do
{
position--;
c = (Char)sci.CharAt(position);
}
while (position > 0 && c != '>');
ctag = GetXMLContextTag(sci, c == '>' ? position + 1 : position);
if ((Char)sci.CharAt(position-1) == '/') return;
// Insert blank line if we pressed Enter between a tag & it's closing tag
Int32 indent = sci.GetLineIndentation(line2 + 1);
String checkStart = null;
bool subIndent = true;
if (text.EndsWith("<!--")) { checkStart = "-->"; subIndent = false; }
else if (text.EndsWith("<![CDATA[")) { checkStart = "]]>"; subIndent = false; }
else if (ctag.Closed) subIndent = false;
else if (ctag.Name != null)
{
checkStart = "</" + ctag.Name;
if (ctag.Name.ToLower() == "script" || ctag.Name.ToLower() == "style")
subIndent = false;
if (ctag.Tag.IndexOf('\r') > 0 || ctag.Tag.IndexOf('\n') > 0)
subIndent = false;
}
if (checkStart != null)
{
text = sci.GetLine(line).TrimStart();
if (text.StartsWith(checkStart))
{
sci.SetLineIndentation(line, indent);
sci.InsertText(sci.PositionFromLine(line), LineEndDetector.GetNewLineMarker(sci.EOLMode));
}
}
// Indent the code
if (subIndent) indent += sci.Indent;
sci.SetLineIndentation(line, indent);
position = sci.LineIndentPosition(line);
sci.SetSel(position, position);
return;
}
}
break;
case '<':
case '/':
if (value == '/')
{
if ((position < 2) || ((Char)sci.CharAt(position-2) != '<')) return;
ctag = new XMLContextTag();
ctag.Closing = true;
}
else
{
ctag = GetXMLContextTag(sci, position);
if (ctag.Tag != null) return;
}
// Allow another plugin to handle this
//.........这里部分代码省略.........
示例6: InsertSnippetText
/// <summary>
/// Inserts the specified snippet to the document
/// </summary>
public static Int32 InsertSnippetText(ScintillaControl sci, Int32 currentPosition, String snippet)
{
sci.BeginUndoAction();
try
{
Int32 newIndent;
String text = snippet;
if (sci.SelTextSize > 0)
currentPosition -= sci.MBSafeTextLength(sci.SelText);
Int32 line = sci.LineFromPosition(currentPosition);
Int32 indent = sci.GetLineIndentation(line);
sci.ReplaceSel("");
Int32 lineMarker = LineEndDetector.DetectNewLineMarker(text, sci.EOLMode);
String newline = LineEndDetector.GetNewLineMarker(lineMarker);
if (newline != "\n") text = text.Replace(newline, "\n");
newline = LineEndDetector.GetNewLineMarker((Int32)PluginBase.MainForm.Settings.EOLMode);
text = PluginBase.MainForm.ProcessArgString(text).Replace(newline, "\n");
newline = LineEndDetector.GetNewLineMarker(sci.EOLMode);
String[] splitted = text.Trim().Split('\n');
for (Int32 j = 0; j < splitted.Length; j++)
{
if (j != splitted.Length - 1) sci.InsertText(sci.CurrentPos, splitted[j] + newline);
else sci.InsertText(sci.CurrentPos, splitted[j]);
sci.CurrentPos += sci.MBSafeTextLength(splitted[j]) + newline.Length;
if (j > 0)
{
line = sci.LineFromPosition(sci.CurrentPos - newline.Length);
newIndent = sci.GetLineIndentation(line) + indent;
sci.SetLineIndentation(line, newIndent);
}
}
Int32 length = sci.CurrentPos - currentPosition - newline.Length;
Int32 delta = PostProcessSnippets(sci, currentPosition);
return length + delta;
}
finally
{
sci.EndUndoAction();
}
}
示例7: Execute
public void Execute()
{
Sci = PluginBase.MainForm.CurrentDocument.SciControl;
Sci.BeginUndoAction();
try
{
IASContext context = ASContext.Context;
string selection = Sci.SelText;
if (selection == null || selection.Length == 0)
{
return;
}
if (selection.TrimStart().Length == 0)
{
return;
}
Sci.SetSel(Sci.SelectionStart + selection.Length - selection.TrimStart().Length,
Sci.SelectionEnd);
Sci.CurrentPos = Sci.SelectionEnd;
Int32 pos = Sci.CurrentPos;
int lineStart = Sci.LineFromPosition(Sci.SelectionStart);
int lineEnd = Sci.LineFromPosition(Sci.SelectionEnd);
int firstLineIndent = Sci.GetLineIndentation(lineStart);
int entryPointIndent = Sci.Indent;
for (int i = lineStart; i <= lineEnd; i++)
{
int indent = Sci.GetLineIndentation(i);
if (i > lineStart)
{
Sci.SetLineIndentation(i, indent - firstLineIndent + entryPointIndent);
}
}
string selText = Sci.SelText;
Sci.ReplaceSel(NewName + "();");
cFile = ASContext.Context.CurrentModel;
ASFileParser parser = new ASFileParser();
parser.ParseSrc(cFile, Sci.Text);
bool isAs3 = cFile.Context.Settings.LanguageId == "AS3";
FoundDeclaration found = GetDeclarationAtLine(Sci, lineStart);
if (found == null || found.member == null)
{
return;
}
int position = Sci.PositionFromLine(found.member.LineTo + 1) - ((Sci.EOLMode == 0) ? 2 : 1);
Sci.SetSel(position, position);
StringBuilder sb = new StringBuilder();
sb.Append("$(Boundary)\n\n");
if ((found.member.Flags & FlagType.Static) > 0)
{
sb.Append("static ");
}
sb.Append(ASGenerator.GetPrivateKeyword());
sb.Append(" function ");
sb.Append(NewName);
sb.Append("():");
sb.Append(isAs3 ? "void " : "Void ");
sb.Append("$(CSLB){\n\t");
sb.Append(selText);
sb.Append("$(EntryPoint)");
sb.Append("\n}\n$(Boundary)");
ASGenerator.InsertCode(position, sb.ToString());
}
finally
{
Sci.EndUndoAction();
}
}
示例8: OnChar
static public void OnChar(ScintillaControl sci, int value)
{
if (cType == XMLType.Invalid)
return;
XMLContextTag ctag;
int position = sci.CurrentPos;
char c = ' ';
switch (value)
{
case 10:
int line = sci.LineFromPosition(position);
// Shift+Enter to insert <BR/>
if (Control.ModifierKeys == Keys.Shift)
{
ctag = GetXMLContextTag(sci, position);
if (ctag.Tag == null || ctag.Tag.EndsWith(">"))
{
int start = sci.PositionFromLine(line)-((sci.EOLMode == 0)? 2:1);
sci.SetSel(start, position);
sci.ReplaceSel((lowerCaseHtmlTags)?"<br/>":"<BR/>");
sci.SetSel(start+5, start+5);
return;
}
}
if (autoIndent)
{
// get last non-empty line
string text = "";
int line2 = line-1;
while (line2 >= 0 && text.Length == 0)
{
text = sci.GetLine(line2).TrimEnd();
line2--;
}
if ((text.EndsWith(">") && !text.EndsWith("?>") && !text.EndsWith("%>") && !re_closingTag.IsMatch(text))
|| text.EndsWith("<!--") || text.EndsWith("<![CDATA["))
{
// get the previous tag
do {
position--;
c = (char)sci.CharAt(position);
}
while (position > 0 && c != '>');
ctag = GetXMLContextTag(sci, position);
if ((char)sci.CharAt(position-1) == '/')
return;
// insert blank line if we pressed Enter between a tag & it's closing tag
int indent = sci.GetLineIndentation(line2+1);
string checkStart = null;
if (text.EndsWith("<!--")) checkStart = "-->";
else if (text.EndsWith("<![CDATA[")) checkStart = "]]>";
else if (ctag.Name != null) checkStart = "</"+ctag.Name;
if (checkStart != null)
{
text = sci.GetLine(line).TrimStart();
if (text.StartsWith(checkStart))
{
sci.SetLineIndentation(line, indent);
sci.InsertText(sci.PositionFromLine(line), mainForm.GetNewLineMarker(sci.EOLMode));
}
}
// indent
sci.SetLineIndentation(line, indent+sci.Indent);
position = sci.LineIndentPosition(line);
sci.SetSel(position, position);
return;
}
}
break;
case '<':
case '/':
if (value == '/')
{
if ((position < 2) || ((char)sci.CharAt(position-2) != '<'))
return;
}
else
{
ctag = GetXMLContextTag(sci, position);
if (ctag.Tag != null)
return;
}
// new tag
if (enableHtmlCompletion && cType == XMLType.Known)
{
ArrayList items = new ArrayList();
string previous = null;
foreach(HTMLTag tag in knownTags)
if (tag.Name != previous) {
items.Add( new HtmlTagItem(tag.Name, tag.Tag) );
previous = tag.Name;
}
CompletionList.Show(items, true);
//.........这里部分代码省略.........
示例9: GetBodyStart
public static int GetBodyStart(int lineFrom, int lineTo, ScintillaControl Sci, int pos)
{
int posStart = Sci.PositionFromLine(lineFrom);
int posEnd = Sci.LineEndPosition(lineTo);
Sci.SetSel(posStart, posEnd);
List<char> characterClass = new List<char>(new char[] { ' ', '\r', '\n', '\t' });
string currentMethodBody = Sci.SelText;
int nCount = 0;
int funcBodyStart = pos;
int extraLine = 0;
if (pos == -1)
{
funcBodyStart = posStart + currentMethodBody.IndexOf('{');
extraLine = 1;
}
while (funcBodyStart <= posEnd)
{
char c = (char)Sci.CharAt(++funcBodyStart);
if (c == '}')
{
int ln = Sci.LineFromPosition(funcBodyStart);
int indent = Sci.GetLineIndentation(ln);
if (lineFrom == lineTo || lineFrom == ln)
{
Sci.InsertText(funcBodyStart, Sci.NewLineMarker);
Sci.SetLineIndentation(ln + 1, indent);
ln++;
}
Sci.SetLineIndentation(ln, indent + Sci.Indent);
Sci.InsertText(funcBodyStart, Sci.NewLineMarker);
Sci.SetLineIndentation(ln + 1, indent);
Sci.SetLineIndentation(ln, indent + Sci.Indent);
funcBodyStart = Sci.LineEndPosition(ln);
break;
}
else if (!characterClass.Contains(c))
{
break;
}
else if (Sci.EOLMode == 1 && c == '\r' && (++nCount) > extraLine)
{
break;
}
else if (c == '\n' && (++nCount) > extraLine)
{
if (Sci.EOLMode != 2)
{
funcBodyStart--;
}
break;
}
}
return funcBodyStart;
}