我正在创建一个应用程序,所有用户都可以编写代码。我想创建一个文本字段,它将识别放入其中的代码并正确地对代码进行颜色编码。 repl.it是一个与我正在寻找的功能类似的网站。我只希望代码是彩色编码的,我不需要运行或构建代码。我在网上到处寻找答案或参考,但我没有找到任何东西。最终,我希望允许用户选择一种语言(java,Swift,Python等)并能够用该语言编写代码。非常感谢任何参考或答案。
答案 0 :(得分:2)
好像你想构建一个代码突出显示的应用程序。 设置它是一个非常密集的过程。你需要为许多语言构建类似Lexical Analyzer的东西,或者设置很多RegEx。
如果你想继续那么好运,但如果你只是想在短时间内创建一个简单的应用程序,我认为你最好使用一个库。以此为例......
https://github.com/raspu/Highlightr
Highlightr是一款iOS&用Swift构建的macOS语法高亮显示器。它使用highlight.js作为核心,支持169种语言,并有77种风格。
如果你想给它自己的外观,那么只需分叉并修改,比单独设置核心以进行语法高亮显示更好。
答案 1 :(得分:0)
首先,您首先要使用带有attributionText的UITextField。
然后为该文本字段设置委托并监听printf( states.size() ); // N
printf( number_of_neighbors.size() ); // N
printf( neighbor_lists.size() ); // N * k
printf( index.size() ); // N
函数。
只要用户键入内容或将代码粘贴到文本字段中,就会调用此文件。
在你内部查看(如果它只是一个已放入的单个字符),用于键入分隔符。然后你从那里向后遍历字符串,直到找到下一个分隔符。
这样做,您可以在该特定代码范围上应用函数,以使用应用了正确颜色的属性字符串版本替换其内容。
(例如,可以使用此方法:i
上的// access neighbors of node i:
for ( int s=0; s<number_of_neighbors[i]; s++ ) {
int neighbor_node = neighbor_lists[index[i] + s];
int state_of_neighbor = states[neighbor_node];
// use neighbor state for stuff...
}
)
正如评论中所建议的,着色功能可以通过正则表达式搜索来完成。
例如基本的
textField(_:shouldChangeCharactersIn:replacementString:)
或
addAttribute(NSAttributedStringKey, value: Any, range: NSRange)
可以胜任。
NSMutableAttributedString
变量getMatches(in originalString: String, using pattern: String) -> [Range<String.Index>]
是您的正则表达式。试一试的好方法
可在此处获取:RegExr