本文整理匯總了C#中ScintillaNet.ScintillaControl.MBSafePosition方法的典型用法代碼示例。如果您正苦於以下問題:C# ScintillaControl.MBSafePosition方法的具體用法?C# ScintillaControl.MBSafePosition怎麽用?C# ScintillaControl.MBSafePosition使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類ScintillaNet.ScintillaControl
的用法示例。
在下文中一共展示了ScintillaControl.MBSafePosition方法的13個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。
示例1: ExecuteActionPoint
/// <summary>
/// Selects the text specified in the action point
/// </summary>
public static void ExecuteActionPoint(ActionPoint point, ScintillaControl sci)
{
if (point.EntryPosition != -1 && point.ExitPosition != -1)
{
Int32 start = sci.MBSafePosition(point.EntryPosition);
Int32 end = sci.MBSafePosition(point.ExitPosition);
sci.SetSel(start, end);
}
else if (point.EntryPosition != -1 && point.ExitPosition == -1)
{
Int32 start = sci.MBSafePosition(point.EntryPosition);
sci.SetSel(start, start);
}
}
示例2: SelectMatch
/// <summary>
/// Selects a search match
/// </summary>
public static void SelectMatch(ScintillaControl sci, SearchMatch match)
{
Int32 start = sci.MBSafePosition(match.Index); // wchar to byte position
Int32 end = start + sci.MBSafeTextLength(match.Value); // wchar to byte text length
Int32 line = sci.LineFromPosition(start);
sci.EnsureVisible(line);
sci.SetSel(start, end);
}
示例3: PostProcessSnippets
/// <summary>
/// Processes the snippet and template arguments
/// </summary>
public static Int32 PostProcessSnippets(ScintillaControl sci, Int32 currentPosition)
{
Int32 delta = 0;
while (sci.SelectText(BOUNDARY, 0) != -1) { sci.ReplaceSel(""); delta -= BOUNDARY.Length; }
String text = sci.Text; // Store text temporarily
Int32 entryPosition = sci.MBSafePosition(text.IndexOfOrdinal(ENTRYPOINT));
Int32 exitPosition = sci.MBSafePosition(text.IndexOfOrdinal(EXITPOINT));
if (entryPosition != -1 && exitPosition != -1)
{
sci.SelectText(ENTRYPOINT, 0); sci.ReplaceSel(""); delta -= ENTRYPOINT.Length;
sci.SelectText(EXITPOINT, 0); sci.ReplaceSel(""); delta -= EXITPOINT.Length;
sci.SetSel(entryPosition, exitPosition - ENTRYPOINT.Length);
}
else if (entryPosition != -1 && exitPosition == -1)
{
sci.SelectText(ENTRYPOINT, 0); sci.ReplaceSel(""); delta -= ENTRYPOINT.Length;
sci.SetSel(entryPosition, entryPosition);
}
else sci.SetSel(currentPosition, currentPosition);
return delta;
}
示例4: ReplaceMatches
/// <summary>
/// Replaces only the matches in the current sci control
/// </summary>
public static void ReplaceMatches(IList<SearchMatch> matches, ScintillaControl sci, String replacement, String src)
{
if (sci == null || matches == null || matches.Count == 0) return;
sci.BeginUndoAction();
try
{
for (Int32 i = 0; i < matches.Count; i++)
{
SelectMatch(sci, matches[i]);
FRSearch.PadIndexes((List<SearchMatch>)matches, i, matches[i].Value, replacement);
sci.EnsureVisible(sci.LineFromPosition(sci.MBSafePosition(matches[i].Index)));
sci.ReplaceSel(replacement);
}
}
finally
{
sci.EndUndoAction();
}
}
示例5: AddHighlights
/// <summary>
/// Adds highlights to the correct sci control
/// </summary>
private void AddHighlights(ScintillaControl sci, List<SearchMatch> matches)
{
ITabbedDocument doc = DocumentManager.FindDocument(sci);
Language language = MainForm.Instance.SciConfig.GetLanguage(sci.ConfigurationLanguage);
foreach (SearchMatch match in matches)
{
Int32 start = sci.MBSafePosition(match.Index);
Int32 end = start + sci.MBSafeTextLength(match.Value);
Int32 line = sci.LineFromPosition(start);
Int32 position = start;
Int32 es = sci.EndStyled;
Int32 mask = 1 << sci.StyleBits;
// Define indics in both controls...
doc.SplitSci1.SetIndicStyle(0, (Int32)ScintillaNet.Enums.IndicatorStyle.RoundBox);
doc.SplitSci1.SetIndicFore(0, language.editorstyle.HighlightBackColor);
doc.SplitSci2.SetIndicStyle(0, (Int32)ScintillaNet.Enums.IndicatorStyle.RoundBox);
doc.SplitSci2.SetIndicFore(0, language.editorstyle.HighlightBackColor);
sci.StartStyling(position, mask);
sci.SetStyling(end - start, mask);
sci.StartStyling(es, mask - 1);
}
}
示例6: MoveToPosition
/// <summary>
/// Move the document position
/// </summary>
private void MoveToPosition(ScintillaControl sci, Int32 position)
{
try
{
position = sci.MBSafePosition(position); // scintilla indexes are in 8bits
Int32 line = sci.LineFromPosition(position);
sci.EnsureVisible(line);
sci.GotoPos(position);
sci.SetSel(position, sci.LineEndPosition(line));
sci.Focus();
}
catch
{
String message = TextHelper.GetString("Info.InvalidItem");
ErrorManager.ShowInfo(message);
this.RemoveInvalidItems();
this.RefreshProject();
}
}
示例7: AddHighlight
/// <summary>
/// Highlight a regexp match group
/// </summary>
/// <param name="sci"></param>
/// <param name="matches"></param>
private void AddHighlight(ScintillaControl sci, SearchMatch match)
{
Int32 start = sci.MBSafePosition(match.Index); // wchar to byte position
Int32 end = start + sci.MBSafeTextLength(match.Value); // wchar to byte text length
Int32 line = sci.LineFromPosition(start);
Int32 position = start;
Int32 es = sci.EndStyled;
Int32 mask = 1 << sci.StyleBits;
sci.SetIndicStyle(0, (Int32)ScintillaNet.Enums.IndicatorStyle.Max);
sci.SetIndicFore(0, 0xff0000);
sci.StartStyling(position, mask);
sci.SetStyling(end - start, mask);
sci.StartStyling(es, mask - 1);
}
示例8: OnChar
//.........這裏部分代碼省略.........
{
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
{
indent = sci.GetLineIndentation(sci.LineFromPosition(ctag.Position)) + 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.Position = position - 2;
ctag.Closing = true;
}
else
{
ctag = GetXMLContextTag(sci, position);
if (ctag.Tag != null) return;
}
// Allow another plugin to handle this
de = new DataEvent(EventType.Command, "XMLCompletion.Element", ctag);
EventManager.DispatchEvent(PluginBase.MainForm, de);
if (de.Handled) return;
示例9: DoesMatchPointToTarget
/// <summary>
/// Checks if a given search match actually points to the given target source
/// </summary>
/// <returns>True if the SearchMatch does point to the target source.</returns>
public static bool DoesMatchPointToTarget(ScintillaControl Sci, SearchMatch match, ASResult target, DocumentHelper associatedDocumentHelper)
{
if (Sci == null || target == null) return false;
FileModel targetInFile = null;
if (target.InFile != null)
targetInFile = target.InFile;
else if (target.Member != null && target.InClass == null)
targetInFile = target.Member.InFile;
Boolean matchMember = targetInFile != null && target.Member != null;
Boolean matchType = target.Member == null && target.IsStatic && target.Type != null;
if (!matchMember && !matchType) return false;
ASResult result = null;
// get type at match position
if (match.Index < Sci.Text.Length) // TODO: find out rare cases of incorrect index reported
{
result = DeclarationLookupResult(Sci, Sci.MBSafePosition(match.Index) + Sci.MBSafeTextLength(match.Value));
if (associatedDocumentHelper != null)
{
// because the declaration lookup opens a document, we should register it with the document helper to be closed later
associatedDocumentHelper.RegisterLoadedDocument(PluginBase.MainForm.CurrentDocument);
}
}
// check if the result matches the target
if (result == null || (result.InFile == null && result.Type == null)) return false;
if (matchMember)
{
if (result.Member == null) return false;
var resultInFile = result.InClass != null ? result.InFile : result.Member.InFile;
return resultInFile.BasePath == targetInFile.BasePath
&& resultInFile.FileName == targetInFile.FileName
&& result.Member.LineFrom == target.Member.LineFrom
&& result.Member.Name == target.Member.Name;
}
else // type
{
if (result.Type == null) return false;
if (result.Type.QualifiedName == target.Type.QualifiedName) return true;
return false;
}
}
示例10: IsMatchTheTarget
/// <summary>
/// Checks if the given match actually is the declaration.
/// </summary>
public static bool IsMatchTheTarget(ScintillaControl Sci, SearchMatch match, ASResult target)
{
if (Sci == null || target == null || target.InFile == null || target.Member == null)
{
return false;
}
String originalFile = Sci.FileName;
// get type at match position
ASResult declaration = DeclarationLookupResult(Sci, Sci.MBSafePosition(match.Index) + Sci.MBSafeTextLength(match.Value));
return (declaration.InFile != null && originalFile == declaration.InFile.FileName) && (Sci.CurrentPos == (Sci.MBSafePosition(match.Index) + Sci.MBSafeTextLength(match.Value)));
}
示例11: AddHighlights
/// <summary>
/// Adds highlights to the correct sci control
/// </summary>
private void AddHighlights(ScintillaControl sci, List<SearchMatch> matches)
{
if (matches == null)
{
return;
}
foreach (SearchMatch match in matches)
{
Int32 start = sci.MBSafePosition(match.Index);
Int32 end = start + sci.MBSafeTextLength(match.Value);
Int32 line = sci.LineFromPosition(start);
Int32 position = start;
Int32 es = sci.EndStyled;
Int32 mask = 1 << sci.StyleBits;
sci.SetIndicStyle(0, (Int32)ScintillaNet.Enums.IndicatorStyle.RoundBox);
sci.SetIndicFore(0, DataConverter.ColorToInt32(this.settingObject.highlightColor));
sci.StartStyling(position, mask);
sci.SetStyling(end - start, mask);
sci.StartStyling(es, mask - 1);
if (this.settingObject.addLineMarker)
{
sci.MarkerAdd(line, 2);
sci.MarkerSetBack(2, DataConverter.ColorToInt32(this.settingObject.highlightColor));
}
}
}
示例12: FilterResults
/// <summary>
/// TODO slavara: IMPLEMENT ME
/// </summary>
/// <param name="matches"></param>
/// <param name="exprType"></param>
/// <param name="sci"></param>
/// <returns></returns>
private List<SearchMatch> FilterResults(List<SearchMatch> matches, ASResult exprType, ScintillaControl sci)
{
if (matches == null || matches.Count == 0) return null;
MemberModel contextMember = null;
int lineFrom = 0;
int lineTo = sci.LineCount;
FlagType localVarMask = FlagType.LocalVar | FlagType.ParameterVar;
bool isLocalVar = false;
if (exprType.Member != null)
{
if ((exprType.Member.Flags & localVarMask) > 0)
{
contextMember = exprType.Context.ContextFunction;
lineFrom = contextMember.LineFrom;
lineTo = contextMember.LineTo;
isLocalVar = true;
}
}
List<SearchMatch> newMatches = new List<SearchMatch>();
foreach (SearchMatch m in matches)
{
if (m.Line < lineFrom || m.Line > lineTo) continue;
int pos = sci.MBSafePosition(m.Index);
exprType = ASComplete.GetExpressionType(sci, sci.WordEndPosition(pos, true));
if (exprType != null)
{
MemberModel member = exprType.Member;
if (!isLocalVar)
{
if ((exprType.Type != null && member == null) || (member != null && (member.Flags & localVarMask) == 0)) newMatches.Add(m);
}
else if (member != null && (member.Flags & localVarMask) > 0) newMatches.Add(m);
}
}
return newMatches;
}
示例13: AddHighlights
/// <summary>
/// Adds highlights to the correct sci control
/// </summary>
private void AddHighlights(ScintillaControl sci, List<SearchMatch> matches)
{
if (matches == null) return;
int style = (int)settings.HighlightStyle;
int color = DataConverter.ColorToInt32(settings.HighlightColor);
if (settings.HighlightUnderCursorEnabled && prevResult != null)
{
if (prevResult.IsPackage) color = DataConverter.ColorToInt32(settings.PackageColor);
else
{
FlagType flags;
if (prevResult.Type != null && prevResult.Member == null)
{
flags = prevResult.Type.Flags;
if ((flags & FlagType.Abstract) > 0) color = DataConverter.ColorToInt32(settings.AbstractColor);
else if ((flags & FlagType.TypeDef) > 0) color = DataConverter.ColorToInt32(settings.TypeDefColor);
else if ((flags & FlagType.Enum) > 0) color = DataConverter.ColorToInt32(settings.EnumColor);
else if ((flags & FlagType.Class) > 0) color = DataConverter.ColorToInt32(settings.ClassColor);
}
else if (prevResult.Member != null)
{
flags = prevResult.Member.Flags;
if ((flags & FlagType.Constant) > 0) color = DataConverter.ColorToInt32(settings.ConstantColor);
else if ((flags & FlagType.ParameterVar) > 0) color = DataConverter.ColorToInt32(settings.MemberFunctionColor);
else if ((flags & FlagType.LocalVar) > 0) color = DataConverter.ColorToInt32(settings.LocalVariableColor);
else if ((flags & FlagType.Static) == 0)
{
if ((flags & FlagType.Variable) > 0) color = DataConverter.ColorToInt32(settings.VariableColor);
else if ((flags & (FlagType.Setter | FlagType.Getter)) > 0) color = DataConverter.ColorToInt32(settings.AccessorColor);
else if ((flags & FlagType.Function) > 0) color = DataConverter.ColorToInt32(settings.MethodColor);
}
else
{
if ((flags & FlagType.Variable) > 0) color = DataConverter.ColorToInt32(settings.StaticVariableColor);
else if ((flags & (FlagType.Setter | FlagType.Getter)) > 0) color = DataConverter.ColorToInt32(settings.StaticAccessorColor);
else if ((flags & FlagType.Function) > 0) color = DataConverter.ColorToInt32(settings.StaticMethodColor);
}
}
}
}
int es = sci.EndStyled;
int mask = 1 << sci.StyleBits;
bool addLineMarker = settings.AddLineMarker;
foreach (SearchMatch match in matches)
{
int start = sci.MBSafePosition(match.Index);
int end = start + sci.MBSafeTextLength(match.Value);
int line = sci.LineFromPosition(start);
int position = start;
sci.SetIndicStyle(0, style);
sci.SetIndicFore(0, color);
sci.StartStyling(position, mask);
sci.SetStyling(end - start, mask);
sci.StartStyling(es, mask - 1);
if (addLineMarker)
{
sci.MarkerAdd(line, MARKER_NUMBER);
sci.MarkerSetBack(MARKER_NUMBER, color);
}
}
prevPos = sci.CurrentPos;
}