在htmlText字段haxe中自定义链接解析

时间:2014-10-11 16:16:14

标签: haxe openfl

我目前正在使用OpenFL开发一个交互式故事,我目前正在为C ++输出优化我的引擎,因为这是我的重点。主分支over on Github具有功能性Flash目标,但是它使用锚链接来识别指向不同段落的链接中的超链接,以及使用HScript解析的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。 有关如何解决这个问题的想法吗?

1 个答案:

答案 0 :(得分:0)

看起来你使用&#34; indexOf&#34;找到第一个方括号,但是在文本中留下方括号。最后,你替换了方括号,但是while循环仍然可能会在开头时继续拾取相同的方括号?

我认为你至少需要使用&#34; indexOf&#34;与之前的&#34; pos&#34;价值,以便继续通过文本进展。您也可以考虑使用双方括号([[),双冒号或其他不太可能出现在文本中的其他东西:)