2012-12-08 17 views
5

Mi piacerebbe estendere asso con una modalità per un linguaggio personalizzato. Per quanto posso dire, il processo generale è:Come posso creare un'estensione in modalità standalone per ACE?

  1. Scarica la fonte asso.
  2. Crea un nuovo lib/ace/mode/foo.js per la tua lingua personalizzata.
  3. eseguire "make build" (o simile) per ricostruire ACE.
  4. Usa la nuova compilazione build/src-min-no-conflict (o qualsiasi altra cosa) ACE nel tuo sito web.

Ma voglio solo utilizzare una distribuzione ACE esistente dal loro sito Web, combinata con la mia nuova modalità standalone. Non voglio dover ricostruire ACE come parte del mio processo di compilazione per costruire la mia nuova modalità. Mi sono avvicinato a:

ace.config.setModuleUrl("foo-mode", "./foo.js"); 
session.setMode("foo-mode"); 

Ma ho subito incontrato problemi di requirejs/dipendenza. Per esempio non potevo fare require("ace/mode/matching_brace_outdent") nella mia modalità. Ho temporaneamente violato quello chiamando prima setMode('ace/mode/c_cpp') (che come sottoprodotto definisce il modulo matching_brace_outdent). Ma mi sono imbattuto in problemi ancora peggiori cercando di far funzionare un Worker Client personalizzato.

È la mia unica opzione per creare la mia modalità come parte di ACE? O mi sta sfuggendo qualcosa?

risposta

1

Prova la versione pre-compilata.

https://github.com/ajaxorg/ace-builds/releases

Potrebbe essere necessario modificare altri file (liste di modalità etc.) a seconda di come si vuole presentare la nuova lingua nell'interfaccia utente:

0

Per quanto riguarda require sotto no-conflitto modalità nelle modalità personalizzate che non sono lavoratori, se si definisce la modalità personalizzata come un modulo o una serie di moduli all'interno define o ace.define, si dovrebbe solo essere in grado di utilizzare il require fornito all'utente in funzione wrapper:

ace.define("ace/mode/your_module_name", 
     ["require","exports","module","ace/your_other_dependencies"], 
     function(require, exports, module) { 

    // you can use require('...') here 
}); 

Credo che si possa usare anche ace.require.

Sono meno sicuro su come "creare manualmente" un worker personalizzato, ma dopo this answer, penso di averlo fatto funzionare copiando il codice attorno al core dello relatively slim worker-json.js.

Problemi correlati