mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Support of the .ecl file extension for Prolog.
This commit is contained in:
		| @@ -19,6 +19,9 @@ module Linguist | |||||||
|         if languages.all? { |l| ["Perl", "Prolog"].include?(l) } |         if languages.all? { |l| ["Perl", "Prolog"].include?(l) } | ||||||
|           disambiguate_pl(data, languages) |           disambiguate_pl(data, languages) | ||||||
|         end |         end | ||||||
|  |         if languages.all? { |l| ["ECL", "Prolog"].include?(l) } | ||||||
|  |           disambiguate_ecl(data, languages) | ||||||
|  |         end | ||||||
|         if languages.all? { |l| ["TypeScript", "XML"].include?(l) } |         if languages.all? { |l| ["TypeScript", "XML"].include?(l) } | ||||||
|           disambiguate_ts(data, languages) |           disambiguate_ts(data, languages) | ||||||
|         end |         end | ||||||
| @@ -46,6 +49,13 @@ module Linguist | |||||||
|       matches |       matches | ||||||
|     end |     end | ||||||
|  |  | ||||||
|  |     def self.disambiguate_ecl(data, languages) | ||||||
|  |       matches = [] | ||||||
|  |       matches << Language["Prolog"] if data.include?(":-") | ||||||
|  |       matches << Language["ECL"] if data.include?(":=") | ||||||
|  |       matches | ||||||
|  |     end | ||||||
|  |  | ||||||
|     def self.disambiguate_ts(data, languages) |     def self.disambiguate_ts(data, languages) | ||||||
|       matches = [] |       matches = [] | ||||||
|       if (data.include?("</translation>")) |       if (data.include?("</translation>")) | ||||||
|   | |||||||
| @@ -1323,6 +1323,7 @@ Prolog: | |||||||
|   color: "#74283c" |   color: "#74283c" | ||||||
|   primary_extension: .prolog |   primary_extension: .prolog | ||||||
|   extensions: |   extensions: | ||||||
|  |   - .ecl | ||||||
|   - .pl |   - .pl | ||||||
|  |  | ||||||
| Protocol Buffer: | Protocol Buffer: | ||||||
|   | |||||||
							
								
								
									
										90
									
								
								samples/Prolog/or-constraint.ecl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								samples/Prolog/or-constraint.ecl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | |||||||
