Initial commit: Oraset B-5
Build and Package Oraset / build (macos-latest) (push) Waiting to run
Build and Package Oraset / build (ubuntu-latest) (push) Waiting to run
Build and Package Oraset / build (windows-latest) (push) Waiting to run
Build and Package Oraset / release (push) Blocked by required conditions
Build and Package Oraset / build (macos-latest) (push) Waiting to run
Build and Package Oraset / build (ubuntu-latest) (push) Waiting to run
Build and Package Oraset / build (windows-latest) (push) Waiting to run
Build and Package Oraset / release (push) Blocked by required conditions
This commit is contained in:
Vendored
BIN
Binary file not shown.
@@ -0,0 +1,174 @@
|
||||
body {
|
||||
font-family: Georgia, "Times New Roman", serif;
|
||||
font-size: 14px;
|
||||
line-height: 1.5;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
background: #fff;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.layout {
|
||||
display: flex;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
width: 160px;
|
||||
background: #f4f4f4;
|
||||
border-right: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
flex-shrink: 0;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.sidebar-section {
|
||||
margin-bottom: 15px;
|
||||
border: 1px solid #aaa;
|
||||
background: #e0e0e0;
|
||||
}
|
||||
|
||||
.sidebar-section-title {
|
||||
background: #c8c8c8;
|
||||
padding: 4px 8px;
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
|
||||
.sidebar ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.sidebar li {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.sidebar a {
|
||||
display: block;
|
||||
padding: 3px 8px;
|
||||
color: #0000ee;
|
||||
text-decoration: underline;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.sidebar a:hover {
|
||||
background: #d0d0d0;
|
||||
color: #0000ee;
|
||||
}
|
||||
|
||||
.sidebar a.active {
|
||||
background: #b0b0b0;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.main {
|
||||
flex: 1;
|
||||
padding: 15px 30px;
|
||||
max-width: 1000px;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #0000ee;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: #0000ee;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
margin-top: 0;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 5px;
|
||||
border-bottom: 2px solid #ccc;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
margin-top: 25px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding-left: 25px;
|
||||
}
|
||||
|
||||
li {
|
||||
margin: 3px 0;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: none;
|
||||
border-top: 1px solid #ccc;
|
||||
margin: 25px 0;
|
||||
}
|
||||
|
||||
code {
|
||||
background: #f4f4f4;
|
||||
padding: 1px 4px;
|
||||
font-family: "Courier New", monospace;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #f4f4f4;
|
||||
border: 1px solid #ccc;
|
||||
padding: 10px;
|
||||
overflow-x: auto;
|
||||
font-family: "Courier New", monospace;
|
||||
font-size: 13px;
|
||||
line-height: 1.4;
|
||||
margin: 10px 0;
|
||||
}
|
||||
|
||||
.version-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.version-list li {
|
||||
padding: 8px 0;
|
||||
}
|
||||
|
||||
.version-list .version-number {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
.version-list .version-date {
|
||||
color: #666;
|
||||
font-size: 12px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.version-list .version-desc {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.version-list .version-desc ul {
|
||||
padding-left: 20px;
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
.version-list .version-desc ul li {
|
||||
padding: 2px 0;
|
||||
border: none;
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
// 简化版文档列表 API
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
|
||||
// 禁用缓存
|
||||
header('Cache-Control: no-cache, no-store, must-revalidate');
|
||||
header('Pragma: no-cache');
|
||||
header('Expires: 0');
|
||||
|
||||
$md_dir = dirname(__FILE__) . '/md';
|
||||
$version_file = dirname(dirname(__FILE__)) . '/download/version.txt';
|
||||
|
||||
// 获取版本号
|
||||
$current_version = '4.0.1-BetaN(+AU)';
|
||||
if (file_exists($version_file)) {
|
||||
$current_version = trim(file_get_contents($version_file));
|
||||
}
|
||||
|
||||
// 获取所有 md 文件
|
||||
$articles = array();
|
||||
|
||||
if (is_dir($md_dir)) {
|
||||
$files = glob($md_dir . '/*.md');
|
||||
if ($files !== false) {
|
||||
foreach ($files as $file) {
|
||||
$name = basename($file, '.md');
|
||||
$content = @file_get_contents($file);
|
||||
|
||||
$title = $name;
|
||||
if ($content && preg_match('/^# (.+)$/m', $content, $matches)) {
|
||||
$title = $matches[1];
|
||||
}
|
||||
|
||||
$articles[] = array(
|
||||
'name' => $name,
|
||||
'title' => $title,
|
||||
'desc' => ''
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 输出 JSON
|
||||
echo json_encode(array(
|
||||
'version' => $current_version,
|
||||
'articles' => $articles
|
||||
));
|
||||
?>
|
||||
@@ -0,0 +1,377 @@
|
||||
<?php
|
||||
/**
|
||||
* Oraset 文档系统
|
||||
* 自动识别 md 文件夹下的 md 文件并显示
|
||||
* 支持 HTML 和 Markdown 语法
|
||||
*
|
||||
* 使用方式:
|
||||
* index.php - 显示第一个可用文档
|
||||
* index.php?doc=name - 显示指定文档
|
||||
* index.php?list - 列出所有文档
|
||||
* index.php?list-api - 输出 JSON 格式的文档列表
|
||||
*/
|
||||
|
||||
// 配置
|
||||
$md_dir = __DIR__ . '/md';
|
||||
$css_path = '../css/style.css';
|
||||
$version_file = dirname(__DIR__) . '/download/version.txt';
|
||||
|
||||
// 获取版本号
|
||||
function get_version($version_file) {
|
||||
if (file_exists($version_file)) {
|
||||
return trim(file_get_contents($version_file));
|
||||
}
|
||||
return '4.0.1-BetaN(+AU)';
|
||||
}
|
||||
|
||||
$current_version = get_version($version_file);
|
||||
|
||||
// 获取所有 md 文件列表
|
||||
function get_articles_list($md_dir) {
|
||||
$articles = [];
|
||||
$files = glob($md_dir . '/*.md');
|
||||
|
||||
foreach ($files as $file) {
|
||||
$name = basename($file, '.md');
|
||||
$content = file_get_contents($file);
|
||||
|
||||
// 提取标题
|
||||
$title = $name;
|
||||
if (preg_match('/^# (.+)$/m', $content, $matches)) {
|
||||
$title = $matches[1];
|
||||
}
|
||||
|
||||
// 提取描述(第一段非标题、非代码块、非列表的内容)
|
||||
$desc = '';
|
||||
$lines = explode("\n", $content);
|
||||
$in_code = false;
|
||||
foreach ($lines as $line) {
|
||||
$trimmed = trim($line);
|
||||
|
||||
// 跳过代码块
|
||||
if (strpos($trimmed, '```') !== false) {
|
||||
$in_code = !$in_code;
|
||||
continue;
|
||||
}
|
||||
if ($in_code) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 跳过空行、标题、列表、太短的行
|
||||
if ($trimmed === '' ||
|
||||
preg_match('/^#/', $trimmed) ||
|
||||
preg_match('/^-/', $trimmed) ||
|
||||
strlen($trimmed) < 10) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 找到第一个有效描述,去除Markdown语法
|
||||
$desc = $trimmed;
|
||||
// 去除链接语法
|
||||
$desc = preg_replace('/\[([^\]]+)\]\([^)]+\)/', '$1', $desc);
|
||||
// 去除粗体/斜体
|
||||
$desc = preg_replace('/\*+([^*]+)\*+/', '$1', $desc);
|
||||
// 去除行内代码
|
||||
$desc = preg_replace('/`([^`]+)`/', '$1', $desc);
|
||||
|
||||
if (strlen($desc) > 100) {
|
||||
$desc = substr($desc, 0, 100) . '...';
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
$articles[] = [
|
||||
'name' => $name,
|
||||
'title' => $title,
|
||||
'desc' => $desc,
|
||||
'file' => $file
|
||||
];
|
||||
}
|
||||
|
||||
return $articles;
|
||||
}
|
||||
|
||||
// JSON API 模式
|
||||
if (isset($_GET['list-api'])) {
|
||||
header('Content-Type: application/json; charset=utf-8');
|
||||
$articles = get_articles_list($md_dir);
|
||||
echo json_encode([
|
||||
'version' => $current_version,
|
||||
'articles' => $articles
|
||||
], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Markdown 解析函数(改进版)
|
||||
function parse_markdown($text, $version) {
|
||||
// 替换版本号占位符
|
||||
$text = str_replace('{{VERSION}}', $version, $text);
|
||||
|
||||
// 处理代码块(先处理,避免被其他规则干扰)
|
||||
$text = preg_replace_callback('/```(\w*)\n(.*?)```/s', function($m) {
|
||||
$lang = $m[1] ? ' class="language-' . htmlspecialchars($m[1]) . '"' : '';
|
||||
return '<pre><code' . $lang . '>' . htmlspecialchars($m[2]) . '</code></pre>';
|
||||
}, $text);
|
||||
|
||||
// 处理行内代码
|
||||
$text = preg_replace('/`([^`]+)`/', '<code>$1</code>', $text);
|
||||
|
||||
// 处理标题
|
||||
$text = preg_replace('/^### (.+)$/m', '<h3>$1</h3>', $text);
|
||||
$text = preg_replace('/^## (.+)$/m', '<h2>$1</h2>', $text);
|
||||
$text = preg_replace('/^# (.+)$/m', '<h1>$1</h1>', $text);
|
||||
|
||||
// 处理粗体和斜体
|
||||
$text = preg_replace('/\*\*([^*]+)\*\*/', '<strong>$1</strong>', $text);
|
||||
$text = preg_replace('/\*([^*]+)\*/', '<em>$1</em>', $text);
|
||||
|
||||
// 处理链接(支持 URL 中包含括号)
|
||||
$text = preg_replace_callback('/\[([^\]]+)\]\(\s*([^)]*(?:\([^)]*\)[^)]*)*)\s*\)/', function($m) {
|
||||
$link_text = $m[1];
|
||||
$url = trim($m[2]);
|
||||
return '<a href="' . htmlspecialchars($url, ENT_QUOTES, 'UTF-8') . '">' . $link_text . '</a>';
|
||||
}, $text);
|
||||
|
||||
// 处理分隔线
|
||||
$text = preg_replace('/^---$/m', '<hr>', $text);
|
||||
|
||||
// 处理无序列表
|
||||
$lines = explode("\n", $text);
|
||||
$result = [];
|
||||
$in_list = false;
|
||||
$in_code = false;
|
||||
$in_paragraph = false;
|
||||
|
||||
foreach ($lines as $line) {
|
||||
$trimmed = trim($line);
|
||||
|
||||
// 检查是否在代码块中
|
||||
if (strpos($trimmed, '<pre>') !== false) {
|
||||
$in_code = true;
|
||||
}
|
||||
if (strpos($trimmed, '</pre>') !== false) {
|
||||
$in_code = false;
|
||||
}
|
||||
|
||||
if ($in_code) {
|
||||
$result[] = $line;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 处理列表项
|
||||
if (preg_match('/^- (.+)$/', $trimmed, $m)) {
|
||||
if (!$in_list) {
|
||||
$result[] = '<ul>';
|
||||
$in_list = true;
|
||||
}
|
||||
$result[] = '<li>' . $m[1] . '</li>';
|
||||
continue;
|
||||
}
|
||||
|
||||
// 结束列表
|
||||
if ($in_list && !preg_match('/^-/', $trimmed)) {
|
||||
$result[] = '</ul>';
|
||||
$in_list = false;
|
||||
}
|
||||
|
||||
// 处理块元素(标题、hr、pre等)
|
||||
if (preg_match('/^<(h[1-6]|hr|pre|ul|li)/', $trimmed) || $trimmed === '') {
|
||||
if ($in_paragraph) {
|
||||
$result[] = '</p>';
|
||||
$in_paragraph = false;
|
||||
}
|
||||
$result[] = $line;
|
||||
continue;
|
||||
}
|
||||
|
||||
// 处理段落
|
||||
if (!$in_paragraph && $trimmed !== '') {
|
||||
$result[] = '<p>' . $trimmed;
|
||||
$in_paragraph = true;
|
||||
} else if ($in_paragraph && $trimmed !== '') {
|
||||
$result[] = $trimmed;
|
||||
}
|
||||
}
|
||||
|
||||
// 结束未闭合的标签
|
||||
if ($in_list) {
|
||||
$result[] = '</ul>';
|
||||
}
|
||||
if ($in_paragraph) {
|
||||
$result[] = '</p>';
|
||||
}
|
||||
|
||||
return implode("\n", $result);
|
||||
}
|
||||
|
||||
// 获取文章列表
|
||||
$articles = get_articles_list($md_dir);
|
||||
|
||||
// 判断是否显示列表模式
|
||||
$show_list = isset($_GET['list']);
|
||||
|
||||
// 获取请求的文档
|
||||
$doc = isset($_GET['doc']) ? $_GET['doc'] : '';
|
||||
|
||||
// 安全处理:只允许字母、数字、下划线、连字符
|
||||
$doc = preg_replace('/[^a-zA-Z0-9_-]/', '', $doc);
|
||||
|
||||
// 文件路径
|
||||
$file_path = '';
|
||||
if ($doc !== '') {
|
||||
$file_path = $md_dir . '/' . $doc . '.md';
|
||||
}
|
||||
|
||||
// 如果文件不存在,显示第一个可用文档
|
||||
if ($file_path === '' || !file_exists($file_path)) {
|
||||
if (count($articles) > 0) {
|
||||
$file_path = $articles[0]['file'];
|
||||
$doc = $articles[0]['name'];
|
||||
} else {
|
||||
// 没有文档时显示默认页面
|
||||
$html_content = '<h1>Oraset 文档</h1><p>暂无文档。</p>';
|
||||
$title = 'Oraset 文档';
|
||||
$doc = '';
|
||||
}
|
||||
}
|
||||
|
||||
// 读取文档内容
|
||||
if ($file_path !== '' && file_exists($file_path)) {
|
||||
$content = file_get_contents($file_path);
|
||||
|
||||
// 先执行 PHP 代码
|
||||
ob_start();
|
||||
eval('?>' . $content . '<?php ');
|
||||
$content = ob_get_clean();
|
||||
|
||||
// 替换版本号占位符 {{VERSION}}
|
||||
$content = str_replace('{{VERSION}}', $current_version, $content);
|
||||
|
||||
$html_content = parse_markdown($content, $current_version);
|
||||
|
||||
// 提取当前文档标题
|
||||
$title = 'Oraset 文档';
|
||||
if (preg_match('/^# (.+)$/m', $content, $matches)) {
|
||||
$title = $matches[1] . ' - Oraset';
|
||||
}
|
||||
}
|
||||
|
||||
// 如果是列表模式,生成列表 HTML
|
||||
if ($show_list) {
|
||||
$title = '文档列表 - Oraset';
|
||||
$list_html = "<h1>文档列表</h1>\n<p>以下是所有可用的文档:</p>\n<ul class=\"doc-list\">";
|
||||
foreach ($articles as $art) {
|
||||
$list_html .= '<li>';
|
||||
$list_html .= '<a href="?doc=' . htmlspecialchars($art['name']) . '">' . htmlspecialchars($art['title']) . '</a>';
|
||||
if ($art['desc']) {
|
||||
$list_html .= '<br><span class="doc-desc">' . htmlspecialchars($art['desc']) . '</span>';
|
||||
}
|
||||
$list_html .= '</li>';
|
||||
}
|
||||
$list_html .= '</ul>';
|
||||
$html_content = $list_html;
|
||||
}
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo htmlspecialchars($title); ?></title>
|
||||
<link rel="stylesheet" href="<?php echo $css_path; ?>">
|
||||
<style>
|
||||
/* 文档系统额外样式 */
|
||||
.doc-list {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
}
|
||||
.doc-list li {
|
||||
padding: 12px 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
.doc-list a {
|
||||
font-size: 16px;
|
||||
color: #0000ee;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.doc-desc {
|
||||
color: #666;
|
||||
font-size: 13px;
|
||||
margin-top: 4px;
|
||||
display: block;
|
||||
}
|
||||
.sidebar-loading {
|
||||
color: #999;
|
||||
font-style: italic;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="layout">
|
||||
<nav class="sidebar">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">Oraset</div>
|
||||
<ul>
|
||||
<li><a href="../index.php">首页</a></li>
|
||||
<li><a href="../download.php">下载</a></li>
|
||||
<li><a href="../releases.php">历史版本</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">文档</div>
|
||||
<ul>
|
||||
<li><a href="?list" id="nav-list"<?php echo $show_list ? ' class="active"' : ''; ?>>文档列表</a></li>
|
||||
</ul>
|
||||
<ul id="doc-nav-list">
|
||||
<li><span class="sidebar-loading">加载中...</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="main">
|
||||
<?php echo $html_content; ?>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 获取当前文档名
|
||||
var currentDoc = '<?php echo htmlspecialchars($doc); ?>';
|
||||
var showList = <?php echo $show_list ? 'true' : 'false'; ?>;
|
||||
|
||||
// 加载文档列表
|
||||
fetch('./api.php')
|
||||
.then(function(response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(function(data) {
|
||||
var navList = document.getElementById('doc-nav-list');
|
||||
navList.innerHTML = '';
|
||||
|
||||
if (data.articles && data.articles.length > 0) {
|
||||
data.articles.forEach(function(article) {
|
||||
var li = document.createElement('li');
|
||||
var a = document.createElement('a');
|
||||
a.href = './?doc=' + article.name;
|
||||
a.textContent = article.title;
|
||||
|
||||
if (!showList && article.name === currentDoc) {
|
||||
a.className = 'active';
|
||||
}
|
||||
|
||||
li.appendChild(a);
|
||||
navList.appendChild(li);
|
||||
});
|
||||
} else {
|
||||
navList.innerHTML = '<li><span class="sidebar-loading">暂无文档</span></li>';
|
||||
}
|
||||
})
|
||||
.catch(function(error) {
|
||||
console.error('Error loading document list:', error);
|
||||
document.getElementById('doc-nav-list').innerHTML = '<li><span class="sidebar-loading">加载失败</span></li>';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,99 @@
|
||||
# 入门指南
|
||||
|
||||
本指南将帮助您快速安装和配置 Oraset 编程语言 B-5 版本环境,并运行您的第一个程序。
|
||||
|
||||
## 安装 Oraset
|
||||
|
||||
### macOS
|
||||
|
||||
```bash
|
||||
curl https://oraset.parlz.com/download/sh/install.sh | bash
|
||||
```
|
||||
|
||||
### Linux
|
||||
|
||||
```bash
|
||||
curl https://oraset.parlz.com/download/sh/install-linux.sh | bash
|
||||
```
|
||||
|
||||
或手动下载 <a href="https://oraset.parlz.com/download/deb/Oraset-B5.deb" download="oraset.deb" >oraset.deb</a>,然后运行:
|
||||
```bash
|
||||
sudo dpkg -i oraset.deb
|
||||
```
|
||||
|
||||
### Windows
|
||||
|
||||
下载 <a href="https://oraset.parlz.com/download/exe/Oraset-B5.exe" download="oraset.exe" >oraset.exe</a> 并添加到系统 PATH。
|
||||
|
||||
## 验证安装
|
||||
|
||||
```bash
|
||||
oraset -v
|
||||
```
|
||||
|
||||
应该显示:"B-5"
|
||||
|
||||
## 运行第一个程序
|
||||
|
||||
### 步骤 1:创建脚本文件
|
||||
|
||||
创建一个名为 `hello.ora` 的文件,内容如下:
|
||||
|
||||
```oraset
|
||||
print("Hello, World!");
|
||||
```
|
||||
|
||||
### 步骤 2:运行脚本
|
||||
|
||||
```bash
|
||||
oraset hello.ora
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
Hello, World!
|
||||
```
|
||||
|
||||
## 交互模式
|
||||
|
||||
Oraset B-5 支持 REPL 交互模式:
|
||||
|
||||
```bash
|
||||
oraset -i
|
||||
```
|
||||
|
||||
或
|
||||
|
||||
```bash
|
||||
oraset --interactive
|
||||
```
|
||||
|
||||
进入交互模式后,您可以直接输入代码并立即看到结果:
|
||||
|
||||
```
|
||||
Oraset B-5 REPL
|
||||
Type 'exit' or 'quit' to exit.
|
||||
> var x = 10
|
||||
> print(x)
|
||||
10
|
||||
> exit
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: 命令找不到?
|
||||
|
||||
A: 确保 oraset 已添加到系统 PATH,并重新打开终端。
|
||||
|
||||
### Q: 如何退出交互模式?
|
||||
|
||||
A: 输入 `exit` 或 `quit` 即可退出。
|
||||
|
||||
### Q: 脚本执行完成后自动退出?
|
||||
|
||||
A: 是的,脚本执行完成后自动退出,无需手动操作。
|
||||
|
||||
---
|
||||
|
||||
Oraset Project © 2026
|
||||
@@ -0,0 +1,212 @@
|
||||
# 语言参考
|
||||
|
||||
Oraset 编程语言 B-5 版本的完整语法参考文档,包含变量、数据类型、运算符和控制流等核心特性。
|
||||
|
||||
## 变量
|
||||
|
||||
### 声明变量
|
||||
|
||||
```oraset
|
||||
var x = 10;
|
||||
var name = "test";
|
||||
var pi = 3.14;
|
||||
var flag;
|
||||
```
|
||||
|
||||
### 修改变量
|
||||
|
||||
```oraset
|
||||
x = 20;
|
||||
name = "new name";
|
||||
```
|
||||
|
||||
### 复合赋值
|
||||
|
||||
```oraset
|
||||
x += 5;
|
||||
x -= 3;
|
||||
x *= 2;
|
||||
x /= 2;
|
||||
x %= 3;
|
||||
```
|
||||
|
||||
### 自增自减
|
||||
|
||||
```oraset
|
||||
x++;
|
||||
x--;
|
||||
```
|
||||
|
||||
## 数据类型
|
||||
|
||||
- **数字**:整数和浮点数,如 `42`、`3.14`
|
||||
- **字符串**:用双引号或单引号包围,如 `"Hello"`、`'World'`
|
||||
- **数组**:用方括号定义,如 `[1, 2, 3]`
|
||||
|
||||
## 数组
|
||||
|
||||
### 创建数组
|
||||
|
||||
```oraset
|
||||
var arr = [10, 20, 30, 40, 50];
|
||||
var empty = array(5);
|
||||
```
|
||||
|
||||
### 访问数组元素
|
||||
|
||||
```oraset
|
||||
print(arr[0]);
|
||||
arr[2] = 35;
|
||||
```
|
||||
|
||||
### 数组长度
|
||||
|
||||
```oraset
|
||||
var len = arrlen(arr);
|
||||
```
|
||||
|
||||
## 运算符
|
||||
|
||||
### 算术运算符
|
||||
|
||||
```oraset
|
||||
+ // 加法
|
||||
- // 减法
|
||||
* // 乘法
|
||||
/ // 除法
|
||||
% // 取模
|
||||
```
|
||||
|
||||
### 比较运算符
|
||||
|
||||
```oraset
|
||||
== // 等于
|
||||
!= // 不等于
|
||||
> // 大于
|
||||
< // 小于
|
||||
>= // 大于等于
|
||||
<= // 小于等于
|
||||
```
|
||||
|
||||
### 逻辑运算符
|
||||
|
||||
```oraset
|
||||
&& // 逻辑与
|
||||
|| // 逻辑或
|
||||
! // 逻辑非
|
||||
```
|
||||
|
||||
## 输出
|
||||
|
||||
### print 函数
|
||||
|
||||
```oraset
|
||||
print("Hello"); // 输出并换行
|
||||
print("No newline", "nel"); // 输出不换行
|
||||
print("A", "B", 123); // 多个参数用空格分隔
|
||||
print(arr); // 打印数组
|
||||
```
|
||||
|
||||
## 控制流
|
||||
|
||||
### 条件语句
|
||||
|
||||
```oraset
|
||||
if (x > 10) {
|
||||
print("x is big");
|
||||
} else {
|
||||
print("x is small");
|
||||
}
|
||||
```
|
||||
|
||||
### 循环语句
|
||||
|
||||
```oraset
|
||||
while (x < 100) {
|
||||
print(x);
|
||||
x++;
|
||||
}
|
||||
|
||||
for (var i = 0; i < 10; i++) {
|
||||
print(i);
|
||||
}
|
||||
```
|
||||
|
||||
### 函数定义
|
||||
|
||||
```oraset
|
||||
function add(a, b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
add(5, 3);
|
||||
```
|
||||
|
||||
## 内置函数
|
||||
|
||||
### 数学函数
|
||||
|
||||
```oraset
|
||||
abs(x) // 绝对值
|
||||
sqrt(x) // 平方根
|
||||
sin(x) // 正弦
|
||||
cos(x) // 余弦
|
||||
tan(x) // 正切
|
||||
pow(x, y) // x的y次方
|
||||
log(x) // 自然对数
|
||||
floor(x) // 向下取整
|
||||
ceil(x) // 向上取整
|
||||
round(x) // 四舍五入
|
||||
int(x) // 转为整数
|
||||
float(x) // 转为浮点数
|
||||
rand() // 0-1随机数
|
||||
rand(n) // 0-n随机数
|
||||
time() // 当前时间戳
|
||||
```
|
||||
|
||||
### 字符串函数
|
||||
|
||||
```oraset
|
||||
len(str) // 字符串长度
|
||||
num(str) // 字符串转数字
|
||||
str(num) // 数字转字符串
|
||||
```
|
||||
|
||||
### 数组函数
|
||||
|
||||
```oraset
|
||||
array(size) // 创建指定大小的数组
|
||||
arrlen(arr) // 获取数组长度
|
||||
```
|
||||
|
||||
### 输入函数
|
||||
|
||||
```oraset
|
||||
input() // 读取用户输入
|
||||
input("提示:") // 带提示的输入
|
||||
```
|
||||
|
||||
## 文件配置
|
||||
|
||||
### sg 语法
|
||||
|
||||
```oraset
|
||||
sg<nel>
|
||||
print("All lines no newline");
|
||||
print("Still same line");
|
||||
```
|
||||
|
||||
`sg<nel>` 设置整个文件的 print 默认不换行。
|
||||
|
||||
## 注释
|
||||
|
||||
```oraset
|
||||
# 单行注释
|
||||
// 单行注释
|
||||
/* 多行
|
||||
注释 */
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Oraset Project © 2026
|
||||
@@ -0,0 +1,133 @@
|
||||
# 贪吃蛇游戏
|
||||
|
||||
这是一个用 Oraset B-5 编写的控制台贪吃蛇游戏!
|
||||
|
||||
## 游戏说明
|
||||
|
||||
使用方向键控制蛇的移动方向,吃食物得分。
|
||||
|
||||
## 运行方法
|
||||
|
||||
```bash
|
||||
oraset examples/snake.ora
|
||||
```
|
||||
|
||||
## 代码
|
||||
|
||||
```oraset
|
||||
// snake.ora - 贪吃蛇游戏
|
||||
// 使用 w/a/s/d 或方向键控制
|
||||
// Oraset B-5 版本 - 使用数组存储蛇的位置
|
||||
|
||||
var width = 40;
|
||||
var height = 20;
|
||||
var speed = 150;
|
||||
var game_over = 0;
|
||||
var score = 0;
|
||||
|
||||
var snake_x = [10, 9, 8];
|
||||
var snake_y = [10, 10, 10];
|
||||
var snake_len = 3;
|
||||
|
||||
var food_x = 25;
|
||||
var food_y = 10;
|
||||
|
||||
var direction = 1;
|
||||
var next_direction = 1;
|
||||
|
||||
function generate_food() {
|
||||
food_x = int(rand() * (width - 4)) + 2;
|
||||
food_y = int(rand() * (height - 4)) + 2;
|
||||
}
|
||||
|
||||
generate_food();
|
||||
|
||||
while (game_over == 0) {
|
||||
direction = next_direction;
|
||||
|
||||
var new_head_x = snake_x[0];
|
||||
var new_head_y = snake_y[0];
|
||||
|
||||
if (direction == 0) new_head_y--;
|
||||
if (direction == 1) new_head_x++;
|
||||
if (direction == 2) new_head_y++;
|
||||
if (direction == 3) new_head_x--;
|
||||
|
||||
if (new_head_x <= 0 || new_head_x >= width - 1 ||
|
||||
new_head_y <= 0 || new_head_y >= height - 1) {
|
||||
game_over = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
var i = 0;
|
||||
while (i < snake_len) {
|
||||
if (new_head_x == snake_x[i] && new_head_y == snake_y[i]) {
|
||||
game_over = 1;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
if (game_over == 1) break;
|
||||
|
||||
if (new_head_x == food_x && new_head_y == food_y) {
|
||||
score++;
|
||||
snake_len++;
|
||||
generate_food();
|
||||
}
|
||||
|
||||
i = snake_len - 1;
|
||||
while (i > 0) {
|
||||
snake_x[i] = snake_x[i - 1];
|
||||
snake_y[i] = snake_y[i - 1];
|
||||
i--;
|
||||
}
|
||||
|
||||
snake_x[0] = new_head_x;
|
||||
snake_y[0] = new_head_y;
|
||||
|
||||
var y = 0;
|
||||
while (y < height) {
|
||||
var x = 0;
|
||||
while (x < width) {
|
||||
var is_snake = 0;
|
||||
var is_food = 0;
|
||||
|
||||
i = 0;
|
||||
while (i < snake_len) {
|
||||
if (x == snake_x[i] && y == snake_y[i]) {
|
||||
is_snake = 1;
|
||||
break;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if (x == food_x && y == food_y) {
|
||||
is_food = 1;
|
||||
}
|
||||
|
||||
if (is_snake == 1) {
|
||||
print("O", "nel");
|
||||
} else if (is_food == 1) {
|
||||
print("*", "nel");
|
||||
} else if (x == 0 || x == width - 1 || y == 0 || y == height - 1) {
|
||||
print("-", "nel");
|
||||
} else {
|
||||
print(" ", "nel");
|
||||
}
|
||||
x++;
|
||||
}
|
||||
print("");
|
||||
y++;
|
||||
}
|
||||
|
||||
print("分数:", score, " | 长度:", snake_len);
|
||||
print("w=上 a=左 s=下 d=右");
|
||||
}
|
||||
|
||||
print("游戏结束! 最终分数:", score);
|
||||
```
|
||||
|
||||
## 注意事项
|
||||
|
||||
这个版本使用了 Oraset B-5 的数组功能,代码更加简洁高效。
|
||||
蛇的身体现在存储在数组中,可以无限增长。
|
||||
@@ -0,0 +1,220 @@
|
||||
# 教程
|
||||
|
||||
通过实际示例学习 Oraset 编程语言 B-5 版本,从基础输出到循环和条件判断。
|
||||
|
||||
## 示例 1:基本输出
|
||||
|
||||
```oraset
|
||||
// hello.ora
|
||||
print("Welcome to Oraset B-5!");
|
||||
print("This is my first program.");
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
Welcome to Oraset B-5!
|
||||
This is my first program.
|
||||
```
|
||||
|
||||
## 示例 2:变量和计算
|
||||
|
||||
```oraset
|
||||
// calc.ora
|
||||
var a = 10;
|
||||
var b = 20;
|
||||
var sum = a + b;
|
||||
print("The sum is:", sum);
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
The sum is: 30
|
||||
```
|
||||
|
||||
## 示例 3:条件判断
|
||||
|
||||
```oraset
|
||||
// grade.ora
|
||||
var score = 85;
|
||||
if (score >= 60) {
|
||||
print("Pass!");
|
||||
} else {
|
||||
print("Fail!");
|
||||
}
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
Pass!
|
||||
```
|
||||
|
||||
## 示例 4:循环
|
||||
|
||||
```oraset
|
||||
// loop.ora
|
||||
var i = 1;
|
||||
while (i <= 5) {
|
||||
print("Count:", i);
|
||||
i++;
|
||||
}
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
Count: 1
|
||||
Count: 2
|
||||
Count: 3
|
||||
Count: 4
|
||||
Count: 5
|
||||
```
|
||||
|
||||
## 示例 5:不换行输出
|
||||
|
||||
```oraset
|
||||
// inline.ora
|
||||
print("Loading", "nel");
|
||||
print(".");
|
||||
print(".");
|
||||
print(" Done!");
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
Loading...
|
||||
Done!
|
||||
```
|
||||
|
||||
## 示例 6:文件级配置
|
||||
|
||||
```oraset
|
||||
// no_newline.ora
|
||||
sg<nel>
|
||||
print("All");
|
||||
print("on");
|
||||
print("same");
|
||||
print("line");
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
Allonsameline
|
||||
```
|
||||
|
||||
## 示例 7:数组
|
||||
|
||||
```oraset
|
||||
// array.ora
|
||||
var arr = [10, 20, 30, 40, 50];
|
||||
print("Array:", arr);
|
||||
print("First element:", arr[0]);
|
||||
print("Array length:", arrlen(arr));
|
||||
|
||||
arr[2] = 35;
|
||||
print("Modified array:", arr);
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
Array: [10, 20, 30, 40, 50]
|
||||
First element: 10
|
||||
Array length: 5
|
||||
Modified array: [10, 20, 35, 40, 50]
|
||||
```
|
||||
|
||||
## 示例 8:复合赋值
|
||||
|
||||
```oraset
|
||||
// compound.ora
|
||||
var x = 10;
|
||||
x += 5;
|
||||
print("x += 5:", x);
|
||||
x *= 2;
|
||||
print("x *= 2:", x);
|
||||
x -= 3;
|
||||
print("x -= 3:", x);
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
x += 5: 15
|
||||
x *= 2: 30
|
||||
x -= 3: 27
|
||||
```
|
||||
|
||||
## 示例 9:函数
|
||||
|
||||
```oraset
|
||||
// function.ora
|
||||
function add(a, b) {
|
||||
return a + b;
|
||||
}
|
||||
|
||||
function multiply(a, b) {
|
||||
return a * b;
|
||||
}
|
||||
|
||||
var result = add(5, 3);
|
||||
print("5 + 3 =", result);
|
||||
|
||||
result = multiply(4, 6);
|
||||
print("4 * 6 =", result);
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
5 + 3 = 8
|
||||
4 * 6 = 24
|
||||
```
|
||||
|
||||
## 示例 10:数学函数
|
||||
|
||||
```oraset
|
||||
// math.ora
|
||||
var pi = 3.14159;
|
||||
print("sin(pi/2) =", sin(pi/2));
|
||||
print("sqrt(16) =", sqrt(16));
|
||||
print("abs(-42) =", abs(-42));
|
||||
print("pow(2, 8) =", pow(2, 8));
|
||||
print("rand() =", rand());
|
||||
```
|
||||
|
||||
输出:
|
||||
|
||||
```
|
||||
sin(pi/2) = 1
|
||||
sqrt(16) = 4
|
||||
abs(-42) = 42
|
||||
pow(2, 8) = 256
|
||||
rand() = 0.123456
|
||||
```
|
||||
|
||||
## 练习题
|
||||
|
||||
### 练习 1
|
||||
|
||||
编写一个程序,计算 1 到 10 的和。
|
||||
|
||||
### 练习 2
|
||||
|
||||
编写一个程序,判断一个数是奇数还是偶数。
|
||||
|
||||
### 练习 3
|
||||
|
||||
编写一个程序,输出 99 乘法表的一行。
|
||||
|
||||
### 练习 4
|
||||
|
||||
编写一个程序,使用数组存储 5 个数字,然后计算它们的平均值。
|
||||
|
||||
---
|
||||
|
||||
Oraset Project © 2026
|
||||
@@ -0,0 +1,115 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>下载 Oraset</title>
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="layout">
|
||||
<nav class="sidebar">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">Oraset</div>
|
||||
<ul>
|
||||
<li><a href="index.php">首页</a></li>
|
||||
<li><a href="download.php" class="active">下载</a></li>
|
||||
<li><a href="releases.php">历史版本</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">文档</div>
|
||||
<ul>
|
||||
<li><a href="docs/index.php?list">文档列表</a></li>
|
||||
</ul>
|
||||
<ul id="doc-nav-list">
|
||||
<li><span class="sidebar-loading">加载中...</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="main">
|
||||
<h1>下载</h1>
|
||||
|
||||
<h2>最新版本:B-5</h2>
|
||||
<p class="version-note">构建日期: 2026.7.22 | 全新升级版本</p>
|
||||
|
||||
<h2>源码下载</h2>
|
||||
<p>如果您想从源码编译 Oraset:</p>
|
||||
<ul>
|
||||
<li><a href="download/source/Oraset-B5-source.tar.gz">Oraset-B5-source.tar.gz</a></li>
|
||||
</ul>
|
||||
<p>编译方法:</p>
|
||||
<pre>make</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>macOS <span class="version-badge">B-5</span></h2>
|
||||
<p><strong>PKG 安装包</strong></p>
|
||||
<ul>
|
||||
<li><a href="download/pkg/Oraset-B5.pkg">Oraset-B5.pkg</a></li>
|
||||
</ul>
|
||||
<pre>wget https://oraset.parlz.com/download/pkg/Oraset-B5.pkg
|
||||
sudo installer -pkg Oraset-B5.pkg -target /</pre>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>历史版本</h2>
|
||||
<ul>
|
||||
<li><strong>Re+4.0.1-BetaN(+AU)</strong> - 2026.6.12 新增自动更新功能
|
||||
<br><a href="download/source/Oraset-Re+4.0.1-BetaN(+AU)-source.tar.gz">源码下载</a>
|
||||
</li>
|
||||
<li><strong>Re+4.0.1-Beta</strong> - 2026.6.12 测试版本
|
||||
<br><a href="download/source/Oraset-Re+4.0.1-Beta(..26:.6:12)-source.tar.gz">源码下载</a>
|
||||
</li>
|
||||
<li><strong>Re+4.0.0-Release</strong> - 2026年早期稳定版本
|
||||
<br><a href="download/source/Oraset-Re+4.0.0-Release-source.tar.gz">源码下载</a>
|
||||
</li>
|
||||
<li><strong>Re+4.0.0-Beta</strong> - 2026年早期测试版本
|
||||
<br><a href="download/source/Oraset-Re+4.0.0-Beta-source.tar.gz">源码下载</a>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h2>系统要求</h2>
|
||||
<ul>
|
||||
<li>Windows 10/11 (64位)</li>
|
||||
<li>macOS 10.15+</li>
|
||||
<li>Linux x86_64</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<p>Oraset Project © 2026</p>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
fetch('docs/api.php')
|
||||
.then(function(response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(function(data) {
|
||||
var navList = document.getElementById('doc-nav-list');
|
||||
navList.innerHTML = '';
|
||||
if (data.articles && data.articles.length > 0) {
|
||||
data.articles.forEach(function(article) {
|
||||
var li = document.createElement('li');
|
||||
var a = document.createElement('a');
|
||||
a.href = 'docs/index.php?doc=' + article.name;
|
||||
a.textContent = article.title;
|
||||
li.appendChild(a);
|
||||
navList.appendChild(li);
|
||||
});
|
||||
} else {
|
||||
navList.innerHTML = '<li><span class="sidebar-loading">暂无文档</span></li>';
|
||||
}
|
||||
})
|
||||
.catch(function(error) {
|
||||
console.error('Error loading document list:', error);
|
||||
document.getElementById('doc-nav-list').innerHTML = '<li><span class="sidebar-loading">加载失败</span></li>';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
BIN
Binary file not shown.
@@ -0,0 +1,35 @@
|
||||
# Oraset Package (.orp)
|
||||
# 包名:hello-world
|
||||
# 版本:1.0.0
|
||||
# 描述:一个简单的 Hello World 示例包,包含 Lua 代码
|
||||
|
||||
version: 1.0.0
|
||||
name: hello-world
|
||||
description: A simple Hello World example package with Lua code
|
||||
author: Oraset Team
|
||||
license: MIT
|
||||
|
||||
# Lua 代码部分
|
||||
lua:
|
||||
-- 这是一个 Lua 脚本示例
|
||||
print("Hello from Lua!")
|
||||
print("这个包已经成功安装")
|
||||
|
||||
-- 定义一个简单的函数
|
||||
function greet(name)
|
||||
return "Hello, " .. name .. "!"
|
||||
end
|
||||
|
||||
-- 调用函数
|
||||
print(greet("Oraset"))
|
||||
|
||||
-- 数学计算
|
||||
print("计算结果: 2 + 3 = " .. (2 + 3))
|
||||
|
||||
-- 循环示例
|
||||
print("数字 1 到 5:")
|
||||
for i = 1, 5 do
|
||||
print(" " .. i)
|
||||
end
|
||||
|
||||
print("Lua 代码执行完成!")
|
||||
Vendored
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Vendored
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Vendored
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,105 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Oraset Linux 一键安装脚本 (DEB)
|
||||
# 版本: 4.0.1-BetaN(+AU)
|
||||
|
||||
set -e
|
||||
|
||||
# 版本检查 URL
|
||||
VERSION_URL="https://oraset.parlz.com/download/version.txt"
|
||||
DEB_URL_BASE="https://oraset.parlz.com/download/deb"
|
||||
|
||||
echo "🚀 开始安装 Oraset..."
|
||||
|
||||
# 检查系统架构
|
||||
ARCH=$(uname -m)
|
||||
if [ "$ARCH" != "x86_64" ]; then
|
||||
echo "❌ 错误: 此安装脚本仅支持 x86_64 架构"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查是否有管理员权限
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "⚠️ 需要管理员权限来安装 Oraset"
|
||||
echo "请使用 sudo 运行此脚本,或者输入密码:"
|
||||
sudo -v
|
||||
fi
|
||||
|
||||
# 检查网络连接
|
||||
check_network() {
|
||||
if ! curl -s --head --fail "$VERSION_URL" > /dev/null 2>&1; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# 获取最新版本号
|
||||
get_latest_version() {
|
||||
if command -v curl &> /dev/null; then
|
||||
LATEST_VERSION=$(curl -s "$VERSION_URL")
|
||||
elif command -v wget &> /dev/null; then
|
||||
LATEST_VERSION=$(wget -q -O- "$VERSION_URL")
|
||||
else
|
||||
echo "❌ 错误: 需要 curl 或 wget"
|
||||
exit 1
|
||||
fi
|
||||
echo "$LATEST_VERSION"
|
||||
}
|
||||
|
||||
echo "🔍 正在检查最新版本..."
|
||||
if check_network; then
|
||||
LATEST_VERSION=$(get_latest_version)
|
||||
if [ -z "$LATEST_VERSION" ]; then
|
||||
echo "⚠️ 无法获取最新版本信息,使用默认版本"
|
||||
LATEST_VERSION="4.0.1-BetaN(+AU)"
|
||||
else
|
||||
echo "✅ 检测到最新版本: $LATEST_VERSION"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ 网络不可用,使用默认版本"
|
||||
LATEST_VERSION="4.0.1-BetaN(+AU)"
|
||||
fi
|
||||
|
||||
# 创建临时目录
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
echo "📁 创建临时目录: $TEMP_DIR"
|
||||
|
||||
# 下载 DEB 包
|
||||
DEB_FILE="Oraset-Re+$LATEST_VERSION.deb"
|
||||
DEB_URL="$DEB_URL_BASE/$DEB_FILE"
|
||||
DEB_PATH="$TEMP_DIR/$DEB_FILE"
|
||||
|
||||
echo "📥 正在下载 Oraset $LATEST_VERSION..."
|
||||
if command -v curl &> /dev/null; then
|
||||
curl -L -o "$DEB_PATH" "$DEB_URL"
|
||||
elif command -v wget &> /dev/null; then
|
||||
wget -O "$DEB_PATH" "$DEB_URL"
|
||||
else
|
||||
echo "❌ 错误: 需要 curl 或 wget 来下载文件"
|
||||
rm -rf "$TEMP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查下载是否成功
|
||||
if [ ! -f "$DEB_PATH" ]; then
|
||||
echo "❌ 错误: 下载失败"
|
||||
rm -rf "$TEMP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 下载完成"
|
||||
|
||||
# 安装 DEB 包
|
||||
echo "🔧 正在安装 Oraset..."
|
||||
sudo dpkg -i "$DEB_PATH"
|
||||
|
||||
# 检查依赖是否完整
|
||||
echo "🔍 检查依赖..."
|
||||
sudo apt-get install -f -y
|
||||
|
||||
# 清理临时文件
|
||||
rm -rf "$TEMP_DIR"
|
||||
echo "🧹 清理临时文件"
|
||||
|
||||
echo "✅ Oraset 安装完成!"
|
||||
echo "运行 'oraset -v' 验证安装"
|
||||
@@ -0,0 +1,115 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Oraset 一键安装脚本
|
||||
# 版本: 4.0.1-Beta
|
||||
|
||||
set -e
|
||||
|
||||
# 版本检查 URL
|
||||
VERSION_URL="https://oraset.parlz.com/download/version.txt"
|
||||
PKG_URL_BASE="https://oraset.parlz.com/download/pkg"
|
||||
|
||||
echo "🚀 开始安装 Oraset..."
|
||||
|
||||
# 检查系统
|
||||
if [[ "$OSTYPE" != "darwin"* ]]; then
|
||||
echo "❌ 错误: 此安装脚本仅支持 macOS 系统"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查是否有管理员权限
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "⚠️ 需要管理员权限来安装 Oraset"
|
||||
echo "请使用 sudo 运行此脚本,或者输入密码:"
|
||||
sudo -v
|
||||
fi
|
||||
|
||||
# 检查网络连接
|
||||
check_network() {
|
||||
if ! curl -s --head --fail "$VERSION_URL" > /dev/null 2>&1; then
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# 获取最新版本号
|
||||
get_latest_version() {
|
||||
if command -v curl &> /dev/null; then
|
||||
LATEST_VERSION=$(curl -s "$VERSION_URL")
|
||||
elif command -v wget &> /dev/null; then
|
||||
LATEST_VERSION=$(wget -q -O- "$VERSION_URL")
|
||||
else
|
||||
echo "❌ 错误: 需要 curl 或 wget"
|
||||
exit 1
|
||||
fi
|
||||
echo "$LATEST_VERSION"
|
||||
}
|
||||
|
||||
echo "🔍 正在检查最新版本..."
|
||||
if check_network; then
|
||||
LATEST_VERSION=$(get_latest_version)
|
||||
if [ -z "$LATEST_VERSION" ]; then
|
||||
echo "⚠️ 无法获取最新版本信息,使用默认版本"
|
||||
LATEST_VERSION="4.0.1-Beta(..26:.6:12)"
|
||||
else
|
||||
echo "✅ 检测到最新版本: $LATEST_VERSION"
|
||||
fi
|
||||
else
|
||||
echo "⚠️ 网络不可用,使用默认版本"
|
||||
LATEST_VERSION="4.0.1-Beta(..26:.6:12)"
|
||||
fi
|
||||
|
||||
# 创建临时目录
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
echo "📁 创建临时目录: $TEMP_DIR"
|
||||
|
||||
# 下载 PKG 文件
|
||||
PKG_FILE="Oraset-Re+$LATEST_VERSION.pkg"
|
||||
PKG_URL="$PKG_URL_BASE/$PKG_FILE"
|
||||
PKG_PATH="$TEMP_DIR/$PKG_FILE"
|
||||
|
||||
echo "📥 正在下载 Oraset $LATEST_VERSION..."
|
||||
if command -v curl &> /dev/null; then
|
||||
curl -L -o "$PKG_PATH" "$PKG_URL"
|
||||
elif command -v wget &> /dev/null; then
|
||||
wget -O "$PKG_PATH" "$PKG_URL"
|
||||
else
|
||||
echo "❌ 错误: 需要 curl 或 wget 来下载文件"
|
||||
rm -rf "$TEMP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查下载是否成功
|
||||
if [ ! -f "$PKG_PATH" ]; then
|
||||
echo "❌ 错误: 下载失败"
|
||||
rm -rf "$TEMP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ 下载完成"
|
||||
|
||||
# 安装 PKG
|
||||
echo "🔧 正在安装 Oraset..."
|
||||
sudo installer -pkg "$PKG_PATH" -target /
|
||||
|
||||
# 清理临时文件
|
||||
rm -rf "$TEMP_DIR"
|
||||
echo "🧹 清理临时文件"
|
||||
|
||||
# 验证安装
|
||||
if command -v oraset &> /dev/null; then
|
||||
echo "✅ 安装成功!"
|
||||
echo ""
|
||||
echo "🎉 Oraset $LATEST_VERSION 已成功安装到您的系统"
|
||||
echo ""
|
||||
echo "使用方法:"
|
||||
echo " 查看版本: oraset -v"
|
||||
echo " 运行脚本: oraset your_script.ora"
|
||||
echo ""
|
||||
echo "开始使用 Oraset 吧!"
|
||||
else
|
||||
echo "⚠️ 安装可能未完成,请检查错误信息"
|
||||
echo "您可以尝试手动安装:"
|
||||
echo " sudo installer -pkg $PKG_FILE -target /"
|
||||
exit 1
|
||||
fi
|
||||
Vendored
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,25 @@
|
||||
CC = gcc
|
||||
CFLAGS = -Wall -Wextra -O2 -std=c11
|
||||
BINDIR = bin
|
||||
|
||||
TARGET = $(BINDIR)/oraset
|
||||
|
||||
SRCS = src/main.c
|
||||
|
||||
all: $(TARGET)
|
||||
|
||||
$(TARGET): $(SRCS)
|
||||
@mkdir -p $(BINDIR)
|
||||
$(CC) $(CFLAGS) -o $(TARGET) $(SRCS)
|
||||
|
||||
clean:
|
||||
rm -f $(TARGET)
|
||||
|
||||
pkg: all
|
||||
rm -rf pkg-root
|
||||
mkdir -p pkg-root/usr/local/bin
|
||||
cp bin/oraset pkg-root/usr/local/bin/oraset
|
||||
chmod +x pkg-root/usr/local/bin/oraset
|
||||
pkgbuild --root pkg-root --identifier com.oraset.lang --version 4.0.0 --install-location / Oraset-Re+4.0.0-Release.pkg
|
||||
|
||||
.PHONY: all clean pkg
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1 @@
|
||||
B-5
|
||||
@@ -0,0 +1,157 @@
|
||||
# Oraset 标准库 - std.oinc
|
||||
# 使用方法: oraset -i https://oraset.parlz.com/inc/std.oinc
|
||||
|
||||
# ==================== 数学函数 ====================
|
||||
|
||||
sin(x:double) -> double {
|
||||
return std::sin(x);
|
||||
}
|
||||
|
||||
cos(x:double) -> double {
|
||||
return std::cos(x);
|
||||
}
|
||||
|
||||
tan(x:double) -> double {
|
||||
return std::tan(x);
|
||||
}
|
||||
|
||||
asin(x:double) -> double {
|
||||
return std::asin(x);
|
||||
}
|
||||
|
||||
acos(x:double) -> double {
|
||||
return std::acos(x);
|
||||
}
|
||||
|
||||
atan(x:double) -> double {
|
||||
return std::atan(x);
|
||||
}
|
||||
|
||||
sinh(x:double) -> double {
|
||||
return std::sinh(x);
|
||||
}
|
||||
|
||||
cosh(x:double) -> double {
|
||||
return std::cosh(x);
|
||||
}
|
||||
|
||||
tanh(x:double) -> double {
|
||||
return std::tanh(x);
|
||||
}
|
||||
|
||||
exp(x:double) -> double {
|
||||
return std::exp(x);
|
||||
}
|
||||
|
||||
log(x:double) -> double {
|
||||
return std::log(x);
|
||||
}
|
||||
|
||||
log10(x:double) -> double {
|
||||
return std::log10(x);
|
||||
}
|
||||
|
||||
sqrt(x:double) -> double {
|
||||
return std::sqrt(x);
|
||||
}
|
||||
|
||||
pow(base:double, exp:double) -> double {
|
||||
return std::pow(base, exp);
|
||||
}
|
||||
|
||||
abs(x:double) -> double {
|
||||
return std::abs(x);
|
||||
}
|
||||
|
||||
floor(x:double) -> double {
|
||||
return std::floor(x);
|
||||
}
|
||||
|
||||
ceil(x:double) -> double {
|
||||
return std::ceil(x);
|
||||
}
|
||||
|
||||
round(x:double) -> double {
|
||||
return std::round(x);
|
||||
}
|
||||
|
||||
pi() -> double {
|
||||
return M_PI;
|
||||
}
|
||||
|
||||
e() -> double {
|
||||
return M_E;
|
||||
}
|
||||
|
||||
# ==================== 字符串函数 ====================
|
||||
|
||||
strlen(s:string) -> int {
|
||||
return std::strlen(s);
|
||||
}
|
||||
|
||||
strcmp(s1:string, s2:string) -> int {
|
||||
return std::strcmp(s1, s2);
|
||||
}
|
||||
|
||||
strstr(haystack:string, needle:string) -> string {
|
||||
return (char*)std::strstr(haystack, needle);
|
||||
}
|
||||
|
||||
strtolower(s:string) -> string {
|
||||
char* p = s;
|
||||
while (*p) {
|
||||
*p = std::tolower(*p);
|
||||
p++;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
strtoupper(s:string) -> string {
|
||||
char* p = s;
|
||||
while (*p) {
|
||||
*p = std::toupper(*p);
|
||||
p++;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
# ==================== 系统函数 ====================
|
||||
|
||||
system(cmd:string) -> int {
|
||||
return std::system(cmd);
|
||||
}
|
||||
|
||||
exit(code:int) {
|
||||
std::exit(code);
|
||||
}
|
||||
|
||||
getenv(name:string, default_val:string) -> string {
|
||||
char* val = std::getenv(name);
|
||||
return val ? val : default_val;
|
||||
}
|
||||
|
||||
# ==================== 文件操作 ====================
|
||||
|
||||
file_exists(filename:string) -> int {
|
||||
std::ifstream f(filename);
|
||||
return f.good() ? 1 : 0;
|
||||
}
|
||||
|
||||
file_read(filename:string) -> string {
|
||||
std::ifstream f(filename);
|
||||
std::stringstream buffer;
|
||||
buffer << f.rdbuf();
|
||||
return buffer.str();
|
||||
}
|
||||
|
||||
file_write(filename:string, content:string) -> int {
|
||||
std::ofstream f(filename);
|
||||
f << content;
|
||||
return f.good() ? 1 : 0;
|
||||
}
|
||||
|
||||
file_append(filename:string, content:string) -> int {
|
||||
std::ofstream f(filename, std::ios::app);
|
||||
f << content;
|
||||
return f.good() ? 1 : 0;
|
||||
}
|
||||
@@ -0,0 +1,97 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Oraset - 简洁高效的编程语言</title>
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="layout">
|
||||
<nav class="sidebar">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">Oraset</div>
|
||||
<ul>
|
||||
<li><a href="index.php" class="active">首页</a></li>
|
||||
<li><a href="download.php">下载</a></li>
|
||||
<li><a href="releases.php">历史版本</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">文档</div>
|
||||
<ul>
|
||||
<li><a href="docs/index.php?list">文档列表</a></li>
|
||||
</ul>
|
||||
<ul id="doc-nav-list">
|
||||
<li><span class="sidebar-loading">加载中...</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="main">
|
||||
<h1>Oraset</h1>
|
||||
<p>Version: <strong>B-5</strong></p>
|
||||
|
||||
<h2>关于</h2>
|
||||
<p>Oraset 是一个简洁高效的解释型编程语言,专为简单任务和脚本编写设计。</p>
|
||||
|
||||
<h2>特性</h2>
|
||||
<ul>
|
||||
<li>简洁直观的语法</li>
|
||||
<li>轻量级解释器</li>
|
||||
<li>变量和表达式支持</li>
|
||||
<li>条件语句和循环</li>
|
||||
<li>灵活的输出控制(print 函数)</li>
|
||||
<li>数组支持</li>
|
||||
<li>自定义函数</li>
|
||||
<li>丰富的内置函数(数学、字符串、数组)</li>
|
||||
<li>复合赋值和自增自减运算符</li>
|
||||
<li>REPL 交互模式</li>
|
||||
<li>跨平台支持(Windows、macOS、Linux)</li>
|
||||
<li>自动更新功能(oraset -u)</li>
|
||||
</ul>
|
||||
|
||||
<h2>快速开始</h2>
|
||||
<pre>// hello.ora
|
||||
print("Hello, World!");
|
||||
var x = 42;
|
||||
print("The value is:", x);</pre>
|
||||
|
||||
<p>运行:<code>oraset hello.ora</code></p>
|
||||
|
||||
<hr>
|
||||
<p>Oraset Project © 2026</p>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
fetch('docs/api.php')
|
||||
.then(function(response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(function(data) {
|
||||
var navList = document.getElementById('doc-nav-list');
|
||||
navList.innerHTML = '';
|
||||
if (data.articles && data.articles.length > 0) {
|
||||
data.articles.forEach(function(article) {
|
||||
var li = document.createElement('li');
|
||||
var a = document.createElement('a');
|
||||
a.href = 'docs/index.php?doc=' + article.name;
|
||||
a.textContent = article.title;
|
||||
li.appendChild(a);
|
||||
navList.appendChild(li);
|
||||
});
|
||||
} else {
|
||||
navList.innerHTML = '<li><span class="sidebar-loading">暂无文档</span></li>';
|
||||
}
|
||||
})
|
||||
.catch(function(error) {
|
||||
console.error('Error loading document list:', error);
|
||||
document.getElementById('doc-nav-list').innerHTML = '<li><span class="sidebar-loading">加载失败</span></li>';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,256 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>历史版本 - Oraset</title>
|
||||
<link rel="stylesheet" href="css/style.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="layout">
|
||||
<nav class="sidebar">
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">Oraset</div>
|
||||
<ul>
|
||||
<li><a href="index.php">首页</a></li>
|
||||
<li><a href="download.php">下载</a></li>
|
||||
<li><a href="releases.php" class="active">历史版本</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="sidebar-section">
|
||||
<div class="sidebar-section-title">文档</div>
|
||||
<ul>
|
||||
<li><a href="docs/index.php?list">文档列表</a></li>
|
||||
</ul>
|
||||
<ul id="doc-nav-list">
|
||||
<li><span class="sidebar-loading">加载中...</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<main class="main">
|
||||
<h1>历史版本</h1>
|
||||
|
||||
<ul class="version-list">
|
||||
<li>
|
||||
<div class="version-number">B-5</div>
|
||||
<div class="version-date">2026年7月22日</div>
|
||||
<div class="version-desc">
|
||||
全新升级版本。<br>
|
||||
<ul>
|
||||
<li>新增数组类型支持</li>
|
||||
<li>新增自定义函数定义</li>
|
||||
<li>新增复合赋值运算符:+=, -=, *=, /=, %=</li>
|
||||
<li>新增自增自减运算符:++, --</li>
|
||||
<li>新增 REPL 交互模式(oraset -i)</li>
|
||||
<li>新增更多数学函数:tan(), pow(), log(), floor(), ceil(), round()</li>
|
||||
<li>新增数组函数:array(), arrlen()</li>
|
||||
<li>新增 int() 和 float() 类型转换函数</li>
|
||||
<li>支持单引号字符串</li>
|
||||
<li>支持多行注释(/* */)</li>
|
||||
<li>支持行注释(//)</li>
|
||||
<li>rand() 函数支持参数(指定最大值)</li>
|
||||
<li>优化变量查找算法</li>
|
||||
<li>修复多处 bug</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="version-download">
|
||||
<strong>下载:</strong>
|
||||
<ul>
|
||||
<li><a href="download/source/Oraset-B5-source.tar.gz">源码 (tar.gz)</a></li>
|
||||
<li><a href="download/pkg/Oraset-B5.pkg">macOS (pkg)</a></li>
|
||||
<li><a href="download/deb/Oraset-B5.deb">Linux (deb)</a></li>
|
||||
<li><a href="download/exe/Oraset-B5.exe">Windows (exe)</a></li>
|
||||
</ul>
|
||||
<p class="note">💡 或者使用:<code>oraset -u</code> 更新到最新版本</p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="version-number">Re+4.0.1-Release(adn+1.0.100+fix)</div>
|
||||
<div class="version-date">2026年6月18日</div>
|
||||
<div class="version-desc">
|
||||
ADN 包管理修复版本。<br>
|
||||
<ul>
|
||||
<li>移除外部 Lua 依赖,使用 Oraset 解释器执行 .orp 扩展包</li>
|
||||
<li>修复词法分析器字符识别问题</li>
|
||||
<li>修复函数调用括号处理错误</li>
|
||||
<li>优化语法分析器逻辑</li>
|
||||
<li>支持 .orp 包格式(使用 Oraset 语言编写扩展代码)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="version-download">
|
||||
<strong>下载:</strong>
|
||||
<ul>
|
||||
<li><a href="download/source/Oraset-Re+4.0.1-Release(adn+1.0.100+fix)-source.tar.gz">源码 (tar.gz)</a></li>
|
||||
<li><a href="download/pkg/Oraset-Re+4.0.1-Release(adn+1.0.100+fix).pkg">macOS (pkg)</a></li>
|
||||
</ul>
|
||||
<p class="note">💡 或者使用:<code>oraset -u</code> 更新到最新版本</p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="version-number">Re+4.0.1-Release(adn+1.0.0)</div>
|
||||
<div class="version-date">2026年6月13日</div>
|
||||
<div class="version-desc">
|
||||
ADN 包管理系统版本。<br>
|
||||
<ul>
|
||||
<li>新增 ADN 包管理系统(.orp 格式)</li>
|
||||
<li>支持包安装:adn(install package) 或 adn(i package)</li>
|
||||
<li>支持包更新:adn(update package) 或 adn(u package)</li>
|
||||
<li>支持包移除:adn(remove package) 或 adn(r package)</li>
|
||||
<li>支持包列表:adn(list) 或 adn(ls)</li>
|
||||
<li>支持仓库管理:adm(mirror url) 添加镜像仓库</li>
|
||||
<li>支持仓库列表:adm(list) 或 adm(ls)</li>
|
||||
<li>默认仓库:https://oraset.parlz.com/download/adn/</li>
|
||||
<li>自动创建 .adn 目录管理包和仓库信息</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="version-download">
|
||||
<strong>下载:</strong>
|
||||
<ul>
|
||||
<li><a href="download/pkg/Oraset-Re+4.0.1-Release(adn+1.0.0).pkg">macOS (pkg)</a></li>
|
||||
</ul>
|
||||
<p class="note">💡 如果您已安装 Oraset-Re+4.0.1-BetaN(+AU) 或更高版本,可使用 <code>oraset -u Oraset-Re+4.0.1-Release(adn+1.0.0)</code> 安装此版本</p>
|
||||
</div>
|
||||
</li>
|
||||
<li>
|
||||
<div class="version-number">Re+4.0.1-BetaN(+AU)</div>
|
||||
<div class="version-date">2026年6月12日</div>
|
||||
<div class="version-desc">
|
||||
新增自动更新功能版本。<br>
|
||||
<ul>
|
||||
<li>添加 oraset -u 自动更新命令</li>
|
||||
<li>支持指定版本更新:oraset -u Oraset-Re+4.0.0-Beta</li>
|
||||
<li>自动识别操作系统(Windows/macOS/Linux)</li>
|
||||
<li>从服务器获取最新版本信息</li>
|
||||
<li>自动下载并安装对应平台的安装包</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="version-download">
|
||||
<strong>下载:</strong>
|
||||
<ul>
|
||||
<li><a href="download/source/Oraset-Re+4.0.1-BetaN(+AU)-source.tar.gz">源码 (tar.gz)</a></li>
|
||||
<li><a href="download/pkg/Oraset-Re+4.0.1-BetaN(+AU).pkg">macOS (pkg)</a></li>
|
||||
<li><a href="download/deb/Oraset-Re+4.0.1-BetaN(+AU).deb">Linux (deb)</a></li>
|
||||
<li><a href="download/exe/Oraset-Re+4.0.1-BetaN(+AU).exe">Windows (exe)</a></li>
|
||||
</ul>
|
||||
<p class="note">💡 或者使用:<code>oraset -u</code> 更新到最新版本</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="version-number">Re+4.0.1-Beta(..26:.6:12)</div>
|
||||
<div class="version-date">2026年6月12日</div>
|
||||
<div class="version-desc">
|
||||
新增实用功能版本。<br>
|
||||
<ul>
|
||||
<li>添加数学函数:abs(), sqrt(), sin(), cos(), rand()</li>
|
||||
<li>添加字符串函数:len(), num(), str()</li>
|
||||
<li>添加输入函数:input()</li>
|
||||
<li>添加 for 循环语法</li>
|
||||
<li>添加比较运算符:>=, <=</li>
|
||||
<li>添加取模运算符:%</li>
|
||||
<li>优化代码执行性能</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="version-download">
|
||||
<strong>下载:</strong>
|
||||
<ul>
|
||||
<li><a href="download/source/Oraset-Re+4.0.1-Beta(..26:.6:12)-source.tar.gz">源码 (tar.gz)</a></li>
|
||||
<li><a href="download/pkg/Oraset-Re+4.0.1-Beta(..26:.6:12).pkg">macOS (pkg)</a></li>
|
||||
<li><a href="download/deb/Oraset-Re+4.0.1-Beta(..26:.6:12).deb">Linux (deb)</a></li>
|
||||
<li><a href="download/exe/Oraset-Re+4.0.1-Beta(..26:.6:12).exe">Windows (exe)</a></li>
|
||||
</ul>
|
||||
<p class="note">💡 如果您已安装 Oraset-Re+4.0.1-BetaN(+AU) 或更高版本,可使用 <code>oraset -u Oraset-Re+4.0.1-Beta(..26:.6:12)</code> 安装此版本</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="version-number">Re+4.0.0-Release</div>
|
||||
<div class="version-date">2026年6月12日</div>
|
||||
<div class="version-desc">
|
||||
首个正式 Release 版本。<br>
|
||||
<ul>
|
||||
<li>修复 while 循环逻辑错误</li>
|
||||
<li>修复 if 语句 else 分支处理</li>
|
||||
<li>添加字符串转义支持(\n, \t, \r, \")</li>
|
||||
<li>添加逻辑运算符(&&, ||, !)</li>
|
||||
<li>内存优化,减少动态分配</li>
|
||||
<li>性能优化,支持编译优化</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="version-download">
|
||||
<strong>下载:</strong>
|
||||
<ul>
|
||||
<li><a href="download/source/Oraset-Re+4.0.0-Release-source.tar.gz">源码 (tar.gz)</a></li>
|
||||
<li><a href="download/pkg/Oraset-Re+4.0.0-Release.pkg">macOS (pkg)</a></li>
|
||||
<li><a href="download/deb/Oraset-Re+4.0.0-Release.deb">Linux (deb)</a></li>
|
||||
<li><a href="download/exe/Oraset-Re+4.0.0-Release.exe">Windows (exe)</a></li>
|
||||
</ul>
|
||||
<p class="note">💡 如果您已安装 Oraset-Re+4.0.1-BetaN(+AU) 或更高版本,可使用 <code>oraset -u Oraset-Re+4.0.0-Release</code> 安装此版本</p>
|
||||
</div>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<div class="version-number">Re+4.0.0-Beta</div>
|
||||
<div class="version-date">2026年6月11日</div>
|
||||
<div class="version-desc">
|
||||
首个公开 Beta 测试版本。<br>
|
||||
<ul>
|
||||
<li>变量声明和赋值</li>
|
||||
<li>表达式计算(算术运算、比较运算)</li>
|
||||
<li>条件语句(if/else)</li>
|
||||
<li>循环语句(while)</li>
|
||||
<li>print 函数(支持 "nel" 参数控制换行)</li>
|
||||
<li>文件级配置(sg 语法)</li>
|
||||
<li>跨平台支持(Windows、macOS、Linux)</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="version-download">
|
||||
<strong>下载:</strong>
|
||||
<ul>
|
||||
<li><a href="download/source/Oraset-Re+4.0.0-Beta-source.tar.gz">源码 (tar.gz)</a></li>
|
||||
<li><a href="download/pkg/Oraset-Re+4.0.0-Beta.pkg">macOS (pkg)</a></li>
|
||||
<li><a href="download/deb/Oraset-Re+4.0.0-Beta.deb">Linux (deb)</a></li>
|
||||
<li><a href="download/exe/Oraset-Re+4.0.0-Beta.exe">Windows (exe)</a></li>
|
||||
</ul>
|
||||
<p class="note">💡 如果您已安装 Oraset-Re+4.0.1-BetaN(+AU) 或更高版本,可使用 <code>oraset -u Oraset-Re+4.0.0-Beta</code> 安装此版本</p>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
<p>Oraset Project © 2026</p>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
fetch('docs/api.php')
|
||||
.then(function(response) {
|
||||
if (!response.ok) {
|
||||
throw new Error('Network response was not ok');
|
||||
}
|
||||
return response.json();
|
||||
})
|
||||
.then(function(data) {
|
||||
var navList = document.getElementById('doc-nav-list');
|
||||
navList.innerHTML = '';
|
||||
if (data.articles && data.articles.length > 0) {
|
||||
data.articles.forEach(function(article) {
|
||||
var li = document.createElement('li');
|
||||
var a = document.createElement('a');
|
||||
a.href = 'docs/index.php?doc=' + article.name;
|
||||
a.textContent = article.title;
|
||||
li.appendChild(a);
|
||||
navList.appendChild(li);
|
||||
});
|
||||
} else {
|
||||
navList.innerHTML = '<li><span class="sidebar-loading">暂无文档</span></li>';
|
||||
}
|
||||
})
|
||||
.catch(function(error) {
|
||||
console.error('Error loading document list:', error);
|
||||
document.getElementById('doc-nav-list').innerHTML = '<li><span class="sidebar-loading">加载失败</span></li>';
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user