Trainz/refs/ACS 文字格式
| 詞彙表 |
| HKeys-CM |
| HKeys-DVR |
| HKeys-SUR |
| HKeys-WIN |
| 滑鼠使用 |
| 符號 |
操作說明:點選正文中的腳註 ([2]) 或腳註標籤 ([note 12]) 將導航您(定位頁面)到該條目的確切文字。 • 然後:點選那裡的?符號,將使您返回到您開始閱讀的地方。 |
ACS 文字格式 是一種由 Auran 定義的國際語言支援的文字格式,用於儲存 config.txt 檔案 和其他通用鍵值資料。最簡單的說,ACS 文字檔案是一個用 UTF-8 編碼的標準文字檔案。
在歷史上,ACS 文字檔案必須以 Unicode BOM 序列(位元組順序標記)開頭,這通常由匯出或匯入模組在建立資產的過程中初始化。然而,雖然這通常仍然推薦,但自從 2005 年 TRS2006 釋出以及放棄將 GMAX 與 Trainz 捆綁在一起的做法以來,這不再是嚴格要求的。
|
- 用程式設計師的行話
- 一個 '鍵' (或 '關鍵字')是一個 '特定' 的人類和機器可讀的 '識別符號', 專門指屬於一組此類合法可指定的 識別符號 的唯一或 列舉 性質。這些鍵是將含義從人類翻譯成機器 CPU 時使用的詞法識別符號。如果該術語不合法,則機器的軟體無法解釋並賦予拼寫(或拼寫錯誤)的術語意義。[注 1] 一個簡單的現實是,如果一個術語拼寫錯誤,計算機就無法匹配該值,並且不知道如何處理該結構(行)。這是一個故障或錯誤,通常會造成處理停止,或者至少生成一個記錄術語不匹配的列表。
- 一個 '值' — 這些通常是嚴格定義的型別,從基本的機器依賴資料元素到這些元素組合成更復雜的資料型別。例如,在某些編碼方案中,一個字元是一個簡單的 8 位位元組值,但在 Unicode 中是一個兩個位元組的序列。字串是陣列中的一系列字元。顯然,後者的尺寸是單個位元組字元字串的兩倍。
- '無序' 列表是資料行,可以重新排列而不會對含義產生負面影響。 — 您將在 Trainz 配置檔案中很快看到,標籤或容器可以出現在其適當容器中的任何位置,配置檔案是其中一個這樣的容器,它包含其他容器。資料出現順序與它被列出和讀取的時間無關。
- '處理範圍' — 意味著在特定情況的瞬時子程式、子例程或處理程式內(即一些預測和處理的上下文',因此是特定的 '過程')
- "ACS 文字檔案包含一個無序的 鍵值 對列表。在任何給定的處理範圍中,每個鍵都必須是唯一的。"
- 透過這種方式,N3V 程式設計師指的是一些標籤名稱並非對特定的 種類 或 容器 是唯一的,而是根據上下文在這些上下文中重複使用,並且上下文處理軟體 — 處理這種容器及其值的子例程,知道它在做什麼,並且它不是該合法上下文中的另一個 L 值 — R 值合法對。新使用者應將 標籤和容器索引表 和其中的父子關係新增到書籤並經常參考。
- 為了一個具體且常見的例子:今天,標籤 'region' 是一個配置檔案容器(配置檔案)合法值,僅在 種類地圖 資產中合法(從約 V2.5 - V2.7,TR06 時代開始),因此它被分組在 KIND 地圖中,與其他特定於地圖或定義地圖所需的標籤一起。此外,您將體驗到其他配置檔案容器,它們也具有 region 作為合法標籤名稱,但它們的 TBV 將更低。也就是說,如果配置檔案/資產更新到更高的 TBV,'region' 將會生成一個錯誤,而不是警告。
- 那,舊內容使用一個現在非法的字串值作為 R 值,例如 'United Kingdom'、'United States' 或 'Australia',幾乎在當時的 EVERY KIND OF ASSET 中 — 但在 TR06 之後更高版本的 TBV 中會建立一個錯誤訊息,因為該關鍵字現在僅在需要指向 種類地區 的地圖配置檔案容器中合法,該容器定義了諸如基準(中心)緯度、經度、半球、水色、基準高度、預設連線杆以及特定地區和時期的道路車輛列表等內容,所以(哎呀!)2021 年的義大利或俄羅斯汽車不會出現在 1925 年的北美道路上(哎呀!)或冬季、秋季和春季都會因為 “密歇根州地圖資料夾” 錯誤地位於赤道以南的某個地方而無法顯示(哎呀!)並且日出和日落反映了該地區,而不是美國北部。哦,我的天哪!
- 技術極客語言...
- 這裡的狡猾短語是直接引用 N3V Wiki 源頁面(連結在頁面底部),我們希望解釋和定義短語能夠使極客語言變得易於理解和理解,以便外行人能夠內化含義並使含義 '掌握' 並 '可控制'。
關於 '程式設計師'' 稱為上下文無關文法,面向外行讀者
- EBNF 字串
'::='是將右側的 值 ('R 值')賦值給左側的術語(變數鍵或關鍵字)的通用賦值運算子 ('L 值')。 (這主要是因為主要語言之間對賦值和等號運算子存在不同的解釋。[注 2])
在下面的抽象中, '|' (管道字元) 用於表示 布林 'OR' 運算子,因此下面定義通用鍵的分隔符(分隔符)的第一行可以翻譯為
鍵值對可以用 擴充套件巴克斯-諾爾正規化 (EBNF) (元語法 形成上下文無關文法) 如下定義
- 觀察以下從上到下的鏈式定義術語或這些行的語法... 整個鏈式定義是獨立的。
<singlespace> ::= ' ' | <TAB> ;
<whitespace> ::= <singlespace> | { <singlespace> } ;
<line-start> ::= { <whitespace> | <EOL> } ;
<key-value-pair> ::= <line-start> <key> <whitespace> <value> <EOL> ;
<acs-text-file> ::= [ <unicode-bom> ] { <key-value-pair> } <line-start> ;
- (我從 1976 年就開始程式設計了,即使是我的眼睛也因為閱讀和試圖理解這些內容而變得模糊不清... 所以我們在這裡在華夏公益教科書中為你編寫!)
- 需要注意的是,<value> 在某些情況下可能會跨越多行。在 Trainz 中,值總是用雙引號 (" 字元或成對的花括號字元:'{' 和 '}' 分隔。Trainz 值也可以是未定義的或 NIL。演示這些的資產通常是可選的,一些是較新的標籤,較新的軟體會為較舊的內容預設使用這些標籤,而這些內容在它生成的版本時代沒有選項。
- 將 '[' ... ']' 翻譯成可選。
- N3V 的標準宣告為 <acs-text-file> ::= [ <unicode-bom> ] { <key-value-pair> } <line-start> ;
- 以空行開頭,或者(可選地...)以包含 Unicode 位元組順序標記的開頭[注 3]
- 用外行人的術語
Auran/N3V 建立了一個數據結構系統,其中包含鍵值對,一些值是複雜型別,可以包含其他簡單和複雜型別。
這些被稱為資料結構,例如結構體、聯合體或陣列,在許多語言中,尤其是C語言衍生的計算機語言,在Trainz中通常被統稱為“容器”。當您看到一個容器包含另一個容器時,您正在處理一個結構,該結構的一部分是另一個結構型別,例如陣列(例如乘客列表產品型別)或轉向架(卡車,指定車輪、X、y、z 安裝點因素、安裝型別等,但所有與其他因素相關的資料,因此“**分組在一起**”,因為它是一起使用的,這也是我們人類對其理解的最佳方式)。
- 本節介紹在 Trainz 中建立鍵名或標籤的過程。普通使用者不需要處理這些內容,但內容建立者,特別是指令碼編寫者可能會使用,並且很有可能會用到它。
- 儘管如此,這些限制也適用於檔名,因此使用違反此標準的使用者名稱可能會在驗證時失敗。不過,如果您喜歡錯誤訊息,請隨意使用。
一個**鍵**(**鍵名**)是一個最多包含 511 位元組的 Unicode 字元序列。控制字元 (ASCII 0..31) 和空格字元 (ASCII 32) 不允許。大寫 ASCII 字元 (ASCII 64..89) 不允許。左大括號字元 (ASCII 123) 不允許作為鍵的第一個字元。右大括號字元 (ASCII 125) 不允許。
為了保證未來的相容性,強烈建議在構建符合此“ACS 文字檔案標準”的 config.txt 時,實現限制鍵使用以下字元集。在解析 ACS 文字檔案時,實現必須接受所有有效字元。
- 'a' .. 'z'
- '0' .. '9'
- '-'
- '/'
- '_'
注意這些關鍵省略'\', ':', ';', '`', '~',, '@', '*', '#', '$', '%', '^', '&', '{', '[', ')', ']'
每個值可以包含零個或多個 UTF-8 字元。有幾種型別的值可以使用唯一的編碼。值型別是根據標籤和/或值內容自動識別的,不會將任何型別資訊寫入檔案。
<value> ::= <null-value> | <numeric-value> | <numeric-array-value> | <string-value> | <kuid-value> | <container-value> ;
空值實際上是一個零長度的值。
<null-value> ::= [ <whitespace> ] ;
數值是整數或小數表示形式。
<number> ::= [ "-" ] <digit> { <digit> } [ "." <digit> { <digit> } ] ;
<numeric-value> ::= <number> [ <whitespace> ] ;
數值陣列值是一個由多個數字組成的序列,用逗號隔開。
<array-separator> ::= [ <whitespace> ] "," [ <whitespace> ] ;
<numeric-array-value> ::= <number> <array-separator> { <number> <array-separator> } <number> [ <whitespace> ] ;
字串值是由雙引號 (ASCII 34) 包圍的零個或多個 UTF-8 字元序列。雙引號字元 (ASCII 34) ('"')、冒號 (':')、正斜槓 (ASCII 47) ('/') 和反斜槓字元 (ASCII 92) ('\') 的出現次數有嚴格的規定。除了作為 Windows OS 路徑規範 的一部分,所有字元在字串值中都是禁止使用的,從技術上講,此類引數是字串而不是字串值,相比之下,字串值只是簡單的術語。
示例: 一些道路交叉口可以透過選擇列舉的字串值數值來自動更換皮膚,該數值索引了相應的紋理庫資產。術語{'字串值數值' 僅僅意味著它是一個作為字串傳遞給軟體的數字欄位,因為確定資料元素型別和大小的軟體比直接在引號之間輸入數字資料要複雜得多。
簡而言之,它簡化了值的輸入和通訊。
• 另一些則可以使用名稱,例如在標誌和一般建築物中,以及大多數較舊的火車站模型中。
• 相反,一些資產使用字串值傳遞值來控制更復雜的事物,例如用於設定已故 Andi06 的無形火車站的數字和文字值的混合,其中數字定義了站臺乘客限制、起始編號和車站名稱,就像自 TR2004 以來所有互動式車站一樣,但同時:站臺高度、站臺曲線、站臺長度(由於是無形的,它必須被與之匹配的樣條線或塊狀物體覆蓋)、軌道數量及其指定(在某些情況下),沒有人喜歡模擬乘客漂浮在彎曲軌道的鐵軌上,或者那些站在鋪砌的路上,或者在站臺甲板上方盤旋 6-10 英寸。
以下真實世界的片段有幾個很好的示例。首先,請注意,實際字串值用於在 TRAINZ 資料模型中定義變數,這些變數也可以被歸類為程式設計師和程式程式碼關注的值。它們的作用實際上是將資訊傳遞給該程式碼,以影響操作,無論是數字模型的外觀,還是數字模型的行為(如果資產在某種程度上是可程式設計的)。
load4
{
size 2
initial-count 0
attachment-points
{
0 "a.gen_goods2"
1 "a.gen_goods9"
}
allowed-products
{
0 <kuid:57344:10003>
}
conflicts-with-queues
{
0 "load0"
1 "load1"
2 "load2 "
3 "load3"
}
}
}
上面的 Load 容器和子容器都是字串值,並且都不應該遵循字串處理規則。實際上,上面有一個(以及此資產中相關子容器中的另一個)是錯誤的,並且無法在 Trainz 中載入,因為它違反了字串值處理例程的解析規則......您能找到它嗎?答案在下面的這個註釋[註釋 4]中給出。
字串不同於字串值,兩者都是不同性質的列舉值,......它們的上下文和預期長度,透過應用於它們的編碼(或規則、演算法無論什麼)在多行上擴充套件,這些都是字串。關鍵是長度、允許和上述字串值禁止包含/包含換行符和任何型別的終止空白字元。字串可以跨多行繼續,並且可以包含空白(包括換行符或 CR-LF ASCII EOL 序列)和終止空白字元(空格或製表符)在閉合引號之前。分隔符是包含的引號。
<string-value> ::= <double-quote> { <string-character> } <double-quote> [ <whitespace> ] ;
Trainz 不直接禁止冒號、正斜槓和反斜槓字元,但 Windows 禁止,因此任何包含這三個字元中的任何一個的路徑規範都必須引用目錄層次結構。[註釋 5] 同時,Trainz 不會在檔案規範中允許某些字元,而 Windows 則完全可以接受在資料夾或檔名中使用這些字元。(.e.g. '/', '\', '(' and ')' (圓括號) 可以是 使用者名稱 的一部分,當這種情況為真時,它們的資料夾在開啟以編輯時永遠不會在 OS 檔名中包含這些字元,而是用下劃線 '_' 替換。在讀取檔案時,Trainz 的 CM 也會在檔名包含分號:';' 時出現問題,但會容忍它作為輸入(源)資料夾名稱的一部分,例如:"File kuid2 56063 101000 1;v2-1;Boxcar traincar;40ftBoxcar_LehighValley1000_LARS-aRus"(剛剛從此係統的存檔資料夾名稱中摘錄。[註釋 6])
KUID 值是在 kuid 有效格式 中的單個 KUID。
<kuid-value> ::= <KUID> [ <whitespace> ] ;
容器值在多行上巢狀其他鍵值對。
<container-value> ::= [ <EOL> ] "{" <EOL> { <key-value-pair> } <line-start> "}" ;
“ACS 文字格式”在技術上是一種無序的鍵值對集合,但是所有現有的實現都保留了對簡單(讀寫)操作的順序。建議未來的實現保持這一約定。
在解析期間檢測到格式違規的影響是未定義的。遵循此規範的實現不得生成違反此規範任何方面的檔案。
| 此參考頁面改編自TrainzOnline Wiki,根據CC-BY-SA 3.0 許可證。此頁面可能會包含比同一主題的源頁面更詳細的文字解釋、說明、歷史記錄和/或示例。 TrainzOnline Wiki 在很大程度上由程式設計師或精通內容創作者維護,並且可能包含有關當前trainz-build 程式碼標準的更新、更準確的資訊,這些標準在軟體功能新增時有變化的趨勢。 |