|  | :- lib(ic). | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Question 1.11 | ||||||
|  |  * vabs(?Val, ?AbsVal) | ||||||
|  |  */ | ||||||
|  | vabs(Val, AbsVal):- | ||||||
|  | 	AbsVal #> 0, | ||||||
|  | 	( | ||||||
|  | 		Val #= AbsVal | ||||||
|  | 	; | ||||||
|  | 		Val #= -AbsVal | ||||||
|  | 	), | ||||||
|  | 	labeling([Val, AbsVal]). | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * vabsIC(?Val, ?AbsVal) | ||||||
|  |  */ | ||||||
|  | vabsIC(Val, AbsVal):- | ||||||
|  | 	AbsVal #> 0, | ||||||
|  | 	Val #= AbsVal or Val #= -AbsVal, | ||||||
|  | 	labeling([Val, AbsVal]). | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Question 1.12 | ||||||
|  |  */ | ||||||
|  | % X #:: -10..10, vabs(X, Y). | ||||||
|  | % X #:: -10..10, vabsIC(X, Y). | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Question 1.13 | ||||||
|  |  * faitListe(?ListVar, ?Taille, +Min, +Max) | ||||||
|  |  */ | ||||||
|  | faitListe([], 0, _, _):-!. | ||||||
|  | faitListe([First|Rest], Taille, Min, Max):- | ||||||
|  | 	First #:: Min..Max, | ||||||
|  | 	Taille1 #= Taille - 1, | ||||||
|  | 	faitListe(Rest, Taille1, Min, Max). | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Question 1.14 | ||||||
|  |  * suite(?ListVar) | ||||||
|  |  */ | ||||||
|  | suite([Xi, Xi1, Xi2]):- | ||||||
|  | 	checkRelation(Xi, Xi1, Xi2). | ||||||
|  | suite([Xi, Xi1, Xi2|Rest]):- | ||||||
|  | 	checkRelation(Xi, Xi1, Xi2), | ||||||
|  | 	suite([Xi1, Xi2|Rest]). | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * checkRelation(?Xi, ?Xi1, ?Xi2) | ||||||
|  |  */ | ||||||
|  | checkRelation(Xi, Xi1, Xi2):- | ||||||
|  | 	vabs(Xi1, VabsXi1), | ||||||
|  | 	Xi2 #= VabsXi1 - Xi. | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Question 1.15 | ||||||
|  |  * checkPeriode(+ListVar). | ||||||
|  |  */ | ||||||
|  | % TODO Any better solution? | ||||||
|  | checkPeriode(ListVar):- | ||||||
|  | 	length(ListVar, Length), | ||||||
|  | 	Length < 10. | ||||||
|  | checkPeriode([X1, X2, X3, X4, X5, X6, X7, X8, X9, X10|Rest]):- | ||||||
|  | 	X1 =:= X10, | ||||||
|  | 	checkPeriode([X2, X3, X4, X5, X6, X7, X8, X9, X10|Rest]). | ||||||
|  | % faitListe(ListVar, 18, -9, 9), suite(ListVar), checkPeriode(ListVar). => 99 solutions | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * Tests | ||||||
|  |  */ | ||||||
|  | /* | ||||||
|  | vabs(5, 5). => Yes | ||||||
|  | vabs(5, -5). => No | ||||||
|  | vabs(-5, 5). => Yes | ||||||
|  | vabs(X, 5). | ||||||
|  | vabs(X, AbsX).  | ||||||
|  | vabsIC(5, 5). => Yes | ||||||
|  | vabsIC(5, -5). => No | ||||||
|  | vabsIC(-5, 5). => Yes | ||||||
|  | vabsIC(X, 5). | ||||||
|  | vabsIC(X, AbsX). | ||||||
|  |  | ||||||
|  | faitListe(ListVar, 5, 1, 3). => 243 solutions | ||||||
|  | faitListe([_, _, _, _, _], Taille, 1, 3). => Taille = 5 !!!!!!!!!!!!!!!! | ||||||
|  |  | ||||||
|  | faitListe(ListVar, 18, -9, 9), suite(ListVar). => 99 solutions | ||||||
|  | */ | ||||||
| @@ -51,6 +51,18 @@ class TestHeuristcs < Test::Unit::TestCase | |||||||
|     assert_equal Language["Perl"], results.first |     assert_equal Language["Perl"], results.first | ||||||
|   end |   end | ||||||
|    |    | ||||||
|  |   def test_ecl_prolog_by_heuristics | ||||||
|  |     languages = ["ECL", "Prolog"] | ||||||
|  |     results = Heuristics.disambiguate_ecl(fixture("Prolog/or-constraint.ecl"), languages) | ||||||
|  |     assert_equal Language["Prolog"], results.first | ||||||
|  |   end | ||||||
|  |    | ||||||
|  |   def test_ecl_ecl_by_heuristics | ||||||
|  |     languages = ["ECL", "Prolog"] | ||||||
|  |     results = Heuristics.disambiguate_ecl(fixture("ECL/sample.ecl"), languages) | ||||||
|  |     assert_equal Language["ECL"], results.first | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def test_ts_typescript_by_heuristics |   def test_ts_typescript_by_heuristics | ||||||
|     languages = ["TypeScript", "XML"] |     languages = ["TypeScript", "XML"] | ||||||
|     results = Heuristics.disambiguate_ts(fixture("TypeScript/classes.ts"), languages) |     results = Heuristics.disambiguate_ts(fixture("TypeScript/classes.ts"), languages) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user