Language statistics (#1262)

closes #884

Co-authored-by: M M Arif <mmarif@swatian.com>
Reviewed-on: https://codeberg.org/gitnex/GitNex/pulls/1262
Reviewed-by: qwerty287 <qwerty287@noreply.codeberg.org>
This commit is contained in:
M M Arif 2023-04-12 20:43:25 +00:00
parent f05f9229f5
commit aa10d425e5
11 changed files with 746 additions and 7 deletions

View File

@ -56,14 +56,14 @@ configurations {
dependencies {
def lifecycle_version = '2.6.0'
def markwon_version = '4.6.2'
def work_version = '2.8.0'
def work_version = '2.8.1'
def acra = '5.9.7'
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.9.0-beta01'
implementation 'androidx.compose.material3:material3:1.1.0-alpha08'
implementation 'androidx.compose.material3:material3-window-size-class:1.1.0-alpha08'
implementation 'androidx.compose.material3:material3:1.1.0-beta01'
implementation 'androidx.compose.material3:material3-window-size-class:1.1.0-beta01'
implementation 'androidx.viewpager2:viewpager2:1.1.0-beta01'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation "androidx.legacy:legacy-support-v4:1.0.0"
@ -103,8 +103,8 @@ dependencies {
implementation "ch.acra:acra-mail:$acra"
implementation "ch.acra:acra-limiter:$acra"
implementation "ch.acra:acra-notification:$acra"
implementation 'androidx.room:room-runtime:2.5.0'
annotationProcessor 'androidx.room:room-compiler:2.5.0'
implementation 'androidx.room:room-runtime:2.5.1'
annotationProcessor 'androidx.room:room-compiler:2.5.1'
implementation "androidx.work:work-runtime:$work_version"
implementation "io.mikael:urlbuilder:2.0.9"
implementation "org.codeberg.gitnex-garage:emoji-java:v5.1.2"

View File

@ -72,7 +72,7 @@ public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.NotesViewHol
materialAlertDialogBuilder
.setTitle(ctx.getString(R.string.menuDeleteText))
.setMessage(ctx.getString(R.string.noteDeleteDialoMessage))
.setMessage(ctx.getString(R.string.noteDeleteDialogMessage))
.setPositiveButton(
R.string.menuDeleteText,
(dialog, whichButton) ->

View File

@ -1,18 +1,28 @@
package org.mian.gitnex.fragments;
import static org.mian.gitnex.helpers.languagestatistics.LanguageColor.languageColor;
import static org.mian.gitnex.helpers.languagestatistics.LanguageStatisticsHelper.calculatePercentage;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import com.amulyakhare.textdrawable.TextDrawable;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Locale;
import java.util.Map;
import okhttp3.ResponseBody;
import org.apache.commons.io.FileUtils;
import org.gitnex.tea4j.v2.models.Organization;
@ -34,6 +44,7 @@ import org.mian.gitnex.helpers.Markdown;
import org.mian.gitnex.helpers.TimeHelper;
import org.mian.gitnex.helpers.Toasty;
import org.mian.gitnex.helpers.contexts.RepositoryContext;
import org.mian.gitnex.helpers.languagestatistics.SeekbarItem;
import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
@ -104,6 +115,8 @@ public class RepoInfoFragment extends Fragment {
binding.repoMetaPullRequestsFrame.setOnClickListener(
metaPR -> ((RepoDetailActivity) requireActivity()).viewPager.setCurrentItem(3));
setLanguageStatistics();
return binding.getRoot();
}
@ -145,6 +158,201 @@ public class RepoInfoFragment extends Fragment {
return binding.repoMetaFrame.getVisibility() == View.VISIBLE;
}
private void setLanguageStatistics() {
Call<Map<String, Long>> call =
RetrofitClient.getApiInterface(getContext())
.repoGetLanguages(repository.getOwner(), repository.getName());
call.enqueue(
new Callback<>() {
@Override
public void onResponse(
@NonNull Call<Map<String, Long>> call,
@NonNull Response<Map<String, Long>> response) {
if (isAdded()) {
switch (response.code()) {
case 200:
assert response.body() != null;
if (response.body().size() > 0) {
ArrayList<SeekbarItem> seekbarItemList = new ArrayList<>();
float totalSpan =
(float)
response.body().values().stream()
.mapToDouble(a -> a)
.sum();
for (Map.Entry<String, Long> entry :
response.body().entrySet()) {
SeekbarItem seekbarItem = new SeekbarItem();
seekbarItem.progressItemPercentage =
(entry.getValue() / totalSpan) * 100;
seekbarItem.color = languageColor(entry.getKey());
seekbarItemList.add(seekbarItem);
}
binding.languagesStatistic.setVisibility(View.VISIBLE);
binding.languagesStatistic.initData(seekbarItemList);
binding.languagesStatistic.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(
SeekBar seekBar) {}
@Override
public void onStartTrackingTouch(
SeekBar seekBar) {}
@Override
public void onProgressChanged(
SeekBar seekBar,
int progress,
boolean fromUser) {
View view =
LayoutInflater.from(ctx)
.inflate(
R.layout
.layout_repo_language_statistics,
null);
LinearLayout.LayoutParams params =
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams
.WRAP_CONTENT,
LinearLayout.LayoutParams
.WRAP_CONTENT);
params.setMargins(0, 32, 32, 0);
LinearLayout layout =
view.findViewById(R.id.lang_color);
layout.removeAllViews();
for (Map.Entry<String, Long> entry :
response.body().entrySet()) {
LinearLayout layoutSub =
new LinearLayout(getContext());
layoutSub.setOrientation(
LinearLayout.HORIZONTAL);
layoutSub.setGravity(
Gravity.START | Gravity.TOP);
layout.addView(layoutSub);
ImageView colorView =
new ImageView(getContext());
colorView.setLayoutParams(params);
String hexColor =
String.format(
"#%06X",
(0xFFFFFF
& languageColor(
entry
.getKey())));
TextDrawable drawable =
TextDrawable.builder()
.beginConfig()
.width(64)
.height(64)
.endConfig()
.buildRoundRect(
"",
Color
.parseColor(
hexColor),
8);
drawable.setTint(
getResources()
.getColor(
languageColor(
entry
.getKey()),
null));
colorView.setImageDrawable(drawable);
layoutSub.addView(colorView);
TextView langName =
new TextView(getContext());
langName.setLayoutParams(params);
langName.setText(entry.getKey());
layoutSub.addView(langName);
TextView langPercentage =
new TextView(getContext());
langPercentage.setLayoutParams(params);
langPercentage.setTextSize(12);
langPercentage.setText(
getString(
R.string
.lang_percentage,
calculatePercentage(
entry
.getValue(),
totalSpan)));
layoutSub.addView(langPercentage);
}
MaterialAlertDialogBuilder
materialAlertDialogBuilder1 =
new MaterialAlertDialogBuilder(
ctx)
.setTitle(
R.string
.lang_statistics)
.setView(view)
.setNeutralButton(
getString(
R
.string
.close),
null);
materialAlertDialogBuilder1.create().show();
}
});
}
break;
case 401:
AlertDialogs.authorizationTokenRevokedDialog(ctx);
break;
case 403:
Toasty.error(ctx, ctx.getString(R.string.authorizeError));
binding.languagesStatistic.setVisibility(View.GONE);
break;
case 404:
binding.languagesStatistic.setVisibility(View.GONE);
break;
default:
Toasty.error(getContext(), getString(R.string.genericError));
binding.languagesStatistic.setVisibility(View.GONE);
break;
}
}
}
@Override
public void onFailure(
@NonNull Call<Map<String, Long>> call, @NonNull Throwable t) {
Toasty.error(ctx, ctx.getString(R.string.genericServerResponseError));
}
});
}
private void setRepoInfo(Locale locale) {
Repository repoInfo = repository.getRepository();

View File

@ -0,0 +1,223 @@
package org.mian.gitnex.helpers.languagestatistics;
import java.util.HashMap;
import java.util.Map;
import org.mian.gitnex.R;
/**
* @author M M Arif
*/
public class LanguageColor {
private static int color = R.color.default_lang_color;
private static final Map<String, Integer> colors = new HashMap<>();
static {
colors.put("ASP.NET", R.color.default_lang_color);
colors.put("ATS", R.color.ats);
colors.put("ActionScript", R.color.action_script);
colors.put("Ada", R.color.ada);
colors.put("AngelScript", R.color.angel_script);
colors.put("Ant Build System", R.color.ant_build_system);
colors.put("Antlers", R.color.antlers);
colors.put("ApacheConf", R.color.apache_conf);
colors.put("Apex", R.color.apex);
colors.put("AppleScript", R.color.apple_script);
colors.put("AsciiDoc", R.color.ascii_doc);
colors.put("Assembly", R.color.assembly);
colors.put("Awk", R.color.awk);
colors.put("BASIC", R.color.basic);
colors.put("Batchfile", R.color.batch_file);
colors.put("Bison", R.color.bison);
colors.put("Blade", R.color.blade);
colors.put("C", R.color.c);
colors.put("C#", R.color.c_sharp);
colors.put("C++", R.color.c_plus_plus);
colors.put("CMake", R.color.c_make);
colors.put("COBOL", R.color.c_make);
colors.put("CSS", R.color.css);
colors.put("CSV", R.color.csv);
colors.put("Classic ASP", R.color.classic_asp);
colors.put("Clojure", R.color.clojure);
colors.put("Closure Templates", R.color.closure_templates);
colors.put("CodeQL", R.color.code_ql);
colors.put("CoffeeScript", R.color.coffee_script);
colors.put("ColdFusion", R.color.cold_fusion);
colors.put("Common Lisp", R.color.common_lisp);
colors.put("Cython", R.color.cython);
colors.put("DNS Zone", R.color.cython);
colors.put("Dart", R.color.dart);
colors.put("Diff", R.color.dart);
colors.put("Dockerfile", R.color.docker_file);
colors.put("Dotenv", R.color.dot_env);
colors.put("E-mail", R.color.dot_env);
colors.put("EJS", R.color.ejs);
colors.put("Elixir", R.color.elixir);
colors.put("Elm", R.color.elm);
colors.put("Emacs Lisp", R.color.emacs_lisp);
colors.put("EmberScript", R.color.ember_script);
colors.put("Erlang", R.color.erlang);
colors.put("Forth", R.color.forth);
colors.put("Fortran", R.color.fortran);
colors.put("Fortran Free Form", R.color.fortran_free_form);
colors.put("FreeBasic", R.color.free_basic);
colors.put("GDScript", R.color.gd_script);
colors.put("GLSL", R.color.glsl);
colors.put("Git Attributes", R.color.git_attributes);
colors.put("Git Config", R.color.git_config);
colors.put("Gnuplot", R.color.gnuplot);
colors.put("Go", R.color.go);
colors.put("Go Checksums", R.color.go_checksums);
colors.put("Go Module", R.color.go_module);
colors.put("Gradle", R.color.gradle);
colors.put("GraphQL", R.color.graph_ql);
colors.put("Groovy", R.color.groovy);
colors.put("HAProxy", R.color.ha_proxy);
colors.put("HCL", R.color.hcl);
colors.put("HTML", R.color.html);
colors.put("HTML+PHP", R.color.html_php);
colors.put("Hack", R.color.hack);
colors.put("Haml", R.color.haml);
colors.put("Haskell", R.color.haskell);
colors.put("Haxe", R.color.haxe);
colors.put("INI", R.color.ini);
colors.put("Ignore List", R.color.ignore_list);
colors.put("JAR Manifest", R.color.jar_manifest);
colors.put("JSON", R.color.json);
colors.put("JSON with Comments", R.color.json_with_comments);
colors.put("JSON5", R.color.json5);
colors.put("JSONLD", R.color.json_ld);
colors.put("JSONiq", R.color.json_iq);
colors.put("Java", R.color.java);
colors.put("Java Properties", R.color.java_properties);
colors.put("Java Server Pages", R.color.java_server_pages);
colors.put("JavaScript", R.color.java_script);
colors.put("Jinja", R.color.jinja);
colors.put("Julia", R.color.julia);
colors.put("Jupyter Notebook", R.color.jupyter_notebook);
colors.put("Kotlin", R.color.kotlin);
colors.put("LLVM", R.color.llvm);
colors.put("LSL", R.color.lsl);
colors.put("Lasso", R.color.lasso);
colors.put("Latte", R.color.latte);
colors.put("Less", R.color.less);
colors.put("LiveScript", R.color.live_script);
colors.put("Lua", R.color.lua);
colors.put("MATLAB", R.color.matlab);
colors.put("MTML", R.color.mtml);
colors.put("Makefile", R.color.make_file);
colors.put("Markdown", R.color.markdown);
colors.put("Mathematica", R.color.mathematica);
colors.put("Maven POM", R.color.mathematica);
colors.put("Max", R.color.max);
colors.put("Mercury", R.color.mercury);
colors.put("Mermaid", R.color.mermaid);
colors.put("Meson", R.color.meson);
colors.put("MiniYAML", R.color.mini_yaml);
colors.put("NPM Config", R.color.npm_rc);
colors.put("NSIS", R.color.npm_rc);
colors.put("Nginx", R.color.nginx);
colors.put("Nim", R.color.nim);
colors.put("Nix", R.color.nix);
colors.put("ObjectScript", R.color.object_script);
colors.put("Objective-C", R.color.objective_c);
colors.put("Objective-C++", R.color.objective_c_plus_plus);
colors.put("PHP", R.color.php);
colors.put("PLSQL", R.color.pl_sql);
colors.put("PLpgSQL", R.color.pl_pg_sql);
colors.put("Pascal", R.color.pascal);
colors.put("Perl", R.color.perl);
colors.put("PostCSS", R.color.post_css);
colors.put("PostScript", R.color.post_script);
colors.put("PowerShell", R.color.power_shell);
colors.put("Proguard", R.color.pro_log);
colors.put("Prolog", R.color.pro_log);
colors.put("Public Key", R.color.post_css);
colors.put("Pug", R.color.pug);
colors.put("Puppet", R.color.puppet);
colors.put("Python", R.color.python);
colors.put("Python console", R.color.python);
colors.put("Python traceback", R.color.python);
colors.put("QML", R.color.qml);
colors.put("Qt Script", R.color.qt_script);
colors.put("R", R.color.r);
colors.put("Racket", R.color.racket);
colors.put("Raku", R.color.raku);
colors.put("Raw token data", R.color.raku);
colors.put("Regular Expression", R.color.regexp);
colors.put("Rich Text Format", R.color.regexp);
colors.put("Roff", R.color.roff);
colors.put("Roff Manpage", R.color.hack);
colors.put("Ruby", R.color.ruby);
colors.put("Rust", R.color.rust);
colors.put("SCSS", R.color.scss);
colors.put("SELinux Policy", R.color.scss);
colors.put("SQL", R.color.sql);
colors.put("SQLPL", R.color.sql);
colors.put("SSH Config", R.color.r);
colors.put("SVG", R.color.svg);
colors.put("Sass", R.color.sass);
colors.put("Scala", R.color.scala);
colors.put("Scheme", R.color.scheme);
colors.put("Shell", R.color.shell);
colors.put("ShellCheck Config", R.color.scheme);
colors.put("ShellSession", R.color.scala);
colors.put("Smarty", R.color.smarty);
colors.put("Standard ML", R.color.standard_ml);
colors.put("Stata", R.color.stata);
colors.put("Stylus", R.color.stylus);
colors.put("Svelte", R.color.svelte);
colors.put("Swift", R.color.swift);
colors.put("TOML", R.color.toml);
colors.put("TSQL", R.color.swift);
colors.put("TSV", R.color.smarty);
colors.put("TSX", R.color.toml);
colors.put("TXL", R.color.smarty);
colors.put("Tcl", R.color.tcl);
colors.put("TeX", R.color.tex);
colors.put("Texinfo", R.color.tex);
colors.put("Text", R.color.roff);
colors.put("Twig", R.color.twig);
colors.put("TypeScript", R.color.type_script);
colors.put("Unity3D Asset", R.color.unity_asset);
colors.put("VBA", R.color.vba);
colors.put("VBScript", R.color.vbs);
colors.put("VHDL", R.color.vhdl);
colors.put("Vala", R.color.vala);
colors.put("Vim Help File", R.color.vim);
colors.put("Vim Script", R.color.vim);
colors.put("Vim Snippet", R.color.vb_net);
colors.put("Visual Basic .NET", R.color.hack);
colors.put("Visual Basic 6.0", R.color.vb6);
colors.put("Volt", R.color.volt);
colors.put("Vue", R.color.vue);
colors.put("WebAssembly", R.color.web_assembly);
colors.put("Wikitext", R.color.wiki);
colors.put("Windows Registry Entries", R.color.win_reg_entries);
colors.put("XML", R.color.xml);
colors.put("XML Property List", R.color.xml_props_list);
colors.put("XQuery", R.color.vb6);
colors.put("XS", R.color.wiki);
colors.put("XSLT", R.color.xslt);
colors.put("XProc", R.color.yaml);
colors.put("YAML", R.color.vb6);
colors.put("Zephir", R.color.zep);
colors.put("cURL Config", R.color.zep);
colors.put("desktop", R.color.win_reg_entries);
colors.put("dircolors", R.color.xslt);
colors.put("robots.txt", R.color.yaml);
colors.put("sed", R.color.sed);
colors.put("xBase", R.color.x_base);
}
public static int languageColor(String key) {
for (Map.Entry<String, Integer> s : colors.entrySet()) {
if (key.equalsIgnoreCase(s.getKey())) {
color = s.getValue();
}
}
return color;
}
}

View File

@ -0,0 +1,78 @@
package org.mian.gitnex.helpers.languagestatistics;
import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Rect;
import android.util.AttributeSet;
import java.util.ArrayList;
/**
* @author M M Arif
*/
public class LanguageStatisticsBar extends androidx.appcompat.widget.AppCompatSeekBar {
private ArrayList<SeekbarItem> progressItemsList;
public LanguageStatisticsBar(Context context) {
super(context);
}
public LanguageStatisticsBar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LanguageStatisticsBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public void initData(ArrayList<SeekbarItem> progressItemsListInit) {
this.progressItemsList = progressItemsListInit;
}
@Override
protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
protected void onDraw(Canvas canvas) {
if (progressItemsList.size() > 0) {
int progressBarWidth = getWidth();
int progressBarHeight = getHeight();
int thumbOffSet = getThumbOffset();
int lastProgressX = 0;
int progressItemWidth, progressItemRight;
for (int i = 0; i < progressItemsList.size(); i++) {
SeekbarItem progressItem = progressItemsList.get(i);
@SuppressLint("DrawAllocation")
Paint progressPaint = new Paint();
progressPaint.setColor(getResources().getColor(progressItem.color, null));
progressItemWidth =
(int) (progressItem.progressItemPercentage * progressBarWidth / 100);
progressItemRight = lastProgressX + progressItemWidth;
if (i == progressItemsList.size() - 1 && progressItemRight != progressBarWidth) {
progressItemRight = progressBarWidth;
}
@SuppressLint("DrawAllocation")
Rect progressRect = new Rect();
progressRect.set(
lastProgressX,
thumbOffSet / 2,
progressItemRight,
progressBarHeight - thumbOffSet / 2);
canvas.drawRect(progressRect, progressPaint);
lastProgressX = progressItemRight;
}
super.onDraw(canvas);
}
}
}

View File

@ -0,0 +1,15 @@
package org.mian.gitnex.helpers.languagestatistics;
import android.annotation.SuppressLint;
/**
* @author M M Arif
*/
public class LanguageStatisticsHelper {
@SuppressLint("DefaultLocale")
public static String calculatePercentage(Long number, float total) {
float percent = number * 100f / total;
return String.format("%.1f", percent);
}
}

View File

@ -0,0 +1,10 @@
package org.mian.gitnex.helpers.languagestatistics;
/**
* @author M M Arif
*/
public class SeekbarItem {
public int color;
public float progressItemPercentage;
}

View File

@ -134,6 +134,26 @@
android:textColorLink="@color/lightBlue"
android:textSize="@dimen/dimen16sp"/>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?attr/materialCardViewElevatedStyle"
android:backgroundTint="@android:color/transparent"
app:cardElevation="@dimen/dimen0dp">
<org.mian.gitnex.helpers.languagestatistics.LanguageStatisticsBar
android:id="@+id/languages_statistic"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:thumbTint="@android:color/transparent"
android:clickable="false"
android:focusable="false"
android:enabled="false"
android:progressDrawable="@android:color/transparent"
android:visibility="gone" />
</com.google.android.material.card.MaterialCardView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="@dimen/dimen20dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<LinearLayout
android:id="@+id/lang_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</LinearLayout>

View File

@ -0,0 +1,166 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="default_lang_color">#49da39</color>
<color name="asp_net">#9400ff</color>
<color name="ats">#1ac620</color>
<color name="action_script">#882B0F</color>
<color name="ada">#02f88c</color>
<color name="angel_script">#C7D7DC</color>
<color name="ant_build_system">#A9157E</color>
<color name="antlers">#ff269e</color>
<color name="apache_conf">#d12127</color>
<color name="apex">#1797c0</color>
<color name="apple_script">#101F1F</color>
<color name="ascii_doc">#73a0c5</color>
<color name="assembly">#6E4C13</color>
<color name="awk">#c30e9b</color>
<color name="basic">#ff0000</color>
<color name="batch_file">#C1F12E</color>
<color name="bison">#6A463F</color>
<color name="blade">#f7523f</color>
<color name="c">#555555</color>
<color name="c_sharp">#178600</color>
<color name="c_plus_plus">#f34b7d</color>
<color name="c_make">#DA3434</color>
<color name="css">#563d7c</color>
<color name="csv">#237346</color>
<color name="classic_asp">#6a40fd</color>
<color name="clojure">#db5855</color>
<color name="closure_templates">#0d948f</color>
<color name="code_ql">#140f46</color>
<color name="coffee_script">#244776</color>
<color name="cold_fusion">#ed2cd6</color>
<color name="common_lisp">#3fb68b</color>
<color name="cython">#fedf5b</color>
<color name="dart">#00B4AB</color>
<color name="docker_file">#384d54</color>
<color name="dot_env">#e5d559</color>
<color name="ejs">#a91e50</color>
<color name="elixir">#6e4a7e</color>
<color name="elm">#60B5CC</color>
<color name="emacs_lisp">#c065db</color>
<color name="ember_script">#FFF4F3</color>
<color name="erlang">#B83998</color>
<color name="forth">#341708</color>
<color name="fortran">#4d41b1</color>
<color name="fortran_free_form">#4d41b1</color>
<color name="free_basic">#141AC9</color>
<color name="gd_script">#355570</color>
<color name="glsl">#5686a5</color>
<color name="git_attributes">#F44D27</color>
<color name="git_config">#F44D27</color>
<color name="gnuplot">#f0a9f0</color>
<color name="go">#00ADD8</color>
<color name="go_checksums">#00ADD8</color>
<color name="go_module">#00ADD8</color>
<color name="gradle">#02303a</color>
<color name="graph_ql">#e10098</color>
<color name="groovy">#4298b8</color>
<color name="ha_proxy">#106da9</color>
<color name="hcl">#844FBA</color>
<color name="html">#e34c26</color>
<color name="html_php">#4f5d95</color>
<color name="hack">#878787</color>
<color name="haml">#ece2a9</color>
<color name="haskell">#5e5086</color>
<color name="haxe">#df7900</color>
<color name="ini">#d1dbe0</color>
<color name="ignore_list">#000000</color>
<color name="jar_manifest">#b07219</color>
<color name="json">#292929</color>
<color name="json_with_comments">#292929</color>
<color name="json5">#267CB9</color>
<color name="json_ld">#0c479c</color>
<color name="json_iq">#40d47e</color>
<color name="java">#b07219</color>
<color name="java_properties">#2A6277</color>
<color name="java_server_pages">#2A6277</color>
<color name="java_script">#f1e05a</color>
<color name="jinja">#a52a22</color>
<color name="julia">#a270ba</color>
<color name="jupyter_notebook">#DA5B0B</color>
<color name="kotlin">#A97BFF</color>
<color name="llvm">#185619</color>
<color name="lsl">#3d9970</color>
<color name="lasso">#999999</color>
<color name="latte">#f2a542</color>
<color name="less">#1d365d</color>
<color name="live_script">#499886</color>
<color name="lua">#000080</color>
<color name="matlab">#e16737</color>
<color name="mtml">#b7e1f4</color>
<color name="make_file">#427819</color>
<color name="markdown">#083fa1</color>
<color name="mathematica">#dd1100</color>
<color name="max">#c4a79c</color>
<color name="mercury">#ff2b2b</color>
<color name="mermaid">#ff3670</color>
<color name="meson">#007800</color>
<color name="mini_yaml">#ff1111</color>
<color name="npm_rc">#cb3837</color>
<color name="nginx">#009639</color>
<color name="nim">#ffc200</color>
<color name="nix">#7e7eff</color>
<color name="object_script">#424893</color>
<color name="objective_c">#438eff</color>
<color name="objective_c_plus_plus">#6866fb</color>
<color name="php">#4F5D95</color>
<color name="pl_sql">#dad8d8</color>
<color name="pl_pg_sql">#336790</color>
<color name="pascal">#E3F171</color>
<color name="perl">#0298c3</color>
<color name="post_css">#dc3a0c</color>
<color name="post_script">#da291c</color>
<color name="power_shell">#012456</color>
<color name="pro_log">#74283c</color>
<color name="pug">#a86454</color>
<color name="puppet">#302B6D</color>
<color name="python">#3572A5</color>
<color name="qml">#44a51c</color>
<color name="qt_script">#00b841</color>
<color name="r">#198CE7</color>
<color name="racket">#3c5caa</color>
<color name="raku">#0000fb</color>
<color name="regexp">#009a00</color>
<color name="roff">#ecdebe</color>
<color name="ruby">#701516</color>
<color name="rust">#dea584</color>
<color name="scss">#c6538c</color>
<color name="sql">#e38c00</color>
<color name="svg">#ff9900</color>
<color name="sass">#a53b70</color>
<color name="scala">#c22d40</color>
<color name="scheme">#1e4aec</color>
<color name="shell">#89e051</color>
<color name="smarty">#f0c040</color>
<color name="standard_ml">#dc566d</color>
<color name="stata">#1a5f91</color>
<color name="stylus">#ff6347</color>
<color name="svelte">#ff3e00</color>
<color name="swift">#F05138</color>
<color name="toml">#9c4221</color>
<color name="tcl">#e4cc98</color>
<color name="tex">#3D6117</color>
<color name="twig">#c1d026</color>
<color name="type_script">#3178c6</color>
<color name="unity_asset">#222c37</color>
<color name="vba">#867db1</color>
<color name="vbs">#15dcdc</color>
<color name="vhdl">#adb2cb</color>
<color name="vala">#a56de2</color>
<color name="vim">#199f4b</color>
<color name="vb_net">#945db7</color>
<color name="vb6">#2c6353</color>
<color name="volt">#1F1F1F</color>
<color name="vue">#41b883</color>
<color name="web_assembly">#04133b</color>
<color name="wiki">#fc5757</color>
<color name="win_reg_entries">#52d5ff</color>
<color name="xml">#0060ac</color>
<color name="xml_props_list">#0060ac</color>
<color name="xslt">#EB8CEB</color>
<color name="yaml">#cb171e</color>
<color name="zep">#118f9e</color>
<color name="sed">#64b970</color>
<color name="x_base">#403a40</color>
</resources>

View File

@ -797,7 +797,7 @@
<string name="newNoteContentHint">Start taking your notes here</string>
<string name="noteDateTime">Created %s</string>
<string name="noteTimeModified">Updated %s</string>
<string name="noteDeleteDialoMessage">Do you really want to delete this note?</string>
<string name="noteDeleteDialogMessage">Do you really want to delete this note?</string>
<plurals name="noteDeleteMessage">
<item quantity="one">Note deleted successfully</item>
<item quantity="other">Notes deleted successfully</item>
@ -852,4 +852,7 @@
<string name="statusNoUrl">This status has no linked target URL.</string>
<string name="starredRepos">Starred Repos</string>
<string name="lang_statistics">Language Statistics</string>
<string name="lang_percentage" translatable="false">%s%%</string>
</resources>