2014-10-11 53 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”值,才能继续完成文本。你也可以考虑使用双方括号([[),双冒号或其他不太可能出现在文本上的东西:)