├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── apk └── canary.apk ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── io │ │ └── geeteshk │ │ └── hyper │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── color │ │ ├── css.json │ │ ├── html.json │ │ └── js.json │ ├── files │ │ ├── default │ │ │ ├── index.html │ │ │ ├── main.js │ │ │ └── style.css │ │ └── import │ │ │ └── index.html │ ├── fonts │ │ └── Inconsolata-Regular.ttf │ └── web │ │ └── favicon.ico │ ├── java │ └── io │ │ └── geeteshk │ │ └── hyper │ │ ├── Hyper.kt │ │ ├── extensions │ │ ├── Callback.kt │ │ ├── Context.kt │ │ ├── File.kt │ │ ├── Input.kt │ │ ├── LiveData.kt │ │ ├── String.kt │ │ └── View.kt │ │ ├── git │ │ ├── CheckoutTask.kt │ │ ├── CloneTask.kt │ │ ├── CommitTask.kt │ │ ├── FetchTask.kt │ │ ├── GitTask.kt │ │ ├── GitWrapper.kt │ │ ├── PullTask.kt │ │ └── PushTask.kt │ │ ├── ui │ │ ├── activity │ │ │ ├── AnalyzeActivity.kt │ │ │ ├── IntroActivity.kt │ │ │ ├── MainActivity.kt │ │ │ ├── ProjectActivity.kt │ │ │ ├── RemotesActivity.kt │ │ │ ├── SettingsActivity.kt │ │ │ ├── SplashActivity.kt │ │ │ ├── ThemedActivity.kt │ │ │ └── WebActivity.kt │ │ ├── adapter │ │ │ ├── AnalyzeAdapter.kt │ │ │ ├── FileAdapter.kt │ │ │ ├── FileBrowserAdapter.kt │ │ │ ├── GitLogsAdapter.kt │ │ │ ├── IntroAdapter.kt │ │ │ ├── LogsAdapter.kt │ │ │ ├── ProjectAdapter.kt │ │ │ └── RemotesAdapter.kt │ │ ├── fragment │ │ │ ├── EditorFragment.kt │ │ │ ├── ImageFragment.kt │ │ │ ├── IntroFragment.kt │ │ │ ├── SettingsFragment.kt │ │ │ └── analyze │ │ │ │ └── AnalyzeFileFragment.kt │ │ ├── helper │ │ │ └── MenuPrepareHelper.kt │ │ ├── viewmodel │ │ │ └── ProjectViewModel.kt │ │ └── widget │ │ │ ├── DiffView.kt │ │ │ ├── Editor.kt │ │ │ └── ScrimInsetsFrameLayout.kt │ │ └── util │ │ ├── Constants.kt │ │ ├── Prefs.kt │ │ ├── editor │ │ ├── Clipboard.kt │ │ ├── Highlighter.kt │ │ ├── ProjectFiles.kt │ │ └── ResourceHelper.kt │ │ ├── json │ │ └── ColorReader.kt │ │ ├── net │ │ ├── HtmlCompat.kt │ │ ├── HtmlParser.kt │ │ ├── HyperServer.kt │ │ └── NetworkUtils.kt │ │ ├── project │ │ ├── DataValidator.kt │ │ └── ProjectManager.kt │ │ └── ui │ │ ├── FontsOverride.kt │ │ └── Styles.kt │ └── res │ ├── drawable-hdpi-v11 │ └── ic_git_small.png │ ├── drawable-hdpi │ ├── drawer_shadow.9.png │ ├── ic_action_done.png │ ├── ic_action_element_edit.png │ ├── ic_action_import.png │ ├── ic_alert_error.png │ ├── ic_binary.png │ ├── ic_css.png │ ├── ic_file.png │ ├── ic_folder.png │ ├── ic_font.png │ ├── ic_git_small.png │ ├── ic_html.png │ ├── ic_image.png │ ├── ic_js.png │ ├── ic_overflow.png │ └── ic_tab.png │ ├── drawable-mdpi-v11 │ └── ic_git_small.png │ ├── drawable-mdpi │ ├── drawer_shadow.9.png │ ├── ic_action_done.png │ ├── ic_action_element_edit.png │ ├── ic_action_import.png │ ├── ic_alert_error.png │ ├── ic_binary.png │ ├── ic_css.png │ ├── ic_file.png │ ├── ic_folder.png │ ├── ic_font.png │ ├── ic_git_small.png │ ├── ic_html.png │ ├── ic_image.png │ ├── ic_js.png │ ├── ic_overflow.png │ └── ic_tab.png │ ├── drawable-nodpi │ ├── ic_intro_done.png │ ├── ic_intro_editor.png │ ├── ic_intro_git.png │ ├── ic_intro_logo_n.png │ ├── ic_launcher.png │ └── logo.png │ ├── drawable-xhdpi-v11 │ └── ic_git_small.png │ ├── drawable-xhdpi │ ├── drawer_shadow.9.png │ ├── ic_action_done.png │ ├── ic_action_element_edit.png │ ├── ic_action_import.png │ ├── ic_alert_error.png │ ├── ic_binary.png │ ├── ic_css.png │ ├── ic_file.png │ ├── ic_folder.png │ ├── ic_font.png │ ├── ic_git_small.png │ ├── ic_html.png │ ├── ic_image.png │ ├── ic_js.png │ ├── ic_overflow.png │ └── ic_tab.png │ ├── drawable-xxhdpi-v11 │ └── ic_git_small.png │ ├── drawable-xxhdpi │ ├── drawer_shadow.9.png │ ├── ic_action_done.png │ ├── ic_action_element_edit.png │ ├── ic_action_import.png │ ├── ic_alert_error.png │ ├── ic_binary.png │ ├── ic_css.png │ ├── ic_file.png │ ├── ic_folder.png │ ├── ic_font.png │ ├── ic_git_small.png │ ├── ic_html.png │ ├── ic_image.png │ ├── ic_js.png │ ├── ic_overflow.png │ └── ic_tab.png │ ├── drawable-xxxhdpi-v11 │ └── ic_git_small.png │ ├── drawable-xxxhdpi │ ├── drawer_shadow.9.png │ ├── ic_action_done.png │ ├── ic_action_element_edit.png │ ├── ic_action_import.png │ ├── ic_alert_error.png │ ├── ic_binary.png │ ├── ic_css.png │ ├── ic_file.png │ ├── ic_folder.png │ ├── ic_font.png │ ├── ic_git_small.png │ ├── ic_html.png │ ├── ic_image.png │ ├── ic_js.png │ ├── ic_overflow.png │ └── ic_tab.png │ ├── drawable │ ├── bottom_shadow.xml │ ├── header_bg.xml │ ├── ic_dark_theme_code.xml │ ├── ic_factory_reset.xml │ ├── ic_line_numbers.xml │ ├── ic_night_mode.xml │ └── ic_notices.xml │ ├── layout │ ├── activity_analyze.xml │ ├── activity_intro.xml │ ├── activity_main.xml │ ├── activity_project.xml │ ├── activity_remotes.xml │ ├── activity_settings.xml │ ├── activity_splash.xml │ ├── activity_web.xml │ ├── dialog_clone.xml │ ├── dialog_create.xml │ ├── dialog_diff.xml │ ├── dialog_git_branch.xml │ ├── dialog_import.xml │ ├── dialog_input_single.xml │ ├── dialog_pull.xml │ ├── dialog_push.xml │ ├── dialog_refactor.xml │ ├── dialog_remote_add.xml │ ├── fragment_analyze_file.xml │ ├── fragment_editor.xml │ ├── fragment_intro.xml │ ├── item_attr.xml │ ├── item_file_browser.xml │ ├── item_file_project.xml │ ├── item_file_root.xml │ ├── item_git_log.xml │ ├── item_git_status.xml │ ├── item_log.xml │ ├── item_project.xml │ ├── item_remote.xml │ ├── sheet_about.xml │ ├── sheet_logs.xml │ ├── sheet_web_settings.xml │ └── widget_toolbar.xml │ ├── menu │ ├── menu_file_options.xml │ ├── menu_main.xml │ ├── menu_project.xml │ └── menu_web.xml │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── values-sw600dp │ └── bools.xml │ ├── values-v21 │ └── styles.xml │ ├── values-w820dp │ └── dimens.xml │ ├── values │ ├── attrs.xml │ ├── bools.xml │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml │ └── xml │ └── settings.xml ├── art ├── left.png ├── logo.png ├── middle.png └── right.png ├── build.gradle ├── dependencies.gradle ├── docs ├── css │ ├── normalize.min.css │ └── styles.css ├── favicon.ico ├── index.html ├── js │ ├── html5shiv-printshiv.js │ └── prefixfree.min.js └── multimedia │ ├── android.png │ ├── device.png │ ├── github.png │ └── logo.png ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── scripts └── update_apk └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | # files for the dex VM 2 | *.dex 3 | 4 | # Java class files 5 | *.class 6 | 7 | # generated files 8 | bin/ 9 | gen/ 10 | 11 | # Local configuration file (sdk path, etc) 12 | local.properties 13 | 14 | # Windows thumbnail db 15 | Thumbs.db 16 | 17 | # Eclipse project files 18 | .classpath 19 | .project 20 | 21 | # Android Studio 22 | *.iml 23 | .idea 24 | .gradle 25 | build/ 26 | 27 | #NDK 28 | obj/ -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | jdk: oraclejdk8 3 | branches: 4 | only: 5 | - master 6 | env: 7 | matrix: 8 | - ANDROID_BUILD_TOOLS_VERSION=28.0.3 ANDROID_API_LEVEL=28 9 | global: 10 | secure: ANuK99R514P6uRpt/zK23WMPj0QxEyzOZRymOqKqjZVp+YAj6hXayDhMwwPc2RkmH+psVwjBqFMxw1YnovaQrX9rjR0O+FoAnYQIeQZRTCrDC565Vn9GjqBMSk31nFjzcCNKpZriwzRAf3DATE6//sMpJA3RYaslhzNL5Vyq+d7bCE/S1z9LP4Bu6k4nPSvmRvamzvMFzKjkdYz1ix/Ct61d+ag1WYEwmScXIQKWHY0swKKdsUMFTUKoCu8Xrd9HqoHm+1kGl5unG6hjsZ/YxKM7XjOoMlIvVA+WQFIrLpiAngEHWLdyUFLw8tXZnJvjVVlRjagCrvhmEg57ZCQxWzCpLYzpsx0DaN839OrNxAAJ7pIorhLp4yLLzwXLkJkFX29mxUVhCZO0ToBNc/yRMSttQqe9IGRGij4goDnTZAEqNHDcoVVADkoPgTDAENpB+HiI/BurhZZwB9s6EA6o7xuYOqTV2u2pTVr8w5TkLMQdRdMNNQ8xgC2jnPOudifluY+bj2Tkxcc6+g+H/nv8kXUHDGnqy4d1kiVl1Urs2NH8d40mBX+EYXbmLZMIbEVnIhv8hEd9zjEkmju6DDF18Np8v7zT7YSuCKhS5Zn0vzBckEE7CkFDkW0ZFLit0OszKiUaAtwlegWD2RmZJLGP+Uxww6/dWiJ/TAPGxgi8mOY= 11 | before_cache: 12 | - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock 13 | - rm -rf $HOME/.gradle/caches/*/plugin-resolution/ 14 | cache: 15 | directories: 16 | - "$HOME/.gradle/caches/" 17 | - "$HOME/.gradle/wrapper/" 18 | - "$HOME/.android/build-cache" 19 | install: 20 | - echo yes | sdkmanager "tools" &>/dev/null 21 | - echo yes | sdkmanager "platform-tools" &>/dev/null 22 | - echo yes | sdkmanager "build-tools;$ANDROID_BUILD_TOOLS_VERSION" &>/dev/null 23 | - echo yes | sdkmanager "platforms;android-$ANDROID_API_LEVEL" &>/dev/null 24 | - echo yes | sdkmanager "extras;android;m2repository" &>/dev/null 25 | - echo yes | sdkmanager "extras;google;m2repository" &>/dev/null 26 | before_script: 27 | - chmod +x scripts/update_apk 28 | script: 29 | - "./gradlew clean assembleDebug" 30 | notifications: 31 | email: false 32 | after_success: 33 | - "./scripts/update_apk" 34 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 |
3 | Hyper Logo 4 |
5 |

