2016-12-10 3 views
0

私はXMLで作業しており、AS3を使用して特定のノードタイプの属性にオートコンプリートの提案を提供したいと思います。 I「は、幅、高さ、X、Y」を表示するオートコンプリートを希望AS3のAceエディタを使用したシンプルなオートコンプリート?

<s:Button label="Hello World"/> 

は、例えば、ユーザがある場合、次のノードにカーソルを持っています。

私はノード名と名前空間を取得しようとしていて、エディタに自動完成に表示する属性のリストを与えようとしています。

私も同様の質問がありましたが、サービスコールを使用していて、日付が間違っています。私はそれが重複している場合、この質問を削除することがあります。

エースエディタfor AS3 here

ace.setCompleters(null); // I'm removing existing autocomplete 
ace.addCompleter(codeCompleter); // adding my own 

public var autoCompleteErrorMessage:String = "Nothing available"; 
public function codeCompleter(editor:Object, session:Object, position:Object, prefix:String, callback:Function):void { 
    var row:int = position.row; 
    var column:int = position.column; 

    /* 
    if (prefix.length === 0) { 
     callback(null, []); 
     return; 
    } 
    */ 
    //var myList:Array = {value: "message", caption: "Caption to user", meta: "Type shown", score: "I don't know"}; 

    var testing:Boolean = false; 

    if (testing) { 
     callback(autoCompleteErrorMessage, [{value:"addedToStage"},{value:"added"},{value:"adding"}]); 
    } 
    else { 
     callback(autoCompleteErrorMessage, attributes); 
    } 
} 


protected function cursorChangeHandler(event:Event):void { 

    var qname:QName = getQNameFromCursorPosition(ace.row, ace.column); 
    if (qname==null) { 
     if (attributes.length) { 
      attributes = []; 
     } 
     return; 
    } 

    if (qname) { 
     attributes = getSuggestionListFromObject(classObject); 
     autoCompleteErrorMessage = null; 
     lastSelectedQName = qname; 
    } 
} 


public static var XML_TAG_NAME:String  = "meta.tag.tag-name.xml"; 
public static var XML_TAG_OPEN:String  = "meta.tag.punctuation.tag-open.xml"; 
public static var XML_TAG_CLOSE:String  = "meta.tag.punctuation.tag-close.xml"; 
public static var XML_ATTRIBUTE_NAME:String = "entity.other.attribute-name.xml"; 

public function getQNameFromCursorPosition(row:int, column:int):QName { 
    var token:Object; 
    var line:String; 
    var type:String; 
    var value:String; 
    var found:Boolean; 
    var qname:QName; 

    for (; row > -1; row--) { 
     line = ace.getLine(row); 
     column = line.length; 

     for (; column>-1; column--) { 
      token = ace.getTokenAt(row, column); 
      type = token ? token.type : ""; 

      if (type==XML_TAG_NAME) { 
       value = token.value; 
       found = true; 
      } 
     } 

     if (found) break; 
    } 

    if (found) { 
     qname = new QName("", value); 
    } 

    return qname; 
} 

getQNameFromCursorPosition()方法は脆弱であり、私はjumpToMatching()メソッドを使用して、新しいメソッドに探しています:私の場合は

答えて

0

は、AS3のために、それは項目の組み合わせです。

関連する問題