プログラミング言語ごとの色とか。
成果物
GitHub.Language.Database.Create.201703160747
開発環境
- Linux Mint 17.3 MATE 32bit
- SQLite 3.8.2
前回まで
http://ytyaru.hatenablog.com/entry/2017/08/11/000000
http://ytyaru.hatenablog.com/entry/2017/08/12/000000
http://ytyaru.hatenablog.com/entry/2017/08/13/000000
http://ytyaru.hatenablog.com/entry/2017/08/14/000000
http://ytyaru.hatenablog.com/entry/2017/08/15/000000
リポジトリ一覧に、言語ごと、ライセンスごとの検索機能をつけたい。そのために各DBが必要。
http://ytyaru.hatenablog.com/entry/2017/08/26/000000
http://ytyaru.hatenablog.com/entry/2017/08/27/000000
http://ytyaru.hatenablog.com/entry/2017/08/28/000000
調べてみた
GitHubの言語ごとにつけている色の情報を取得したい。
- https://github.com/github/linguist
- https://github.com/ozh/github-colors
- https://github.com/doda/github-language-colors
- https://github.com/Diastro/github-colors
大本のURLを調査
- https://github.com/ozh/github-colors/blob/master/github-colors.py
- https://raw.githubusercontent.com/github/linguist/master/lib/linguist/languages.yml
- https://github.com/github/linguist/blob/master/lib/linguist/languages.yml
languages.ymlの項目を列挙
GitHubに知られているすべての言語を定義するらしい。
項目 | 型 | 必須 | 説明 |
---|---|---|---|
Key | string | ○ | 言語を特定するキー文字列 |
Type | string | ○ | data, programming, markup, prose, nilのいずれか。 |
Extensions | string配列 | ○ | ファイルの拡張子。最初の拡張子がプライマリ拡張子。".blade.php"`など複数カンマの場合もある。 |
Color | string | ー | #000000 〜#FFFFFF 。 typeが “programming"または "prose"の場合にのみ使用。 |
tm_scope | string | ー | TextMateScope。grammars.ymlのどれかと一致する必要がある。ない場合はnone を使う。 |
ace_mode | string | ー | http://git.io/3XO_Cgのファイル名の一つと一致する必要がある。強調表示に使われるAceMode名。モードが存在しない場合は “text"を使う。text ,abap ,verilog |
language_id | integer | ー | 識別子。0〜 |
aliases | string配列 | ー | ags 。別名? |
codemirror_mode | string | ー | https://git.io/vi9Fxと一致する必要がある。clike 。 |
codemirror_mime_type | ー | string | text/x-c++src |
interpreters | string配列型 | ー | 解釈者。apl ,aplx ,dyalog ,(なし) |
wrap | booblean | ー | 折り返すか否か。true。 |
group | string | ー | 親言語の名前。Yacc ,HTML ,Haskell |
filenames | string配列 | ー | http://git.io/3XO_Cgのファイル名の1つと一致する必要がある。CMakeLists.txt |
searchable | booblean | ー | false |
RDBMSとの差異
Extensions
の値を文字列型にしてカンマ区切りで複数格納してLIKE句で検索する方法は成立しなさそう。.py
もあれば、.pyx
もある。.py
で部分検索するとどちらもヒットしてしまう。
group
がSQLの予約語でエラーになる- http://stackoverflow.com/questions/21766788/postgresql-syntax-error-when-creating-a-table
- 列名を
Group
としてもError: near line 2: near Group: syntax error
のようなエラーになった - 列名を
"Group"
としてもError: near line 2: near "Group": syntax error
のようなエラーになった - 仕方なく
GroupName
にする
- 列名を
- http://stackoverflow.com/questions/21766788/postgresql-syntax-error-when-creating-a-table
SQLite3
DBファイル | 説明 |
---|---|
GitHub.Languages.sqlite3 | GitHubで認識するコンピュータ言語のマスターDB。 |
テーブル名 | 説明 |
---|---|
Languages | GitHubで認識するコンピュータ言語のマスターテーブル。 |
Extensions | GitHubで認識するコンピュータ言語に紐づくファイルの拡張子。 |
Aliases | GitHubで認識するコンピュータ言語に紐づく別名定義。 |
Interpreters | GitHubで認識するコンピュータ言語に紐づく解釈者。 |
FileNames | GitHubで認識するコンピュータ言語に紐づくファイル名。 |
Languages
create table Languages( Id integer primary key, LanguageId text unique not null, Key text unique not null, Type text not null, Color text, TextMateScope text default NULL, AceMode text default 'text', CodeMirrorMode text, CodeMirrorMimeType text, GroupName text, Wrap integer default 0 check(Wrap = 0 or Wrap = 1), Searchable integer default 1 check(Searchable = 0 or Searchable = 1) );
Aliases
create table Aliases( Id integer primary key, LanguageId integer not null, Aliase text not null, foreign key(LanguageId) references Languages(Id) );
Extensions
create table Extensions( Id integer primary key, LanguageId integer not null, Extension text not null, IsPrimary integer default 0 check(IsPrimary = 0 or IsPrimary = 1), foreign key(LanguageId) references Languages(Id) );
Interpreters
create table Interpreters( Id integer primary key, LanguageId integer not null, Interpreter text not null, foreign key(LanguageId) references Languages(Id) );
FileNames
create table FileNames( Id integer primary key, LanguageId integer not null, FileName text not null, foreign key(LanguageId) references Languages(Id) );
課題
リポジトリのコードサイズを保存したテーブルも変更が必要になるか。それとも現状のままKey
名で結合すればいいか。