6 | 7 |

8 | 9 | 10 | 11 | 12 | 13 |

14 | 15 |

16 | Hyper is a powerful, open source web development IDE for Android. 17 |

18 | 19 |

20 |
21 | 22 | 23 |
24 |

25 | -------------------------------------------------------------------------------- /apk/canary.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/geeteshk/Hyper/fc492e0d9d1c112f851163d15dadf2977436123b/apk/canary.apk -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 Geetesh Kalakoti 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | apply plugin: 'com.android.application' 18 | apply plugin: 'kotlin-android' 19 | apply plugin: 'kotlin-android-extensions' 20 | apply plugin: 'kotlin-kapt' 21 | apply plugin: 'com.github.ben-manes.versions' 22 | apply plugin: 'com.google.android.gms.oss-licenses-plugin' 23 | 24 | android { 25 | compileSdkVersion versions.compileSdk 26 | 27 | defaultConfig { 28 | applicationId "io.geeteshk.hyper" 29 | minSdkVersion versions.minSdk 30 | targetSdkVersion versions.targetSdk 31 | versionCode versions.code 32 | versionName versions.name 33 | multiDexEnabled true 34 | } 35 | 36 | buildTypes { 37 | debug { 38 | testCoverageEnabled false 39 | } 40 | 41 | release { 42 | testCoverageEnabled false 43 | minifyEnabled true 44 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 45 | } 46 | } 47 | 48 | packagingOptions { 49 | exclude "**/*.txt" 50 | exclude "**/*.xml" 51 | exclude "**/*.properties" 52 | } 53 | } 54 | 55 | dependencies { 56 | implementation fileTree(include: ['*.jar'], dir: 'libs') 57 | implementation libraries.kotlin 58 | 59 | implementation 'androidx.appcompat:appcompat:1.0.2' 60 | implementation 'com.google.android.material:material:1.1.0-alpha02' 61 | implementation 'androidx.recyclerview:recyclerview:1.1.0-alpha01' 62 | 63 | implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01' 64 | implementation 'androidx.lifecycle:lifecycle-runtime:2.1.0-alpha01' 65 | kapt 'androidx.lifecycle:lifecycle-compiler:2.1.0-alpha01' 66 | 67 | implementation 'androidx.multidex:multidex:2.0.1' 68 | implementation 'androidx.preference:preference:1.1.0-alpha02' 69 | 70 | implementation libraries.timber 71 | 72 | implementation libraries.nanohttpd 73 | implementation libraries.jsoup 74 | implementation libraries.uaUtils 75 | implementation(libraries.jgit) { 76 | exclude module: 'httpclient' 77 | exclude group: 'org.apache.httpcomponents' 78 | exclude group: 'org.apache.httpcomponents', module: 'httpclient' 79 | } 80 | 81 | implementation libraries.playServicesLicenses 82 | implementation libraries.mpchart 83 | } 84 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\Users\Geetesh\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/io/geeteshk/hyper/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2016 Geetesh Kalakoti 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package io.geeteshk.hyper; 18 | 19 | import android.app.Application; 20 | import android.test.ApplicationTestCase; 21 | 22 | /** 23 | * Testing Fundamentals 24 | */ 25 | public class ApplicationTest extends ApplicationTestCase { 26 | public ApplicationTest() { 27 | super(Application.class); 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 16 | 19 | 20 | 21 | 22 | 23 | 24 | 32 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 45 | 49 | 56 | 59 | 60 | 61 | 64 | 67 | 68 | 69 | 70 | -------------------------------------------------------------------------------- /app/src/main/assets/color/css.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "keyword", 4 | "pattern": "(<|<\\)\\b(a|address|app|applet|area|b|base|basefont|bgsound|big|blink|blockquote|body|br|button|caption|center|cite|code|col|colgroup|comment|dd|dfn|dir|div|dl|dt|em|embed|fieldset|font|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|hr|html|htmlplus|hype|i|iframe|img|input|ins|del|isindex|kbd|label|legend|li|link|listing|map|marquee|menu|meta|multicol|nobr|noembed|noframes|noscript|ol|option|p|param|plaintext|pre|s|samp|script|select|small|sound|spacer|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var|wbr|xmp|import)\\b>", 5 | "color": "#f92672", 6 | "dark": "#f92672" 7 | }, 8 | { 9 | "id": "param", 10 | "pattern": "\\b(azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-collapse|border-color|border-spacing|border-style|border-top|border-right|border-bottom|border-left|border-top-color|border-right-color|border-left-color|border-bottom-color|border-top-style|border-right-style|border-bottom-style|border-left-style|border-top-width|border-right-width|border-bottom-width|border-left-width|border-width|border|bottom|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-left|margin-right|margin-top|margin-bottom|margin|max-height|max-width|min-height|min-width|orphans|outline-color|outline-style|outline-width|outline|overflow|padding-top|padding-right|padding-bottom|padding-left|padding|page-break-after|page-break-before|page-break-inside|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|speak-header|speak-numeral|speak-punctuation|speak|speech-rate|stress|table-layout|text-align|text-decoration|text-indent|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index)\\b:", 11 | "color": "#64cbf4", 12 | "dark": "#64cbf4" 13 | }, 14 | { 15 | "id": "value", 16 | "pattern": ":.*;", 17 | "color": "#9a79dd", 18 | "dark": "#9a79dd" 19 | }, 20 | { 21 | "id": "class", 22 | "pattern": "\\..*\\{", 23 | "color": "#72b000", 24 | "dark": "#a6e22e" 25 | }, 26 | { 27 | "id": "id", 28 | "pattern": "#.*\\{", 29 | "color": "#72b000", 30 | "dark": "#a6e22e" 31 | }, 32 | { 33 | "id": "ending", 34 | "pattern": "(em|rem|px|pt|%)", 35 | "color": "#9a79dd", 36 | "dark": "#9a79dd" 37 | }, 38 | { 39 | "id": "string", 40 | "pattern": "([\"'])(?:(?=(\\?))\\2.)*?\\1", 41 | "color": "#ed5c00", 42 | "dark": "#e6db74" 43 | }, 44 | { 45 | "id": "comment", 46 | "pattern": "/\\*(?:.|[\\n\\r])*?\\*/|//.*", 47 | "color": "#a0a0a0", 48 | "dark": "#75715e" 49 | } 50 | ] -------------------------------------------------------------------------------- /app/src/main/assets/color/html.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": "keyword", 4 | "pattern": "(<|<\\)\\b(a|address|app|applet|area|b|base|basefont|bgsound|big|blink|blockquote|body|br|button|caption|center|cite|code|col|colgroup|comment|dd|dfn|dir|div|dl|dt|em|embed|fieldset|font|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|hr|html|htmlplus|hype|i|iframe|img|input|ins|del|isindex|kbd|label|legend|li|link|listing|map|marquee|menu|meta|multicol|nobr|noembed|noframes|noscript|ol|option|p|param|plaintext|pre|s|samp|script|select|small|sound|spacer|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|var|wbr|xmp|import)\\b>", 5 | "color": "#f92672", 6 | "dark": "#f92672" 7 | }, 8 | { 9 | "id": "built_in", 10 | "pattern": "\\b(charset|lang|href|onclick|onmouseover|onmouseout|code|codebase|width|height|align|vspace|hspace|name|archive|mayscript|alt|shape|coords|target|nohref|size|color|face|src|loop|bgcolor|background|text|vlink|alink|bgproperties|topmargin|leftmargin|marginheight|marginwidth|onload|onunload|onfocus|onblur|stylesrc|scroll|clear|type|value|valign|span|compact|pluginspage|pluginurl|hidden|autostart|playcount|volume|controller|mastersound|starttime|endtime|point-size|weight|action|method|enctype|onsubmit|onreset|scrolling|noresize|frameborder|bordercolor|cols|rows|framespacing|border|noshade|longdesc|ismap|usemap|lowsrc|naturalsizeflag|nosave|dynsrc|controls|start|suppress|maxlength|checked|language|onchange|onkeypress|onkeyup|onkeydown|autocomplete|prompt|for|rel|rev|media|direction|behaviour|scrolldelay|scrollamount|http-equiv|content|gutter|defer|event|multiple|readonly|cellpadding|cellspacing|rules|bordercolorlight|bordercolordark|summary|colspan|rowspan|nowrap|halign|disabled|accesskey|tabindex|id|class)\\b=", 11 | "color": "#72b000", 12 | "dark": "#a6e22e" 13 | }, 14 | { 15 | "id": "string", 16 | "pattern": "([\"'])(?:(?=(\\?))\\2.)*?\\1", 17 | "color": "#ed5c00", 18 | "dark": "#e6db74" 19 | }, 20 | { 21 | "id": "comment", 22 | "pattern": "/\\**?\\*/| 16 | 17 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/header_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_dark_theme_code.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_factory_reset.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_line_numbers.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_night_mode.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notices.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_analyze.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 23 | 24 | 29 | 30 | 31 | 32 | 41 | 42 | 43 | 44 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_intro.xml: -------------------------------------------------------------------------------- 1 | 16 | 17 | 20 | 21 | 25 | 26 | 34 | 35 | 41 | 42 |