2016-04-20 4 views
3

Ich schreibe einen benutzerdefinierten Modus für die ACE editor, um meine Spielzeugvorlagensprache zu unterstützen.Wie erzwinge Soft-Wrap aus einem benutzerdefinierten ACE-Editor-Modus?

In der Sprache ist es ein Konstrukt, eine neue Zeile einzubetten:

foo{\n}bar 

Es wird mit einem Newline gemacht werden, wie folgt:

foo 
bar 

würde ich dies gerne im Editor imitieren und zwingen, eine weiche verpackung nach {\n}:

1 | foo{\n} 
    | bar 

gibt es eine Möglichkeit, dies zu tun in mein Modus?

Update: FWIW, hier ist ein link zu meiner Modus-Datei.

Antwort

0

Ohne Code, es ist ein bisschen schwer [EDIT: siehe unten] zu reproduzieren, sondern nach the class diagram, müssen Sie mit dem VirtualRenderer zu interagieren zu verändern, wie die Dinge angezeigt werden.

Es dauert eine theme, um den Code zu stylen. (Sie können diese unter the editor im Theme-Menü auswählen). Themen sind css (+ js) Dateien, die die Möglichkeit der Verwendung von this trick öffnet, um eine Zeilenschaltung nach Ihrer {\n} Elementklasse einzufügen.

EDIT: Code hinzugefügt wurde

In Abhängigkeit von der Position der \n (mehrere Teile der Regex passen könnte), könnten Sie in der Lage sein

{ 
    token: function(arg1, arg2, arg3, arg4, arg5, arg6, arg7) { 
     return [ 
     "constant", 
     "keyword.operator", 
     (arg3 === '\n') ? "newline" : "variable.parameter", 
     "keyword.operator", 
     "string", 
     "keyword.operator", 
     "variable" 
     ], 
    regex: /([%]?)([=]?)([^|>}]*)([|]?)([^>}]*)([>]?)([^}]*)/ 
} 

zu bedienen und haben dann

.ace_newline:after { 
    content:"\a"; 
    white-space: pre; 
} 

in Ihrem benutzerdefinierten Thema.

+0

Vielen Dank für Ihre Antwort. Ihre Klassendiagrammverbindung scheint unterbrochen zu sein. Ich habe den CSS-Ansatz in Betracht gezogen, bin aber nicht sicher, ob er andere Logik für ACE durchbrechen wird. Muss es aber versuchen. Hinweis: Siehe auch: https://groups.google.com/d/msg/ace-discuss/Xsfb4SSMxAs/KMKXdP-IAwAJ –

Verwandte Themen