2012-06-28 3 views
3

작은 스크립트 언어를 강조하고 있습니다.이 스크립트는 다른 구문 키워드와 관련하여 사용자 지정 XML 파일 설정을 사용했습니다.AvalonEdit (C#) XSHD 파일의 사용자 지정 속성

AvalonEdit에 존재하는 XSHD 시스템을 사용하여 사용자 지정 키워드를로드하고 싶습니다. 그러나 사용자 지정 특성이 있어야합니다.

그래서 기본적으로 소스 코드를 검색 한 후에 키워드와 규칙 집합을 읽고 지정하는 파일을 정확히 찾아 낼 수 없습니다.

여기있는 사람이 필요한 사용자 지정 특성을 읽고 저장하기 위해 필요한 클래스를 편집 할 수있는 위치를 알고 있습니까?

나는 AvalonEdit에있는 모든 XSHD와 higlighting 항목을 가지고 있기 때문에 문제는 아니며, XSHD 파일의 키워드 컬렉션에서 사용자 지정 특성을 사용하는 것이 더 문제가된다.

<Keywords> 
    <Word defaultValue="hello" requiresShader="shadertype1, shadertype2" someCustomAttr="value">wordname</word> 
</Keyword> 

그래서, 내가 이러한 사용자 지정 특성을로드하고 논리적 몇 가지를 처리 ​​내가 만든 사용자 정의 클래스에 저장하는 XSHD 파일의 파서에 일부 사용자 지정 속성을 설정해야합니다 예에서

내가하려고하는 것에 결정적인 요소들.

내 모든 키워드와 속성의 XML 파일을 구문 분석하는 작업 구문 분석기가 이미 있습니다 (단, ScintillaNET에 작성했지만 이후 AvalonEdit가 발견되어 WPF 등에서 더 잘 작동합니다).

이 정보로 원래 게시물을 수정합니다. 가능한 잘못된 정보에 대해 사과드립니다.

using ICSharpCode.AvalonEdit; 
using ICSharpCode.AvalonEdit.Highlighting; 
using ICSharpCode.AvalonEdit.Highlighting.Xshd;  

그리고 당신은 텍스트 편집기를 만들 때마다 다음 (첫 번째 줄을 생략하고 바로 문서 편집기 경우 참조 :

는 다음과 같은 라이브러리를 가져와야합니다, 당신은

답변

5

XSHD 파일을로드하려면 감사 XAML로 생성), 다음 코드를 사용하여 def.xshd를로드하십시오.

<SyntaxDefinition name="XAPL" 
    xmlns="http://icsharpcode.net/sharpdevelop/syntaxdefinition/2008"> 
<Color name="Comment" foreground="Green" /> 
<Color name="String" foreground="Pink" /> 
<Color name="Xml" foreground="Orange" /> 
<!-- This is the main ruleset. --> 
<RuleSet> 
    <Span color="Comment" begin="//" /> 
    <Span color="Comment" multiline="true" 
     begin="/\*" end="\*/" /> 


    <Span color="String"> 
     <Begin>"</Begin> 
     <End>"</End> 
     <RuleSet> 
      <!-- nested span for escape sequences --> 
      <Span begin="\\" end="." /> 
     </RuleSet> 
    </Span> 

    <Span color="Xml" multiline="false"> 
    <Begin>spaz</Begin> 
    <End>spaz</End> 
    </Span> 


    <Keywords fontWeight="bold" foreground="Blue"> 
     <Word>dealwith</Word> 
     <Word>import</Word> 
     <Word>end</Word> 
     <Word>var</Word> 
     <Word>default</Word> 
     <Word>template</Word> 
     <Word>sub</Word> 
     <Word>category</Word> 
     <Word>if</Word> 
     <Word>otherwise</Word> 
     <Word>and</Word> 
     <Word>xor</Word> 
     <Word>string</Word> 
     <Word>int</Word> 
     <Word>convert</Word> 
     <Word>to</Word> 
     <Word>escape</Word> 
     <Word>native</Word> 
     <Word>loop</Word> 
     <Word>is</Word> 
     <Word>to</Word> 
     <Word>from</Word> 
     <Word>by</Word> 
    </Keywords> 

    <!-- Digits --> 
    <Rule foreground="DarkGray"> 
     \b0[xX][0-9a-fA-F]+ # hex number 
    | \b 
     ( \d+(\.[0-9]+)? #number with optional floating point 
     | \.[0-9]+   #or just starting with floating point 
     ) 
     ([eE][+-]?[0-9]+)? # optional exponent 
    </Rule> 
</RuleSet> 
</SyntaxDefinition> 
+0

안녕하세요, 감사합니다 :

// TextEditor is an AvalonEdit.TextEditor TextEditor edit = new TextEditor(); XmlReader reader = XmlReader.Create("def.xshd"); edit.SyntaxHighlighting = HighlightingLoader.Load(reader, HighlightingManager.Instance); 

내가 작품에서 언어 사용하고 좋은 샘플 xshd 파일이입니다! 원래 게시물에 질문에 대한 수정 사항이 있는지 확인하십시오. 분명하지 않을 수 있습니다. –

+0

아, 네가하는 말은 ... 네가 전에 일한 것 이상이야. 내가 상상할 수있는 것에서부터, 나는 HighlightingLoder에서 파생 된 Load 클래스를 작성하고 Load 함수를 오버라이드한다. 하지만 그건별로 도움이되지 않습니다. –