2013-04-13 2 views
0

코드를 한 번에 1 문자 씩 구문 분석하고 상태 전환을 기반으로 스타일을 출력하는 CodeMirror 용 컨텍스트없는 파서를 작성했습니다. 이 코드는 줄 바꿈 문자 \ n을 사용하여 상태 전환을 트리거하지만 CodeMirror는 입력 텍스트에서이를 제거합니다 (console.log (char === '\ n')은 항상 false를 반환합니다)CodeMirror의 개행 문자

Is 거기에 어쨌든 CodeMirror가 입력으로 \ n을 제공하도록 구성 할 수 있습니까? 설명서에이 문제는 언급되지 않았습니다.

내 상태 개체는 다음과 같이 포맷

{ 
    state1: { 
     active: true, 
     edges: { 
      '\n': 'state2' 
     } 
    }, 
    state2: { 
     active: false, 
     edges: { 
      '#': 'state1' 
     } 
    } 
} 

추가 정보 나 설명이 필요한 경우 나

답변

2

console.log (char === '\n') 항상 반드시 CodeMirror는 개행 문자를 제거합니다 것을 의미하지 않는다 false를 반환 갖는 알려 - 텍스트를 즉, \n\n의 두 문자로 전달됩니다. 뿐만 아니라 \n 어떤 순서로 작업하기 위해 당신은 또한 접근 방식을 일반화 할 수

var newLine = '\\n'; 

token : function(stream) { 

    var next = stream.next(); 
    var tokenName = null; 

    if ('\\' === next) { 
     var match = stream.match(new RegExp(newLine.charAt(1))); 
     match && (tokenName = 'some-style' || null); 
    } 
    return tokenName; 
} 

:

var sequence = 'some-sequence'; 

token : function(stream) { 

    var next = stream.next(); 
    var tokenName = null; 

    var ch = sequence.charAt(0); 
    // search for the first letter 
    if (next === ch) { 
     // try to match the rest of the sequence 
     var match = stream.match(new RegExp(sequence.substring(1))); 
     match && (tokenName = 'some-style' || null); 
    } 
    return tokenName; 
} 

시험 후 스트림에 \n을 감지하여 모드에서 token 방법을 이용 이것은 테스트되지 않았지만 트릭을 수행하기에 충분할 것으로 판단됩니다. 그게 너 한테 어떻게되는지 알려줘.