2014-01-31 1 views
2

현재 현재 프로젝트에 대해 CodeMirror에 새 언어 모드를 추가 중입니다. 이것은 사용자가 새 키워드를 만들 수있는 독점적 인 언어입니다. 기본적으로 런타임에 기존 키워드 목록을 업데이트하려고하고 구문 하이 라이터가이 새 키워드를 선택할 수 있습니다.구문 하이라이트를 위해 즉시 키워드를 추가하는 Codemirror

var mode = editor.doc.modeOption; 
     if(mode === "dmsrl") mode = "text/dmsrl"; 
     var keyWords = CodeMirror.resolveMode(mode).keywords; 
     keyWords[x]=true; 

나는 현재 위와 같이 새로운 키워드를 추가하려고하지만, 어떻게 든 목록이 업데이트 점점되지 않고 새 키워드 내 tokebase() 메소드에서 사용할 수 없습니다.

도움을 주시면 감사하겠습니다.

답변

0

Codemirror의 init 함수로 전달되는 hintOptions 객체를 다시 정의하고이 데이터로 특정 힌트 애드온에 힌트를 빌드 할 수 있습니다. 나는이 같은 목표를 달성하기 위해 원이 무거운 작업

0

없는 SQL 모드에 대한

cm.setOption("hintOptions", { "tables" : ["k1", "k2"] }); 

: 그냥 예를 들어 SQL-힌트에 처음이

cm.setOption("hintOptions", { "keywords" : ["k1", "k2"] }); 

봐 (link를) 시도 당신의 것이지만 더 자유도가있는 컨테이너를 입력하는 것으로 구성되어 있습니다. 컨테이너를 입력하면 실행 중에 다시 정의 할 수 있습니다.

1) 파일 custom.mode.js에 다음 코드를 넣어 웹 페이지

var _glob_keywords = [ [ "key1", "keyword1" ], 
         [ "key2", "keyword2" ] 
        ] ; 

var cm_custom_check_stream_fn = function(stream) 
{ 
    for(var _i = 0 ; _i < _glob_keywords.length ; _i++) 
    { 
     if (stream.match(_glob_keywords[_i][0])) return _glob_keywords[_i][1] ; 
    } 
    return "" ; 
} 

CodeMirror.defineMode("custom.mode", function() 
{ 
    return { 
    token: function(stream,state) 
      { 
       var _ret = cm_custom_check_stream_fn(stream) ; 
       if (_ret.length > 0) return _ret ; 
       else { stream.next(); return null; } 
      } 
      }; 
}); 

이 코드는 자동으로 동적으로의 입력을 처리하기 위해 Codemirror 객체에 포함됩니다에서로드 할 텍스트 상자. 예 : "key1"이 있으면 "keyword1"이 반환됩니다.

우리는 codemirror 문서에 설명 된대로 "KEYWORD1가", "KEYWORD2"사용자 정의 CSS 정의 파일 내부의 항목을 참조한다고 가정, 그

.cm-keyword1 { color:#8BA8C4; } 
.cm-keyword2 { color:lime; } 

가 도움이 희망입니다!

관련 문제