Moving HighlightJS into app. (#477)
Final fixes and improvements. Fixing crash of app in Android 5.0 Removing unused theme. Moving HighlightJS to app. Reviewed-on: https://gitea.com/gitnex/GitNex/pulls/477 Reviewed-by: M M Arif <mmarif@swatian.com>
This commit is contained in:
		| @@ -28,14 +28,14 @@ import androidx.core.content.ContextCompat; | ||||
| import com.github.barteksc.pdfviewer.PDFView; | ||||
| import com.github.barteksc.pdfviewer.util.FitPolicy; | ||||
| import com.github.chrisbanes.photoview.PhotoView; | ||||
| import com.pddstudio.highlightjs.HighlightJsView; | ||||
| import com.pddstudio.highlightjs.models.Theme; | ||||
| import org.apache.commons.io.FileUtils; | ||||
| import org.mian.gitnex.R; | ||||
| import org.mian.gitnex.clients.RetrofitClient; | ||||
| import org.mian.gitnex.fragments.BottomSheetFileViewerFragment; | ||||
| import org.mian.gitnex.helpers.AlertDialogs; | ||||
| import org.mian.gitnex.helpers.Toasty; | ||||
| import org.mian.gitnex.helpers.highlightjs.HighlightJsView; | ||||
| import org.mian.gitnex.helpers.highlightjs.models.Theme; | ||||
| import org.mian.gitnex.models.Files; | ||||
| import org.mian.gitnex.util.AppUtil; | ||||
| import org.mian.gitnex.util.TinyDB; | ||||
| @@ -196,7 +196,6 @@ public class FileViewActivity extends BaseActivity implements BottomSheetFileVie | ||||
| 									singleCodeContents.setTheme(Theme.MONOKAI_SUBLIME); | ||||
| 							} | ||||
|  | ||||
| 							singleCodeContents.setShowLineNumbers(true); | ||||
| 							singleCodeContents.setSource(appUtil.decodeBase64(response.body().getContent())); | ||||
|  | ||||
| 						} | ||||
|   | ||||
| @@ -21,8 +21,8 @@ public class SettingsFileViewerActivity extends BaseActivity { | ||||
| 	private Context appCtx; | ||||
| 	private View.OnClickListener onClickListener; | ||||
|  | ||||
| 	private static String[] fileveiwerSourceCodeThemesList = {"Sublime", "Arduino Light", "Github", "Far ", "Ir Black", "Android Studio"}; | ||||
| 	private static int fileveiwerSourceCodeThemesSelectedChoice = 0; | ||||
| 	private static String[] fileViewerSourceCodeThemesList = {"Sublime", "Arduino Light", "Github", "Far ", "Ir Black", "Android Studio"}; | ||||
| 	private static int fileViewerSourceCodeThemesSelectedChoice = 0; | ||||
|  | ||||
| 	@Override | ||||
| 	protected int getLayoutResourceId() { | ||||
| @@ -43,18 +43,18 @@ public class SettingsFileViewerActivity extends BaseActivity { | ||||
| 		initCloseListener(); | ||||
| 		closeActivity.setOnClickListener(onClickListener); | ||||
|  | ||||
| 		final TextView fileveiwerSourceCodeThemesSelected = findViewById(R.id.sourceCodeThemeSelected); // setter for fileviewer theme | ||||
| 		final TextView fileViewerSourceCodeThemesSelected = findViewById(R.id.sourceCodeThemeSelected); // setter for fileviewer theme | ||||
|  | ||||
| 		LinearLayout sourceCodeThemeFrame = findViewById(R.id.sourceCodeThemeFrame); | ||||
|  | ||||
| 		Switch pdfModeSwitch = findViewById(R.id.switchPdfMode); | ||||
|  | ||||
| 		if(!tinyDb.getString("fileviewerSourceCodeThemeStr").isEmpty()) { | ||||
| 			fileveiwerSourceCodeThemesSelected.setText(tinyDb.getString("fileviewerSourceCodeThemeStr")); | ||||
| 			fileViewerSourceCodeThemesSelected.setText(tinyDb.getString("fileviewerSourceCodeThemeStr")); | ||||
| 		} | ||||
|  | ||||
| 		if(fileveiwerSourceCodeThemesSelectedChoice == 0) { | ||||
| 			fileveiwerSourceCodeThemesSelectedChoice = tinyDb.getInt("fileviewerThemeId"); | ||||
| 		if(fileViewerSourceCodeThemesSelectedChoice == 0) { | ||||
| 			fileViewerSourceCodeThemesSelectedChoice = tinyDb.getInt("fileviewerThemeId"); | ||||
| 		} | ||||
|  | ||||
| 		if(tinyDb.getBoolean("enablePdfMode")) { | ||||
| @@ -70,18 +70,18 @@ public class SettingsFileViewerActivity extends BaseActivity { | ||||
| 			AlertDialog.Builder fvtsBuilder = new AlertDialog.Builder(SettingsFileViewerActivity.this); | ||||
|  | ||||
| 			fvtsBuilder.setTitle(R.string.fileviewerSourceCodeThemeSelectorDialogTitle); | ||||
| 			if(fileveiwerSourceCodeThemesSelectedChoice != -1) { | ||||
| 			if(fileViewerSourceCodeThemesSelectedChoice != -1) { | ||||
| 				fvtsBuilder.setCancelable(true); | ||||
| 			} | ||||
| 			else { | ||||
| 				fvtsBuilder.setCancelable(false); | ||||
| 			} | ||||
|  | ||||
| 			fvtsBuilder.setSingleChoiceItems(fileveiwerSourceCodeThemesList, fileveiwerSourceCodeThemesSelectedChoice, (dialogInterfaceTheme, i) -> { | ||||
| 			fvtsBuilder.setSingleChoiceItems(fileViewerSourceCodeThemesList, fileViewerSourceCodeThemesSelectedChoice, (dialogInterfaceTheme, i) -> { | ||||
|  | ||||
| 				fileveiwerSourceCodeThemesSelectedChoice = i; | ||||
| 				fileveiwerSourceCodeThemesSelected.setText(fileveiwerSourceCodeThemesList[i]); | ||||
| 				tinyDb.putString("fileviewerSourceCodeThemeStr", fileveiwerSourceCodeThemesList[i]); | ||||
| 				fileViewerSourceCodeThemesSelectedChoice = i; | ||||
| 				fileViewerSourceCodeThemesSelected.setText(fileViewerSourceCodeThemesList[i]); | ||||
| 				tinyDb.putString("fileviewerSourceCodeThemeStr", fileViewerSourceCodeThemesList[i]); | ||||
| 				tinyDb.putInt("fileviewerSourceCodeThemeId", i); | ||||
|  | ||||
| 				dialogInterfaceTheme.dismiss(); | ||||
| @@ -113,9 +113,7 @@ public class SettingsFileViewerActivity extends BaseActivity { | ||||
| 	} | ||||
|  | ||||
| 	private void initCloseListener() { | ||||
| 		onClickListener = view -> { | ||||
| 			finish(); | ||||
| 		}; | ||||
| 		onClickListener = view -> finish(); | ||||
| 	} | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,112 @@ | ||||
| package org.mian.gitnex.helpers.highlightjs; | ||||
|  | ||||
| import android.annotation.SuppressLint; | ||||
| import android.content.Context; | ||||
| import android.util.AttributeSet; | ||||
| import android.view.View; | ||||
| import android.webkit.WebSettings; | ||||
| import android.webkit.WebView; | ||||
|  | ||||
| import org.mian.gitnex.helpers.highlightjs.models.Language; | ||||
| import org.mian.gitnex.helpers.highlightjs.models.Theme; | ||||
| import org.mian.gitnex.helpers.highlightjs.utils.SourceUtils; | ||||
|  | ||||
| /** | ||||
|  * This Class was created by Patrick J | ||||
|  * on 09.06.16. (modified by opyale) | ||||
|  */ | ||||
|  | ||||
| public class HighlightJsView extends WebView { | ||||
|  | ||||
|     private Language language = Language.AUTO_DETECT; | ||||
|     private Theme theme = Theme.DEFAULT; | ||||
|  | ||||
| 	private boolean zoomSupport = false; | ||||
|     private boolean showLineNumbers = true; | ||||
|     private TextWrap textWrap = TextWrap.NO_WRAP; | ||||
|  | ||||
|     public HighlightJsView(Context context) { | ||||
|  | ||||
|         super(context); | ||||
|         setup(); | ||||
|     } | ||||
|  | ||||
|     public HighlightJsView(Context context, AttributeSet attrs) { | ||||
|  | ||||
|         super(context, attrs); | ||||
|         setup(); | ||||
|     } | ||||
|  | ||||
|     public HighlightJsView(Context context, AttributeSet attrs, int defStyleAttr) { | ||||
|  | ||||
|         super(context, attrs, defStyleAttr); | ||||
|         setup(); | ||||
|     } | ||||
|  | ||||
|     @SuppressLint("SetJavaScriptEnabled") | ||||
|     private void setup() { | ||||
|  | ||||
|         WebSettings settings = getSettings(); | ||||
|  | ||||
|         settings.setJavaScriptEnabled(true); | ||||
|         settings.setBuiltInZoomControls(true); | ||||
|         settings.setSupportZoom(zoomSupport); | ||||
|         settings.setDisplayZoomControls(false); | ||||
|  | ||||
|         setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); | ||||
|  | ||||
|     } | ||||
|  | ||||
| 	private void changeZoomSettings(boolean enable) { | ||||
|  | ||||
| 		this.zoomSupport = enable; | ||||
| 		getSettings().setSupportZoom(enable); | ||||
| 	} | ||||
|  | ||||
|     public void setSource(String source) { | ||||
|  | ||||
|         source = (source == null) ? " " : source; | ||||
|  | ||||
|         String html_content = SourceUtils.generateContent(source, theme.getName(), language.getName(), zoomSupport, showLineNumbers, textWrap); | ||||
|         loadDataWithBaseURL("file:///android_asset/", html_content, "text/html", "utf-8", null); | ||||
|  | ||||
|     } | ||||
|  | ||||
|     public void refresh() { | ||||
|  | ||||
|         super.reload(); | ||||
|     } | ||||
|  | ||||
|     public void setHighlightLanguage(Language language) { | ||||
|         this.language = language; | ||||
|     } | ||||
|  | ||||
|     public void setTheme(Theme theme) { | ||||
|         this.theme = theme; | ||||
|     } | ||||
|  | ||||
| 	public void setTextWrap(TextWrap textWrap) { | ||||
|     	this.textWrap = textWrap; | ||||
|     } | ||||
|  | ||||
|     public Language getHighlightLanguage() { | ||||
|         return language; | ||||
|     } | ||||
|  | ||||
|     public Theme getTheme() { | ||||
|         return theme; | ||||
|     } | ||||
|  | ||||
| 	public void setZoomSupportEnabled(boolean supportZoom) { | ||||
| 		changeZoomSettings(supportZoom); | ||||
| 	} | ||||
|  | ||||
| 	public void setShowLineNumbers(boolean showLineNumbers) { | ||||
|         this.showLineNumbers = showLineNumbers; | ||||
|     } | ||||
|  | ||||
| 	public enum TextWrap { | ||||
| 		NO_WRAP, WORD_WRAP, BREAK_ALL | ||||
| 	} | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,181 @@ | ||||
| package org.mian.gitnex.helpers.highlightjs.models; | ||||
|  | ||||
| /** | ||||
|  * This Class was created by Patrick J | ||||
|  * on 09.06.16. | ||||
|  */ | ||||
|  | ||||
| public enum Language { | ||||
|     AUTO_DETECT(null), | ||||
|     DISABLE_HIGHLIGHT("nohighlight"), | ||||
|     _1C("1c"), | ||||
|     ABNF("abnf"), | ||||
|     ACCESS_LOGS("accesslog"), | ||||
|     ADA("ada"), | ||||
|     ARM_ASSEMBLER("arm"), | ||||
|     AVR_ASSEMBLER("avrasm"), | ||||
|     ACTION_SCRIPT("actionscript"), | ||||
|     APACHE("apache"), | ||||
|     APPLE_SCRIPT("applescript"), | ||||
|     ASCII_DOC("asciidoc"), | ||||
|     ASPECT_J("aspectj"), | ||||
|     AUTO_HOTKEY("autohotkey"), | ||||
|     AUTO_IT("autoit"), | ||||
|     AXAPTA("axapta"), | ||||
|     AWK("awk"), | ||||
|     BASH("bash"), | ||||
|     SHELL("sh"), | ||||
|     ZSH("zsh"), | ||||
|     BASIC("basic"), | ||||
|     BNF("bnf"), | ||||
|     BRAINFUCK("brainfuck"), | ||||
|     C("c"), | ||||
|     C_SHARP("csharp"), | ||||
|     C_PLUS_PLUS("cpp"), | ||||
|     CACHE_OBJECT_SCRIPT("cos"), | ||||
|     C_MAKE("cmake"), | ||||
|     COQ("coq"), | ||||
|     CSP("csp"), | ||||
|     CSS("css"), | ||||
|     CAPTAIN_PROTO("capnproto"), | ||||
|     CLEAN("clean"), | ||||
|     CLOJURE("clojure"), | ||||
|     COFFEE_SCRIPT("coffeescript"), | ||||
|     CRMSH("crmsh"), | ||||
|     CRYSTAL("crystal"), | ||||
|     D("d"), | ||||
|     DNS_ZONE_FILE("dns"), | ||||
|     DOS("dos"), | ||||
|     BATCH("bat"), | ||||
|     DART("dart"), | ||||
|     DELPHI("delphi"), | ||||
|     DIFF("diff"), | ||||
|     DJANGO("django"), | ||||
|     DOCKER_FILE("dockerfile"), | ||||
|     DSCONFIG("dsconfig"), | ||||
|     DTS("dts"), | ||||
|     DUST("dust"), | ||||
|     EBNF("ebnf"), | ||||
|     ELIXIR("elixir"), | ||||
|     ELM("elm"), | ||||
|     ERLANG("erlang"), | ||||
|     EXCEL("excel"), | ||||
|     F_SHARP("fsharp"), | ||||
|     FIX("fix"), | ||||
|     FLIX("flix"), | ||||
|     FORTRAN("fortran"), | ||||
|     G_CODE("gcode"), | ||||
|     GAMS("gams"), | ||||
|     GAUSS("gauss"), | ||||
|     GHERKIN("gherkin"), | ||||
|     GO("go"), | ||||
|     GOLO("golo"), | ||||
|     GRADLE("gradle"), | ||||
|     GROOVY("groovy"), | ||||
|     HTML("html"), | ||||
|     XML("xml"), | ||||
|     HTTP("http"), | ||||
|     HAML("haml"), | ||||
|     HANDLEBARS("hbs"), | ||||
|     HASKELL("hs"), | ||||
|     HAXE("hx"), | ||||
|     HY("hy"), | ||||
|     INI("ini"), | ||||
|     INFORM7("i7"), | ||||
|     IRPF90("irpf90"), | ||||
|     JSON("json"), | ||||
|     JAVA("java"), | ||||
|     JAVA_SCRIPT("javascript"), | ||||
|     LASSO("lasso"), | ||||
| 	LEAF("leaf"), | ||||
|     LESS("less"), | ||||
|     LDIF("ldif"), | ||||
|     LISP("lisp"), | ||||
|     LIVE_CODE_SERVER("livecodeserver"), | ||||
|     LIVE_SCRIPT("livescript"), | ||||
|     LLVM("llvm"), | ||||
|     LUA("lua"), | ||||
|     MAKEFILE("makefile"), | ||||
|     MARKDOWN("md"), | ||||
|     MATHEMATICA("mma"), | ||||
|     MATLAB("matlab"), | ||||
|     MAXIMA("maxima"), | ||||
|     MAYA_EMBEDDED_LANGUAGE("mel"), | ||||
|     MERCURY("mercury"), | ||||
|     MIZAR("mizar"), | ||||
|     MOJOLICIOUS("mojolicious"), | ||||
|     MONKEY("monkey"), | ||||
|     MOONSCRIPT("moonscript"), | ||||
| 	N1QL("n1ql"), | ||||
|     NSIS("nsis"), | ||||
|     NGINX("nginx"), | ||||
|     NIMROD("nimrod"), | ||||
|     NIX("nix"), | ||||
|     O_CAML("ocaml"), | ||||
|     OBJECTIVE_C("objectivec"), | ||||
|     OPENGL_SHADING_LANGUAGE("glsl"), | ||||
|     OPEN_SCAD("scad"), | ||||
|     ORACLE_RULES_LANGUAGE("ruleslanguage"), | ||||
|     OXYGENE("oxygene"), | ||||
|     PF("pf"), | ||||
|     PHP("php"), | ||||
|     PARSER3("parser3"), | ||||
|     PERL("perl"), | ||||
|     PONY("pony"), | ||||
|     POWER_SHELL("ps"), | ||||
|     PROCESSING("processing"), | ||||
|     PROLOG("prolog"), | ||||
|     PROTOCOL_BUFFERS("protobuf"), | ||||
|     PUPPET("pp"), | ||||
|     PYTHON("python"), | ||||
|     PYTHON_PROFILER_RESULTS("profile"), | ||||
|     Q("k"), | ||||
|     QML("qml"), | ||||
|     R("r"), | ||||
|     RENDER_MAN_RIB("rib"), | ||||
|     RENDER_MAN_RSL("rsl"), | ||||
|     ROBOCONF("roboconf"), | ||||
|     RUBY("ruby"), | ||||
|     RUST("rust"), | ||||
|     SCSS("scss"), | ||||
|     SQL("sql"), | ||||
|     STEP_PART_21("p21"), | ||||
|     SCALA("scala"), | ||||
|     SCHEME("scheme"), | ||||
|     SCILAB("sci"), | ||||
|     SMALI("smali"), | ||||
|     SMALLTALK("smalltalk"), | ||||
|     STAN("stan"), | ||||
|     STATA("stata"), | ||||
|     STYLUS("stylus"), | ||||
|     SUB_UNIT("subunit"), | ||||
|     SWIFT("swift"), | ||||
|     TEST_ANYTHING_PROTOCOL("tap"), | ||||
|     TCL("tcl"), | ||||
|     TEX("tex"), | ||||
|     THRIFT("thrift"), | ||||
|     TP("tp"), | ||||
|     TWIG("twig"), | ||||
|     TYPE_SCRIPT("typescript"), | ||||
|     VB_NET("vbnet"), | ||||
|     VB_SCRIPT("vbscript"), | ||||
|     VHDL("vhdl"), | ||||
|     VALA("vala"), | ||||
|     VERILOG("v"), | ||||
|     VIM("vim"), | ||||
|     X86_ASSEMBLY("x86asm"), | ||||
|     XL("xl"), | ||||
|     X_QUERY("xq"), | ||||
|     ZEPHIR("zep"); | ||||
|  | ||||
|     private final String className; | ||||
|  | ||||
|     Language(String name) { | ||||
|         this.className = name; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return className; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,96 @@ | ||||
| package org.mian.gitnex.helpers.highlightjs.models; | ||||
|  | ||||
| /** | ||||
|  * This Class was created by Patrick J | ||||
|  * on 09.06.16. | ||||
|  */ | ||||
|  | ||||
| public enum Theme { | ||||
|     AGATE("agate"), | ||||
|     ANDROID_STUDIO("androidstudio"), | ||||
|     ARDUINO_LIGHT("arduino-light"), | ||||
|     ARTA("arta"), | ||||
|     ASCETIC("ascetic"), | ||||
|     ATELIER_CAVE_DARK("atelier-cave-dark"), | ||||
|     ATELIER_CAVE_LIGHT("atelier-cave-light"), | ||||
|     ATELIER_DUNE_DARK("atelier-dune-dark"), | ||||
|     ATELIER_DUNE_LIGHT("atelier-dune-light"), | ||||
|     ATELIER_ESTUARY_DARK("atelier-estuary-dark"), | ||||
|     ATELIER_ESTUARY_LIGHT("atelier-estuary-light"), | ||||
|     ATELIER_FOREST_DARK("atelier-forest-dark"), | ||||
|     ATELIER_FOREST_LIGHT("atelier-forest-light"), | ||||
|     ATELIER_HEATH_DARK("atelier-heath-dark"), | ||||
|     ATELIER_HEATH_LIGHT("atelier-heath-light"), | ||||
|     ATELIER_LAKESIDE_DARK("atelier-lakeside-dark"), | ||||
|     ATELIER_LAKESIDE_LIGHT("atelier-lakeside-light"), | ||||
|     ATELIER_PLATEAU_DARK("atelier-plateau-dark"), | ||||
|     ATELIER_PLATEAU_LIGHT("atelier-plateau-light"), | ||||
|     ATELIER_SAVANNA_DARK("atelier-savanna-dark"), | ||||
|     ATELIER_SAVANNA_LIGHT("atelier-savanna-light"), | ||||
|     ATELIER_SEASIDE_DARK("atelier-seaside-dark"), | ||||
|     ATELIER_SEASIDE_LIGHT("atelier-seaside-light"), | ||||
|     ATELIER_SULPHURPOOL_DARK("atelier-sulphurpool-dark"), | ||||
|     ATELIER_SULPHURPOOL_LIGHT("atelier-sulphurpool-light"), | ||||
|     ATOM_ONE_DARK("atom-one-dark"), | ||||
|     ATOM_ONE_LIGHT("atom-one-light"), | ||||
|     BROWN_PAPER("brown-paper"), | ||||
|     CODEPEN_EMBED("codepen-embed"), | ||||
|     COLOR_BREWER("color-brewer"), | ||||
|     DARK("dark"), | ||||
|     DARKULA("darkula"), | ||||
|     DEFAULT("default"), | ||||
|     DOCCO("docco"), | ||||
|     DRAKULA("drakula"), | ||||
|     FAR("far"), | ||||
|     FOUNDATION("foundaiton"), | ||||
|     GITHUB("github"), | ||||
|     GITHUB_GIST("github-gist"), | ||||
|     GOOGLECODE("googlecode"), | ||||
|     GRAYSCALE("grayscale"), | ||||
|     GRUVBOX_DARK("gruvbox-dark"), | ||||
|     GRUVBOX_LIGHT("gruvbox-light"), | ||||
|     HOPSCOTCH("hopscotch"), | ||||
|     HYBRID("hybrid"), | ||||
|     IDEA("idea"), | ||||
|     IR_BLACK("ir-black"), | ||||
|     KIMBIE_DARK("kimbie.dark"), | ||||
|     KIMBIE_LIGHT("kimbie.light"), | ||||
|     MAGULA("magula"), | ||||
|     MONO_BLUE("mono-blue"), | ||||
|     MONOKAI("monokai"), | ||||
|     MONOKAI_SUBLIME("monokai-sublime"), | ||||
|     OBSIDIAN("obsidian"), | ||||
|     OCEAN("ocean"), | ||||
|     PARAISO_DARK("paraiso-dark"), | ||||
|     PARAISO_LIGHT("paraiso-light"), | ||||
|     POJOAQUE("pojoaque"), | ||||
|     PURE_BASIC("purebasic"), | ||||
|     QT_CREATOR_DARK("qtcreator_dark"), | ||||
|     QT_CREATOR_LIGHT("qtcreator_light"), | ||||
|     RAILSCASTS("railscasts"), | ||||
|     RAINBOX("rainbow"), | ||||
|     SCHOOL_BOOK("school-book"), | ||||
|     SOLARIZED_DARK("solarized-dark"), | ||||
|     SOLARIZED_LIGHT("solarized-light"), | ||||
|     SUNBURST("sunburst"), | ||||
|     TOMORROW("tomorrow"), | ||||
|     TOMORROW_NIGHT_BLUE("tomorrow-night-blue"), | ||||
|     TOMORROW_NIGHT_BRIGHT("tomorrow-night-bright"), | ||||
|     TOMORROW_NIGHT("tomorrow-night"), | ||||
|     TOMORROW_NIGHT_EIGHTIES("tomorrow-night-eighties"), | ||||
|     VS("vs"), | ||||
|     X_CODE("xcode"), | ||||
|     XT256("xt256"), | ||||
|     ZENBURN("zenburn"); | ||||
|  | ||||
|     private final String themeName; | ||||
|  | ||||
|     Theme(String themeName) { | ||||
|         this.themeName = themeName; | ||||
|     } | ||||
|  | ||||
|     public String getName() { | ||||
|         return themeName; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,98 @@ | ||||
| package org.mian.gitnex.helpers.highlightjs.utils; | ||||
|  | ||||
| import androidx.annotation.NonNull; | ||||
| import androidx.annotation.Nullable; | ||||
| import org.mian.gitnex.helpers.highlightjs.HighlightJsView; | ||||
|  | ||||
| /** | ||||
|  * This Class was created by Patrick J | ||||
|  * on 09.06.16. (modified by opyale) | ||||
|  */ | ||||
|  | ||||
| public class SourceUtils { | ||||
|  | ||||
| 	public static String generateContent(String source, @NonNull String theme, @Nullable String language, boolean supportZoom, boolean showLineNumbers, | ||||
| 	                                     HighlightJsView.TextWrap textWrap) { | ||||
|  | ||||
| 		return getStylePageHeader(supportZoom, textWrap) + | ||||
| 				getSourceForTheme(theme) + | ||||
| 				(showLineNumbers ? getLineNumberStyling() : "") + | ||||
| 				getScriptPageHeader(showLineNumbers) + | ||||
| 				getSourceForLanguage(source, language) + | ||||
| 				getTemplateFooter(); | ||||
| 	} | ||||
|  | ||||
| 	private static String getStylePageHeader(boolean enableZoom, HighlightJsView.TextWrap textWrap) { | ||||
|  | ||||
| 		String preTag; | ||||
|  | ||||
| 		switch (textWrap) { | ||||
|  | ||||
| 			case WORD_WRAP: | ||||
| 				preTag = "pre { white-space: pre-wrap; word-wrap: break-word; }"; | ||||
| 				break; | ||||
|  | ||||
| 			case BREAK_ALL: | ||||
| 				preTag = "pre { white-space: pre-wrap; word-break: break-all; }"; | ||||
| 				break; | ||||
|  | ||||
| 			default: | ||||
| 				preTag = "pre { }"; | ||||
| 				break; | ||||
|  | ||||
| 		} | ||||
|  | ||||
| 		return "<!DOCTYPE html>" + | ||||
| 				"<html>" + | ||||
| 				"<head>" + | ||||
| 				"<meta charset=\"utf-8\">" + | ||||
| 				(enableZoom ? "" : "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">") + | ||||
| 				"<style>" + | ||||
| 				"html, body { width:100%; height: 100%; margin: 0px; padding: 0px; }" + | ||||
| 				preTag + | ||||
| 				"</style>"; | ||||
| 	} | ||||
|  | ||||
| 	private static String getScriptPageHeader(boolean showLineNumbers) { | ||||
|  | ||||
| 		return "<script src=\"./highlightjs/highlight.pack.js\"></script>" + | ||||
| 				(showLineNumbers ? "<script src=\"./highlightjs/highlightjs-line-numbers.min.js\"></script>" : "") + | ||||
| 				"<script>hljs.initHighlightingOnLoad();</script>" + | ||||
| 				(showLineNumbers ? "<script>hljs.initLineNumbersOnLoad();</script>" : "") + | ||||
| 				"</head><body style=\"margin: 0; padding: 0\" class=\"hljs\">"; | ||||
| 	} | ||||
|  | ||||
| 	private static String getLineNumberStyling() { | ||||
|  | ||||
| 		return "<style>" + | ||||
| 				".hljs-line-numbers { text-align: right; border-right: 1px solid #ccc; color: #999; user-select: none; }" + | ||||
| 				"</style>"; | ||||
| 	} | ||||
|  | ||||
| 	private static String getTemplateFooter() { | ||||
|  | ||||
| 		return "</body></html>"; | ||||
| 	} | ||||
|  | ||||
| 	private static String escapeCode(String code) { | ||||
|  | ||||
| 		return code.replaceAll("<", "<") | ||||
| 				.replaceAll(">", ">"); | ||||
| 	} | ||||
|  | ||||
| 	private static String getSourceForTheme(String theme) { | ||||
|  | ||||
| 		return String.format("<link rel=\"stylesheet\" href=\"./highlightjs/themes/%s.css\">", theme); | ||||
| 	} | ||||
|  | ||||
| 	private static String getSourceForLanguage(String source, String language) { | ||||
|  | ||||
| 		if (language != null) { | ||||
| 			return String.format("<pre><code class=\"%s\">%s</code></pre>", language, escapeCode(source)); | ||||
| 		} else { | ||||
| 			return String.format("<pre><code>%s</code></pre>", escapeCode(source)); | ||||
| 		} | ||||
|  | ||||
| 	} | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user