2014-10-11 54 views
0

我目前正在開發一個使用OpenFL的交互式故事,我目前正在經歷優化我的C++輸出引擎的過程,因爲這是我的工作重點。主分支over on Github有一個功能性的Flash目標工作,但它使用錨鏈接來識別指向不同段落的鏈接中的超鏈接,以及使用HScript解析的Haxe代碼。在htmlText字段解析自定義鏈接haxe

我知道超鏈接在C++目標中不起作用,所以我查看了使用「getCharIndexAtPoint()」函數來確定htmlText字段中鏈接的位置。我不知道什麼HTML文本支持C++中的內容,但如果根本不支持任何標籤,那麼我也可以編寫我自己的解析器。

這是我嘗試在互動故事,用傳統的鏈接的格式來分析我的鏈接當前的代碼:

private function parseLink(s:String):String 
{ 
    _parsedLinks.splice(0, _parsedLinks.length); 
    var pos:Int = 0; 
    var content = s; 
    while (pos < content.length) 
    { 
     if (!(content.indexOf("[") > -1 && content.indexOf("]") > -1)) break; 
     pos = content.indexOf("["); 
     var subs = content.substring(pos + 1, content.indexOf("]")); 
     if (subs.indexOf("|") > -1) 
     { 
      var link = subs.split("|"); 
      var parsedLink:ParsedLink = new ParsedLink(); 
      parsedLink.code = link[1]; 
      parsedLink.startIndex = s.indexOf(link[0]); 
      parsedLink.endIndex = s.indexOf(link[0].charAt(link[0].length)); 
      trace("Link text: " + link[0] + "\n" + "Link code: " + link[1]); 
      _parsedLinks.push(parsedLink); 
      content = content.substr(parsedLink.endIndex + 1); 
      trace("Content: " + content); 
      s = StringTools.replace(s, parsedLink.code, ""); 
     } 
    } 

    s = StringTools.replace(s, "[", ""); 
    s = StringTools.replace(s, "]", ""); 
    s = StringTools.replace(s, "|", ""); 

    return s; 
} 

private function onLinkClicked(e:MouseEvent):Void 
{ 
    var idx:Int = e.currentTarget.getCharIndexAtPoint(e.localX, e.localY); 
    for (i in 0..._parsedLinks.length) 
    { 
     if (idx >= _parsedLinks[i].startIndex && idx < _parsedLinks[i].endIndex) 
     { 
      runCode(_parsedLinks[i].code); 
      break; 
     } 
    } 
} 

至少,這是一般的想法。不幸的是,給定的代碼導致this output。 關於如何解決這個問題的任何想法?

回答

0

它看起來像你使用「indexOf」找到第一個方括號,但你留下方括號的文字。最後,你替換了方括號,但while循環在開始時可能仍然會繼續選取相同的方括號?

我認爲你需要至少使用「indexOf」與先前的「pos」值,才能繼續完成文本。你也可以考慮使用雙方括號([[),雙冒號或其他不太可能出現在文本上的東西:)