代码高亮功能测试
测试代码高亮技术
代码高亮功能测试
这个页面用于测试博客系统的代码高亮功能,包含多种编程语言的代码示例。
JavaScript 示例
// JavaScript 代码示例
const greeting = "Hello, World!";
const numbers = [1, 2, 3, 4, 5];
function calculateSum(arr) {
return arr.reduce((sum, num) => sum + num, 0);
}
// 异步函数示例
async function fetchData(url) {
try {
const response = await fetch(url);
const data = await response.json();
return data;
} catch (error) {
console.error('获取数据失败:', error);
throw error;
}
}
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
introduce() {
return `我是 ${this.name},今年 ${this.age} 岁。`;
}
}
TypeScript 示例
// TypeScript 代码示例
interface User {
id: number;
name: string;
email: string;
isActive: boolean;
}
type UserWithoutId = Omit<User, 'id'>;
class UserService {
private users: User[] = [];
constructor() {
this.users = [];
}
addUser(userData: UserWithoutId): User {
const newUser: User = {
id: this.generateId(),
...userData
};
this.users.push(newUser);
return newUser;
}
private generateId(): number {
return Math.max(...this.users.map(u => u.id), 0) + 1;
}
findUserById(id: number): User | undefined {
return this.users.find(user => user.id === id);
}
}
React JSX 示例
// React 组件示例
import React, { useState, useEffect } from 'react';
interface TodoItem {
id: number;
text: string;
completed: boolean;
}
const TodoApp: React.FC = () => {
const [todos, setTodos] = useState<TodoItem[]>([]);
const [inputValue, setInputValue] = useState('');
useEffect(() => {
// 从本地存储加载数据
const savedTodos = localStorage.getItem('todos');
if (savedTodos) {
setTodos(JSON.parse(savedTodos));
}
}, []);
const addTodo = () => {
if (inputValue.trim()) {
const newTodo: TodoItem = {
id: Date.now(),
text: inputValue.trim(),
completed: false
};
const updatedTodos = [...todos, newTodo];
setTodos(updatedTodos);
localStorage.setItem('todos', JSON.stringify(updatedTodos));
setInputValue('');
}
};
return (
<div className="todo-app">
<h1>待办事项</h1>
<div className="input-section">
<input
type="text"
value={inputValue}
onChange={(e) => setInputValue(e.target.value)}
onKeyPress={(e) => e.key === 'Enter' && addTodo()}
placeholder="添加新的待办事项..."
/>
<button onClick={addTodo}>添加</button>
</div>
<ul className="todo-list">
{todos.map(todo => (
<li key={todo.id} className={todo.completed ? 'completed' : ''}>
<span>{todo.text}</span>
</li>
))}
</ul>
</div>
);
};
export default TodoApp;
Python 示例
# Python 代码示例
import asyncio
import aiohttp
from typing import List, Dict, Optional
from dataclasses import dataclass
from datetime import datetime
@dataclass
class Article:
title: str
content: str
author: str
created_at: datetime
tags: List[str]
class BlogService:
def __init__(self, base_url: str):
self.base_url = base_url
self.articles: List[Article] = []
async def fetch_articles(self) -> List[Dict]:
"""异步获取文章列表"""
async with aiohttp.ClientSession() as session:
try:
async with session.get(f"{self.base_url}/articles") as response:
if response.status == 200:
return await response.json()
else:
raise Exception(f"HTTP {response.status}")
except Exception as e:
print(f"获取文章失败: {e}")
return []
def filter_articles_by_tag(self, tag: str) -> List[Article]:
"""根据标签过滤文章"""
return [
article for article in self.articles
if tag.lower() in [t.lower() for t in article.tags]
]
def search_articles(self, keyword: str) -> List[Article]:
"""搜索文章"""
keyword = keyword.lower()
return [
article for article in self.articles
if keyword in article.title.lower() or keyword in article.content.lower()
]
# 使用示例
async def main():
blog_service = BlogService("https://api.example.com")
articles_data = await blog_service.fetch_articles()
for data in articles_data:
article = Article(
title=data['title'],
content=data['content'],
author=data['author'],
created_at=datetime.fromisoformat(data['created_at']),
tags=data.get('tags', [])
)
blog_service.articles.append(article)
# 搜索相关文章
tech_articles = blog_service.filter_articles_by_tag('技术')
print(f"找到 {len(tech_articles)} 篇技术相关文章")
if __name__ == "__main__":
asyncio.run(main())
CSS 示例
/* CSS 样式示例 */
:root {
--primary-color: #3b82f6;
--secondary-color: #64748b;
--background-color: #f8fafc;
--text-color: #1e293b;
--border-radius: 0.5rem;
--box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Inter', 'Helvetica Neue', Arial, sans-serif;
background-color: var(--background-color);
color: var(--text-color);
line-height: 1.6;
}
.container {
max-width: 1200px;
margin: 0 auto;
padding: 0 1rem;
}
.card {
background: white;
border-radius: var(--border-radius);
box-shadow: var(--box-shadow);
padding: 1.5rem;
margin-bottom: 1rem;
transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px -3px rgba(0, 0, 0, 0.1);
}
.btn {
display: inline-block;
padding: 0.75rem 1.5rem;
background-color: var(--primary-color);
color: white;
text-decoration: none;
border-radius: var(--border-radius);
border: none;
cursor: pointer;
font-size: 0.875rem;
font-weight: 500;
transition: background-color 0.2s ease-in-out;
}
.btn:hover {
background-color: #2563eb;
}
.btn--secondary {
background-color: var(--secondary-color);
}
.btn--secondary:hover {
background-color: #475569;
}
/* 响应式设计 */
@media (max-width: 768px) {
.container {
padding: 0 0.5rem;
}
.card {
padding: 1rem;
}
.btn {
width: 100%;
text-align: center;
}
}
JSON 示例
{
"name": "个人博客系统",
"version": "1.0.0",
"description": "使用 Next.js + TailwindCSS + Markdown 构建的现代化博客系统",
"main": "src/app/page.tsx",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "eslint src --ext .ts,.tsx",
"type-check": "tsc --noEmit"
},
"dependencies": {
"next": "^14.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"tailwindcss": "^3.3.0",
"gray-matter": "^4.0.3",
"remark": "^15.0.1",
"remark-html": "^16.0.1",
"react-syntax-highlighter": "^15.6.6"
},
"devDependencies": {
"@types/node": "^20.0.0",
"@types/react": "^18.0.0",
"@types/react-dom": "^18.0.0",
"typescript": "^5.0.0",
"eslint": "^8.0.0",
"eslint-config-next": "^14.0.0"
},
"keywords": [
"博客",
"Next.js",
"React",
"TailwindCSS",
"Markdown",
"TypeScript"
],
"author": {
"name": "开发者",
"email": "developer@example.com"
},
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/username/blog-system.git"
}
}
总结
这个测试页面包含了多种编程语言的代码示例:
- JavaScript - 展示基础语法、异步编程和类定义
- TypeScript - 展示类型定义、接口和泛型
- React JSX - 展示现代 React 组件和 Hook 使用
- Python - 展示异步编程、数据类和类型注解
- CSS - 展示现代 CSS 特性和响应式设计
- JSON - 展示配置文件结构
如果代码高亮功能正常工作,您应该能看到:
- 不同的颜色用于关键字、字符串、注释等
- 语言标签显示在代码块的左上角
- 复制按钮显示在代码块的右上角
- 悬停时显示交互效果
请测试复制功能和不同编程语言的语法高亮效果!