aboutsummaryrefslogtreecommitdiff
path: root/ricochet/src/render/renderer.cc
diff options
context:
space:
mode:
authorRichard Qin <richard.qin.x@gmail.com>2026-04-12 16:43:23 +0800
committerRichard Qin <richard.qin.x@gmail.com>2026-04-12 16:43:23 +0800
commit79ab6fcb6e74109c46e836594b2cc1ead87d7b30 (patch)
tree9c9f3e22d8554c86bda0329cf9e3f26365371958 /ricochet/src/render/renderer.cc
parente81d870756bccbb2b5da52673d52a6bfd93f7b3d (diff)
downloadrcc-project-79ab6fcb6e74109c46e836594b2cc1ead87d7b30.tar.gz
rcc-project-79ab6fcb6e74109c46e836594b2cc1ead87d7b30.tar.xz
feat: implement HTTP redirect support, URL search formatting, image alt text rendering, and improved terminal cursor management
Diffstat (limited to 'ricochet/src/render/renderer.cc')
-rw-r--r--ricochet/src/render/renderer.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/ricochet/src/render/renderer.cc b/ricochet/src/render/renderer.cc
index 1af40f1..2b690ca 100644
--- a/ricochet/src/render/renderer.cc
+++ b/ricochet/src/render/renderer.cc
@@ -83,11 +83,14 @@ void render_node( const parser::DomNode& node, // NOLINT(misc-no-recursion)
const bool is_header = ( base_tag == "h1" || base_tag == "h2" || base_tag == "h3" || base_tag == "h4" );
const bool is_link = ( base_tag == "a" );
+ const bool is_list_item = ( base_tag == "li" );
if ( is_header ) {
output += "\n\n\033[1;31m";
} else if ( is_link ) {
- output += "\033[4;34m"; // 【核心修复】:必须是 output += ,绝对不能用 std::cout
+ output += "\033[4;34m";
+ } else if ( is_list_item ) {
+ output += "\n • ";
} else if ( base_tag == "p" || base_tag == "div" || is_header ) {
if ( !output.empty() && output.back() != '\n' ) {
output += "\n";
@@ -112,6 +115,17 @@ void render_node( const parser::DomNode& node, // NOLINT(misc-no-recursion)
if ( base_tag == "h1" || base_tag == "p" || base_tag == "div" ) {
output += "\n";
}
+
+ if ( base_tag == "img" ) {
+ std::size_t alt_pos = node.tag_name.find( "alt=\"" );
+ if ( alt_pos != std::string::npos ) {
+ alt_pos += 5;
+ const std::size_t alt_end = node.tag_name.find( '"', alt_pos );
+ output += " \033[90m[Image: " + node.tag_name.substr( alt_pos, alt_end - alt_pos ) + "]\033[0m ";
+ } else {
+ output += " \033[90m[IMAGE]\033[0m ";
+ }
+ }
}
} // namespace