fix: latex (#1094)

This commit is contained in:
My-Responsitories
2025-08-23 20:45:19 +08:00
committed by GitHub
parent 3c34e43827
commit b77403f03f

View File

@@ -2,6 +2,7 @@ import 'dart:math';
import 'package:PiliPlus/common/widgets/image/image_view.dart'; import 'package:PiliPlus/common/widgets/image/image_view.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart'; import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/models/common/image_preview_type.dart'; import 'package:PiliPlus/models/common/image_preview_type.dart';
import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models/common/image_type.dart';
import 'package:PiliPlus/models/dynamics/article_content_model.dart' import 'package:PiliPlus/models/dynamics/article_content_model.dart'
@@ -9,6 +10,7 @@ import 'package:PiliPlus/models/dynamics/article_content_model.dart'
import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/models/dynamics/result.dart';
import 'package:PiliPlus/pages/dynamics/widgets/vote.dart'; import 'package:PiliPlus/pages/dynamics/widgets/vote.dart';
import 'package:PiliPlus/utils/app_scheme.dart'; import 'package:PiliPlus/utils/app_scheme.dart';
import 'package:PiliPlus/utils/context_ext.dart';
import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/extension.dart';
import 'package:PiliPlus/utils/image_util.dart'; import 'package:PiliPlus/utils/image_util.dart';
import 'package:PiliPlus/utils/page_utils.dart'; import 'package:PiliPlus/utils/page_utils.dart';
@@ -17,7 +19,7 @@ import 'package:cached_network_svg_image/cached_network_svg_image.dart';
import 'package:flutter/foundation.dart' show kDebugMode; import 'package:flutter/foundation.dart' show kDebugMode;
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart' hide ContextExtensionss;
import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart';
import 'package:re_highlight/languages/all.dart'; import 'package:re_highlight/languages/all.dart';
import 'package:re_highlight/re_highlight.dart'; import 'package:re_highlight/re_highlight.dart';
@@ -64,6 +66,10 @@ class OpusContent extends StatelessWidget {
if (opus.isEmpty) { if (opus.isEmpty) {
return const SliverToBoxAdapter(); return const SliverToBoxAdapter();
} }
late final highlight = Highlight()..registerLanguages(builtinAllLanguages);
late final isDarkMode = context.isDarkMode;
final colorScheme = Theme.of(context).colorScheme; final colorScheme = Theme.of(context).colorScheme;
return SliverList.separated( return SliverList.separated(
itemCount: opus.length, itemCount: opus.length,
@@ -119,16 +125,19 @@ class OpusContent extends StatelessWidget {
); );
} }
case 'TEXT_NODE_TYPE_FORMULA' when (item.formula != null): case 'TEXT_NODE_TYPE_FORMULA' when (item.formula != null):
final latex = item.formula!.latexContent!;
return WidgetSpan( return WidgetSpan(
child: CachedNetworkSVGImage( child: CachedNetworkSVGImage(
cacheKey: latex,
semanticsLabel: latex,
height: 65, height: 65,
'https://api.bilibili.com/x/web-frontend/mathjax/tex?formula=${Uri.encodeComponent(item.formula!.latexContent!)}', '${HttpString.apiBaseUrl}/x/web-frontend/mathjax/tex?formula=${Uri.encodeComponent(latex)}',
colorFilter: ColorFilter.mode( colorFilter: ColorFilter.mode(
colorScheme.onSurfaceVariant, colorScheme.onSurfaceVariant,
BlendMode.srcIn, BlendMode.srcIn,
), ),
alignment: Alignment.centerLeft, alignment: Alignment.centerLeft,
placeholderBuilder: (_) => const SizedBox.shrink(), placeholderBuilder: (_) => Text(latex),
), ),
); );
default: default:
@@ -559,23 +568,22 @@ class OpusContent extends StatelessWidget {
), ),
); );
case 7 when (element.code != null): case 7 when (element.code != null):
final Highlight highlight = Highlight() final renderer = TextSpanRenderer(
..registerLanguages(builtinAllLanguages);
final HighlightResult result = highlight.highlightAuto(
element.code!.content!,
element.code!.lang == 'language-clike'
? const ['c', 'java']
: [
element.code!.lang!
.replaceAll('language-', '')
.replaceAll('like', ''),
],
);
final TextSpanRenderer renderer = TextSpanRenderer(
const TextStyle(), const TextStyle(),
context.isDarkMode ? githubDarkTheme : githubTheme, isDarkMode ? githubDarkTheme : githubTheme,
); );
result.render(renderer); highlight
.highlightAuto(
element.code!.content!,
element.code!.lang == 'language-clike'
? const ['c', 'java']
: [
element.code!.lang!
.replaceAll('language-', '')
.replaceAll('like', ''),
],
)
.render(renderer);
return Container( return Container(
padding: const EdgeInsets.all(12), padding: const EdgeInsets.all(12),
decoration: BoxDecoration( decoration: BoxDecoration(