Showing
1 changed file
with
29 additions
and
29 deletions
@@ -11,7 +11,7 @@ import 'md_widget.dart'; | @@ -11,7 +11,7 @@ import 'md_widget.dart'; | ||
11 | 11 | ||
12 | /// Markdown components | 12 | /// Markdown components |
13 | abstract class MarkdownComponent { | 13 | abstract class MarkdownComponent { |
14 | - static final List<MarkdownComponent> components = [ | 14 | + static List<MarkdownComponent> get components => [ |
15 | CodeBlockMd(), | 15 | CodeBlockMd(), |
16 | NewLines(), | 16 | NewLines(), |
17 | TableMd(), | 17 | TableMd(), |
@@ -25,9 +25,9 @@ abstract class MarkdownComponent { | @@ -25,9 +25,9 @@ abstract class MarkdownComponent { | ||
25 | ImageMd(), | 25 | ImageMd(), |
26 | HighlightedText(), | 26 | HighlightedText(), |
27 | BoldMd(), | 27 | BoldMd(), |
28 | + ItalicMd(), | ||
28 | LatexMathMultyLine(), | 29 | LatexMathMultyLine(), |
29 | LatexMath(), | 30 | LatexMath(), |
30 | - ItalicMd(), | ||
31 | ATagMd(), | 31 | ATagMd(), |
32 | SourceTag(), | 32 | SourceTag(), |
33 | ]; | 33 | ]; |
@@ -435,7 +435,7 @@ class HighlightedText extends InlineMd { | @@ -435,7 +435,7 @@ class HighlightedText extends InlineMd { | ||
435 | /// Bold text component | 435 | /// Bold text component |
436 | class BoldMd extends InlineMd { | 436 | class BoldMd extends InlineMd { |
437 | @override | 437 | @override |
438 | - RegExp get exp => RegExp(r"\*\*(([\S^\*].*?)?[\S^\*?])\*\*"); | 438 | + RegExp get exp => RegExp(r"(?<!\*)\*\*(?<!\s)(.+?)(?<!\s)\*\*(?!\*)"); |
439 | 439 | ||
440 | @override | 440 | @override |
441 | InlineSpan span( | 441 | InlineSpan span( |
@@ -458,6 +458,32 @@ class BoldMd extends InlineMd { | @@ -458,6 +458,32 @@ class BoldMd extends InlineMd { | ||
458 | } | 458 | } |
459 | } | 459 | } |
460 | 460 | ||
461 | +/// Italic text component | ||
462 | +class ItalicMd extends InlineMd { | ||
463 | + @override | ||
464 | + RegExp get exp => RegExp(r"(?<!\*)\*(?<!\s)(.+?)(?<!\s)\*(?!\*)", dotAll: true); | ||
465 | + | ||
466 | + @override | ||
467 | + InlineSpan span( | ||
468 | + BuildContext context, | ||
469 | + String text, | ||
470 | + final GptMarkdownConfig config, | ||
471 | + ) { | ||
472 | + var match = exp.firstMatch(text.trim()); | ||
473 | + var conf = config.copyWith( | ||
474 | + style: (config.style ?? const TextStyle()) | ||
475 | + .copyWith(fontStyle: FontStyle.italic)); | ||
476 | + return TextSpan( | ||
477 | + children: MarkdownComponent.generate( | ||
478 | + context, | ||
479 | + "${match?[1]}", | ||
480 | + conf, | ||
481 | + ), | ||
482 | + style: conf.style, | ||
483 | + ); | ||
484 | + } | ||
485 | +} | ||
486 | + | ||
461 | class LatexMathMultyLine extends BlockMd { | 487 | class LatexMathMultyLine extends BlockMd { |
462 | @override | 488 | @override |
463 | RegExp get exp => RegExp( | 489 | RegExp get exp => RegExp( |
@@ -589,32 +615,6 @@ class LatexMath extends InlineMd { | @@ -589,32 +615,6 @@ class LatexMath extends InlineMd { | ||
589 | } | 615 | } |
590 | } | 616 | } |
591 | 617 | ||
592 | -/// Italic text component | ||
593 | -class ItalicMd extends InlineMd { | ||
594 | - @override | ||
595 | - RegExp get exp => RegExp(r"\*(\S(.*?\S)?)\*", dotAll: true); | ||
596 | - | ||
597 | - @override | ||
598 | - InlineSpan span( | ||
599 | - BuildContext context, | ||
600 | - String text, | ||
601 | - final GptMarkdownConfig config, | ||
602 | - ) { | ||
603 | - var match = exp.firstMatch(text.trim()); | ||
604 | - var conf = config.copyWith( | ||
605 | - style: (config.style ?? const TextStyle()) | ||
606 | - .copyWith(fontStyle: FontStyle.italic)); | ||
607 | - return TextSpan( | ||
608 | - children: MarkdownComponent.generate( | ||
609 | - context, | ||
610 | - "${match?[1]}", | ||
611 | - conf, | ||
612 | - ), | ||
613 | - style: conf.style, | ||
614 | - ); | ||
615 | - } | ||
616 | -} | ||
617 | - | ||
618 | /// source text component | 618 | /// source text component |
619 | class SourceTag extends InlineMd { | 619 | class SourceTag extends InlineMd { |
620 | @override | 620 | @override |
-
Please register or login to post a comment