PurCC 言語の主要な HVML インタープリターです。
目次
HVMLは、中国初のオープン ソース プロジェクトであるMiniGUIの作成者であるVincent Weiによって提案された新しいスタイルの汎用プログラミング言語です。
PurCの頭字語です
the Prime HVML inteRpreter for C language。の略でもあり
Purring Cat、while
Purring Catは HVML の愛称でありマスコットです。
PurC の目標は、HVML Specification V1.0で定義されたすべての機能と、 HVML Predefined Variables V1.0で定義 されたすべての定義済み動的変数を C 言語で実装することです。
PurC を使用して、コマンド ライン ツールを使用して HVML プログラムまたは HVML アプリを実行したり、PurC
purcをライブラリとして使用して独自の HVML インタープリターを構築したりできます。
PurC は LGPLv3 でリリースされているため、LGPLv3 の条件と条件に従えば商用利用は無料です。
現在、PurC は Linux と macOS をサポートしています。Windows のサポートは進行中です。PurC を他のプラットフォームに移植することを歓迎します。
HVML の詳細については、記事 (10% 完了) を参照してください。
HVML プログラミングの基本概念については、次のチュートリアルを参照してください (80% 完了)。
HVML に関連する仕様およびオープン ソース ソフトウェアについては、次のリポジトリを参照してください。
PurC をビルドするには、Linux または macOS システムで次のツールまたはライブラリが利用可能であることを確認してください。
Windows への移植はまだ進行中ですが、Windows 10 バージョン 2004 以降で PurC をビルドすることは可能です。Windows システムに WSL (Linux 用 Windows サブシステム) と Linux ディストリビューション (Ubuntu など) をインストールしてから、 Ubuntu 環境で PurC をビルドします。
Linux を使用していることを前提としています。
PurC のソースを取得したら、ソース ツリーのルートに移動し、以下のコマンド ラインを使用して PurC をビルドおよびインストールできます。
$ cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DPORT=Linux -B build && cmake --build build && sudo cmake --install build
上記のコマンド ラインは、次のコマンドで構成されます。
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DPORT=Linux -B build:
build/サブディレクトリに移動して実行
cmakeし、PurC をビルドするためのビルド ファイルを生成します。このコマンドは次のオプションを使用することに注意してください。
-DCMAKE_BUILD_TYPE=RelWithDebInfo: 建物の種類を指定し
RelWithDebInfoます。
Debug、
Releaseおよび でサポートされているその他のオプションも使用できます
cmake。
-DPORT=Linux:
cmakeLinux カーネルに基づくオペレーティング システム用の PurC をビルドしていると伝えてください。macOS を使用
-DPORT=Macしている場合に使用します。
-B build: サブディレクトリにビルド ファイルを生成します
build/。
cmake --build build: サブディレクトリに PurC をビルドし
build/ます。
sudo cmake --install build: サブディレクトリから PurC をインストールします
build/。
次のコマンドを使用して、PurC を段階的にビルドおよびインストールすることもできます。
$ cd <path/to/the/root/of/the/source/tree/of/PurC>
$ rm -rf build/
$ mkdir build/
$ cd build/
$ cmake -DCMAKE_BUILD_TYPE=Release -DPORT=Linux ..
$ make -j4
$ sudo make install
デフォルトでは、上記のコマンドは PurC をビルドし、ヘッダー、ライブラリ、実行可能ファイル、および一部のドキュメントをシステム (
/usr/local/Linux システムを使用している場合はディレクトリの下) にインストールします。
PurC は、さまざまな目的で次の環境変数を使用します。
PURC_DVOBJS_PATH: 外部動的オブジェクトの共有モジュールを保存するパス。
PURC_EXECUTOR_PATH: 外部エグゼキュータの共有モジュールを保存するパス。
PURC_FETCHER_EXEC_PATH: PurC Fetcher の実行可能プログラムを保存するパス。
PURC_USER_DIR_SUFFIX: ユーザーのディレクトリ接尾辞。
PURC_LOG_ENABLE:
trueグローバル ログ機能を有効にする場合。
PURC_LOG_SYSLOG:
truesyslog をログ機能として使用できるようにする場合。
purc
以下のセクションでは、システムに PurC がインストールされており、コマンド ライン ツール
purcが にインストールされていることを前提としています
/usr/local/bin/。
次の内容を、
hello.hvml作業ディレクトリの最初の HVML プログラムとして名前を付けたファイルに保存してください。
<!DOCTYPE hvml>
<hvml target="void">
$STREAM.stdout.writelines('Hello, world!')
</hvml>
この HVML プログラムを実行する
purc
には、次の方法で使用できます。
$ purc hello.hvml
Hello, world!
最初の HVML プログラムが端末に出力され、終了することがわかります。
Hello, world!
この HVML プログラムをスクリプトとして直接実行することもできます。
次の行を HVML プログラムの最初の行として:
#!/usr/local/bin/purc
この後、次のコマンドを実行して、ファイルのモードを変更します。
実行権限:
$ chmod +x hello.hvml
次に
hello.hvml
、コマンド ラインから直接実行します。
$ ./hello.hvml
複数の HVML プログラムを並行して実行するPurC は、複数の HVML プログラムをコルーチンとして並行して実行できます。
たとえば、最初の HVML プログラムを
Hello, world!
10 回印刷するように拡張します。
<!DOCTYPE hvml>
<hvml target="void">
<iterate on 0 onlyif $L.lt($0<, 10) with $EJSON.arith('+', $0<, 1) nosetotail >
$STREAM.stdout.writelines(
$STR.join($0<, ") Hello, world! --from COROUTINE-", $CRTN.cid))
</iterate>
</hvml>
拡張バージョンの名前を と仮定します
hello-10.hvml
。
コマンドラインフラグを指定することで、2 つのプログラムを 2 つのコルーチンとして並行して実行できます-l
。
$ purc -l hello-10.hvml hello-10.hvml
端末に次の出力が表示されます。
0) Hello, world! -- from COROUTINE-3
0) Hello, world! -- from COROUTINE-4
1) Hello, world! -- from COROUTINE-3
1) Hello, world! -- from COROUTINE-4
2) Hello, world! -- from COROUTINE-3
2) Hello, world! -- from COROUTINE-4
3) Hello, world! -- from COROUTINE-3
3) Hello, world! -- from COROUTINE-4
4) Hello, world! -- from COROUTINE-3
4) Hello, world! -- from COROUTINE-4
5) Hello, world! -- from COROUTINE-3
5) Hello, world! -- from COROUTINE-4
6) Hello, world! -- from COROUTINE-3
6) Hello, world! -- from COROUTINE-4
7) Hello, world! -- from COROUTINE-3
7) Hello, world! -- from COROUTINE-4
8) Hello, world! -- from COROUTINE-3
8) Hello, world! -- from COROUTINE-4
9) Hello, world! -- from COROUTINE-3
9) Hello, world! -- from COROUTINE-4
上記の出力に
COROUTINE-3
はCOROUTINE-4
、実行中のプログラムの 2 つのインスタンスに対して PurC によって割り当てられたコルーチン識別子が含まれています。
PurC が実行中のインスタンスを交互に、つまりコルーチンのように実行するようにスケジュールしていることがわかります。
-l
コマンド ラインでフラグを使用しない場合はpurc
、プログラムが 1 つずつ実行されます。
$ purc hello-10.hvml hello-10.hvml
0) Hello, world! -- from COROUTINE-3
1) Hello, world! -- from COROUTINE-3
2) Hello, world! -- from COROUTINE-3
3) Hello, world! -- from COROUTINE-3
4) Hello, world! -- from COROUTINE-3
5) Hello, world! -- from COROUTINE-3
6) Hello, world! -- from COROUTINE-3
7) Hello, world! -- from COROUTINE-3
8) Hello, world! -- from COROUTINE-3
9) Hello, world! -- from COROUTINE-3
0) Hello, world! -- from COROUTINE-4
1) Hello, world! -- from COROUTINE-4
2) Hello, world! -- from COROUTINE-4
3) Hello, world! -- from COROUTINE-4
4) Hello, world! -- from COROUTINE-4
5) Hello, world! -- from COROUTINE-4
6) Hello, world! -- from COROUTINE-4
7) Hello, world! -- from COROUTINE-4
8) Hello, world! -- from COROUTINE-4
9) Hello, world! -- from COROUTINE-4
HVML レンダラーへの接続HVML と他のプログラミング言語との重要な違いの 1 つは、HVML が HTML のようなマークアップ言語で記述されたドキュメントを生成できることです。
ファイルや端末にデータを出力するだけではありません。
便宜上、
Source/Samples/hvml
このリポジトリのディレクトリにいくつかの HVML サンプルを用意しました。
PurC をビルドした後、サンプルはビルド ルート ディレクトリのhvml/
サブディレクトリの下にコピーされます。
建物のルート ディレクトリにpurc
移動し、サンプルの実行に使用できるようにします。
例えば:
$ cd <path/to/the/building/directory/>
$ purc hvml/fibonacci-void-temp.hvml
この HVML プログラムは、2000 未満の 18 個のフィボナッチ数を出力します。
このプログラムの別のバージョンもあります:
hvml/fibonacci-html-temp.hvml
.
フィボナッチ数をリストした HTML ドキュメントを生成します。
オプションなし
で
hvml/fibonacci-html-temp.hvml
プログラムを実行すると、 というレンダラーが使用されます。purc
purc
HEADLESS
このレンダラーは、PurC からレンダラーに送信されたメッセージをローカル ファイルに記録します。
Linuxでは/dev/null
デフォルトです。
この HVML プログラムはもう使用していないため$STREM.stdout
、端末には何も表示されません。
ただし、 オプション--verbose
(または短いオプション-b
) を使用して、HVML プログラムによって生成された HTML コンテンツを端末に表示できます。
$ purc -b hvml/fibonacci-html-temp.hvml
このコマンドにより、次の出力が得られます。
purc 0.8.0
Copyright (C) 2022 FMSoft Technologies.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Executing HVML program from `file:///srv/devel/hvml/purc/build/hvml/fibonacci-html-temp.hvml`...
>> The document generated:
<html>
<head>
<title>
Fibonacci Numbers
</title>
</head>
<body id="theBody">
<h1>
Fibonacci Numbers less than 2000
</h1>
<ol>
<li> 0 </li>
<li> 1 </li>
<li> 1 </li>
<li> 2 </li>
<li> 3 </li>
<li> 5 </li>
<li> 8 </li>
<li> 13 </li>
<li> 21 </li>
<li> 34 </li>
<li> 55 </li>
<li> 89 </li>
<li> 144 </li>
<li> 233 </li>
<li> 377 </li>
<li> 610 </li>
<li> 987 </li>
<li> 1597 </li>
</ol>
<p>
Totally 18 numbers
</p>
</body>
</html>
>> The executing result:
[18, 1597L]
purc
などの実際のレンダラーに接続するように指示することもできますxGUI Pro
。
これは、WebKit に基づく高度な HVML レンダラーです。
システムに xGUI Pro がインストールされていると仮定します。
purc
xGUI Pro のウィンドウに究極の HTML コンテンツを表示するために
実行できます。xGUI Pro をインストールする詳細な手順については、 https://github.com/HVML/xGUI-Proを
参照してください。
別の端末から xGUI Pro を起動したと仮定して
purc
、次のオプションで実行してください。
$ purc --rdr-prot=purcmc hvml/fibonacci-html-temp.hvml
によって作成された xGUI Pro のウィンドウに次の内容が表示され
hvml/fibonacci-html-temp.hvml
ます。
より良いエクスペリエンスを提供する完全な HVML プログラムについては、
hvml/calculator-bc.hvml
任意精度計算機を実装する
という別のサンプルを実行してみてください。
$ purc -p purcmc hvml/calculator-bc.hvml
のスクリーンショットは次の
hvml/calculator-bc.hvml
とおりです。
または
hvml/planetary-resonance-lines.hvml
、惑星の共鳴を示す を実行します。
$ purc -p purcmc hvml/planetary-resonance-lines.hvml
のスクリーンショットは次の
hvml/planetary-resonance-lines.hvml
とおりです。
purc
オプションpurc
オプションを指定して実行するpurc
と、 でサポートされているすべてのオプションを確認でき-h
ます。
$ purc -h
purc (0.8.0) - a standalone HVML interpreter/debugger based-on PurC.
Usage: purc [ options ... ] [ file | url ] ... | [ app_desc_json | app_desc_ejson ]
The following options can be supplied to the command:
-a --app=< app_name >
Execute with the specified app name (default value is `cn.fmsoft.html.purc`).
-r --runner=< runner_name >
Execute with the specified runner name (default value is `main`).
-d --data-fetcher=< local | remote >
The data fetcher; use `local` or `remote`.
- `local`: use the built-in data fetcher, and only `file://` URLs
supported.
- `remote`: use the remote data fetcher to support more URL schemas,
such as `http`, `https`, `ftp` and so on.
-p --rdr-prot=< headless | purcmc >
The renderer protocol; use `headless` (default) or `purcmc`.
- `headless`: use the built-in HEADLESS renderer.
- `purcmc`: use the remote PURCMC renderer;
`purc` will connect to the renderer via Unix Socket or WebSocket.
-u --rdr-uri=< renderer_uri >
The renderer URI:
- For the renderer protocol `headleass`,
default value is `file:///dev/null`.
- For the renderer protocol `purcmc`,
default value is `unix:///var/tmp/purcmc.sock`.
-t --request=< json_file | - >
The JSON file contains the request data which will be passed to
the HVML programs; use `-` if the JSON data will be given through
stdin stream.
-l --parallel
Execute multiple programs in parallel.
-s --verbose
Execute the program(s) with verbose output.
-c --copying
Display detailed copying information and exit.
-v --version
Display version information and exit.
-h --help
This help.
複数のランナーで HVML アプリを実行するPurC は、複数のランナーでのアプリの実行をサポートしています。
ここで、1 つ
runner
はプロセス内の 1 つのスレッドpurc
です。
この目的のために、アプリ、ランナー、
そして、異なるランナーでコルーチンとして実行される最初の HVML プログラム。
以下はサンプルです。
{
"app": "cn.fmsoft.hvml.sample",
"runners": [
{
"runner": "Products",
"renderer": { "protocol": "purcmc", "uri": "unix:///var/tmp/purcmc.sock",
"workspaceName": "default", "workspaceLayout": "cn.fmsoft.hvml.sample/layout.html" },
"coroutines": [
{ "url": "cn.fmsoft.hvml.sample/productlist.hvml", "request": {},
"renderer": { "pageType": "widget", "pageName": "productlist", "pageGroupId": "theProductsArea" }
},
{ "url": "cn.fmsoft.hvml.sample/productinfo.hvml", "request": { "productId": 0 },
"renderer": { "pageType": "widget", "pageName": "productinfo", "pageGroupId": "theProductsArea" }
}
]
},
{
"runner": "Customers",
"renderer": { "protocol": "purcmc", "uri": "unix:///var/tmp/purcmc.sock",
"workspaceName": "default", "workspaceLayout": "cn.fmsoft.hvml.sample/layout.html" },
"coroutines": [
{ "url": "cn.fmsoft.hvml.sample/customerlist.hvml", "request": {},
"renderer": { "pageType": "widget", "pageName": "customerlist", "pageGroupId": "theCustomersArea" }
},
{ "url": "cn.fmsoft.hvml.sample/customerlist.hvml", "request": { "customerId": 0 },
"renderer": { "pageType": "widget", "pageName": "customerinfo", "pageGroupId": "theCustomersArea" }
}
]
},
{
"runner": "Daemons",
"coroutines": [
{ "url": "cn.fmsoft.hvml.sample/check-customers.hvml", "request": { "interval": 10 } },
{ "url": "cn.fmsoft.hvml.sample/check-products.hvml", "request": { "interval": 30 } }
]
},
]
}
すべての HVML プログラムを準備し、上記の JSON を として保存するとします
cn.fmsoft.hvml.sample.json
。purc
次の方法で
実行できます。
$ purc cn.fmsoft.hvml.sample.json
この方法でアプリを実行する場合、
$OPTS
eJSON ファイルの解析時にによって準備され
た変数を介して、eJSON ファイルのコマンド ライン オプションを使用できpurc
ます。
これは、PurC によって導入されたパラメーター化された eJSON の典型的なアプリケーションを提供します。
たとえば、コマンド ライン オプションを指定できます。
$ purc --app=cn.fmsoft.hvml.sample my_app.ejson
次に、 in で指定されたオプションを使用し
--app
ますmy_app.ejson
。
{
"app": "$OPTS.app",
"runners": [
{
"runner": "Products",
"renderer": { "protocol": "purcmc", "uri": "unix:///var/tmp/purcmc.sock",
"workspaceName": "default", "workspaceLayout": "$OPTS.app/layout.html" },
"coroutines": [
{ "url": "cn.fmsoft.hvml.sample/productlist.hvml", "request": {},
"renderer": { "pageType": "widget", "pageName": "productlist", "pageGroupId": "theProductsArea" }
},
{ "url": "cn.fmsoft.hvml.sample/productinfo.hvml", "request": { "productId": 0 },
"renderer": { "pageType": "widget", "pageName": "productinfo", "pageGroupId": "theProductsArea" }
},
]
},
]
}
$OPTS.app
inのすべての出現my_app.ejson
箇所は に置き換えられcn.fmsoft.hvml.sample
ます。
その他の HVML サンプルリポジトリHVML ドキュメントで、さらに多くの HVML サンプル プログラムを見つけることができます。
ディレクトリの下
samples/
。
purc
リモート HVML ドキュメント リポジトリにあるサンプルを直接実行するために使用できます。
$ purc --data-fetcher=remote https://github.com/HVML/hvml-docs/raw/master/samples/fibonacci/fibonacci-6.hvml
ファイアウォールが URL への接続を拒否した場合は、次の URL を使用します。
$ purc --data-fetcher=remote https://gitlab.fmsoft.cn/hvml/hvml-docs/-/raw/master/samples/fibonacci/fibonacci-6.hvml
リモート URL からHVML
purc
プログラムをロードしようとすると、
デフォルトでは、リモート データ フェッチャーが使用されます。
したがって、事前に PurC Fetcher をインストールする必要があります。PurC Fetcher を構築してシステムにインストールする詳細な手順については、PurC Fetcher
を参照してください。
ハッキング PurC
現在のステータスこのプロジェクトは6月に発足しました。2021. これは PurC のバージョン 0.8.0 です。
PurC の主な目的は、独自の HVML インタープリターを作成するためのライブラリーを提供することです。
1 年間の開発を経て、現在のバージョンはHVML Specification V1.0で定義されたほぼすべての機能を実装しています。また、 HVML Predefined Variables V1.0
で定義されているほとんどすべての定義済み動的変数も実装しています。
HVML インタープリターを除いて、PurC は一般的な C プログラム用の多くの基本的な機能も提供します。
- PurC はバリアント管理用の API を提供します。ここで、バリアントは HVML プログラムがデータを管理する方法です。
- PurC は、JSON および拡張 JSON を解析するための API を提供します。
- PurC は、パラメーター化された eJSON 式を解析および評価するための API を提供します。
- PurC は、HTML ドキュメントを解析するための API を提供します。
これらの API グループは、必要に応じて個別に使用できます。
開発に参加し、あなたの努力に貢献してくれる人を歓迎します!
PurC のソース ツリーPurC は、パーサー、インタープリター、およびいくつかの組み込みの動的バリアントを実装します。
HVML のオブジェクト。主に C/C++ 言語で書かれており、バインディングを提供します。
将来的に Python やその他のスクリプト言語に対応します。
PurC のソース ツリーには、次のモジュールが含まれています。
Source/PurC/include/: グローバル ヘッダー ファイル。
Source/PurC/include/private: 内部共通ヘッダー ファイル。
Source/PurC/utils/: いくつかの基本的で一般的なユーティリティ。
Source/PurC/variant/: バリアントの実装。
Source/PurC/vcm/: バリアント作成モデル ツリーの操作。
Source/PurC/dvobjs/: 組み込みの動的バリアント オブジェクト。
Source/PurC/ejson/: eJSON パーサーの実装。eJSON パーサーは、eJSON を読み取り、バリアント作成モデル ツリーを構築します。
Source/PurC/dom/: DOM ツリーの実装。
Source/PurC/vdom/: 仮想 DOM ツリーの実装。
Source/PurC/html/: HTML パーサーの実装。HTML パーサーは、HTML ドキュメントまたはドキュメント フラグメントを読み取り、eDOM ツリーを構築します。
Source/PurC/hvml/: HVML パーサーの実装。HTML パーサーは HVML ドキュメントを読み取り、vDOM ツリーを構築します。
Source/PurC/xgml/: XGML パーサーの実装 (まだ実装されていません)。XGML パーサーは、XGML ドキュメントまたはドキュメント フラグメントを読み取り、eDOM ツリーを構築します。
Source/PurC/xml/: XML パーサー (まだ実装されていません)。XML パーサーは、XML ドキュメントまたはドキュメント フラグメントを解析し、eDOM ツリーを構築します。
Source/PurC/instance/: PurC インスタンスとセッションの操作。
Source/PurC/fetchers/: さまざまなデータ ソース (FILE、HTTP、FTP など) からデータをフェッチするためのデータ フェッチャー。
Source/PurC/executors/: 内部エグゼキューターの実装。
Source/PurC/interpreter/: vDOM インタープリター。
Source/PurC/pcrdr/: レンダラーへの接続の管理。
Source/PurC/ports/: POSIX 準拠システムや Windows など、さまざまなオペレーティング システムのポート。
Source/PurC/bindings/: Python、Lua、およびその他のプログラミング言語のバインディング。
Source/ExtDVObjs/math/: 外部動的バリアント オブジェクトの実装
$MATH。
Source/ExtDVObjs/fs/: 外部動的バリアント オブジェクト
$FSとの実装
$FILE。
Source/WTF/: WebKit の簡略化された WTF (Web Template Framework)。
Source/cmake/: cmake モジュール。
Source/ThirdParty/: などのサードパーティ ライブラリ
gtest。
Source/test/: 単体テスト プログラム。
Source/Samples/api: PurC の API を使用するためのサンプル。
Source/Samples/hvml: HVML サンプル プログラム。
Source/Tools/: ツール (実行可能ファイル)、つまりコマンド ライン プログラム。
Source/Tools/purc: 対話型コマンド ライン プログラムである PurC ベースのスタンドアロン HVML インタープリター/デバッガー。
Documents/: 開発者向けのドキュメント。
PurC の HTML パーサーと DOM 操作は、次のものから派生していることに注意してください。
For detailed TODO list, please see TODO List.
For the release notes, please refer to Release Notes.
For the community conduct, please refer to Code of Conduct.
For the coding convention, please refer to Coding Convention.
FILE.
Copyright (C) 2021, 2022 FMSoft Technologies
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Copyright (C) 2022 LIU Xin
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Copyright (C) 2022 FMSoft Technologies
This program is free software: you can redistribute it and/or modify によって発行された GNU General Public License の条件の下で Free Software Foundation、バージョン 3 のライセンス、または (オプションで)それ以降のバージョン。
このプログラムは、役に立つことを願って配布されていますが、 ただし、いかなる保証もありません。黙示の保証すらなしに 商品性または特定の目的への適合性。を参照してください 詳細については、GNU General Public License を参照してください。
GNU General Public License のコピーを受け取っているはずです この番組と共に。そうでない場合は、https://www.gnu.org/licenses/を参照してください。
HVMLは、中国およびその他の国または地域におけるFMSoft Technologiesの登録商標です。
呼噜猫は、中国およびその他の国または地域におけるFMSoft Technologiesの登録商標です。
Purring Catは、中国およびその他の国または地域におけるFMSoft Technologiesの商標です。
PurCは、中国およびその他の国または地域におけるFMSoft Technologiesの商標です。
xGUIは、中国およびその他の国または地域におけるFMSoft Technologiesの商標です。