iOS 设备上的一些 Github 客户端是怎么实现代码高亮甚至切换颜色主题的?

2014-07-30 14:35:27 +08:00
 yiplee
比如 NapCat , iOctocat 等等
5377 次点击
所在节点    iDev
11 条回复
rekey
2014-07-30 16:51:35 +08:00
不会是 webview 吧。。。
txx
2014-07-30 16:58:24 +08:00
iOctocat 1.0 是開源的 自己去看啊...
yiplee
2014-07-30 17:37:32 +08:00
@txx iOctocat 的开源代码在 github 上已经没有了。

iOctocat 的看上去应该是 webview 。
xhacker
2014-07-30 17:57:09 +08:00
@yiplee: 还在的。

https://github.com/dennisreimann/ioctocat

I removed the contents of this repo, because people kept confusing this for the current version that is available n the App Store. Please note that the source is still available and can be used, just go back to the last ref before the cleaning - just keep in mind that this version is not updated for iOS 7.
txx
2014-07-30 18:01:03 +08:00
Smartype
2014-07-30 19:35:38 +08:00
Textastic 是自己写了一个的UITextView, 我分析过,基本上就是重新造了一个UITextView,而且支持编辑/高亮/选择等。绘制的 OnDemand 的,然后绘制操作(每一行)塞到一个NSOperationQueue里面,在后台绘制layer,然后[view setContent:layer]。其他的应该都是UIWebView。这些应用在iOS开发WebView内容可编辑之前(iOS 5.0)应该都是没有的。
yiplee
2014-07-30 20:44:39 +08:00
@Smartype 自定义的 UITextView 要支持代码高亮并且几十种不同的语言都要支持,工作量貌似很大。

只显示代码的话最简便的就是 webview 了。 NapCat 的效果不错,不确定是不是 webview 。
txx
2014-07-30 21:15:54 +08:00
@yiplee class-dump + reveal 分析下唄~
gangsta
2014-07-31 13:12:16 +08:00
代码高亮的话可以试试: webview + google-code-prettify
krafttuc
2014-08-02 11:00:18 +08:00
做语法高亮一般来说要么套用正则,要么做类似编译器的语法分析。很多编辑器都采用正则,如 TextMate 的语法 bundle 里就是各种各样的正则。做语法分析的比较少见,毕竟这个工作量更大。我知道的一种方式是构建 Abstract syntax tree http://en.wikipedia.org/wiki/Abstract_syntax_tree

那么回到iOS上的几种常见的解决方法:

* WebView。JS渲染,如highlight.js。对只读的文本内容,这种实践最为省力。毕竟提供语法高亮的JS插件很多。
* UITextView。iOS 7以及之后的版本用 TextKit。如果要支持iOS 7 之前的,可以走到 CoreText 这一层。同样,套正则或者做语法分析。这种实现对做写操作有要求的同学也许可以试试,比 WebView + content editable 这种组合少很多坑。
kingliangyingjun
2014-08-25 17:12:20 +08:00
coreText

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/125271

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX