github-linguist 9.6.0 → 9.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/grammars/gno.mod.json +1 -0
- data/grammars/source.abl.json +1 -1
- data/grammars/source.aleo.json +1 -0
- data/grammars/source.astro.json +1 -1
- data/grammars/source.baml.json +1 -1
- data/grammars/source.bird2.json +1 -0
- data/grammars/source.blueprint.json +1 -0
- data/grammars/source.bnd.json +1 -1
- data/grammars/source.bsl.json +1 -1
- data/grammars/source.carbon.json +1 -0
- data/grammars/source.cl.json +1 -1
- data/grammars/source.clar.json +1 -1
- data/grammars/source.clarion.json +1 -1
- data/grammars/source.cmd.json +1 -1
- data/grammars/source.comment-string.wesl.json +1 -1
- data/grammars/source.comment-string.wgsl.json +1 -1
- data/grammars/source.cs.json +1 -1
- data/grammars/source.csswg.json +1 -1
- data/grammars/source.curlrc.json +1 -1
- data/grammars/source.dart.json +1 -1
- data/grammars/source.dds.dspf.json +1 -1
- data/grammars/source.dds.icff.json +1 -1
- data/grammars/source.dds.lf.json +1 -1
- data/grammars/source.dds.pf.json +1 -1
- data/grammars/source.dds.prtf.json +1 -1
- data/grammars/source.deq.json +1 -0
- data/grammars/source.fift.json +1 -0
- data/grammars/source.flix.json +1 -1
- data/grammars/source.fpp.json +1 -0
- data/grammars/source.func.json +1 -0
- data/grammars/source.gdscript.json +1 -1
- data/grammars/source.gedcom.json +1 -1
- data/grammars/source.gitconfig.json +1 -1
- data/grammars/source.gno.json +1 -0
- data/grammars/source.graphql.json +1 -1
- data/grammars/source.hack.json +1 -1
- data/grammars/source.hx.json +1 -1
- data/grammars/source.hxml.json +1 -1
- data/grammars/source.ink.json +1 -1
- data/grammars/source.jac.json +1 -1
- data/grammars/source.jass.json +1 -0
- data/grammars/source.julia.json +1 -1
- data/grammars/source.kcl.json +1 -1
- data/grammars/source.koka.json +1 -1
- data/grammars/source.leo.json +1 -1
- data/grammars/source.lobster.json +1 -0
- data/grammars/source.logos.json +1 -1
- data/grammars/source.luau.json +1 -1
- data/grammars/source.m2.json +1 -1
- data/grammars/source.mi.json +1 -1
- data/grammars/source.mojo.json +1 -1
- data/grammars/source.ms.json +1 -0
- data/grammars/source.nim.json +1 -1
- data/grammars/source.openqasm.json +1 -1
- data/grammars/source.opy.json +1 -1
- data/grammars/source.paperspecs.json +1 -0
- data/grammars/source.pl.json +1 -0
- data/grammars/source.pnlgrp.json +1 -1
- data/grammars/source.qsharp.json +1 -1
- data/grammars/source.rarlist.json +1 -0
- data/grammars/source.rascal.json +1 -1
- data/grammars/source.rego.json +1 -1
- data/grammars/source.rhai.json +1 -0
- data/grammars/source.rpg.json +1 -1
- data/grammars/source.rpgle.json +1 -1
- data/grammars/source.rust.json +1 -1
- data/grammars/source.scala.json +1 -1
- data/grammars/source.smithy.json +1 -1
- data/grammars/source.spicedb.json +1 -1
- data/grammars/source.stim.json +1 -0
- data/grammars/source.surrealql.json +1 -1
- data/grammars/source.swift.json +1 -1
- data/grammars/source.tasm.json +1 -0
- data/grammars/source.tlb.json +1 -0
- data/grammars/source.tolk.json +1 -0
- data/grammars/source.ucode-template.json +1 -0
- data/grammars/source.ucode.json +1 -0
- data/grammars/source.vento.json +1 -1
- data/grammars/source.verse.json +1 -0
- data/grammars/source.vespaSchema.json +1 -0
- data/grammars/source.vhs.json +1 -0
- data/grammars/source.wgsl.json +1 -1
- data/grammars/source.yaml.salt.json +1 -1
- data/grammars/text.bbcode.json +1 -0
- data/grammars/text.html.handlebars.json +1 -1
- data/grammars/text.recfile.json +1 -0
- data/grammars/text.roff.json +1 -1
- data/grammars/version +1 -1
- data/lib/linguist/VERSION +1 -1
- data/lib/linguist/blob_helper.rb +19 -0
- data/lib/linguist/generated.rb +24 -0
- data/lib/linguist/generic.yml +1 -0
- data/lib/linguist/heuristics.yml +80 -5
- data/lib/linguist/language.rb +5 -9
- data/lib/linguist/languages.yml +231 -27
- data/lib/linguist/languages_data.rb +7663 -0
- data/lib/linguist/lazy_blob.rb +6 -1
- data/lib/linguist/samples.rb +4 -10
- data/lib/linguist/samples_data.rb +196100 -0
- metadata +31 -19
- data/grammars/markdown.bicep.codeblock.json +0 -1
- data/grammars/source.baml-jinja.json +0 -1
- data/lib/linguist/languages.json +0 -1
- data/lib/linguist/samples.json +0 -1
data/grammars/version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
9.
|
|
1
|
+
9.7.0
|
data/lib/linguist/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
9.
|
|
1
|
+
9.7.0
|
data/lib/linguist/blob_helper.rb
CHANGED
|
@@ -119,6 +119,24 @@ module Linguist
|
|
|
119
119
|
@detect_encoding ||= CharlockHolmes::EncodingDetector.new.detect(data) if data
|
|
120
120
|
end
|
|
121
121
|
|
|
122
|
+
# Public: Is the blob content a Git LFS pointer file?
|
|
123
|
+
#
|
|
124
|
+
# Return true or false
|
|
125
|
+
def lfs_pointer?
|
|
126
|
+
return false unless data
|
|
127
|
+
|
|
128
|
+
data.start_with?("version https://git-lfs.github.com/spec/v1\n") &&
|
|
129
|
+
data.include?("\noid sha256:") &&
|
|
130
|
+
data.match?(/\nsize \d+\n?\z/)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
# Public: Is the blob path tracked by Git LFS?
|
|
134
|
+
#
|
|
135
|
+
# Return true or false
|
|
136
|
+
def lfs_tracked?
|
|
137
|
+
false
|
|
138
|
+
end
|
|
139
|
+
|
|
122
140
|
# Public: Is the blob binary?
|
|
123
141
|
#
|
|
124
142
|
# Return true or false
|
|
@@ -380,6 +398,7 @@ module Linguist
|
|
|
380
398
|
!vendored? &&
|
|
381
399
|
!documentation? &&
|
|
382
400
|
!generated? &&
|
|
401
|
+
!(lfs_tracked? && lfs_pointer?) &&
|
|
383
402
|
language && ( defined?(detectable?) && !detectable?.nil? ?
|
|
384
403
|
detectable? :
|
|
385
404
|
DETECTABLE_TYPES.include?(language.type)
|
data/lib/linguist/generated.rb
CHANGED
|
@@ -93,12 +93,14 @@ module Linguist
|
|
|
93
93
|
gradle_wrapper? ||
|
|
94
94
|
maven_wrapper? ||
|
|
95
95
|
mise_lock? ||
|
|
96
|
+
secrets_baseline? ||
|
|
96
97
|
julia_manifest? ||
|
|
97
98
|
generated_go? ||
|
|
98
99
|
generated_protocol_buffer_from_go? ||
|
|
99
100
|
generated_protocol_buffer? ||
|
|
100
101
|
generated_javascript_protocol_buffer? ||
|
|
101
102
|
generated_typescript_protocol_buffer? ||
|
|
103
|
+
generated_twirp_ruby? ||
|
|
102
104
|
generated_apache_thrift? ||
|
|
103
105
|
generated_jni_header? ||
|
|
104
106
|
vcr_cassette? ||
|
|
@@ -400,6 +402,21 @@ module Linguist
|
|
|
400
402
|
return lines[0].include?("Code generated by protoc-gen-ts_proto. DO NOT EDIT.")
|
|
401
403
|
end
|
|
402
404
|
|
|
405
|
+
# Internal: Is the blob a Ruby source file generated by the
|
|
406
|
+
# protoc-gen-twirp_ruby plugin?
|
|
407
|
+
#
|
|
408
|
+
# Files generated by protoc-gen-twirp_ruby start with a header like:
|
|
409
|
+
#
|
|
410
|
+
# # Code generated by protoc-gen-twirp_ruby 1.14.1, DO NOT EDIT.
|
|
411
|
+
#
|
|
412
|
+
# Returns true or false.
|
|
413
|
+
def generated_twirp_ruby?
|
|
414
|
+
return false unless extname == ".rb"
|
|
415
|
+
return false unless lines.count > 1
|
|
416
|
+
|
|
417
|
+
return lines.first(3).any? { |l| l.include?("Code generated by protoc-gen-twirp_ruby") && l.include?("DO NOT EDIT.") }
|
|
418
|
+
end
|
|
419
|
+
|
|
403
420
|
APACHE_THRIFT_EXTENSIONS = ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp', '.php']
|
|
404
421
|
|
|
405
422
|
# Internal: Is the blob generated by Apache Thrift compiler?
|
|
@@ -591,6 +608,13 @@ module Linguist
|
|
|
591
608
|
!!name.match(/(?:^|\/)mise(?:\.[^\/]+)?\.lock$/)
|
|
592
609
|
end
|
|
593
610
|
|
|
611
|
+
# Internal: Is the blob a detect-secrets baseline file?
|
|
612
|
+
#
|
|
613
|
+
# Returns true or false.
|
|
614
|
+
def secrets_baseline?
|
|
615
|
+
!!name.match(/(?:^|\/)\.secrets\.baseline$/)
|
|
616
|
+
end
|
|
617
|
+
|
|
594
618
|
# Internal: Is the blob a Julia Manifest.toml file?
|
|
595
619
|
#
|
|
596
620
|
# Returns true or false.
|
data/lib/linguist/generic.yml
CHANGED
data/lib/linguist/heuristics.yml
CHANGED
|
@@ -65,8 +65,20 @@ disambiguations:
|
|
|
65
65
|
rules:
|
|
66
66
|
# AL pattern source from https://github.com/microsoft/AL/blob/master/grammar/alsyntax.tmlanguage - keyword.other.applicationobject.al
|
|
67
67
|
- language: AL
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
pattern:
|
|
69
|
+
# An object declaration, "<kind> <id> <name>", starting a line, with the
|
|
70
|
+
# name required. The anchor matters: page and table are common Perl
|
|
71
|
+
# variable names and "Table of contents" is ordinary prose, so matching
|
|
72
|
+
# these keywords anywhere would claim Perl AutoLoader chunks.
|
|
73
|
+
# AL tooling commonly writes a UTF-8 BOM. It cannot be matched as bytes
|
|
74
|
+
# here: blob data is ASCII-8BIT, and a pattern containing the BOM bytes
|
|
75
|
+
# compiles to a UTF-8 Regexp, which raises Encoding::CompatibilityError.
|
|
76
|
+
# \A\W{0,3} skips it, the same way the B4X rule below does.
|
|
77
|
+
- '(?:\A\W{0,3}|^)\s*(?i:(CODEUNIT|PAGE|PAGEEXTENSION|PAGECUSTOMIZATION|ENUM|ENUMEXTENSION|QUERY|REPORT|REPORTEXTENSION|TABLE|TABLEEXTENSION|XMLPORT|PROFILE|PROFILEEXTENSION|CONTROLADDIN|INTERFACE|PERMISSIONSET|PERMISSIONSETEXTENSION|ENTITLEMENT))\b\s+(?:\d|"|[A-Z])'
|
|
78
|
+
# DotNet alias objects are a bare keyword on their own line
|
|
79
|
+
- '(?:\A\W{0,3}|^)\s*(?i:DOTNET)\s*$'
|
|
80
|
+
# Namespace and using declarations, always terminated with a semicolon
|
|
81
|
+
- '(?:\A\W{0,3}|^)\s*(?i:(NAMESPACE|USING))\s+[\w.]+\s*;'
|
|
70
82
|
# Open-ended fallback to Perl AutoLoader
|
|
71
83
|
- language: Perl
|
|
72
84
|
- extensions: ['.alg']
|
|
@@ -107,6 +119,15 @@ disambiguations:
|
|
|
107
119
|
- language: LTspice Symbol
|
|
108
120
|
pattern: '^SymbolType[ \t]'
|
|
109
121
|
- language: Asymptote
|
|
122
|
+
- extensions: ['.b']
|
|
123
|
+
rules:
|
|
124
|
+
- language: B
|
|
125
|
+
pattern: '^\s*(?:extrn|auto|goto)\b'
|
|
126
|
+
negative_pattern: '^\s*(?:implement|include|load|ref)\b'
|
|
127
|
+
- language: Brainfuck
|
|
128
|
+
pattern: '(>\+>|>\+<)'
|
|
129
|
+
- language: Limbo
|
|
130
|
+
pattern: '(?:^\w+\s*:\s*module\s*\{)|(implement \w+;)'
|
|
110
131
|
- extensions: ['.bas']
|
|
111
132
|
rules:
|
|
112
133
|
- language: B4X
|
|
@@ -280,6 +301,11 @@ disambiguations:
|
|
|
280
301
|
pattern: '^\s*(?:%%|main\s*\(.*?\)\s*->)'
|
|
281
302
|
- language: JavaScript
|
|
282
303
|
pattern: '\/\/|["'']use strict["'']|export\s+default\s|\/\*(?:.|[\r\n])*?\*\/'
|
|
304
|
+
- extensions: ['.eslintrc']
|
|
305
|
+
rules:
|
|
306
|
+
- language: YAML
|
|
307
|
+
named_pattern: yaml
|
|
308
|
+
- language: JSON with Comments
|
|
283
309
|
- extensions: ['.ex']
|
|
284
310
|
rules:
|
|
285
311
|
- language: Elixir
|
|
@@ -303,6 +329,15 @@ disambiguations:
|
|
|
303
329
|
pattern: '^: '
|
|
304
330
|
- language: Fortran
|
|
305
331
|
named_pattern: fortran
|
|
332
|
+
- extensions: ['.fpp']
|
|
333
|
+
rules:
|
|
334
|
+
- language: FPP
|
|
335
|
+
pattern:
|
|
336
|
+
- '^\s*(active|passive|queued)\s+component\s'
|
|
337
|
+
- '^\s*(module|topology|struct|enum|port|interface)\s+[A-Za-z_$][A-Za-z0-9_]*\s*\{'
|
|
338
|
+
- '^\s*instance\s+[A-Za-z_$][A-Za-z0-9_]*\s*:'
|
|
339
|
+
- language: Fortran
|
|
340
|
+
named_pattern: fortran
|
|
306
341
|
- extensions: ['.fr']
|
|
307
342
|
rules:
|
|
308
343
|
- language: Forth
|
|
@@ -442,6 +477,17 @@ disambiguations:
|
|
|
442
477
|
pattern:
|
|
443
478
|
- '^(?i)[^"m]*mov\s+[^\s]+,'
|
|
444
479
|
- '^\s+(?i)db\s+[a-z\d]'
|
|
480
|
+
- extensions: ['.j']
|
|
481
|
+
rules:
|
|
482
|
+
- language: Jasmin
|
|
483
|
+
pattern: '^\s*\.(?:class|super|method|end\s+method|limit|field|source|bytecode)\b'
|
|
484
|
+
- language: Objective-J
|
|
485
|
+
pattern: '^\s*@(?:import|implementation|protocol|interface|typedef|end)\b'
|
|
486
|
+
- language: JASS
|
|
487
|
+
pattern:
|
|
488
|
+
- '^\s*(?:constant\s+)?(?:function|native)\s+\w+\s+takes\b'
|
|
489
|
+
- '^\s*end(?:function|globals|loop)\s*$'
|
|
490
|
+
- '^\s*(?:call|set|local|exitwhen)\s+\S'
|
|
445
491
|
- extensions: ['.json']
|
|
446
492
|
rules:
|
|
447
493
|
- language: OASv2-json
|
|
@@ -480,7 +526,7 @@ disambiguations:
|
|
|
480
526
|
- extensions: ['.lp']
|
|
481
527
|
rules:
|
|
482
528
|
- language: Lambdapi
|
|
483
|
-
pattern: '(
|
|
529
|
+
pattern: '^\s*(?:opaque\s+symbol|symbol|rule|notation|constant|injective|require(?:\s+open)?|open|type|assert(?:not)?|compute)\b'
|
|
484
530
|
- language: Linear Programming
|
|
485
531
|
pattern: '(?i)^\s*(?:minimize|minimum|min|maximize|maximum|max)(?:\s+multi-objectives)?\s*$'
|
|
486
532
|
- language: Answer Set Programming
|
|
@@ -580,6 +626,8 @@ disambiguations:
|
|
|
580
626
|
and:
|
|
581
627
|
- negative_pattern: '/\*'
|
|
582
628
|
- pattern: '^\s*\.(?:include\s|globa?l\s|[A-Za-z][_A-Za-z0-9]*:)'
|
|
629
|
+
- language: MiniScript
|
|
630
|
+
pattern: '^\s*\bend (?:function|while|if|for)\b|\s\b(?:isa)\b\s'
|
|
583
631
|
- language: MAXScript
|
|
584
632
|
- extensions: ['.msg']
|
|
585
633
|
rules:
|
|
@@ -766,6 +814,11 @@ disambiguations:
|
|
|
766
814
|
pattern:
|
|
767
815
|
- '^\s*#(?:(?:if|ifdef|define|pragma)\s+\w|\s*include\s+<[^>]+>)'
|
|
768
816
|
- '^\s*template\s*<'
|
|
817
|
+
- extensions: ['.releaserc']
|
|
818
|
+
rules:
|
|
819
|
+
- language: YAML
|
|
820
|
+
named_pattern: yaml
|
|
821
|
+
- language: JSON
|
|
769
822
|
- extensions: ['.res']
|
|
770
823
|
rules:
|
|
771
824
|
- language: ReScript
|
|
@@ -836,6 +889,15 @@ disambiguations:
|
|
|
836
889
|
- '\(#[\w-]+[!\?]'
|
|
837
890
|
- '(?:[\)\]]\s*[\*\+\?](?:\s|$))'
|
|
838
891
|
- '@[\w.-]+(?:\)\s|$)'
|
|
892
|
+
- extensions: ['.sd']
|
|
893
|
+
rules:
|
|
894
|
+
- language: Vespa Schema Definition
|
|
895
|
+
pattern: '^[ \t]*(?:schema|search|document)[ \t]+[\w.\/-]+[ \t]*(?:inherits[ \t][^{\n]*)?\{'
|
|
896
|
+
- extensions: ['.sip']
|
|
897
|
+
rules:
|
|
898
|
+
- language: Quartus Simulation IP
|
|
899
|
+
pattern: '^[ \t]*set_global_assignment\b'
|
|
900
|
+
- language: SIP
|
|
839
901
|
- extensions: ['.sol']
|
|
840
902
|
rules:
|
|
841
903
|
- language: Solidity
|
|
@@ -846,7 +908,7 @@ disambiguations:
|
|
|
846
908
|
rules:
|
|
847
909
|
# Postgres
|
|
848
910
|
- language: PLpgSQL
|
|
849
|
-
pattern: '(?i:^\\i\b
|
|
911
|
+
pattern: '(?i:^\\i\b|^\s*DO\s+\$|LANGUAGE\s+''?plpgsql''?|BEGIN(\s+WORK)?\s*;)'
|
|
850
912
|
# IBM db2
|
|
851
913
|
- language: SQLPL
|
|
852
914
|
pattern: '(?i:ALTER\s+MODULE|MODE\s+DB2SQL|\bSYS(CAT|PROC)\.|ASSOCIATE\s+RESULT\s+SET|\bEND!\s*$)'
|
|
@@ -1019,6 +1081,11 @@ disambiguations:
|
|
|
1019
1081
|
- language: Typst
|
|
1020
1082
|
pattern: '^#(import|show|let|set)'
|
|
1021
1083
|
- language: XML
|
|
1084
|
+
- extensions: ['.uc']
|
|
1085
|
+
rules:
|
|
1086
|
+
- language: ucode
|
|
1087
|
+
named_pattern: ucode
|
|
1088
|
+
- language: UnrealScript
|
|
1022
1089
|
- extensions: ['.url']
|
|
1023
1090
|
rules:
|
|
1024
1091
|
- language: INI
|
|
@@ -1033,7 +1100,7 @@ disambiguations:
|
|
|
1033
1100
|
pattern: '\$(?:if|else)[ \t]|^[ \t]*fn\s+[^\s()]+\(.*?\).*?\{|^[ \t]*for\s*\{'
|
|
1034
1101
|
- extensions: ['.vba']
|
|
1035
1102
|
rules:
|
|
1036
|
-
- language: Vim
|
|
1103
|
+
- language: Vim script
|
|
1037
1104
|
pattern: '^UseVimball'
|
|
1038
1105
|
- language: VBA
|
|
1039
1106
|
- extensions: ['.vcf']
|
|
@@ -1137,6 +1204,13 @@ named_patterns:
|
|
|
1137
1204
|
- '(?i)^[ ]*\$(CONSOLE|CHECKING):'
|
|
1138
1205
|
- '(?i)^[ ]*\$(FULLSCREEN|RESIZE|STATIC|DYNAMIC|NOPREFIX|SCREENSHOW|SCREENHIDE|EXEICON)\b'
|
|
1139
1206
|
raku: '^\s*(?:use\s+v6\b|\bmodule\b|\b(?:my\s+)?class\b)'
|
|
1207
|
+
ucode:
|
|
1208
|
+
- '^#!.*\bucode\b'
|
|
1209
|
+
- '^\s*[''"]use strict[''"];'
|
|
1210
|
+
- '^[ \t]*(?:export|import)\b'
|
|
1211
|
+
- '\b(?:require|include)\s*\(\s*[''"]'
|
|
1212
|
+
- '^\s*let\s+\w+'
|
|
1213
|
+
- '\b(?:printf|sprintf)\s*\('
|
|
1140
1214
|
vb-class: '^[ ]*VERSION [0-9]\.[0-9] CLASS'
|
|
1141
1215
|
vb-form: '^[ ]*VERSION [0-9]\.[0-9]{2}'
|
|
1142
1216
|
vb-module: '^[ ]*Attribute VB_Name = '
|
|
@@ -1156,3 +1230,4 @@ named_patterns:
|
|
|
1156
1230
|
# Excel objects
|
|
1157
1231
|
- '\b(?:(?:This|Active)?Workbooks?|Worksheets?|Active(?:Sheet|Chart|Cell)|WorksheetFunction)\b'
|
|
1158
1232
|
- '\b(?:Range\(".*|Cells\([0-9a-zA-Z_]*, (?:[0-9a-zA-Z_]*|"[a-zA-Z]{1,3}"))\)'
|
|
1233
|
+
yaml: '^[ \t]*(?:#|(?:[^/"\s:{}\[\]]|\/[^/*:\n])[^:\n]*:)'
|
data/lib/linguist/language.rb
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
require 'cgi'
|
|
2
2
|
require 'yaml'
|
|
3
|
-
begin
|
|
4
|
-
require 'yajl'
|
|
5
|
-
rescue LoadError
|
|
6
|
-
require 'json'
|
|
7
|
-
end
|
|
8
3
|
|
|
9
4
|
require 'linguist/classifier'
|
|
10
5
|
require 'linguist/heuristics'
|
|
@@ -501,11 +496,12 @@ module Linguist
|
|
|
501
496
|
popular = YAML.load_file(File.expand_path("../popular.yml", __FILE__))
|
|
502
497
|
|
|
503
498
|
languages_yml = File.expand_path("../languages.yml", __FILE__)
|
|
504
|
-
|
|
499
|
+
languages_rb = File.expand_path("../languages_data.rb", __FILE__)
|
|
505
500
|
|
|
506
|
-
if File.exist?(
|
|
507
|
-
|
|
508
|
-
|
|
501
|
+
if File.exist?(languages_rb)
|
|
502
|
+
mod = Module.new
|
|
503
|
+
load(languages_rb, mod)
|
|
504
|
+
languages = mod::DATA
|
|
509
505
|
else
|
|
510
506
|
languages = YAML.load_file(languages_yml)
|
|
511
507
|
end
|