2016-12-10 3 views
0

XML로 작업 중이며 AS3을 사용하여 특정 노드 유형에 대한 속성에 대한 자동 완성 제안을 제공하고 싶습니다. 나는 "폭, 높이, X, Y"를 보여주고 자동 완성 싶습니다AS3에서 Ace Editor를 사용한 간단한 자동 완성?

<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를 들어, 항목의 조합입니다.