文本字段识别代码

时间:2017-10-15 06:39:40

标签: swift uitextfield

我正在创建一个应用程序,所有用户都可以编写代码。我想创建一个文本字段,它将识别放入其中的代码并正确地对代码进行颜色编码。 repl.it是一个与我正在寻找的功能类似的网站。我只希望代码是彩色编码的,我不需要运行或构建代码。我在网上到处寻找答案或参考,但我没有找到任何东西。最终,我希望允许用户选择一种语言(java,Swift,Python等)并能够用该语言编写代码。非常感谢任何参考或答案。

2 个答案:

答案 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