diff --git a/flutter_highlight/lib/flutter_highlight.dart b/flutter_highlight/lib/flutter_highlight.dart index 9afbc47e..c70d73fb 100644 --- a/flutter_highlight/lib/flutter_highlight.dart +++ b/flutter_highlight/lib/flutter_highlight.dart @@ -27,12 +27,16 @@ class HighlightView extends StatelessWidget { /// Specify text styles such as font family and font size final TextStyle? textStyle; + /// Text selectable + final bool textSelectable; + HighlightView( String input, { this.language, this.theme = const {}, this.padding, this.textStyle, + this.textSelectable = false, int tabSize = 8, // TODO: https://github.com/flutter/flutter/issues/50087 }) : source = input.replaceAll('\t', ' ' * tabSize); @@ -48,7 +52,8 @@ class HighlightView extends StatelessWidget { : TextSpan(text: node.value, style: theme[node.className!])); } else if (node.children != null) { List tmp = []; - currentSpans.add(TextSpan(children: tmp, style: theme[node.className!])); + currentSpans + .add(TextSpan(children: tmp, style: theme[node.className!])); stack.add(currentSpans); currentSpans = tmp; @@ -90,12 +95,16 @@ class HighlightView extends StatelessWidget { return Container( color: theme[_rootKey]?.backgroundColor ?? _defaultBackgroundColor, padding: padding, - child: RichText( - text: TextSpan( + child: _buildRichText( + child: TextSpan( style: _textStyle, - children: _convert(highlight.parse(source, language: language).nodes!), + children: + _convert(highlight.parse(source, language: language).nodes!), ), ), ); } + + Widget _buildRichText({required TextSpan child}) => + textSelectable ? SelectableText.rich(child) : RichText(text: child); } diff --git a/highlight/lib/languages/accesslog.dart b/highlight/lib/languages/accesslog.dart index a1c5642f..98a5fe59 100644 --- a/highlight/lib/languages/accesslog.dart +++ b/highlight/lib/languages/accesslog.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final accesslog = Mode(refs: {}, contains: [ Mode( diff --git a/highlight/lib/languages/clojure-repl.dart b/highlight/lib/languages/clojure-repl.dart index f2f46f55..ac6dff83 100644 --- a/highlight/lib/languages/clojure-repl.dart +++ b/highlight/lib/languages/clojure-repl.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final clojureRepl = Mode(refs: {}, contains: [ Mode( diff --git a/highlight/lib/languages/csp.dart b/highlight/lib/languages/csp.dart index a09f1ff3..6e11cac2 100644 --- a/highlight/lib/languages/csp.dart +++ b/highlight/lib/languages/csp.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final csp = Mode( refs: {}, diff --git a/highlight/lib/languages/diff.dart b/highlight/lib/languages/diff.dart index 544ba9ec..9152e4c2 100644 --- a/highlight/lib/languages/diff.dart +++ b/highlight/lib/languages/diff.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final diff = Mode(refs: {}, aliases: [ "patch" diff --git a/highlight/lib/languages/fix.dart b/highlight/lib/languages/fix.dart index 68157bb2..7940c587 100644 --- a/highlight/lib/languages/fix.dart +++ b/highlight/lib/languages/fix.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final fix = Mode(refs: {}, contains: [ Mode( diff --git a/highlight/lib/languages/http.dart b/highlight/lib/languages/http.dart index a39f8d88..362a692b 100644 --- a/highlight/lib/languages/http.dart +++ b/highlight/lib/languages/http.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final http = Mode( refs: {}, diff --git a/highlight/lib/languages/inform7.dart b/highlight/lib/languages/inform7.dart index b6cdada6..f4712382 100644 --- a/highlight/lib/languages/inform7.dart +++ b/highlight/lib/languages/inform7.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final inform7 = Mode( refs: {}, diff --git a/highlight/lib/languages/julia-repl.dart b/highlight/lib/languages/julia-repl.dart index b9b3fe97..524e5b64 100644 --- a/highlight/lib/languages/julia-repl.dart +++ b/highlight/lib/languages/julia-repl.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final juliaRepl = Mode(refs: {}, contains: [ Mode( diff --git a/highlight/lib/languages/leaf.dart b/highlight/lib/languages/leaf.dart index 3ca65b0a..5ae48d5c 100644 --- a/highlight/lib/languages/leaf.dart +++ b/highlight/lib/languages/leaf.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final leaf = Mode(refs: {}, contains: [ Mode( diff --git a/highlight/lib/languages/markdown.dart b/highlight/lib/languages/markdown.dart index 3d6a82d7..bf86e02f 100644 --- a/highlight/lib/languages/markdown.dart +++ b/highlight/lib/languages/markdown.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final markdown = Mode(refs: {}, aliases: [ "md", diff --git a/highlight/lib/languages/mojolicious.dart b/highlight/lib/languages/mojolicious.dart index fd322a12..9481efd8 100644 --- a/highlight/lib/languages/mojolicious.dart +++ b/highlight/lib/languages/mojolicious.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final mojolicious = Mode(refs: {}, subLanguage: [ "xml" diff --git a/highlight/lib/languages/plaintext.dart b/highlight/lib/languages/plaintext.dart index 01117df0..8e08f62d 100644 --- a/highlight/lib/languages/plaintext.dart +++ b/highlight/lib/languages/plaintext.dart @@ -1,6 +1,5 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final plaintext = Mode(refs: {}, disableAutodetect: true); diff --git a/highlight/lib/languages/shell.dart b/highlight/lib/languages/shell.dart index aa0be031..922ae33c 100644 --- a/highlight/lib/languages/shell.dart +++ b/highlight/lib/languages/shell.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final shell = Mode(refs: {}, aliases: [ "console" diff --git a/highlight/lib/languages/subunit.dart b/highlight/lib/languages/subunit.dart index 68a2ceda..95ff27f1 100644 --- a/highlight/lib/languages/subunit.dart +++ b/highlight/lib/languages/subunit.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final subunit = Mode( refs: {}, diff --git a/highlight/lib/languages/taggerscript.dart b/highlight/lib/languages/taggerscript.dart index da63a225..4cf1970d 100644 --- a/highlight/lib/languages/taggerscript.dart +++ b/highlight/lib/languages/taggerscript.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final taggerscript = Mode(refs: {}, contains: [ Mode( diff --git a/highlight/lib/languages/vbscript-html.dart b/highlight/lib/languages/vbscript-html.dart index 6607b82f..6bd9f61c 100644 --- a/highlight/lib/languages/vbscript-html.dart +++ b/highlight/lib/languages/vbscript-html.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final vbscriptHtml = Mode(refs: {}, subLanguage: [ "xml" diff --git a/highlight/lib/languages/xquery.dart b/highlight/lib/languages/xquery.dart index 7e36edf6..82e99d77 100644 --- a/highlight/lib/languages/xquery.dart +++ b/highlight/lib/languages/xquery.dart @@ -1,7 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND import '../src/mode.dart'; -import '../src/common_modes.dart'; final xquery = Mode( refs: {}, diff --git a/highlight/lib/src/highlight.dart b/highlight/lib/src/highlight.dart index fdab3dc3..efeb134d 100644 --- a/highlight/lib/src/highlight.dart +++ b/highlight/lib/src/highlight.dart @@ -459,7 +459,7 @@ class Highlight { while (true) { match = top!.terminators ?.allMatches(source, index) - ?.firstWhereOrNull((m) => true); + .firstWhereOrNull((m) => true); if (match == null) break; // print(top.terminators);