diff --git a/lib/controller/custom_text_controller.dart b/lib/controller/custom_text_controller.dart index 7f1b883..93cefa3 100644 --- a/lib/controller/custom_text_controller.dart +++ b/lib/controller/custom_text_controller.dart @@ -1,11 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_highlight/themes/atom-one-dark-reasonable.dart'; import 'package:highlight/highlight.dart' show highlight, Node; +import 'package:phone_ide/models/editor_language.dart'; class TextEditingControllerIDE extends TextEditingController { - TextEditingControllerIDE({Key? key, this.font, this.language = 'HTML'}); + TextEditingControllerIDE({Key? key, this.font, this.language = EditorLanguage.html}); - String language; + EditorLanguage language; final TextStyle? font; List _convert(List nodes) { @@ -56,7 +57,7 @@ class TextEditingControllerIDE extends TextEditingController { TextStyle? style, required bool withComposing, }) { - var nodes = highlight.parse(text, language: language).nodes!; + var nodes = highlight.parse(text, language: language.identifier).nodes!; return TextSpan(style: style, children: _convert(nodes)); } } diff --git a/lib/editor/editor.dart b/lib/editor/editor.dart index 3ff3340..03d4fc3 100644 --- a/lib/editor/editor.dart +++ b/lib/editor/editor.dart @@ -6,6 +6,7 @@ import 'package:flutter/services.dart'; import 'package:phone_ide/controller/custom_text_controller.dart'; import 'package:phone_ide/editor/editor_options.dart'; import 'package:phone_ide/editor/linebar.dart'; +import 'package:phone_ide/models/editor_language.dart'; import 'package:phone_ide/models/textfield_data.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -35,7 +36,7 @@ class Editor extends StatefulWidget { final String defaultValue; // The starting language of the editor - final String defaultLanguage; + final EditorLanguage defaultLanguage; // The path e.g. file name "index.html" final String path; diff --git a/lib/main.dart b/lib/main.dart index aa1c452..77c599c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:phone_ide/models/editor_language.dart'; import 'package:phone_ide/phone_ide.dart'; void main() { @@ -28,7 +29,7 @@ class EditorView extends StatefulWidget { class EditorViewState extends State { Editor editor = Editor( - defaultLanguage: 'html', + defaultLanguage: EditorLanguage.html, defaultValue: '

Hello World

', path: 'index.html', options: EditorOptions(), diff --git a/lib/models/editor_language.dart b/lib/models/editor_language.dart new file mode 100644 index 0000000..2ee13a4 --- /dev/null +++ b/lib/models/editor_language.dart @@ -0,0 +1,73 @@ +/// Supported programming languages for syntax highlighting in the editor. +/// +/// This enum represents all languages supported by the highlight.js package +/// used in the phone_ide editor. Each enum value corresponds to a language +/// identifier that can be used for syntax highlighting. +enum EditorLanguage { + // Web Development + html('html'), + css('css'), + javascript('javascript'), + typescript('typescript'), + json('json'), + xml('xml'), + + // Markup & Documentation + markdown('markdown'), + yaml('yaml'), + + // Mobile Development + dart('dart'), + kotlin('kotlin'), + swift('swift'), + + // Systems Programming + c('c'), + cpp('cpp'), + rust('rust'), + go('go'), + + // JVM Languages + java('java'), + scala('scala'), + groovy('groovy'), + + // Functional Programming + haskell('haskell'), + fsharp('fsharp'), + clojure('clojure'), + elixir('elixir'), + erlang('erlang'), + + // Scripting Languages + python('python'), + ruby('ruby'), + php('php'), + perl('perl'), + lua('lua'), + + // .NET Languages + csharp('csharp'), + + // Shell & Config + bash('bash'), + shell('shell'), + powershell('powershell'), + dockerfile('dockerfile'), + + // Database + sql('sql'), + graphql('graphql'), + + // Other Popular Languages + r('r'), + coffeescript('coffeescript'); + + const EditorLanguage(this.identifier); + + /// The language identifier string used by highlight.js + final String identifier; + + @override + String toString() => identifier; +} diff --git a/lib/phone_ide.dart b/lib/phone_ide.dart index f543eb6..e6c1339 100644 --- a/lib/phone_ide.dart +++ b/lib/phone_ide.dart @@ -2,3 +2,4 @@ library phone_ide; export './editor/editor.dart'; export './editor/editor_options.dart'; +export './models/editor_language.dart';