mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 09:40:21 +00:00
Add support for XPM. (#3706)
* .xpm and .pm extensions associated with XPM.
* .pm is disambiguated by searching the /* XPM */ string.
This is how `file` performs detection and should work with
every XPM3 file (most XPM generated by software later than 1991).
Added XPM samples:
* stick-unfocus.xpm: extracted from Fluxbox (MIT License)
0c13ddc0c8/data/styles/Emerge/pixmaps/stick-unfocus.xpm
* cc-public_domain_mark_white.pm: public domain image from
https://commons.wikimedia.org/wiki/File:Cc-public_domain_mark_white.svg
converted to XPM with ImageMagick (convert input.svg output.xpm).
This commit is contained in:
committed by
Colin Seymour
parent
e60384b018
commit
085604948e
@@ -349,6 +349,8 @@ module Linguist
|
|||||||
Language["Perl 6"]
|
Language["Perl 6"]
|
||||||
elsif /\buse\s+(?:strict\b|v?5\.)/.match(data)
|
elsif /\buse\s+(?:strict\b|v?5\.)/.match(data)
|
||||||
Language["Perl"]
|
Language["Perl"]
|
||||||
|
elsif /^\s*\/\* XPM \*\//.match(data)
|
||||||
|
Language["XPM"]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -4891,6 +4891,14 @@ XML:
|
|||||||
- Web.config
|
- Web.config
|
||||||
- packages.config
|
- packages.config
|
||||||
language_id: 399
|
language_id: 399
|
||||||
|
XPM:
|
||||||
|
type: data
|
||||||
|
extensions:
|
||||||
|
- ".xpm"
|
||||||
|
- ".pm"
|
||||||
|
ace_mode: c_cpp
|
||||||
|
tm_scope: source.c
|
||||||
|
language_id: 781846279
|
||||||
XPages:
|
XPages:
|
||||||
type: programming
|
type: programming
|
||||||
extensions:
|
extensions:
|
||||||
|
|||||||
76
samples/XPM/cc-public_domain_mark_white.pm
Normal file
76
samples/XPM/cc-public_domain_mark_white.pm
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char *cc_public_domain_mark_white[] = {
|
||||||
|
/* columns rows colors chars-per-pixel */
|
||||||
|
"52 53 17 1 ",
|
||||||
|
" c black",
|
||||||
|
". c #111111111111",
|
||||||
|
"X c #222222222222",
|
||||||
|
"o c gray20",
|
||||||
|
"O c #444444444444",
|
||||||
|
"+ c #555555555555",
|
||||||
|
"@ c gray40",
|
||||||
|
"# c #777777777777",
|
||||||
|
"$ c #888888888888",
|
||||||
|
"% c gray60",
|
||||||
|
"& c #AAAAAAAAAAAA",
|
||||||
|
"* c #BBBBBBBBBBBB",
|
||||||
|
"= c gray80",
|
||||||
|
"- c #DDDDDDDDDDDD",
|
||||||
|
"; c #EEEEEEEEEEEE",
|
||||||
|
": c white",
|
||||||
|
"> c None",
|
||||||
|
/* pixels */
|
||||||
|
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>>>> >>>>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>> >>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>> .OOOOX >>>>>>>>>>>",
|
||||||
|
">>>>>>>>> .@&-:::::::;%@. >>>>>>>>>>",
|
||||||
|
">>>>>>>> X%:::::::::::::::&O >>>>>>>>>",
|
||||||
|
">>>>>>> .%:::::::::::::::::::%X >>>>>>>>",
|
||||||
|
">>>>>> +;::::::::::::::::::::::# >>>>>>>",
|
||||||
|
">>>>> $:::::::::::::::::::::::::%. >>>>>>",
|
||||||
|
">>>>> %:::::::::::::::::::::::::::=. >>>>>",
|
||||||
|
">>>> %:::::::::::::::::::::::::::::=. >>>>>",
|
||||||
|
">>> $:::::::::::;$@Oo XO#&::::::::::% >>>>",
|
||||||
|
">>> +::::::::::=+ X$:::::::::# >>>>",
|
||||||
|
">> .#-:::::::$. O-::::::::X >>>",
|
||||||
|
">> @=::::@ .=::::::::% >>>",
|
||||||
|
">> O&:% .=::::::::::O >>",
|
||||||
|
"> X o .=:::::::::::& >>",
|
||||||
|
"> X #;::*o.=:::::::::::::. >>",
|
||||||
|
"> o:%O &::::::-::::::::::::::@ >",
|
||||||
|
" #:::*@ X*:::::::::::::::::::::% >",
|
||||||
|
" &:::::-#. X%:::::::::::::::::::; >",
|
||||||
|
" -:::::::; .#;::::::::::::::::: >",
|
||||||
|
" ::::::::* @-:::::::::::::::X >",
|
||||||
|
" ::::::::* +*:::::::::::::O >",
|
||||||
|
" ::::::::* X. o%:::::::::::O >",
|
||||||
|
" ::::::::* #;#X X#;::::::::o >",
|
||||||
|
" ;:::::::- +:::%o .@-:::::: >",
|
||||||
|
" *:::::::: .:::::*+ +*:::; >",
|
||||||
|
" &::::::::X %::::::-@. o%:* >",
|
||||||
|
" @::::::::# X;:::::::;#X X@ >",
|
||||||
|
"> .::::::::= o;::::-O=::%o >",
|
||||||
|
"> =::::::::O .#*&@. X;:::*+ >>",
|
||||||
|
"> @::::::::- o:::::-@. >>",
|
||||||
|
">> -::::::::% @::::::;#X >>",
|
||||||
|
">> @:::::::::% *::::::::@ >>>",
|
||||||
|
">> =:::::::::*X .$::::::::;. >>>",
|
||||||
|
">>> o;:::::::::;$X .@-:::::::::+ >>>>",
|
||||||
|
">>> +::::::::::::=$@OO+#&;::::::::::$ >>>>",
|
||||||
|
">>>> #:::::::::::::::::::::::::::::% >>>>>",
|
||||||
|
">>>>> #:::::::::::::::::::::::::::% >>>>>>",
|
||||||
|
">>>>>> +;::::::::::::::::::::::::$ >>>>>>",
|
||||||
|
">>>>>> o=:::::::::::::::::::::;O >>>>>>>",
|
||||||
|
">>>>>>> @-:::::::::::::::::;#. >>>>>>>>",
|
||||||
|
">>>>>>>> @=:::::::::::::-#. >>>>>>>>>",
|
||||||
|
">>>>>>>>>> .@&*;::::;&#o >>>>>>>>>>",
|
||||||
|
">>>>>>>>>>> >>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>> >>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>>>> >>>>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>",
|
||||||
|
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
|
||||||
|
};
|
||||||
40
samples/XPM/stick-unfocus.xpm
Normal file
40
samples/XPM/stick-unfocus.xpm
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
/* XPM */
|
||||||
|
static char * stick_unfocus_xpm[] = {
|
||||||
|
"20 17 20 1",
|
||||||
|
" c None",
|
||||||
|
". c #EBEBEB",
|
||||||
|
"+ c #E9E9E9",
|
||||||
|
"@ c #E6E6E6",
|
||||||
|
"# c #E5E5E5",
|
||||||
|
"$ c #E2E2E2",
|
||||||
|
"% c #DFDFDF",
|
||||||
|
"& c #DEDEDE",
|
||||||
|
"* c #FEFEFE",
|
||||||
|
"= c #C4C4C4",
|
||||||
|
"- c #898989",
|
||||||
|
"; c #B7B7B7",
|
||||||
|
"> c #6A6A6A",
|
||||||
|
", c #B9B9B9",
|
||||||
|
"' c #E4E4E4",
|
||||||
|
") c #686868",
|
||||||
|
"! c #E0E0E0",
|
||||||
|
"~ c #666666",
|
||||||
|
"{ c #E8E8E8",
|
||||||
|
"] c #E1E1E1",
|
||||||
|
"....................",
|
||||||
|
"....................",
|
||||||
|
".....+@#$%&%$#@+....",
|
||||||
|
"....+*********=&+...",
|
||||||
|
"....@*********-=#...",
|
||||||
|
"....#**;;;;;**>,'...",
|
||||||
|
"....$**;**;;**);$...",
|
||||||
|
"....%**;;;;;**>;&...",
|
||||||
|
"....&**;***;**>;&...",
|
||||||
|
"....&**;;;;;**>;&...",
|
||||||
|
"....!*********~;!...",
|
||||||
|
"....!*********>,&...",
|
||||||
|
"....@=->)>>>)>-=#...",
|
||||||
|
"....+&=,;;;;;,=&+...",
|
||||||
|
".....{]%%&&&&%@+....",
|
||||||
|
"....................",
|
||||||
|
"...................."};
|
||||||
@@ -221,11 +221,12 @@ class TestHeuristcs < Minitest::Test
|
|||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
# Candidate languages = ["Perl", "Perl 6"]
|
# Candidate languages = ["Perl", "Perl 6", "XPM"]
|
||||||
def test_pm_perl_by_heuristics
|
def test_pm_by_heuristics
|
||||||
assert_heuristics({
|
assert_heuristics({
|
||||||
"Perl" => all_fixtures("Perl", "*.pm"),
|
"Perl" => all_fixtures("Perl", "*.pm"),
|
||||||
"Perl 6" => all_fixtures("Perl 6", "*.pm")
|
"Perl 6" => all_fixtures("Perl 6", "*.pm"),
|
||||||
|
"XPM" => all_fixtures("XPM", "*.pm")
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ class TestLanguage < Minitest::Test
|
|||||||
assert_equal Language['Vim script'], Language.find_by_alias('vim')
|
assert_equal Language['Vim script'], Language.find_by_alias('vim')
|
||||||
assert_equal Language['Vim script'], Language.find_by_alias('viml')
|
assert_equal Language['Vim script'], Language.find_by_alias('viml')
|
||||||
assert_equal Language['reStructuredText'], Language.find_by_alias('rst')
|
assert_equal Language['reStructuredText'], Language.find_by_alias('rst')
|
||||||
|
assert_equal Language['XPM'], Language.find_by_alias('xpm')
|
||||||
assert_equal Language['YAML'], Language.find_by_alias('yml')
|
assert_equal Language['YAML'], Language.find_by_alias('yml')
|
||||||
assert_nil Language.find_by_alias(nil)
|
assert_nil Language.find_by_alias(nil)
|
||||||
end
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user