├── .gitignore
├── Cartfile
├── Cartfile.resolved
├── CodeReader.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ └── contents.xcworkspacedata
└── xcuserdata
│ └── wangshudao.xcuserdatad
│ └── xcschemes
│ ├── CodeReader.xcscheme
│ └── xcschememanagement.plist
├── CodeReader
├── AppDelegate.swift
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-29.png
│ │ ├── Icon-29@2x-1.png
│ │ ├── Icon-29@2x.png
│ │ ├── Icon-29@3x.png
│ │ ├── Icon-40.png
│ │ ├── Icon-40@2x-1.png
│ │ ├── Icon-40@2x.png
│ │ ├── Icon-40@3x.png
│ │ ├── Icon-60@2x.png
│ │ ├── Icon-60@3x.png
│ │ ├── Icon-76.png
│ │ ├── Icon-76@2x.png
│ │ └── Icon-83.5@2x.png
│ ├── Contents.json
│ ├── buy_coffee.imageset
│ │ ├── Contents.json
│ │ └── buy_coffee.pdf
│ ├── coffee_highlight.imageset
│ │ ├── Contents.json
│ │ └── coffee_highlight.pdf
│ ├── dir.imageset
│ │ ├── Contents.json
│ │ └── dir.pdf
│ ├── explore_highlight.imageset
│ │ ├── Contents.json
│ │ └── explore_highlight.pdf
│ ├── favorite.imageset
│ │ ├── Contents.json
│ │ └── favorite.pdf
│ ├── file.imageset
│ │ ├── Contents.json
│ │ └── file.pdf
│ ├── file_addition.imageset
│ │ ├── Contents.json
│ │ └── file_addition.pdf
│ ├── file_deletion.imageset
│ │ ├── Contents.json
│ │ └── file_deletion.pdf
│ ├── file_modification.imageset
│ │ ├── Contents.json
│ │ └── file_modification.pdf
│ ├── fork.imageset
│ │ ├── Contents.json
│ │ └── fork.pdf
│ ├── lock.imageset
│ │ ├── Contents.json
│ │ └── coffee_lock.pdf
│ ├── purchased_coffee.imageset
│ │ ├── Contents.json
│ │ └── purchased_coffee.pdf
│ ├── recents_highlight.imageset
│ │ ├── Contents.json
│ │ └── recents_highlight.pdf
│ ├── star.imageset
│ │ ├── Contents.json
│ │ └── star.pdf
│ ├── themes.imageset
│ │ ├── Contents.json
│ │ └── themes.pdf
│ ├── unfavorite.imageset
│ │ ├── Contents.json
│ │ └── unfavorite.pdf
│ ├── unlock.imageset
│ │ ├── Contents.json
│ │ └── unlock.pdf
│ ├── user_avatar.imageset
│ │ ├── Contents.json
│ │ └── user_avatar.pdf
│ └── watch.imageset
│ │ ├── Contents.json
│ │ └── watch.pdf
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── HTML
│ ├── file_change.html
│ ├── github-markdown.css
│ ├── readme.html
│ └── template.html
├── Helper
│ ├── Extensions.swift
│ └── ThemeFactory.swift
├── IAP
│ ├── DonationProduct.swift
│ └── IAPHelper.swift
├── Info.plist
├── JS
│ └── highlight.pack.js
├── Model
│ ├── Branch.swift
│ ├── Commit.swift
│ ├── CommitItem.swift
│ ├── Recent.swift
│ ├── RecentsManager.swift
│ ├── Repo.swift
│ ├── RepoFile.swift
│ ├── SearchRepoResponse.swift
│ ├── Theme.swift
│ └── User.swift
├── Themes
│ ├── agate.css
│ ├── androidstudio.css
│ ├── arduino-light.css
│ ├── arta.css
│ ├── ascetic.css
│ ├── atelier-cave-dark.css
│ ├── atelier-cave-light.css
│ ├── atelier-dune-dark.css
│ ├── atelier-dune-light.css
│ ├── atelier-estuary-dark.css
│ ├── atelier-estuary-light.css
│ ├── atelier-forest-dark.css
│ ├── atelier-forest-light.css
│ ├── atelier-heath-dark.css
│ ├── atelier-heath-light.css
│ ├── atelier-lakeside-dark.css
│ ├── atelier-lakeside-light.css
│ ├── atelier-plateau-dark.css
│ ├── atelier-plateau-light.css
│ ├── atelier-savanna-dark.css
│ ├── atelier-savanna-light.css
│ ├── atelier-seaside-dark.css
│ ├── atelier-seaside-light.css
│ ├── atelier-sulphurpool-dark.css
│ ├── atelier-sulphurpool-light.css
│ ├── brown-paper.css
│ ├── brown-papersq.png
│ ├── codepen-embed.css
│ ├── color-brewer.css
│ ├── dark.css
│ ├── darkula.css
│ ├── default.css
│ ├── docco.css
│ ├── dracula.css
│ ├── far.css
│ ├── foundation.css
│ ├── github-gist.css
│ ├── github.css
│ ├── googlecode.css
│ ├── grayscale.css
│ ├── gruvbox-dark.css
│ ├── gruvbox-light.css
│ ├── hopscotch.css
│ ├── hybrid.css
│ ├── idea.css
│ ├── ir-black.css
│ ├── kimbie.dark.css
│ ├── kimbie.light.css
│ ├── magula.css
│ ├── mono-blue.css
│ ├── monokai-sublime.css
│ ├── monokai.css
│ ├── obsidian.css
│ ├── paraiso-dark.css
│ ├── paraiso-light.css
│ ├── pojoaque.css
│ ├── pojoaque.jpg
│ ├── purebasic.css
│ ├── qtcreator_dark.css
│ ├── qtcreator_light.css
│ ├── railscasts.css
│ ├── rainbow.css
│ ├── school-book.css
│ ├── school-book.png
│ ├── solarized-dark.css
│ ├── solarized-light.css
│ ├── sunburst.css
│ ├── tomorrow-night-blue.css
│ ├── tomorrow-night-bright.css
│ ├── tomorrow-night-eighties.css
│ ├── tomorrow-night.css
│ ├── tomorrow.css
│ ├── vs.css
│ ├── xcode.css
│ ├── xt256.css
│ └── zenburn.css
├── View
│ ├── AboutViewController.swift
│ ├── BaseTableViewController.swift
│ ├── BaseViewController.swift
│ ├── BranchCell.swift
│ ├── BranchCell.xib
│ ├── BranchListViewController.swift
│ ├── CodeViewController.swift
│ ├── CommitCell.swift
│ ├── CommitCell.xib
│ ├── CommitFileCell.swift
│ ├── CommitFileListViewController.swift
│ ├── CommitListViewController.swift
│ ├── FileCell.swift
│ ├── FileCell.xib
│ ├── FileChangeViewController.swift
│ ├── FileListViewController.swift
│ ├── HistoryViewController.swift
│ ├── InsetsLabel.swift
│ ├── RecentFileCell.swift
│ ├── RecentFileCell.xib
│ ├── RepoViewController.swift
│ ├── SearchRepoCell.swift
│ ├── SearchRepoCell.xib
│ ├── SearchViewController.swift
│ ├── ThemeCell.swift
│ ├── ThemeCell.xib
│ └── ThemeListViewController.swift
└── ViewModel
│ ├── BranchListViewModel.swift
│ ├── CommitFileListViewModel.swift
│ ├── CommitListViewModel.swift
│ ├── RepoViewModel.swift
│ ├── SearchRepoViewModel.swift
│ └── ThemeViewModel.swift
├── LICENSE
├── README.md
├── fix_carthage.sh
├── logo.png
└── scripts
└── set_build_number.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 |
19 | xcuserdata
20 | *.xccheckout
21 | *.moved-aside
22 | DerivedData
23 | *.hmap
24 | *.ipa
25 | *.xcuserstate
26 | xcuserdata/
27 |
28 | ## Other
29 | *.moved-aside
30 | *.xcuserstate
31 |
32 | ## Obj-C/Swift specific
33 | *.hmap
34 | *.ipa
35 | *.dSYM.zip
36 | *.dSYM
37 |
38 | ## Playgrounds
39 | timeline.xctimeline
40 | playground.xcworkspace
41 |
42 | # Swift Package Manager
43 | #
44 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
45 | # Packages/
46 | .build/
47 |
48 | # CocoaPods
49 | #
50 | # We recommend against adding the Pods directory to your .gitignore. However
51 | # you should judge for yourself, the pros and cons are mentioned at:
52 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control
53 | #
54 | #Pods/
55 |
56 | # Carthage
57 | Carthage/
58 |
59 | # Reveal
60 | Reveal.framework/
61 |
62 | # Fabric
63 | Fabric.framework/
64 | Crashlytics.framework/
65 |
66 |
67 |
--------------------------------------------------------------------------------
/Cartfile:
--------------------------------------------------------------------------------
1 | github "Alamofire/Alamofire" ~> 4.0
2 | github "Hearst-DD/ObjectMapper" ~> 2.0.0
3 | github "onevcat/Kingfisher" ~> 3.0
4 | github "yeahdongcn/UIColor-Hex-Swift" >= 3.0.2
5 | github "malcommac/SwiftDate" ~> 4.0
6 | github "SwiftyBeaver/SwiftyBeaver"
7 | github "tristanhimmelman/AlamofireObjectMapper" ~> 4.0
8 | github "ReactiveX/RxSwift" ~> 3.0
9 | github "goktugyil/EZLoadingActivity"
10 | github "RxSwiftCommunity/RxDataSources" ~> 1.0
11 |
--------------------------------------------------------------------------------
/Cartfile.resolved:
--------------------------------------------------------------------------------
1 | github "Alamofire/Alamofire" "4.0.1"
2 | github "goktugyil/EZLoadingActivity" "2.1"
3 | github "onevcat/Kingfisher" "3.2.1"
4 | github "Hearst-DD/ObjectMapper" "2.2.1"
5 | github "ReactiveX/RxSwift" "3.0.1"
6 | github "malcommac/SwiftDate" "4.0.7"
7 | github "SwiftyBeaver/SwiftyBeaver" "1.1.1"
8 | github "yeahdongcn/UIColor-Hex-Swift" "3.0.2"
9 | github "RxSwiftCommunity/RxDataSources" "1.0.1"
10 | github "tristanhimmelman/AlamofireObjectMapper" "4.0.0"
11 |
--------------------------------------------------------------------------------
/CodeReader.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/CodeReader.xcodeproj/xcuserdata/wangshudao.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | CodeReader.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 | SuppressBuildableAutocreation
14 |
15 | D2204DD11DBB9A4700F44A6E
16 |
17 | primary
18 |
19 |
20 | D23EE4031CDF56B100D6143D
21 |
22 | primary
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/CodeReader/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/8.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Fabric
11 | import Crashlytics
12 | import SwiftyBeaver
13 | import EZLoadingActivity
14 |
15 | let log = SwiftyBeaver.self
16 |
17 | @UIApplicationMain
18 | class AppDelegate: UIResponder, UIApplicationDelegate {
19 |
20 | var window: UIWindow?
21 |
22 |
23 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
24 |
25 | UITabBar.appearance().tintColor = UIColor.black
26 | UINavigationBar.appearance().tintColor = UIColor.black
27 |
28 | Fabric.with([Answers.self, Crashlytics.self])
29 |
30 | let console = ConsoleDestination()
31 | log.addDestination(console)
32 |
33 | EZLoadingActivity.Settings.BackgroundColor = UIColor.white
34 | EZLoadingActivity.Settings.DarkensBackground = true
35 |
36 | return true
37 | }
38 |
39 | func applicationWillResignActive(_ application: UIApplication) {
40 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
41 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
42 | }
43 |
44 | func applicationDidEnterBackground(_ application: UIApplication) {
45 | RecentsManager.sharedManager.save(RecentsManager.SaveType.Recent)
46 | RecentsManager.sharedManager.save(RecentsManager.SaveType.Favorite)
47 | }
48 |
49 | func applicationWillEnterForeground(_ application: UIApplication) {
50 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
51 | if DonationProduct.store.isProductPurchased(DonationProduct.BuyMeACoffee) {
52 | if let recentsData = UserDefaults.standard.object(forKey: "favorites") {
53 | RecentsManager.sharedManager.favorites = NSKeyedUnarchiver.unarchiveObject(with: recentsData as! Data) as! [Recent]
54 | log.info("Favorites loaded")
55 | }
56 | if let recentsData = UserDefaults.standard.object(forKey: "recents") {
57 | RecentsManager.sharedManager.recents = NSKeyedUnarchiver.unarchiveObject(with: recentsData as! Data) as! [Recent]
58 | log.info("Recents loaded")
59 | }
60 | Answers.logCustomEvent(withName: "Purchased", customAttributes: nil)
61 | } else {
62 | Answers.logCustomEvent(withName: "Not Purchased", customAttributes: nil)
63 | }
64 | }
65 |
66 | func applicationDidBecomeActive(_ application: UIApplication) {
67 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
68 | }
69 |
70 | func applicationWillTerminate(_ application: UIApplication) {
71 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
72 | }
73 |
74 |
75 | }
76 |
77 |
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "size" : "29x29",
15 | "idiom" : "iphone",
16 | "filename" : "Icon-29@2x.png",
17 | "scale" : "2x"
18 | },
19 | {
20 | "size" : "29x29",
21 | "idiom" : "iphone",
22 | "filename" : "Icon-29@3x.png",
23 | "scale" : "3x"
24 | },
25 | {
26 | "size" : "40x40",
27 | "idiom" : "iphone",
28 | "filename" : "Icon-40@2x.png",
29 | "scale" : "2x"
30 | },
31 | {
32 | "size" : "40x40",
33 | "idiom" : "iphone",
34 | "filename" : "Icon-40@3x.png",
35 | "scale" : "3x"
36 | },
37 | {
38 | "size" : "60x60",
39 | "idiom" : "iphone",
40 | "filename" : "Icon-60@2x.png",
41 | "scale" : "2x"
42 | },
43 | {
44 | "size" : "60x60",
45 | "idiom" : "iphone",
46 | "filename" : "Icon-60@3x.png",
47 | "scale" : "3x"
48 | },
49 | {
50 | "idiom" : "ipad",
51 | "size" : "20x20",
52 | "scale" : "1x"
53 | },
54 | {
55 | "idiom" : "ipad",
56 | "size" : "20x20",
57 | "scale" : "2x"
58 | },
59 | {
60 | "size" : "29x29",
61 | "idiom" : "ipad",
62 | "filename" : "Icon-29.png",
63 | "scale" : "1x"
64 | },
65 | {
66 | "size" : "29x29",
67 | "idiom" : "ipad",
68 | "filename" : "Icon-29@2x-1.png",
69 | "scale" : "2x"
70 | },
71 | {
72 | "size" : "40x40",
73 | "idiom" : "ipad",
74 | "filename" : "Icon-40.png",
75 | "scale" : "1x"
76 | },
77 | {
78 | "size" : "40x40",
79 | "idiom" : "ipad",
80 | "filename" : "Icon-40@2x-1.png",
81 | "scale" : "2x"
82 | },
83 | {
84 | "size" : "76x76",
85 | "idiom" : "ipad",
86 | "filename" : "Icon-76.png",
87 | "scale" : "1x"
88 | },
89 | {
90 | "size" : "76x76",
91 | "idiom" : "ipad",
92 | "filename" : "Icon-76@2x.png",
93 | "scale" : "2x"
94 | },
95 | {
96 | "size" : "83.5x83.5",
97 | "idiom" : "ipad",
98 | "filename" : "Icon-83.5@2x.png",
99 | "scale" : "2x"
100 | }
101 | ],
102 | "info" : {
103 | "version" : 1,
104 | "author" : "xcode"
105 | }
106 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29@2x-1.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29@2x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-29@3x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40@2x-1.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40@2x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-40@3x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-76.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-76@2x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/AppIcon.appiconset/Icon-83.5@2x.png
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/buy_coffee.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "buy_coffee.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/buy_coffee.imageset/buy_coffee.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/buy_coffee.imageset/buy_coffee.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/coffee_highlight.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "coffee_highlight.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/coffee_highlight.imageset/coffee_highlight.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/coffee_highlight.imageset/coffee_highlight.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/dir.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "dir.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/dir.imageset/dir.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/dir.imageset/dir.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/explore_highlight.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "explore_highlight.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/explore_highlight.imageset/explore_highlight.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/explore_highlight.imageset/explore_highlight.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/favorite.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "favorite.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/favorite.imageset/favorite.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/favorite.imageset/favorite.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "file.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file.imageset/file.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/file.imageset/file.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file_addition.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "file_addition.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file_addition.imageset/file_addition.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/file_addition.imageset/file_addition.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file_deletion.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "file_deletion.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file_deletion.imageset/file_deletion.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/file_deletion.imageset/file_deletion.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file_modification.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "file_modification.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/file_modification.imageset/file_modification.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/file_modification.imageset/file_modification.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/fork.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "fork.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/fork.imageset/fork.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/fork.imageset/fork.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/lock.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "coffee_lock.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/lock.imageset/coffee_lock.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/lock.imageset/coffee_lock.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/purchased_coffee.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "purchased_coffee.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/purchased_coffee.imageset/purchased_coffee.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/purchased_coffee.imageset/purchased_coffee.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/recents_highlight.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "recents_highlight.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/recents_highlight.imageset/recents_highlight.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/recents_highlight.imageset/recents_highlight.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/star.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "star.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/star.imageset/star.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/star.imageset/star.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/themes.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "themes.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/themes.imageset/themes.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/themes.imageset/themes.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/unfavorite.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "unfavorite.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/unfavorite.imageset/unfavorite.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/unfavorite.imageset/unfavorite.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/unlock.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "unlock.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/unlock.imageset/unlock.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/unlock.imageset/unlock.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/user_avatar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "user_avatar.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/user_avatar.imageset/user_avatar.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/user_avatar.imageset/user_avatar.pdf
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/watch.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "watch.pdf"
6 | }
7 | ],
8 | "info" : {
9 | "version" : 1,
10 | "author" : "xcode"
11 | }
12 | }
--------------------------------------------------------------------------------
/CodeReader/Assets.xcassets/watch.imageset/watch.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Assets.xcassets/watch.imageset/watch.pdf
--------------------------------------------------------------------------------
/CodeReader/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/CodeReader/HTML/file_change.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | #patch#
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/CodeReader/HTML/readme.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | #code#
9 |
10 |
11 |
--------------------------------------------------------------------------------
/CodeReader/HTML/template.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #title#
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | #code#
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/CodeReader/Helper/Extensions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Extensions.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/11.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | extension UITableView {
12 | func reloadDataWithAutoSizingCells() {
13 | self.reloadData()
14 | self.setNeedsDisplay()
15 | self.layoutIfNeeded()
16 | self.reloadData()
17 | }
18 | }
19 |
20 | extension UIScrollView {
21 | func resizeContentSize() {
22 | let contentWidth = self.frame.width
23 | var contentHeight: CGFloat = 0
24 | for subview in subviews {
25 | contentHeight += subview.frame.height
26 | }
27 | self.contentSize = CGSize(width: contentWidth, height: contentHeight)
28 | }
29 |
30 | func isNearBottomEdge(edgeOffset: CGFloat = 20.0) -> Bool {
31 | return self.contentOffset.y + self.frame.size.height + edgeOffset > self.contentSize.height
32 | }
33 | }
34 |
35 | extension Date {
36 | var dateString: String {
37 | let formatter = DateFormatter()
38 | formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
39 | return formatter.string(from: self)
40 | }
41 | }
42 |
43 | extension UITableView {
44 | func hideEmptyCells() {
45 | self.tableFooterView = UIView(frame: .zero)
46 | }
47 | }
48 |
49 | extension String {
50 | var URLEscaped: String {
51 | return self.addingPercentEncoding(withAllowedCharacters: .urlHostAllowed) ?? ""
52 | }
53 | }
54 |
55 | extension String {
56 | var fileBaseName: String {
57 | let parts = self.components(separatedBy: "/")
58 | return parts.last ?? self
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/CodeReader/IAP/DonationProduct.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DonationProduct.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/20.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | public struct DonationProduct {
12 | fileprivate static let Prefix = "com.wsd.Sources."
13 | public static let BuyMeACoffee = Prefix + "Donation"
14 | fileprivate static let productIdentifiers: Set = [DonationProduct.BuyMeACoffee]
15 | public static let store = IAPHelper(productIds: DonationProduct.productIdentifiers)
16 | }
17 |
18 | func resourceNameForProductIdentifier(_ productIdentifier: String) -> String? {
19 | return productIdentifier.components(separatedBy: ".").last
20 | }
21 |
22 |
23 |
--------------------------------------------------------------------------------
/CodeReader/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | Sources
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.2.2
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 121
23 | Fabric
24 |
25 | APIKey
26 | f88d269e9ebddfa5288c332293c76d498259c44c
27 | Kits
28 |
29 |
30 | KitInfo
31 |
32 | KitName
33 | Answers
34 |
35 |
36 | KitInfo
37 |
38 | KitName
39 | Crashlytics
40 |
41 |
42 |
43 | LSRequiresIPhoneOS
44 |
45 | NSAppTransportSecurity
46 |
47 | NSAllowsArbitraryLoads
48 |
49 |
50 | UILaunchStoryboardName
51 | LaunchScreen
52 | UIMainStoryboardFile
53 | Main
54 | UIRequiredDeviceCapabilities
55 |
56 | armv7
57 |
58 | UIRequiresFullScreen
59 |
60 | UISupportedInterfaceOrientations
61 |
62 | UIInterfaceOrientationPortrait
63 | UIInterfaceOrientationLandscapeLeft
64 | UIInterfaceOrientationLandscapeRight
65 | UIInterfaceOrientationPortraitUpsideDown
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/CodeReader/Model/Branch.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Branch.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/5.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ObjectMapper
11 |
12 | struct LatestCommit: Mappable {
13 | var sha: String?
14 | var URLString: String?
15 |
16 | init?(map: Map) {
17 |
18 | }
19 |
20 | mutating func mapping(map: Map) {
21 | sha <- map["sha"]
22 | URLString <- map["url"]
23 | }
24 | }
25 |
26 | struct Branch: Mappable {
27 |
28 | var name: String?
29 | var latestCommitURLString: String?
30 | // var lastestUpdateDate: String?
31 |
32 | init?(map: Map) {
33 |
34 | }
35 |
36 | mutating func mapping(map: Map) {
37 | name <- map["name"]
38 | latestCommitURLString <- map["commit.url"]
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/CodeReader/Model/Commit.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommitFile.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/2.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ObjectMapper
11 |
12 | /**
13 | item in one commit, reperesent for changes of a file
14 | **/
15 | struct CommitFile: Mappable {
16 |
17 | var sha: String?
18 | var filename: String?
19 | var status: String?
20 | var additions: Int?
21 | var deletions: Int?
22 | var changes: Int?
23 | // var blogURLString: String?
24 | // var contentsURLString: String?
25 | // var rawURLString: String?
26 | var patch: String?
27 |
28 | init?(map: Map) {
29 |
30 | }
31 |
32 | mutating func mapping(map: Map) {
33 | sha <- map["sha"]
34 | filename <- map["filename"]
35 | status <- map["status"]
36 | additions <- map["additions"]
37 | deletions <- map["deletions"]
38 | changes <- map["changes"]
39 | patch <- map["patch"]
40 | }
41 | }
42 |
43 | /** single commit **/
44 | struct Commit: Mappable {
45 | var files = [CommitFile]()
46 |
47 | init?(map: Map) {
48 |
49 | }
50 |
51 | mutating func mapping(map: Map) {
52 | files <- map["files"]
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/CodeReader/Model/CommitItem.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Commit.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/1.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ObjectMapper
11 |
12 | // "parents" item in JSON
13 | struct ParentCommit: Mappable {
14 | var URLString: String?
15 | var htmlURLString: String?
16 | var sha: String?
17 |
18 | init?(map: Map) {
19 |
20 | }
21 |
22 | mutating func mapping(map: Map) {
23 | URLString <- map["url"]
24 | htmlURLString <- map["html_url"]
25 | sha <- map["sha"]
26 | }
27 | }
28 |
29 | struct CommitUser: Mappable {
30 |
31 | var name: String?
32 | var email: String?
33 | var dateString: String?
34 |
35 | init?(map: Map) {
36 |
37 | }
38 |
39 | mutating func mapping(map: Map) {
40 | name <- map["name"]
41 | email <- map["email"]
42 | dateString <- map["date"]
43 | }
44 | }
45 |
46 | struct CommitInfo: Mappable {
47 | var author: CommitUser?
48 | var committer: CommitUser?
49 | var message: String?
50 |
51 | init?(map: Map) {
52 |
53 | }
54 |
55 | mutating func mapping(map: Map) {
56 | author <- map["author"]
57 | committer <- map["committer"]
58 | message <- map["message"]
59 | }
60 | }
61 |
62 |
63 | struct CommitItem: Mappable {
64 | var sha: String?
65 | // var author: User?
66 | var committer: User?
67 | var URLString: String?
68 | var htmlURLString: String?
69 | var parents = [ParentCommit]()
70 | var commitInfo: CommitInfo?
71 |
72 | init?(map: Map) {
73 |
74 | }
75 |
76 | mutating func mapping(map: Map) {
77 | sha <- map["sha"]
78 | URLString <- map["url"]
79 | htmlURLString <- map["html_url"]
80 | commitInfo <- map["commit"]
81 | committer <- map["committer"]
82 | parents <- map["parents"]
83 |
84 | }
85 | }
86 |
--------------------------------------------------------------------------------
/CodeReader/Model/Recent.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Recent.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/23.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 |
11 | let RecentRepoFileKey = "recent_repo_file"
12 | let RecentOwnerNameKey = "recent_owner_name"
13 | let RecentRepoNameKey = "recent_repo_name"
14 |
15 | class Recent: NSObject, NSCoding{
16 |
17 | var file: RepoFile
18 | var ownerName: String
19 | var repoName: String
20 |
21 | init(file: RepoFile, ownerName: String, repoName: String) {
22 | self.file = file
23 | self.ownerName = ownerName
24 | self.repoName = repoName
25 | }
26 |
27 | // MARK: NSCoding
28 | convenience required init?(coder aDecoder: NSCoder) {
29 | guard let file = aDecoder.decodeObject(forKey: RecentRepoFileKey) as? RepoFile,
30 | let ownerName = aDecoder.decodeObject(forKey: RecentOwnerNameKey) as? String,
31 | let repoName = aDecoder.decodeObject(forKey: RecentRepoNameKey) as? String
32 | else {
33 | return nil
34 | }
35 | self.init(file: file, ownerName: ownerName, repoName: repoName)
36 | }
37 |
38 | func encode(with aCoder: NSCoder) {
39 | aCoder.encode(self.file, forKey: RecentRepoFileKey)
40 | aCoder.encode(self.ownerName, forKey: RecentOwnerNameKey)
41 | aCoder.encode(self.repoName, forKey: RecentRepoNameKey)
42 | }
43 |
44 | override func isEqual(_ object: Any?) -> Bool {
45 | if let anotherRecent = object as? Recent {
46 | return self.repoName == anotherRecent.repoName
47 | && self.ownerName == anotherRecent.ownerName
48 | && self.file == anotherRecent.file
49 | }
50 | return false
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/CodeReader/Model/RecentsManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecentsManager.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/23.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Crashlytics
11 |
12 | class RecentsManager {
13 |
14 | enum SaveType : String {
15 | case Recent = "recents"
16 | case Favorite = "favorites"
17 | }
18 |
19 | static let sharedManager = RecentsManager()
20 |
21 | var recents = [Recent]()
22 | var favorites = [Recent]()
23 | var currentRepoName: String?
24 | var currentOwnerName: String?
25 |
26 | fileprivate var maxCapacity: Int {
27 | if DonationProduct.store.isProductPurchased(DonationProduct.BuyMeACoffee) {
28 | return 50
29 | } else {
30 | return 5
31 | }
32 | }
33 |
34 | func save(_ type: SaveType) {
35 | var data: AnyObject?
36 | var shouldSave = false
37 | switch type {
38 | case .Recent:
39 | if DonationProduct.store.isProductPurchased(DonationProduct.BuyMeACoffee) && self.recents.count > 0 {
40 | shouldSave = true
41 | data = NSKeyedArchiver.archivedData(withRootObject: self.recents) as AnyObject?
42 | } else {
43 | shouldSave = false
44 | }
45 | case .Favorite:
46 | if self.favorites.count > 0 {
47 | shouldSave = true
48 | data = NSKeyedArchiver.archivedData(withRootObject: self.favorites) as AnyObject?
49 | } else {
50 | shouldSave = false
51 | }
52 | }
53 |
54 | if shouldSave {
55 | UserDefaults.standard.set(data, forKey: type.rawValue)
56 | UserDefaults.standard.synchronize()
57 | print("\(type.rawValue) saved")
58 | }
59 | }
60 |
61 | func addRecentFile(_ file: RepoFile) {
62 | let ownerName = currentOwnerName ?? "Unknown"
63 | let repoName = currentRepoName ?? "Unknown"
64 | let recent = Recent(file: file, ownerName: ownerName, repoName: repoName)
65 | if recents.contains(recent) {
66 | if let index = recents.index(of: recent) {
67 | recents.remove(at: index)
68 | }
69 | }
70 | recents.insert(recent, at: 0)
71 | if recents.count <= maxCapacity {
72 | } else {
73 | recents.removeLast()
74 | }
75 | }
76 |
77 | func addFavoriteByFile(_ file: RepoFile) {
78 | let ownerName = currentOwnerName ?? "Unknown"
79 | let repoName = currentRepoName ?? "Unknown"
80 | let recent = Recent(file: file, ownerName: ownerName, repoName: repoName)
81 | if favorites.contains(recent) {
82 | if let index = favorites.index(of: recent) {
83 | favorites.remove(at: index)
84 | }
85 | }
86 | favorites.insert(recent, at: 0)
87 | Answers.logCustomEvent(withName: "favorite", customAttributes: ["from": "file"])
88 | }
89 |
90 | func addFavoriteByRecent(_ recent: Recent) {
91 | let favorite = recent
92 | if favorites.contains(favorite) {
93 | if let index = favorites.index(of: favorite) {
94 | favorites.remove(at: index)
95 | }
96 | }
97 | favorites.insert(favorite, at: 0)
98 | Answers.logCustomEvent(withName: "favorite", customAttributes: ["from": "recent"])
99 | }
100 |
101 | func removeFavoriteByRecent(_ recent: Recent) {
102 | assert(favorites.count > 0, "Favorites must not be empty")
103 | if let index = favorites.index(of: recent) {
104 | favorites.remove(at: index)
105 | }
106 | }
107 |
108 | func removeFavoriteByFile(_ file: RepoFile) {
109 | assert(favorites.count > 0, "Favorites must not be empty")
110 | var indexToDelete: Int = -1
111 | for (index, favorite) in favorites.enumerated() {
112 | if favorite.file == file {
113 | indexToDelete = index
114 | break
115 | }
116 | }
117 | if indexToDelete >= 0 {
118 | favorites.remove(at: indexToDelete)
119 | }
120 | }
121 | }
122 |
--------------------------------------------------------------------------------
/CodeReader/Model/Repo.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Repo.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/10.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import ObjectMapper
10 |
11 | class Repo: Mappable {
12 |
13 | var repoId: String?
14 | var name: String?
15 | var fullName: String?
16 | var owner: User?
17 | var description: String?
18 | var size: Int?
19 | var starsCount: Int?
20 | var watchersCount: Int?
21 | var language: String?
22 | var forksCount: Int?
23 | var createdDate: String?
24 | var pushedDate: String?
25 |
26 | required init?(map: Map) {
27 |
28 | }
29 |
30 | // Mappable
31 | func mapping(map: Map) {
32 | repoId <- map["id"]
33 | name <- map["name"]
34 | fullName <- map["full_name"]
35 | owner <- map["owner"]
36 | description <- map["description"]
37 | size <- map["size"]
38 | starsCount <- map["stargazers_count"]
39 | language <- map["language"]
40 | forksCount <- map["forks"]
41 | createdDate <- map["created_at"]
42 | pushedDate <- map["pushed_at"]
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/CodeReader/Model/RepoFile.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RepoFile.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/27.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import ObjectMapper
10 |
11 | let RepoFileNameKey = "repo_file_name"
12 | let RepoFileTypeKey = "repo_file_type"
13 | let RepoFilePathKey = "repo_file_path"
14 | let RepoFileDownloadURLKey = "repo_file_download_url"
15 | let RepoFileHTMLURLKey = "repo_file_html_url"
16 | let RepoFileAPIURLKey = "repo_file_api_url"
17 |
18 | class RepoFile: NSObject, Mappable {
19 | var name: String?
20 | var type: String?
21 | var path: String?
22 | var downloadURLString: String?
23 | var htmlURLString: String?
24 | var apiURLString: String?
25 |
26 | required init?(map: Map) {
27 |
28 | }
29 |
30 | required init?(coder aDecoder: NSCoder) {
31 | guard let name = aDecoder.decodeObject(forKey: RepoFileNameKey) as? String,
32 | let type = aDecoder.decodeObject(forKey: RepoFileTypeKey) as? String,
33 | let path = aDecoder.decodeObject(forKey: RepoFilePathKey) as? String,
34 | let downloadURLString = aDecoder.decodeObject(forKey: RepoFileDownloadURLKey) as? String,
35 | let htmlURLString = aDecoder.decodeObject(forKey: RepoFileHTMLURLKey) as? String,
36 | let apiURLString = aDecoder.decodeObject(forKey: RepoFileAPIURLKey) as? String
37 | else {
38 | return nil
39 | }
40 | self.name = name
41 | self.type = type
42 | self.path = path
43 | self.downloadURLString = downloadURLString
44 | self.htmlURLString = htmlURLString
45 | self.apiURLString = apiURLString
46 | }
47 |
48 | func mapping(map: Map) {
49 | name <- map["name"]
50 | type <- map["type"]
51 | path <- map["path"]
52 | downloadURLString <- map["download_url"]
53 | htmlURLString <- map["html_url"]
54 | apiURLString <- map["url"]
55 | }
56 |
57 |
58 |
59 |
60 | }
61 |
62 | extension RepoFile: NSCoding {
63 |
64 | override func isEqual(_ object: Any?) -> Bool {
65 | if let anotherRepoFile = object as? RepoFile {
66 | return self.htmlURLString == anotherRepoFile.htmlURLString
67 | }
68 | return false
69 | }
70 |
71 | func encode(with aCoder: NSCoder) {
72 | aCoder.encode(name, forKey: RepoFileNameKey)
73 | aCoder.encode(type, forKey: RepoFileTypeKey)
74 | aCoder.encode(path, forKey: RepoFilePathKey)
75 | aCoder.encode(downloadURLString, forKey: RepoFileDownloadURLKey)
76 | aCoder.encode(htmlURLString, forKey: RepoFileHTMLURLKey)
77 | aCoder.encode(apiURLString, forKey: RepoFileAPIURLKey)
78 | }
79 |
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/CodeReader/Model/SearchRepoResponse.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SearchRepoResponse.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/10.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ObjectMapper
11 |
12 | class SearchRepoResponse: Mappable {
13 | var totalCount: Int?
14 | var items: [Repo]?
15 |
16 | required init?(map: Map) {
17 |
18 | }
19 |
20 | func mapping(map: Map) {
21 | totalCount <- map["total_count"]
22 | items <- map["items"]
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/CodeReader/Model/Theme.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Theme.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/11.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class Theme {
12 | var name: String!
13 | var colors = [UIColor?]()
14 | var isPurchased: Bool = true
15 | required init(name: String, purchased: Bool = false) {
16 | self.name = name
17 | self.isPurchased = purchased
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/CodeReader/Model/User.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/2.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import ObjectMapper
11 |
12 | /**
13 | User object for search result and bio page
14 | */
15 | struct User: Mappable {
16 |
17 | /** search info **/
18 | var loginName: String?
19 | var userId: String?
20 | var avatarURLString: String?
21 | var URLString: String?
22 | var reposURLString: String?
23 |
24 | /** bio info **/
25 | var username: String?
26 | var company: String?
27 | var blog: String?
28 | var location: String?
29 | var email: String?
30 | var bio: String?
31 | var publicReposCount: Int?
32 | var followersCount: Int?
33 | var followingCount: Int?
34 | var joinAtDate: Date?
35 |
36 |
37 | init() {
38 |
39 | }
40 |
41 | init?(map: Map) {
42 |
43 | }
44 |
45 | mutating func mapping(map: Map) {
46 | loginName <- map["login"]
47 | userId <- map["id"]
48 | avatarURLString <- map["avatar_url"]
49 | URLString <- map["url"]
50 | reposURLString <- map["repos_url"]
51 |
52 | username <- map["name"]
53 | company <- map["company"]
54 | blog <- map["blog"]
55 | location <- map["location"]
56 | email <- map["email"]
57 | bio <- map["bio"]
58 | publicReposCount <- map["public_repos"]
59 | followersCount <- map["followers"]
60 | followingCount <- map["following"]
61 | joinAtDate <- map["created_at"]
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/CodeReader/Themes/agate.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Agate by Taufik Nurrohman
3 | * ----------------------------------------------------
4 | *
5 | * #ade5fc
6 | * #a2fca2
7 | * #c6b4f0
8 | * #d36363
9 | * #fcc28c
10 | * #fc9b9b
11 | * #ffa
12 | * #fff
13 | * #333
14 | * #62c8f3
15 | * #888
16 | *
17 | */
18 |
19 | .hljs {
20 | display: block;
21 | overflow-x: auto;
22 | padding: 0.5em;
23 | background: #333;
24 | color: white;
25 | }
26 |
27 | .hljs-name,
28 | .hljs-strong {
29 | font-weight: bold;
30 | }
31 |
32 | .hljs-code,
33 | .hljs-emphasis {
34 | font-style: italic;
35 | }
36 |
37 | .hljs-tag {
38 | color: #62c8f3;
39 | }
40 |
41 | .hljs-variable,
42 | .hljs-template-variable,
43 | .hljs-selector-id,
44 | .hljs-selector-class {
45 | color: #ade5fc;
46 | }
47 |
48 | .hljs-string,
49 | .hljs-bullet {
50 | color: #a2fca2;
51 | }
52 |
53 | .hljs-type,
54 | .hljs-title,
55 | .hljs-section,
56 | .hljs-attribute,
57 | .hljs-quote,
58 | .hljs-built_in,
59 | .hljs-builtin-name {
60 | color: #ffa;
61 | }
62 |
63 | .hljs-number,
64 | .hljs-symbol,
65 | .hljs-bullet {
66 | color: #d36363;
67 | }
68 |
69 | .hljs-keyword,
70 | .hljs-selector-tag,
71 | .hljs-literal {
72 | color: #fcc28c;
73 | }
74 |
75 | .hljs-comment,
76 | .hljs-deletion,
77 | .hljs-code {
78 | color: #888;
79 | }
80 |
81 | .hljs-regexp,
82 | .hljs-link {
83 | color: #c6b4f0;
84 | }
85 |
86 | .hljs-meta {
87 | color: #fc9b9b;
88 | }
89 |
90 | .hljs-deletion {
91 | background-color: #fc9b9b;
92 | color: #333;
93 | }
94 |
95 | .hljs-addition {
96 | background-color: #a2fca2;
97 | color: #333;
98 | }
99 |
100 | .hljs a {
101 | color: inherit;
102 | }
103 |
104 | .hljs a:focus,
105 | .hljs a:hover {
106 | color: inherit;
107 | text-decoration: underline;
108 | }
109 |
--------------------------------------------------------------------------------
/CodeReader/Themes/androidstudio.css:
--------------------------------------------------------------------------------
1 | /*
2 | Date: 24 Fev 2015
3 | Author: Pedro Oliveira
4 | */
5 |
6 | .hljs {
7 | color: #a9b7c6;
8 | background: #282b2e;
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | }
13 |
14 | .hljs-number,
15 | .hljs-literal,
16 | .hljs-symbol,
17 | .hljs-bullet {
18 | color: #6897BB;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-deletion {
24 | color: #cc7832;
25 | }
26 |
27 | .hljs-variable,
28 | .hljs-template-variable,
29 | .hljs-link {
30 | color: #629755;
31 | }
32 |
33 | .hljs-comment,
34 | .hljs-quote {
35 | color: #808080;
36 | }
37 |
38 | .hljs-meta {
39 | color: #bbb529;
40 | }
41 |
42 | .hljs-string,
43 | .hljs-attribute,
44 | .hljs-addition {
45 | color: #6A8759;
46 | }
47 |
48 | .hljs-section,
49 | .hljs-title,
50 | .hljs-type {
51 | color: #ffc66d;
52 | }
53 |
54 | .hljs-name,
55 | .hljs-selector-id,
56 | .hljs-selector-class {
57 | color: #e8bf6a;
58 | }
59 |
60 | .hljs-emphasis {
61 | font-style: italic;
62 | }
63 |
64 | .hljs-strong {
65 | font-weight: bold;
66 | }
67 |
--------------------------------------------------------------------------------
/CodeReader/Themes/arduino-light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Arduino® Light Theme - Stefania Mellai
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #FFFFFF;
12 | }
13 |
14 | .hljs,
15 | .hljs-subst {
16 | color: #434f54;
17 | }
18 |
19 | .hljs-keyword,
20 | .hljs-attribute,
21 | .hljs-selector-tag,
22 | .hljs-doctag,
23 | .hljs-name {
24 | color: #00979D;
25 | }
26 |
27 | .hljs-built_in,
28 | .hljs-literal,
29 | .hljs-bullet,
30 | .hljs-code,
31 | .hljs-addition {
32 | color: #D35400;
33 | }
34 |
35 | .hljs-regexp,
36 | .hljs-symbol,
37 | .hljs-variable,
38 | .hljs-template-variable,
39 | .hljs-link,
40 | .hljs-selector-attr,
41 | .hljs-selector-pseudo {
42 | color: #00979D;
43 | }
44 |
45 | .hljs-type,
46 | .hljs-string,
47 | .hljs-selector-id,
48 | .hljs-selector-class,
49 | .hljs-quote,
50 | .hljs-template-tag,
51 | .hljs-deletion {
52 | color: #005C5F;
53 | }
54 |
55 | .hljs-title,
56 | .hljs-section {
57 | color: #880000;
58 | font-weight: bold;
59 | }
60 |
61 | .hljs-comment {
62 | color: rgba(149,165,166,.8);
63 | }
64 |
65 | .hljs-meta-keyword {
66 | color: #728E00;
67 | }
68 |
69 | .hljs-meta {
70 | color: #728E00;
71 | color: #434f54;
72 | }
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
78 | .hljs-strong {
79 | font-weight: bold;
80 | }
81 |
82 | .hljs-function {
83 | color: #728E00;
84 | }
85 |
86 | .hljs-number {
87 | color: #8A7B52;
88 | }
89 |
--------------------------------------------------------------------------------
/CodeReader/Themes/arta.css:
--------------------------------------------------------------------------------
1 | /*
2 | Date: 17.V.2011
3 | Author: pumbur
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: #222;
11 | }
12 |
13 | .hljs,
14 | .hljs-subst {
15 | color: #aaa;
16 | }
17 |
18 | .hljs-section {
19 | color: #fff;
20 | }
21 |
22 | .hljs-comment,
23 | .hljs-quote,
24 | .hljs-meta {
25 | color: #444;
26 | }
27 |
28 | .hljs-string,
29 | .hljs-symbol,
30 | .hljs-bullet,
31 | .hljs-regexp {
32 | color: #ffcc33;
33 | }
34 |
35 | .hljs-number,
36 | .hljs-addition {
37 | color: #00cc66;
38 | }
39 |
40 | .hljs-built_in,
41 | .hljs-builtin-name,
42 | .hljs-literal,
43 | .hljs-type,
44 | .hljs-template-variable,
45 | .hljs-attribute,
46 | .hljs-link {
47 | color: #32aaee;
48 | }
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-name,
53 | .hljs-selector-id,
54 | .hljs-selector-class {
55 | color: #6644aa;
56 | }
57 |
58 | .hljs-title,
59 | .hljs-variable,
60 | .hljs-deletion,
61 | .hljs-template-tag {
62 | color: #bb1166;
63 | }
64 |
65 | .hljs-section,
66 | .hljs-doctag,
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
71 | .hljs-emphasis {
72 | font-style: italic;
73 | }
74 |
--------------------------------------------------------------------------------
/CodeReader/Themes/ascetic.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Original style from softwaremaniacs.org (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: white;
12 | color: black;
13 | }
14 |
15 | .hljs-string,
16 | .hljs-variable,
17 | .hljs-template-variable,
18 | .hljs-symbol,
19 | .hljs-bullet,
20 | .hljs-section,
21 | .hljs-addition,
22 | .hljs-attribute,
23 | .hljs-link {
24 | color: #888;
25 | }
26 |
27 | .hljs-comment,
28 | .hljs-quote,
29 | .hljs-meta,
30 | .hljs-deletion {
31 | color: #ccc;
32 | }
33 |
34 | .hljs-keyword,
35 | .hljs-selector-tag,
36 | .hljs-section,
37 | .hljs-name,
38 | .hljs-type,
39 | .hljs-strong {
40 | font-weight: bold;
41 | }
42 |
43 | .hljs-emphasis {
44 | font-style: italic;
45 | }
46 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-cave-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Cave Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Cave Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7e7887;
9 | }
10 |
11 | /* Atelier-Cave Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-regexp,
16 | .hljs-link,
17 | .hljs-tag,
18 | .hljs-name,
19 | .hljs-selector-id,
20 | .hljs-selector-class {
21 | color: #be4678;
22 | }
23 |
24 | /* Atelier-Cave Orange */
25 | .hljs-number,
26 | .hljs-meta,
27 | .hljs-built_in,
28 | .hljs-builtin-name,
29 | .hljs-literal,
30 | .hljs-type,
31 | .hljs-params {
32 | color: #aa573c;
33 | }
34 |
35 | /* Atelier-Cave Green */
36 | .hljs-string,
37 | .hljs-symbol,
38 | .hljs-bullet {
39 | color: #2a9292;
40 | }
41 |
42 | /* Atelier-Cave Blue */
43 | .hljs-title,
44 | .hljs-section {
45 | color: #576ddb;
46 | }
47 |
48 | /* Atelier-Cave Purple */
49 | .hljs-keyword,
50 | .hljs-selector-tag {
51 | color: #955ae7;
52 | }
53 |
54 | .hljs-deletion,
55 | .hljs-addition {
56 | color: #19171c;
57 | display: inline-block;
58 | width: 100%;
59 | }
60 |
61 | .hljs-deletion {
62 | background-color: #be4678;
63 | }
64 |
65 | .hljs-addition {
66 | background-color: #2a9292;
67 | }
68 |
69 | .hljs {
70 | display: block;
71 | overflow-x: auto;
72 | background: #19171c;
73 | color: #8b8792;
74 | padding: 0.5em;
75 | }
76 |
77 | .hljs-emphasis {
78 | font-style: italic;
79 | }
80 |
81 | .hljs-strong {
82 | font-weight: bold;
83 | }
84 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-cave-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Cave Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/cave) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Cave Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #655f6d;
9 | }
10 |
11 | /* Atelier-Cave Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-name,
21 | .hljs-selector-id,
22 | .hljs-selector-class {
23 | color: #be4678;
24 | }
25 |
26 | /* Atelier-Cave Orange */
27 | .hljs-number,
28 | .hljs-meta,
29 | .hljs-built_in,
30 | .hljs-builtin-name,
31 | .hljs-literal,
32 | .hljs-type,
33 | .hljs-params {
34 | color: #aa573c;
35 | }
36 |
37 | /* Atelier-Cave Green */
38 | .hljs-string,
39 | .hljs-symbol,
40 | .hljs-bullet {
41 | color: #2a9292;
42 | }
43 |
44 | /* Atelier-Cave Blue */
45 | .hljs-title,
46 | .hljs-section {
47 | color: #576ddb;
48 | }
49 |
50 | /* Atelier-Cave Purple */
51 | .hljs-keyword,
52 | .hljs-selector-tag {
53 | color: #955ae7;
54 | }
55 |
56 | .hljs-deletion,
57 | .hljs-addition {
58 | color: #19171c;
59 | display: inline-block;
60 | width: 100%;
61 | }
62 |
63 | .hljs-deletion {
64 | background-color: #be4678;
65 | }
66 |
67 | .hljs-addition {
68 | background-color: #2a9292;
69 | }
70 |
71 | .hljs {
72 | display: block;
73 | overflow-x: auto;
74 | background: #efecf4;
75 | color: #585260;
76 | padding: 0.5em;
77 | }
78 |
79 | .hljs-emphasis {
80 | font-style: italic;
81 | }
82 |
83 | .hljs-strong {
84 | font-weight: bold;
85 | }
86 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-dune-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Dune Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Dune Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #999580;
9 | }
10 |
11 | /* Atelier-Dune Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d73737;
23 | }
24 |
25 | /* Atelier-Dune Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b65611;
34 | }
35 |
36 | /* Atelier-Dune Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #60ac39;
41 | }
42 |
43 | /* Atelier-Dune Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #6684e1;
47 | }
48 |
49 | /* Atelier-Dune Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #b854d4;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #20201d;
59 | color: #a6a28c;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-dune-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Dune Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/dune) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Dune Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7d7a68;
9 | }
10 |
11 | /* Atelier-Dune Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d73737;
23 | }
24 |
25 | /* Atelier-Dune Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b65611;
34 | }
35 |
36 | /* Atelier-Dune Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #60ac39;
41 | }
42 |
43 | /* Atelier-Dune Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #6684e1;
47 | }
48 |
49 | /* Atelier-Dune Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #b854d4;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #fefbec;
59 | color: #6e6b5e;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-estuary-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Estuary Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Estuary Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #878573;
9 | }
10 |
11 | /* Atelier-Estuary Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ba6236;
23 | }
24 |
25 | /* Atelier-Estuary Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #ae7313;
34 | }
35 |
36 | /* Atelier-Estuary Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7d9726;
41 | }
42 |
43 | /* Atelier-Estuary Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #36a166;
47 | }
48 |
49 | /* Atelier-Estuary Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #5f9182;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #22221b;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ba6236;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #7d9726;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #22221b;
74 | color: #929181;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-estuary-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Estuary Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/estuary) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Estuary Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #6c6b5a;
9 | }
10 |
11 | /* Atelier-Estuary Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ba6236;
23 | }
24 |
25 | /* Atelier-Estuary Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #ae7313;
34 | }
35 |
36 | /* Atelier-Estuary Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7d9726;
41 | }
42 |
43 | /* Atelier-Estuary Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #36a166;
47 | }
48 |
49 | /* Atelier-Estuary Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #5f9182;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #22221b;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ba6236;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #7d9726;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #f4f3ec;
74 | color: #5f5e4e;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-forest-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Forest Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Forest Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #9c9491;
9 | }
10 |
11 | /* Atelier-Forest Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #f22c40;
23 | }
24 |
25 | /* Atelier-Forest Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #df5320;
34 | }
35 |
36 | /* Atelier-Forest Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7b9726;
41 | }
42 |
43 | /* Atelier-Forest Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #407ee7;
47 | }
48 |
49 | /* Atelier-Forest Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6666ea;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #1b1918;
59 | color: #a8a19f;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-forest-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Forest Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/forest) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Forest Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #766e6b;
9 | }
10 |
11 | /* Atelier-Forest Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #f22c40;
23 | }
24 |
25 | /* Atelier-Forest Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #df5320;
34 | }
35 |
36 | /* Atelier-Forest Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #7b9726;
41 | }
42 |
43 | /* Atelier-Forest Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #407ee7;
47 | }
48 |
49 | /* Atelier-Forest Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6666ea;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f1efee;
59 | color: #68615e;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-heath-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Heath Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Heath Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #9e8f9e;
9 | }
10 |
11 | /* Atelier-Heath Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca402b;
23 | }
24 |
25 | /* Atelier-Heath Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #a65926;
34 | }
35 |
36 | /* Atelier-Heath Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #918b3b;
41 | }
42 |
43 | /* Atelier-Heath Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #516aec;
47 | }
48 |
49 | /* Atelier-Heath Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #7b59c0;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #1b181b;
59 | color: #ab9bab;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-heath-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Heath Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/heath) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Heath Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #776977;
9 | }
10 |
11 | /* Atelier-Heath Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca402b;
23 | }
24 |
25 | /* Atelier-Heath Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #a65926;
34 | }
35 |
36 | /* Atelier-Heath Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #918b3b;
41 | }
42 |
43 | /* Atelier-Heath Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #516aec;
47 | }
48 |
49 | /* Atelier-Heath Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #7b59c0;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f7f3f7;
59 | color: #695d69;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-lakeside-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Lakeside Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Lakeside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7195a8;
9 | }
10 |
11 | /* Atelier-Lakeside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d22d72;
23 | }
24 |
25 | /* Atelier-Lakeside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #935c25;
34 | }
35 |
36 | /* Atelier-Lakeside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #568c3b;
41 | }
42 |
43 | /* Atelier-Lakeside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #257fad;
47 | }
48 |
49 | /* Atelier-Lakeside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6b6bb8;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #161b1d;
59 | color: #7ea2b4;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-lakeside-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Lakeside Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/lakeside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Lakeside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #5a7b8c;
9 | }
10 |
11 | /* Atelier-Lakeside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #d22d72;
23 | }
24 |
25 | /* Atelier-Lakeside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #935c25;
34 | }
35 |
36 | /* Atelier-Lakeside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #568c3b;
41 | }
42 |
43 | /* Atelier-Lakeside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #257fad;
47 | }
48 |
49 | /* Atelier-Lakeside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6b6bb8;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #ebf8ff;
59 | color: #516d7b;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-plateau-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Plateau Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Plateau Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #7e7777;
9 | }
10 |
11 | /* Atelier-Plateau Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca4949;
23 | }
24 |
25 | /* Atelier-Plateau Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b45a3c;
34 | }
35 |
36 | /* Atelier-Plateau Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #4b8b8b;
41 | }
42 |
43 | /* Atelier-Plateau Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #7272ca;
47 | }
48 |
49 | /* Atelier-Plateau Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #8464c4;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #1b1818;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ca4949;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #4b8b8b;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #1b1818;
74 | color: #8a8585;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-plateau-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Plateau Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/plateau) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Plateau Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #655d5d;
9 | }
10 |
11 | /* Atelier-Plateau Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #ca4949;
23 | }
24 |
25 | /* Atelier-Plateau Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #b45a3c;
34 | }
35 |
36 | /* Atelier-Plateau Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #4b8b8b;
41 | }
42 |
43 | /* Atelier-Plateau Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #7272ca;
47 | }
48 |
49 | /* Atelier-Plateau Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #8464c4;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #1b1818;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #ca4949;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #4b8b8b;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #f4ecec;
74 | color: #585050;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-savanna-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Savanna Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Savanna Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #78877d;
9 | }
10 |
11 | /* Atelier-Savanna Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #b16139;
23 | }
24 |
25 | /* Atelier-Savanna Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #9f713c;
34 | }
35 |
36 | /* Atelier-Savanna Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #489963;
41 | }
42 |
43 | /* Atelier-Savanna Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #478c90;
47 | }
48 |
49 | /* Atelier-Savanna Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #55859b;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #171c19;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #b16139;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #489963;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #171c19;
74 | color: #87928a;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-savanna-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Savanna Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/savanna) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Savanna Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #5f6d64;
9 | }
10 |
11 | /* Atelier-Savanna Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #b16139;
23 | }
24 |
25 | /* Atelier-Savanna Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #9f713c;
34 | }
35 |
36 | /* Atelier-Savanna Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #489963;
41 | }
42 |
43 | /* Atelier-Savanna Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #478c90;
47 | }
48 |
49 | /* Atelier-Savanna Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #55859b;
53 | }
54 |
55 | .hljs-deletion,
56 | .hljs-addition {
57 | color: #171c19;
58 | display: inline-block;
59 | width: 100%;
60 | }
61 |
62 | .hljs-deletion {
63 | background-color: #b16139;
64 | }
65 |
66 | .hljs-addition {
67 | background-color: #489963;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | overflow-x: auto;
73 | background: #ecf4ee;
74 | color: #526057;
75 | padding: 0.5em;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-seaside-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Seaside Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Seaside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #809980;
9 | }
10 |
11 | /* Atelier-Seaside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #e6193c;
23 | }
24 |
25 | /* Atelier-Seaside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #87711d;
34 | }
35 |
36 | /* Atelier-Seaside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #29a329;
41 | }
42 |
43 | /* Atelier-Seaside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d62f5;
47 | }
48 |
49 | /* Atelier-Seaside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #ad2bee;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #131513;
59 | color: #8ca68c;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-seaside-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Seaside Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/seaside) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Seaside Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #687d68;
9 | }
10 |
11 | /* Atelier-Seaside Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #e6193c;
23 | }
24 |
25 | /* Atelier-Seaside Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #87711d;
34 | }
35 |
36 | /* Atelier-Seaside Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #29a329;
41 | }
42 |
43 | /* Atelier-Seaside Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d62f5;
47 | }
48 |
49 | /* Atelier-Seaside Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #ad2bee;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f4fbf4;
59 | color: #5e6e5e;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-sulphurpool-dark.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Sulphurpool Dark - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Sulphurpool Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #898ea4;
9 | }
10 |
11 | /* Atelier-Sulphurpool Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #c94922;
23 | }
24 |
25 | /* Atelier-Sulphurpool Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #c76b29;
34 | }
35 |
36 | /* Atelier-Sulphurpool Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #ac9739;
41 | }
42 |
43 | /* Atelier-Sulphurpool Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d8fd1;
47 | }
48 |
49 | /* Atelier-Sulphurpool Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6679cc;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #202746;
59 | color: #979db4;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/atelier-sulphurpool-light.css:
--------------------------------------------------------------------------------
1 | /* Base16 Atelier Sulphurpool Light - Theme */
2 | /* by Bram de Haan (http://atelierbram.github.io/syntax-highlighting/atelier-schemes/sulphurpool) */
3 | /* Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) */
4 |
5 | /* Atelier-Sulphurpool Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #6b7394;
9 | }
10 |
11 | /* Atelier-Sulphurpool Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-attribute,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-regexp,
18 | .hljs-link,
19 | .hljs-name,
20 | .hljs-selector-id,
21 | .hljs-selector-class {
22 | color: #c94922;
23 | }
24 |
25 | /* Atelier-Sulphurpool Orange */
26 | .hljs-number,
27 | .hljs-meta,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params {
33 | color: #c76b29;
34 | }
35 |
36 | /* Atelier-Sulphurpool Green */
37 | .hljs-string,
38 | .hljs-symbol,
39 | .hljs-bullet {
40 | color: #ac9739;
41 | }
42 |
43 | /* Atelier-Sulphurpool Blue */
44 | .hljs-title,
45 | .hljs-section {
46 | color: #3d8fd1;
47 | }
48 |
49 | /* Atelier-Sulphurpool Purple */
50 | .hljs-keyword,
51 | .hljs-selector-tag {
52 | color: #6679cc;
53 | }
54 |
55 | .hljs {
56 | display: block;
57 | overflow-x: auto;
58 | background: #f5f7ff;
59 | color: #5e6687;
60 | padding: 0.5em;
61 | }
62 |
63 | .hljs-emphasis {
64 | font-style: italic;
65 | }
66 |
67 | .hljs-strong {
68 | font-weight: bold;
69 | }
70 |
--------------------------------------------------------------------------------
/CodeReader/Themes/brown-paper.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Brown Paper style from goldblog.com.ua (c) Zaripov Yura
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background:#b7a68e url(./brown-papersq.png);
12 | }
13 |
14 | .hljs-keyword,
15 | .hljs-selector-tag,
16 | .hljs-literal {
17 | color:#005599;
18 | font-weight:bold;
19 | }
20 |
21 | .hljs,
22 | .hljs-subst {
23 | color: #363c69;
24 | }
25 |
26 | .hljs-string,
27 | .hljs-title,
28 | .hljs-section,
29 | .hljs-type,
30 | .hljs-attribute,
31 | .hljs-symbol,
32 | .hljs-bullet,
33 | .hljs-built_in,
34 | .hljs-addition,
35 | .hljs-variable,
36 | .hljs-template-tag,
37 | .hljs-template-variable,
38 | .hljs-link,
39 | .hljs-name {
40 | color: #2c009f;
41 | }
42 |
43 | .hljs-comment,
44 | .hljs-quote,
45 | .hljs-meta,
46 | .hljs-deletion {
47 | color: #802022;
48 | }
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-literal,
53 | .hljs-doctag,
54 | .hljs-title,
55 | .hljs-section,
56 | .hljs-type,
57 | .hljs-name,
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
62 | .hljs-emphasis {
63 | font-style: italic;
64 | }
65 |
--------------------------------------------------------------------------------
/CodeReader/Themes/brown-papersq.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Themes/brown-papersq.png
--------------------------------------------------------------------------------
/CodeReader/Themes/codepen-embed.css:
--------------------------------------------------------------------------------
1 | /*
2 | codepen.io Embed Theme
3 | Author: Justin Perry
4 | Original theme - https://github.com/chriskempson/tomorrow-theme
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #222;
12 | color: #fff;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #777;
18 | }
19 |
20 | .hljs-variable,
21 | .hljs-template-variable,
22 | .hljs-tag,
23 | .hljs-regexp,
24 | .hljs-meta,
25 | .hljs-number,
26 | .hljs-built_in,
27 | .hljs-builtin-name,
28 | .hljs-literal,
29 | .hljs-params,
30 | .hljs-symbol,
31 | .hljs-bullet,
32 | .hljs-link,
33 | .hljs-deletion {
34 | color: #ab875d;
35 | }
36 |
37 | .hljs-section,
38 | .hljs-title,
39 | .hljs-name,
40 | .hljs-selector-id,
41 | .hljs-selector-class,
42 | .hljs-type,
43 | .hljs-attribute {
44 | color: #9b869b;
45 | }
46 |
47 | .hljs-string,
48 | .hljs-keyword,
49 | .hljs-selector-tag,
50 | .hljs-addition {
51 | color: #8f9c6c;
52 | }
53 |
54 | .hljs-emphasis {
55 | font-style: italic;
56 | }
57 |
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
--------------------------------------------------------------------------------
/CodeReader/Themes/color-brewer.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Colorbrewer theme
4 | Original: https://github.com/mbostock/colorbrewer-theme (c) Mike Bostock
5 | Ported by Fabrício Tavares de Oliveira
6 |
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | padding: 0.5em;
13 | background: #fff;
14 | }
15 |
16 | .hljs,
17 | .hljs-subst {
18 | color: #000;
19 | }
20 |
21 | .hljs-string,
22 | .hljs-meta,
23 | .hljs-symbol,
24 | .hljs-template-tag,
25 | .hljs-template-variable,
26 | .hljs-addition {
27 | color: #756bb1;
28 | }
29 |
30 | .hljs-comment,
31 | .hljs-quote {
32 | color: #636363;
33 | }
34 |
35 | .hljs-number,
36 | .hljs-regexp,
37 | .hljs-literal,
38 | .hljs-bullet,
39 | .hljs-link {
40 | color: #31a354;
41 | }
42 |
43 | .hljs-deletion,
44 | .hljs-variable {
45 | color: #88f;
46 | }
47 |
48 |
49 |
50 | .hljs-keyword,
51 | .hljs-selector-tag,
52 | .hljs-title,
53 | .hljs-section,
54 | .hljs-built_in,
55 | .hljs-doctag,
56 | .hljs-type,
57 | .hljs-tag,
58 | .hljs-name,
59 | .hljs-selector-id,
60 | .hljs-selector-class,
61 | .hljs-strong {
62 | color: #3182bd;
63 | }
64 |
65 | .hljs-emphasis {
66 | font-style: italic;
67 | }
68 |
69 | .hljs-attribute {
70 | color: #e6550d;
71 | }
72 |
--------------------------------------------------------------------------------
/CodeReader/Themes/dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Dark style from softwaremaniacs.org (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #444;
12 | }
13 |
14 | .hljs-keyword,
15 | .hljs-selector-tag,
16 | .hljs-literal,
17 | .hljs-section,
18 | .hljs-link {
19 | color: white;
20 | }
21 |
22 | .hljs,
23 | .hljs-subst {
24 | color: #ddd;
25 | }
26 |
27 | .hljs-string,
28 | .hljs-title,
29 | .hljs-name,
30 | .hljs-type,
31 | .hljs-attribute,
32 | .hljs-symbol,
33 | .hljs-bullet,
34 | .hljs-built_in,
35 | .hljs-addition,
36 | .hljs-variable,
37 | .hljs-template-tag,
38 | .hljs-template-variable {
39 | color: #d88;
40 | }
41 |
42 | .hljs-comment,
43 | .hljs-quote,
44 | .hljs-deletion,
45 | .hljs-meta {
46 | color: #777;
47 | }
48 |
49 | .hljs-keyword,
50 | .hljs-selector-tag,
51 | .hljs-literal,
52 | .hljs-title,
53 | .hljs-section,
54 | .hljs-doctag,
55 | .hljs-type,
56 | .hljs-name,
57 | .hljs-strong {
58 | font-weight: bold;
59 | }
60 |
61 | .hljs-emphasis {
62 | font-style: italic;
63 | }
64 |
--------------------------------------------------------------------------------
/CodeReader/Themes/darkula.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Darkula color scheme from the JetBrains family of IDEs
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #2b2b2b;
13 | }
14 |
15 | .hljs {
16 | color: #bababa;
17 | }
18 |
19 | .hljs-strong,
20 | .hljs-emphasis {
21 | color: #a8a8a2;
22 | }
23 |
24 | .hljs-bullet,
25 | .hljs-quote,
26 | .hljs-link,
27 | .hljs-number,
28 | .hljs-regexp,
29 | .hljs-literal {
30 | color: #6896ba;
31 | }
32 |
33 | .hljs-code,
34 | .hljs-selector-class {
35 | color: #a6e22e;
36 | }
37 |
38 | .hljs-emphasis {
39 | font-style: italic;
40 | }
41 |
42 | .hljs-keyword,
43 | .hljs-selector-tag,
44 | .hljs-section,
45 | .hljs-attribute,
46 | .hljs-name,
47 | .hljs-variable {
48 | color: #cb7832;
49 | }
50 |
51 | .hljs-params {
52 | color: #b9b9b9;
53 | }
54 |
55 | .hljs-string,
56 | .hljs-subst,
57 | .hljs-type,
58 | .hljs-built_in,
59 | .hljs-builtin-name,
60 | .hljs-symbol,
61 | .hljs-selector-id,
62 | .hljs-selector-attr,
63 | .hljs-selector-pseudo,
64 | .hljs-template-tag,
65 | .hljs-template-variable,
66 | .hljs-addition {
67 | color: #e0c46c;
68 | }
69 |
70 | .hljs-comment,
71 | .hljs-deletion,
72 | .hljs-meta {
73 | color: #7f7f7f;
74 | }
75 |
--------------------------------------------------------------------------------
/CodeReader/Themes/default.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Original highlight.js style (c) Ivan Sagalaev
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #F0F0F0;
12 | }
13 |
14 |
15 | /* Base color: saturation 0; */
16 |
17 | .hljs,
18 | .hljs-subst {
19 | color: #444;
20 | }
21 |
22 | .hljs-comment {
23 | color: #888888;
24 | }
25 |
26 | .hljs-keyword,
27 | .hljs-attribute,
28 | .hljs-selector-tag,
29 | .hljs-meta-keyword,
30 | .hljs-doctag,
31 | .hljs-name {
32 | font-weight: bold;
33 | }
34 |
35 |
36 | /* User color: hue: 0 */
37 |
38 | .hljs-type,
39 | .hljs-string,
40 | .hljs-number,
41 | .hljs-selector-id,
42 | .hljs-selector-class,
43 | .hljs-quote,
44 | .hljs-template-tag,
45 | .hljs-deletion {
46 | color: #880000;
47 | }
48 |
49 | .hljs-title,
50 | .hljs-section {
51 | color: #880000;
52 | font-weight: bold;
53 | }
54 |
55 | .hljs-regexp,
56 | .hljs-symbol,
57 | .hljs-variable,
58 | .hljs-template-variable,
59 | .hljs-link,
60 | .hljs-selector-attr,
61 | .hljs-selector-pseudo {
62 | color: #BC6060;
63 | }
64 |
65 |
66 | /* Language color: hue: 90; */
67 |
68 | .hljs-literal {
69 | color: #78A960;
70 | }
71 |
72 | .hljs-built_in,
73 | .hljs-bullet,
74 | .hljs-code,
75 | .hljs-addition {
76 | color: #397300;
77 | }
78 |
79 |
80 | /* Meta color: hue: 200 */
81 |
82 | .hljs-meta {
83 | color: #1f7199;
84 | }
85 |
86 | .hljs-meta-string {
87 | color: #4d99bf;
88 | }
89 |
90 |
91 | /* Misc effects */
92 |
93 | .hljs-emphasis {
94 | font-style: italic;
95 | }
96 |
97 | .hljs-strong {
98 | font-weight: bold;
99 | }
100 |
--------------------------------------------------------------------------------
/CodeReader/Themes/docco.css:
--------------------------------------------------------------------------------
1 | /*
2 | Docco style used in http://jashkenas.github.com/docco/ converted by Simon Madine (@thingsinjars)
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | color: #000;
10 | background: #f8f8ff;
11 | }
12 |
13 | .hljs-comment,
14 | .hljs-quote {
15 | color: #408080;
16 | font-style: italic;
17 | }
18 |
19 | .hljs-keyword,
20 | .hljs-selector-tag,
21 | .hljs-literal,
22 | .hljs-subst {
23 | color: #954121;
24 | }
25 |
26 | .hljs-number {
27 | color: #40a070;
28 | }
29 |
30 | .hljs-string,
31 | .hljs-doctag {
32 | color: #219161;
33 | }
34 |
35 | .hljs-selector-id,
36 | .hljs-selector-class,
37 | .hljs-section,
38 | .hljs-type {
39 | color: #19469d;
40 | }
41 |
42 | .hljs-params {
43 | color: #00f;
44 | }
45 |
46 | .hljs-title {
47 | color: #458;
48 | font-weight: bold;
49 | }
50 |
51 | .hljs-tag,
52 | .hljs-name,
53 | .hljs-attribute {
54 | color: #000080;
55 | font-weight: normal;
56 | }
57 |
58 | .hljs-variable,
59 | .hljs-template-variable {
60 | color: #008080;
61 | }
62 |
63 | .hljs-regexp,
64 | .hljs-link {
65 | color: #b68;
66 | }
67 |
68 | .hljs-symbol,
69 | .hljs-bullet {
70 | color: #990073;
71 | }
72 |
73 | .hljs-built_in,
74 | .hljs-builtin-name {
75 | color: #0086b3;
76 | }
77 |
78 | .hljs-meta {
79 | color: #999;
80 | font-weight: bold;
81 | }
82 |
83 | .hljs-deletion {
84 | background: #fdd;
85 | }
86 |
87 | .hljs-addition {
88 | background: #dfd;
89 | }
90 |
91 | .hljs-emphasis {
92 | font-style: italic;
93 | }
94 |
95 | .hljs-strong {
96 | font-weight: bold;
97 | }
98 |
--------------------------------------------------------------------------------
/CodeReader/Themes/dracula.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Dracula Theme v1.2.0
4 |
5 | https://github.com/zenorocha/dracula-theme
6 |
7 | Copyright 2015, All rights reserved
8 |
9 | Code licensed under the MIT license
10 | http://zenorocha.mit-license.org
11 |
12 | @author Éverton Ribeiro
13 | @author Zeno Rocha
14 |
15 | */
16 |
17 | .hljs {
18 | display: block;
19 | overflow-x: auto;
20 | padding: 0.5em;
21 | background: #282a36;
22 | }
23 |
24 | .hljs-keyword,
25 | .hljs-selector-tag,
26 | .hljs-literal,
27 | .hljs-section,
28 | .hljs-link {
29 | color: #8be9fd;
30 | }
31 |
32 | .hljs-function .hljs-keyword {
33 | color: #ff79c6;
34 | }
35 |
36 | .hljs,
37 | .hljs-subst {
38 | color: #f8f8f2;
39 | }
40 |
41 | .hljs-string,
42 | .hljs-title,
43 | .hljs-name,
44 | .hljs-type,
45 | .hljs-attribute,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition,
49 | .hljs-variable,
50 | .hljs-template-tag,
51 | .hljs-template-variable {
52 | color: #f1fa8c;
53 | }
54 |
55 | .hljs-comment,
56 | .hljs-quote,
57 | .hljs-deletion,
58 | .hljs-meta {
59 | color: #6272a4;
60 | }
61 |
62 | .hljs-keyword,
63 | .hljs-selector-tag,
64 | .hljs-literal,
65 | .hljs-title,
66 | .hljs-section,
67 | .hljs-doctag,
68 | .hljs-type,
69 | .hljs-name,
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
--------------------------------------------------------------------------------
/CodeReader/Themes/far.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | FAR Style (c) MajestiC
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #000080;
12 | }
13 |
14 | .hljs,
15 | .hljs-subst {
16 | color: #0ff;
17 | }
18 |
19 | .hljs-string,
20 | .hljs-attribute,
21 | .hljs-symbol,
22 | .hljs-bullet,
23 | .hljs-built_in,
24 | .hljs-builtin-name,
25 | .hljs-template-tag,
26 | .hljs-template-variable,
27 | .hljs-addition {
28 | color: #ff0;
29 | }
30 |
31 | .hljs-keyword,
32 | .hljs-selector-tag,
33 | .hljs-section,
34 | .hljs-type,
35 | .hljs-name,
36 | .hljs-selector-id,
37 | .hljs-selector-class,
38 | .hljs-variable {
39 | color: #fff;
40 | }
41 |
42 | .hljs-comment,
43 | .hljs-quote,
44 | .hljs-doctag,
45 | .hljs-deletion {
46 | color: #888;
47 | }
48 |
49 | .hljs-number,
50 | .hljs-regexp,
51 | .hljs-literal,
52 | .hljs-link {
53 | color: #0f0;
54 | }
55 |
56 | .hljs-meta {
57 | color: #008080;
58 | }
59 |
60 | .hljs-keyword,
61 | .hljs-selector-tag,
62 | .hljs-title,
63 | .hljs-section,
64 | .hljs-name,
65 | .hljs-strong {
66 | font-weight: bold;
67 | }
68 |
69 | .hljs-emphasis {
70 | font-style: italic;
71 | }
72 |
--------------------------------------------------------------------------------
/CodeReader/Themes/foundation.css:
--------------------------------------------------------------------------------
1 | /*
2 | Description: Foundation 4 docs style for highlight.js
3 | Author: Dan Allen
4 | Website: http://foundation.zurb.com/docs/
5 | Version: 1.0
6 | Date: 2013-04-02
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | padding: 0.5em;
13 | background: #eee; color: black;
14 | }
15 |
16 | .hljs-link,
17 | .hljs-emphasis,
18 | .hljs-attribute,
19 | .hljs-addition {
20 | color: #070;
21 | }
22 |
23 | .hljs-emphasis {
24 | font-style: italic;
25 | }
26 |
27 | .hljs-strong,
28 | .hljs-string,
29 | .hljs-deletion {
30 | color: #d14;
31 | }
32 |
33 | .hljs-strong {
34 | font-weight: bold;
35 | }
36 |
37 | .hljs-quote,
38 | .hljs-comment {
39 | color: #998;
40 | font-style: italic;
41 | }
42 |
43 | .hljs-section,
44 | .hljs-title {
45 | color: #900;
46 | }
47 |
48 | .hljs-class .hljs-title,
49 | .hljs-type {
50 | color: #458;
51 | }
52 |
53 | .hljs-variable,
54 | .hljs-template-variable {
55 | color: #336699;
56 | }
57 |
58 | .hljs-bullet {
59 | color: #997700;
60 | }
61 |
62 | .hljs-meta {
63 | color: #3344bb;
64 | }
65 |
66 | .hljs-code,
67 | .hljs-number,
68 | .hljs-literal,
69 | .hljs-keyword,
70 | .hljs-selector-tag {
71 | color: #099;
72 | }
73 |
74 | .hljs-regexp {
75 | background-color: #fff0ff;
76 | color: #880088;
77 | }
78 |
79 | .hljs-symbol {
80 | color: #990073;
81 | }
82 |
83 | .hljs-tag,
84 | .hljs-name,
85 | .hljs-selector-id,
86 | .hljs-selector-class {
87 | color: #007700;
88 | }
89 |
--------------------------------------------------------------------------------
/CodeReader/Themes/github-gist.css:
--------------------------------------------------------------------------------
1 | /**
2 | * GitHub Gist Theme
3 | * Author : Louis Barranqueiro - https://github.com/LouisBarranqueiro
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | background: white;
9 | padding: 0.5em;
10 | color: #333333;
11 | overflow-x: auto;
12 | }
13 |
14 | .hljs-comment,
15 | .hljs-meta {
16 | color: #969896;
17 | }
18 |
19 | .hljs-string,
20 | .hljs-variable,
21 | .hljs-template-variable,
22 | .hljs-strong,
23 | .hljs-emphasis,
24 | .hljs-quote {
25 | color: #df5000;
26 | }
27 |
28 | .hljs-keyword,
29 | .hljs-selector-tag,
30 | .hljs-type {
31 | color: #a71d5d;
32 | }
33 |
34 | .hljs-literal,
35 | .hljs-symbol,
36 | .hljs-bullet,
37 | .hljs-attribute {
38 | color: #0086b3;
39 | }
40 |
41 | .hljs-section,
42 | .hljs-name {
43 | color: #63a35c;
44 | }
45 |
46 | .hljs-tag {
47 | color: #333333;
48 | }
49 |
50 | .hljs-title,
51 | .hljs-attr,
52 | .hljs-selector-id,
53 | .hljs-selector-class,
54 | .hljs-selector-attr,
55 | .hljs-selector-pseudo {
56 | color: #795da3;
57 | }
58 |
59 | .hljs-addition {
60 | color: #55a532;
61 | background-color: #eaffea;
62 | }
63 |
64 | .hljs-deletion {
65 | color: #bd2c00;
66 | background-color: #ffecec;
67 | }
68 |
69 | .hljs-link {
70 | text-decoration: underline;
71 | }
72 |
--------------------------------------------------------------------------------
/CodeReader/Themes/github.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | github.com style (c) Vasily Polovnyov
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | color: #333;
12 | background: #f8f8f8;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #998;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-subst {
24 | color: #333;
25 | font-weight: bold;
26 | }
27 |
28 | .hljs-number,
29 | .hljs-literal,
30 | .hljs-variable,
31 | .hljs-template-variable,
32 | .hljs-tag .hljs-attr {
33 | color: #008080;
34 | }
35 |
36 | .hljs-string,
37 | .hljs-doctag {
38 | color: #d14;
39 | }
40 |
41 | .hljs-title,
42 | .hljs-section,
43 | .hljs-selector-id {
44 | color: #900;
45 | font-weight: bold;
46 | }
47 |
48 | .hljs-subst {
49 | font-weight: normal;
50 | }
51 |
52 | .hljs-type,
53 | .hljs-class .hljs-title {
54 | color: #458;
55 | font-weight: bold;
56 | }
57 |
58 | .hljs-tag,
59 | .hljs-name,
60 | .hljs-attribute {
61 | color: #000080;
62 | font-weight: normal;
63 | }
64 |
65 | .hljs-regexp,
66 | .hljs-link {
67 | color: #009926;
68 | }
69 |
70 | .hljs-symbol,
71 | .hljs-bullet {
72 | color: #990073;
73 | }
74 |
75 | .hljs-built_in,
76 | .hljs-builtin-name {
77 | color: #0086b3;
78 | }
79 |
80 | .hljs-meta {
81 | color: #999;
82 | font-weight: bold;
83 | }
84 |
85 | .hljs-deletion {
86 | background: #fdd;
87 | }
88 |
89 | .hljs-addition {
90 | background: #dfd;
91 | }
92 |
93 | .hljs-emphasis {
94 | font-style: italic;
95 | }
96 |
97 | .hljs-strong {
98 | font-weight: bold;
99 | }
100 |
--------------------------------------------------------------------------------
/CodeReader/Themes/googlecode.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Google Code style (c) Aahan Krish
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: white;
12 | color: black;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #800;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-section,
23 | .hljs-title,
24 | .hljs-name {
25 | color: #008;
26 | }
27 |
28 | .hljs-variable,
29 | .hljs-template-variable {
30 | color: #660;
31 | }
32 |
33 | .hljs-string,
34 | .hljs-selector-attr,
35 | .hljs-selector-pseudo,
36 | .hljs-regexp {
37 | color: #080;
38 | }
39 |
40 | .hljs-literal,
41 | .hljs-symbol,
42 | .hljs-bullet,
43 | .hljs-meta,
44 | .hljs-number,
45 | .hljs-link {
46 | color: #066;
47 | }
48 |
49 | .hljs-title,
50 | .hljs-doctag,
51 | .hljs-type,
52 | .hljs-attr,
53 | .hljs-built_in,
54 | .hljs-builtin-name,
55 | .hljs-params {
56 | color: #606;
57 | }
58 |
59 | .hljs-attribute,
60 | .hljs-subst {
61 | color: #000;
62 | }
63 |
64 | .hljs-formula {
65 | background-color: #eee;
66 | font-style: italic;
67 | }
68 |
69 | .hljs-selector-id,
70 | .hljs-selector-class {
71 | color: #9B703F
72 | }
73 |
74 | .hljs-addition {
75 | background-color: #baeeba;
76 | }
77 |
78 | .hljs-deletion {
79 | background-color: #ffc8bd;
80 | }
81 |
82 | .hljs-doctag,
83 | .hljs-strong {
84 | font-weight: bold;
85 | }
86 |
87 | .hljs-emphasis {
88 | font-style: italic;
89 | }
90 |
--------------------------------------------------------------------------------
/CodeReader/Themes/grayscale.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | grayscale style (c) MY Sun
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | color: #333;
12 | background: #fff;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #777;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-subst {
24 | color: #333;
25 | font-weight: bold;
26 | }
27 |
28 | .hljs-number,
29 | .hljs-literal {
30 | color: #777;
31 | }
32 |
33 | .hljs-string,
34 | .hljs-doctag,
35 | .hljs-formula {
36 | color: #333;
37 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAAECAYAAACp8Z5+AAAAJ0lEQVQIW2O8e/fufwYGBgZBQUEQxcCIIfDu3Tuwivfv30NUoAsAALHpFMMLqZlPAAAAAElFTkSuQmCC) repeat;
38 | }
39 |
40 | .hljs-title,
41 | .hljs-section,
42 | .hljs-selector-id {
43 | color: #000;
44 | font-weight: bold;
45 | }
46 |
47 | .hljs-subst {
48 | font-weight: normal;
49 | }
50 |
51 | .hljs-class .hljs-title,
52 | .hljs-type,
53 | .hljs-name {
54 | color: #333;
55 | font-weight: bold;
56 | }
57 |
58 | .hljs-tag {
59 | color: #333;
60 | }
61 |
62 | .hljs-regexp {
63 | color: #333;
64 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAICAYAAADA+m62AAAAPUlEQVQYV2NkQAN37979r6yszIgujiIAU4RNMVwhuiQ6H6wQl3XI4oy4FMHcCJPHcDS6J2A2EqUQpJhohQDexSef15DBCwAAAABJRU5ErkJggg==) repeat;
65 | }
66 |
67 | .hljs-symbol,
68 | .hljs-bullet,
69 | .hljs-link {
70 | color: #000;
71 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAKElEQVQIW2NkQAO7d+/+z4gsBhJwdXVlhAvCBECKwIIwAbhKZBUwBQA6hBpm5efZsgAAAABJRU5ErkJggg==) repeat;
72 | }
73 |
74 | .hljs-built_in,
75 | .hljs-builtin-name {
76 | color: #000;
77 | text-decoration: underline;
78 | }
79 |
80 | .hljs-meta {
81 | color: #999;
82 | font-weight: bold;
83 | }
84 |
85 | .hljs-deletion {
86 | color: #fff;
87 | background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAADCAYAAABS3WWCAAAAE0lEQVQIW2MMDQ39zzhz5kwIAQAyxweWgUHd1AAAAABJRU5ErkJggg==) repeat;
88 | }
89 |
90 | .hljs-addition {
91 | color: #000;
92 | background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAkAAAAJCAYAAADgkQYQAAAALUlEQVQYV2N89+7dfwYk8P79ewZBQUFkIQZGOiu6e/cuiptQHAPl0NtNxAQBAM97Oejj3Dg7AAAAAElFTkSuQmCC) repeat;
93 | }
94 |
95 | .hljs-emphasis {
96 | font-style: italic;
97 | }
98 |
99 | .hljs-strong {
100 | font-weight: bold;
101 | }
102 |
--------------------------------------------------------------------------------
/CodeReader/Themes/gruvbox-dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Gruvbox style (dark) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox)
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #282828;
12 | }
13 |
14 | .hljs,
15 | .hljs-subst {
16 | color: #ebdbb2;
17 | }
18 |
19 | /* Gruvbox Red */
20 | .hljs-deletion,
21 | .hljs-formula,
22 | .hljs-keyword,
23 | .hljs-link,
24 | .hljs-selector-tag {
25 | color: #fb4934;
26 | }
27 |
28 | /* Gruvbox Blue */
29 | .hljs-built_in,
30 | .hljs-emphasis,
31 | .hljs-name,
32 | .hljs-quote,
33 | .hljs-strong,
34 | .hljs-title,
35 | .hljs-variable {
36 | color: #83a598;
37 | }
38 |
39 | /* Gruvbox Yellow */
40 | .hljs-attr,
41 | .hljs-params,
42 | .hljs-template-tag,
43 | .hljs-type {
44 | color: #fabd2f;
45 | }
46 |
47 | /* Gruvbox Purple */
48 | .hljs-builtin-name,
49 | .hljs-doctag,
50 | .hljs-literal,
51 | .hljs-number {
52 | color: #8f3f71;
53 | }
54 |
55 | /* Gruvbox Orange */
56 | .hljs-code,
57 | .hljs-meta,
58 | .hljs-regexp,
59 | .hljs-selector-id,
60 | .hljs-template-variable {
61 | color: #fe8019;
62 | }
63 |
64 | /* Gruvbox Green */
65 | .hljs-addition,
66 | .hljs-meta-string,
67 | .hljs-section,
68 | .hljs-selector-attr,
69 | .hljs-selector-class,
70 | .hljs-string,
71 | .hljs-symbol {
72 | color: #b8bb26;
73 | }
74 |
75 | /* Gruvbox Aqua */
76 | .hljs-attribute,
77 | .hljs-bullet,
78 | .hljs-class,
79 | .hljs-function,
80 | .hljs-function .hljs-keyword,
81 | .hljs-meta-keyword,
82 | .hljs-selector-pseudo,
83 | .hljs-tag {
84 | color: #8ec07c;
85 | }
86 |
87 | /* Gruvbox Gray */
88 | .hljs-comment {
89 | color: #928374;
90 | }
91 |
92 | /* Gruvbox Purple */
93 | .hljs-link_label,
94 | .hljs-literal,
95 | .hljs-number {
96 | color: #d3869b;
97 | }
98 |
99 | .hljs-comment,
100 | .hljs-emphasis {
101 | font-style: italic;
102 | }
103 |
104 | .hljs-section,
105 | .hljs-strong,
106 | .hljs-tag {
107 | font-weight: bold;
108 | }
109 |
--------------------------------------------------------------------------------
/CodeReader/Themes/gruvbox-light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Gruvbox style (light) (c) Pavel Pertsev (original style at https://github.com/morhetz/gruvbox)
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #fbf1c7;
12 | }
13 |
14 | .hljs,
15 | .hljs-subst {
16 | color: #3c3836;
17 | }
18 |
19 | /* Gruvbox Red */
20 | .hljs-deletion,
21 | .hljs-formula,
22 | .hljs-keyword,
23 | .hljs-link,
24 | .hljs-selector-tag {
25 | color: #9d0006;
26 | }
27 |
28 | /* Gruvbox Blue */
29 | .hljs-built_in,
30 | .hljs-emphasis,
31 | .hljs-name,
32 | .hljs-quote,
33 | .hljs-strong,
34 | .hljs-title,
35 | .hljs-variable {
36 | color: #076678;
37 | }
38 |
39 | /* Gruvbox Yellow */
40 | .hljs-attr,
41 | .hljs-params,
42 | .hljs-template-tag,
43 | .hljs-type {
44 | color: #b57614;
45 | }
46 |
47 | /* Gruvbox Purple */
48 | .hljs-builtin-name,
49 | .hljs-doctag,
50 | .hljs-literal,
51 | .hljs-number {
52 | color: #8f3f71;
53 | }
54 |
55 | /* Gruvbox Orange */
56 | .hljs-code,
57 | .hljs-meta,
58 | .hljs-regexp,
59 | .hljs-selector-id,
60 | .hljs-template-variable {
61 | color: #af3a03;
62 | }
63 |
64 | /* Gruvbox Green */
65 | .hljs-addition,
66 | .hljs-meta-string,
67 | .hljs-section,
68 | .hljs-selector-attr,
69 | .hljs-selector-class,
70 | .hljs-string,
71 | .hljs-symbol {
72 | color: #79740e;
73 | }
74 |
75 | /* Gruvbox Aqua */
76 | .hljs-attribute,
77 | .hljs-bullet,
78 | .hljs-class,
79 | .hljs-function,
80 | .hljs-function .hljs-keyword,
81 | .hljs-meta-keyword,
82 | .hljs-selector-pseudo,
83 | .hljs-tag {
84 | color: #427b58;
85 | }
86 |
87 | /* Gruvbox Gray */
88 | .hljs-comment {
89 | color: #928374;
90 | }
91 |
92 | /* Gruvbox Purple */
93 | .hljs-link_label,
94 | .hljs-literal,
95 | .hljs-number {
96 | color: #8f3f71;
97 | }
98 |
99 | .hljs-comment,
100 | .hljs-emphasis {
101 | font-style: italic;
102 | }
103 |
104 | .hljs-section,
105 | .hljs-strong,
106 | .hljs-tag {
107 | font-weight: bold;
108 | }
109 |
--------------------------------------------------------------------------------
/CodeReader/Themes/hopscotch.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Hopscotch
3 | * by Jan T. Sott
4 | * https://github.com/idleberg/Hopscotch
5 | *
6 | * This work is licensed under the Creative Commons CC0 1.0 Universal License
7 | */
8 |
9 | /* Comment */
10 | .hljs-comment,
11 | .hljs-quote {
12 | color: #989498;
13 | }
14 |
15 | /* Red */
16 | .hljs-variable,
17 | .hljs-template-variable,
18 | .hljs-attribute,
19 | .hljs-tag,
20 | .hljs-name,
21 | .hljs-selector-id,
22 | .hljs-selector-class,
23 | .hljs-regexp,
24 | .hljs-link,
25 | .hljs-deletion {
26 | color: #dd464c;
27 | }
28 |
29 | /* Orange */
30 | .hljs-number,
31 | .hljs-built_in,
32 | .hljs-builtin-name,
33 | .hljs-literal,
34 | .hljs-type,
35 | .hljs-params {
36 | color: #fd8b19;
37 | }
38 |
39 | /* Yellow */
40 | .hljs-class .hljs-title {
41 | color: #fdcc59;
42 | }
43 |
44 | /* Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #8fc13e;
50 | }
51 |
52 | /* Aqua */
53 | .hljs-meta {
54 | color: #149b93;
55 | }
56 |
57 | /* Blue */
58 | .hljs-function,
59 | .hljs-section,
60 | .hljs-title {
61 | color: #1290bf;
62 | }
63 |
64 | /* Purple */
65 | .hljs-keyword,
66 | .hljs-selector-tag {
67 | color: #c85e7c;
68 | }
69 |
70 | .hljs {
71 | display: block;
72 | background: #322931;
73 | color: #b9b5b8;
74 | padding: 0.5em;
75 | }
76 |
77 | .hljs-emphasis {
78 | font-style: italic;
79 | }
80 |
81 | .hljs-strong {
82 | font-weight: bold;
83 | }
84 |
--------------------------------------------------------------------------------
/CodeReader/Themes/hybrid.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | vim-hybrid theme by w0ng (https://github.com/w0ng/vim-hybrid)
4 |
5 | */
6 |
7 | /*background color*/
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #1d1f21;
13 | }
14 |
15 | /*selection color*/
16 | .hljs::selection,
17 | .hljs span::selection {
18 | background: #373b41;
19 | }
20 |
21 | .hljs::-moz-selection,
22 | .hljs span::-moz-selection {
23 | background: #373b41;
24 | }
25 |
26 | /*foreground color*/
27 | .hljs {
28 | color: #c5c8c6;
29 | }
30 |
31 | /*color: fg_yellow*/
32 | .hljs-title,
33 | .hljs-name {
34 | color: #f0c674;
35 | }
36 |
37 | /*color: fg_comment*/
38 | .hljs-comment,
39 | .hljs-meta,
40 | .hljs-meta .hljs-keyword {
41 | color: #707880;
42 | }
43 |
44 | /*color: fg_red*/
45 | .hljs-number,
46 | .hljs-symbol,
47 | .hljs-literal,
48 | .hljs-deletion,
49 | .hljs-link {
50 | color: #cc6666
51 | }
52 |
53 | /*color: fg_green*/
54 | .hljs-string,
55 | .hljs-doctag,
56 | .hljs-addition,
57 | .hljs-regexp,
58 | .hljs-selector-attr,
59 | .hljs-selector-pseudo {
60 | color: #b5bd68;
61 | }
62 |
63 | /*color: fg_purple*/
64 | .hljs-attribute,
65 | .hljs-code,
66 | .hljs-selector-id {
67 | color: #b294bb;
68 | }
69 |
70 | /*color: fg_blue*/
71 | .hljs-keyword,
72 | .hljs-selector-tag,
73 | .hljs-bullet,
74 | .hljs-tag {
75 | color: #81a2be;
76 | }
77 |
78 | /*color: fg_aqua*/
79 | .hljs-subst,
80 | .hljs-variable,
81 | .hljs-template-tag,
82 | .hljs-template-variable {
83 | color: #8abeb7;
84 | }
85 |
86 | /*color: fg_orange*/
87 | .hljs-type,
88 | .hljs-built_in,
89 | .hljs-builtin-name,
90 | .hljs-quote,
91 | .hljs-section,
92 | .hljs-selector-class {
93 | color: #de935f;
94 | }
95 |
96 | .hljs-emphasis {
97 | font-style: italic;
98 | }
99 |
100 | .hljs-strong {
101 | font-weight: bold;
102 | }
103 |
--------------------------------------------------------------------------------
/CodeReader/Themes/idea.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Intellij Idea-like styling (c) Vasily Polovnyov
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | color: #000;
12 | background: #fff;
13 | }
14 |
15 | .hljs-subst,
16 | .hljs-title {
17 | font-weight: normal;
18 | color: #000;
19 | }
20 |
21 | .hljs-comment,
22 | .hljs-quote {
23 | color: #808080;
24 | font-style: italic;
25 | }
26 |
27 | .hljs-meta {
28 | color: #808000;
29 | }
30 |
31 | .hljs-tag {
32 | background: #efefef;
33 | }
34 |
35 | .hljs-section,
36 | .hljs-name,
37 | .hljs-literal,
38 | .hljs-keyword,
39 | .hljs-selector-tag,
40 | .hljs-type,
41 | .hljs-selector-id,
42 | .hljs-selector-class {
43 | font-weight: bold;
44 | color: #000080;
45 | }
46 |
47 | .hljs-attribute,
48 | .hljs-number,
49 | .hljs-regexp,
50 | .hljs-link {
51 | font-weight: bold;
52 | color: #0000ff;
53 | }
54 |
55 | .hljs-number,
56 | .hljs-regexp,
57 | .hljs-link {
58 | font-weight: normal;
59 | }
60 |
61 | .hljs-string {
62 | color: #008000;
63 | font-weight: bold;
64 | }
65 |
66 | .hljs-symbol,
67 | .hljs-bullet,
68 | .hljs-formula {
69 | color: #000;
70 | background: #d0eded;
71 | font-style: italic;
72 | }
73 |
74 | .hljs-doctag {
75 | text-decoration: underline;
76 | }
77 |
78 | .hljs-variable,
79 | .hljs-template-variable {
80 | color: #660e7a;
81 | }
82 |
83 | .hljs-addition {
84 | background: #baeeba;
85 | }
86 |
87 | .hljs-deletion {
88 | background: #ffc8bd;
89 | }
90 |
91 | .hljs-emphasis {
92 | font-style: italic;
93 | }
94 |
95 | .hljs-strong {
96 | font-weight: bold;
97 | }
98 |
--------------------------------------------------------------------------------
/CodeReader/Themes/ir-black.css:
--------------------------------------------------------------------------------
1 | /*
2 | IR_Black style (c) Vasily Mikhailitchenko
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | background: #000;
10 | color: #f8f8f8;
11 | }
12 |
13 | .hljs-comment,
14 | .hljs-quote,
15 | .hljs-meta {
16 | color: #7c7c7c;
17 | }
18 |
19 | .hljs-keyword,
20 | .hljs-selector-tag,
21 | .hljs-tag,
22 | .hljs-name {
23 | color: #96cbfe;
24 | }
25 |
26 | .hljs-attribute,
27 | .hljs-selector-id {
28 | color: #ffffb6;
29 | }
30 |
31 | .hljs-string,
32 | .hljs-selector-attr,
33 | .hljs-selector-pseudo,
34 | .hljs-addition {
35 | color: #a8ff60;
36 | }
37 |
38 | .hljs-subst {
39 | color: #daefa3;
40 | }
41 |
42 | .hljs-regexp,
43 | .hljs-link {
44 | color: #e9c062;
45 | }
46 |
47 | .hljs-title,
48 | .hljs-section,
49 | .hljs-type,
50 | .hljs-doctag {
51 | color: #ffffb6;
52 | }
53 |
54 | .hljs-symbol,
55 | .hljs-bullet,
56 | .hljs-variable,
57 | .hljs-template-variable,
58 | .hljs-literal {
59 | color: #c6c5fe;
60 | }
61 |
62 | .hljs-number,
63 | .hljs-deletion {
64 | color:#ff73fd;
65 | }
66 |
67 | .hljs-emphasis {
68 | font-style: italic;
69 | }
70 |
71 | .hljs-strong {
72 | font-weight: bold;
73 | }
74 |
--------------------------------------------------------------------------------
/CodeReader/Themes/kimbie.dark.css:
--------------------------------------------------------------------------------
1 | /*
2 | Name: Kimbie (dark)
3 | Author: Jan T. Sott
4 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License
5 | URL: https://github.com/idleberg/Kimbie-highlight.js
6 | */
7 |
8 | /* Kimbie Comment */
9 | .hljs-comment,
10 | .hljs-quote {
11 | color: #d6baad;
12 | }
13 |
14 | /* Kimbie Red */
15 | .hljs-variable,
16 | .hljs-template-variable,
17 | .hljs-tag,
18 | .hljs-name,
19 | .hljs-selector-id,
20 | .hljs-selector-class,
21 | .hljs-regexp,
22 | .hljs-meta {
23 | color: #dc3958;
24 | }
25 |
26 | /* Kimbie Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion,
34 | .hljs-link {
35 | color: #f79a32;
36 | }
37 |
38 | /* Kimbie Yellow */
39 | .hljs-title,
40 | .hljs-section,
41 | .hljs-attribute {
42 | color: #f06431;
43 | }
44 |
45 | /* Kimbie Green */
46 | .hljs-string,
47 | .hljs-symbol,
48 | .hljs-bullet,
49 | .hljs-addition {
50 | color: #889b4a;
51 | }
52 |
53 | /* Kimbie Purple */
54 | .hljs-keyword,
55 | .hljs-selector-tag,
56 | .hljs-function {
57 | color: #98676a;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #221a0f;
64 | color: #d3af86;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/CodeReader/Themes/kimbie.light.css:
--------------------------------------------------------------------------------
1 | /*
2 | Name: Kimbie (light)
3 | Author: Jan T. Sott
4 | License: Creative Commons Attribution-ShareAlike 4.0 Unported License
5 | URL: https://github.com/idleberg/Kimbie-highlight.js
6 | */
7 |
8 | /* Kimbie Comment */
9 | .hljs-comment,
10 | .hljs-quote {
11 | color: #a57a4c;
12 | }
13 |
14 | /* Kimbie Red */
15 | .hljs-variable,
16 | .hljs-template-variable,
17 | .hljs-tag,
18 | .hljs-name,
19 | .hljs-selector-id,
20 | .hljs-selector-class,
21 | .hljs-regexp,
22 | .hljs-meta {
23 | color: #dc3958;
24 | }
25 |
26 | /* Kimbie Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion,
34 | .hljs-link {
35 | color: #f79a32;
36 | }
37 |
38 | /* Kimbie Yellow */
39 | .hljs-title,
40 | .hljs-section,
41 | .hljs-attribute {
42 | color: #f06431;
43 | }
44 |
45 | /* Kimbie Green */
46 | .hljs-string,
47 | .hljs-symbol,
48 | .hljs-bullet,
49 | .hljs-addition {
50 | color: #889b4a;
51 | }
52 |
53 | /* Kimbie Purple */
54 | .hljs-keyword,
55 | .hljs-selector-tag,
56 | .hljs-function {
57 | color: #98676a;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #fbebd4;
64 | color: #84613d;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/CodeReader/Themes/magula.css:
--------------------------------------------------------------------------------
1 | /*
2 | Description: Magula style for highligh.js
3 | Author: Ruslan Keba
4 | Website: http://rukeba.com/
5 | Version: 1.0
6 | Date: 2009-01-03
7 | Music: Aphex Twin / Xtal
8 | */
9 |
10 | .hljs {
11 | display: block;
12 | overflow-x: auto;
13 | padding: 0.5em;
14 | background-color: #f4f4f4;
15 | }
16 |
17 | .hljs,
18 | .hljs-subst {
19 | color: black;
20 | }
21 |
22 | .hljs-string,
23 | .hljs-title,
24 | .hljs-symbol,
25 | .hljs-bullet,
26 | .hljs-attribute,
27 | .hljs-addition,
28 | .hljs-variable,
29 | .hljs-template-tag,
30 | .hljs-template-variable {
31 | color: #050;
32 | }
33 |
34 | .hljs-comment,
35 | .hljs-quote {
36 | color: #777;
37 | }
38 |
39 | .hljs-number,
40 | .hljs-regexp,
41 | .hljs-literal,
42 | .hljs-type,
43 | .hljs-link {
44 | color: #800;
45 | }
46 |
47 | .hljs-deletion,
48 | .hljs-meta {
49 | color: #00e;
50 | }
51 |
52 | .hljs-keyword,
53 | .hljs-selector-tag,
54 | .hljs-doctag,
55 | .hljs-title,
56 | .hljs-section,
57 | .hljs-built_in,
58 | .hljs-tag,
59 | .hljs-name {
60 | font-weight: bold;
61 | color: navy;
62 | }
63 |
64 | .hljs-emphasis {
65 | font-style: italic;
66 | }
67 |
68 | .hljs-strong {
69 | font-weight: bold;
70 | }
71 |
--------------------------------------------------------------------------------
/CodeReader/Themes/mono-blue.css:
--------------------------------------------------------------------------------
1 | /*
2 | Five-color theme from a single blue hue.
3 | */
4 | .hljs {
5 | display: block;
6 | overflow-x: auto;
7 | padding: 0.5em;
8 | background: #eaeef3;
9 | }
10 |
11 | .hljs {
12 | color: #00193a;
13 | }
14 |
15 | .hljs-keyword,
16 | .hljs-selector-tag,
17 | .hljs-title,
18 | .hljs-section,
19 | .hljs-doctag,
20 | .hljs-name,
21 | .hljs-strong {
22 | font-weight: bold;
23 | }
24 |
25 | .hljs-comment {
26 | color: #738191;
27 | }
28 |
29 | .hljs-string,
30 | .hljs-title,
31 | .hljs-section,
32 | .hljs-built_in,
33 | .hljs-literal,
34 | .hljs-type,
35 | .hljs-addition,
36 | .hljs-tag,
37 | .hljs-quote,
38 | .hljs-name,
39 | .hljs-selector-id,
40 | .hljs-selector-class {
41 | color: #0048ab;
42 | }
43 |
44 | .hljs-meta,
45 | .hljs-subst,
46 | .hljs-symbol,
47 | .hljs-regexp,
48 | .hljs-attribute,
49 | .hljs-deletion,
50 | .hljs-variable,
51 | .hljs-template-variable,
52 | .hljs-link,
53 | .hljs-bullet {
54 | color: #4c81c9;
55 | }
56 |
57 | .hljs-emphasis {
58 | font-style: italic;
59 | }
60 |
--------------------------------------------------------------------------------
/CodeReader/Themes/monokai-sublime.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Monokai Sublime style. Derived from Monokai by noformnocontent http://nn.mit-license.org/
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #23241f;
12 | }
13 |
14 | .hljs,
15 | .hljs-tag,
16 | .hljs-subst {
17 | color: #f8f8f2;
18 | }
19 |
20 | .hljs-strong,
21 | .hljs-emphasis {
22 | color: #a8a8a2;
23 | }
24 |
25 | .hljs-bullet,
26 | .hljs-quote,
27 | .hljs-number,
28 | .hljs-regexp,
29 | .hljs-literal,
30 | .hljs-link {
31 | color: #ae81ff;
32 | }
33 |
34 | .hljs-code,
35 | .hljs-title,
36 | .hljs-section,
37 | .hljs-selector-class {
38 | color: #a6e22e;
39 | }
40 |
41 | .hljs-strong {
42 | font-weight: bold;
43 | }
44 |
45 | .hljs-emphasis {
46 | font-style: italic;
47 | }
48 |
49 | .hljs-keyword,
50 | .hljs-selector-tag,
51 | .hljs-name,
52 | .hljs-attr {
53 | color: #f92672;
54 | }
55 |
56 | .hljs-symbol,
57 | .hljs-attribute {
58 | color: #66d9ef;
59 | }
60 |
61 | .hljs-params,
62 | .hljs-class .hljs-title {
63 | color: #f8f8f2;
64 | }
65 |
66 | .hljs-string,
67 | .hljs-type,
68 | .hljs-built_in,
69 | .hljs-builtin-name,
70 | .hljs-selector-id,
71 | .hljs-selector-attr,
72 | .hljs-selector-pseudo,
73 | .hljs-addition,
74 | .hljs-variable,
75 | .hljs-template-variable {
76 | color: #e6db74;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-deletion,
81 | .hljs-meta {
82 | color: #75715e;
83 | }
84 |
--------------------------------------------------------------------------------
/CodeReader/Themes/monokai.css:
--------------------------------------------------------------------------------
1 | /*
2 | Monokai style - ported by Luigi Maselli - http://grigio.org
3 | */
4 |
5 | .hljs {
6 | display: block;
7 | overflow-x: auto;
8 | padding: 0.5em;
9 | background: #272822; color: #ddd;
10 | }
11 |
12 | .hljs-tag,
13 | .hljs-keyword,
14 | .hljs-selector-tag,
15 | .hljs-literal,
16 | .hljs-strong,
17 | .hljs-name {
18 | color: #f92672;
19 | }
20 |
21 | .hljs-code {
22 | color: #66d9ef;
23 | }
24 |
25 | .hljs-class .hljs-title {
26 | color: white;
27 | }
28 |
29 | .hljs-attribute,
30 | .hljs-symbol,
31 | .hljs-regexp,
32 | .hljs-link {
33 | color: #bf79db;
34 | }
35 |
36 | .hljs-string,
37 | .hljs-bullet,
38 | .hljs-subst,
39 | .hljs-title,
40 | .hljs-section,
41 | .hljs-emphasis,
42 | .hljs-type,
43 | .hljs-built_in,
44 | .hljs-builtin-name,
45 | .hljs-selector-attr,
46 | .hljs-selector-pseudo,
47 | .hljs-addition,
48 | .hljs-variable,
49 | .hljs-template-tag,
50 | .hljs-template-variable {
51 | color: #a6e22e;
52 | }
53 |
54 | .hljs-comment,
55 | .hljs-quote,
56 | .hljs-deletion,
57 | .hljs-meta {
58 | color: #75715e;
59 | }
60 |
61 | .hljs-keyword,
62 | .hljs-selector-tag,
63 | .hljs-literal,
64 | .hljs-doctag,
65 | .hljs-title,
66 | .hljs-section,
67 | .hljs-type,
68 | .hljs-selector-id {
69 | font-weight: bold;
70 | }
71 |
--------------------------------------------------------------------------------
/CodeReader/Themes/obsidian.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Obsidian style
3 | * ported by Alexander Marenin (http://github.com/ioncreature)
4 | */
5 |
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: #282b2e;
11 | }
12 |
13 | .hljs-keyword,
14 | .hljs-selector-tag,
15 | .hljs-literal,
16 | .hljs-selector-id {
17 | color: #93c763;
18 | }
19 |
20 | .hljs-number {
21 | color: #ffcd22;
22 | }
23 |
24 | .hljs {
25 | color: #e0e2e4;
26 | }
27 |
28 | .hljs-attribute {
29 | color: #668bb0;
30 | }
31 |
32 | .hljs-code,
33 | .hljs-class .hljs-title,
34 | .hljs-section {
35 | color: white;
36 | }
37 |
38 | .hljs-regexp,
39 | .hljs-link {
40 | color: #d39745;
41 | }
42 |
43 | .hljs-meta {
44 | color: #557182;
45 | }
46 |
47 | .hljs-tag,
48 | .hljs-name,
49 | .hljs-bullet,
50 | .hljs-subst,
51 | .hljs-emphasis,
52 | .hljs-type,
53 | .hljs-built_in,
54 | .hljs-selector-attr,
55 | .hljs-selector-pseudo,
56 | .hljs-addition,
57 | .hljs-variable,
58 | .hljs-template-tag,
59 | .hljs-template-variable {
60 | color: #8cbbad;
61 | }
62 |
63 | .hljs-string,
64 | .hljs-symbol {
65 | color: #ec7600;
66 | }
67 |
68 | .hljs-comment,
69 | .hljs-quote,
70 | .hljs-deletion {
71 | color: #818e96;
72 | }
73 |
74 | .hljs-selector-class {
75 | color: #A082BD
76 | }
77 |
78 | .hljs-keyword,
79 | .hljs-selector-tag,
80 | .hljs-literal,
81 | .hljs-doctag,
82 | .hljs-title,
83 | .hljs-section,
84 | .hljs-type,
85 | .hljs-name,
86 | .hljs-strong {
87 | font-weight: bold;
88 | }
89 |
--------------------------------------------------------------------------------
/CodeReader/Themes/paraiso-dark.css:
--------------------------------------------------------------------------------
1 | /*
2 | Paraíso (dark)
3 | Created by Jan T. Sott (http://github.com/idleberg)
4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
5 | */
6 |
7 | /* Paraíso Comment */
8 | .hljs-comment,
9 | .hljs-quote {
10 | color: #8d8687;
11 | }
12 |
13 | /* Paraíso Red */
14 | .hljs-variable,
15 | .hljs-template-variable,
16 | .hljs-tag,
17 | .hljs-name,
18 | .hljs-selector-id,
19 | .hljs-selector-class,
20 | .hljs-regexp,
21 | .hljs-link,
22 | .hljs-meta {
23 | color: #ef6155;
24 | }
25 |
26 | /* Paraíso Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion {
34 | color: #f99b15;
35 | }
36 |
37 | /* Paraíso Yellow */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-attribute {
41 | color: #fec418;
42 | }
43 |
44 | /* Paraíso Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #48b685;
50 | }
51 |
52 | /* Paraíso Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #815ba4;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: #2f1e2e;
62 | color: #a39e9b;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/CodeReader/Themes/paraiso-light.css:
--------------------------------------------------------------------------------
1 | /*
2 | Paraíso (light)
3 | Created by Jan T. Sott (http://github.com/idleberg)
4 | Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
5 | */
6 |
7 | /* Paraíso Comment */
8 | .hljs-comment,
9 | .hljs-quote {
10 | color: #776e71;
11 | }
12 |
13 | /* Paraíso Red */
14 | .hljs-variable,
15 | .hljs-template-variable,
16 | .hljs-tag,
17 | .hljs-name,
18 | .hljs-selector-id,
19 | .hljs-selector-class,
20 | .hljs-regexp,
21 | .hljs-link,
22 | .hljs-meta {
23 | color: #ef6155;
24 | }
25 |
26 | /* Paraíso Orange */
27 | .hljs-number,
28 | .hljs-built_in,
29 | .hljs-builtin-name,
30 | .hljs-literal,
31 | .hljs-type,
32 | .hljs-params,
33 | .hljs-deletion {
34 | color: #f99b15;
35 | }
36 |
37 | /* Paraíso Yellow */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-attribute {
41 | color: #fec418;
42 | }
43 |
44 | /* Paraíso Green */
45 | .hljs-string,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-addition {
49 | color: #48b685;
50 | }
51 |
52 | /* Paraíso Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #815ba4;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: #e7e9db;
62 | color: #4f424c;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/CodeReader/Themes/pojoaque.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Pojoaque Style by Jason Tate
4 | http://web-cms-designs.com/ftopict-10-pojoaque-style-for-highlight-js-code-highlighter.html
5 | Based on Solarized Style from http://ethanschoonover.com/solarized
6 |
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | padding: 0.5em;
13 | color: #dccf8f;
14 | background: url(./pojoaque.jpg) repeat scroll left top #181914;
15 | }
16 |
17 | .hljs-comment,
18 | .hljs-quote {
19 | color: #586e75;
20 | font-style: italic;
21 | }
22 |
23 | .hljs-keyword,
24 | .hljs-selector-tag,
25 | .hljs-literal,
26 | .hljs-addition {
27 | color: #b64926;
28 | }
29 |
30 | .hljs-number,
31 | .hljs-string,
32 | .hljs-doctag,
33 | .hljs-regexp {
34 | color: #468966;
35 | }
36 |
37 | .hljs-title,
38 | .hljs-section,
39 | .hljs-built_in,
40 | .hljs-name {
41 | color: #ffb03b;
42 | }
43 |
44 | .hljs-variable,
45 | .hljs-template-variable,
46 | .hljs-class .hljs-title,
47 | .hljs-type,
48 | .hljs-tag {
49 | color: #b58900;
50 | }
51 |
52 | .hljs-attribute {
53 | color: #b89859;
54 | }
55 |
56 | .hljs-symbol,
57 | .hljs-bullet,
58 | .hljs-link,
59 | .hljs-subst,
60 | .hljs-meta {
61 | color: #cb4b16;
62 | }
63 |
64 | .hljs-deletion {
65 | color: #dc322f;
66 | }
67 |
68 | .hljs-selector-id,
69 | .hljs-selector-class {
70 | color: #d3a60c;
71 | }
72 |
73 | .hljs-formula {
74 | background: #073642;
75 | }
76 |
77 | .hljs-emphasis {
78 | font-style: italic;
79 | }
80 |
81 | .hljs-strong {
82 | font-weight: bold;
83 | }
84 |
--------------------------------------------------------------------------------
/CodeReader/Themes/pojoaque.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Themes/pojoaque.jpg
--------------------------------------------------------------------------------
/CodeReader/Themes/purebasic.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | PureBASIC native IDE style ( version 1.0 - April 2016 )
4 |
5 | by Tristano Ajmone
6 |
7 | Public Domain
8 |
9 | NOTE_1: PureBASIC code syntax highlighting only applies the following classes:
10 | .hljs-comment
11 | .hljs-function
12 | .hljs-keywords
13 | .hljs-string
14 | .hljs-symbol
15 |
16 | Other classes are added here for the benefit of styling other languages with the look and feel of PureBASIC native IDE style.
17 | If you need to customize a stylesheet for PureBASIC only, remove all non-relevant classes -- PureBASIC-related classes are followed by
18 | a "--- used for PureBASIC ... ---" comment on same line.
19 |
20 | NOTE_2: Color names provided in comments were derived using "Name that Color" online tool:
21 | http://chir.ag/projects/name-that-color
22 | */
23 |
24 | .hljs { /* Common set of rules required by highlight.js (don'r remove!) */
25 | display: block;
26 | overflow-x: auto;
27 | padding: 0.5em;
28 | background: #FFFFDF; /* Half and Half (approx.) */
29 | /* --- Uncomment to add PureBASIC native IDE styled font!
30 | font-family: Consolas;
31 | */
32 | }
33 |
34 | .hljs, /* --- used for PureBASIC base color --- */
35 | .hljs-type, /* --- used for PureBASIC Procedures return type --- */
36 | .hljs-function, /* --- used for wrapping PureBASIC Procedures definitions --- */
37 | .hljs-name,
38 | .hljs-number,
39 | .hljs-attr,
40 | .hljs-params,
41 | .hljs-subst {
42 | color: #000000; /* Black */
43 | }
44 |
45 | .hljs-comment, /* --- used for PureBASIC Comments --- */
46 | .hljs-regexp,
47 | .hljs-section,
48 | .hljs-selector-pseudo,
49 | .hljs-addition {
50 | color: #00AAAA; /* Persian Green (approx.) */
51 | }
52 |
53 | .hljs-title, /* --- used for PureBASIC Procedures Names --- */
54 | .hljs-tag,
55 | .hljs-variable,
56 | .hljs-code {
57 | color: #006666; /* Blue Stone (approx.) */
58 | }
59 |
60 | .hljs-keyword, /* --- used for PureBASIC Keywords --- */
61 | .hljs-class,
62 | .hljs-meta-keyword,
63 | .hljs-selector-class,
64 | .hljs-built_in,
65 | .hljs-builtin-name {
66 | color: #006666; /* Blue Stone (approx.) */
67 | font-weight: bold;
68 | }
69 |
70 | .hljs-string, /* --- used for PureBASIC Strings --- */
71 | .hljs-selector-attr {
72 | color: #0080FF; /* Azure Radiance (approx.) */
73 | }
74 |
75 | .hljs-symbol, /* --- used for PureBASIC Constants --- */
76 | .hljs-link,
77 | .hljs-deletion,
78 | .hljs-attribute {
79 | color: #924B72; /* Cannon Pink (approx.) */
80 | }
81 |
82 | .hljs-meta,
83 | .hljs-literal,
84 | .hljs-selector-id {
85 | color: #924B72; /* Cannon Pink (approx.) */
86 | font-weight: bold;
87 | }
88 |
89 | .hljs-strong,
90 | .hljs-name {
91 | font-weight: bold;
92 | }
93 |
94 | .hljs-emphasis {
95 | font-style: italic;
96 | }
97 |
--------------------------------------------------------------------------------
/CodeReader/Themes/qtcreator_dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Qt Creator dark color scheme
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #000000;
13 | }
14 |
15 | .hljs,
16 | .hljs-subst,
17 | .hljs-tag,
18 | .hljs-title {
19 | color: #aaaaaa;
20 | }
21 |
22 | .hljs-strong,
23 | .hljs-emphasis {
24 | color: #a8a8a2;
25 | }
26 |
27 | .hljs-bullet,
28 | .hljs-quote,
29 | .hljs-number,
30 | .hljs-regexp,
31 | .hljs-literal {
32 | color: #ff55ff;
33 | }
34 |
35 | .hljs-code
36 | .hljs-selector-class {
37 | color: #aaaaff;
38 | }
39 |
40 | .hljs-emphasis,
41 | .hljs-stronge,
42 | .hljs-type {
43 | font-style: italic;
44 | }
45 |
46 | .hljs-keyword,
47 | .hljs-selector-tag,
48 | .hljs-function,
49 | .hljs-section,
50 | .hljs-symbol,
51 | .hljs-name {
52 | color: #ffff55;
53 | }
54 |
55 | .hljs-attribute {
56 | color: #ff5555;
57 | }
58 |
59 | .hljs-variable,
60 | .hljs-params,
61 | .hljs-class .hljs-title {
62 | color: #8888ff;
63 | }
64 |
65 | .hljs-string,
66 | .hljs-selector-id,
67 | .hljs-selector-attr,
68 | .hljs-selector-pseudo,
69 | .hljs-type,
70 | .hljs-built_in,
71 | .hljs-builtin-name,
72 | .hljs-template-tag,
73 | .hljs-template-variable,
74 | .hljs-addition,
75 | .hljs-link {
76 | color: #ff55ff;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-meta,
81 | .hljs-deletion {
82 | color: #55ffff;
83 | }
84 |
--------------------------------------------------------------------------------
/CodeReader/Themes/qtcreator_light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Qt Creator light color scheme
4 |
5 | */
6 |
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #ffffff;
13 | }
14 |
15 | .hljs,
16 | .hljs-subst,
17 | .hljs-tag,
18 | .hljs-title {
19 | color: #000000;
20 | }
21 |
22 | .hljs-strong,
23 | .hljs-emphasis {
24 | color: #000000;
25 | }
26 |
27 | .hljs-bullet,
28 | .hljs-quote,
29 | .hljs-number,
30 | .hljs-regexp,
31 | .hljs-literal {
32 | color: #000080;
33 | }
34 |
35 | .hljs-code
36 | .hljs-selector-class {
37 | color: #800080;
38 | }
39 |
40 | .hljs-emphasis,
41 | .hljs-stronge,
42 | .hljs-type {
43 | font-style: italic;
44 | }
45 |
46 | .hljs-keyword,
47 | .hljs-selector-tag,
48 | .hljs-function,
49 | .hljs-section,
50 | .hljs-symbol,
51 | .hljs-name {
52 | color: #808000;
53 | }
54 |
55 | .hljs-attribute {
56 | color: #800000;
57 | }
58 |
59 | .hljs-variable,
60 | .hljs-params,
61 | .hljs-class .hljs-title {
62 | color: #0055AF;
63 | }
64 |
65 | .hljs-string,
66 | .hljs-selector-id,
67 | .hljs-selector-attr,
68 | .hljs-selector-pseudo,
69 | .hljs-type,
70 | .hljs-built_in,
71 | .hljs-builtin-name,
72 | .hljs-template-tag,
73 | .hljs-template-variable,
74 | .hljs-addition,
75 | .hljs-link {
76 | color: #008000;
77 | }
78 |
79 | .hljs-comment,
80 | .hljs-meta,
81 | .hljs-deletion {
82 | color: #008000;
83 | }
84 |
--------------------------------------------------------------------------------
/CodeReader/Themes/railscasts.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Railscasts-like style (c) Visoft, Inc. (Damien White)
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #232323;
12 | color: #e6e1dc;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #bc9458;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag {
23 | color: #c26230;
24 | }
25 |
26 | .hljs-string,
27 | .hljs-number,
28 | .hljs-regexp,
29 | .hljs-variable,
30 | .hljs-template-variable {
31 | color: #a5c261;
32 | }
33 |
34 | .hljs-subst {
35 | color: #519f50;
36 | }
37 |
38 | .hljs-tag,
39 | .hljs-name {
40 | color: #e8bf6a;
41 | }
42 |
43 | .hljs-type {
44 | color: #da4939;
45 | }
46 |
47 |
48 | .hljs-symbol,
49 | .hljs-bullet,
50 | .hljs-built_in,
51 | .hljs-builtin-name,
52 | .hljs-attr,
53 | .hljs-link {
54 | color: #6d9cbe;
55 | }
56 |
57 | .hljs-params {
58 | color: #d0d0ff;
59 | }
60 |
61 | .hljs-attribute {
62 | color: #cda869;
63 | }
64 |
65 | .hljs-meta {
66 | color: #9b859d;
67 | }
68 |
69 | .hljs-title,
70 | .hljs-section {
71 | color: #ffc66d;
72 | }
73 |
74 | .hljs-addition {
75 | background-color: #144212;
76 | color: #e6e1dc;
77 | display: inline-block;
78 | width: 100%;
79 | }
80 |
81 | .hljs-deletion {
82 | background-color: #600;
83 | color: #e6e1dc;
84 | display: inline-block;
85 | width: 100%;
86 | }
87 |
88 | .hljs-selector-class {
89 | color: #9b703f;
90 | }
91 |
92 | .hljs-selector-id {
93 | color: #8b98ab;
94 | }
95 |
96 | .hljs-emphasis {
97 | font-style: italic;
98 | }
99 |
100 | .hljs-strong {
101 | font-weight: bold;
102 | }
103 |
104 | .hljs-link {
105 | text-decoration: underline;
106 | }
107 |
--------------------------------------------------------------------------------
/CodeReader/Themes/rainbow.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Style with support for rainbow parens
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #474949;
12 | color: #d1d9e1;
13 | }
14 |
15 |
16 | .hljs-comment,
17 | .hljs-quote {
18 | color: #969896;
19 | font-style: italic;
20 | }
21 |
22 | .hljs-keyword,
23 | .hljs-selector-tag,
24 | .hljs-literal,
25 | .hljs-type,
26 | .hljs-addition {
27 | color: #cc99cc;
28 | }
29 |
30 | .hljs-number,
31 | .hljs-selector-attr,
32 | .hljs-selector-pseudo {
33 | color: #f99157;
34 | }
35 |
36 | .hljs-string,
37 | .hljs-doctag,
38 | .hljs-regexp {
39 | color: #8abeb7;
40 | }
41 |
42 | .hljs-title,
43 | .hljs-name,
44 | .hljs-section,
45 | .hljs-built_in {
46 | color: #b5bd68;
47 | }
48 |
49 | .hljs-variable,
50 | .hljs-template-variable,
51 | .hljs-selector-id,
52 | .hljs-class .hljs-title {
53 | color: #ffcc66;
54 | }
55 |
56 | .hljs-section,
57 | .hljs-name,
58 | .hljs-strong {
59 | font-weight: bold;
60 | }
61 |
62 | .hljs-symbol,
63 | .hljs-bullet,
64 | .hljs-subst,
65 | .hljs-meta,
66 | .hljs-link {
67 | color: #f99157;
68 | }
69 |
70 | .hljs-deletion {
71 | color: #dc322f;
72 | }
73 |
74 | .hljs-formula {
75 | background: #eee8d5;
76 | }
77 |
78 | .hljs-attr,
79 | .hljs-attribute {
80 | color: #81a2be;
81 | }
82 |
83 | .hljs-emphasis {
84 | font-style: italic;
85 | }
86 |
--------------------------------------------------------------------------------
/CodeReader/Themes/school-book.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | School Book style from goldblog.com.ua (c) Zaripov Yura
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 15px 0.5em 0.5em 30px;
11 | font-size: 11px;
12 | line-height:16px;
13 | }
14 |
15 | pre{
16 | background:#f6f6ae url(./school-book.png);
17 | border-top: solid 2px #d2e8b9;
18 | border-bottom: solid 1px #d2e8b9;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-literal {
24 | color:#005599;
25 | font-weight:bold;
26 | }
27 |
28 | .hljs,
29 | .hljs-subst {
30 | color: #3e5915;
31 | }
32 |
33 | .hljs-string,
34 | .hljs-title,
35 | .hljs-section,
36 | .hljs-type,
37 | .hljs-symbol,
38 | .hljs-bullet,
39 | .hljs-attribute,
40 | .hljs-built_in,
41 | .hljs-builtin-name,
42 | .hljs-addition,
43 | .hljs-variable,
44 | .hljs-template-tag,
45 | .hljs-template-variable,
46 | .hljs-link {
47 | color: #2c009f;
48 | }
49 |
50 | .hljs-comment,
51 | .hljs-quote,
52 | .hljs-deletion,
53 | .hljs-meta {
54 | color: #e60415;
55 | }
56 |
57 | .hljs-keyword,
58 | .hljs-selector-tag,
59 | .hljs-literal,
60 | .hljs-doctag,
61 | .hljs-title,
62 | .hljs-section,
63 | .hljs-type,
64 | .hljs-name,
65 | .hljs-selector-id,
66 | .hljs-strong {
67 | font-weight: bold;
68 | }
69 |
70 | .hljs-emphasis {
71 | font-style: italic;
72 | }
73 |
--------------------------------------------------------------------------------
/CodeReader/Themes/school-book.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/CodeReader/Themes/school-book.png
--------------------------------------------------------------------------------
/CodeReader/Themes/solarized-dark.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #002b36;
12 | color: #839496;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #586e75;
18 | }
19 |
20 | /* Solarized Green */
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-addition {
24 | color: #859900;
25 | }
26 |
27 | /* Solarized Cyan */
28 | .hljs-number,
29 | .hljs-string,
30 | .hljs-meta .hljs-meta-string,
31 | .hljs-literal,
32 | .hljs-doctag,
33 | .hljs-regexp {
34 | color: #2aa198;
35 | }
36 |
37 | /* Solarized Blue */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-name,
41 | .hljs-selector-id,
42 | .hljs-selector-class {
43 | color: #268bd2;
44 | }
45 |
46 | /* Solarized Yellow */
47 | .hljs-attribute,
48 | .hljs-attr,
49 | .hljs-variable,
50 | .hljs-template-variable,
51 | .hljs-class .hljs-title,
52 | .hljs-type {
53 | color: #b58900;
54 | }
55 |
56 | /* Solarized Orange */
57 | .hljs-symbol,
58 | .hljs-bullet,
59 | .hljs-subst,
60 | .hljs-meta,
61 | .hljs-meta .hljs-keyword,
62 | .hljs-selector-attr,
63 | .hljs-selector-pseudo,
64 | .hljs-link {
65 | color: #cb4b16;
66 | }
67 |
68 | /* Solarized Red */
69 | .hljs-built_in,
70 | .hljs-deletion {
71 | color: #dc322f;
72 | }
73 |
74 | .hljs-formula {
75 | background: #073642;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/solarized-light.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #fdf6e3;
12 | color: #657b83;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #93a1a1;
18 | }
19 |
20 | /* Solarized Green */
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-addition {
24 | color: #859900;
25 | }
26 |
27 | /* Solarized Cyan */
28 | .hljs-number,
29 | .hljs-string,
30 | .hljs-meta .hljs-meta-string,
31 | .hljs-literal,
32 | .hljs-doctag,
33 | .hljs-regexp {
34 | color: #2aa198;
35 | }
36 |
37 | /* Solarized Blue */
38 | .hljs-title,
39 | .hljs-section,
40 | .hljs-name,
41 | .hljs-selector-id,
42 | .hljs-selector-class {
43 | color: #268bd2;
44 | }
45 |
46 | /* Solarized Yellow */
47 | .hljs-attribute,
48 | .hljs-attr,
49 | .hljs-variable,
50 | .hljs-template-variable,
51 | .hljs-class .hljs-title,
52 | .hljs-type {
53 | color: #b58900;
54 | }
55 |
56 | /* Solarized Orange */
57 | .hljs-symbol,
58 | .hljs-bullet,
59 | .hljs-subst,
60 | .hljs-meta,
61 | .hljs-meta .hljs-keyword,
62 | .hljs-selector-attr,
63 | .hljs-selector-pseudo,
64 | .hljs-link {
65 | color: #cb4b16;
66 | }
67 |
68 | /* Solarized Red */
69 | .hljs-built_in,
70 | .hljs-deletion {
71 | color: #dc322f;
72 | }
73 |
74 | .hljs-formula {
75 | background: #eee8d5;
76 | }
77 |
78 | .hljs-emphasis {
79 | font-style: italic;
80 | }
81 |
82 | .hljs-strong {
83 | font-weight: bold;
84 | }
85 |
--------------------------------------------------------------------------------
/CodeReader/Themes/sunburst.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Sunburst-like style (c) Vasily Polovnyov
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #000;
12 | color: #f8f8f8;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #aeaeae;
18 | font-style: italic;
19 | }
20 |
21 | .hljs-keyword,
22 | .hljs-selector-tag,
23 | .hljs-type {
24 | color: #e28964;
25 | }
26 |
27 | .hljs-string {
28 | color: #65b042;
29 | }
30 |
31 | .hljs-subst {
32 | color: #daefa3;
33 | }
34 |
35 | .hljs-regexp,
36 | .hljs-link {
37 | color: #e9c062;
38 | }
39 |
40 | .hljs-title,
41 | .hljs-section,
42 | .hljs-tag,
43 | .hljs-name {
44 | color: #89bdff;
45 | }
46 |
47 | .hljs-class .hljs-title,
48 | .hljs-doctag {
49 | text-decoration: underline;
50 | }
51 |
52 | .hljs-symbol,
53 | .hljs-bullet,
54 | .hljs-number {
55 | color: #3387cc;
56 | }
57 |
58 | .hljs-params,
59 | .hljs-variable,
60 | .hljs-template-variable {
61 | color: #3e87e3;
62 | }
63 |
64 | .hljs-attribute {
65 | color: #cda869;
66 | }
67 |
68 | .hljs-meta {
69 | color: #8996a8;
70 | }
71 |
72 | .hljs-formula {
73 | background-color: #0e2231;
74 | color: #f8f8f8;
75 | font-style: italic;
76 | }
77 |
78 | .hljs-addition {
79 | background-color: #253b22;
80 | color: #f8f8f8;
81 | }
82 |
83 | .hljs-deletion {
84 | background-color: #420e09;
85 | color: #f8f8f8;
86 | }
87 |
88 | .hljs-selector-class {
89 | color: #9b703f;
90 | }
91 |
92 | .hljs-selector-id {
93 | color: #8b98ab;
94 | }
95 |
96 | .hljs-emphasis {
97 | font-style: italic;
98 | }
99 |
100 | .hljs-strong {
101 | font-weight: bold;
102 | }
103 |
--------------------------------------------------------------------------------
/CodeReader/Themes/tomorrow-night-blue.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Blue Theme */
2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
5 |
6 | /* Tomorrow Comment */
7 | .hljs-comment,
8 | .hljs-quote {
9 | color: #7285b7;
10 | }
11 |
12 | /* Tomorrow Red */
13 | .hljs-variable,
14 | .hljs-template-variable,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-selector-id,
18 | .hljs-selector-class,
19 | .hljs-regexp,
20 | .hljs-deletion {
21 | color: #ff9da4;
22 | }
23 |
24 | /* Tomorrow Orange */
25 | .hljs-number,
26 | .hljs-built_in,
27 | .hljs-builtin-name,
28 | .hljs-literal,
29 | .hljs-type,
30 | .hljs-params,
31 | .hljs-meta,
32 | .hljs-link {
33 | color: #ffc58f;
34 | }
35 |
36 | /* Tomorrow Yellow */
37 | .hljs-attribute {
38 | color: #ffeead;
39 | }
40 |
41 | /* Tomorrow Green */
42 | .hljs-string,
43 | .hljs-symbol,
44 | .hljs-bullet,
45 | .hljs-addition {
46 | color: #d1f1a9;
47 | }
48 |
49 | /* Tomorrow Blue */
50 | .hljs-title,
51 | .hljs-section {
52 | color: #bbdaff;
53 | }
54 |
55 | /* Tomorrow Purple */
56 | .hljs-keyword,
57 | .hljs-selector-tag {
58 | color: #ebbbff;
59 | }
60 |
61 | .hljs {
62 | display: block;
63 | overflow-x: auto;
64 | background: #002451;
65 | color: white;
66 | padding: 0.5em;
67 | }
68 |
69 | .hljs-emphasis {
70 | font-style: italic;
71 | }
72 |
73 | .hljs-strong {
74 | font-weight: bold;
75 | }
76 |
--------------------------------------------------------------------------------
/CodeReader/Themes/tomorrow-night-bright.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Bright Theme */
2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
4 |
5 | /* Tomorrow Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #969896;
9 | }
10 |
11 | /* Tomorrow Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-tag,
15 | .hljs-name,
16 | .hljs-selector-id,
17 | .hljs-selector-class,
18 | .hljs-regexp,
19 | .hljs-deletion {
20 | color: #d54e53;
21 | }
22 |
23 | /* Tomorrow Orange */
24 | .hljs-number,
25 | .hljs-built_in,
26 | .hljs-builtin-name,
27 | .hljs-literal,
28 | .hljs-type,
29 | .hljs-params,
30 | .hljs-meta,
31 | .hljs-link {
32 | color: #e78c45;
33 | }
34 |
35 | /* Tomorrow Yellow */
36 | .hljs-attribute {
37 | color: #e7c547;
38 | }
39 |
40 | /* Tomorrow Green */
41 | .hljs-string,
42 | .hljs-symbol,
43 | .hljs-bullet,
44 | .hljs-addition {
45 | color: #b9ca4a;
46 | }
47 |
48 | /* Tomorrow Blue */
49 | .hljs-title,
50 | .hljs-section {
51 | color: #7aa6da;
52 | }
53 |
54 | /* Tomorrow Purple */
55 | .hljs-keyword,
56 | .hljs-selector-tag {
57 | color: #c397d8;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: black;
64 | color: #eaeaea;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/CodeReader/Themes/tomorrow-night-eighties.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Eighties Theme */
2 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
3 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
4 |
5 | /* Tomorrow Comment */
6 | .hljs-comment,
7 | .hljs-quote {
8 | color: #999999;
9 | }
10 |
11 | /* Tomorrow Red */
12 | .hljs-variable,
13 | .hljs-template-variable,
14 | .hljs-tag,
15 | .hljs-name,
16 | .hljs-selector-id,
17 | .hljs-selector-class,
18 | .hljs-regexp,
19 | .hljs-deletion {
20 | color: #f2777a;
21 | }
22 |
23 | /* Tomorrow Orange */
24 | .hljs-number,
25 | .hljs-built_in,
26 | .hljs-builtin-name,
27 | .hljs-literal,
28 | .hljs-type,
29 | .hljs-params,
30 | .hljs-meta,
31 | .hljs-link {
32 | color: #f99157;
33 | }
34 |
35 | /* Tomorrow Yellow */
36 | .hljs-attribute {
37 | color: #ffcc66;
38 | }
39 |
40 | /* Tomorrow Green */
41 | .hljs-string,
42 | .hljs-symbol,
43 | .hljs-bullet,
44 | .hljs-addition {
45 | color: #99cc99;
46 | }
47 |
48 | /* Tomorrow Blue */
49 | .hljs-title,
50 | .hljs-section {
51 | color: #6699cc;
52 | }
53 |
54 | /* Tomorrow Purple */
55 | .hljs-keyword,
56 | .hljs-selector-tag {
57 | color: #cc99cc;
58 | }
59 |
60 | .hljs {
61 | display: block;
62 | overflow-x: auto;
63 | background: #2d2d2d;
64 | color: #cccccc;
65 | padding: 0.5em;
66 | }
67 |
68 | .hljs-emphasis {
69 | font-style: italic;
70 | }
71 |
72 | .hljs-strong {
73 | font-weight: bold;
74 | }
75 |
--------------------------------------------------------------------------------
/CodeReader/Themes/tomorrow-night.css:
--------------------------------------------------------------------------------
1 | /* Tomorrow Night Theme */
2 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
3 | /* Original theme - https://github.com/chriskempson/tomorrow-theme */
4 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
5 |
6 | /* Tomorrow Comment */
7 | .hljs-comment,
8 | .hljs-quote {
9 | color: #969896;
10 | }
11 |
12 | /* Tomorrow Red */
13 | .hljs-variable,
14 | .hljs-template-variable,
15 | .hljs-tag,
16 | .hljs-name,
17 | .hljs-selector-id,
18 | .hljs-selector-class,
19 | .hljs-regexp,
20 | .hljs-deletion {
21 | color: #cc6666;
22 | }
23 |
24 | /* Tomorrow Orange */
25 | .hljs-number,
26 | .hljs-built_in,
27 | .hljs-builtin-name,
28 | .hljs-literal,
29 | .hljs-type,
30 | .hljs-params,
31 | .hljs-meta,
32 | .hljs-link {
33 | color: #de935f;
34 | }
35 |
36 | /* Tomorrow Yellow */
37 | .hljs-attribute {
38 | color: #f0c674;
39 | }
40 |
41 | /* Tomorrow Green */
42 | .hljs-string,
43 | .hljs-symbol,
44 | .hljs-bullet,
45 | .hljs-addition {
46 | color: #b5bd68;
47 | }
48 |
49 | /* Tomorrow Blue */
50 | .hljs-title,
51 | .hljs-section {
52 | color: #81a2be;
53 | }
54 |
55 | /* Tomorrow Purple */
56 | .hljs-keyword,
57 | .hljs-selector-tag {
58 | color: #b294bb;
59 | }
60 |
61 | .hljs {
62 | display: block;
63 | overflow-x: auto;
64 | background: #1d1f21;
65 | color: #c5c8c6;
66 | padding: 0.5em;
67 | }
68 |
69 | .hljs-emphasis {
70 | font-style: italic;
71 | }
72 |
73 | .hljs-strong {
74 | font-weight: bold;
75 | }
76 |
--------------------------------------------------------------------------------
/CodeReader/Themes/tomorrow.css:
--------------------------------------------------------------------------------
1 | /* http://jmblog.github.com/color-themes-for-google-code-highlightjs */
2 |
3 | /* Tomorrow Comment */
4 | .hljs-comment,
5 | .hljs-quote {
6 | color: #8e908c;
7 | }
8 |
9 | /* Tomorrow Red */
10 | .hljs-variable,
11 | .hljs-template-variable,
12 | .hljs-tag,
13 | .hljs-name,
14 | .hljs-selector-id,
15 | .hljs-selector-class,
16 | .hljs-regexp,
17 | .hljs-deletion {
18 | color: #c82829;
19 | }
20 |
21 | /* Tomorrow Orange */
22 | .hljs-number,
23 | .hljs-built_in,
24 | .hljs-builtin-name,
25 | .hljs-literal,
26 | .hljs-type,
27 | .hljs-params,
28 | .hljs-meta,
29 | .hljs-link {
30 | color: #f5871f;
31 | }
32 |
33 | /* Tomorrow Yellow */
34 | .hljs-attribute {
35 | color: #eab700;
36 | }
37 |
38 | /* Tomorrow Green */
39 | .hljs-string,
40 | .hljs-symbol,
41 | .hljs-bullet,
42 | .hljs-addition {
43 | color: #718c00;
44 | }
45 |
46 | /* Tomorrow Blue */
47 | .hljs-title,
48 | .hljs-section {
49 | color: #4271ae;
50 | }
51 |
52 | /* Tomorrow Purple */
53 | .hljs-keyword,
54 | .hljs-selector-tag {
55 | color: #8959a8;
56 | }
57 |
58 | .hljs {
59 | display: block;
60 | overflow-x: auto;
61 | background: white;
62 | color: #4d4d4c;
63 | padding: 0.5em;
64 | }
65 |
66 | .hljs-emphasis {
67 | font-style: italic;
68 | }
69 |
70 | .hljs-strong {
71 | font-weight: bold;
72 | }
73 |
--------------------------------------------------------------------------------
/CodeReader/Themes/vs.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Visual Studio-like style based on original C# coloring by Jason Diamond
4 |
5 | */
6 | .hljs {
7 | display: block;
8 | overflow-x: auto;
9 | padding: 0.5em;
10 | background: white;
11 | color: black;
12 | }
13 |
14 | .hljs-comment,
15 | .hljs-quote,
16 | .hljs-variable {
17 | color: #008000;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-built_in,
23 | .hljs-name,
24 | .hljs-tag {
25 | color: #00f;
26 | }
27 |
28 | .hljs-string,
29 | .hljs-title,
30 | .hljs-section,
31 | .hljs-attribute,
32 | .hljs-literal,
33 | .hljs-template-tag,
34 | .hljs-template-variable,
35 | .hljs-type,
36 | .hljs-addition {
37 | color: #a31515;
38 | }
39 |
40 | .hljs-deletion,
41 | .hljs-selector-attr,
42 | .hljs-selector-pseudo,
43 | .hljs-meta {
44 | color: #2b91af;
45 | }
46 |
47 | .hljs-doctag {
48 | color: #808080;
49 | }
50 |
51 | .hljs-attr {
52 | color: #f00;
53 | }
54 |
55 | .hljs-symbol,
56 | .hljs-bullet,
57 | .hljs-link {
58 | color: #00b0e8;
59 | }
60 |
61 |
62 | .hljs-emphasis {
63 | font-style: italic;
64 | }
65 |
66 | .hljs-strong {
67 | font-weight: bold;
68 | }
69 |
--------------------------------------------------------------------------------
/CodeReader/Themes/xcode.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | XCode style (c) Angel Garcia
4 |
5 | */
6 |
7 | .hljs {
8 | display: block;
9 | overflow-x: auto;
10 | padding: 0.5em;
11 | background: #fff;
12 | color: black;
13 | }
14 |
15 | .hljs-comment,
16 | .hljs-quote {
17 | color: #006a00;
18 | }
19 |
20 | .hljs-keyword,
21 | .hljs-selector-tag,
22 | .hljs-literal {
23 | color: #aa0d91;
24 | }
25 |
26 | .hljs-name {
27 | color: #008;
28 | }
29 |
30 | .hljs-variable,
31 | .hljs-template-variable {
32 | color: #660;
33 | }
34 |
35 | .hljs-string {
36 | color: #c41a16;
37 | }
38 |
39 | .hljs-regexp,
40 | .hljs-link {
41 | color: #080;
42 | }
43 |
44 | .hljs-title,
45 | .hljs-tag,
46 | .hljs-symbol,
47 | .hljs-bullet,
48 | .hljs-number,
49 | .hljs-meta {
50 | color: #1c00cf;
51 | }
52 |
53 | .hljs-section,
54 | .hljs-class .hljs-title,
55 | .hljs-type,
56 | .hljs-attr,
57 | .hljs-built_in,
58 | .hljs-builtin-name,
59 | .hljs-params {
60 | color: #5c2699;
61 | }
62 |
63 | .hljs-attribute,
64 | .hljs-subst {
65 | color: #000;
66 | }
67 |
68 | .hljs-formula {
69 | background-color: #eee;
70 | font-style: italic;
71 | }
72 |
73 | .hljs-addition {
74 | background-color: #baeeba;
75 | }
76 |
77 | .hljs-deletion {
78 | background-color: #ffc8bd;
79 | }
80 |
81 | .hljs-selector-id,
82 | .hljs-selector-class {
83 | color: #9b703f;
84 | }
85 |
86 | .hljs-doctag,
87 | .hljs-strong {
88 | font-weight: bold;
89 | }
90 |
91 | .hljs-emphasis {
92 | font-style: italic;
93 | }
94 |
--------------------------------------------------------------------------------
/CodeReader/Themes/xt256.css:
--------------------------------------------------------------------------------
1 |
2 | /*
3 | xt256.css
4 |
5 | Contact: initbar [at] protonmail [dot] ch
6 | : github.com/initbar
7 | */
8 |
9 | .hljs {
10 | display: block;
11 | overflow-x: auto;
12 | color: #eaeaea;
13 | background: #000;
14 | padding: 0.5;
15 | }
16 |
17 | .hljs-subst {
18 | color: #eaeaea;
19 | }
20 |
21 | .hljs-emphasis {
22 | font-style: italic;
23 | }
24 |
25 | .hljs-strong {
26 | font-weight: bold;
27 | }
28 |
29 | .hljs-builtin-name,
30 | .hljs-type {
31 | color: #eaeaea;
32 | }
33 |
34 | .hljs-params {
35 | color: #da0000;
36 | }
37 |
38 | .hljs-literal,
39 | .hljs-number,
40 | .hljs-name {
41 | color: #ff0000;
42 | font-weight: bolder;
43 | }
44 |
45 | .hljs-comment {
46 | color: #969896;
47 | }
48 |
49 | .hljs-selector-id,
50 | .hljs-quote {
51 | color: #00ffff;
52 | }
53 |
54 | .hljs-template-variable,
55 | .hljs-variable,
56 | .hljs-title {
57 | color: #00ffff;
58 | font-weight: bold;
59 | }
60 |
61 | .hljs-selector-class,
62 | .hljs-keyword,
63 | .hljs-symbol {
64 | color: #fff000;
65 | }
66 |
67 | .hljs-string,
68 | .hljs-bullet {
69 | color: #00ff00;
70 | }
71 |
72 | .hljs-tag,
73 | .hljs-section {
74 | color: #000fff;
75 | }
76 |
77 | .hljs-selector-tag {
78 | color: #000fff;
79 | font-weight: bold;
80 | }
81 |
82 | .hljs-attribute,
83 | .hljs-built_in,
84 | .hljs-regexp,
85 | .hljs-link {
86 | color: #ff00ff;
87 | }
88 |
89 | .hljs-meta {
90 | color: #fff;
91 | font-weight: bolder;
92 | }
93 |
--------------------------------------------------------------------------------
/CodeReader/Themes/zenburn.css:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | Zenburn style from voldmar.ru (c) Vladimir Epifanov
4 | based on dark.css by Ivan Sagalaev
5 |
6 | */
7 |
8 | .hljs {
9 | display: block;
10 | overflow-x: auto;
11 | padding: 0.5em;
12 | background: #3f3f3f;
13 | color: #dcdcdc;
14 | }
15 |
16 | .hljs-keyword,
17 | .hljs-selector-tag,
18 | .hljs-tag {
19 | color: #e3ceab;
20 | }
21 |
22 | .hljs-template-tag {
23 | color: #dcdcdc;
24 | }
25 |
26 | .hljs-number {
27 | color: #8cd0d3;
28 | }
29 |
30 | .hljs-variable,
31 | .hljs-template-variable,
32 | .hljs-attribute {
33 | color: #efdcbc;
34 | }
35 |
36 | .hljs-literal {
37 | color: #efefaf;
38 | }
39 |
40 | .hljs-subst {
41 | color: #8f8f8f;
42 | }
43 |
44 | .hljs-title,
45 | .hljs-name,
46 | .hljs-selector-id,
47 | .hljs-selector-class,
48 | .hljs-section,
49 | .hljs-type {
50 | color: #efef8f;
51 | }
52 |
53 | .hljs-symbol,
54 | .hljs-bullet,
55 | .hljs-link {
56 | color: #dca3a3;
57 | }
58 |
59 | .hljs-deletion,
60 | .hljs-string,
61 | .hljs-built_in,
62 | .hljs-builtin-name {
63 | color: #cc9393;
64 | }
65 |
66 | .hljs-addition,
67 | .hljs-comment,
68 | .hljs-quote,
69 | .hljs-meta {
70 | color: #7f9f7f;
71 | }
72 |
73 |
74 | .hljs-emphasis {
75 | font-style: italic;
76 | }
77 |
78 | .hljs-strong {
79 | font-weight: bold;
80 | }
81 |
--------------------------------------------------------------------------------
/CodeReader/View/AboutViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AboutViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/17.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import StoreKit
11 | import EZLoadingActivity
12 |
13 | class AboutViewController: UIViewController {
14 |
15 | @IBOutlet var titleLabel: UILabel!
16 | @IBOutlet var donateImageView: UIImageView!
17 | @IBOutlet var restoreButton: UIButton!
18 | var products = [SKProduct]()
19 |
20 | override func viewDidLoad() {
21 | super.viewDidLoad()
22 |
23 | NotificationCenter.default.addObserver(self, selector: #selector(AboutViewController.handlePurchasedNotification(_:)), name: NSNotification.Name(rawValue: IAPHelper.IAPHelperPurchaseNotification), object: nil)
24 | }
25 |
26 | override func viewDidAppear(_ animated: Bool) {
27 | super.viewDidAppear(animated)
28 | if DonationProduct.store.isProductPurchased(DonationProduct.BuyMeACoffee) {
29 | changeStateToPurchased()
30 | } else {
31 | _ = EZLoadingActivity.show("loading...", disableUI: true)
32 | DonationProduct.store.requestProducts { (success, products) in
33 | if success {
34 | _ = EZLoadingActivity.hide()
35 | self.products = products!
36 | if let buyMeACoffee = self.products.first {
37 | if DonationProduct.store.isProductPurchased(buyMeACoffee.productIdentifier) {
38 | self.changeStateToPurchased()
39 | } else {
40 | let tap = UITapGestureRecognizer(target: self, action: #selector(AboutViewController.tapToDonate))
41 | self.donateImageView.isUserInteractionEnabled = true
42 | self.donateImageView.addGestureRecognizer(tap)
43 | }
44 | }
45 | }
46 | }
47 | }
48 | }
49 |
50 | override func didReceiveMemoryWarning() {
51 | super.didReceiveMemoryWarning()
52 | // Dispose of any resources that can be recreated.
53 | }
54 |
55 |
56 | @objc fileprivate func handlePurchasedNotification(_ notification: Notification) {
57 | guard let identifier = notification.object as? String else { return }
58 |
59 | for product in products {
60 | guard product.productIdentifier == identifier else { continue }
61 | changeStateToPurchased()
62 | }
63 | }
64 |
65 | fileprivate func changeStateToPurchased() {
66 | UIView.transition(with: donateImageView, duration: 0.5, options: [.transitionCrossDissolve], animations: {
67 | self.donateImageView.image = UIImage(named: "purchased_coffee")
68 | self.titleLabel.text = "You've unlocked all features"
69 | }, completion: nil)
70 | donateImageView.isUserInteractionEnabled = false
71 | restoreButton.isHidden = true
72 | }
73 |
74 | @objc fileprivate func tapToDonate() {
75 | if let buyMeACoffee = self.products.first {
76 | DonationProduct.store.buyProduct(buyMeACoffee)
77 | }
78 | }
79 |
80 | @IBAction func restoreTapped(_ sender: UIButton) {
81 | DonationProduct.store.restorePurchases()
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/CodeReader/View/BaseTableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseTableViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 2016/10/17.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import RxSwift
11 |
12 | class BaseTableViewController: UITableViewController {
13 |
14 | let disposeBag = DisposeBag()
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 |
19 | // Uncomment the following line to preserve selection between presentations
20 | // self.clearsSelectionOnViewWillAppear = false
21 |
22 | // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
23 | // self.navigationItem.rightBarButtonItem = self.editButtonItem()
24 | }
25 |
26 | override func didReceiveMemoryWarning() {
27 | super.didReceiveMemoryWarning()
28 | // Dispose of any resources that can be recreated.
29 | }
30 |
31 | // MARK: - Table view data source
32 |
33 | override func numberOfSections(in tableView: UITableView) -> Int {
34 | // #warning Incomplete implementation, return the number of sections
35 | return 0
36 | }
37 |
38 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
39 | // #warning Incomplete implementation, return the number of rows
40 | return 0
41 | }
42 |
43 | /*
44 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
45 | let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)
46 |
47 | // Configure the cell...
48 |
49 | return cell
50 | }
51 | */
52 |
53 | /*
54 | // Override to support conditional editing of the table view.
55 | override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
56 | // Return false if you do not want the specified item to be editable.
57 | return true
58 | }
59 | */
60 |
61 | /*
62 | // Override to support editing the table view.
63 | override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
64 | if editingStyle == .delete {
65 | // Delete the row from the data source
66 | tableView.deleteRows(at: [indexPath], with: .fade)
67 | } else if editingStyle == .insert {
68 | // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
69 | }
70 | }
71 | */
72 |
73 | /*
74 | // Override to support rearranging the table view.
75 | override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {
76 |
77 | }
78 | */
79 |
80 | /*
81 | // Override to support conditional rearranging of the table view.
82 | override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
83 | // Return false if you do not want the item to be re-orderable.
84 | return true
85 | }
86 | */
87 |
88 | /*
89 | // MARK: - Navigation
90 |
91 | // In a storyboard-based application, you will often want to do a little preparation before navigation
92 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
93 | // Get the new view controller using segue.destinationViewController.
94 | // Pass the selected object to the new view controller.
95 | }
96 | */
97 |
98 | }
99 |
--------------------------------------------------------------------------------
/CodeReader/View/BaseViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 2016/9/27.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import RxSwift
11 |
12 | class BaseViewController: UIViewController {
13 |
14 | let disposeBag = DisposeBag()
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 |
19 | // Do any additional setup after loading the view.
20 | }
21 |
22 | override func didReceiveMemoryWarning() {
23 | super.didReceiveMemoryWarning()
24 | // Dispose of any resources that can be recreated.
25 | }
26 |
27 |
28 | /*
29 | // MARK: - Navigation
30 |
31 | // In a storyboard-based application, you will often want to do a little preparation before navigation
32 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
33 | // Get the new view controller using segue.destinationViewController.
34 | // Pass the selected object to the new view controller.
35 | }
36 | */
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/CodeReader/View/BranchCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BranchCell.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/12.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class BranchCell: UITableViewCell {
12 |
13 | @IBOutlet var branchLabel: InsetsLabel!
14 | @IBOutlet var messageLabel: UILabel!
15 | @IBOutlet var updateInfoLabel: UILabel!
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | // Initialization code
19 | }
20 |
21 | override func setSelected(_ selected: Bool, animated: Bool) {
22 | super.setSelected(selected, animated: animated)
23 |
24 | // Configure the view for the selected state
25 | }
26 |
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/CodeReader/View/BranchListViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BranchListViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/6.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import SwiftDate
11 | import RxSwift
12 | import RxCocoa
13 |
14 | class BranchListViewController: BaseTableViewController {
15 | var viewModel: BranchListViewModel!
16 | var ownerName: String!
17 | var repoName: String!
18 |
19 | let BranchCellIdentifier = "BranchCell"
20 |
21 | override func viewDidLoad() {
22 | super.viewDidLoad()
23 |
24 | navigationItem.title = "Branches"
25 |
26 | tableView.register(UINib.init(nibName: "BranchCell", bundle: nil), forCellReuseIdentifier: BranchCellIdentifier)
27 | tableView.rowHeight = 70
28 |
29 | bindViewModel()
30 | }
31 |
32 | override func didReceiveMemoryWarning() {
33 | super.didReceiveMemoryWarning()
34 | // Dispose of any resources that can be recreated.
35 | }
36 |
37 | func bindViewModel() {
38 | viewModel = BranchListViewModel(ownerName: ownerName, repoName: repoName)
39 | viewModel.dataSource.configureCell = { [unowned self] dataSource, tableView, indexPath, branch in
40 | let cell = tableView.dequeueReusableCell(withIdentifier: self.BranchCellIdentifier, for: indexPath) as! BranchCell
41 | cell.branchLabel.text = branch.name
42 | cell.branchLabel.layer.cornerRadius = 3
43 | cell.branchLabel.layer.masksToBounds = true
44 | cell.branchLabel.insets = UIEdgeInsetsMake(0, 5, 0, 5)
45 | cell.updateInfoLabel.alpha = 0
46 | cell.messageLabel.alpha = 0
47 | self.viewModel.loadLatestCommit(urlString: branch.latestCommitURLString!).subscribe(onNext: { (commit) in
48 |
49 | if let dateString = commit.commitInfo?.committer?.dateString {
50 | let date = try! DateInRegion(string: dateString, format: .iso8601(options: .withInternetDateTime))
51 | let (colloquial, _) = try! date.colloquialSinceNow()
52 | cell.updateInfoLabel.text = colloquial
53 | cell.messageLabel.text = commit.commitInfo?.message
54 | UIView.animate(withDuration: 0.3, animations: {
55 | cell.updateInfoLabel.alpha = 1
56 | cell.messageLabel.alpha = 1
57 | })
58 | }
59 | }).addDisposableTo(self.disposeBag)
60 | return cell
61 | }
62 |
63 | viewModel.loadBranches().map { (branches) -> [BranchSection] in
64 | return branches.map {
65 | BranchSection(items: [$0])
66 | }
67 | }.bindTo(tableView.rx.items(dataSource: viewModel.dataSource))
68 | .addDisposableTo(disposeBag)
69 | }
70 |
71 | override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
72 | return 20
73 | }
74 |
75 | override func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
76 | return CGFloat.leastNormalMagnitude
77 | }
78 |
79 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
80 | log.info("Select index path:\(indexPath.section, indexPath.row)")
81 | if let branch = try! viewModel.dataSource.model(at: indexPath) as? Branch {
82 | performSegue(withIdentifier: "ShowCommitList", sender: branch.name)
83 | }
84 | }
85 | // MARK: - Navigation
86 |
87 | // In a storyboard-based application, you will often want to do a little preparation before navigation
88 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
89 | if segue.identifier == "ShowCommitList" {
90 |
91 | if let branchName = sender as? String,
92 | let commitListVC = segue.destination as? CommitListViewController{
93 | let url = "https://api.github.com/repos/\(viewModel.ownerName!)/\(viewModel.repoName!)/commits?sha=\(branchName)"
94 | let commitListViewModel = CommitListViewModel(apiURLString: url)
95 | commitListVC.viewModel = commitListViewModel
96 | }
97 | }
98 | }
99 |
100 | }
101 |
--------------------------------------------------------------------------------
/CodeReader/View/CommitCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommitCell.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/3.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class CommitCell: UITableViewCell {
12 |
13 | @IBOutlet var avatarImageView: UIImageView!
14 | @IBOutlet var messageLabel: UILabel!
15 | @IBOutlet var shaLabel: UILabel!
16 | @IBOutlet var committerLabel: UILabel!
17 |
18 | override func awakeFromNib() {
19 | super.awakeFromNib()
20 | // Initialization code
21 | }
22 |
23 | override func setSelected(_ selected: Bool, animated: Bool) {
24 | super.setSelected(selected, animated: animated)
25 |
26 | // Configure the view for the selected state
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/CodeReader/View/CommitFileCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommitFileCell.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 2016/10/19.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class CommitFileCell: UITableViewCell {
12 |
13 | enum FileChangeType {
14 | case Addition
15 | case Deletion
16 | case Default
17 |
18 | func backgroundColor() -> UIColor {
19 | switch self {
20 | case .Addition:
21 | return UIColor("#55A532")
22 | case .Deletion:
23 | return UIColor("#BD2D00")
24 | default:
25 | return UIColor("#DDDDDD")
26 | }
27 | }
28 | }
29 |
30 | @IBOutlet var statusImageView: UIImageView!
31 | @IBOutlet var filenameLabel: UILabel!
32 | @IBOutlet var deletionsLabel: InsetsLabel!
33 | @IBOutlet var additionsLabel: InsetsLabel!
34 | override func awakeFromNib() {
35 | super.awakeFromNib()
36 | // Initialization code
37 | self.additionsLabel.layer.cornerRadius = 3
38 | self.deletionsLabel.layer.cornerRadius = 3
39 |
40 | self.additionsLabel.layer.masksToBounds = true
41 | self.additionsLabel.insets = UIEdgeInsetsMake(0, 5, 0, 5)
42 | self.deletionsLabel.layer.masksToBounds = true
43 | self.deletionsLabel.insets = UIEdgeInsetsMake(0, 5, 0, 5)
44 | }
45 |
46 | override func setSelected(_ selected: Bool, animated: Bool) {
47 | super.setSelected(selected, animated: animated)
48 |
49 | // Configure the view for the selected state
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/CodeReader/View/CommitFileListViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommitFileListViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 2016/10/19.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Crashlytics
11 |
12 | class CommitFileListViewController: BaseTableViewController {
13 |
14 | var viewModel: CommitFileListViewModel!
15 | let CommitFileCellIdentifier = "CommitFileCell"
16 |
17 | override func viewDidLoad() {
18 | super.viewDidLoad()
19 |
20 | self.navigationItem.title = "Commit Files"
21 | self.tableView.hideEmptyCells()
22 | Answers.logCustomEvent(withName: "Show Commit File List", customAttributes: nil)
23 | }
24 |
25 | override func viewWillAppear(_ animated: Bool) {
26 | super.viewWillAppear(animated)
27 | bindViewModel()
28 | }
29 |
30 | override func didReceiveMemoryWarning() {
31 | super.didReceiveMemoryWarning()
32 | // Dispose of any resources that can be recreated.
33 | }
34 |
35 | // MARK: Private methods
36 | private func bindViewModel() {
37 | viewModel.commitFiles.asDriver()
38 | .drive(tableView.rx.items(cellIdentifier: CommitFileCellIdentifier, cellType: CommitFileCell.self)) { (row, commitFile, cell) in
39 | if let filename = commitFile.filename {
40 | cell.filenameLabel.text = self.shortenFilename(filename: filename)
41 | }
42 | if let additions = commitFile.additions {
43 | cell.additionsLabel.text = "+\(additions)"
44 | }
45 | if let deletions = commitFile.deletions {
46 | cell.deletionsLabel.text = "-\(deletions)"
47 | }
48 |
49 | switch commitFile.status! {
50 | case "added": cell.statusImageView.image = #imageLiteral(resourceName: "file_addition")
51 | case "modified": cell.statusImageView.image = #imageLiteral(resourceName: "file_modification")
52 | case "deleted": cell.statusImageView.image = #imageLiteral(resourceName: "file_deletion")
53 | default: cell.statusImageView.image = #imageLiteral(resourceName: "file_addition")
54 | }
55 |
56 | }.addDisposableTo(disposeBag)
57 |
58 | viewModel.loadCommitFileList().subscribe(onNext: { [unowned self] (commitFiles) in
59 | self.viewModel.commitFiles.value = commitFiles
60 | }).addDisposableTo(disposeBag)
61 | }
62 |
63 | // MARK: - Table view data source
64 |
65 | override func numberOfSections(in tableView: UITableView) -> Int {
66 | // #warning Incomplete implementation, return the number of sections
67 | return 1
68 | }
69 |
70 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
71 | // #warning Incomplete implementation, return the number of rows
72 | return viewModel.commitFiles.value.count
73 | }
74 |
75 |
76 | private func shortenFilename(filename: String) -> String {
77 | let paths = filename.components(separatedBy: "/")
78 | if paths.count > 2 {
79 | return ".../".appending(paths[paths.count-2]).appending("/").appending(paths.last!)
80 | }
81 | return filename
82 | }
83 |
84 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
85 | // performSegue(withIdentifier: "ShowFileChange", sender: indexPath)
86 | }
87 |
88 | // MARK: - Navigation
89 |
90 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
91 | if segue.identifier == "ShowFileChange" {
92 | if let destinationVC = segue.destination as? FileChangeViewController,
93 | let indexPath = self.tableView.indexPathForSelectedRow {
94 | let file = viewModel.commitFiles.value[indexPath.row]
95 | destinationVC.patchString = file.patch
96 | destinationVC.navigationItem.title = file.filename?.fileBaseName
97 | }
98 | }
99 | }
100 |
101 |
102 | }
103 |
--------------------------------------------------------------------------------
/CodeReader/View/FileCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FileCell.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/27.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class FileCell: UITableViewCell {
12 |
13 | @IBOutlet var fileIconImageView: UIImageView!
14 | @IBOutlet var filenameLabel: UILabel!
15 | override func awakeFromNib() {
16 | super.awakeFromNib()
17 | // Initialization code
18 | }
19 |
20 | override func setSelected(_ selected: Bool, animated: Bool) {
21 | super.setSelected(selected, animated: animated)
22 |
23 | // Configure the view for the selected state
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/CodeReader/View/FileChangeViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FileChangeViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 2016/11/15.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Crashlytics
11 |
12 | class FileChangeViewController: UIViewController {
13 |
14 |
15 | @IBOutlet var textView: UITextView!
16 |
17 | var patchString: String?
18 |
19 | override func viewDidLoad() {
20 | super.viewDidLoad()
21 | Answers.logCustomEvent(withName: "Show File Change", customAttributes: nil)
22 | }
23 |
24 | override func viewDidAppear(_ animated: Bool) {
25 | super.viewDidAppear(animated)
26 |
27 | if let patchString = self.patchString {
28 | self.textView.text = patchString
29 | }
30 | }
31 |
32 | override func didReceiveMemoryWarning() {
33 | super.didReceiveMemoryWarning()
34 | // Dispose of any resources that can be recreated.
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/CodeReader/View/HistoryViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // HistoryViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/23.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Crashlytics
11 |
12 | class HistoryViewController: UIViewController {
13 |
14 | let CellIdentifier = "RecentFileCell"
15 | var recentList = [Recent]()
16 |
17 | @IBOutlet var tableView: UITableView!
18 | @IBOutlet var segmentedControl: UISegmentedControl!
19 |
20 | override func viewDidLoad() {
21 | super.viewDidLoad()
22 |
23 | self.navigationItem.title = "History"
24 |
25 | self.tableView.register(UINib.init(nibName: "RecentFileCell", bundle: nil), forCellReuseIdentifier: CellIdentifier)
26 | self.tableView.rowHeight = 70
27 | configSegmentedControl()
28 | }
29 |
30 | override func viewWillAppear(_ animated: Bool) {
31 | super.viewWillAppear(animated)
32 | self.tableView.reloadData()
33 | }
34 |
35 | override func didReceiveMemoryWarning() {
36 | super.didReceiveMemoryWarning()
37 | // Dispose of any resources that can be recreated.
38 | }
39 |
40 | fileprivate func configSegmentedControl() {
41 | self.segmentedControl.addTarget(self, action: #selector(HistoryViewController.segmentChanged(_:)), for: .valueChanged)
42 | self.segmentedControl.selectedSegmentIndex = 0
43 | self.recentList = RecentsManager.sharedManager.recents
44 | }
45 |
46 | @objc fileprivate func segmentChanged(_ sender: UISegmentedControl) {
47 | switch sender.selectedSegmentIndex {
48 | case 0:
49 | recentList = RecentsManager.sharedManager.recents
50 | Answers.logCustomEvent(withName: "Show Recents", customAttributes: nil)
51 | case 1:
52 | if DonationProduct.store.isProductPurchased(DonationProduct.BuyMeACoffee) {
53 | recentList = RecentsManager.sharedManager.favorites
54 | } else {
55 | let alertController = UIAlertController(title: "", message: "Buy me a coffee to unlock favorites", preferredStyle: .alert)
56 | let alertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)
57 | alertController.addAction(alertAction)
58 | self.present(alertController, animated: true, completion: {
59 | self.segmentedControl.selectedSegmentIndex = 0
60 | self.segmentedControl.didChangeValue(forKey: "selectedSegmentIndex")
61 | })
62 | }
63 | Answers.logCustomEvent(withName: "Show Favorites", customAttributes: nil)
64 | default:
65 | recentList = RecentsManager.sharedManager.recents
66 | }
67 | self.tableView.reloadData()
68 | }
69 | }
70 |
71 | extension HistoryViewController: UITableViewDelegate {
72 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
73 | let recent = recentList[(indexPath as NSIndexPath).row]
74 | let file = recent.file
75 |
76 | let codeVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "CodeViewController") as! CodeViewController
77 | codeVC.file = file
78 | codeVC.hidesBottomBarWhenPushed = true
79 | navigationController?.pushViewController(codeVC, animated: true)
80 | }
81 | }
82 |
83 | extension HistoryViewController: UITableViewDataSource {
84 | func numberOfSections(in tableView: UITableView) -> Int {
85 | return 1
86 | }
87 |
88 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
89 | return recentList.count
90 | }
91 |
92 |
93 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
94 | let cell = tableView.dequeueReusableCell(withIdentifier: CellIdentifier, for: indexPath) as! RecentFileCell
95 |
96 | let recent = recentList[(indexPath as NSIndexPath).row]
97 | cell.fileNameLabel.text = recent.file.name
98 | cell.ownerRepoLabel.text = recent.ownerName + " / " + recent.repoName
99 |
100 | return cell
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/CodeReader/View/InsetsLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // InsetsLabel.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 2016/10/20.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @IBDesignable class InsetsLabel: UILabel {
12 | @IBInspectable var topInsets: CGFloat = 0.0
13 | @IBInspectable var bottomInsets: CGFloat = 0.0
14 | @IBInspectable var leftInsets: CGFloat = 5.0
15 | @IBInspectable var rightInsets: CGFloat = 5.0
16 |
17 | var insets: UIEdgeInsets {
18 | get {
19 | return UIEdgeInsetsMake(topInsets, leftInsets, bottomInsets, rightInsets)
20 | }
21 | set {
22 | topInsets = newValue.top
23 | bottomInsets = newValue.bottom
24 | leftInsets = newValue.left
25 | rightInsets = newValue.right
26 | }
27 | }
28 |
29 | override func drawText(in rect: CGRect) {
30 | let insects = UIEdgeInsets.init(top:topInsets, left: leftInsets, bottom: bottomInsets, right: rightInsets)
31 | super.drawText(in: UIEdgeInsetsInsetRect(rect, insects))
32 | }
33 |
34 | override func sizeThatFits(_ size: CGSize) -> CGSize {
35 | var newSize = super.sizeThatFits(size)
36 | newSize.width += leftInsets + rightInsets
37 | newSize.height += topInsets + bottomInsets
38 | return newSize
39 | }
40 |
41 | override var intrinsicContentSize : CGSize {
42 | var contentSize = super.intrinsicContentSize
43 | contentSize.width += leftInsets + rightInsets
44 | contentSize.height += topInsets + bottomInsets
45 | return contentSize
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/CodeReader/View/RecentFileCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RecentFileCell.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/23.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class RecentFileCell: UITableViewCell {
12 |
13 | @IBOutlet var fileNameLabel: UILabel!
14 | @IBOutlet var ownerRepoLabel: UILabel!
15 |
16 | override func awakeFromNib() {
17 | super.awakeFromNib()
18 | // Initialization code
19 | }
20 |
21 | override func setSelected(_ selected: Bool, animated: Bool) {
22 | super.setSelected(selected, animated: animated)
23 |
24 | // Configure the view for the selected state
25 | }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/CodeReader/View/RecentFileCell.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
22 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
--------------------------------------------------------------------------------
/CodeReader/View/SearchRepoCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SearchRepoCell.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/10.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class SearchRepoCell: UITableViewCell {
12 |
13 | @IBOutlet var ownerAvatarImageView: UIImageView!
14 | @IBOutlet var repoNameLabel: UILabel!
15 | @IBOutlet var repoDescriptionLabel: UILabel!
16 | @IBOutlet var repoStarsLabel: UILabel!
17 | @IBOutlet var repoForksLabel: UILabel!
18 |
19 | override func awakeFromNib() {
20 | super.awakeFromNib()
21 | // Initialization code
22 | ownerAvatarImageView.layer.masksToBounds = true
23 | ownerAvatarImageView.layer.cornerRadius = 20
24 | // ownerAvatarImageView.layer.borderColor = UIColor.blackColor().CGColor
25 | // ownerAvatarImageView.layer.borderWidth = 1
26 | repoNameLabel.textColor = UIColor.black
27 | }
28 |
29 | override func setSelected(_ selected: Bool, animated: Bool) {
30 | super.setSelected(selected, animated: animated)
31 |
32 | // Configure the view for the selected state
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/CodeReader/View/ThemeCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ThemeCell.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/11.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ThemeCell: UITableViewCell {
12 |
13 | @IBOutlet var lockImageView: UIImageView!
14 | @IBOutlet var nameLabel: UILabel!
15 | @IBOutlet var colorView1: UIView!
16 | @IBOutlet var colorView2: UIView!
17 | @IBOutlet var colorView3: UIView!
18 | @IBOutlet var colorView4: UIView!
19 |
20 | override func awakeFromNib() {
21 | super.awakeFromNib()
22 | // Initialization code
23 | }
24 |
25 | override func setSelected(_ selected: Bool, animated: Bool) {
26 | super.setSelected(selected, animated: animated)
27 |
28 | // Configure the view for the selected state
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/CodeReader/View/ThemeListViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ThemeListViewController.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/11.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Crashlytics
11 |
12 | class ThemeListViewController: UITableViewController {
13 | let viewModel = ThemeViewModel()
14 | var selectedTheme: Theme?
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 |
19 | tableView.register(UINib.init(nibName: "ThemeCell", bundle: nil), forCellReuseIdentifier: "Theme")
20 | tableView.reloadData()
21 | Answers.logCustomEvent(withName: "Show Theme List", customAttributes: nil)
22 | }
23 |
24 | override func didReceiveMemoryWarning() {
25 | super.didReceiveMemoryWarning()
26 | // Dispose of any resources that can be recreated.
27 | }
28 |
29 | // MARK: - Table view data source
30 |
31 | override func numberOfSections(in tableView: UITableView) -> Int {
32 | return viewModel.themes.count
33 | }
34 |
35 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
36 | return 1
37 | }
38 |
39 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
40 | let cell = tableView.dequeueReusableCell(withIdentifier: "Theme", for: indexPath) as! ThemeCell
41 | let theme = viewModel.themes[(indexPath as NSIndexPath).section]
42 | if theme.isPurchased || DonationProduct.store.isProductPurchased(DonationProduct.BuyMeACoffee) {
43 | cell.lockImageView.isHidden = true
44 | } else {
45 | cell.lockImageView.isHidden = false
46 | }
47 | cell.contentView.backgroundColor = theme.colors[0]
48 | cell.nameLabel.text = theme.name
49 | cell.nameLabel.textColor = theme.colors[1]
50 | cell.colorView1.backgroundColor = theme.colors[2]
51 | cell.colorView2.backgroundColor = theme.colors[3]
52 | cell.colorView3.backgroundColor = theme.colors[4]
53 | cell.colorView4.backgroundColor = theme.colors[5]
54 | return cell
55 | }
56 |
57 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
58 | let theme = viewModel.themes[(indexPath as NSIndexPath).section]
59 | if theme.isPurchased || DonationProduct.store.isProductPurchased(DonationProduct.BuyMeACoffee) {
60 | performSegue(withIdentifier: "ChangeTheme", sender: indexPath)
61 | } else {
62 | let alertController = UIAlertController(title: "", message: "Please buy me a coffee to unlock all themes", preferredStyle: .alert)
63 | let alertAction = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: { (_) in
64 | _ = self.navigationController?.popViewController(animated: true)
65 | })
66 | alertController.addAction(alertAction)
67 | self.present(alertController, animated: true, completion: nil)
68 | tableView.deselectRow(at: indexPath, animated: true)
69 | }
70 | }
71 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
72 | if segue.identifier == "ChangeTheme" {
73 | if let indexPath = sender as? IndexPath{
74 | selectedTheme = viewModel.themes[(indexPath as NSIndexPath).section]
75 | UserDefaults.standard.set(selectedTheme?.name, forKey: "default_theme")
76 | Answers.logCustomEvent(withName: "Change Theme", customAttributes: ["theme": selectedTheme?.name ?? "error"])
77 | }
78 | }
79 | }
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/CodeReader/ViewModel/BranchListViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BranchListViewModel.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/6.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import Alamofire
11 | import ObjectMapper
12 | import AlamofireObjectMapper
13 | import RxSwift
14 | import RxCocoa
15 | import RxDataSources
16 |
17 | struct BranchSection {
18 | var items: [Branch]
19 | }
20 |
21 | extension BranchSection: SectionModelType {
22 | typealias Item = Branch
23 | init(original: BranchSection, items: [Item]) {
24 | self = original
25 | self.items = items
26 | }
27 | }
28 |
29 | class BranchListViewModel {
30 |
31 | let dataSource = RxTableViewSectionedReloadDataSource()
32 |
33 | // var branches = Variable<[Branch]>([])
34 | var ownerName: String!
35 | var repoName: String!
36 | let disposeBag = DisposeBag()
37 |
38 | init(ownerName: String, repoName: String) {
39 |
40 | self.ownerName = ownerName
41 | self.repoName = repoName
42 |
43 | // loadBranches().subscribe(onNext: { (branches) in
44 | // self.branches.value = branches
45 | // }, onError: { error in
46 | // log.error("Error in loading branches: \(error)")
47 | // })
48 | // .addDisposableTo(disposeBag)
49 | }
50 |
51 |
52 | func loadLatestCommit(urlString: String) -> Observable {
53 | return Observable.create({ (observer) -> Disposable in
54 | let request = Alamofire.request(urlString).responseObject { (response: DataResponse) in
55 | if let commit = response.result.value {
56 | observer.onNext(commit)
57 | observer.onCompleted()
58 | } else if let error = response.result.error {
59 | observer.onError(error)
60 | }
61 | }
62 | return Disposables.create {
63 | log.info("dipose request: \(request)")
64 | }
65 | })
66 | }
67 |
68 | func loadBranches() -> Observable<[Branch]> {
69 | let url = "https://api.github.com/repos/\(ownerName!)/\(repoName!)/branches"
70 |
71 | return Observable.create({ (observer) -> Disposable in
72 | let request = Alamofire.request(url)
73 | .responseArray(completionHandler: { (response: DataResponse<[Branch]>) in
74 | if let branches = response.result.value {
75 | observer.onNext(branches)
76 | observer.onCompleted()
77 | } else if let error = response.result.error{
78 | observer.onError(error)
79 | }
80 |
81 | })
82 | return Disposables.create {
83 | log.info("dispose request: \(request)")
84 | }
85 | })
86 | }
87 | }
88 |
--------------------------------------------------------------------------------
/CodeReader/ViewModel/CommitFileListViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommitFileListViewModel.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 2016/11/14.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Alamofire
11 | import ObjectMapper
12 | import RxSwift
13 | import RxCocoa
14 |
15 | class CommitFileListViewModel {
16 |
17 | var commitFiles = Variable<[CommitFile]>([])
18 |
19 | var apiURLString: String?
20 |
21 | init(apiURLString: String) {
22 | self.apiURLString = apiURLString
23 | }
24 |
25 | func loadCommitFileList() -> Observable<[CommitFile]> {
26 | return Observable.create({ (observer) -> Disposable in
27 | guard let url = self.apiURLString else {
28 | return Disposables.create {
29 | log.error("invalid url string")
30 | }
31 | }
32 | let request = Alamofire.request(url)
33 | .responseObject(completionHandler: { (response: DataResponse) in
34 | if let commit = response.result.value {
35 | // self.commitFiles.value.append(contentsOf: commit.files)
36 | observer.onNext(commit.files)
37 | observer.onCompleted()
38 | } else if let error = response.result.error {
39 | observer.onError(error)
40 | }
41 | })
42 |
43 | return Disposables.create {
44 | log.info("dispose request: \(request)")
45 | }
46 | })
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/CodeReader/ViewModel/CommitListViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommitListViewModel.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/9/5.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Alamofire
11 | import ObjectMapper
12 | import RxSwift
13 | import RxCocoa
14 |
15 | class CommitListViewModel {
16 |
17 | var commits = Variable<[CommitItem]>([])
18 | let apiURLString: String?
19 |
20 | var page = 1
21 |
22 | init(apiURLString: String) {
23 | self.apiURLString = apiURLString
24 | self.page = 1
25 | }
26 |
27 | func loadCommitList() -> Observable<[CommitItem]> {
28 | return Observable.create({ (observer) -> Disposable in
29 | guard let url = self.apiURLString else {
30 | return Disposables.create {
31 | log.error("wrong url")
32 | }
33 | }
34 | let apiURL = url + "&page=" + "\(self.page)"
35 | let request = Alamofire.request(apiURL)
36 | .responseArray(completionHandler: { (response: DataResponse<[CommitItem]>) in
37 | if let items = response.result.value {
38 | observer.onNext(items)
39 | observer.onCompleted()
40 | self.page += 1
41 | } else if let error = response.result.error {
42 | observer.onError(error)
43 | }
44 | })
45 | return Disposables.create {
46 | log.info("dispose request: \(request)")
47 | }
48 | })
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/CodeReader/ViewModel/RepoViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RepoViewModel.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/5/18.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Alamofire
11 | import RxSwift
12 | //import RxCocoa
13 |
14 | class RepoViewModel {
15 | let avatarImageURLString = Variable("")
16 | let name = Variable("")
17 | let description = Variable("")
18 | let stars = Variable(0)
19 | let watchers = Variable(0)
20 | let forks = Variable(0)
21 | let owner = Variable(User())
22 | let createdDate = Variable("")
23 | let updatedDate = Variable("")
24 | let language = Variable("")
25 | let ownerName = Variable("")
26 | let fullName = Variable("")
27 | let size = Variable(0)
28 |
29 | init(repo: Repo) {
30 | avatarImageURLString.value = (repo.owner?.avatarURLString)!
31 | name.value = repo.name ?? ""
32 | description.value = repo.description ?? ""
33 | stars.value = repo.starsCount ?? 0
34 | watchers.value = repo.watchersCount ?? 0
35 | forks.value = repo.forksCount ?? 0
36 | owner.value = repo.owner!
37 | createdDate.value = repo.createdDate ?? ""
38 | updatedDate.value = repo.pushedDate ?? ""
39 | language.value = repo.language ?? "Unknown"
40 | ownerName.value = repo.owner!.loginName ?? ""
41 | size.value = repo.size ?? 0
42 | fullName.value = repo.fullName ?? ""
43 | }
44 |
45 |
46 | func fetchWatchers() {
47 | let url = String(format: "https://api.github.com/repos/%@/%@/subscribers",
48 | owner.value.loginName!, name.value)
49 | Alamofire.request(url).responseJSON { (response) in
50 | if let watchers = response.result.value as? NSArray {
51 | self.watchers.value = watchers.count
52 | }
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/CodeReader/ViewModel/ThemeViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ThemeViewModel.swift
3 | // CodeReader
4 | //
5 | // Created by vulgur on 16/6/11.
6 | // Copyright © 2016年 MAD. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | class ThemeViewModel {
12 | var themes = [Theme]()
13 | init() {
14 | themes = ThemeFactory.themes()
15 | }
16 | // let name = Observable("")
17 | // let keywordColor = Observable(UIColor.blackColor()) // colors[0]
18 | // let backgroundColor = Observable(UIColor.whiteColor()) // colors[1]
19 | // let color1 = Observable(UIColor.whiteColor()) // colors[2]
20 | // let color2 = Observable(UIColor.whiteColor()) // colors[3]
21 | // let color3 = Observable(UIColor.whiteColor()) // colors[4]
22 | // let color4 = Observable(UIColor.whiteColor()) // colors[5]
23 | //
24 | // init(theme: Theme) {
25 | // name.value = theme.name
26 | // keywordColor.value = theme.colors[0] ?? UIColor.blackColor()
27 | // backgroundColor.value = theme.colors[1] ?? UIColor.blackColor()
28 | // color1.value = theme.colors[2] ?? UIColor.blackColor()
29 | // color2.value = theme.colors[3] ?? UIColor.blackColor()
30 | // color3.value = theme.colors[4] ?? UIColor.blackColor()
31 | // color4.value = theme.colors[5] ?? UIColor.blackColor()
32 | // }
33 | }
34 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Wang Shudao
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Sources
2 |
3 | 
4 |
5 | App Store: [http://itunes.apple.com/app/id1125732186](http://itunes.apple.com/app/id1125732186)
6 | ### What's New in version 1.2.1
7 | 1. Support viewing commits(branches, file changes, patches)
8 | 2. Use RxSwift
9 | 3. Bugfix and UI improvement
10 |
11 | ### What's New in Version 1.1
12 | 1. New icon
13 | 2. Complexion reduction UI style
14 | 3. Add files to favorites
15 | 4. Add Tomorrow themes
16 | 5. Support screen rotation
17 |
18 | ### Description
19 |
20 | Sources is a simplified github client for reading the source code easily and comfortably.
21 |
22 | Repos can be searched and sorted by stars, forks, latest updated time or just best matched. Sources presents the README in front of you along with other important metrics of the repo.
23 |
24 | Aim for reading and studying the source code with ease, Sources provides you whole code file with plenty of colorful syntax highlight themes and a recent list for reviewing the code, just like you view the code in any IDE or editor on your computer.
25 |
26 | Plus, Sources offers several paid features, such as saving the recent items when app enters into background, storing more recent items and unlocking more wonderful themes.
27 |
28 | In addition to the paid feature mentioned, you can unlock all the paid features in the future versions which will include:
29 |
30 | - change fonts
31 | - download repos or single files
32 | - show line numbers
33 | - and more stunning features
34 |
35 | All of above will available after you buy me a coffee!
36 |
37 | If you have advices and suggestions or want more features, please let me know about what you think:
38 | - Sina Weibo: iVulgur
39 | - Twitter: iVulgur
40 | - Email: shudao.wang@me.com
41 |
--------------------------------------------------------------------------------
/fix_carthage.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | for plist in ./Carthage/Build/iOS/*/*.plist ; do
4 | if [ -e "$plist" ] ; then # Check whether file exists.
5 | plutil -replace 'CFBundleShortVersionString' -string $1 $plist
6 | fi
7 | done
8 |
--------------------------------------------------------------------------------
/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vulgur/Sources/5b99855d8cb09ac2e68f8ca617c8045130d9648b/logo.png
--------------------------------------------------------------------------------
/scripts/set_build_number.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | git=$(sh /etc/profile; which git)
4 | number_of_commits=$("$git" rev-list HEAD --count)
5 | git_release_version=$("$git" describe --tags --always --abbrev=0)
6 |
7 | target_plist="$TARGET_BUILD_DIR/$INFOPLIST_PATH"
8 | dsym_plist="$DWARF_DSYM_FOLDER_PATH/$DWARF_DSYM_FILE_NAME/Contents/Info.plist"
9 |
10 | for plist in "$target_plist" "$dsym_plist"; do
11 | if [ -f "$plist" ]; then
12 | /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $number_of_commits" "$plist"
13 | /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${git_release_version#*v}" "$plist"
14 | fi
15 | done
16 |
--------------------------------------------------------------------------------