一個簡單的庫,可查找Windows,Linux和Mac的字體。
將其直接安裝為:
gem install fontist或通過將此行添加到應用程序的Gemfile中:將其用作捆綁包的一部分:
gem "fontist"然後執行:
bundle install安裝後,請通過fontist命令獲取公式:
fontist update取決於具有以下要求的FFI-Libarchive二進製文件:
Zlib
外籍
OpenSSL(僅適用於Linux)
這些依賴性通常都存在於所有系統上。
fontist命令這些命令可以通過命令行使用字體操作。
CLI適當支持退出狀態,因此在錯誤的情況下,它將狀態代碼更高或等於1 。
搜索對易於使用的案例不敏感。
所有命令都支持以下全局選項:
--preferred-family使用字體的“首選家庭”名稱搜索。 (而不是字體v1.10之前的“默認家庭”名稱。)
筆記 | 有關“首選家庭”和“默認家庭”之間的差異,請參見v1.10+。 |
-q, --quiet打印盡可能少的信息,主要是關鍵錯誤。
-v, --verbose將日誌級別設置為調試。它打印在安裝過程中排除的公式,並為Fontist的開發人員提供信息。
-c, --no-cache即使文件已經在系統中緩存,也希望直接下載。
fontist installFontist檢查該字體是否已經安裝,如果沒有安裝,則安裝字體並返回其已安裝的路徑。
字體名稱是唯一提供的參數。
$ fontist install " segoe ui "
These fonts are found or installed:
- /Users/user/.fontist/fonts/SEGOEUI.TTF
- /Users/user/.fontist/fonts/SEGOEUIB.TTF
- /Users/user/.fontist/fonts/SEGOEUII.TTF
- /Users/user/.fontist/fonts/SEGOEUIZ.TTF默認情況下,安裝了所有匹配樣式(根據字體的“默認家庭”名稱)。
筆記 | 在V1.10之前,該字體的“首選家庭”名稱用於匹配搜索樣式。有關此更改的詳細信息,請參見v1.10+。 |
要安裝在字體公式中指定的所有字體,請使用-F, --formula選項。
$ fontist install --formula ' courier_prime '
Downloading font ...
Installing font " courier_prime " .
Fonts installed at:
- /Users/user/.fontist/fonts/Courier Prime Bold Italic.ttf
- /Users/user/.fontist/fonts/Courier Prime Bold.ttf
- /Users/user/.fontist/fonts/Courier Prime Italic.ttf
- /Users/user/.fontist/fonts/Courier Prime.ttf在這裡, courier_prime是位於公共字體公式存儲庫( courier_prime.yml )的公式的文件名。
您還可以指定公式的人類可讀名稱。此名稱源自文件名,下劃線被空間取代。這不是針對大小寫的,這意味著您可以使用大寫字母。
$ fontist install --formula " Courier Prime "
$ fontist install --formula " Google/Noto Sans "當輸入部分時,公式名稱安裝公式名稱支持CLI中的建議:
$ fontist install --formula ' noto s '
Formula ' noto s ' not found. Did you mean ?
[0] Google/Noto Sans
[1] Google/Noto Serif
Please type number or press ENTER to skip installation:筆記 | 尚不支持指定字體的文件名。 |
如果有幾種帶有請求的字體的公式,則fontist搜索在公式中的最新版本,大小低於極限(300 MB)。可以通過選項更改此行為。
筆記 | 如果字體的樣式分佈在幾個公式之間,則將安裝所有配方中的所有可用樣式。 |
筆記 | 某些公式可能具有min_fontist屬性,該屬性定義了可以安裝它們的最小版本。如果fontist為較舊的版本,則可以避免使用公式。為了查看搜索中排除哪些公式,可以指定-v, --verbose選項。 |
支持的選項:
-f, [--force]即使已經安裝在系統中
-F, [--formula]安裝整個公式而不是字體
-a, [--accept-all-licenses]接受所有許可協議
-h, [--hide-licenses]隱藏許可證文本
-p, [--no-progress]隱藏下載進度
-V, [--version=VERSION]安裝字體的特定版本
-s, [--smallest]如果多個,請按文件大小安裝最小的字體
-n, [--newest]如果多個,請安裝字體的最新版本
-S, [--size-limit=N]指定要安裝公式的文件大小的上限(默認為300 MB)
-u, [--update-fontconfig]更新fontconfig
筆記 | install命令類似於Font.install庫調用。 |
fontist uninstall卸載字體支持的任何字體。
返回卸載字體的路徑,或打印出錯誤,告訴字體未安裝或在字體公式中找不到。將其刪除為remove 。
$ fontist uninstall " segoe ui "
These fonts are removed:
/Users/user/.fontist/fonts/SEGOEUII.TTF
/Users/user/.fontist/fonts/SEGOEUIZ.TTF
/Users/user/.fontist/fonts/SEGOEUIB.TTF
/Users/user/.fontist/fonts/SEGOEUI.TTFfontist status打印安裝了具有相應公式的字體路徑。
$ fontist status " segoe ui "
Fonts found at:
- /Users/user/.fontist/fonts/SEGOEUII.TTF (from segoe_ui formula)
- /Users/user/.fontist/fonts/SEGOEUIZ.TTF (from segoe_ui formula)
- /Users/user/.fontist/fonts/SEGOEUIB.TTF (from segoe_ui formula)
- /Users/user/.fontist/fonts/SEGOEUI.TTF (from segoe_ui formula)fontist list列表字體的安裝狀態由字體支持。
$ fontist list " segoe ui "
segoe_ui
Segoe UI
Regular (installed)
Bold (installed)
Italic (installed)
Bold Italic (installed)$ fontist list " roboto mono "
google/roboto_mono
Roboto Mono
Regular (not installed)
Italic (not installed)fontist manifest-locations返回YAML文件中指定的字體的位置作為輸入。
$ fontist manifest-locations MANIFEST_FILE MANIFEST_FILE是清單文件的位置,其中包含一種或多個字體和字體樣式的規範。
清單文件manifest.yml看起來像:
Segoe UI :
- Regular
- Bold
Roboto Mono :
- Regular以下命令將返回以下YAML輸出:
$ fontist manifest-locations manifest.yml---
Segoe UI :
Regular :
full_name : Segoe UI
paths :
- " /Users/user/.fontist/fonts/SEGOEUI.TTF "
Bold :
full_name : Segoe UI Bold
paths :
- " /Users/user/.fontist/fonts/SEGOEUIB.TTF "
Roboto Mono :
Regular :
full_name : Roboto Mono Regular
paths :
- " /Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf "如果缺少一個或多個請求的字體,則將返回“ 3”錯誤代碼,並打印一條消息:
$ fontist manifest-locations manifest.yml
' Roboto Mono ' ' Regular ' font is missing, please run ` fontist install ' Roboto Mono ' ` to download the font.
$ echo $?
3fontist manifest-install從YAML字體清單中安裝字體:
$ fontist manifest-install --confirm-license manifest.yml manifest.yaml是:
---
Segoe UI :
Regular :
full_name : Segoe UI
paths :
- " /Users/user/.fontist/fonts/SEGOEUI.TTF "
Bold :
full_name : Segoe UI Bold
paths :
- " /Users/user/.fontist/fonts/SEGOEUIB.TTF "
Roboto Mono :
Regular :
full_name : Roboto Mono Regular
paths :
- " /Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf "fontist config字體支持以下參數的全系統設置:
fonts_path設置要安裝字體的路徑(默認: ~/.fontist/fonts fonts )
open_timeout設置下載過程中打開連接的超時(默認: 10 )
read_timeout設置下載過程中讀取打開連接的超時(默認: 10 )
在配置中顯示當前屬性:
$ fontist config show
Current config:
read_timeout: 5將值分配給屬性:
$ fontist config set read_timeout 60還原屬性的默認值:
$ fontist config delete read_timeoutfontist fontconfigFontConfig是一種旨在為其他程序提供字體的軟件。它通常在Linux上使用,但也可在MacOS和Windows上使用。 FontConfig由Libreoffice,GIMP和許多其他程序使用。
它是為了找到字體字體,應更新fontconfig,以包含字體路徑。可以使用install命令的--update-fontconfig選項完成,也可以通過調用特殊命令來完成:
$ fontist fontconfig update它將在~/.config/fontconfig/conf.d/10-fontist.conf中創建一個配置。
要刪除它,請使用:
$ fontist fontconfig remove$ fontist cache clear上面的命令將清除字體的下載緩存
fontist help所有命令列表可以通過:
fontist help默認情況下,通俗使用~/.fontist目錄來存儲字體及其文件。可以通過FONTIST_PATH環境變量更改它。
FONTIST_PATH= ~ /.fontist_new fontist updateFontist::Font Fontist::Font是您使用字體處理任何字體的選擇。
該接口允許您找到字體或安裝字體。
Fontist::Font.find接口可以使用系統中的字體。
它將查看操作系統特定的字體目錄,以及字體特定的~/.fontist目錄。
Fontist :: Font . find ( name )如果字體找到了字體,則它將返迴路徑。
否則,它將提出不支持的字體錯誤,或者觸發該特定字體的安裝說明。
Fontist::Font.install接口可用於安裝任何受支持的字體。
該接口首先檢查您是否已經安裝了該字體,如果您這樣做,它將返迴路徑。
如果您沒有字體,但是該字體得到了字體的支持,則它將下載字體並將其複製到~/.fontist目錄並返迴路徑。
Fontist :: Font . install ( name , confirmation : "no" )如果提供的字體檢測到問題,例如不支持字體,則會提出這些錯誤。
Fontist::Font接口公開了一個接口,以列出所有受支持的字體。
如果想知道字體或可用樣式的名稱,這可能很有用。您可以使用以下方法來做到這一點:
Fontist :: Font . all返回值是OpenStruct對象,因此您可以輕鬆執行任何在任何Ruby對像中執行的操作。
Fontist::Formula fontist符在內部使用Fontist::Formula接口,以找到任何公式支持的註冊公式或字體。除非您需要做任何事情,否則您不需要直接使用此接口。但是,如果這樣做,則這些是它提供的公共界面。
Fontist::Formula.find接口允許您找到任何註冊公式。該界面以字體名稱作為參數,並通過提供此字體安裝的每個註冊公式查看。用法:
Fontist :: Formula . find ( "Calibri" )此方法將搜索並返回通用公式為提供的關鍵字,該公式允許進一步處理,例如許可證檢查或在系統中安裝字體。
通常,每個字體名稱可以與多種樣式或集合相關聯,例如, Calibri字體可能包含regular , bold或italic樣式字體,如果您想要一個可以返回完整列表的界面,則這是您的朋友。
您可以按照以下方式使用它:
Fontist :: Formula . find_fonts ( "Calibri" ) Fontist::Formula接口公開了一個接口,以列出所有已註冊的字體公式。如果想知道公式的名稱或使用該公式可以安裝哪種類型字體,這可能會很有用。用法:
Fontist :: Formula . all返回值是OpenStruct對象,因此您可以輕鬆執行任何在任何Ruby對像中執行的操作。
Fontist::Manifest 可以切換說明書以使用首選的姓氏。該格式在v1.10之前使用。
Fontist . preferred_family = true Fontist::Manifest::Locations字體可讓您以以下格式從定義的清單哈希找到字體位置:
{
"Segoe UI" => [ "Regular" , "Bold" ] ,
"Roboto Mono" => [ "Regular" ]
}調用以下代碼返回帶有字體路徑和名稱的嵌套哈希。字體名稱對於在字體集合文件(TTC)中選擇特定字體很有用。
Fontist :: Manifest :: Locations . from_hash ( manifest ) {
"Segoe UI" => {
"Regular" => {
"full_name" => "Segoe UI" ,
"paths" => [ "/Users/user/.fontist/fonts/SEGOEUI.TTF" ]
} ,
"Bold" => {
"full_name" => "Segoe UI Bold" ,
"paths" => [ "/Users/user/.fontist/fonts/SEGOEUIB.TTF" ]
}
} ,
"Roboto Mono" => {
"Regular" => {
"full_name" => nil ,
"paths" => [ ]
}
}
} Fontist::Manifest::Install通話師不僅可以獲取字體位置,還可以從清單中安裝字體:
Fontist :: Manifest :: Install . from_hash ( manifest , confirmation : "yes" )它將安裝字體並返回其位置:
{
"Segoe UI" => {
"Regular" => {
"full_name" => "Segoe UI" ,
"paths" => [ "/Users/user/.fontist/fonts/SEGOEUI.TTF" ] } ,
"Bold" => {
"full_name" => "Segoe UI Bold" ,
"paths" => [ "/Users/user/.fontist/fonts/SEGOEUIB.TTF" ]
}
} ,
"Roboto Mono" => {
"Regular" => {
"full_name" => "Roboto Mono Regular" ,
"paths" => [ "/Users/user/.fontist/fonts/RobotoMono-VariableFont_wght.ttf" ]
}
}
} 這兩個命令都支持yaml文件作為使用from_file方法的輸入。例如,如果有一個manifest.yml 。
---
Segoe UI :
- Regular
- Bold
Roboto Mono :
- Regular然後,以下呼叫將返回字體名稱和路徑,如從from_hash方法(請參閱Fontist::Manifest::Install and install and Fontist::Manifest::Locations )。
Fontist :: Manifest :: Locations . from_file ( "manifest.yml" )
Fontist :: Manifest :: Install . from_file ( "manifest.yml" , confirmation : "yes" )Fontist::FontconfigFontist支持通過Ruby接口與FontConfig合作:
Fontist :: Fontconfig . update # let detect fontist fonts
Fontist :: Fontconfig . remove # disable detection
Fontist :: Fontconfig . remove ( force : true ) # do not fail if no config exists MACOS的新版本提供了各種許可字體的按需安裝。這些特定於MACOS的附加字體可以通過字體安裝。
安裝MACOS附加字體的典型用途是允許MacOS環境上的CI作業使用其他平台上沒有這些特殊許可的字體。
這篇博客文章描述了這是如何工作的:
字體博客:安裝特定於MACOS的附加字體
例如,“ Canela”字體是一種帶有MacOS免費的商業字體。
運行此命令以在MacOS上安裝Canela。
$ fontist install Canela可以在Apple支持網站上找到各種MacOS版本上可用字體的完整列表:
Macos的字體13 Ventura
Macos 12蒙特雷的字體
Macos 11 Big Sur中的字體
警告 | 字體由於字體許可限制了這些字體,因此不允許在非MACOS平台上安裝MACOS特定字體。 |
NISC18030.TTF(GB18030位圖) - MacOS,NISC18030中的更多信息
已知有問題字體的完整列表:
用法排除字體列表
Fontist在內部使用git來獲取公式和字體。
為了使用代理後面的Git功能,您需要通過git config命令或~/.gitconfig偏好文件更新自己的git配置。
有很多方法可以配置您的本地git安裝以使用代理。
為GIT設置代理的最簡單,全局的方式是以下內容。
對於http
git config --global http.proxy http://{user}:{pass}@{proxyhost}:{port}對於HTTPS,您可能需要在設置代理後處理SSL/TLS驗證錯誤,因為加密端位於您的HTTPS代理端點上:
git config --global http.proxy https://{user}:{pass}@{proxyhost}:{port}
git config --global https.proxy https://{user}:{pass}@{proxyhost}:{port}對於襪子,您需要決定襪子協議
git config --global http.proxy ' {protocol}://{user}:{pass}@{proxyhost}:{port} '
git config --global https.proxy ' {protocol}://{user}:{pass}@{proxyhost}:{port} '例如,
git config --global http.proxy ' socks5h://user:[email protected] '
git config --global https.proxy ' socks5h://user:[email protected] ' {protocol}字段的支持的襪子協議列表:
socks:// :對於V5以下的襪子
socks5:// :對於襪子V5
socks5h:// :對於V5 +主機通過襪子分辨率下方的襪子
實際上,您可以為單個GIT存儲庫設置不同的代理行為 - 請參閱有關如何使用Git代理的精彩指南(感謝Github用戶Evantoli)。
通話庫存儲庫是一個包含yaml公式文件的git回購。可以在字體存儲庫中手動創建Fontist公式(請參見示例),也可以從字體存檔自動生成。
可以通過HTTPS或SSH訪問Fontist存儲庫。如果SSH,則應使用ssh-agent設置相應的SSH鍵,以訪問此自定義存儲庫。
fontist repo setup命令獲取自定義存儲庫的公式,並存儲存儲庫的名稱和URL以供以後使用。
fontist repo setup命令使用以下語法。
fontist repo setup NAME URL在內部,所有自定義的字體存儲庫信息都存儲在~/.fontist/formulas/Formulas/private 。
例如,給定一個名為“ ACME”的通用存儲庫可以通過URL或SSH地址訪問:
fontist repo setup acme https://example.com/acme/formulas.git
# or
fontist repo setup acme [email protected]:acme/formulas.gitfontist repo list設置自定義字體存儲庫後,可以通過其公式從存儲庫中安裝字體:
fontist install " custom font "如果更新了自定義字體公式存儲庫,則使用repo update命令來進行最新的更改:
fontist repo update NAME例如,給定一個名為“ ACME”的通用存儲庫,使用以下命令。
fontist repo update acme如果需要刪除已註冊的字體存儲庫,則可以將存儲庫刪除:
fontist repo remove acme可以將自定義的字體公式和字體存儲庫私有化以需要身份驗證。
用於HTTPS和SSH GIT Fontist存儲庫
可以通過標題實施私人公式的私人檔案授權。
這是一個與GitHub版本一起使用的示例:
resources :
fonts.zip :
urls :
- url : https://example.com/repos/acme/formulas/releases/assets/38777461
headers :
Accept : application/octet-stream
Authorization : token ghp_1234567890abcdefghi如果字體公式存儲庫是github存儲庫,則可以在github設置>“令牌”頁面上獲得令牌。這個令牌至少應該具有訪問這些資產的repo範圍。
可以輕鬆地用YAML手工製作Fontist公式。但是,建議使用自動生成方法以進行數據準確性和便利性。
可以從字體存檔生成公式。
fontist create-formula命令允許以多種格式(包括ZIP,7Z,GZIP,GZIP,TAR,CAB,EXE)從字體存檔中檢測所有字體文件。
fontist create-formula命令支持位於遠程URL或本地文件路徑的檔案。
對於文件路徑,將文件路徑指定為參數:
wget https://www.latofonts.com/files/Lato2OFL.zip
fontist create-formula lato.zip對於URL,只需將URL指定為參數:
fontist create-formula https://www.latofonts.com/files/Lato2OFL.zip
# > file created at lato.yml because the file downloaded is lato.zip為了測試創建的公式,可以將公式複製到用戶的私人公式存儲庫位置。
fontist create-formula https://www.latofonts.com/files/Lato2OFL.zip
cp lato.yml ~ /.fontist/formulas/Formulas/fontist create-formula命令使用OTF元數據部分中嵌入的信息創建字體公式。
但是,某些字體(例如較舊的字體)通常包含不一致或不完美的元數據信息。例如,某些字體為不同的字體樣式應用了不同的OTF Family值。這將導致所有字體樣式未在同一家庭中註冊。
Fontist公式的作者可以使用override:鍵糾正這種情況,該鍵允許公式從字體元數據獲得覆蓋元數據信息。
筆記 | override密鑰不會引起字體文件的任何更改,僅用於更新Fontist在內部使用的信息。 |
在單個字體樣式的定義下, override密鑰存在:
resources :
...
fonts :
- name : Original font name
styles :
- family_name : Original family name
type : Original style
override :
family_name : Overridden family name
type : Overridden style
preferred_family_name : Overridden preferred family name例如,Adobe在1994年發表的“ Frutiger”字體使用數字來表示單個字體樣式,並將這些名稱嵌入OTF Family領域,例如“ Frutiger 45 Light”。這些字體也不使用OTF Preferred Family領域,因為它們的年齡,這是OTF的最新添加。
這是override屬性如何執行以同一姓名註冊的所有相關樣式(通過覆蓋preferred_family_name值):
...
resources :
...
fonts :
- name : Frutiger 45 Light
styles :
- family_name : Frutiger 45 Light
type : Regular
full_name : Frutiger-Light
post_script_name : Frutiger-Light
override :
preferred_family_name : Frutiger
- ...上面的片段將允許字體生成正確的索引,並允許使用一個命令安裝所有Frutiger字體:
$ fontist install " Frutiger " --preferred-family v1.10以外的字體版本使用新的公式格式。升級後,請運行fontist update以獲取最新的公式。
從v1.10開始,fontist在分組樣式時使用“默認家庭”而不是“首選家庭”。
例如,在v1.10之前對“ LATO”字體的請求將返回所有樣式:“黑色”,“黑色斜體”,“粗體”和其他15種樣式。
從v1.10開始,字體將僅返回4種默認樣式:“常規”,“斜體”,“大膽”和“大膽的斜體”。
為了獲取其他樣式,您必須指定確切的字體“亞家族”,例如“ lato black”或“ lato heavy”,或使用cli and --preferred-family Fontist.preferred_family = true the the ruby庫中。
筆記 | 在v1.10之前,有一個“快遞”字體公式的錯誤,在請求字體名稱“ courier”時允許安裝字體,但僅使用完整的“快遞新”字體名稱獲得其字體位置。從v1.10開始,行為已經保持一致 - 只能使用適當的“快遞新名稱”。 |
v1.16以外的字體版本以不同的方式對待install命令的font參數。升級後,請確保在使用fontist install時指定所有必需的字體, Fontist fontist manifest-install (及其相應的Ruby Interface Font.install and astest Manifest::Install ),或使用-F, --formula選項。
從v1.16開始,Fontist僅安裝請求的字體,而不是整個公式,除非明確指定。現在改變了。
例如,在v1.16之前對“ arial”字體的安裝請求將設置“ ms_truetype”公式中的所有字體:“ arial”,“ arial”,“ trebuchet MS”,“ verdana”和“ times new new Roman”。
從v1.16開始,字體將僅安裝請求的“ arial”字體。
要從公式中安裝所有字體,可以使用-F, --formula選項:
$ fontist install --formula ms_truetype警告 | 本節僅適用於主體維護者。 |
要添加一個新屬性,請更改公式的處理方式或完全替換結構,有兩種更改公式格式的方法:
使用公式中的min_fontist屬性。它設置了僅當Fontist的版本相等或超過指定版本時,才能安裝公式。
在公式存儲庫中使用新分支,例如“ V2”,“ V3”,“ V4”等。創建新分支後,應在Fontist.formulas_version中定義它
筆記 | 使用新分支將要求所有用戶重新下載整個公式存儲庫。由於此方法具有明顯的開銷,因此應盡可能使用前一個( min_fontist )。 |
Google字體可能提供了廣泛使用,自由和公開許可的字體的最大收藏。
Fontist的公式庫包括對通過Google字體提供的所有公開許可的字體的支持,並維護所有此類字體的字體公式。
GHA工作流程每天在Google字體上檢查更新字體。如果發現更新,則通過工作流程將其添加到存儲庫中。
SIL International是一個國際公認的基於信仰的非營利組織,為全球語言社區提供服務。
SIL提供了許多獨特的字體,這些字體支持較小的語言社區,這些語言社區通常沒有(尚未)(尚未)由主流字體支持。
Fontist旨在支持所有SIL字體,並在默認的Fontist公式存儲庫中提供其公式。
它們可以更新:
fontist import sil
cd ~ /.fontist/versions/{last_version}/formulas
git add Formulas/sil
git commit -m " SIL fonts update "
git pushMacOS提供可以通過Font Book.app手動下載的字體。
更新MacOS公式:
fontist import macos
cd ~ /.fontist/versions/{last_version}/formulas
git add Formulas/macos
git commit -m " Update macOS formulas "
git push克隆存儲庫。
git clone https://github.com/fontist/fontist設置您的環境。
bin/setup運行測試套件
bin/rspec所有官方的fontist公式都保存在公式存儲庫中。
如果您想添加一個新的公式存儲庫或更改現有的設置,請參考其文檔。
釋放是通過GitHub操作自動完成的。只是用gem-release顛簸和標籤。
對於補丁發布(0.0.x),請使用:
gem bump --version patch --tag --push對於次要版本(0.x.0)使用:
gem bump --version minor --tag --push首先,謝謝您的貢獻!我們喜歡所有人的拉力要求。通過參與該項目,您特此授予Ribose授予或將無限數量的非獨家許可證或子許可轉讓給第三方的權利,該版權涵蓋了所有手段供款的貢獻。
我們正在遵循Sandi Metz的此寶石規則,您可以在此處閱讀規則的描述。所有新代碼均應遵循這些規則。如果您在違反這些規則的預先存在的文件中進行更改,則應解決違規行為,作為您的貢獻的一部分。
以下是一些技術指南:
打開一個討論新功能的問題。
編寫測試以支持您的新功能。
確保整個測試套件在本地和CI上通過。
打開拉動請求。
收到反饋後,您的提交擠壓。
派對!
該寶石是由核糖開發,維護和資助的。