testspace1 / app.py
myhloli's picture
Update app.py
125c4cf verified
import gradio as gr
def render_markdown(markdown_text):
"""返回markdown文本供Gradio的Markdown组件渲染"""
if not markdown_text.strip():
return "请在左侧输入Markdown文本..."
return markdown_text
# 默认示例markdown文本
default_markdown = """# Markdown编辑器演示
### 代码块示例
#### Python
```python
def hello_world():
print("Hello, World!")
for i in range(5):
print(f"Count: {i}")
return "欢迎使用Markdown编辑器"
```
#### JavaScript
```javascript
function greetUser(name) {
console.log(`Hello, ${name}!`);
const numbers = [1, 2, 3, 4, 5];
return numbers.map(n => n * 2);
}
```
#### HTML
```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>测试页面</title>
</head>
<body>
<h1 class="title">Hello World</h1>
<p id="content">这是一个测试页面</p>
</body>
</html>
```
#### CSS
```css
.title {
color: #2c3e50;
font-size: 2rem;
text-align: center;
margin-bottom: 20px;
}
#content {
background-color: #f8f9fa;
padding: 15px;
border-radius: 5px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
```
#### JSON
```json
{
"name": "测试用户",
"age": 30,
"skills": ["Python", "JavaScript", "HTML", "CSS"],
"active": true,
"projects": [
{
"name": "Gradio应用",
"status": "进行中"
}
]
}
```
#### SQL
```sql
SELECT u.name, u.email, p.title
FROM users u
LEFT JOIN projects p ON u.id = p.user_id
WHERE u.active = true
AND u.created_date >= '2024-01-01'
ORDER BY u.name ASC, p.created_date DESC;
```
#### Bash/Shell
```bash
#!/bin/bash
# 设置变量
PROJECT_DIR="/home/user/project"
LOG_FILE="$PROJECT_DIR/app.log"
# 创建目录
mkdir -p $PROJECT_DIR
# 启动应用
echo "启动应用..." > $LOG_FILE
python app.py >> $LOG_FILE 2>&1 &
# 检查进程
if pgrep -f "python app.py" > /dev/null; then
echo "应用启动成功"
else
echo "应用启动失败"
fi
```
#### Java
```java
public class HelloWorld {
private String message;
public HelloWorld(String message) {
this.message = message;
}
public void greet() {
System.out.println("Hello, " + message + "!");
}
public static void main(String[] args) {
HelloWorld app = new HelloWorld("Gradio");
app.greet();
}
}
```
#### C++
```cpp
#include <iostream>
#include <vector>
#include <string>
class Greeter {
private:
std::string name;
public:
Greeter(const std::string& n) : name(n) {}
void sayHello() const {
std::cout << "Hello, " << name << "!" << std::endl;
}
};
int main() {
std::vector<std::string> names = {"Alice", "Bob", "Charlie"};
for (const auto& name : names) {
Greeter greeter(name);
greeter.sayHello();
}
return 0;
}
```
#### C
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
char name[50];
int age;
} Person;
void print_person(Person* p) {
printf("姓名: %s, 年龄: %d\\n", p->name, p->age);
}
int main() {
Person person;
strcpy(person.name, "张三");
person.age = 25;
print_person(&person);
return 0;
}
```
#### Go
```go
package main
import (
"fmt"
"time"
)
type User struct {
Name string `json:"name"`
Age int `json:"age"`
Created time.Time `json:"created"`
}
func (u User) Greet() string {
return fmt.Sprintf("Hello, I'm %s, %d years old", u.Name, u.Age)
}
func main() {
user := User{
Name: "Go开发者",
Age: 30,
Created: time.Now(),
}
fmt.Println(user.Greet())
}
```
#### Rust
```rust
use std::collections::HashMap;
#[derive(Debug)]
struct Person {
name: String,
age: u32,
}
impl Person {
fn new(name: &str, age: u32) -> Self {
Person {
name: name.to_string(),
age,
}
}
fn greet(&self) -> String {
format!("Hello, I'm {} and I'm {} years old", self.name, self.age)
}
}
fn main() {
let mut people = HashMap::new();
let alice = Person::new("Alice", 30);
let bob = Person::new("Bob", 25);
people.insert("alice", alice);
people.insert("bob", bob);
for (key, person) in &people {
println!("{}: {}", key, person.greet());
}
}
```
#### PHP
```php
<?php
class User {
private $name;
private $email;
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}
public function getName() {
return $this->name;
}
public function getEmail() {
return $this->email;
}
public function getInfo() {
return [
'name' => $this->name,
'email' => $this->email,
'created' => date('Y-m-d H:i:s')
];
}
}
$user = new User("张三", "zhangsan@example.com");
echo "用户: " . $user->getName() . "\\n";
print_r($user->getInfo());
?>
```
#### XML
```xml
<?xml version="1.0" encoding="UTF-8"?>
<users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<user id="1" active="true">
<name>张三</name>
<email>zhangsan@example.com</email>
<profile>
<age>30</age>
<skills>
<skill level="advanced">Python</skill>
<skill level="intermediate">JavaScript</skill>
<skill level="beginner">Go</skill>
</skills>
</profile>
</user>
<user id="2" active="false">
<name>李四</name>
<email>lisi@example.com</email>
<profile>
<age>25</age>
<skills>
<skill level="expert">Java</skill>
<skill level="advanced">SQL</skill>
</skills>
</profile>
</user>
</users>
```
#### YAML
```yaml
# 应用配置文件
app:
name: "Gradio Markdown Editor"
version: "1.0.0"
debug: true
server:
host: "0.0.0.0"
port: 7860
workers: 4
database:
host: localhost
port: 5432
name: myapp
user: admin
password: secret123
pool_size: 10
features:
- markdown_preview
- syntax_highlighting
- auto_save
- themes
users:
- name: "管理员"
role: admin
permissions:
- read
- write
- delete
- name: "编辑者"
role: editor
permissions:
- read
- write
```
"""
# 创建Gradio界面
with gr.Blocks(
title="Markdown实时编辑器",
) as demo:
gr.Markdown("# 📝 Markdown实时编辑器")
gr.Markdown("在左侧输入Markdown文本,右侧会实时显示渲染效果")
with gr.Row():
with gr.Column(scale=1):
markdown_input = gr.Textbox(
label="输入Markdown文本",
placeholder="在这里输入你的Markdown内容...",
max_lines=40,
value=default_markdown,
)
with gr.Column(scale=1):
markdown_output = gr.Markdown(
label="Markdown渲染效果",
value=default_markdown,
height=800,
)
# 添加一些快捷按钮
with gr.Row():
clear_btn = gr.Button("🗑️ Clear", variant="secondary", size="sm")
example_btn = gr.Button("📄 Load Example", variant="secondary", size="sm")
# 绑定事件
markdown_input.change(
fn=render_markdown,
inputs=markdown_input,
outputs=markdown_output
)
clear_btn.click(
fn=lambda: ("", "请在左侧输入Markdown文本..."),
outputs=[markdown_input, markdown_output]
)
example_btn.click(
fn=lambda: (default_markdown, default_markdown),
outputs=[markdown_input, markdown_output]
)
if __name__ == "__main__":
demo.launch(ssr_mode=False)