mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Compare commits
	
		
			5 Commits
		
	
	
		
			v3.3.1
			...
			test/attri
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 8f86998866 | ||
|  | d4c8fb8a28 | ||
|  | 351c1cc8fd | ||
|  | 7ee006cbcb | ||
|  | 525304738e | 
							
								
								
									
										9
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | Gemfile linguist-vendored=true | ||||||
|  | lib/linguist.rb linguist-language=Java | ||||||
|  | test/*.rb linguist-language=Java | ||||||
|  | Rakefile linguist-generated | ||||||
|  | test/fixtures/* linguist-vendored=false | ||||||
|  | README.md linguist-documentation=false | ||||||
|  | samples/Arduino/* linguist-documentation | ||||||
|  | samples/Markdown/*.md linguist-detectable=true | ||||||
|  | samples/HTML/*.html linguist-detectable=false | ||||||
|   | |||||||
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,5 +1,3 @@ | |||||||
| Gemfile.lock | Gemfile.lock | ||||||
| .bundle/ | .bundle/ | ||||||
| vendor/ | vendor/ | ||||||
| benchmark/ |  | ||||||
| lib/linguist/samples.json |  | ||||||
|   | |||||||
| @@ -1,8 +1,8 @@ | |||||||
| before_install: | before_install:  | ||||||
|   - git fetch origin master:master |   - git fetch origin master:master | ||||||
|   - git fetch origin v2.0.0:v2.0.0 |   - git fetch origin v2.0.0:v2.0.0 | ||||||
|   - git fetch origin test/attributes:test/attributes |  | ||||||
|   - sudo apt-get install libicu-dev -y |   - sudo apt-get install libicu-dev -y | ||||||
|  |   - gem update --system 2.1.11 | ||||||
| rvm: | rvm: | ||||||
|   - 1.9.3 |   - 1.9.3 | ||||||
|   - 2.0.0 |   - 2.0.0 | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								Gemfile
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								Gemfile
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,2 @@ | |||||||
| source 'https://rubygems.org' | source 'https://rubygems.org' | ||||||
| gemspec | gemspec | ||||||
| gem 'rugged', '0.21.1b2' |  | ||||||
|   | |||||||
							
								
								
									
										62
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										62
									
								
								README.md
									
									
									
									
									
								
							| @@ -32,57 +32,33 @@ The Language stats bar that you see on every repository is built by aggregating | |||||||
|  |  | ||||||
| The repository stats API, accessed through `#languages`, can be used on a directory: | The repository stats API, accessed through `#languages`, can be used on a directory: | ||||||
|  |  | ||||||
| ***API UPDATE*** |  | ||||||
|  |  | ||||||
| Since [Version 3.0.0](https://github.com/github/linguist/releases/tag/v3.0.0) Linguist requires a git repository (in the form of a [Rugged::Repository](https://github.com/libgit2/rugged#repositories)) to be passed when initializing `Linguist::Repository`. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ```ruby | ```ruby | ||||||
| require 'rugged' | project = Linguist::Repository.from_directory(".") | ||||||
| require 'linguist' | project.language.name  #=> "Ruby" | ||||||
|  | project.languages      #=> { "Ruby" => 0.98, "Shell" => 0.02 } | ||||||
| repo = Rugged::Repository.new('.') |  | ||||||
| project = Linguist::Repository.new(repo, repo.head.target_id) |  | ||||||
| project.language       #=> "Ruby" |  | ||||||
| project.languages      #=> { "Ruby" => 119387 } |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| These stats are also printed out by the `linguist` binary. You can use the | These stats are also printed out by the `linguist` binary. You can use the | ||||||
| `--breakdown` flag, and the binary will also output the breakdown of files by language. | `--breakdown` flag, and the binary will also output the breakdown of files by language. | ||||||
|  |  | ||||||
| You can try running `linguist` on the root directory in this repository itself: | You can try running `linguist` on the `lib/` directory in this repository itself: | ||||||
|  |  | ||||||
|     $ bundle exec linguist --breakdown |     $ bundle exec linguist lib/ --breakdown | ||||||
|  |  | ||||||
|     100.00% Ruby |     100.00% Ruby | ||||||
|  |  | ||||||
|     Ruby: |     Ruby: | ||||||
|     Gemfile |     linguist/blob_helper.rb | ||||||
|     Rakefile |     linguist/classifier.rb | ||||||
|     bin/linguist |     linguist/file_blob.rb | ||||||
|     github-linguist.gemspec |     linguist/generated.rb | ||||||
|     lib/linguist.rb |     linguist/heuristics.rb | ||||||
|     lib/linguist/blob_helper.rb |     linguist/language.rb | ||||||
|     lib/linguist/classifier.rb |     linguist/md5.rb | ||||||
|     lib/linguist/file_blob.rb |     linguist/repository.rb | ||||||
|     lib/linguist/generated.rb |     linguist/samples.rb | ||||||
|     lib/linguist/heuristics.rb |     linguist/tokenizer.rb | ||||||
|     lib/linguist/language.rb |     linguist.rb | ||||||
|     lib/linguist/lazy_blob.rb |  | ||||||
|     lib/linguist/md5.rb |  | ||||||
|     lib/linguist/repository.rb |  | ||||||
|     lib/linguist/samples.rb |  | ||||||
|     lib/linguist/tokenizer.rb |  | ||||||
|     lib/linguist/version.rb |  | ||||||
|     test/test_blob.rb |  | ||||||
|     test/test_classifier.rb |  | ||||||
|     test/test_heuristics.rb |  | ||||||
|     test/test_language.rb |  | ||||||
|     test/test_md5.rb |  | ||||||
|     test/test_pedantic.rb |  | ||||||
|     test/test_repository.rb |  | ||||||
|     test/test_samples.rb |  | ||||||
|     test/test_tokenizer.rb |  | ||||||
|  |  | ||||||
| #### Ignore vendored files | #### Ignore vendored files | ||||||
|  |  | ||||||
| @@ -126,6 +102,10 @@ We try to only add languages once they have some usage on GitHub, so please note | |||||||
|  |  | ||||||
| Almost all bug fixes or new language additions should come with some additional code samples. Just drop them under [`samples/`](https://github.com/github/linguist/tree/master/samples) in the correct subdirectory and our test suite will automatically test them. In most cases you shouldn't need to add any new assertions. | Almost all bug fixes or new language additions should come with some additional code samples. Just drop them under [`samples/`](https://github.com/github/linguist/tree/master/samples) in the correct subdirectory and our test suite will automatically test them. In most cases you shouldn't need to add any new assertions. | ||||||
|  |  | ||||||
|  | To update the `samples.json` after adding new files to [`samples/`](https://github.com/github/linguist/tree/master/samples): | ||||||
|  |  | ||||||
|  |     bundle exec rake samples | ||||||
|  |  | ||||||
| ### A note on language extensions | ### A note on language extensions | ||||||
|  |  | ||||||
| Linguist has a number of methods available to it for identifying the language of a particular file. The initial lookup is based upon the extension of the file, possible file extensions are defined in an array called `extensions`. Take a look at this example for example for `Perl`: | Linguist has a number of methods available to it for identifying the language of a particular file. The initial lookup is based upon the extension of the file, possible file extensions are defined in an array called `extensions`. Take a look at this example for example for `Perl`: | ||||||
| @@ -165,7 +145,7 @@ If you are the current maintainer of this gem: | |||||||
|  0. Ensure that tests are green: `bundle exec rake test` |  0. Ensure that tests are green: `bundle exec rake test` | ||||||
|  0. Bump gem version in `lib/linguist/version.rb`.  For example, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985). |  0. Bump gem version in `lib/linguist/version.rb`.  For example, [like this](https://github.com/github/linguist/commit/8d2ea90a5ba3b2fe6e1508b7155aa4632eea2985). | ||||||
|  0. Make a PR to github/linguist.  For example, [#1238](https://github.com/github/linguist/pull/1238). |  0. Make a PR to github/linguist.  For example, [#1238](https://github.com/github/linguist/pull/1238). | ||||||
|  0. Build a local gem: `bundle exec rake build_gem` |  0. Build a local gem: `gem build github-linguist.gemspec` | ||||||
|  0. Testing: |  0. Testing: | ||||||
|    0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem |    0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem | ||||||
|    0. Install the new gem locally |    0. Install the new gem locally | ||||||
|   | |||||||
							
								
								
									
										82
									
								
								Rakefile
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										82
									
								
								Rakefile
									
									
									
										generated
									
									
									
								
							| @@ -7,16 +7,6 @@ task :default => :test | |||||||
|  |  | ||||||
| Rake::TestTask.new | Rake::TestTask.new | ||||||
|  |  | ||||||
| # Extend test task to check for samples |  | ||||||
| task :test => :check_samples |  | ||||||
|  |  | ||||||
| desc "Check that we have samples.json generated" |  | ||||||
| task :check_samples do |  | ||||||
|   unless File.exist?('lib/linguist/samples.json') |  | ||||||
|     Rake::Task[:samples].invoke |  | ||||||
|   end |  | ||||||
| end |  | ||||||
|  |  | ||||||
| task :samples do | task :samples do | ||||||
|   require 'linguist/samples' |   require 'linguist/samples' | ||||||
|   require 'yajl' |   require 'yajl' | ||||||
| @@ -25,74 +15,13 @@ task :samples do | |||||||
|   File.open('lib/linguist/samples.json', 'w') { |io| io.write json } |   File.open('lib/linguist/samples.json', 'w') { |io| io.write json } | ||||||
| end | end | ||||||
|  |  | ||||||
| task :build_gem => :samples do | task :build_gem do | ||||||
|   languages = YAML.load_file("lib/linguist/languages.yml") |   languages = YAML.load_file("lib/linguist/languages.yml") | ||||||
|   File.write("lib/linguist/languages.json", JSON.dump(languages)) |   File.write("lib/linguist/languages.json", JSON.dump(languages)) | ||||||
|   `gem build github-linguist.gemspec` |   `gem build github-linguist.gemspec` | ||||||
|   File.delete("lib/linguist/languages.json") |   File.delete("lib/linguist/languages.json") | ||||||
| end | end | ||||||
|  |  | ||||||
| namespace :benchmark do |  | ||||||
|   benchmark_path = "benchmark/results" |  | ||||||
|  |  | ||||||
|   # $ bundle exec rake benchmark:generate CORPUS=path/to/samples |  | ||||||
|   desc "Generate results for" |  | ||||||
|   task :generate do |  | ||||||
|     ref = `git rev-parse HEAD`.strip[0,8] |  | ||||||
|  |  | ||||||
|     corpus = File.expand_path(ENV["CORPUS"] || "samples") |  | ||||||
|  |  | ||||||
|     require 'linguist/language' |  | ||||||
|  |  | ||||||
|     results = Hash.new |  | ||||||
|     Dir.glob("#{corpus}/**/*").each do |file| |  | ||||||
|       next unless File.file?(file) |  | ||||||
|       filename = file.gsub("#{corpus}/", "") |  | ||||||
|       results[filename] = Linguist::FileBlob.new(file).language |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     # Ensure results directory exists |  | ||||||
|     FileUtils.mkdir_p("benchmark/results") |  | ||||||
|  |  | ||||||
|     # Write results |  | ||||||
|     if `git status`.include?('working directory clean') |  | ||||||
|       result_filename = "benchmark/results/#{File.basename(corpus)}-#{ref}.json" |  | ||||||
|     else |  | ||||||
|       result_filename = "benchmark/results/#{File.basename(corpus)}-#{ref}-unstaged.json" |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     File.write(result_filename, results.to_json) |  | ||||||
|     puts "wrote #{result_filename}" |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   # $ bundle exec rake benchmark:compare REFERENCE=path/to/reference.json CANDIDATE=path/to/candidate.json |  | ||||||
|   desc "Compare results" |  | ||||||
|   task :compare do |  | ||||||
|     reference_file = ENV["REFERENCE"] |  | ||||||
|     candidate_file = ENV["CANDIDATE"] |  | ||||||
|  |  | ||||||
|     reference = JSON.parse(File.read(reference_file)) |  | ||||||
|     reference_counts = Hash.new(0) |  | ||||||
|     reference.each { |filename, language| reference_counts[language] += 1 } |  | ||||||
|  |  | ||||||
|     candidate = JSON.parse(File.read(candidate_file)) |  | ||||||
|     candidate_counts = Hash.new(0) |  | ||||||
|     candidate.each { |filename, language| candidate_counts[language] += 1 } |  | ||||||
|  |  | ||||||
|     changes = diff(reference_counts, candidate_counts) |  | ||||||
|  |  | ||||||
|     if changes.any? |  | ||||||
|       changes.each do |language, (before, after)| |  | ||||||
|         before_percent = 100 * before / reference.size.to_f |  | ||||||
|         after_percent = 100 * after / candidate.size.to_f |  | ||||||
|         puts "%s changed from %.1f%% to %.1f%%" % [language || 'unknown', before_percent, after_percent] |  | ||||||
|       end |  | ||||||
|     else |  | ||||||
|       puts "No changes" |  | ||||||
|     end |  | ||||||
|   end |  | ||||||
| end |  | ||||||
|  |  | ||||||
| namespace :classifier do | namespace :classifier do | ||||||
|   LIMIT = 1_000 |   LIMIT = 1_000 | ||||||
|  |  | ||||||
| @@ -108,7 +37,7 @@ namespace :classifier do | |||||||
|       next if file_language.nil? || file_language == 'Text' |       next if file_language.nil? || file_language == 'Text' | ||||||
|       begin |       begin | ||||||
|         data = open(file_url).read |         data = open(file_url).read | ||||||
|         guessed_language, score = Linguist::Classifier.classify(Linguist::Samples.cache, data).first |         guessed_language, score = Linguist::Classifier.classify(Linguist::Samples::DATA, data).first | ||||||
|  |  | ||||||
|         total += 1 |         total += 1 | ||||||
|         guessed_language == file_language ? correct += 1 : incorrect += 1 |         guessed_language == file_language ? correct += 1 : incorrect += 1 | ||||||
| @@ -142,10 +71,3 @@ namespace :classifier do | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  |  | ||||||
| def diff(a, b) |  | ||||||
|   (a.keys | b.keys).each_with_object({}) do |key, diff| |  | ||||||
|     diff[key] = [a[key], b[key]] unless a[key] == b[key] |  | ||||||
|   end |  | ||||||
| end |  | ||||||
|   | |||||||
| @@ -17,10 +17,10 @@ Gem::Specification.new do |s| | |||||||
|   s.add_dependency 'escape_utils',    '~> 1.0.1' |   s.add_dependency 'escape_utils',    '~> 1.0.1' | ||||||
|   s.add_dependency 'mime-types',      '~> 1.19' |   s.add_dependency 'mime-types',      '~> 1.19' | ||||||
|   s.add_dependency 'pygments.rb',     '~> 0.6.0' |   s.add_dependency 'pygments.rb',     '~> 0.6.0' | ||||||
|  |   s.add_dependency 'rugged',          '~> 0.21.0' | ||||||
|  |  | ||||||
|   s.add_development_dependency 'json' |   s.add_development_dependency 'json' | ||||||
|   s.add_development_dependency 'mocha' |   s.add_development_dependency 'mocha' | ||||||
|   s.add_development_dependency 'pry' |  | ||||||
|   s.add_development_dependency 'rake' |   s.add_development_dependency 'rake' | ||||||
|   s.add_development_dependency 'yajl-ruby' |   s.add_development_dependency 'yajl-ruby' | ||||||
| end | end | ||||||
|   | |||||||
| @@ -321,11 +321,6 @@ module Linguist | |||||||
|       language ? language.lexer : Pygments::Lexer.find_by_name('Text only') |       language ? language.lexer : Pygments::Lexer.find_by_name('Text only') | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     # Internal: Get the TextMate compatible scope for the blob |  | ||||||
|     def tm_scope |  | ||||||
|       language && language.tm_scope |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     # Public: Highlight syntax of blob |     # Public: Highlight syntax of blob | ||||||
|     # |     # | ||||||
|     # options - A Hash of options (defaults to {}) |     # options - A Hash of options (defaults to {}) | ||||||
|   | |||||||
| @@ -63,7 +63,6 @@ module Linguist | |||||||
|         generated_jni_header? || |         generated_jni_header? || | ||||||
|         composer_lock? || |         composer_lock? || | ||||||
|         node_modules? || |         node_modules? || | ||||||
|         godeps? || |  | ||||||
|         vcr_cassette? || |         vcr_cassette? || | ||||||
|         generated_by_zephir? |         generated_by_zephir? | ||||||
|     end |     end | ||||||
| @@ -232,14 +231,6 @@ module Linguist | |||||||
|       !!name.match(/node_modules\//) |       !!name.match(/node_modules\//) | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     # Internal: Is the blob part of Godeps/, |  | ||||||
|     # which are not meant for humans in pull requests. |  | ||||||
|     # |  | ||||||
|     # Returns true or false. |  | ||||||
|     def godeps? |  | ||||||
|       !!name.match(/Godeps\//) |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     # Internal: Is the blob a generated php composer lock file? |     # Internal: Is the blob a generated php composer lock file? | ||||||
|     # |     # | ||||||
|     # Returns true or false. |     # Returns true or false. | ||||||
|   | |||||||
| @@ -19,17 +19,11 @@ module Linguist | |||||||
|         if languages.all? { |l| ["ECL", "Prolog"].include?(l) } |         if languages.all? { |l| ["ECL", "Prolog"].include?(l) } | ||||||
|           result = disambiguate_ecl(data, languages) |           result = disambiguate_ecl(data, languages) | ||||||
|         end |         end | ||||||
|         if languages.all? { |l| ["IDL", "Prolog"].include?(l) } |  | ||||||
|           result = disambiguate_pro(data, languages) |  | ||||||
|         end |  | ||||||
|         if languages.all? { |l| ["Common Lisp", "OpenCL"].include?(l) } |  | ||||||
|           result = disambiguate_cl(data, languages) |  | ||||||
|         end |  | ||||||
|         return result |         return result | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     # .h extensions are ambiguous between C, C++, and Objective-C. |     # .h extensions are ambigious between C, C++, and Objective-C. | ||||||
|     # We want to shortcut look for Objective-C _and_ now C++ too! |     # We want to shortcut look for Objective-C _and_ now C++ too! | ||||||
|     # |     # | ||||||
|     # Returns an array of Languages or [] |     # Returns an array of Languages or [] | ||||||
| @@ -54,16 +48,6 @@ module Linguist | |||||||
|       matches |       matches | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     def self.disambiguate_pro(data, languages) |  | ||||||
|       matches = [] |  | ||||||
|       if (data.include?(":-")) |  | ||||||
|         matches << Language["Prolog"] |  | ||||||
|       else |  | ||||||
|         matches << Language["IDL"] |  | ||||||
|       end |  | ||||||
|       matches |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     def self.disambiguate_ts(data, languages) |     def self.disambiguate_ts(data, languages) | ||||||
|       matches = [] |       matches = [] | ||||||
|       if (data.include?("</translation>")) |       if (data.include?("</translation>")) | ||||||
|   | |||||||
| @@ -135,8 +135,8 @@ module Linguist | |||||||
|         # No shebang. Still more work to do. Try to find it with our heuristics. |         # No shebang. Still more work to do. Try to find it with our heuristics. | ||||||
|         elsif (determined = Heuristics.find_by_heuristics(data, possible_language_names)) && !determined.empty? |         elsif (determined = Heuristics.find_by_heuristics(data, possible_language_names)) && !determined.empty? | ||||||
|           determined.first |           determined.first | ||||||
|         # Lastly, fall back to the probabilistic classifier. |         # Lastly, fall back to the probablistic classifier. | ||||||
|         elsif classified = Classifier.classify(Samples.cache, data, possible_language_names).first |         elsif classified = Classifier.classify(Samples::DATA, data, possible_language_names).first | ||||||
|           # Return the actual Language object based of the string language name (i.e., first element of `#classify`) |           # Return the actual Language object based of the string language name (i.e., first element of `#classify`) | ||||||
|           Language[classified[0]] |           Language[classified[0]] | ||||||
|         end |         end | ||||||
| @@ -290,16 +290,6 @@ module Linguist | |||||||
|       @lexer = Pygments::Lexer.find_by_name(attributes[:lexer] || name) || |       @lexer = Pygments::Lexer.find_by_name(attributes[:lexer] || name) || | ||||||
|         raise(ArgumentError, "#{@name} is missing lexer") |         raise(ArgumentError, "#{@name} is missing lexer") | ||||||
|  |  | ||||||
|       @tm_scope = attributes[:tm_scope] || begin |  | ||||||
|         context = case @type |  | ||||||
|                   when :data, :markup, :prose |  | ||||||
|                     'text' |  | ||||||
|                   when :programming, nil |  | ||||||
|                     'source' |  | ||||||
|                   end |  | ||||||
|         "#{context}.#{@name.downcase}" |  | ||||||
|       end |  | ||||||
|  |  | ||||||
|       @ace_mode = attributes[:ace_mode] |       @ace_mode = attributes[:ace_mode] | ||||||
|       @wrap = attributes[:wrap] || false |       @wrap = attributes[:wrap] || false | ||||||
|  |  | ||||||
| @@ -373,11 +363,6 @@ module Linguist | |||||||
|     # Returns the Lexer |     # Returns the Lexer | ||||||
|     attr_reader :lexer |     attr_reader :lexer | ||||||
|  |  | ||||||
|     # Public: Get the name of a TextMate-compatible scope |  | ||||||
|     # |  | ||||||
|     # Returns the scope |  | ||||||
|     attr_reader :tm_scope |  | ||||||
|  |  | ||||||
|     # Public: Get Ace mode |     # Public: Get Ace mode | ||||||
|     # |     # | ||||||
|     # Examples |     # Examples | ||||||
| @@ -525,9 +510,9 @@ module Linguist | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   extensions = Samples.cache['extnames'] |   extensions = Samples::DATA['extnames'] | ||||||
|   interpreters = Samples.cache['interpreters'] |   interpreters = Samples::DATA['interpreters'] | ||||||
|   filenames = Samples.cache['filenames'] |   filenames = Samples::DATA['filenames'] | ||||||
|   popular = YAML.load_file(File.expand_path("../popular.yml", __FILE__)) |   popular = YAML.load_file(File.expand_path("../popular.yml", __FILE__)) | ||||||
|  |  | ||||||
|   languages_yml = File.expand_path("../languages.yml", __FILE__) |   languages_yml = File.expand_path("../languages.yml", __FILE__) | ||||||
| @@ -579,7 +564,6 @@ module Linguist | |||||||
|       :type              => options['type'], |       :type              => options['type'], | ||||||
|       :aliases           => options['aliases'], |       :aliases           => options['aliases'], | ||||||
|       :lexer             => options['lexer'], |       :lexer             => options['lexer'], | ||||||
|       :tm_scope          => options['tm_scope'], |  | ||||||
|       :ace_mode          => options['ace_mode'], |       :ace_mode          => options['ace_mode'], | ||||||
|       :wrap              => options['wrap'], |       :wrap              => options['wrap'], | ||||||
|       :group_name        => options['group'], |       :group_name        => options['group'], | ||||||
|   | |||||||
| @@ -83,7 +83,6 @@ ATS: | |||||||
| ActionScript: | ActionScript: | ||||||
|   type: programming |   type: programming | ||||||
|   lexer: ActionScript 3 |   lexer: ActionScript 3 | ||||||
|   tm_scope: source.actionscript.3 |  | ||||||
|   color: "#e3491a" |   color: "#e3491a" | ||||||
|   search_term: as3 |   search_term: as3 | ||||||
|   aliases: |   aliases: | ||||||
| @@ -120,7 +119,7 @@ ApacheConf: | |||||||
|  |  | ||||||
| Apex: | Apex: | ||||||
|   type: programming |   type: programming | ||||||
|   lexer: Java |   lexer: Text only | ||||||
|   extensions: |   extensions: | ||||||
|   - .cls |   - .cls | ||||||
|  |  | ||||||
| @@ -283,9 +282,8 @@ C: | |||||||
| C#: | C#: | ||||||
|   type: programming |   type: programming | ||||||
|   ace_mode: csharp |   ace_mode: csharp | ||||||
|   tm_scope: source.cs |  | ||||||
|   search_term: csharp |   search_term: csharp | ||||||
|   color: "#178600" |   color: "#5a25a2" | ||||||
|   aliases: |   aliases: | ||||||
|   - csharp |   - csharp | ||||||
|   extensions: |   extensions: | ||||||
| @@ -413,7 +411,6 @@ Clojure: | |||||||
|  |  | ||||||
| CoffeeScript: | CoffeeScript: | ||||||
|   type: programming |   type: programming | ||||||
|   tm_scope: source.coffee |  | ||||||
|   ace_mode: coffee |   ace_mode: coffee | ||||||
|   color: "#244776" |   color: "#244776" | ||||||
|   aliases: |   aliases: | ||||||
| @@ -456,7 +453,6 @@ ColdFusion CFC: | |||||||
|  |  | ||||||
| Common Lisp: | Common Lisp: | ||||||
|   type: programming |   type: programming | ||||||
|   tm_scope: source.lisp |  | ||||||
|   color: "#3fb68b" |   color: "#3fb68b" | ||||||
|   aliases: |   aliases: | ||||||
|   - lisp |   - lisp | ||||||
| @@ -652,7 +648,6 @@ Elm: | |||||||
| Emacs Lisp: | Emacs Lisp: | ||||||
|   type: programming |   type: programming | ||||||
|   lexer: Common Lisp |   lexer: Common Lisp | ||||||
|   tm_scope: source.lisp |  | ||||||
|   color: "#c065db" |   color: "#c065db" | ||||||
|   aliases: |   aliases: | ||||||
|   - elisp |   - elisp | ||||||
| @@ -753,7 +748,6 @@ Forth: | |||||||
|   - .fth |   - .fth | ||||||
|   - .4th |   - .4th | ||||||
|   - .forth |   - .forth | ||||||
|   - .frt |  | ||||||
|  |  | ||||||
| Frege: | Frege: | ||||||
|   type: programming |   type: programming | ||||||
| @@ -762,14 +756,6 @@ Frege: | |||||||
|   extensions: |   extensions: | ||||||
|   - .fr |   - .fr | ||||||
|  |  | ||||||
| G-code: |  | ||||||
|   type: data |  | ||||||
|   lexer: Text only |  | ||||||
|   extensions: |  | ||||||
|   - .g |  | ||||||
|   - .gco |  | ||||||
|   - .gcode |  | ||||||
|  |  | ||||||
| Game Maker Language: | Game Maker Language: | ||||||
|   type: programming |   type: programming | ||||||
|   color: "#8ad353" |   color: "#8ad353" | ||||||
| @@ -799,12 +785,6 @@ GAS: | |||||||
|   - .s |   - .s | ||||||
|   - .S |   - .S | ||||||
|  |  | ||||||
| GDScript: |  | ||||||
|   type: programming |  | ||||||
|   lexer: Text only |  | ||||||
|   extensions: |  | ||||||
|   - .gd |  | ||||||
|  |  | ||||||
| GLSL: | GLSL: | ||||||
|   group: C |   group: C | ||||||
|   type: programming |   type: programming | ||||||
| @@ -897,12 +877,6 @@ Grammatical Framework: | |||||||
|   searchable: true |   searchable: true | ||||||
|   color: "#ff0000" |   color: "#ff0000" | ||||||
|  |  | ||||||
| Graph Modeling Language: |  | ||||||
|   type: data |  | ||||||
|   lexer: Text only |  | ||||||
|   extensions: |  | ||||||
|   - .gml |  | ||||||
|  |  | ||||||
| Groff: | Groff: | ||||||
|   extensions: |   extensions: | ||||||
|   - .man |   - .man | ||||||
| @@ -937,7 +911,6 @@ Groovy Server Pages: | |||||||
|  |  | ||||||
| HTML: | HTML: | ||||||
|   type: markup |   type: markup | ||||||
|   tm_scope: text.html.basic |  | ||||||
|   ace_mode: html |   ace_mode: html | ||||||
|   aliases: |   aliases: | ||||||
|   - xhtml |   - xhtml | ||||||
| @@ -949,7 +922,6 @@ HTML: | |||||||
|  |  | ||||||
| HTML+Django: | HTML+Django: | ||||||
|   type: markup |   type: markup | ||||||
|   tm_scope: text.html.django |  | ||||||
|   group: HTML |   group: HTML | ||||||
|   lexer: HTML+Django/Jinja |   lexer: HTML+Django/Jinja | ||||||
|   extensions: |   extensions: | ||||||
| @@ -958,7 +930,6 @@ HTML+Django: | |||||||
|  |  | ||||||
| HTML+ERB: | HTML+ERB: | ||||||
|   type: markup |   type: markup | ||||||
|   tm_scope: text.html.erb |  | ||||||
|   group: HTML |   group: HTML | ||||||
|   lexer: RHTML |   lexer: RHTML | ||||||
|   aliases: |   aliases: | ||||||
| @@ -969,7 +940,6 @@ HTML+ERB: | |||||||
|  |  | ||||||
| HTML+PHP: | HTML+PHP: | ||||||
|   type: markup |   type: markup | ||||||
|   tm_scope: text.html.php |  | ||||||
|   group: HTML |   group: HTML | ||||||
|   extensions: |   extensions: | ||||||
|   - .phtml |   - .phtml | ||||||
| @@ -1105,7 +1075,6 @@ J: | |||||||
|  |  | ||||||
| JSON: | JSON: | ||||||
|   type: data |   type: data | ||||||
|   tm_scope: source.json |  | ||||||
|   group: JavaScript |   group: JavaScript | ||||||
|   ace_mode: json |   ace_mode: json | ||||||
|   searchable: false |   searchable: false | ||||||
| @@ -1168,7 +1137,6 @@ Java Server Pages: | |||||||
|  |  | ||||||
| JavaScript: | JavaScript: | ||||||
|   type: programming |   type: programming | ||||||
|   tm_scope: source.js |  | ||||||
|   ace_mode: javascript |   ace_mode: javascript | ||||||
|   color: "#f1e05a" |   color: "#f1e05a" | ||||||
|   aliases: |   aliases: | ||||||
| @@ -1181,7 +1149,6 @@ JavaScript: | |||||||
|   - .es6 |   - .es6 | ||||||
|   - .frag |   - .frag | ||||||
|   - .jake |   - .jake | ||||||
|   - .jsb |  | ||||||
|   - .jsfl |   - .jsfl | ||||||
|   - .jsm |   - .jsm | ||||||
|   - .jss |   - .jss | ||||||
| @@ -1297,7 +1264,6 @@ Literate Agda: | |||||||
|  |  | ||||||
| Literate CoffeeScript: | Literate CoffeeScript: | ||||||
|   type: programming |   type: programming | ||||||
|   tm_scope: source.litcoffee |  | ||||||
|   group: CoffeeScript |   group: CoffeeScript | ||||||
|   lexer: Text only |   lexer: Text only | ||||||
|   ace_mode: markdown |   ace_mode: markdown | ||||||
| @@ -1581,7 +1547,6 @@ ObjDump: | |||||||
|  |  | ||||||
| Objective-C: | Objective-C: | ||||||
|   type: programming |   type: programming | ||||||
|   tm_scope: source.objc |  | ||||||
|   color: "#438eff" |   color: "#438eff" | ||||||
|   aliases: |   aliases: | ||||||
|   - obj-c |   - obj-c | ||||||
| @@ -1592,7 +1557,6 @@ Objective-C: | |||||||
|  |  | ||||||
| Objective-C++: | Objective-C++: | ||||||
|   type: programming |   type: programming | ||||||
|   tm_scope: source.objc++ |  | ||||||
|   color: "#4886FC" |   color: "#4886FC" | ||||||
|   aliases: |   aliases: | ||||||
|   - obj-c++ |   - obj-c++ | ||||||
| @@ -1683,7 +1647,6 @@ PAWN: | |||||||
|  |  | ||||||
| PHP: | PHP: | ||||||
|   type: programming |   type: programming | ||||||
|   tm_scope: text.html.php |  | ||||||
|   ace_mode: php |   ace_mode: php | ||||||
|   color: "#4F5D95" |   color: "#4F5D95" | ||||||
|   extensions: |   extensions: | ||||||
| @@ -1741,7 +1704,6 @@ Pascal: | |||||||
|   - .dfm |   - .dfm | ||||||
|   - .dpr |   - .dpr | ||||||
|   - .lpr |   - .lpr | ||||||
|   - .pp |  | ||||||
|  |  | ||||||
| Perl: | Perl: | ||||||
|   type: programming |   type: programming | ||||||
| @@ -1830,12 +1792,10 @@ Processing: | |||||||
|  |  | ||||||
| Prolog: | Prolog: | ||||||
|   type: programming |   type: programming | ||||||
|   lexer: Logtalk |  | ||||||
|   color: "#74283c" |   color: "#74283c" | ||||||
|   extensions: |   extensions: | ||||||
|   - .pl |   - .pl | ||||||
|   - .ecl |   - .ecl | ||||||
|   - .pro |  | ||||||
|   - .prolog |   - .prolog | ||||||
|  |  | ||||||
| Propeller Spin: | Propeller Spin: | ||||||
| @@ -2090,7 +2050,6 @@ SAS: | |||||||
|  |  | ||||||
| SCSS: | SCSS: | ||||||
|   type: markup |   type: markup | ||||||
|   tm_scope: source.scss |  | ||||||
|   group: CSS |   group: CSS | ||||||
|   ace_mode: scss |   ace_mode: scss | ||||||
|   extensions: |   extensions: | ||||||
| @@ -2106,7 +2065,6 @@ SQF: | |||||||
|  |  | ||||||
| SQL: | SQL: | ||||||
|   type: data |   type: data | ||||||
|   tm_scope: source.sql |  | ||||||
|   ace_mode: sql |   ace_mode: sql | ||||||
|   extensions: |   extensions: | ||||||
|   - .sql |   - .sql | ||||||
| @@ -2131,7 +2089,6 @@ Sage: | |||||||
|  |  | ||||||
| Sass: | Sass: | ||||||
|   type: markup |   type: markup | ||||||
|   tm_scope: source.sass |  | ||||||
|   group: CSS |   group: CSS | ||||||
|   extensions: |   extensions: | ||||||
|   - .sass |   - .sass | ||||||
| @@ -2606,7 +2563,6 @@ Xtend: | |||||||
|  |  | ||||||
| YAML: | YAML: | ||||||
|   type: data |   type: data | ||||||
|   tm_scope: source.yaml |  | ||||||
|   aliases: |   aliases: | ||||||
|   - yml |   - yml | ||||||
|   extensions: |   extensions: | ||||||
|   | |||||||
| @@ -1,13 +1,8 @@ | |||||||
| require 'linguist/blob_helper' | require 'linguist/blob_helper' | ||||||
| require 'linguist/language' |  | ||||||
| require 'rugged' | require 'rugged' | ||||||
|  |  | ||||||
| module Linguist | module Linguist | ||||||
|   class LazyBlob |   class LazyBlob | ||||||
|     GIT_ATTR = ['linguist-language', 'linguist-vendored'] |  | ||||||
|     GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true } |  | ||||||
|     GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS) |  | ||||||
|  |  | ||||||
|     include BlobHelper |     include BlobHelper | ||||||
|  |  | ||||||
|     MAX_SIZE = 128 * 1024 |     MAX_SIZE = 128 * 1024 | ||||||
| @@ -24,29 +19,6 @@ module Linguist | |||||||
|       @mode = mode |       @mode = mode | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     def git_attributes |  | ||||||
|       @git_attributes ||= repository.fetch_attributes( |  | ||||||
|         name, GIT_ATTR, GIT_ATTR_FLAGS) |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     def vendored? |  | ||||||
|       if attr = git_attributes['linguist-vendored'] |  | ||||||
|         return boolean_attribute(attr) |  | ||||||
|       else |  | ||||||
|         return super |  | ||||||
|       end |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     def language |  | ||||||
|       return @language if defined?(@language) |  | ||||||
|  |  | ||||||
|       @language = if lang = git_attributes['linguist-language'] |  | ||||||
|         Language.find_by_name(lang) |  | ||||||
|       else |  | ||||||
|         super |  | ||||||
|       end |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     def data |     def data | ||||||
|       load_blob! |       load_blob! | ||||||
|       @data |       @data | ||||||
| @@ -58,12 +30,6 @@ module Linguist | |||||||
|     end |     end | ||||||
|  |  | ||||||
|     protected |     protected | ||||||
|  |  | ||||||
|     # Returns true if the attribute is present and not the string "false". |  | ||||||
|     def boolean_attribute(attr) |  | ||||||
|       attr != "false" |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     def load_blob! |     def load_blob! | ||||||
|       @data, @size = Rugged::Blob.to_buffer(repository, oid, MAX_SIZE) if @data.nil? |       @data, @size = Rugged::Blob.to_buffer(repository, oid, MAX_SIZE) if @data.nil? | ||||||
|     end |     end | ||||||
|   | |||||||
| @@ -110,30 +110,18 @@ module Linguist | |||||||
|         if @old_commit_oid == @commit_oid |         if @old_commit_oid == @commit_oid | ||||||
|           @old_stats |           @old_stats | ||||||
|         else |         else | ||||||
|           compute_stats(@old_commit_oid, @old_stats) |           compute_stats(@old_commit_oid, @commit_oid, @old_stats) | ||||||
|         end |         end | ||||||
|       end |       end | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     def read_index |  | ||||||
|       attr_index = Rugged::Index.new |  | ||||||
|       attr_index.read_tree(current_tree) |  | ||||||
|       repository.index = attr_index |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     def current_tree |  | ||||||
|       @tree ||= Rugged::Commit.lookup(repository, @commit_oid).tree |  | ||||||
|     end |  | ||||||
|  |  | ||||||
|     protected |     protected | ||||||
|  |     def compute_stats(old_commit_oid, commit_oid, cache = nil) | ||||||
|     def compute_stats(old_commit_oid, cache = nil) |  | ||||||
|       file_map = cache ? cache.dup : {} |       file_map = cache ? cache.dup : {} | ||||||
|       old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree |       old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree | ||||||
|  |       new_tree = Rugged::Commit.lookup(repository, commit_oid).tree | ||||||
|  |  | ||||||
|       read_index |       diff = Rugged::Tree.diff(repository, old_tree, new_tree) | ||||||
|  |  | ||||||
|       diff = Rugged::Tree.diff(repository, old_tree, current_tree) |  | ||||||
|  |  | ||||||
|       diff.each_delta do |delta| |       diff.each_delta do |delta| | ||||||
|         old = delta.old_file[:path] |         old = delta.old_file[:path] | ||||||
|   | |||||||
							
								
								
									
										73542
									
								
								lib/linguist/samples.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73542
									
								
								lib/linguist/samples.json
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -17,11 +17,9 @@ module Linguist | |||||||
|     PATH = File.expand_path('../samples.json', __FILE__) |     PATH = File.expand_path('../samples.json', __FILE__) | ||||||
|  |  | ||||||
|     # Hash of serialized samples object |     # Hash of serialized samples object | ||||||
|     def self.cache |     if File.exist?(PATH) | ||||||
|       @cache ||= begin |       serializer = defined?(JSON) ? JSON : YAML | ||||||
|         serializer = defined?(JSON) ? JSON : YAML |       DATA = serializer.load(File.read(PATH)) | ||||||
|         serializer.load(File.read(PATH)) |  | ||||||
|       end |  | ||||||
|     end |     end | ||||||
|  |  | ||||||
|     # Public: Iterate over each sample. |     # Public: Iterate over each sample. | ||||||
|   | |||||||
| @@ -33,9 +33,6 @@ | |||||||
| # Erlang bundles | # Erlang bundles | ||||||
| - ^rebar$ | - ^rebar$ | ||||||
|  |  | ||||||
| # Go dependencies |  | ||||||
| - Godeps/_workspace/ |  | ||||||
|  |  | ||||||
| # Bootstrap minified css and js | # Bootstrap minified css and js | ||||||
| - (^|/)bootstrap([^.]*)(\.min)?\.(js|css)$ | - (^|/)bootstrap([^.]*)(\.min)?\.(js|css)$ | ||||||
|  |  | ||||||
| @@ -238,7 +235,3 @@ | |||||||
| - octicons.css | - octicons.css | ||||||
| - octicons.min.css | - octicons.min.css | ||||||
| - sprockets-octicons.scss | - sprockets-octicons.scss | ||||||
|  |  | ||||||
| # Typesafe Activator |  | ||||||
| - (^|/)activator$ |  | ||||||
| - (^|/)activator\.bat$ |  | ||||||
|   | |||||||
| @@ -1,3 +1,3 @@ | |||||||
| module Linguist | module Linguist | ||||||
|   VERSION = "3.3.1" |   VERSION = "3.1.5" | ||||||
| end | end | ||||||
|   | |||||||
| @@ -1,13 +1,13 @@ | |||||||
| "Test function for Ceylon" | doc "Test function for Ceylon" | ||||||
| by ("Enrique") | by  "Enrique" | ||||||
| shared void test() { | shared void test() { | ||||||
|     print("test"); |   print("test"); | ||||||
| } | } | ||||||
|  |  | ||||||
| "Test class for Ceylon" | doc "Test class for Ceylon" | ||||||
| shared class Test(name) satisfies Comparable<Test> { | shared class Test(name) satisfies Comparable<Test> { | ||||||
|     shared String name; |     shared String name; | ||||||
|     shared actual String string = "Test ``name``."; |     shared actual String string = "Test " name "."; | ||||||
|  |  | ||||||
|     shared actual Comparison compare(Test other) { |     shared actual Comparison compare(Test other) { | ||||||
|         return name<=>other.name; |         return name<=>other.name; | ||||||
|   | |||||||
| @@ -1,11 +0,0 @@ | |||||||
| definition module GenHylo |  | ||||||
|  |  | ||||||
| import StdGeneric, GenMap |  | ||||||
|  |  | ||||||
| :: Fix f = In (f .(Fix f)) |  | ||||||
| Out :: !u:(Fix v:a) -> v:(a w:(Fix v:a)), [u <= w] |  | ||||||
|  |  | ||||||
| hylo :: ((.f .b) -> .b) (.a -> (.f .a)) -> (.a -> .b) | gMap{|*->*|} f |  | ||||||
| cata :: (u:(f .a) -> .a) -> (Fix u:f) -> .a | gMap{|*->*|} f |  | ||||||
| ana :: (.a -> u:(f .a)) -> .a -> (Fix u:f) | gMap{|*->*|} f |  | ||||||
|  |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| definition module GenMap |  | ||||||
|  |  | ||||||
| import StdGeneric |  | ||||||
|  |  | ||||||
| generic gMap a b :: .a -> .b |  | ||||||
| derive gMap c, UNIT, PAIR, EITHER, CONS, FIELD, OBJECT, {}, {!}  |  | ||||||
|  |  | ||||||
| derive gMap [], (,), (,,),  (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,) |  | ||||||
|  |  | ||||||
| @@ -1,19 +0,0 @@ | |||||||
| implementation module GenMap |  | ||||||
|  |  | ||||||
| import StdClass, StdArray, StdInt, StdFunc |  | ||||||
| import StdGeneric, _Array |  | ||||||
|  |  | ||||||
| generic gMap a b :: .a -> .b |  | ||||||
| gMap{|c|} x 					= x |  | ||||||
| gMap{|UNIT|} x 					= x |  | ||||||
| gMap{|PAIR|} fx fy (PAIR x y) 	= PAIR (fx x) (fy y)  |  | ||||||
| gMap{|EITHER|} fl fr (LEFT x) 	= LEFT (fl x) |  | ||||||
| gMap{|EITHER|} fl fr (RIGHT x) 	= RIGHT (fr x) |  | ||||||
| gMap{|CONS|} f (CONS x) 		= CONS (f x) |  | ||||||
| gMap{|FIELD|} f (FIELD x) 		= FIELD (f x) |  | ||||||
| gMap{|OBJECT|} f (OBJECT x) 	= OBJECT (f x) |  | ||||||
| gMap{|{}|} f xs 				= mapArray f xs |  | ||||||
| gMap{|{!}|} f xs				= mapArray f xs |  | ||||||
|  |  | ||||||
| derive gMap [], (,), (,,),  (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,) |  | ||||||
|  |  | ||||||
| @@ -1,54 +0,0 @@ | |||||||
| module fsieve |  | ||||||
|  |  | ||||||
| /* |  | ||||||
| The Fast Sieve of Eratosthenes. |  | ||||||
|  |  | ||||||
| A sequential and optimized version of the sieve of Eratosthenes. |  | ||||||
| The program calculates a list of the first NrOfPrime primes. |  | ||||||
| The result of the program is the NrOfPrimes'th prime. |  | ||||||
|  |  | ||||||
| Strictness annotations have been added because the strictness analyser |  | ||||||
| is not able to deduce all strictness information. Removal of these !'s |  | ||||||
| will make the program about 20% slower. |  | ||||||
|  |  | ||||||
| On a machine without a math coprocessor the execution of this |  | ||||||
| program might take a (very) long time. Set NrOfPrimes to a smaller value. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| import StdClass; // RWS |  | ||||||
| import StdInt, StdReal |  | ||||||
|       |  | ||||||
| NrOfPrimes :== 3000  |  | ||||||
| 	 |  | ||||||
| //	The sieve algorithm: generate an infinite list of all primes. |  | ||||||
|  |  | ||||||
| Primes::[Int] |  | ||||||
| Primes = pr where pr = [5 : Sieve 7 4 pr] |  | ||||||
|  |  | ||||||
| Sieve::Int !Int [Int] -> [Int] |  | ||||||
| Sieve g i prs |  | ||||||
| 	| IsPrime prs g (toInt (sqrt (toReal g)))	=  [g : Sieve` g i prs] |  | ||||||
| 												=  Sieve (g + i) (6 - i) prs |  | ||||||
|  |  | ||||||
| Sieve`::Int Int [Int] -> [Int] |  | ||||||
| Sieve` g i prs =  Sieve (g + i) (6 - i) prs |  | ||||||
|  |  | ||||||
| IsPrime::[Int] !Int Int -> Bool |  | ||||||
| IsPrime [f:r] pr bd | f>bd 			=  True |  | ||||||
| 					| pr rem f==0	=  False |  | ||||||
| 									=  IsPrime r pr bd |  | ||||||
| 								   |  | ||||||
| //	Select is used to get the NrOfPrimes'th prime from the infinite list. |  | ||||||
|  |  | ||||||
| Select::[x] Int -> x |  | ||||||
| Select [f:r] 1 =  f |  | ||||||
| Select [f:r] n =  Select r (n - 1) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /*	The Start rule: Select the NrOfPrimes'th prime from the list of primes |  | ||||||
| 	generated by Primes. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| Start::Int |  | ||||||
| Start = Select [2, 3 : Primes] NrOfPrimes |  | ||||||
|  |  | ||||||
| @@ -1,99 +0,0 @@ | |||||||
| module monadicSemantics |  | ||||||
|  |  | ||||||
| import StdEnv, StdGeneric, GenMap, GenHylo |  | ||||||
|  |  | ||||||
| /* For fun I implemented the recursive datastructre Exp and Stm as fixpoints |  | ||||||
|    This helps us define recursive functions on them (only a little bit though) |  | ||||||
|    However deriving gMap for Fix did not works out of the box |  | ||||||
|    I had to remove some uniqueness typing in GenMap and GenHylo */ |  | ||||||
| :: Op      = Plus | Minus | Times | Rem | Equal | LessThan |  | ||||||
| :: Var     :== String |  | ||||||
|  |  | ||||||
| :: ExpP a  = Int Int | Var Var | Op Op a a |  | ||||||
| :: Exp     :== Fix ExpP |  | ||||||
|  |  | ||||||
| :: StmP a  = Assign Var Exp | If Exp a a | While Exp a | Seq a a | Cont |  | ||||||
| :: Stm     :== Fix StmP |  | ||||||
|  |  | ||||||
| derive gMap ExpP, StmP, Fix |  | ||||||
|  |  | ||||||
| // Environment. Semantics is basically Env -> Env |  | ||||||
| :: Env :== Var -> Int |  | ||||||
| :: Sem :== Env -> (Int, Env) |  | ||||||
| empty = \v . 0 |  | ||||||
|  |  | ||||||
| // return |  | ||||||
| rtn :: Int -> Sem |  | ||||||
| rtn i = \e. (i, e) |  | ||||||
|  |  | ||||||
| // the usual bind |  | ||||||
| (>>=) infixl 1 :: Sem (Int->Sem) -> Sem |  | ||||||
| (>>=) x y = \e. (\(i,e2).y i e2) (x e) |  | ||||||
| (>>|) infixl 1 :: Sem Sem -> Sem |  | ||||||
| (>>|) x y = x >>= \_. y |  | ||||||
|  |  | ||||||
| // read variable from environment |  | ||||||
| read :: Var -> Sem |  | ||||||
| read v = \e. (e v, e) |  | ||||||
|  |  | ||||||
| // assign value to give variable in environment |  | ||||||
| write :: Var Int -> Sem |  | ||||||
| write v i = \e. (i, \w. if (w==v) i (e w)) |  | ||||||
|  |  | ||||||
| // semantics |  | ||||||
| class sem a :: a -> Sem |  | ||||||
|  |  | ||||||
| operator :: Op -> Int -> Int -> Int |  | ||||||
| operator Plus     = (+) |  | ||||||
| operator Minus    = (-) |  | ||||||
| operator Times    = (*) |  | ||||||
| operator Rem      = rem |  | ||||||
| operator Equal    = \x y . if (x==y) 1 0 |  | ||||||
| operator LessThan = \x y . if (x< y)  1 0 |  | ||||||
|  |  | ||||||
| // semantics of expressions |  | ||||||
| instance sem Exp where |  | ||||||
| 	sem x = cata phi x where |  | ||||||
| 		phi (Int n)     = rtn n |  | ||||||
| 		phi (Var v)     = read v |  | ||||||
| 		phi (Op op x y) = x >>= \v1. y >>= return o (operator op v1) |  | ||||||
|  |  | ||||||
| // semantics of statments |  | ||||||
| // NOTE: while will always return 0, as it might not even be executed |  | ||||||
| instance sem Stm where |  | ||||||
| 	sem x = cata phi x where |  | ||||||
| 		phi (Assign v e)     = sem e >>= write v |  | ||||||
| 		phi (If e s1 s2)     = sem e >>= \b . if (b<>0) s1 s2 |  | ||||||
| 		phi stm=:(While e s) = sem e >>= \b . if (b<>0) (s >>| phi stm) (phi Cont) |  | ||||||
| 		phi (Seq s1 s2)      = s1 >>| s2    // Here the cata *finally* pays off :D |  | ||||||
| 		phi Cont             = rtn 0 |  | ||||||
|  |  | ||||||
| // convenience functions |  | ||||||
| int    = In o Int |  | ||||||
| var    = In o Var |  | ||||||
| op o   = In o2 (Op o) |  | ||||||
| assign = In o2 Assign |  | ||||||
| ifte e = In o2 (If e) |  | ||||||
| while  = In o2 While |  | ||||||
| seq    = In o2 Seq |  | ||||||
| cont   = In Cont |  | ||||||
|  |  | ||||||
| // test case, also testing the new operator < |  | ||||||
| pEuclides = |  | ||||||
| 	while (op LessThan (int 0) (var "b"))( |  | ||||||
| 		seq (assign "r" (op Rem (var "a") (var "b"))) |  | ||||||
| 		(seq (assign "a" (var "b")) |  | ||||||
| 		( (assign "b" (var "r"))) |  | ||||||
| 		) |  | ||||||
| 	) |  | ||||||
|  |  | ||||||
| Start = fst (program start) where |  | ||||||
| 	program = sem pEuclides >>| read "a" |  | ||||||
| 	start "a" = 9 |  | ||||||
| 	start "b" = 12 |  | ||||||
| 	start _ = 0 |  | ||||||
|  |  | ||||||
| // Helper |  | ||||||
| (o2) infixr 9 |  | ||||||
| (o2) f g x :== f o (g x) |  | ||||||
|  |  | ||||||
| @@ -1,14 +0,0 @@ | |||||||
| definition module stack |  | ||||||
|  |  | ||||||
| :: Stack a |  | ||||||
|  |  | ||||||
| newStack :: (Stack a) |  | ||||||
| push :: a (Stack a) -> Stack a |  | ||||||
| pushes :: [a] (Stack a) -> Stack a |  | ||||||
| pop :: (Stack a) -> Stack a |  | ||||||
| popn :: Int (Stack a) -> Stack a |  | ||||||
| top :: (Stack a) -> a |  | ||||||
| topn :: Int (Stack a) -> [a] |  | ||||||
| elements :: (Stack a) -> [a] |  | ||||||
| count :: (Stack a) -> Int |  | ||||||
|  |  | ||||||
| @@ -1,33 +0,0 @@ | |||||||
| implementation module stack |  | ||||||
| import StdEnv |  | ||||||
|  |  | ||||||
| :: Stack a :== [a] |  | ||||||
|  |  | ||||||
| newStack :: (Stack a) |  | ||||||
| newStack = [] |  | ||||||
|  |  | ||||||
| push :: a (Stack a) -> Stack a |  | ||||||
| push x s = [x:s] |  | ||||||
|  |  | ||||||
| pushes :: [a] (Stack a) -> Stack a |  | ||||||
| pushes x s = x ++ s |  | ||||||
|  |  | ||||||
| pop :: (Stack a) -> Stack a |  | ||||||
| pop [] = abort "Cannot use pop on an empty stack" |  | ||||||
| pop [e:s] = s |  | ||||||
|  |  | ||||||
| popn :: Int (Stack a) -> Stack a |  | ||||||
| popn n s  = drop n s |  | ||||||
|  |  | ||||||
| top :: (Stack a) -> a |  | ||||||
| top [] = abort "Cannot use top on an empty stack" |  | ||||||
| top [e:s] = e |  | ||||||
|  |  | ||||||
| topn :: Int (Stack a) -> [a] |  | ||||||
| topn n s = take n s |  | ||||||
| elements :: (Stack a) -> [a] |  | ||||||
| elements s = s |  | ||||||
|  |  | ||||||
| count :: (Stack a) -> Int |  | ||||||
| count s = length s |  | ||||||
|  |  | ||||||
| @@ -1,16 +0,0 @@ | |||||||
| definition module streams |  | ||||||
|  |  | ||||||
| import StdEnv |  | ||||||
|  |  | ||||||
| instance zero [Real] |  | ||||||
| instance one [Real] |  | ||||||
| instance + [Real]         |  | ||||||
| instance - [Real] |  | ||||||
| instance * [Real] |  | ||||||
| instance / [Real] |  | ||||||
|  |  | ||||||
| X :: [Real] |  | ||||||
| invert :: [Real] -> [Real] |  | ||||||
| pow :: [Real] Int -> [Real] |  | ||||||
| (shuffle) infixl 7 :: [Real] [Real] -> [Real] |  | ||||||
|  |  | ||||||
| @@ -1,49 +0,0 @@ | |||||||
| implementation module streams |  | ||||||
|  |  | ||||||
| import StdEnv |  | ||||||
|  |  | ||||||
| instance zero [Real] |  | ||||||
| where |  | ||||||
|         zero = [] //Infinite row of zeroes represented as empty list to ease computation |  | ||||||
|  |  | ||||||
| instance one [Real] |  | ||||||
| where |  | ||||||
|         one = [1.0:zero] |  | ||||||
|  |  | ||||||
| instance + [Real] |  | ||||||
| where |  | ||||||
|         (+) [s:s`] [t:t`] = [s+t:s`+t`] |  | ||||||
|         (+) [s:s`] [] = [s:s`] |  | ||||||
|         (+) [] [t:t`] = [t:t`] |  | ||||||
|         (+) [] [] = [] |  | ||||||
|          |  | ||||||
| instance - [Real] |  | ||||||
| where |  | ||||||
|         (-) [s:s`] [t:t`] = [s-t:s`-t`] |  | ||||||
|         (-) [s:s`] [] = [s:s`] |  | ||||||
|         (-) [] [t:t`] = [-1.0] * [t:t`] |  | ||||||
|         (-) [] [] = [] |  | ||||||
|  |  | ||||||
| instance * [Real] |  | ||||||
| where |  | ||||||
|         (*) [s:s`] [t:t`] = [s*t:s`*[t:t`]+[s]*t`] |  | ||||||
|         (*) _ _ = [] |  | ||||||
|  |  | ||||||
| instance / [Real] |  | ||||||
| where |  | ||||||
|         (/) s t = s * (invert t) |  | ||||||
|  |  | ||||||
| X :: [Real] |  | ||||||
| X = [0.0:one] |  | ||||||
|  |  | ||||||
| invert :: [Real] -> [Real] |  | ||||||
| invert [s:s`] = [1.0/s:(invert [s:s`]) * s` * [-1.0/s]] |  | ||||||
|  |  | ||||||
| pow :: [Real] Int -> [Real] |  | ||||||
| pow s 0 = one |  | ||||||
| pow s n = s * pow s (n-1) |  | ||||||
|  |  | ||||||
| (shuffle) infixl 7 :: [Real] [Real] -> [Real] |  | ||||||
| (shuffle) [s:s`] [t:t`] = [s*t:s` shuffle [t:t`] + [s:s`] shuffle t`] |  | ||||||
| (shuffle) _ _ = [] |  | ||||||
|  |  | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| \ Bit arrays. |  | ||||||
| : bits ( u1 -- u2 ) 7 + 3 rshift ; |  | ||||||
| : bitmap ( u "name" -- ) create bits here over erase allot |  | ||||||
|    does> ( u -- a x ) over 3 rshift +  1 rot 7 and lshift ; |  | ||||||
| : bit@ ( a x -- f ) swap c@ and ; |  | ||||||
| : 1bit ( a x -- ) over c@ or swap c! ; |  | ||||||
| : 0bit ( a x -- ) invert over c@ and swap c! ; |  | ||||||
| : bit! ( f a x -- ) rot if 1bit else 0bit then ; |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| \ Implements ENUM. |  | ||||||
|  |  | ||||||
| \ Double DOES>! |  | ||||||
| : enum   create 0 ,  does> create dup @ 1 rot +! ,  does> @ ; |  | ||||||
|  |  | ||||||
| \ But this is simpler. |  | ||||||
| : enum   create 0 ,  does> dup @ constant 1 swap +! ; |  | ||||||
| @@ -1,8 +0,0 @@ | |||||||
| \ Simplifies compiling words. |  | ||||||
|  |  | ||||||
| : [[     ; immediate |  | ||||||
| : '<>    >in @ ' swap >in ! <> ; |  | ||||||
| : (]])   begin dup '<> while postpone postpone repeat drop ; |  | ||||||
| : ]]     ['] [[ (]]) ; immediate |  | ||||||
|  |  | ||||||
| ( Usage:   : foo ]] dup * [[ ; immediate   : bar 42 foo . ; ) |  | ||||||
| @@ -1,57 +0,0 @@ | |||||||
| ; RepRapPro Ormerod |  | ||||||
| ; Board test GCodes |  | ||||||
| M111 S1; Debug on |  | ||||||
| G21 ; mm |  | ||||||
| G90 ; Absolute positioning |  | ||||||
| M83 ; Extrusion relative |  | ||||||
| M906 X800 Y800 Z800 E800 ; Motor currents (mA) |  | ||||||
| T0 ; Extruder 0 |  | ||||||
| G1 X50 F500 |  | ||||||
| G1 X0 |  | ||||||
| G4 P500 |  | ||||||
| G1 Y50 F500 |  | ||||||
| G1 Y0 |  | ||||||
| G4 P500 |  | ||||||
| G1 Z20 F200 |  | ||||||
| G1 Z0 |  | ||||||
| G4 P500 |  | ||||||
| G1 E20 F200 |  | ||||||
| G1 E-20 |  | ||||||
| G4 P500 |  | ||||||
| M106 S255 |  | ||||||
| G4 P500 |  | ||||||
| M106 S0 |  | ||||||
| G4 P500 |  | ||||||
| M105 |  | ||||||
| G10 P0 S100 |  | ||||||
| T0 |  | ||||||
| M140 S100 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| G4 P5000 |  | ||||||
| M105 |  | ||||||
| M0 |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										25912
									
								
								samples/G-code/lm.g
									
									
									
									
									
								
							
							
						
						
									
										25912
									
								
								samples/G-code/lm.g
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										29735
									
								
								samples/G-code/rm.g
									
									
									
									
									
								
							
							
						
						
									
										29735
									
								
								samples/G-code/rm.g
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,13 +0,0 @@ | |||||||
| G28 X0 Y0 |  | ||||||
| G1 X55 Y5 F2000 |  | ||||||
| G1 Y180 |  | ||||||
| G1 X180 |  | ||||||
| G1 Y5 |  | ||||||
| G1 X55 |  | ||||||
| G1 Y180 |  | ||||||
| G1 X180 |  | ||||||
| G1 Y5 |  | ||||||
| G1 X55 |  | ||||||
| M0 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -1,57 +0,0 @@ | |||||||
| # Taken from https://github.com/okamstudio/godot/wiki/gdscript |  | ||||||
| # a file is a class! |  | ||||||
|  |  | ||||||
| # inheritance |  | ||||||
|  |  | ||||||
| extends BaseClass |  | ||||||
|  |  | ||||||
| # member variables |  | ||||||
|  |  | ||||||
| var a = 5  |  | ||||||
| var s = "Hello" |  | ||||||
| var arr = [1, 2, 3] |  | ||||||
| var dict = {"key":"value", 2:3} |  | ||||||
|  |  | ||||||
| # constants |  | ||||||
|  |  | ||||||
| const answer = 42 |  | ||||||
| const thename = "Charly" |  | ||||||
|  |  | ||||||
| # built-in vector types |  | ||||||
|  |  | ||||||
| var v2 = Vector2(1, 2) |  | ||||||
| var v3 = Vector3(1, 2, 3) |  | ||||||
|  |  | ||||||
| # function |  | ||||||
|  |  | ||||||
| func some_function(param1, param2): |  | ||||||
|     var local_var = 5 |  | ||||||
|  |  | ||||||
|     if param1 < local_var: |  | ||||||
|         print(param1) |  | ||||||
|     elif param2 > 5: |  | ||||||
|         print(param2) |  | ||||||
|     else: |  | ||||||
|         print("fail!") |  | ||||||
|  |  | ||||||
|     for i in range(20): |  | ||||||
|         print(i) |  | ||||||
|  |  | ||||||
|     while(param2 != 0): |  | ||||||
|         param2 -= 1 |  | ||||||
|  |  | ||||||
|     var local_var2 = param1+3 |  | ||||||
|     return local_var2 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| # subclass |  | ||||||
|  |  | ||||||
| class Something: |  | ||||||
|     var a = 10 |  | ||||||
|  |  | ||||||
| # constructor |  | ||||||
|  |  | ||||||
| func _init(): |  | ||||||
|     print("constructed!") |  | ||||||
|     var lv = Something.new() |  | ||||||
|     print(lv.a) |  | ||||||
| @@ -1,216 +0,0 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
| extends Control |  | ||||||
|  |  | ||||||
| # Simple Tetris-like demo, (c) 2012 Juan Linietsky |  | ||||||
| # Implemented by using a regular Control and drawing on it during the _draw() callback. |  | ||||||
| # The drawing surface is updated only when changes happen (by calling update()) |  | ||||||
|  |  | ||||||
|  |  | ||||||
| var score = 0 |  | ||||||
| var score_label=null |  | ||||||
|  |  | ||||||
| const MAX_SHAPES = 7 |  | ||||||
|  |  | ||||||
| var block = preload("block.png") |  | ||||||
|  |  | ||||||
| var block_colors=[ |  | ||||||
| 	Color(1,0.5,0.5), |  | ||||||
| 	Color(0.5,1,0.5), |  | ||||||
| 	Color(0.5,0.5,1), |  | ||||||
| 	Color(0.8,0.4,0.8), |  | ||||||
| 	Color(0.8,0.8,0.4), |  | ||||||
| 	Color(0.4,0.8,0.8), |  | ||||||
| 	Color(0.7,0.7,0.7)] |  | ||||||
|  |  | ||||||
| var	block_shapes=[ |  | ||||||
| 	[ Vector2(0,-1),Vector2(0,0),Vector2(0,1),Vector2(0,2) ], # I |  | ||||||
| 	[ Vector2(0,0),Vector2(1,0),Vector2(1,1),Vector2(0,1) ], # O |  | ||||||
| 	[ Vector2(-1,1),Vector2(0,1),Vector2(0,0),Vector2(1,0) ], # S |  | ||||||
| 	[ Vector2(1,1),Vector2(0,1),Vector2(0,0),Vector2(-1,0) ], # Z |  | ||||||
| 	[ Vector2(-1,1),Vector2(-1,0),Vector2(0,0),Vector2(1,0) ], # L |  | ||||||
| 	[ Vector2(1,1),Vector2(1,0),Vector2(0,0),Vector2(-1,0) ], # J |  | ||||||
| 	[ Vector2(0,1),Vector2(1,0),Vector2(0,0),Vector2(-1,0) ]] # T |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
| var block_rotations=[ |  | ||||||
| 	Matrix32( Vector2(1,0),Vector2(0,1), Vector2() ), |  | ||||||
| 	Matrix32( Vector2(0,1),Vector2(-1,0), Vector2() ), |  | ||||||
| 	Matrix32( Vector2(-1,0),Vector2(0,-1), Vector2() ), |  | ||||||
| 	Matrix32( Vector2(0,-1),Vector2(1,0), Vector2() ) |  | ||||||
| ] |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
| var width=0 |  | ||||||
| var height=0 |  | ||||||
|  |  | ||||||
| var cells={} |  | ||||||
|  |  | ||||||
| var piece_active=false |  | ||||||
| var piece_shape=0 |  | ||||||
| var piece_pos=Vector2() |  | ||||||
| var piece_rot=0 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| func piece_cell_xform(p,er=0): |  | ||||||
| 	var r = (4+er+piece_rot)%4 |  | ||||||
| 	return piece_pos+block_rotations[r].xform(p) |  | ||||||
|  |  | ||||||
| func _draw(): |  | ||||||
|  |  | ||||||
| 	var sb = get_stylebox("bg","Tree") # use line edit bg |  | ||||||
| 	draw_style_box(sb,Rect2(Vector2(),get_size()).grow(3)) |  | ||||||
| 	 |  | ||||||
| 	var bs = block.get_size() |  | ||||||
| 	for y in range(height): |  | ||||||
| 		for x in range(width): |  | ||||||
| 			if (Vector2(x,y) in cells): |  | ||||||
| 				draw_texture_rect(block,Rect2(Vector2(x,y)*bs,bs),false,block_colors[cells[Vector2(x,y)]]) |  | ||||||
| 				 |  | ||||||
| 	if (piece_active): |  | ||||||
| 		 |  | ||||||
| 		for c in block_shapes[piece_shape]: |  | ||||||
| 			draw_texture_rect(block,Rect2(piece_cell_xform(c)*bs,bs),false,block_colors[piece_shape]) |  | ||||||
| 			 |  | ||||||
|  |  | ||||||
| func piece_check_fit(ofs,er=0): |  | ||||||
|  |  | ||||||
| 	for c in block_shapes[piece_shape]: |  | ||||||
| 		var pos = piece_cell_xform(c,er)+ofs |  | ||||||
| 		if (pos.x < 0): |  | ||||||
| 			return false |  | ||||||
| 		if (pos.y < 0): |  | ||||||
| 			return false |  | ||||||
| 		if (pos.x >= width): |  | ||||||
| 			return false |  | ||||||
| 		if (pos.y >= height): |  | ||||||
| 			return false |  | ||||||
| 		if (pos in cells): |  | ||||||
| 			return false |  | ||||||
| 	 |  | ||||||
| 	return true	 |  | ||||||
|  |  | ||||||
| func new_piece(): |  | ||||||
|  |  | ||||||
| 	piece_shape = randi() % MAX_SHAPES	 |  | ||||||
| 	piece_pos = Vector2(width/2,0) |  | ||||||
| 	piece_active=true |  | ||||||
| 	piece_rot=0 |  | ||||||
| 	if (piece_shape==0): |  | ||||||
| 		piece_pos.y+=1 |  | ||||||
| 		 |  | ||||||
| 	if (not piece_check_fit(Vector2())): |  | ||||||
| 		#game over |  | ||||||
| 		#print("GAME OVER!") |  | ||||||
| 		game_over() |  | ||||||
| 		 |  | ||||||
| 	update() |  | ||||||
| 		 |  | ||||||
| 	 |  | ||||||
| func test_collapse_rows(): |  | ||||||
| 	var accum_down=0 |  | ||||||
| 	for i in range(height): |  | ||||||
| 		var y = height - i - 1 |  | ||||||
| 		var collapse = true |  | ||||||
| 		for x in range(width): |  | ||||||
| 			if (Vector2(x,y) in cells): |  | ||||||
| 				if (accum_down): |  | ||||||
| 					cells[ Vector2(x,y+accum_down) ] = cells[Vector2(x,y)] |  | ||||||
| 			else: |  | ||||||
| 				collapse=false |  | ||||||
| 				if (accum_down): |  | ||||||
| 					cells.erase( Vector2(x,y+accum_down) ) |  | ||||||
| 						 |  | ||||||
| 		if (collapse): |  | ||||||
| 			accum_down+=1 |  | ||||||
| 		 |  | ||||||
| 			 |  | ||||||
| 	score+=accum_down*100 |  | ||||||
| 	score_label.set_text(str(score)) |  | ||||||
| 			 |  | ||||||
| 		 |  | ||||||
| func game_over(): |  | ||||||
|  |  | ||||||
| 		piece_active=false |  | ||||||
| 		get_node("gameover").set_text("Game Over")		 |  | ||||||
| 		update() |  | ||||||
| 				 |  | ||||||
| 		 |  | ||||||
| func restart_pressed(): |  | ||||||
|  |  | ||||||
| 		score=0 |  | ||||||
| 		score_label.set_text("0") |  | ||||||
| 		cells.clear() |  | ||||||
| 		get_node("gameover").set_text("")		 |  | ||||||
| 		piece_active=true |  | ||||||
| 		update() |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
|  |  | ||||||
| func piece_move_down(): |  | ||||||
|  |  | ||||||
| 	if (!piece_active): |  | ||||||
| 		return |  | ||||||
| 	if (piece_check_fit(Vector2(0,1))): |  | ||||||
| 		piece_pos.y+=1 |  | ||||||
| 		update()		 |  | ||||||
| 	else: |  | ||||||
|  |  | ||||||
| 		for c in block_shapes[piece_shape]: |  | ||||||
| 			var pos = piece_cell_xform(c) |  | ||||||
| 			cells[pos]=piece_shape |  | ||||||
| 		test_collapse_rows() |  | ||||||
| 		new_piece() |  | ||||||
| 		 |  | ||||||
|  |  | ||||||
| func piece_rotate(): |  | ||||||
|  |  | ||||||
| 	var adv = 1 |  | ||||||
| 	if (not piece_check_fit(Vector2(),1)): |  | ||||||
| 		return |  | ||||||
| 	piece_rot = (piece_rot + adv) % 4 |  | ||||||
| 	update() |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
| func _input(ie): |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	if (not piece_active): |  | ||||||
| 		return |  | ||||||
| 	if (!ie.is_pressed()): |  | ||||||
| 		return |  | ||||||
|  |  | ||||||
| 	if (ie.is_action("move_left")): |  | ||||||
| 		if (piece_check_fit(Vector2(-1,0))): |  | ||||||
| 			piece_pos.x-=1 |  | ||||||
| 			update() |  | ||||||
| 	elif (ie.is_action("move_right")): |  | ||||||
| 		if (piece_check_fit(Vector2(1,0))): |  | ||||||
| 			piece_pos.x+=1 |  | ||||||
| 			update() |  | ||||||
| 	elif (ie.is_action("move_down")): |  | ||||||
| 		piece_move_down() |  | ||||||
| 	elif (ie.is_action("rotate")): |  | ||||||
| 		piece_rotate() |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| func setup(w,h): |  | ||||||
| 	width=w |  | ||||||
| 	height=h |  | ||||||
| 	set_size( Vector2(w,h)*block.get_size() ) |  | ||||||
| 	new_piece() |  | ||||||
| 	get_node("timer").start() |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
| func _ready(): |  | ||||||
| 	# Initalization here |  | ||||||
|  |  | ||||||
| 	setup(10,20) |  | ||||||
| 	score_label = get_node("../score") |  | ||||||
|  |  | ||||||
| 	set_process_input(true) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -1,243 +0,0 @@ | |||||||
|  |  | ||||||
| extends RigidBody |  | ||||||
|  |  | ||||||
| # member variables here, example: |  | ||||||
| # var a=2 |  | ||||||
| # var b="textvar" |  | ||||||
|  |  | ||||||
| #var dir=Vector3() |  | ||||||
|  |  | ||||||
| const ANIM_FLOOR = 0 |  | ||||||
| const ANIM_AIR_UP = 1 |  | ||||||
| const ANIM_AIR_DOWN = 2 |  | ||||||
|  |  | ||||||
| const SHOOT_TIME = 1.5 |  | ||||||
| const SHOOT_SCALE = 2 |  | ||||||
|  |  | ||||||
| const CHAR_SCALE = Vector3(0.3,0.3,0.3) |  | ||||||
|  |  | ||||||
| var facing_dir = Vector3(1, 0, 0) |  | ||||||
| var movement_dir = Vector3() |  | ||||||
|  |  | ||||||
| var jumping=false |  | ||||||
|  |  | ||||||
| var turn_speed=40 |  | ||||||
| var keep_jump_inertia = true |  | ||||||
| var air_idle_deaccel = false |  | ||||||
| var accel=19.0 |  | ||||||
| var deaccel=14.0 |  | ||||||
| var sharp_turn_threshhold = 140 |  | ||||||
|  |  | ||||||
| var max_speed=3.1 |  | ||||||
| var on_floor = false |  | ||||||
|  |  | ||||||
| var prev_shoot = false |  | ||||||
|  |  | ||||||
| var last_floor_velocity = Vector3() |  | ||||||
|  |  | ||||||
| var shoot_blend = 0 |  | ||||||
|  |  | ||||||
| func adjust_facing(p_facing, p_target,p_step, p_adjust_rate,current_gn): |  | ||||||
|  |  | ||||||
| 	var n = p_target # normal |  | ||||||
| 	var t = n.cross(current_gn).normalized() |  | ||||||
| 	 |  | ||||||
| 	var x = n.dot(p_facing) |  | ||||||
| 	var y = t.dot(p_facing) |  | ||||||
| 	 |  | ||||||
| 	var ang = atan2(y,x) |  | ||||||
| 	 |  | ||||||
| 	if (abs(ang)<0.001): # too small |  | ||||||
| 		return p_facing |  | ||||||
| 	 |  | ||||||
| 	var s = sign(ang) |  | ||||||
| 	ang = ang * s |  | ||||||
| 	var turn = ang * p_adjust_rate * p_step |  | ||||||
| 	var a |  | ||||||
| 	if (ang<turn): |  | ||||||
| 		a=ang |  | ||||||
| 	else: |  | ||||||
| 		a=turn |  | ||||||
| 	ang = (ang - a) * s |  | ||||||
| 	 |  | ||||||
| 	return ((n * cos(ang)) + (t * sin(ang))) * p_facing.length() |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| func _integrate_forces( state ): |  | ||||||
|  |  | ||||||
| 	var lv = state.get_linear_velocity() # linear velocity |  | ||||||
| 	var g = state.get_total_gravity() |  | ||||||
| 	var delta = state.get_step() |  | ||||||
| 	var d = 1.0 - delta*state.get_total_density() |  | ||||||
| 	if (d<0): |  | ||||||
| 		d=0 |  | ||||||
| 	lv += g * delta #apply gravity |  | ||||||
|  |  | ||||||
| 	var anim = ANIM_FLOOR |  | ||||||
|  |  | ||||||
| 	var up = -g.normalized() # (up is against gravity) |  | ||||||
| 	var vv = up.dot(lv) # vertical velocity |  | ||||||
| 	var hv = lv - (up*vv) # horizontal velocity |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	var hdir = hv.normalized() # horizontal direction |  | ||||||
| 	var hspeed = hv.length()	#horizontal speed |  | ||||||
|  |  | ||||||
| 	var floor_velocity |  | ||||||
| 	var onfloor = false |  | ||||||
|  |  | ||||||
| 	if (state.get_contact_count() == 0): |  | ||||||
| 		floor_velocity = last_floor_velocity |  | ||||||
| 	else: |  | ||||||
| 		for i in range(state.get_contact_count()): |  | ||||||
| 			if (state.get_contact_local_shape(i) != 1): |  | ||||||
| 				continue |  | ||||||
| 			 |  | ||||||
| 			onfloor = true |  | ||||||
| 			floor_velocity = state.get_contact_collider_velocity_at_pos(i) |  | ||||||
| 			break |  | ||||||
| 		 |  | ||||||
|  |  | ||||||
| 	var dir = Vector3() #where does the player intend to walk to |  | ||||||
| 	var cam_xform = get_node("target/camera").get_global_transform() |  | ||||||
| 	 |  | ||||||
| 	if (Input.is_action_pressed("move_forward")): |  | ||||||
| 		dir+=-cam_xform.basis[2]  |  | ||||||
| 	if (Input.is_action_pressed("move_backwards")): |  | ||||||
| 		dir+=cam_xform.basis[2]  |  | ||||||
| 	if (Input.is_action_pressed("move_left")): |  | ||||||
| 		dir+=-cam_xform.basis[0]  |  | ||||||
| 	if (Input.is_action_pressed("move_right")): |  | ||||||
| 		dir+=cam_xform.basis[0]  |  | ||||||
| 		 |  | ||||||
| 	var jump_attempt = Input.is_action_pressed("jump") |  | ||||||
| 	var shoot_attempt = Input.is_action_pressed("shoot") |  | ||||||
| 		 |  | ||||||
| 	var target_dir = (dir - up*dir.dot(up)).normalized() |  | ||||||
| 	 |  | ||||||
| 	if (onfloor): |  | ||||||
|  |  | ||||||
| 		var sharp_turn = hspeed > 0.1 and rad2deg(acos(target_dir.dot(hdir))) > sharp_turn_threshhold |  | ||||||
|  |  | ||||||
| 		if (dir.length()>0.1 and !sharp_turn) : |  | ||||||
| 			if (hspeed > 0.001) : |  | ||||||
|  |  | ||||||
| 				#linear_dir = linear_h_velocity/linear_vel |  | ||||||
| 				#if (linear_vel > brake_velocity_limit and linear_dir.dot(ctarget_dir)<-cos(Math::deg2rad(brake_angular_limit))) |  | ||||||
| 				#	brake=true |  | ||||||
| 				#else |  | ||||||
| 				hdir = adjust_facing(hdir,target_dir,delta,1.0/hspeed*turn_speed,up) |  | ||||||
| 				facing_dir = hdir |  | ||||||
| 			else: |  | ||||||
|  |  | ||||||
| 				hdir = target_dir |  | ||||||
| 			 |  | ||||||
| 			if (hspeed<max_speed): |  | ||||||
| 				hspeed+=accel*delta |  | ||||||
|  |  | ||||||
| 		else: |  | ||||||
| 			hspeed-=deaccel*delta |  | ||||||
| 			if (hspeed<0): |  | ||||||
| 				hspeed=0 |  | ||||||
| 		 |  | ||||||
| 		hv = hdir*hspeed |  | ||||||
| 		 |  | ||||||
| 		var mesh_xform = get_node("Armature").get_transform()  |  | ||||||
| 		var facing_mesh=-mesh_xform.basis[0].normalized() |  | ||||||
| 		facing_mesh = (facing_mesh - up*facing_mesh.dot(up)).normalized() |  | ||||||
| 		facing_mesh = adjust_facing(facing_mesh,target_dir,delta,1.0/hspeed*turn_speed,up) |  | ||||||
| 		var m3 = Matrix3(-facing_mesh,up,-facing_mesh.cross(up).normalized()).scaled( CHAR_SCALE ) |  | ||||||
| 		 |  | ||||||
| 		get_node("Armature").set_transform(Transform(m3,mesh_xform.origin)) |  | ||||||
| 				 |  | ||||||
| 		if (not jumping and jump_attempt): |  | ||||||
| 			vv = 7.0 |  | ||||||
| 			jumping = true		 |  | ||||||
| 			get_node("sfx").play("jump") |  | ||||||
| 	else: |  | ||||||
|  |  | ||||||
| 		if (vv>0): |  | ||||||
| 			anim=ANIM_AIR_UP |  | ||||||
| 		else: |  | ||||||
| 			anim=ANIM_AIR_DOWN |  | ||||||
| 			 |  | ||||||
| 		var hs |  | ||||||
| 		if (dir.length()>0.1): |  | ||||||
|  |  | ||||||
| 			hv += target_dir * (accel * 0.2) * delta |  | ||||||
| 			if (hv.length() > max_speed): |  | ||||||
| 				hv = hv.normalized() * max_speed |  | ||||||
|  |  | ||||||
| 		else: |  | ||||||
|  |  | ||||||
| 			if (air_idle_deaccel): |  | ||||||
| 				hspeed = hspeed - (deaccel * 0.2) * delta |  | ||||||
| 				if (hspeed<0): |  | ||||||
| 					hspeed=0 |  | ||||||
|  |  | ||||||
| 				hv = hdir*hspeed |  | ||||||
| 			 |  | ||||||
| 		 |  | ||||||
| 	if (jumping and vv < 0): |  | ||||||
| 		jumping=false |  | ||||||
|  |  | ||||||
| 	lv = hv+up*vv |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
| 	if (onfloor): |  | ||||||
|  |  | ||||||
| 		movement_dir = lv |  | ||||||
| 		#lv += floor_velocity |  | ||||||
| 		last_floor_velocity = floor_velocity |  | ||||||
| 	else: |  | ||||||
|  |  | ||||||
| 		if (on_floor) : |  | ||||||
|  |  | ||||||
| 			#if (keep_jump_inertia): |  | ||||||
| 			#	lv += last_floor_velocity |  | ||||||
| 			pass |  | ||||||
| 		 |  | ||||||
| 		last_floor_velocity = Vector3() |  | ||||||
| 		movement_dir = lv |  | ||||||
| 	 |  | ||||||
| 	on_floor = onfloor |  | ||||||
|  |  | ||||||
| 	state.set_linear_velocity(lv) |  | ||||||
| 	 |  | ||||||
| 	if (shoot_blend>0): |  | ||||||
| 		shoot_blend -= delta * SHOOT_SCALE |  | ||||||
| 		if (shoot_blend<0): |  | ||||||
| 			shoot_blend=0 |  | ||||||
| 	 |  | ||||||
| 	if (shoot_attempt and not prev_shoot): |  | ||||||
| 		shoot_blend = SHOOT_TIME		 |  | ||||||
| 		var bullet = preload("res://bullet.scn").instance() |  | ||||||
| 		bullet.set_transform( get_node("Armature/bullet").get_global_transform().orthonormalized() ) |  | ||||||
| 		get_parent().add_child( bullet ) |  | ||||||
| 		bullet.set_linear_velocity( get_node("Armature/bullet").get_global_transform().basis[2].normalized() * 20 ) |  | ||||||
| 		PS.body_add_collision_exception( bullet.get_rid(), get_rid() ) #add it to bullet |  | ||||||
| 		get_node("sfx").play("shoot") |  | ||||||
| 		 |  | ||||||
| 	prev_shoot = shoot_attempt |  | ||||||
| 	 |  | ||||||
| 	if (onfloor): |  | ||||||
| 		get_node("AnimationTreePlayer").blend2_node_set_amount("walk",hspeed / max_speed) |  | ||||||
| 		 |  | ||||||
| 	get_node("AnimationTreePlayer").transition_node_set_current("state",anim) |  | ||||||
| 	get_node("AnimationTreePlayer").blend2_node_set_amount("gun",min(shoot_blend,1.0)) |  | ||||||
| #	state.set_angular_velocity(Vector3())	 |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| func _ready(): |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	# Initalization here |  | ||||||
| 	get_node("AnimationTreePlayer").set_active(true) |  | ||||||
| 	pass |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @@ -1,73 +0,0 @@ | |||||||
|  |  | ||||||
| extends Node2D |  | ||||||
|  |  | ||||||
| # member variables here, example: |  | ||||||
| # var a=2 |  | ||||||
| # var b="textvar" |  | ||||||
| const INITIAL_BALL_SPEED = 80 |  | ||||||
| var ball_speed = INITIAL_BALL_SPEED |  | ||||||
| var screen_size = Vector2(640,400) |  | ||||||
| #default ball direction |  | ||||||
| var direction = Vector2(-1,0) |  | ||||||
| var pad_size = Vector2(8,32) |  | ||||||
| const PAD_SPEED = 150 |  | ||||||
|  |  | ||||||
|  |  | ||||||
| func _process(delta): |  | ||||||
|  |  | ||||||
|  |  | ||||||
| 	# get ball positio and pad rectangles |  | ||||||
| 	var ball_pos = get_node("ball").get_pos() |  | ||||||
| 	var left_rect = Rect2( get_node("left").get_pos() - pad_size*0.5, pad_size ) |  | ||||||
| 	var right_rect = Rect2( get_node("right").get_pos() - pad_size*0.5, pad_size ) |  | ||||||
| 	 |  | ||||||
| 	#integrate new ball postion |  | ||||||
| 	ball_pos+=direction*ball_speed*delta |  | ||||||
| 	 |  | ||||||
| 	#flip when touching roof or floor |  | ||||||
| 	if ( (ball_pos.y<0 and direction.y <0) or (ball_pos.y>screen_size.y and direction.y>0)): |  | ||||||
| 		direction.y = -direction.y |  | ||||||
| 		 |  | ||||||
| 	#flip, change direction and increase speed when touching pads	 |  | ||||||
| 	if ( (left_rect.has_point(ball_pos) and direction.x < 0) or (right_rect.has_point(ball_pos) and direction.x > 0)): |  | ||||||
| 		direction.x=-direction.x |  | ||||||
| 		ball_speed*=1.1 |  | ||||||
| 		direction.y=randf()*2.0-1 |  | ||||||
| 		direction = direction.normalized() |  | ||||||
|  |  | ||||||
| 	#check gameover |  | ||||||
| 	if (ball_pos.x<0 or ball_pos.x>screen_size.x): |  | ||||||
| 		ball_pos=screen_size*0.5 |  | ||||||
| 		ball_speed=INITIAL_BALL_SPEED |  | ||||||
| 		direction=Vector2(-1,0) |  | ||||||
| 			 |  | ||||||
| 						 |  | ||||||
| 	get_node("ball").set_pos(ball_pos) |  | ||||||
|  |  | ||||||
| 	#move left pad	 |  | ||||||
| 	var left_pos = get_node("left").get_pos() |  | ||||||
| 	 |  | ||||||
| 	if (left_pos.y > 0 and Input.is_action_pressed("left_move_up")): |  | ||||||
| 		left_pos.y+=-PAD_SPEED*delta |  | ||||||
| 	if (left_pos.y < screen_size.y and Input.is_action_pressed("left_move_down")): |  | ||||||
| 		left_pos.y+=PAD_SPEED*delta |  | ||||||
| 		 |  | ||||||
| 	get_node("left").set_pos(left_pos) |  | ||||||
| 		 |  | ||||||
| 	#move right pad	 |  | ||||||
| 	var right_pos = get_node("right").get_pos() |  | ||||||
| 	 |  | ||||||
| 	if (right_pos.y > 0 and Input.is_action_pressed("right_move_up")): |  | ||||||
| 		right_pos.y+=-PAD_SPEED*delta |  | ||||||
| 	if (right_pos.y < screen_size.y and Input.is_action_pressed("right_move_down")): |  | ||||||
| 		right_pos.y+=PAD_SPEED*delta |  | ||||||
| 		 |  | ||||||
| 	get_node("right").set_pos(right_pos) |  | ||||||
| 	 |  | ||||||
| 	  |  | ||||||
|  |  | ||||||
| func _ready(): |  | ||||||
| 	screen_size = get_viewport_rect().size # get actual size |  | ||||||
| 	pad_size = get_node("left").get_texture().get_size() |  | ||||||
| 	set_process(true) |  | ||||||
|  |  | ||||||
| @@ -1,21 +0,0 @@ | |||||||
| graph |  | ||||||
| [ |  | ||||||
|   directed 0 |  | ||||||
|   node |  | ||||||
|   [ |  | ||||||
|     id 0 |  | ||||||
|     label "Node 1" |  | ||||||
|     value 100 |  | ||||||
|   ] |  | ||||||
|   node |  | ||||||
|   [ |  | ||||||
|     id 1 |  | ||||||
|     label "Node 2" |  | ||||||
|     value 200 |  | ||||||
|   ] |  | ||||||
|   edge |  | ||||||
|   [ |  | ||||||
|     source 1 |  | ||||||
|     target 0 |  | ||||||
|   ] |  | ||||||
| ] |  | ||||||
| @@ -1,13 +0,0 @@ | |||||||
| .TH FOO 1 |  | ||||||
| .SH NAME |  | ||||||
| foo \- bar |  | ||||||
| .SH SYNOPSIS |  | ||||||
| .B foo |  | ||||||
| .I bar |  | ||||||
| .SH DESCRIPTION |  | ||||||
| Foo bar |  | ||||||
| .BR baz |  | ||||||
| quux. |  | ||||||
| .PP |  | ||||||
| .B Foo |  | ||||||
| bar baz. |  | ||||||
| @@ -1,12 +0,0 @@ | |||||||
| jsb.library('mylibrary', jsb.STATIC_LIBRARY, function(libObject) { |  | ||||||
|     libObject.outputName = 'mylibrary'; |  | ||||||
|     libObject.cflags = [ '-Wall' ]; |  | ||||||
|     libObject.ldflags = [ '-pthread' ]; |  | ||||||
|     libObject.includePaths = [ 'src/include' ]; |  | ||||||
|     libObject.sources = [  |  | ||||||
|         'src/main.cpp', |  | ||||||
|         'src/app.cpp' |  | ||||||
|     ]; |  | ||||||
| }); |  | ||||||
|  |  | ||||||
| jsb.build(); |  | ||||||
| @@ -1,193 +0,0 @@ | |||||||
| unit custforms; |  | ||||||
|  |  | ||||||
| {$mode objfpc}{$H+} |  | ||||||
|  |  | ||||||
| interface |  | ||||||
|  |  | ||||||
| uses |  | ||||||
|   Classes, SysUtils, Forms; |  | ||||||
|  |  | ||||||
| Type |  | ||||||
|  |  | ||||||
|   { TCustomFormDescr } |  | ||||||
|  |  | ||||||
|   TCustomFormDescr = Class |  | ||||||
|   private |  | ||||||
|     FAuthor: String; |  | ||||||
|     FCaption: String; |  | ||||||
|     FCategory: String; |  | ||||||
|     FDescription: String; |  | ||||||
|     FFormClass: TFormClass; |  | ||||||
|     FLazPackage: String; |  | ||||||
|     FUnitName: String; |  | ||||||
|   public |  | ||||||
|     Constructor Create(AFormClass : TFormClass; const APackage: string); |  | ||||||
|     Constructor Create(AFormClass : TFormClass; Const ACaption,ADescription,AUnit,APackage : String); |  | ||||||
|     Property FormClass : TFormClass Read FFormClass Write FFormClass; |  | ||||||
|     Property Caption : String Read FCaption Write FCaption; |  | ||||||
|     Property Description : String Read FDescription Write FDescription; |  | ||||||
|     Property UnitName : String Read FUnitName Write FUnitName; |  | ||||||
|     Property Category : String Read FCategory Write FCategory; |  | ||||||
|     Property Author : String Read FAuthor Write FAuthor; |  | ||||||
|     Property LazPackage : String Read FLazPackage Write FLazPackage; |  | ||||||
|   end; |  | ||||||
|  |  | ||||||
| Procedure RegisterCustomForm(Descr : TCustomFormDescr); |  | ||||||
| Procedure RegisterCustomForm(AFormClass : TFormClass; const APackage: string); |  | ||||||
| Procedure RegisterCustomForm(AFormClass : TFormClass; Const AUnitName, APackage : String); |  | ||||||
|  |  | ||||||
| Procedure Register; |  | ||||||
|  |  | ||||||
| implementation |  | ||||||
|  |  | ||||||
| uses ProjectIntf,NewItemIntf,contnrs; |  | ||||||
|  |  | ||||||
| Const |  | ||||||
|   SAppFrameWork = 'Custom forms'; |  | ||||||
|   SInstanceOf   = 'Create a new instance of %s'; |  | ||||||
|  |  | ||||||
| { TCustomFormDescr } |  | ||||||
|  |  | ||||||
| constructor TCustomFormDescr.Create(AFormClass: TFormClass; |  | ||||||
|   const APackage: string); |  | ||||||
|  |  | ||||||
| Var |  | ||||||
|   N,U : String; |  | ||||||
|  |  | ||||||
| begin |  | ||||||
|   N:=AFormClass.ClassName; |  | ||||||
|   U:=N; |  | ||||||
|   If (Upcase(U[1])='T') then |  | ||||||
|     Delete(U,1,1); |  | ||||||
|   Create(AFormClass,N,Format(SInstanceOf,[N]),U,APackage); |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| constructor TCustomFormDescr.Create(AFormClass: TFormClass; |  | ||||||
|   const ACaption, ADescription, AUnit, APackage: String); |  | ||||||
| begin |  | ||||||
|   FFormClass:=AFormClass; |  | ||||||
|   FCaption:=ACaption; |  | ||||||
|   FDescription:=ADescription; |  | ||||||
|   FUnitName:=AUnit; |  | ||||||
|   FCategory:=SAppFrameWork; |  | ||||||
|   FLazPackage:=APackage; |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| // Registration code. |  | ||||||
|  |  | ||||||
| Type |  | ||||||
|   { TCustomFormFileDescriptor } |  | ||||||
|   TCustomFormFileDescriptor = Class(TFileDescPascalUnitWithResource) |  | ||||||
|   private |  | ||||||
|     FFormDescr: TCustomFormDescr; |  | ||||||
|   Public |  | ||||||
|     Constructor Create(ADescr : TCustomFormDescr); |  | ||||||
|     Property FormDescr : TCustomFormDescr Read FFormDescr; |  | ||||||
|     Function GetLocalizedName : String; override; |  | ||||||
|     Function GetLocalizedDescription : String; override; |  | ||||||
|     Function GetInterfaceUsesSection : String; override; |  | ||||||
|   end; |  | ||||||
|  |  | ||||||
| { TCustomFormFileDescriptor } |  | ||||||
|  |  | ||||||
| constructor TCustomFormFileDescriptor.Create(ADescr: TCustomFormDescr); |  | ||||||
| begin |  | ||||||
|   Inherited Create; |  | ||||||
|   FFormDescr:=ADescr; |  | ||||||
|   ResourceClass:=FFormDescr.FFormClass; |  | ||||||
|   Name:=FFormDescr.Caption; |  | ||||||
|   RequiredPackages:=ADescr.LazPackage; |  | ||||||
|   //Writeln('TCustomFormFileDescriptor.Create RequiredPackages=',RequiredPackages); |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| function TCustomFormFileDescriptor.GetLocalizedName: String; |  | ||||||
| begin |  | ||||||
|   Result:=FFormDescr.Caption; |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| function TCustomFormFileDescriptor.GetLocalizedDescription: String; |  | ||||||
| begin |  | ||||||
|   Result:=FFormDescr.Description; |  | ||||||
|   If (FFormDescr.Author<>'') then |  | ||||||
|     Result:=Result+LineEnding+'By '+FFormDescr.Author; |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| function TCustomFormFileDescriptor.GetInterfaceUsesSection: String; |  | ||||||
| begin |  | ||||||
|   Result:=inherited GetInterfaceUsesSection; |  | ||||||
|   Result:=Result+',Forms,'+FFormDescr.UnitName; |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| Var |  | ||||||
|   CustomFormList : TObjectList; |  | ||||||
|  |  | ||||||
| Procedure RegisterCustomForm(Descr : TCustomFormDescr); |  | ||||||
|  |  | ||||||
| begin |  | ||||||
|   CustomFormList.Add(Descr); |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| Procedure RegisterCustomForm(AFormClass : TFormClass; const APackage: string); |  | ||||||
|  |  | ||||||
| begin |  | ||||||
|   RegisterCustomForm(TCustomFormDescr.Create(AFormClass,APackage)); |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| Procedure RegisterCustomForm(AFormClass : TFormClass; Const AUnitName, APackage : String); |  | ||||||
|  |  | ||||||
| Var |  | ||||||
|   D : TCustomFormDescr; |  | ||||||
|  |  | ||||||
| begin |  | ||||||
|   D:=TCustomFormDescr.Create(AFormClass,APackage); |  | ||||||
|   D.UnitName:=AUnitName; |  | ||||||
|   RegisterCustomForm(D); |  | ||||||
| end; |  | ||||||
|  |  | ||||||
|  |  | ||||||
| Procedure Register; |  | ||||||
|  |  | ||||||
| Var |  | ||||||
|   L : TStringList; |  | ||||||
|   I : Integer; |  | ||||||
|   D : TCustomFormDescr; |  | ||||||
|    |  | ||||||
| begin |  | ||||||
|   L:=TStringList.Create; |  | ||||||
|   Try |  | ||||||
|     L.Sorted:=True; |  | ||||||
|     L.Duplicates:=dupIgnore; |  | ||||||
|     For I:=0 to CustomFormList.Count-1 do |  | ||||||
|       L.Add(TCustomFormDescr(CustomFormList[i]).Category); |  | ||||||
|     For I:=0 to L.Count-1 do |  | ||||||
|     begin |  | ||||||
|       RegisterNewItemCategory(TNewIDEItemCategory.Create(L[i])); |  | ||||||
|     end; |  | ||||||
|   Finally |  | ||||||
|     L.Free; |  | ||||||
|   end; |  | ||||||
|   For I:=0 to CustomFormList.Count-1 do |  | ||||||
|     begin |  | ||||||
|     D:=TCustomFormDescr(CustomFormList[i]); |  | ||||||
|     RegisterProjectFileDescriptor(TCustomFormFileDescriptor.Create(D),D.Category); |  | ||||||
|     end; |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| Procedure InitCustomForms; |  | ||||||
|  |  | ||||||
| begin |  | ||||||
|   CustomFormList:=TObjectList.Create; |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| Procedure DoneCustomForms; |  | ||||||
|  |  | ||||||
| begin |  | ||||||
|   FreeAndNil(CustomFormList); |  | ||||||
| end; |  | ||||||
|  |  | ||||||
| Initialization |  | ||||||
|   InitCustomForms; |  | ||||||
| Finalization |  | ||||||
|   DoneCustomForms; |  | ||||||
| end. |  | ||||||
|  |  | ||||||
| @@ -1,51 +0,0 @@ | |||||||
| { $Id$ } |  | ||||||
| { |  | ||||||
|  --------------------------------------------------------------------------- |  | ||||||
|  gtkextra.pp  -  GTK(2) widgetset - additional gdk/gtk functions |  | ||||||
|  --------------------------------------------------------------------------- |  | ||||||
|  |  | ||||||
|  This unit contains missing gdk/gtk functions and defines for certain  |  | ||||||
|  versions of gtk or fpc. |  | ||||||
|  |  | ||||||
|  --------------------------------------------------------------------------- |  | ||||||
|  |  | ||||||
|  @created(Sun Jan 28th WET 2006) |  | ||||||
|  @lastmod($Date$) |  | ||||||
|  @author(Marc Weustink <marc@@dommelstein.nl>) |  | ||||||
|  |  | ||||||
|  ***************************************************************************** |  | ||||||
|   This file is part of the Lazarus Component Library (LCL) |  | ||||||
|  |  | ||||||
|   See the file COPYING.modifiedLGPL.txt, included in this distribution, |  | ||||||
|   for details about the license. |  | ||||||
|  ***************************************************************************** |  | ||||||
|  } |  | ||||||
|  |  | ||||||
| unit GtkExtra; |  | ||||||
|  |  | ||||||
| {$mode objfpc}{$H+} |  | ||||||
|  |  | ||||||
| interface |  | ||||||
|  |  | ||||||
| {$I gtkdefines.inc} |  | ||||||
|  |  | ||||||
| {$ifdef gtk1} |  | ||||||
| {$I gtk1extrah.inc} |  | ||||||
| {$endif} |  | ||||||
|  |  | ||||||
| {$ifdef gtk2} |  | ||||||
| {$I gtk2extrah.inc} |  | ||||||
| {$endif} |  | ||||||
|  |  | ||||||
|  |  | ||||||
| implementation |  | ||||||
|  |  | ||||||
| {$ifdef gtk1} |  | ||||||
| {$I gtk1extra.inc} |  | ||||||
| {$endif} |  | ||||||
|  |  | ||||||
| {$ifdef gtk2} |  | ||||||
| {$I gtk2extra.inc} |  | ||||||
| {$endif} |  | ||||||
|  |  | ||||||
| end. |  | ||||||
| @@ -1,68 +0,0 @@ | |||||||
| /** |  | ||||||
|  * Question 1.1 |  | ||||||
|  * combiner(+Buddies, -Pairs) |  | ||||||
|  */ |  | ||||||
| combiner([], []). |  | ||||||
| combiner([First|Buddies], Pairs):- |  | ||||||
| 	make_pairs(First, Buddies, Pairs1), |  | ||||||
| 	combiner(Buddies, Pairs2), |  | ||||||
| 	concat(Pairs1, Pairs2, Pairs). |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * make_pairs(+Buddy, +Buddies, -Pairs) |  | ||||||
|  */ |  | ||||||
| make_pairs(Buddy, [], []). |  | ||||||
| make_pairs(Buddy, [First|Buddies], [(Buddy, First)|Pairs]):- |  | ||||||
| 	make_pairs(Buddy, Buddies, Pairs). |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * concat(+X, +Y, ?T) |  | ||||||
|  */ |  | ||||||
| concat([], Y, Y). |  | ||||||
| concat([P|R], Y, [P|T]):- |  | ||||||
| 	concat(R, Y, T). |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Question 1.2 |  | ||||||
|  * extraire(+AllPossiblePairs, +NbPairs, -Tp, -RemainingPairs) |  | ||||||
|  */ |  | ||||||
| extraire(AllPossiblePairs, 0, [], AllPossiblePairs). |  | ||||||
| extraire([PossiblePair|AllPossiblePairs], NbPairs, [PossiblePair|Tp], NewRemainingPairs):- |  | ||||||
| 	NbPairs > 0, |  | ||||||
| 	NewNbPairs is NbPairs - 1, |  | ||||||
| 	extraire(AllPossiblePairs, NewNbPairs, Tp, RemainingPairs), |  | ||||||
| 	not(pair_in_array(PossiblePair, Tp)), |  | ||||||
| 	delete_pair(RemainingPairs, PossiblePair, NewRemainingPairs). |  | ||||||
| extraire([PossiblePair|AllPossiblePairs], NbPairs, Tp, [PossiblePair|RemainingPairs]):- |  | ||||||
| 	NbPairs > 0, |  | ||||||
| 	extraire(AllPossiblePairs, NbPairs, Tp, RemainingPairs), |  | ||||||
| 	pair_in_array(PossiblePair, Tp). |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * delete_pair(+Pairs, +Pair, -PairsWithoutPair) |  | ||||||
|  */ |  | ||||||
| delete_pair([], _, []). |  | ||||||
| delete_pair([Pair|Pairs], Pair, Pairs):-!. |  | ||||||
| delete_pair([FirstPair|Pairs], Pair, [FirstPair|PairsWithoutPair]):- |  | ||||||
| 	delete_pair(Pairs, Pair, PairsWithoutPair). |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * pair_in_array(+Pair, +Pairs) |  | ||||||
|  */ |  | ||||||
| pair_in_array((A, B), [(C, D)|Pairs]):- |  | ||||||
| 	(A == C ; B == D ; A == D ; B == C), |  | ||||||
| 	!. |  | ||||||
| pair_in_array(Pair, [FirstPair|Pairs]):- |  | ||||||
| 	pair_in_array(Pair, Pairs). |  | ||||||
|  |  | ||||||
|  |  | ||||||
| /** |  | ||||||
|  * Question 1.3 |  | ||||||
|  * les_tps(+Buddies, -Tps) |  | ||||||
|  */ |  | ||||||
| les_tps(Buddies, Tps):- |  | ||||||
| 	combiner(Buddies, PossiblePairs), |  | ||||||
| 	length(Buddies, NbBuddies), |  | ||||||
| 	NbPairs is integer(NbBuddies / 2), |  | ||||||
| 	findall(Tp, extraire(PossiblePairs, NbPairs, Tp, _), Tps). |  | ||||||
| @@ -1,26 +0,0 @@ | |||||||
| define example::expiringhost($ip, $timestamp) { |  | ||||||
|  |  | ||||||
|   # Calculate the age of this resource by comparing 'now' against $timestamp |  | ||||||
|   $age = inline_template("<%= require 'time'; Time.now - Time.parse(timestamp) %>") |  | ||||||
|  |  | ||||||
|   # Max age, in seconds. |  | ||||||
|   $maxage = 60 |  | ||||||
|  |  | ||||||
|   if $age > $maxage { |  | ||||||
|     $expired = true |  | ||||||
|     notice("Expiring resource $class[$name] due to age > $maxage (actual: $age)") |  | ||||||
|   } else { |  | ||||||
|     $expired = false |  | ||||||
|     notice("Found recently-active $class[$name] (age: $age)") |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   # I set target to a /tmp path so you can run this example as non-root. |  | ||||||
|   # In production, you probabyl won't set target as it defaults to /etc/hosts |  | ||||||
|   # (or wherever puppet thinks your platform wants it) |  | ||||||
|   host { |  | ||||||
|     $name: |  | ||||||
|       ip => $ip, |  | ||||||
|       target => "/tmp/expiring-hosts-example-output", |  | ||||||
|       ensure => $expired ? { true => absent, false => present }; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
| @@ -1,26 +0,0 @@ | |||||||
| class foo { |  | ||||||
|   notify { |  | ||||||
|     "foo": ; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class bar { |  | ||||||
|   notify { |  | ||||||
|     "bar": ; |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| node default { |  | ||||||
|   stage { |  | ||||||
|     "one": ; |  | ||||||
|     "two": ; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   class { |  | ||||||
|     "foo": stage => "one"; |  | ||||||
|     "bar": stage => "two"; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   Stage["one"] -> Stage["two"] |  | ||||||
| } |  | ||||||
| @@ -1,22 +0,0 @@ | |||||||
| # Manually manage /tmp/original |  | ||||||
| # Each puppet run will copy it to /tmp/flag if there's a change and notify |  | ||||||
| # the exec when it changes. |  | ||||||
| #  |  | ||||||
| # The idea here is you might need (in some case) to manually manage a file outside |  | ||||||
| # of puppet (in this case, "/tmp/original"). Using this example, you can make puppet |  | ||||||
| # signal other parts of your catalog based on changes to that file. |  | ||||||
|  |  | ||||||
| file { |  | ||||||
|   # This will, when different, copy /tmp/original to /tmp/flag and notify our |  | ||||||
|   # exec. |  | ||||||
|   "/tmp/flag": |  | ||||||
|     source => "file:///tmp/original", |  | ||||||
|     notify => Exec["hello world"]; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| exec { |  | ||||||
|   "hello world": |  | ||||||
|     command => "/bin/echo hello world", |  | ||||||
|     refreshonly => true; |  | ||||||
| } |  | ||||||
|  |  | ||||||
							
								
								
									
										3
									
								
								test/fixtures/foo.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/foo.rb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | def foo | ||||||
|  |   return "BAR" | ||||||
|  | end | ||||||
| @@ -262,10 +262,6 @@ class TestBlob < Test::Unit::TestCase | |||||||
|  |  | ||||||
|  |  | ||||||
|     assert Linguist::Generated.generated?("node_modules/grunt/lib/grunt.js", nil) |     assert Linguist::Generated.generated?("node_modules/grunt/lib/grunt.js", nil) | ||||||
|  |  | ||||||
|     # Godep saved dependencies |  | ||||||
|     assert blob("Godeps/Godeps.json").generated? |  | ||||||
|     assert blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_vendored |   def test_vendored | ||||||
| @@ -283,10 +279,6 @@ class TestBlob < Test::Unit::TestCase | |||||||
|     assert blob("app/bower_components/custom/custom.js").vendored? |     assert blob("app/bower_components/custom/custom.js").vendored? | ||||||
|     assert blob("vendor/assets/bower_components/custom/custom.js").vendored? |     assert blob("vendor/assets/bower_components/custom/custom.js").vendored? | ||||||
|  |  | ||||||
|     # Go dependencies |  | ||||||
|     assert !blob("Godeps/Godeps.json").vendored? |  | ||||||
|     assert blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored? |  | ||||||
|  |  | ||||||
|     # Rails vendor/ |     # Rails vendor/ | ||||||
|     assert blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? |     assert blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? | ||||||
|  |  | ||||||
| @@ -445,12 +437,6 @@ class TestBlob < Test::Unit::TestCase | |||||||
|     assert blob("octicons.css").vendored? |     assert blob("octicons.css").vendored? | ||||||
|     assert blob("public/octicons.min.css").vendored? |     assert blob("public/octicons.min.css").vendored? | ||||||
|     assert blob("public/octicons/sprockets-octicons.scss").vendored? |     assert blob("public/octicons/sprockets-octicons.scss").vendored? | ||||||
|  |  | ||||||
|     # Typesafe Activator |  | ||||||
|     assert blob("activator").vendored? |  | ||||||
|     assert blob("activator.bat").vendored? |  | ||||||
|     assert blob("subproject/activator").vendored? |  | ||||||
|     assert blob("subproject/activator.bat").vendored? |  | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_language |   def test_language | ||||||
|   | |||||||
| @@ -44,12 +44,12 @@ class TestClassifier < Test::Unit::TestCase | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_instance_classify_empty |   def test_instance_classify_empty | ||||||
|     results = Classifier.classify(Samples.cache, "") |     results = Classifier.classify(Samples::DATA, "") | ||||||
|     assert results.first[1] < 0.5, results.first.inspect |     assert results.first[1] < 0.5, results.first.inspect | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_instance_classify_nil |   def test_instance_classify_nil | ||||||
|     assert_equal [], Classifier.classify(Samples.cache, nil) |     assert_equal [], Classifier.classify(Samples::DATA, nil) | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_classify_ambiguous_languages |   def test_classify_ambiguous_languages | ||||||
| @@ -58,7 +58,7 @@ class TestClassifier < Test::Unit::TestCase | |||||||
|       languages = Language.find_by_filename(sample[:path]).map(&:name) |       languages = Language.find_by_filename(sample[:path]).map(&:name) | ||||||
|       next unless languages.length > 1 |       next unless languages.length > 1 | ||||||
|  |  | ||||||
|       results = Classifier.classify(Samples.cache, File.read(sample[:path]), languages) |       results = Classifier.classify(Samples::DATA, File.read(sample[:path]), languages) | ||||||
|       assert_equal language.name, results.first[0], "#{sample[:path]}\n#{results.inspect}" |       assert_equal language.name, results.first[0], "#{sample[:path]}\n#{results.inspect}" | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
|   | |||||||
| @@ -65,18 +65,6 @@ class TestHeuristcs < Test::Unit::TestCase | |||||||
|     assert_equal Language["ECL"], results.first |     assert_equal Language["ECL"], results.first | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_pro_prolog_by_heuristics |  | ||||||
|     languages = ["IDL", "Prolog"] |  | ||||||
|     results = Heuristics.disambiguate_pro(fixture("Prolog/logic-problem.pro"), languages) |  | ||||||
|     assert_equal Language["Prolog"], results.first |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   def test_pro_idl_by_heuristics |  | ||||||
|     languages = ["IDL", "Prolog"] |  | ||||||
|     results = Heuristics.disambiguate_pro(fixture("IDL/mg_acosh.pro"), languages) |  | ||||||
|     assert_equal Language["IDL"], 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) | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| require 'linguist/repository' | require 'linguist/repository' | ||||||
| require 'linguist/lazy_blob' |  | ||||||
| require 'test/unit' | require 'test/unit' | ||||||
|  |  | ||||||
| class TestRepository < Test::Unit::TestCase | class TestRepository < Test::Unit::TestCase | ||||||
| @@ -47,45 +47,4 @@ class TestRepository < Test::Unit::TestCase | |||||||
|  |  | ||||||
|     assert_equal linguist_repo.cache, new_repo.cache |     assert_equal linguist_repo.cache, new_repo.cache | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_repo_git_attributes |  | ||||||
|     # See https://github.com/github/linguist/blob/351c1cc8fd57340839bdb400d7812332af80e9bd/.gitattributes |  | ||||||
|     # |  | ||||||
|     # It looks like this: |  | ||||||
|     # Gemfile linguist-vendored=true |  | ||||||
|     # lib/linguist.rb linguist-language=Java |  | ||||||
|     # test/*.rb linguist-language=Java |  | ||||||
|     # Rakefile linguist-generated |  | ||||||
|     # test/fixtures/* linguist-vendored=false |  | ||||||
|  |  | ||||||
|     attr_commit = '351c1cc8fd57340839bdb400d7812332af80e9bd' |  | ||||||
|     repo = linguist_repo(attr_commit) |  | ||||||
|  |  | ||||||
|     assert repo.breakdown_by_file.has_key?("Java") |  | ||||||
|     assert repo.breakdown_by_file["Java"].include?("lib/linguist.rb") |  | ||||||
|  |  | ||||||
|     assert repo.breakdown_by_file.has_key?("Ruby") |  | ||||||
|     assert !repo.breakdown_by_file["Ruby"].empty? |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   def test_linguist_override_vendored? |  | ||||||
|     attr_commit = '351c1cc8fd57340839bdb400d7812332af80e9bd' |  | ||||||
|     repo = linguist_repo(attr_commit).read_index |  | ||||||
|  |  | ||||||
|     override_vendored = Linguist::LazyBlob.new(rugged_repository, attr_commit, 'Gemfile') |  | ||||||
|  |  | ||||||
|     # overridden .gitattributes |  | ||||||
|     assert override_vendored.vendored? |  | ||||||
|   end |  | ||||||
|  |  | ||||||
|   def test_linguist_override_unvendored? |  | ||||||
|     attr_commit = '351c1cc8fd57340839bdb400d7812332af80e9bd' |  | ||||||
|     repo = linguist_repo(attr_commit).read_index |  | ||||||
|  |  | ||||||
|     # lib/linguist/vendor.yml defines this as vendored. |  | ||||||
|     override_unvendored = Linguist::LazyBlob.new(rugged_repository, attr_commit, 'test/fixtures/foo.rb') |  | ||||||
|  |  | ||||||
|     # overridden .gitattributes |  | ||||||
|     assert !override_unvendored.vendored? |  | ||||||
|   end |  | ||||||
| end | end | ||||||
|   | |||||||
| @@ -8,7 +8,7 @@ class TestSamples < Test::Unit::TestCase | |||||||
|   include Linguist |   include Linguist | ||||||
|  |  | ||||||
|   def test_up_to_date |   def test_up_to_date | ||||||
|     assert serialized = Samples.cache |     assert serialized = Samples::DATA | ||||||
|     assert latest = Samples.data |     assert latest = Samples.data | ||||||
|  |  | ||||||
|     # Just warn, it shouldn't scare people off by breaking the build. |     # Just warn, it shouldn't scare people off by breaking the build. | ||||||
| @@ -29,7 +29,7 @@ class TestSamples < Test::Unit::TestCase | |||||||
|   end |   end | ||||||
|  |  | ||||||
|   def test_verify |   def test_verify | ||||||
|     assert data = Samples.cache |     assert data = Samples::DATA | ||||||
|  |  | ||||||
|     assert_equal data['languages_total'], data['languages'].inject(0) { |n, (_, c)| n += c } |     assert_equal data['languages_total'], data['languages'].inject(0) { |n, (_, c)| n += c } | ||||||
|     assert_equal data['tokens_total'], data['language_tokens'].inject(0) { |n, (_, c)| n += c } |     assert_equal data['tokens_total'], data['language_tokens'].inject(0) { |n, (_, c)| n += c } | ||||||
| @@ -38,7 +38,7 @@ class TestSamples < Test::Unit::TestCase | |||||||
|  |  | ||||||
|   # Check that there aren't samples with extensions that aren't explicitly defined in languages.yml |   # Check that there aren't samples with extensions that aren't explicitly defined in languages.yml | ||||||
|   def test_parity |   def test_parity | ||||||
|     extensions = Samples.cache['extnames'] |     extensions = Samples::DATA['extnames'] | ||||||
|     languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) |     languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) | ||||||
|     languages = YAML.load_file(languages_yml) |     languages = YAML.load_file(languages_yml) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user