Showing
2 changed files
with
28 additions
and
4 deletions
@@ -122,8 +122,7 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex | @@ -122,8 +122,7 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex | ||
122 | Column( | 122 | Column( |
123 | children: [ | 123 | children: [ |
124 | Expanded( | 124 | Expanded( |
125 | - child: SingleChildScrollView( | ||
126 | - child: Column( | 125 | + child: ListView( |
127 | children: [ | 126 | children: [ |
128 | AnimatedBuilder( | 127 | AnimatedBuilder( |
129 | animation: _controller, | 128 | animation: _controller, |
@@ -172,6 +171,18 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex | @@ -172,6 +171,18 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex | ||
172 | tex.replaceAllMapped(RegExp(r"align\*"), | 171 | tex.replaceAllMapped(RegExp(r"align\*"), |
173 | (match) => "aligned"), | 172 | (match) => "aligned"), |
174 | latexBuilder: (contex, tex) { | 173 | latexBuilder: (contex, tex) { |
174 | + if (tex.contains(r"\begin{tabular}")) { | ||
175 | + // return table. | ||
176 | + String tableString = "|${(RegExp( | ||
177 | + r"^\\begin\{tabular\}\{.*?\}(.*?)\\end\{tabular\}$", | ||
178 | + multiLine: true, | ||
179 | + dotAll: true, | ||
180 | + ).firstMatch(tex)?[1] ?? "").trim()}|"; | ||
181 | + tableString = tableString | ||
182 | + .replaceAll(r"\\", "|\n|") | ||
183 | + .replaceAll("&", "|"); | ||
184 | + return TexMarkdown(tableString); | ||
185 | + } | ||
175 | var controller = ScrollController(); | 186 | var controller = ScrollController(); |
176 | return Column( | 187 | return Column( |
177 | children: [ | 188 | children: [ |
@@ -201,7 +212,6 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex | @@ -201,7 +212,6 @@ Markdown and LaTeX can be powerful tools for formatting text and mathematical ex | ||
201 | ], | 212 | ], |
202 | ), | 213 | ), |
203 | ), | 214 | ), |
204 | - ), | ||
205 | ConstrainedBox( | 215 | ConstrainedBox( |
206 | constraints: const BoxConstraints(maxHeight: 200), | 216 | constraints: const BoxConstraints(maxHeight: 200), |
207 | child: Padding( | 217 | child: Padding( |
@@ -58,6 +58,8 @@ class MdWidget extends StatelessWidget { | @@ -58,6 +58,8 @@ class MdWidget extends StatelessWidget { | ||
58 | .asMap(), | 58 | .asMap(), |
59 | ) | 59 | ) |
60 | .toList(); | 60 | .toList(); |
61 | + bool heading = | ||
62 | + RegExp(r"^\|.*?\|\n\|-[-\\ |]*?-\|\n").hasMatch(eachLn.trim()); | ||
61 | int maxCol = 0; | 63 | int maxCol = 0; |
62 | for (final each in value) { | 64 | for (final each in value) { |
63 | if (maxCol < each.keys.length) { | 65 | if (maxCol < each.keys.length) { |
@@ -80,11 +82,23 @@ class MdWidget extends StatelessWidget { | @@ -80,11 +82,23 @@ class MdWidget extends StatelessWidget { | ||
80 | color: Theme.of(context).colorScheme.onSurface, | 82 | color: Theme.of(context).colorScheme.onSurface, |
81 | ), | 83 | ), |
82 | children: value | 84 | children: value |
85 | + .asMap() | ||
86 | + .entries | ||
83 | .map<TableRow>( | 87 | .map<TableRow>( |
84 | - (e) => TableRow( | 88 | + (entry) => TableRow( |
89 | + decoration: (heading) | ||
90 | + ? BoxDecoration( | ||
91 | + color: (entry.key == 0) | ||
92 | + ? Theme.of(context) | ||
93 | + .colorScheme | ||
94 | + .surfaceVariant | ||
95 | + : null, | ||
96 | + ) | ||
97 | + : null, | ||
85 | children: List.generate( | 98 | children: List.generate( |
86 | maxCol, | 99 | maxCol, |
87 | (index) { | 100 | (index) { |
101 | + var e = entry.value; | ||
88 | String data = e[index] ?? ""; | 102 | String data = e[index] ?? ""; |
89 | if (RegExp(r"^---+$").hasMatch(data.trim())) { | 103 | if (RegExp(r"^---+$").hasMatch(data.trim())) { |
90 | return const SizedBox(); | 104 | return const SizedBox(); |
-
Please register or login to post a comment