Laravel Blade 구문 강조에 대한 지원을 추가하기 위해 Adobe Brackets Extension을 만들고 있습니다.CodeMirror 및 대괄호, CSS가 포함 된 사용자 지정 모드 Quick Edit
Blade는 내 확장 프로그램을 사용하지 않고 HTML (더 구체적으로 .php 파일)에서 실행되는 템플릿 시스템입니다. CTRL + E 빠른 편집을 CSS 규칙 이름으로 빠르게 찾아 해당 규칙을 찾습니다. stlye.css 파일. 그러나 확장 기능을 활성화하면 Ctrl + E가 더 이상 작동하지 않지만 HTML 구문이 완벽하게 작동합니다.
text/html보다 오버레이 모드를 사용하고 있습니다. 여기
은 main.js 확장 코드 :define(function (require, exports, module) {
'use strict';
var LanguageManager = brackets.getModule("language/LanguageManager");
CodeMirror.defineMode("laravelblade", function (config, parserConfig) {
var mustacheOverlay = {
token: function (stream, state) {
var ch;
//Highlight Comments {{-- --}}
if (stream.match("{{--")) {
while ((ch = stream.next()) != null)
if (ch == "}" && stream.next() == "}") break;
stream.eat("}");
return "comment";
}
//--
//Highlight {{ $var }})
if (stream.match("{{")) {
while ((ch = stream.next()) != null)
if (ch == "}" && stream.next() == "}") break;
stream.eat("}");
return "def";
}
//Highlight {% $var %} (Laravel 5)
else if (stream.match('{%')) {
while ((ch = stream.next()) != null)
if (ch == "%" && stream.next() == "}") break;
stream.eat("}");
return "def";
}
//Highlight {% $var %} (Laravel 5)
else if (stream.match('{%')) {
while ((ch = stream.next()) != null)
if (ch == "%" && stream.next() == "}") break;
stream.eat("}");
return "def";
}
//Return Null if no condition was met.
else if (stream.next() != null) {
return null;
}
}
};
return CodeMirror.overlayMode(CodeMirror.getMode(config, parserConfig.backdrop || "php"), mustacheOverlay);
});
LanguageManager.defineLanguage("laravelblade", {
"name": "Laravel Blade",
"mode": "laravelblade",
"fileExtensions": ["blade.php"],
"blockComment": ["{{--", "--}}"]
});
});
진짜 문제는 다음과 같습니다 어떻게 * blade.php 파일을 내 사용자 지정 모드에서 빠른 편집에 대한 지원을 추가 할 수 있습니까?
while (stream.next() != null && !stream.match("{{", false)) {}
return null;
당신의 코드가 각 무시 문자에 대해 한 번 null을 반환 : 그것은 약간 다른 무언가를,
else if (stream.next() != null) {
return null;
}
가 CodeMirror's overlay mode demo에서 상대 :
Btw, 또한 전역에 더 이상 사용되지 않는 CodeMirror에 액세스하여 곧 사라질 것이므로'var CodeMirror = brackets.getModule ("thirdparty/CodeMirror2/lib/codemirror");를 추가해야합니다. (이것에 관해서는 인쇄 콘솔 경고가 있어야합니다). – peterflynn
나는 그것을 (콘솔에서 정확하게 읽었을 때) 알았지 만, 아직 그것을 변경하지 않았다. (게으른 나를 ... 지금 바꿨다. :)). 고맙습니다! –
@ytepe 도와 주셔서 감사합니다. 코드에서 수행중인 작업을 확인하지만 "while"루프에 대한 모든 새로운 규칙을 선언해야합니까? –