mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge pull request #916 from pchaigno/ecl
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) } | ||||
|           disambiguate_pl(data, languages) | ||||
|         end | ||||
|         if languages.all? { |l| ["ECL", "Prolog"].include?(l) } | ||||
|           disambiguate_ecl(data, languages) | ||||
|         end | ||||
|         if languages.all? { |l| ["TypeScript", "XML"].include?(l) } | ||||
|           disambiguate_ts(data, languages) | ||||
|         end | ||||
| @@ -46,6 +49,13 @@ module Linguist | ||||
|       matches | ||||
|     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) | ||||
|       matches = [] | ||||
|       if (data.include?("</translation>")) | ||||
|   | ||||
| @@ -1323,6 +1323,7 @@ Prolog: | ||||
|   color: "#74283c" | ||||
|   primary_extension: .prolog | ||||
|   extensions: | ||||
|   - .ecl | ||||
|   - .pl | ||||
|  | ||||
| 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 | ||||
|   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 | ||||
|     languages = ["TypeScript", "XML"] | ||||
|     results = Heuristics.disambiguate_ts(fixture("TypeScript/classes.ts"), languages) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user