mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Compare commits
	
		
			251 Commits
		
	
	
		
			test/attri
			...
			v3.4.1
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 6ab5870b59 | ||
|  | 7dbe2bb774 | ||
|  | 163a039e0d | ||
|  | 9595e2ba7e | ||
|  | a696e3a7a2 | ||
|  | 8336dc33e4 | ||
|  | 94fba197d1 | ||
|  | 3504a36c3e | ||
|  | c8038d1c80 | ||
|  | 8ba8b48caf | ||
|  | 92d0c1f3b7 | ||
|  | d4186bd34a | ||
|  | 008ba9e23f | ||
|  | f258e4940d | ||
|  | a7b8e38bf3 | ||
|  | b65129a8e1 | ||
|  | 6b0783936f | ||
|  | 2a66b754c2 | ||
|  | 460443b3c8 | ||
|  | cd99ab2d6e | ||
|  | 6d07302963 | ||
|  | d831205f6a | ||
|  | a9b9e6216b | ||
|  | 3ba090de7e | ||
|  | c105208481 | ||
|  | 0c9e14eeff | ||
|  | 2a8a5cdca9 | ||
|  | 1f91acbd9d | ||
|  | 3e48a84cf1 | ||
|  | 31728a3a78 | ||
|  | e56a2ed6ad | ||
|  | 35aa57657b | ||
|  | 423c8865bd | ||
|  | 55ecc5f7eb | ||
|  | 6aae7882df | ||
|  | 240fcec3ce | ||
|  | 170c1d4ee8 | ||
|  | 38f0a71ea3 | ||
|  | 62936dc6b5 | ||
|  | fb9c784f4f | ||
|  | 89477ed2fa | ||
|  | 844679dcbe | ||
|  | 47843e7e78 | ||
|  | 85957ecf56 | ||
|  | 4232b04571 | ||
|  | 34f717526a | ||
|  | b0b94182a2 | ||
|  | 843e196f00 | ||
|  | 63661dfc6e | ||
|  | f100dc91c2 | ||
|  | fd9d63d605 | ||
|  | 5c21c35875 | ||
|  | 370d55fd74 | ||
|  | 0fcc26f778 | ||
|  | 8dd2ddcbf7 | ||
|  | 037857623d | ||
|  | d7b19d577b | ||
|  | c70048a3e2 | ||
|  | 6d51117a91 | ||
|  | 848a1cc1e5 | ||
|  | 9092dfdc7f | ||
|  | d7fe0cc5c7 | ||
|  | 15ec37d4bc | ||
|  | 43cc701ac3 | ||
|  | 7cb8357f73 | ||
|  | 4b46bcf649 | ||
|  | a954a6465e | ||
|  | afb6041104 | ||
|  | 4b28fdbc4d | ||
|  | b8a5e8505a | ||
|  | 3087d640a3 | ||
|  | e87b89ab5b | ||
|  | 7aabc6a5ad | ||
|  | 5cc053694a | ||
|  | 653314448c | ||
|  | 4f14db10ea | ||
|  | 98e348ba5f | ||
|  | a69b20c1a4 | ||
|  | 9275e5240f | ||
|  | 7dcc3b3edf | ||
|  | 6e872c11b6 | ||
|  | e5b6001759 | ||
|  | 769f1b8658 | ||
|  | 5814b61356 | ||
|  | 8a6d7f67ed | ||
|  | bcb016a938 | ||
|  | 065c6c02a8 | ||
|  | f7386fcd72 | ||
|  | df703ef997 | ||
|  | 9f6c421d91 | ||
|  | 91370ae955 | ||
|  | ffc0be191e | ||
|  | 6e9f6da2a2 | ||
|  | 48f2949d69 | ||
|  | baa3cba0fc | ||
|  | eb54a92328 | ||
|  | c8cb7b7cab | ||
|  | 7baa130d8d | ||
|  | 332d97b57f | ||
|  | 9c0dbdd48e | ||
|  | bec0052065 | ||
|  | 5010f32421 | ||
|  | ded4672ccc | ||
|  | 03bb48cf28 | ||
|  | e71eefe8fc | ||
|  | c203781e1b | ||
|  | 7a2be16d77 | ||
|  | 77126e9e17 | ||
|  | d1d5c61df5 | ||
|  | 09323c8bbc | ||
|  | ac9f82544a | ||
|  | 2e4e602787 | ||
|  | 9d0ba5801b | ||
|  | 0cd7d85ec4 | ||
|  | b0f674e511 | ||
|  | 2b411aad90 | ||
|  | 1c6483a499 | ||
|  | 6edf4498ce | ||
|  | b160a39678 | ||
|  | 86b4de89bd | ||
|  | a35d9a8d29 | ||
|  | 8012876d5e | ||
|  | 2e3e8c5b89 | ||
|  | 5284608942 | ||
|  | ea2c7d8b27 | ||
|  | b0db064d09 | ||
|  | 3ff1e38f6c | ||
|  | b533b682d5 | ||
|  | f59cf24a82 | ||
|  | f87436d499 | ||
|  | 178d4756ef | ||
|  | 5152bd7124 | ||
|  | b5015b6cc7 | ||
|  | 097900a327 | ||
|  | 1d2a6c38c7 | ||
|  | cc87ceb0d5 | ||
|  | a38f77683b | ||
|  | d8da05cde2 | ||
|  | 554b5bfe7f | ||
|  | 86aa4c3f3d | ||
|  | 19b8721225 | ||
|  | 0cb1ebc41e | ||
|  | c7c4883f49 | ||
|  | d8b4d4639c | ||
|  | ebe45e6f37 | ||
|  | cb016f8439 | ||
|  | 92212d2652 | ||
|  | 950882be78 | ||
|  | 036855072e | ||
|  | 29bbf50900 | ||
|  | ca59303dba | ||
|  | e21f35039b | ||
|  | f2b377fae8 | ||
|  | 24a36bf4bb | ||
|  | 3284450dc4 | ||
|  | ea9d326819 | ||
|  | 4cc679c1e5 | ||
|  | c49ce55714 | ||
|  | 9d4b5416a5 | ||
|  | 82285df54b | ||
|  | e67c1789b8 | ||
|  | 015af19eaf | ||
|  | 156985ed52 | ||
|  | 71d1bd75c0 | ||
|  | 8e7c9c4bc4 | ||
|  | 7b7236fe30 | ||
|  | 55d997f43a | ||
|  | 1829b38339 | ||
|  | e4c28e12cf | ||
|  | 066cf45f4a | ||
|  | ac32b09a6b | ||
|  | 92296f4b4b | ||
|  | 3b4d2499eb | ||
|  | f38e15790e | ||
|  | b67c2bc2b2 | ||
|  | 393c9b759e | ||
|  | 54a7cf6785 | ||
|  | 1cf7a6389c | ||
|  | c204d7c297 | ||
|  | 5932f5f273 | ||
|  | 98977c87db | ||
|  | ff457af2d4 | ||
|  | 0e86ab9044 | ||
|  | 3d39e842ec | ||
|  | 16c1aa2845 | ||
|  | d0cf883558 | ||
|  | 64e4830aad | ||
|  | 0c47f2af75 | ||
|  | 14c5d8c95a | ||
|  | 6850499056 | ||
|  | 9288f784a1 | ||
|  | dab75f6f97 | ||
|  | 8cdb8ed48d | ||
|  | 417bf7e1c9 | ||
|  | 149f8967ad | ||
|  | e376fe921b | ||
|  | 8d8020ddb5 | ||
|  | 7d13b9eb99 | ||
|  | 6ed0a05b44 | ||
|  | c4c479578a | ||
|  | 441caa91dd | ||
|  | 20154eb049 | ||
|  | 84ea710d42 | ||
|  | 8d524d618e | ||
|  | 9fa34ab1fe | ||
|  | 47db1cf1ac | ||
|  | f2f9b70659 | ||
|  | 61c93ab08c | ||
|  | d72f3fae33 | ||
|  | 3f14d15722 | ||
|  | 963c0b46a0 | ||
|  | 66b4977a67 | ||
|  | 126c2147e9 | ||
|  | f7c42a4e6a | ||
|  | b1ea1fd96f | ||
|  | a5475bf839 | ||
|  | be9e187cc6 | ||
|  | d5098c6f66 | ||
|  | 41fc785330 | ||
|  | 4d83bf34f3 | ||
|  | 3a797e2583 | ||
|  | 7802030a53 | ||
|  | e8e1e0ca23 | ||
|  | 973431be40 | ||
|  | 24fb5a8e29 | ||
|  | 37d161c290 | ||
|  | ddefa5f9e6 | ||
|  | 955dd3d4d5 | ||
|  | d125205564 | ||
|  | 7fa1b52497 | ||
|  | a90d21899a | ||
|  | 569058f481 | ||
|  | 4ecda08f1f | ||
|  | 3b23059c09 | ||
|  | a474ffc101 | ||
|  | f7672b837a | ||
|  | 5235871fd8 | ||
|  | cac9873e20 | ||
|  | 9094923de9 | ||
|  | 6454c96e6a | ||
|  | 7fbb9edc0f | ||
|  | 0a717f5c81 | ||
|  | dab9777621 | ||
|  | c8d1e9def1 | ||
|  | 272dd45a43 | ||
|  | 5abec96df7 | ||
|  | e860f961a9 | ||
|  | c4b876472f | ||
|  | 5580f39df2 | ||
|  | d94bffb198 | ||
|  | 2beb450df6 | 
							
								
								
									
										0
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								.gitattributes
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,3 +1,4 @@ | ||||
| Gemfile.lock | ||||
| .bundle/ | ||||
| vendor/ | ||||
| benchmark/ | ||||
| lib/linguist/samples.json | ||||
|   | ||||
| @@ -1,8 +1,8 @@ | ||||
| before_install:  | ||||
| before_install: | ||||
|   - git fetch origin master:master | ||||
|   - git fetch origin v2.0.0:v2.0.0 | ||||
|   - git fetch origin test/attributes:test/attributes | ||||
|   - sudo apt-get install libicu-dev -y | ||||
|   - gem update --system 2.1.11 | ||||
| rvm: | ||||
|   - 1.9.3 | ||||
|   - 2.0.0 | ||||
|   | ||||
							
								
								
									
										87
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								README.md
									
									
									
									
									
								
							| @@ -32,33 +32,57 @@ 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: | ||||
|  | ||||
| ***API UPDATE*** | ||||
|  | ||||
| Since [Version 3.0.0](https://github.com/github/linguist/releases/tag/v3.0.0) Linguist expects a git repository (in the form of a [Rugged::Repository](https://github.com/libgit2/rugged#repositories)) to be passed when initializing `Linguist::Repository`. | ||||
|  | ||||
|  | ||||
| ```ruby | ||||
| project = Linguist::Repository.from_directory(".") | ||||
| project.language.name  #=> "Ruby" | ||||
| project.languages      #=> { "Ruby" => 0.98, "Shell" => 0.02 } | ||||
| require 'rugged' | ||||
| require 'linguist' | ||||
|  | ||||
| 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 | ||||
| `--breakdown` flag, and the binary will also output the breakdown of files by language. | ||||
|  | ||||
| You can try running `linguist` on the `lib/` directory in this repository itself: | ||||
| You can try running `linguist` on the root directory in this repository itself: | ||||
|  | ||||
|     $ bundle exec linguist lib/ --breakdown | ||||
|     $ bundle exec linguist --breakdown | ||||
|  | ||||
|     100.00% Ruby | ||||
|  | ||||
|     Ruby: | ||||
|     linguist/blob_helper.rb | ||||
|     linguist/classifier.rb | ||||
|     linguist/file_blob.rb | ||||
|     linguist/generated.rb | ||||
|     linguist/heuristics.rb | ||||
|     linguist/language.rb | ||||
|     linguist/md5.rb | ||||
|     linguist/repository.rb | ||||
|     linguist/samples.rb | ||||
|     linguist/tokenizer.rb | ||||
|     linguist.rb | ||||
|     Gemfile | ||||
|     Rakefile | ||||
|     bin/linguist | ||||
|     github-linguist.gemspec | ||||
|     lib/linguist.rb | ||||
|     lib/linguist/blob_helper.rb | ||||
|     lib/linguist/classifier.rb | ||||
|     lib/linguist/file_blob.rb | ||||
|     lib/linguist/generated.rb | ||||
|     lib/linguist/heuristics.rb | ||||
|     lib/linguist/language.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 | ||||
|  | ||||
| @@ -80,9 +104,32 @@ Linguist::FileBlob.new("underscore.min.js").generated? # => true | ||||
|  | ||||
| See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/master/lib/linguist/generated.rb). | ||||
|  | ||||
| ## Overrides | ||||
|  | ||||
| Linguist supports custom overrides for language definitions and vendored paths. Add a `.gitattributes` file to your project using the keys `linguist-language` and `linguist-vendored` with the standard git-style path matchers for the files you want to override. | ||||
|  | ||||
| ``` | ||||
| $ cat .gitattributes | ||||
| *.rb linguist-language=Java | ||||
|  | ||||
| $ linguist --breakdown | ||||
| 100.00% Java | ||||
|  | ||||
| Java: | ||||
| ruby_file.rb | ||||
| ``` | ||||
|  | ||||
| By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. Use the `linguist-vendored` attribute to vendor or un-vendor paths. | ||||
|  | ||||
| ``` | ||||
| $ cat .gitattributes | ||||
| special-vendored-path/* linguist-vendored | ||||
| jquery.js linguist-vendored=false | ||||
| ``` | ||||
|  | ||||
| ## Installation | ||||
|  | ||||
| github.com is usually running the latest version of the `github-linguist` gem that is released on [RubyGems.org](http://rubygems.org/gems/github-linguist). | ||||
| Github.com is usually running the latest version of the `github-linguist` gem that is released on [RubyGems.org](http://rubygems.org/gems/github-linguist). | ||||
|  | ||||
| But for development you are going to want to checkout out the source. To get it, clone the repo and run [Bundler](http://gembundler.com/) to install its dependencies. | ||||
|  | ||||
| @@ -102,10 +149,6 @@ 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. | ||||
|  | ||||
| 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 | ||||
|  | ||||
| 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`: | ||||
| @@ -145,7 +188,7 @@ If you are the current maintainer of this gem: | ||||
|  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. Make a PR to github/linguist.  For example, [#1238](https://github.com/github/linguist/pull/1238). | ||||
|  0. Build a local gem: `gem build github-linguist.gemspec` | ||||
|  0. Build a local gem: `bundle exec rake build_gem` | ||||
|  0. Testing: | ||||
|    0. Bump the Gemfile and Gemfile.lock versions for an app which relies on this gem | ||||
|    0. Install the new gem locally | ||||
|   | ||||
							
								
								
									
										83
									
								
								Rakefile
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								Rakefile
									
									
									
									
									
								
							| @@ -1,3 +1,4 @@ | ||||
| require 'bundler/setup' | ||||
| require 'json' | ||||
| require 'rake/clean' | ||||
| require 'rake/testtask' | ||||
| @@ -7,6 +8,16 @@ task :default => :test | ||||
|  | ||||
| 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 | ||||
|   require 'linguist/samples' | ||||
|   require 'yajl' | ||||
| @@ -15,13 +26,74 @@ task :samples do | ||||
|   File.open('lib/linguist/samples.json', 'w') { |io| io.write json } | ||||
| end | ||||
|  | ||||
| task :build_gem do | ||||
| task :build_gem => :samples do | ||||
|   languages = YAML.load_file("lib/linguist/languages.yml") | ||||
|   File.write("lib/linguist/languages.json", JSON.dump(languages)) | ||||
|   `gem build github-linguist.gemspec` | ||||
|   File.delete("lib/linguist/languages.json") | ||||
| 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 | ||||
|   LIMIT = 1_000 | ||||
|  | ||||
| @@ -37,7 +109,7 @@ namespace :classifier do | ||||
|       next if file_language.nil? || file_language == 'Text' | ||||
|       begin | ||||
|         data = open(file_url).read | ||||
|         guessed_language, score = Linguist::Classifier.classify(Linguist::Samples::DATA, data).first | ||||
|         guessed_language, score = Linguist::Classifier.classify(Linguist::Samples.cache, data).first | ||||
|  | ||||
|         total += 1 | ||||
|         guessed_language == file_language ? correct += 1 : incorrect += 1 | ||||
| @@ -71,3 +143,10 @@ namespace :classifier do | ||||
|     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,11 @@ Gem::Specification.new do |s| | ||||
|   s.add_dependency 'escape_utils',    '~> 1.0.1' | ||||
|   s.add_dependency 'mime-types',      '~> 1.19' | ||||
|   s.add_dependency 'pygments.rb',     '~> 0.6.0' | ||||
|   s.add_dependency 'rugged',          '~> 0.21.0' | ||||
|   s.add_dependency 'rugged',          '~> 0.21.1b2' | ||||
|  | ||||
|   s.add_development_dependency 'json' | ||||
|   s.add_development_dependency 'mocha' | ||||
|   s.add_development_dependency 'pry' | ||||
|   s.add_development_dependency 'rake' | ||||
|   s.add_development_dependency 'yajl-ruby' | ||||
| end | ||||
|   | ||||
| @@ -321,6 +321,11 @@ module Linguist | ||||
|       language ? language.lexer : Pygments::Lexer.find_by_name('Text only') | ||||
|     end | ||||
|  | ||||
|     # Internal: Get the TextMate compatible scope for the blob | ||||
|     def tm_scope | ||||
|       language && language.tm_scope | ||||
|     end | ||||
|  | ||||
|     # Public: Highlight syntax of blob | ||||
|     # | ||||
|     # options - A Hash of options (defaults to {}) | ||||
|   | ||||
| @@ -63,6 +63,7 @@ module Linguist | ||||
|         generated_jni_header? || | ||||
|         composer_lock? || | ||||
|         node_modules? || | ||||
|         godeps? || | ||||
|         vcr_cassette? || | ||||
|         generated_by_zephir? | ||||
|     end | ||||
| @@ -231,6 +232,14 @@ module Linguist | ||||
|       !!name.match(/node_modules\//) | ||||
|     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? | ||||
|     # | ||||
|     # Returns true or false. | ||||
|   | ||||
| @@ -19,11 +19,17 @@ module Linguist | ||||
|         if languages.all? { |l| ["ECL", "Prolog"].include?(l) } | ||||
|           result = disambiguate_ecl(data, languages) | ||||
|         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 | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     # .h extensions are ambigious between C, C++, and Objective-C. | ||||
|     # .h extensions are ambiguous between C, C++, and Objective-C. | ||||
|     # We want to shortcut look for Objective-C _and_ now C++ too! | ||||
|     # | ||||
|     # Returns an array of Languages or [] | ||||
| @@ -48,6 +54,16 @@ module Linguist | ||||
|       matches | ||||
|     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) | ||||
|       matches = [] | ||||
|       if (data.include?("</translation>")) | ||||
|   | ||||
| @@ -135,8 +135,8 @@ module Linguist | ||||
|         # 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? | ||||
|           determined.first | ||||
|         # Lastly, fall back to the probablistic classifier. | ||||
|         elsif classified = Classifier.classify(Samples::DATA, data, possible_language_names).first | ||||
|         # Lastly, fall back to the probabilistic classifier. | ||||
|         elsif classified = Classifier.classify(Samples.cache, data, possible_language_names).first | ||||
|           # Return the actual Language object based of the string language name (i.e., first element of `#classify`) | ||||
|           Language[classified[0]] | ||||
|         end | ||||
| @@ -290,6 +290,16 @@ module Linguist | ||||
|       @lexer = Pygments::Lexer.find_by_name(attributes[:lexer] || name) || | ||||
|         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] | ||||
|       @wrap = attributes[:wrap] || false | ||||
|  | ||||
| @@ -363,6 +373,11 @@ module Linguist | ||||
|     # Returns the Lexer | ||||
|     attr_reader :lexer | ||||
|  | ||||
|     # Public: Get the name of a TextMate-compatible scope | ||||
|     # | ||||
|     # Returns the scope | ||||
|     attr_reader :tm_scope | ||||
|  | ||||
|     # Public: Get Ace mode | ||||
|     # | ||||
|     # Examples | ||||
| @@ -510,9 +525,9 @@ module Linguist | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   extensions = Samples::DATA['extnames'] | ||||
|   interpreters = Samples::DATA['interpreters'] | ||||
|   filenames = Samples::DATA['filenames'] | ||||
|   extensions = Samples.cache['extnames'] | ||||
|   interpreters = Samples.cache['interpreters'] | ||||
|   filenames = Samples.cache['filenames'] | ||||
|   popular = YAML.load_file(File.expand_path("../popular.yml", __FILE__)) | ||||
|  | ||||
|   languages_yml = File.expand_path("../languages.yml", __FILE__) | ||||
| @@ -564,6 +579,7 @@ module Linguist | ||||
|       :type              => options['type'], | ||||
|       :aliases           => options['aliases'], | ||||
|       :lexer             => options['lexer'], | ||||
|       :tm_scope          => options['tm_scope'], | ||||
|       :ace_mode          => options['ace_mode'], | ||||
|       :wrap              => options['wrap'], | ||||
|       :group_name        => options['group'], | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,8 +1,13 @@ | ||||
| require 'linguist/blob_helper' | ||||
| require 'linguist/language' | ||||
| require 'rugged' | ||||
|  | ||||
| module Linguist | ||||
|   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 | ||||
|  | ||||
|     MAX_SIZE = 128 * 1024 | ||||
| @@ -19,6 +24,29 @@ module Linguist | ||||
|       @mode = mode | ||||
|     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 | ||||
|       load_blob! | ||||
|       @data | ||||
| @@ -30,6 +58,12 @@ module Linguist | ||||
|     end | ||||
|  | ||||
|     protected | ||||
|  | ||||
|     # Returns true if the attribute is present and not the string "false". | ||||
|     def boolean_attribute(attr) | ||||
|       attr != "false" | ||||
|     end | ||||
|  | ||||
|     def load_blob! | ||||
|       @data, @size = Rugged::Blob.to_buffer(repository, oid, MAX_SIZE) if @data.nil? | ||||
|     end | ||||
|   | ||||
| @@ -110,18 +110,37 @@ module Linguist | ||||
|         if @old_commit_oid == @commit_oid | ||||
|           @old_stats | ||||
|         else | ||||
|           compute_stats(@old_commit_oid, @commit_oid, @old_stats) | ||||
|           compute_stats(@old_commit_oid, @old_stats) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     protected | ||||
|     def compute_stats(old_commit_oid, commit_oid, cache = nil) | ||||
|       file_map = cache ? cache.dup : {} | ||||
|       old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree | ||||
|       new_tree = Rugged::Commit.lookup(repository, commit_oid).tree | ||||
|     def read_index | ||||
|       attr_index = Rugged::Index.new | ||||
|       attr_index.read_tree(current_tree) | ||||
|       repository.index = attr_index | ||||
|     end | ||||
|  | ||||
|       diff = Rugged::Tree.diff(repository, old_tree, new_tree) | ||||
|     def current_tree | ||||
|       @tree ||= Rugged::Commit.lookup(repository, @commit_oid).tree | ||||
|     end | ||||
|  | ||||
|     protected | ||||
|  | ||||
|     def compute_stats(old_commit_oid, cache = nil) | ||||
|       old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree | ||||
|  | ||||
|       read_index | ||||
|  | ||||
|       diff = Rugged::Tree.diff(repository, old_tree, current_tree) | ||||
|  | ||||
|       # Clear file map and fetch full diff if any .gitattributes files are changed | ||||
|       if cache && diff.each_delta.any? { |delta| File.basename(delta.new_file[:path]) == ".gitattributes" } | ||||
|         diff = Rugged::Tree.diff(repository, old_tree = nil, current_tree) | ||||
|         file_map = {} | ||||
|       else | ||||
|         file_map = cache ? cache.dup : {} | ||||
|       end | ||||
|  | ||||
|       diff.each_delta do |delta| | ||||
|         old = delta.old_file[:path] | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -17,9 +17,11 @@ module Linguist | ||||
|     PATH = File.expand_path('../samples.json', __FILE__) | ||||
|  | ||||
|     # Hash of serialized samples object | ||||
|     if File.exist?(PATH) | ||||
|       serializer = defined?(JSON) ? JSON : YAML | ||||
|       DATA = serializer.load(File.read(PATH)) | ||||
|     def self.cache | ||||
|       @cache ||= begin | ||||
|         serializer = defined?(JSON) ? JSON : YAML | ||||
|         serializer.load(File.read(PATH)) | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     # Public: Iterate over each sample. | ||||
|   | ||||
| @@ -33,6 +33,9 @@ | ||||
| # Erlang bundles | ||||
| - ^rebar$ | ||||
|  | ||||
| # Go dependencies | ||||
| - Godeps/_workspace/ | ||||
|  | ||||
| # Bootstrap minified css and js | ||||
| - (^|/)bootstrap([^.]*)(\.min)?\.(js|css)$ | ||||
|  | ||||
| @@ -235,3 +238,11 @@ | ||||
| - octicons.css | ||||
| - octicons.min.css | ||||
| - sprockets-octicons.scss | ||||
|  | ||||
| # Typesafe Activator | ||||
| - (^|/)activator$ | ||||
| - (^|/)activator\.bat$ | ||||
|  | ||||
| # ProGuard | ||||
| - proguard.pro | ||||
| - proguard-rules.pro | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| module Linguist | ||||
|   VERSION = "3.1.5" | ||||
|   VERSION = "3.4.1" | ||||
| end | ||||
|   | ||||
							
								
								
									
										367
									
								
								samples/APL/UT.dyalog
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										367
									
								
								samples/APL/UT.dyalog
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,367 @@ | ||||
| :NameSpace UT | ||||
|  | ||||
|     sac ← 0 | ||||
|     expect_orig ← expect ← ⎕NS⍬ | ||||
|     exception ← ⍬ | ||||
|     nexpect_orig ← nexpect ← ⎕NS⍬ | ||||
|  | ||||
|     ∇ {Z}←{Conf}run Argument;PRE_test;POST_test;TEST_step;COVER_step;FromSpace | ||||
|       | ||||
|       load_display_if_not_already_loaded | ||||
|       load_salt_scripts_into_current_namespace_if_configured | ||||
|       | ||||
|       FromSpace←1⊃⎕RSI | ||||
|       | ||||
|       PRE_test←{} | ||||
|       POST_test←{} | ||||
|       COVER_step←{} | ||||
|       :If 0≠⎕NC'Conf' | ||||
|           :If Conf has'cover_target' | ||||
|               PRE_test←{{}⎕PROFILE'start'} | ||||
|               POST_test←{{}⎕PROFILE'stop'} | ||||
|           :EndIf | ||||
|       :EndIf | ||||
|       | ||||
|       :If is_function Argument | ||||
|           TEST_step←single_function_test_function | ||||
|           COVER_file←Argument,'_coverage.html' | ||||
|       | ||||
|       :ElseIf is_list_of_functions Argument | ||||
|           TEST_step←list_of_functions_test_function | ||||
|           COVER_file←'list_coverage.html' | ||||
|       | ||||
|       :ElseIf is_file Argument | ||||
|           TEST_step←file_test_function | ||||
|           COVER_file←(get_file_name Argument),'_coverage.html' | ||||
|       | ||||
|       :ElseIf is_dir Argument | ||||
|           test_files←test_files_in_dir Argument | ||||
|           TEST_step←test_dir_function | ||||
|           Argument←test_files | ||||
|       :EndIf | ||||
|       | ||||
|       :If 0≠⎕NC'Conf' | ||||
|           :If Conf has'cover_target' | ||||
|               COVER_step←{Conf,←⊂('cover_file'COVER_file) | ||||
|                   generate_coverage_page Conf} | ||||
|           :EndIf | ||||
|       :EndIf | ||||
|       | ||||
|       PRE_test ⍬ | ||||
|       Z←FromSpace TEST_step Argument | ||||
|       POST_test ⍬ | ||||
|       COVER_step ⍬ | ||||
|     ∇ | ||||
|  | ||||
|     ∇ load_display_if_not_already_loaded | ||||
|       :If 0=⎕NC'#.DISPLAY' | ||||
|           'DISPLAY'#.⎕CY'display' | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|     ∇ load_salt_scripts_into_current_namespace_if_configured | ||||
|       :If 0≠⎕NC'#.UT.appdir' | ||||
|           :If ⍬≢#.UT.appdir | ||||
|               ⎕SE.SALT.Load #.UT.appdir,'src/*.dyalog -target=#' | ||||
|               ⎕SE.SALT.Load #.UT.appdir,'test/*.dyalog -target=#' | ||||
|           :EndIf | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←FromSpace single_function_test_function TestName | ||||
|       Z←run_ut FromSpace TestName | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←FromSpace list_of_functions_test_function ListOfNames;t | ||||
|       t←⎕TS | ||||
|       Z←run_ut¨{FromSpace ⍵}¨ListOfNames | ||||
|       t←⎕TS-t | ||||
|       ('Test execution report')print_passed_crashed_failed Z t | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←FromSpace file_test_function FilePath;FileNS;Functions;TestFunctions;t | ||||
|       FileNS←⎕SE.SALT.Load FilePath,' -target=#' | ||||
|       Functions←↓FileNS.⎕NL 3 | ||||
|       TestFunctions←(is_test¨Functions)/Functions | ||||
|       :If (0/⍬,⊂0/'')≡TestFunctions | ||||
|           ⎕←'No test functions found' | ||||
|           Z←⍬ | ||||
|       :Else | ||||
|           t←⎕TS | ||||
|           Z←run_ut¨{FileNS ⍵}¨TestFunctions | ||||
|           t←⎕TS-t | ||||
|           (FilePath,' tests')print_passed_crashed_failed Z t | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←FromSpace test_dir_function Test_files | ||||
|       :If Test_files≡⍬/⍬,⊂'' | ||||
|           ⎕←'No test files found' | ||||
|           Z←⍬ | ||||
|       :Else | ||||
|           Z←#.UT.run¨Test_files | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←get_file_name Argument;separator | ||||
|       separator←⊃⌽(Argument∊'/\')/⍳⍴Argument | ||||
|       Z←¯7↓separator↓Argument | ||||
|     ∇ | ||||
|  | ||||
|     ∇ generate_coverage_page Conf;ProfileData;CoverResults;HTML | ||||
|       ProfileData←⎕PROFILE'data' | ||||
|       ToCover←retrieve_coverables¨(⊃'cover_target'in Conf) | ||||
|       :If (⍴ToCover)≡(⍴⊂1) | ||||
|           ToCover←⊃ToCover | ||||
|       :EndIf | ||||
|       Representations←get_representation¨ToCover | ||||
|       CoverResults←ProfileData∘generate_cover_result¨↓ToCover,[1.5]Representations | ||||
|       HTML←generate_html CoverResults | ||||
|       Conf write_html_to_page HTML | ||||
|       ⎕PROFILE'clear' | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←retrieve_coverables Something;nc;functions | ||||
|       nc←⎕NC Something | ||||
|       :If nc=3 | ||||
|           Z←Something | ||||
|       :ElseIf nc=9 | ||||
|           functions←strip¨↓⍎Something,'.⎕NL 3' | ||||
|           Z←{(Something,'.',⍵)}¨functions | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←strip input | ||||
|       Z←(input≠' ')/input | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←get_representation Function;nc;rep | ||||
|       nc←⎕NC⊂Function | ||||
|       :If nc=3.1 | ||||
|           rep←↓⎕CR Function | ||||
|           rep[1]←⊂'∇',⊃rep[1] | ||||
|           rep,←⊂'∇' | ||||
|           rep←↑rep | ||||
|       :Else | ||||
|           rep←⎕CR Function | ||||
|       :EndIf | ||||
|       Z←rep | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←ProfileData generate_cover_result(name representation);Indices;lines;functionlines;covered_lines | ||||
|       Indices←({name≡⍵}¨ProfileData[;1])/⍳⍴ProfileData[;1] | ||||
|       lines←ProfileData[Indices;2] | ||||
|       nc←⎕NC⊂name | ||||
|       :If 3.1=nc | ||||
|           functionlines←¯2+⍴↓representation | ||||
|       :Else | ||||
|           functionlines←⊃⍴↓representation | ||||
|       :EndIf | ||||
|       covered_lines←(⍬∘≢¨lines)/lines | ||||
|       Z←(nc lines functionlines covered_lines representation) | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←generate_html CoverResults;Covered;Total;Percentage;CoverageText;ColorizedCode;Timestamp;Page | ||||
|       Covered←⊃⊃+/{⍴4⊃⍵}¨CoverResults | ||||
|       Total←⊃⊃+/{3⊃⍵}¨CoverResults | ||||
|       Percentage←100×Covered÷Total | ||||
|       CoverageText←'Coverage: ',Percentage,'% (',Covered,'/',Total,')' | ||||
|       ColorizedCode←⊃,/{colorize_code_by_coverage ⍵}¨CoverResults | ||||
|       Timestamp←generate_timestamp_text | ||||
|       Page←⍬ | ||||
|       Page,←⊂⍬,'<html>' | ||||
|       Page,←⊂⍬,'<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>' | ||||
|       Page,←⊂⍬,'<style>pre cov {line-height:80%;}' | ||||
|       Page,←⊂⍬,'pre cov {color: green;}' | ||||
|       Page,←⊂⍬,'pre uncov {line-height:80%;}' | ||||
|       Page,←⊂⍬,'pre uncov {color:red;}</style>' | ||||
|       Page,←⊂⍬,CoverageText | ||||
|       Page,←⊂⍬,'<pre>' | ||||
|       Page,←ColorizedCode | ||||
|       Page,←⊂⍬,'</pre>' | ||||
|       Page,←Timestamp | ||||
|       Page,←⊂⍬,'</html>' | ||||
|       Z←Page | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←colorize_code_by_coverage CoverResult;Colors;Ends;Code | ||||
|       :If 3.1=⊃CoverResult | ||||
|           Colors←(2+3⊃CoverResult)⍴⊂'<uncov>' | ||||
|           Colors[1]←⊂'' | ||||
|           Colors[⍴Colors]←⊂'' | ||||
|           Ends←(2+3⊃CoverResult)⍴⊂'</uncov>' | ||||
|           Ends[1]←⊂'' | ||||
|           Ends[⍴Ends]←⊂'' | ||||
|       :Else | ||||
|           Colors←(3⊃CoverResult)⍴⊂'<uncov>' | ||||
|           Ends←(3⊃CoverResult)⍴⊂'</uncov>' | ||||
|       :EndIf | ||||
|       Colors[1+4⊃CoverResult]←⊂'<cov>' | ||||
|       Ends[1+4⊃CoverResult]←⊂'</cov>' | ||||
|       Code←↓5⊃CoverResult | ||||
|       Z←Colors,[1.5]Code | ||||
|       Z←{⍺,(⎕UCS 13),⍵}/Z,Ends | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←generate_timestamp_text;TS;YYMMDD;HHMMSS | ||||
|       TS←⎕TS | ||||
|       YYMMDD←⊃{⍺,'-',⍵}/3↑TS | ||||
|       HHMMSS←⊃{⍺,':',⍵}/3↑3↓TS | ||||
|       Z←'Page generated: ',YYMMDD,'|',HHMMSS | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Conf write_html_to_page Page;tie;filename | ||||
|       filename←(⊃'cover_out'in Conf),(⊃'cover_file'in Conf) | ||||
|       :Trap 22 | ||||
|           tie←filename ⎕NTIE 0 | ||||
|           filename ⎕NERASE tie | ||||
|           filename ⎕NCREATE tie | ||||
|       :Else | ||||
|           tie←filename ⎕NCREATE 0 | ||||
|       :EndTrap | ||||
|       Simple_array←⍕⊃,/Page | ||||
|       (⎕UCS'UTF-8'⎕UCS Simple_array)⎕NAPPEND tie | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←is_function Argument | ||||
|       Z←'_TEST'≡¯5↑Argument | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←is_list_of_functions Argument | ||||
|       Z←2=≡Argument | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←is_file Argument | ||||
|       Z←'.dyalog'≡¯7↑Argument | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←is_dir Argument;attr | ||||
|       :If 'Linux'≡5↑⊃'.'⎕WG'APLVersion' | ||||
|           Z←'yes'≡⊃⎕CMD'test -d ',Argument,' && echo yes || echo no' | ||||
|       :Else | ||||
|           'gfa'⎕NA'I kernel32|GetFileAttributes* <0t' | ||||
|           :If Z←¯1≠attr←gfa⊂Argument ⍝ If file exists | ||||
|               Z←⊃2 16⊤attr           ⍝ Return bit 4 | ||||
|           :EndIf | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|  | ||||
|     ∇ Z←test_files_in_dir Argument | ||||
|       :If 'Linux'≡5↑⊃'.'⎕WG'APLVersion' | ||||
|           Z←⎕SH'find ',Argument,' -name \*_tests.dyalog' | ||||
|       :Else | ||||
|           #.⎕CY'files' | ||||
|           Z←#.Files.Dir Argument,'\*_tests.dyalog' | ||||
|           Z←(Argument,'\')∘,¨Z | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←run_ut ut_data;returned;crashed;pass;crash;fail;message | ||||
|       (returned crashed time)←execute_function ut_data | ||||
|       (pass crash fail)←determine_pass_crash_or_fail returned crashed | ||||
|       message←determine_message pass fail crashed(2⊃ut_data)returned time | ||||
|       print_message_to_screen message | ||||
|       Z←(pass crash fail) | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←execute_function ut_data;function;t | ||||
|       reset_UT_globals | ||||
|       function←(⍕(⊃ut_data[1])),'.',⊃ut_data[2] | ||||
|       :Trap sac | ||||
|           :If 3.2≡⎕NC⊂function | ||||
|               t←⎕TS | ||||
|               Z←(⍎function,' ⍬')0 | ||||
|               t←⎕TS-t | ||||
|           :Else | ||||
|               t←⎕TS | ||||
|               Z←(⍎function)0 | ||||
|               t←⎕TS-t | ||||
|           :EndIf | ||||
|       | ||||
|       :Else | ||||
|           Z←(↑⎕DM)1 | ||||
|           :If exception≢⍬ | ||||
|               expect←exception | ||||
|               Z[2]←0 | ||||
|               t←⎕TS-t | ||||
|           :EndIf | ||||
|       :EndTrap | ||||
|       Z,←⊂t | ||||
|     ∇ | ||||
|  | ||||
|     ∇ reset_UT_globals | ||||
|       expect_orig ← expect← ⎕NS⍬ | ||||
|       exception←⍬ | ||||
|       nexpect_orig ← nexpect← ⎕NS⍬ | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←is_test FunctionName;wsIndex | ||||
|       wsIndex←FunctionName⍳' ' | ||||
|       FunctionName←(wsIndex-1)↑FunctionName | ||||
|       Z←'_TEST'≡¯5↑FunctionName | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Heading print_passed_crashed_failed(ArrayRes time) | ||||
|       ⎕←'-----------------------------------------' | ||||
|       ⎕←Heading | ||||
|       ⎕←'    ⍋  Passed: ',+/{1⊃⍵}¨ArrayRes | ||||
|       ⎕←'    ⍟ Crashed: ',+/{2⊃⍵}¨ArrayRes | ||||
|       ⎕←'    ⍒  Failed: ',+/{3⊃⍵}¨ArrayRes | ||||
|       ⎕←'    ○ Runtime: ',time[5],'m',time[6],'s',time[7],'ms' | ||||
|     ∇ | ||||
|      | ||||
|     determine_pass_crash_or_fail←{ | ||||
|       r c←⍵ ⋄ 0≠c:0 1 0 ⋄ z←(0 0 1)(1 0 0) | ||||
|       expect_orig≢expect:(⎕IO+expect≡r)⊃z ⋄ (⎕IO+nexpect≢r)⊃z | ||||
|     } | ||||
|  | ||||
|     ∇ Z←determine_message(pass fail crashed name returned time) | ||||
|       :If crashed | ||||
|           Z←'CRASHED: 'failure_message name returned | ||||
|       :ElseIf pass | ||||
|           Z←'Passed ',time[5],'m',time[6],'s',time[7],'ms' | ||||
|       :Else | ||||
|           Z←'FAILED: 'failure_message name returned | ||||
|       :EndIf | ||||
|     ∇ | ||||
|  | ||||
|     ∇ print_message_to_screen message | ||||
|       ⎕←message | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←term_to_text Term;Text;Rows | ||||
|       Text←#.DISPLAY Term | ||||
|       Rows←1⊃⍴Text | ||||
|       Z←(Rows 4⍴''),Text | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←Cause failure_message(name returned);hdr;exp;expterm;got;gotterm | ||||
|       hdr←Cause,name | ||||
|       exp←'Expected' | ||||
|       expterm←term_to_text #.UT.expect | ||||
|       got←'Got' | ||||
|       gotterm←term_to_text returned | ||||
|       Z←align_and_join_message_parts hdr exp expterm got gotterm | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←align_and_join_message_parts Parts;hdr;exp;expterm;got;gotterm;R1;C1;R2;C2;W | ||||
|       (hdr exp expterm got gotterm)←Parts | ||||
|       (R1 C1)←⍴expterm | ||||
|       (R2 C2)←⍴gotterm | ||||
|       W←⊃⊃⌈/C1 C2(⍴hdr)(⍴exp)(⍴got) | ||||
|       Z←(W↑hdr),[0.5](W↑exp) | ||||
|       Z←Z⍪(R1 W↑expterm) | ||||
|       Z←Z⍪(W↑got) | ||||
|       Z←Z⍪(R2 W↑gotterm) | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←confparam in config | ||||
|       Z←1↓⊃({confparam≡⊃⍵}¨config)/config | ||||
|     ∇ | ||||
|  | ||||
|     ∇ Z←config has confparam | ||||
|       Z←∨/{confparam≡⊃⍵}¨config | ||||
|     ∇ | ||||
|  | ||||
| :EndNameSpace | ||||
							
								
								
									
										66
									
								
								samples/Assembly/External Interrupt.a51
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								samples/Assembly/External Interrupt.a51
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| 	ORG	0000h | ||||
| 	SJMP	START | ||||
| 	ORG	0003h | ||||
| 	LCALL	INT0_ISR | ||||
| 	RETI | ||||
| 	ORG	000Bh | ||||
| 	LCALL	T0_ISR | ||||
| 	RETI | ||||
| 	ORG	0013h | ||||
| 	LCALL	INT1_ISR | ||||
| 	RETI | ||||
| 	ORG	001Bh | ||||
| 	LCALL	T1_ISR | ||||
| 	RETI | ||||
| 	ORG	0023h | ||||
| 	LCALL	UART_ISR | ||||
| 	RETI | ||||
| 	ORG	0030h | ||||
| START: | ||||
| 	MOV	A,#11111110b | ||||
| 	SETB	IT0	; Set External Interrupt 0 to be falling edge triggered | ||||
| 	SETB	EX0	; Enable External Interrut 0 | ||||
| 	SETB	EA	; Enable Interrupt | ||||
| LEFT:			 | ||||
| 	CJNE	A,#01111111b,LOOP1 | ||||
| 	JMP	RIGHT | ||||
| LOOP1: | ||||
| 	MOV	P1,A | ||||
| 	RL	A	 | ||||
| 	LCALL	DELAY | ||||
| 	SJMP	LEFT	 | ||||
| RIGHT: | ||||
| 	CJNE	A,#11111110b,LOOP2 | ||||
| 	JMP	LEFT | ||||
| LOOP2: | ||||
| 	MOV	P1,A | ||||
| 	RR	A	 | ||||
| 	LCALL	DELAY | ||||
| 	SJMP	RIGHT | ||||
| 	 | ||||
| INT0_ISR: | ||||
| 	MOV	R1,#3 | ||||
| FLASH: | ||||
| 	MOV	P1,#00h | ||||
| 	LCALL	DELAY | ||||
| 	MOV	P1,#0FFh | ||||
| 	LCALL	DELAY | ||||
| 	DJNZ	R1,FLASH | ||||
| 	RET | ||||
| T0_ISR: | ||||
| 	RET | ||||
| INT1_ISR: | ||||
| 	RET | ||||
| T1_ISR: | ||||
| 	RET | ||||
| UART_ISR: | ||||
| 	RET | ||||
|  | ||||
| DELAY:	MOV	R5,#20	;R5*20 mS | ||||
| D1:     MOV	R6,#40 | ||||
| D2:     MOV	R7,#249 | ||||
| 	DJNZ	R7,$ | ||||
|  	DJNZ	R6,D2 | ||||
|   	DJNZ	R5,D1 | ||||
|    	RET | ||||
| 	END | ||||
| @@ -1,13 +1,13 @@ | ||||
| doc "Test function for Ceylon" | ||||
| by  "Enrique" | ||||
| "Test function for Ceylon" | ||||
| by ("Enrique") | ||||
| shared void test() { | ||||
|   print("test"); | ||||
|     print("test"); | ||||
| } | ||||
|  | ||||
| doc "Test class for Ceylon" | ||||
| "Test class for Ceylon" | ||||
| shared class Test(name) satisfies Comparable<Test> { | ||||
|     shared String name; | ||||
|     shared actual String string = "Test " name "."; | ||||
|     shared actual String string = "Test ``name``."; | ||||
|  | ||||
|     shared actual Comparison compare(Test other) { | ||||
|         return name<=>other.name; | ||||
|   | ||||
							
								
								
									
										11
									
								
								samples/Clean/GenHylo.dcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								samples/Clean/GenHylo.dcl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | ||||
| 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 | ||||
|  | ||||
							
								
								
									
										9
									
								
								samples/Clean/GenMap.dcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								samples/Clean/GenMap.dcl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| definition module GenMap | ||||
|  | ||||
| import StdGeneric | ||||
|  | ||||
| generic gMap a b :: .a -> .b | ||||
| derive gMap c, UNIT, PAIR, EITHER, CONS, FIELD, OBJECT, {}, {!}  | ||||
|  | ||||
| derive gMap [], (,), (,,),  (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,) | ||||
|  | ||||
							
								
								
									
										19
									
								
								samples/Clean/GenMap.icl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								samples/Clean/GenMap.icl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| 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 [], (,), (,,),  (,,,), (,,,,), (,,,,,), (,,,,,,), (,,,,,,,) | ||||
|  | ||||
							
								
								
									
										54
									
								
								samples/Clean/fsieve.icl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/Clean/fsieve.icl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,54 @@ | ||||
| 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 | ||||
|  | ||||
							
								
								
									
										99
									
								
								samples/Clean/sem.icl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								samples/Clean/sem.icl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,99 @@ | ||||
| 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) | ||||
|  | ||||
							
								
								
									
										14
									
								
								samples/Clean/stack.dcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								samples/Clean/stack.dcl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| 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 | ||||
|  | ||||
							
								
								
									
										33
									
								
								samples/Clean/stack.icl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								samples/Clean/stack.icl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,33 @@ | ||||
| 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 | ||||
|  | ||||
							
								
								
									
										16
									
								
								samples/Clean/streams.dcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								samples/Clean/streams.dcl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| 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] | ||||
|  | ||||
							
								
								
									
										49
									
								
								samples/Clean/streams.icl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								samples/Clean/streams.icl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| 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) _ _ = [] | ||||
|  | ||||
							
								
								
									
										8
									
								
								samples/Forth/bitmap.frt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								samples/Forth/bitmap.frt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| \ 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 ; | ||||
							
								
								
									
										7
									
								
								samples/Forth/enum.frt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								samples/Forth/enum.frt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,7 @@ | ||||
| \ 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 +! ; | ||||
							
								
								
									
										8
									
								
								samples/Forth/macros.frt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								samples/Forth/macros.frt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| \ Simplifies compiling words. | ||||
|  | ||||
| : [[     ; immediate | ||||
| : '<>    >in @ ' swap >in ! <> ; | ||||
| : (]])   begin dup '<> while postpone postpone repeat drop ; | ||||
| : ]]     ['] [[ (]]) ; immediate | ||||
|  | ||||
| ( Usage:   : foo ]] dup * [[ ; immediate   : bar 42 foo . ; ) | ||||
							
								
								
									
										57
									
								
								samples/G-code/duettest.g
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								samples/G-code/duettest.g
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| ; 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
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25912
									
								
								samples/G-code/lm.g
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										29735
									
								
								samples/G-code/rm.g
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29735
									
								
								samples/G-code/rm.g
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										13
									
								
								samples/G-code/square.g
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								samples/G-code/square.g
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| G28 X0 Y0 | ||||
| G1 X55 Y5 F2000 | ||||
| G1 Y180 | ||||
| G1 X180 | ||||
| G1 Y5 | ||||
| G1 X55 | ||||
| G1 Y180 | ||||
| G1 X180 | ||||
| G1 Y5 | ||||
| G1 X55 | ||||
| M0 | ||||
|  | ||||
|  | ||||
							
								
								
									
										57
									
								
								samples/GDScript/example.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								samples/GDScript/example.gd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,57 @@ | ||||
| # 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) | ||||
							
								
								
									
										216
									
								
								samples/GDScript/grid.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										216
									
								
								samples/GDScript/grid.gd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,216 @@ | ||||
|  | ||||
|  | ||||
| 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) | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
							
								
								
									
										243
									
								
								samples/GDScript/player.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								samples/GDScript/player.gd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,243 @@ | ||||
|  | ||||
| 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 | ||||
|  | ||||
|  | ||||
							
								
								
									
										73
									
								
								samples/GDScript/pong.gd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								samples/GDScript/pong.gd
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
|  | ||||
| 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) | ||||
|  | ||||
							
								
								
									
										21
									
								
								samples/Graph Modeling Language/sample.gml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								samples/Graph Modeling Language/sample.gml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| graph | ||||
| [ | ||||
|   directed 0 | ||||
|   node | ||||
|   [ | ||||
|     id 0 | ||||
|     label "Node 1" | ||||
|     value 100 | ||||
|   ] | ||||
|   node | ||||
|   [ | ||||
|     id 1 | ||||
|     label "Node 2" | ||||
|     value 200 | ||||
|   ] | ||||
|   edge | ||||
|   [ | ||||
|     source 1 | ||||
|     target 0 | ||||
|   ] | ||||
| ] | ||||
							
								
								
									
										13
									
								
								samples/Groff/sample.4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								samples/Groff/sample.4
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| .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. | ||||
							
								
								
									
										12
									
								
								samples/JavaScript/jsbuild.jsb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								samples/JavaScript/jsbuild.jsb
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| 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(); | ||||
							
								
								
									
										795
									
								
								samples/LOLCODE/LOLTracer.lol
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										795
									
								
								samples/LOLCODE/LOLTracer.lol
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,795 @@ | ||||
| HAI 1.3 | ||||
|     OBTW | ||||
|       Author: Logan Kelly (logan.kelly@gmail.com) | ||||
|       Github: https://github.com/LoganKelly/LOLTracer | ||||
|     TLDR | ||||
|  | ||||
|     OBTW prev is the number used in the randin function. | ||||
|          I had to declare it in global scope so that it | ||||
|          would retain its value between calls to randin. | ||||
|     TLDR | ||||
|     I HAS A prev ITZ 0 | ||||
|     I HAS A rand_max ITZ 104729 | ||||
|  | ||||
|  | ||||
|     OBTW Equivalent to C's rand() function, except returns | ||||
|         a number in the range of 0 to rand_max. | ||||
|     TLDR | ||||
|     HOW IZ I randin | ||||
|         I HAS A a ITZ 33083 | ||||
|         I HAS A c ITZ 67607 | ||||
|         prev R MOD OF SUM OF PRODUKT OF prev AN a AN c AN rand_max | ||||
|         FOUND YR prev | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     BTW Returns a random number within the range of 0-1. | ||||
|     HOW IZ I rand_onein | ||||
|         I HAS A rand_num ITZ I IZ randin MKAY | ||||
|         rand_num IS NOW A NUMBAR | ||||
|         I HAS A rand_max_float ITZ MAEK rand_max A NUMBAR | ||||
|         FOUND YR  QUOSHUNT OF rand_num AN rand_max_float | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Equivalent to C ceil() function. Returns the next | ||||
|         largest integer for the given number. | ||||
|     TLDR | ||||
|     HOW IZ I ceilin YR num | ||||
|         I HAS A int_num ITZ num | ||||
|         int_num IS NOW A NUMBR | ||||
|         BOTH SAEM int_num AN num, O RLY? | ||||
|             YA RLY, FOUND YR num | ||||
|         OIC | ||||
|         DIFFRINT num AN SMALLR OF num AN 0, O RLY? | ||||
|             YA RLY | ||||
|                 int_num R SUM OF int_num AN 1 | ||||
|                 FOUND YR MAEK int_num A NUMBAR | ||||
|         OIC | ||||
|         DIFFRINT num AN BIGGR OF num AN 0, O RLY? | ||||
|             YA RLY | ||||
|                 FOUND YR MAEK int_num A NUMBAR | ||||
|         OIC | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Convert a number to hexadecimal. This | ||||
|          is returned as a string. | ||||
|     TLDR | ||||
|     HOW IZ I decimal_to_hex YR num | ||||
|         I HAS A i ITZ 0 | ||||
|         I HAS A rem | ||||
|         I HAS A hex_num ITZ A BUKKIT | ||||
|         I HAS A decimal_num ITZ num | ||||
|         IM IN YR num_loop | ||||
|             rem R MOD OF decimal_num AN 16 | ||||
|             I HAS A hex_digit | ||||
|             rem, WTF? | ||||
|                 OMG 10, hex_digit R "A", GTFO | ||||
|                 OMG 11, hex_digit R "B", GTFO | ||||
|                 OMG 12, hex_digit R "C", GTFO | ||||
|                 OMG 13, hex_digit R "D", GTFO | ||||
|                 OMG 14, hex_digit R "E", GTFO | ||||
|                 OMG 15, hex_digit R "F", GTFO | ||||
|                 OMGWTF, hex_digit R rem | ||||
|             OIC | ||||
|             hex_num HAS A SRS i ITZ hex_digit | ||||
|             decimal_num R QUOSHUNT OF decimal_num AN 16 | ||||
|             BOTH SAEM decimal_num AN 0, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|                 NO WAI, i R SUM OF i AN 1 | ||||
|             OIC | ||||
|         IM OUTTA YR num_loop | ||||
|         I HAS A hex_string ITZ A YARN | ||||
|         IM IN YR string_reverse | ||||
|             DIFFRINT i AN BIGGR OF i AN 0, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             hex_string R SMOOSH hex_string AN hex_num'Z SRS i MKAY | ||||
|             i R DIFF OF i AN 1 | ||||
|         IM OUTTA YR string_reverse | ||||
|         FOUND YR hex_string | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Convert a number to binary. This is returned | ||||
|          as a bukkit which has slots number 0-N where | ||||
|          n is equal to the number of binary digits - 1. | ||||
|          It also has a length slot which is equal to | ||||
|          the number of binary digits. | ||||
|     TLDR | ||||
|     HOW IZ I decimal_to_binary YR num | ||||
|         I HAS A i ITZ 0 | ||||
|         I HAS A decimal_num ITZ num | ||||
|         I HAS A binary_num ITZ A BUKKIT | ||||
|         IM IN YR num_loop | ||||
|             binary_num HAS A SRS i ITZ MOD OF decimal_num AN 2 | ||||
|             decimal_num R QUOSHUNT OF decimal_num AN 2 | ||||
|             BOTH SAEM decimal_num AN 0, O RLY? | ||||
|                 YA RLY | ||||
|                     I HAS A length ITZ SUM OF i AN 1 | ||||
|                     binary_num HAS A length ITZ length | ||||
|                     GTFO | ||||
|                 NO WAI, i R SUM OF i AN 1 | ||||
|             OIC | ||||
|         IM OUTTA YR num_loop | ||||
|         FOUND YR binary_num | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Bitwise and two binary numbers. The numbers | ||||
|          must be provided in the format returned by | ||||
|          decimal_to_binary. | ||||
|     TLDR | ||||
|     HOW IZ I bitwise_andin YR first_num AN YR second_num | ||||
|         I HAS A binary_first_num ITZ I IZ decimal_to_binary YR first_num MKAY | ||||
|         I HAS A binary_second_num ITZ I IZ decimal_to_binary YR second_num MKAY | ||||
|         I HAS A first_length ITZ binary_first_num'Z length | ||||
|         I HAS A second_length ITZ binary_second_num'Z length | ||||
|         I HAS A max_length ITZ BIGGR OF first_length AN second_length | ||||
|         I HAS A final_binary ITZ A BUKKIT | ||||
|         I HAS A final_length ITZ 0 | ||||
|         I HAS A i ITZ 0 | ||||
|         IM IN YR num_loop | ||||
|             BOTH SAEM i AN max_length, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             I HAS A first_binary ITZ 0 | ||||
|             I HAS A second_binary ITZ 0 | ||||
|             DIFFRINT i AN BIGGR OF i AN first_length, O RLY? | ||||
|                 YA RLY, first_binary R binary_first_num'Z SRS i | ||||
|             OIC | ||||
|             DIFFRINT i AN BIGGR OF i AN second_length, O RLY? | ||||
|                 YA RLY, second_binary R binary_second_num'Z SRS i | ||||
|             OIC | ||||
|             EITHER OF BOTH SAEM first_binary AN 0 AN ... | ||||
|                       BOTH SAEM second_binary AN 0, O RLY? | ||||
|                 YA RLY, final_binary HAS A SRS i ITZ 0 | ||||
|                 NO WAI | ||||
|                     final_binary HAS A SRS i ITZ 1 | ||||
|                     final_length R SUM OF i AN 1 | ||||
|             OIC | ||||
|             i R SUM OF i AN 1 | ||||
|         IM OUTTA YR num_loop | ||||
|         final_binary HAS A length ITZ final_length | ||||
|         FOUND YR final_binary | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Bitshift left a binary number by num_bits. | ||||
|          The binary number must be provided in the format | ||||
|          returned by decimal_to_binary. | ||||
|     TLDR | ||||
|     HOW IZ I bit_shift_leftin YR num AN YR num_bits | ||||
|         I HAS A binary_num ITZ num | ||||
|         I HAS A length ITZ binary_num'Z length | ||||
|         I HAS A i ITZ SUM OF DIFF OF length AN 1 AN num_bits | ||||
|         I HAS A shifted_binary_num ITZ A BUKKIT | ||||
|         IM IN YR num_loop | ||||
|             BOTH SAEM i AN -1, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             I HAS A unshifted_index ITZ DIFF OF i AN num_bits | ||||
|             BOTH SAEM unshifted_index AN BIGGR OF unshifted_index AN 0, O RLY? | ||||
|                 YA RLY | ||||
|                     shifted_binary_num HAS A SRS i ITZ binary_num'Z SRS unshifted_index | ||||
|                 NO WAI | ||||
|                     shifted_binary_num HAS A SRS i ITZ 0 | ||||
|             OIC | ||||
|             i R DIFF OF i AN 1 | ||||
|         IM OUTTA YR num_loop | ||||
|         shifted_binary_num HAS A length ITZ SUM OF binary_num'Z length AN num_bits | ||||
|         FOUND YR shifted_binary_num | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Convert a binary number into a decimal number. | ||||
|          The binary number must be provided in the format | ||||
|          return by decimal_to_binary. | ||||
|     TLDR | ||||
|     HOW IZ I binary_to_decimal YR binary_num | ||||
|         I HAS A length ITZ binary_num'Z length | ||||
|         I HAS A decimal_num ITZ 0 | ||||
|         I HAS A i ITZ 0 | ||||
|         IM IN YR num_loop | ||||
|             BOTH SAEM i AN length, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             I HAS A binary_value ITZ binary_num'Z SRS i | ||||
|             I HAS A decimal_value ITZ 0 | ||||
|             BOTH SAEM binary_value AN 1, O RLY? | ||||
|                 YA RLY, decimal_value R I IZ power_of YR 2 AN YR i MKAY | ||||
|             OIC | ||||
|             decimal_num R SUM OF decimal_num AN decimal_value | ||||
|             i R SUM OF i AN 1 | ||||
|         IM OUTTA YR num_loop | ||||
|         FOUND YR decimal_num | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Equivalent to C's pow() function. Raises | ||||
|          base to the power of exponent. | ||||
|     TLDR | ||||
|     HOW IZ I power_of YR base AN YR exponent | ||||
|         I HAS A i ITZ 0 | ||||
|         I HAS A num ITZ 1 | ||||
|         IM IN YR num_loop | ||||
|             BOTH SAEM i AN exponent, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             num R PRODUKT OF num AN base | ||||
|             i R SUM OF i AN 1 | ||||
|         IM OUTTA YR num_loop | ||||
|         FOUND YR num | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Return a binary number as a YARN. | ||||
|          The binary number must be provided in the format | ||||
|          return by decimal_to_binary. | ||||
|     TLDR | ||||
|     HOW IZ I binary_to_string YR binary_num | ||||
|         I HAS A binary_string ITZ A YARN | ||||
|         I HAS A i ITZ DIFF OF binary_num'Z length AN 1 | ||||
|         IM IN YR string_reverse | ||||
|             DIFFRINT i AN BIGGR OF i AN 0, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             binary_string R SMOOSH binary_string AN binary_num'Z SRS i MKAY | ||||
|             i R DIFF OF i AN 1 | ||||
|         IM OUTTA YR string_reverse | ||||
|         FOUND YR binary_string | ||||
|     IF U SAY SO | ||||
|  | ||||
|     OBTW Converts a hexadecimal number to the character | ||||
|          equivalent in UNICODE. This was originally used | ||||
|          in an attempt to write out to the P6 format of PPM, | ||||
|          but the string produced by VISIBLE didn't seem to be | ||||
|          properly formatted for some reason. Instead I fell back | ||||
|          to P3 of PPM and wrote out to regular ascii format. | ||||
|     TLDR | ||||
|     HOW IZ I hex_to_char YR hex_string | ||||
|         OBTW This is a hack I found for converting hexadecimal strings | ||||
|              into their unicode character equivalents. Instead of using | ||||
|              the ":" character directly, we escape it and get it using its | ||||
|              unicode hex value (3A). This allows us to assemble the string | ||||
|              with our inserted hex value without errors. | ||||
|         TLDR | ||||
|         FOUND YR SMOOSH ":(3A)" AN "(" AN hex_string AN ")" MKAY | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW Equivalent to C's square() function. However it will only | ||||
|          produce accurate results if the number is no larger than | ||||
|          1048576. See the note below. This is based upon Newton's | ||||
|          Approximation Method as adapted in C at this website (#11): | ||||
|  | ||||
|          http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi | ||||
|     TLDR | ||||
|     HOW IZ I square_rootin YR number | ||||
|         OBTW Forcing a comparison between  the accuracy and a number | ||||
|              which is so big that its precision is larger than the | ||||
|              accuracy causes an infinite loop to occur. For this | ||||
|              reason we have to set any number larger than 2^20 to | ||||
|              a value below it. | ||||
|         TLDR | ||||
|         BOTH SAEM number AN BIGGR OF number AN 1048576.00, O RLY? | ||||
|             YA RLY, number R 1048575.00 | ||||
|         OIC | ||||
|         I HAS A accuracy ITZ 0.0001 | ||||
|         I HAS A lower ITZ A NUMBAR | ||||
|         I HAS A upper ITZ A NUMBAR | ||||
|         I HAS A guess ITZ A NUMBAR | ||||
|         DIFFRINT number AN BIGGR OF number AN 1.0, O RLY? | ||||
|             YA RLY | ||||
|                 lower R number | ||||
|                 upper R 1.0 | ||||
|             NO WAI | ||||
|                 lower R 1.0 | ||||
|                 upper R number | ||||
|         OIC | ||||
|         IM IN YR LOOP | ||||
|             I HAS A delta ITZ DIFF OF upper AN lower | ||||
|             BOTH SAEM delta AN SMALLR OF delta AN accuracy, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             I HAS A guess ITZ QUOSHUNT OF SUM OF lower AN upper AN 2.0 | ||||
|             I HAS A guess_squared ITZ PRODUKT OF guess AN guess | ||||
|             DIFFRINT guess_squared AN SMALLR OF guess_squared AN number, O RLY? | ||||
|                 YA RLY | ||||
|                     upper R guess | ||||
|                 NO WAI | ||||
|                     lower R guess | ||||
|             OIC | ||||
|         IM OUTTA YR LOOP | ||||
|         FOUND YR QUOSHUNT OF SUM OF lower AN upper AN 2.0 | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW | ||||
|          The intersection test for line [o, d] | ||||
|          Return 2 if a hit was found (and also return distance t and bouncing ray n). | ||||
|          Return 0 if no hit was found but ray goes upward | ||||
|          Return 1 if no hit was found but ray goes downward | ||||
|     TLDR | ||||
|     HOW IZ I tracin YR o AN YR d | ||||
|         I HAS A t ITZ 1000000000 | ||||
|         I HAS A m ITZ 0 | ||||
|         BOTH SAEM d'Z z AN 0, O RLY? | ||||
|             YA RLY, d'Z z R 0.00001 | ||||
|         OIC | ||||
|         I HAS A p ITZ QUOSHUNT OF DIFF OF 0 AN o'Z z AN d'Z z | ||||
|         I HAS A n ITZ LIEK A Vector | ||||
|         DIFFRINT p AN SMALLR OF p AN 0.01, O RLY? | ||||
|             YA RLY | ||||
|                 t R p | ||||
|                 n R Vector IZ constructin YR 0.0 AN YR 0.0 AN YR 1.0 MKAY | ||||
|                 m R 1 | ||||
|         OIC | ||||
|  | ||||
|         BTW The world is encoded in sphere_positions, with 9 lines and 19 columns | ||||
|         I HAS A k ITZ 18 | ||||
|         IM IN YR column_loop BTW For each column of objects | ||||
|             BOTH SAEM k AN -1, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|  | ||||
|             I HAS A j ITZ 8 | ||||
|             IM IN YR line_loop BTW For each line on that column | ||||
|                 BOTH SAEM j AN -1, O RLY? | ||||
|                     YA RLY, GTFO | ||||
|                 OIC | ||||
|  | ||||
|                 I HAS A sphere_positions_line ITZ sphere_positions'Z SRS j | ||||
|                 sphere_positions_line'Z SRS k, O RLY? | ||||
|                     YA RLY | ||||
|                        BTW There is a sphere, but does the ray hit it? | ||||
|                        p R Vector IZ addin YR o AN YR ... | ||||
|                            Vector IZ constructin YR DIFF OF 0 AN k AN ... | ||||
|                                                  YR 0 AN ... | ||||
|                                                  YR DIFF OF DIFF OF 0 AN j AN 4 MKAY ... | ||||
|                            MKAY | ||||
|                        I HAS A b ITZ Vector IZ dot_productin YR p AN YR d MKAY | ||||
|                        I HAS A q_c ITZ DIFF OF Vector IZ dot_productin YR p AN YR p MKAY AN 1 | ||||
|                        I HAS A q ITZ DIFF OF PRODUKT OF b AN b AN q_c | ||||
|  | ||||
|  | ||||
|                        DIFFRINT q AN SMALLR OF q AN 0, O RLY? | ||||
|                            YA RLY | ||||
|                                BTW It does, compute the distance camera-sphere | ||||
|                                I HAS A s ITZ DIFF OF DIFF OF 0 AN b AN I IZ square_rootin YR q MKAY | ||||
|  | ||||
|  | ||||
|                                BOTH OF DIFFRINT s AN BIGGR OF s AN t AN ... | ||||
|                                        DIFFRINT s AN SMALLR OF s AN 0.01, O RLY? | ||||
|                                    YA RLY | ||||
|                                        BTW So far this is the minimum distance, save it. And | ||||
|                                        BTW also compute the bouncing ray vector into 'n' | ||||
|                                        t R s | ||||
|                                        I HAS A bouncing_ray ITZ Vector IZ scalin YR direction AN YR t MKAY | ||||
|                                        bouncing_ray R Vector IZ addin YR p AN YR bouncing_ray MKAY | ||||
|                                        n R Vector IZ normalizin YR bouncing_ray MKAY | ||||
|                                        m R 2 | ||||
|                                OIC | ||||
|                        OIC | ||||
|                 OIC | ||||
|                 j R DIFF OF j AN 1 | ||||
|             IM OUTTA YR line_loop | ||||
|             k R DIFF OF k AN 1 | ||||
|         IM OUTTA YR column_loop | ||||
|         I HAS A result ITZ A BUKKIT | ||||
|         result HAS A m ITZ m | ||||
|         result HAS A t ITZ t | ||||
|         result HAS A n ITZ n | ||||
|         FOUND YR result | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW | ||||
|         Sample the world and return the pixel color for | ||||
|         a ray [o, d] | ||||
|     TLDR | ||||
|     HOW IZ I samplin YR o AN YR d | ||||
|  | ||||
|         BTW Search for an intersection ray Vs. world | ||||
|         I HAS A result ITZ I IZ tracin YR o AN YR d MKAY | ||||
|         I HAS A m ITZ result'Z m | ||||
|         I HAS A t ITZ result'Z t | ||||
|         I HAS A n ITZ result'Z n | ||||
|  | ||||
|         BOTH SAEM m AN 0, O RLY? | ||||
|             YA RLY | ||||
|                 BTW No sphere found and the ray goes upward: Generate a sky color | ||||
|                 I HAS A vec_result ITZ Vector IZ constructin YR 0.7 AN YR 0.6 AN YR 1.0 MKAY | ||||
|  | ||||
|                 I HAS A z_component ITZ d'Z z | ||||
|                 DIFFRINT z_component AN BIGGR OF z_component AN 0, O RLY? | ||||
|                     YA RLY, z_component R 0 | ||||
|                 OIC | ||||
|                 I HAS A vec_num ITZ DIFF OF 1 AN z_component | ||||
|                 vec_num R I IZ power_of YR vec_num AN YR 4 MKAY | ||||
|                 FOUND YR Vector IZ scalin YR vec_result AN YR vec_num MKAY | ||||
|         OIC | ||||
|  | ||||
|         BTW h = intersection coordinate | ||||
|         I HAS A h ITZ Vector IZ scalin YR d AN YR t MKAY | ||||
|         h R Vector IZ addin YR o AN YR h MKAY | ||||
|         BTW l = direction to light (with random delta for soft shadows) | ||||
|         I HAS A l ITZ LIEK A Vector | ||||
|         l HAS A x ITZ SUM OF 9 AN I IZ rand_onein MKAY | ||||
|         l HAS A y ITZ SUM OF 9 AN I IZ rand_onein MKAY | ||||
|         l HAS A z ITZ 16 | ||||
|         I HAS A l_two ITZ Vector IZ scalin YR h AN YR -1.0 MKAY | ||||
|         l R Vector IZ addin YR l AN YR l_two MKAY | ||||
|         l R Vector IZ normalizin YR l MKAY | ||||
|         BTW r = The half-vector | ||||
|         I HAS A r ITZ Vector IZ dot_productin YR n AN YR d MKAY | ||||
|         r R PRODUKT OF r AN -2 | ||||
|         r R Vector IZ scalin YR n AN YR r MKAY | ||||
|         r R Vector IZ addin YR d AN YR r MKAY | ||||
|  | ||||
|         BTW Calculate the lambertian factor | ||||
|         I HAS A b ITZ Vector IZ dot_productin YR l AN YR n MKAY | ||||
|  | ||||
|         BTW Calculate illumination factor (lambertian coefficient > 0 or in shadow)? | ||||
|         I HAS A illumination_result ITZ I IZ tracin YR h AN YR l MKAY | ||||
|         I HAS A i_m ITZ illumination_result'Z m | ||||
|         EITHER OF DIFFRINT b AN BIGGR OF b AN 0 AN BOTH SAEM i_m AN 2, O RLY? | ||||
|             YA RLY, b R 0 | ||||
|         OIC | ||||
|  | ||||
|         BTW Calculate the color 'p' with diffuse and specular component | ||||
|         I HAS A base | ||||
|         DIFFRINT b AN SMALLR OF b AN 0, O RLY? | ||||
|             YA RLY, base R 1 | ||||
|             NO WAI, base R 0 | ||||
|         OIC | ||||
|         base R Vector IZ scalin YR r AN YR base MKAY | ||||
|         base R Vector IZ dot_productin YR l AN YR r MKAY | ||||
|         I HAS A p ITZ I IZ power_of YR base AN YR 99 MKAY | ||||
|  | ||||
|         BOTH SAEM m AN 1, O RLY? | ||||
|             YA RLY | ||||
|                 BTW No sphere was hit and the ray was going downward: Generate a floor color | ||||
|                 h R Vector IZ scalin YR h AN YR 0.2 MKAY | ||||
|                 I HAS A ceil_h_x ITZ I IZ ceilin YR h'Z x MKAY | ||||
|                 I HAS A ceil_h_y ITZ I IZ ceilin YR h'Z y MKAY | ||||
|                 I HAS A ceil_h ITZ SUM OF ceil_h_x AN ceil_h_y | ||||
|                 ceil_h IS NOW A NUMBR | ||||
|                 I HAS A color_choice ITZ MOD OF ceil_h AN 2 | ||||
|                 I HAS A color ITZ LIEK A Vector | ||||
|                 color_choice, O RLY? | ||||
|                     YA RLY | ||||
|                         color HAS A x ITZ 3 | ||||
|                         color HAS A y ITZ 1 | ||||
|                         color HAS A z ITZ 1 | ||||
|                     NO WAI | ||||
|                         color HAS A x ITZ 3 | ||||
|                         color HAS A y ITZ 3 | ||||
|                         color HAS A z ITZ 3 | ||||
|                 OIC | ||||
|                 FOUND YR Vector IZ scalin YR color AN YR SUM OF PRODUKT OF b AN 0.2 AN 0.1 MKAY | ||||
|         OIC | ||||
|  | ||||
|         BTW m == 2 A sphere was hit. Cast a ray bouncing from the sphere surface. | ||||
|         I HAS A sphere_color ITZ LIEK A Vector | ||||
|         sphere_color HAS A x ITZ p | ||||
|         sphere_color HAS A y ITZ p | ||||
|         sphere_color HAS A z ITZ p | ||||
|         I HAS A recursive_color ITZ I IZ samplin YR h AN YR r MKAY | ||||
|         BTW Attenuate color by 50% since it is bouncing (* .5) | ||||
|         recursive_color R Vector IZ scalin YR recursive_color AN YR 0.5 MKAY | ||||
|         FOUND YR Vector IZ addin YR sphere_color AN YR recursive_color MKAY | ||||
|     IF U SAY SO | ||||
|  | ||||
|  | ||||
|     OBTW The vector class provides functionality for all the common | ||||
|          linear algebra operations performed on vectors. | ||||
|     TLDR | ||||
|     O HAI IM Vector | ||||
|         I HAS A x ITZ 0 | ||||
|         I HAS A y ITZ 0 | ||||
|         I HAS A z ITZ 0 | ||||
|  | ||||
|         BTW Add vector_one and vector_two | ||||
|         HOW IZ I addin YR vector_one AN YR vector_two | ||||
|             I HAS A result ITZ LIEK A Vector | ||||
|             result HAS A x ITZ 0 | ||||
|             result HAS A y ITZ 0 | ||||
|             result HAS A z ITZ 0 | ||||
|             result'Z x R SUM OF vector_one'Z x AN vector_two'Z x | ||||
|             result'Z y R SUM OF vector_one'Z y AN vector_two'Z y | ||||
|             result'Z z R SUM OF vector_one'Z z AN vector_two'Z z | ||||
|             FOUND YR result | ||||
|         IF U SAY SO | ||||
|  | ||||
|         BTW Scale vector_one by value | ||||
|     HOW IZ I scalin YR vector_one AN YR value | ||||
|             I HAS A result ITZ LIEK A Vector | ||||
|             result HAS A x ITZ 0 | ||||
|             result HAS A y ITZ 0 | ||||
|             result HAS A z ITZ 0 | ||||
|             result'Z x R PRODUKT OF vector_one'Z x AN value | ||||
|             result'Z y R PRODUKT OF vector_one'Z y AN value | ||||
|             result'Z z R PRODUKT OF vector_one'Z z AN value | ||||
|             FOUND YR result | ||||
|         IF U SAY SO | ||||
|  | ||||
|         BTW Dot product of vector_one and vector_two | ||||
|         HOW IZ I dot_productin YR vector_one AN YR vector_two | ||||
|             FOUND YR SUM OF SUM OF PRODUKT OF vector_one'Z x AN vector_two'Z x AN ... | ||||
|                                    PRODUKT OF vector_one'Z y AN vector_two'Z y AN ... | ||||
|                                    PRODUKT OF vector_one'Z z AN vector_two'Z z | ||||
|         IF U SAY SO | ||||
|  | ||||
|         BTW Cross product of vector_one and vector_two | ||||
|         HOW IZ I cross_productin YR vector_one AN YR vector_two | ||||
|         I HAS A result ITZ LIEK A Vector | ||||
|             result HAS A x ITZ 0 | ||||
|             result HAS A y ITZ 0 | ||||
|             result HAS A z ITZ 0 | ||||
|             result'Z x R DIFF OF PRODUKT OF vector_one'Z y AN vector_two'Z z AN ... | ||||
|                                  PRODUKT OF vector_one'Z z AN vector_two'Z y | ||||
|             result'Z y R DIFF OF PRODUKT OF vector_one'Z z AN vector_two'Z x AN ... | ||||
|                                  PRODUKT OF vector_one'Z x AN vector_two'Z z | ||||
|             result'Z z R DIFF OF PRODUKT OF vector_one'Z x AN vector_two'Z y AN ... | ||||
|                                  PRODUKT OF vector_one'Z y AN vector_two'Z x | ||||
|             FOUND YR result | ||||
|         IF U SAY SO | ||||
|  | ||||
|         BTW Length of vector_one | ||||
|         HOW IZ I lengthin YR vector_one | ||||
|             FOUND YR I IZ square_rootin YR ... | ||||
|                 SUM OF SUM OF PRODUKT OF vector_one'Z x AN vector_one'Z x AN ... | ||||
|                               PRODUKT OF vector_one'Z y AN vector_one'Z y AN ... | ||||
|                               PRODUKT OF vector_one'Z z AN vector_one'Z z MKAY | ||||
|         IF U SAY SO | ||||
|  | ||||
|         BTW Normalize vector_one | ||||
|         HOW IZ I normalizin YR vector_one | ||||
|             I HAS A result ITZ LIEK A Vector | ||||
|             result HAS A x ITZ 0 | ||||
|             result HAS A y ITZ 0 | ||||
|             result HAS A z ITZ 0 | ||||
|             I HAS A length ITZ Vector IZ lengthin YR vector_one MKAY | ||||
|             BOTH SAEM length AN 0, O RLY? | ||||
|                 YA RLY | ||||
|                     length R 1 | ||||
|             OIC | ||||
|             result'Z x R QUOSHUNT OF vector_one'Z x AN length | ||||
|             result'Z y R QUOSHUNT OF vector_one'Z y AN length | ||||
|             result'Z z R QUOSHUNT OF vector_one'Z z AN length | ||||
|             FOUND YR result | ||||
|         IF U SAY SO | ||||
|  | ||||
|         BTW Printable YARN version of vector | ||||
|         HOW IZ I to_stringin YR vector | ||||
|             FOUND YR SMOOSH "[" AN vector'Z x AN ", " ... | ||||
|                                 AN vector'Z y AN ", " ... | ||||
|                                 AN vector'Z z AN "]" MKAY | ||||
|         IF U SAY SO | ||||
|  | ||||
|         BTW Create and return a vector with components x, y, and z | ||||
|         HOW IZ I constructin YR x AN YR y AN YR z | ||||
|             I HAS A result ITZ LIEK A Vector | ||||
|             result HAS A x ITZ x | ||||
|             result HAS A y ITZ y | ||||
|             result HAS A z ITZ z | ||||
|             FOUND YR result | ||||
|         IF U SAY SO | ||||
|     KTHX | ||||
|  | ||||
|     OBTW The positions of the spheres are essentially | ||||
|          stored in a 2-D array. This differs from Kensler's | ||||
|          version where he used bit flags to store the | ||||
|          positions in a compressed and quickly accessed | ||||
|          manner. Unfortunately for us, bit operations | ||||
|          in LOLCODE were too slow for this to be a tenable | ||||
|          solution. | ||||
|     TLDR | ||||
|     I HAS A sphere_positions ITZ A BUKKIT | ||||
|     I HAS A sphere_positions_0 ITZ A BUKKIT | ||||
|     IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19 | ||||
|         sphere_positions_0 HAS A SRS pos_index ITZ FAIL | ||||
|     IM OUTTA YR LOOP | ||||
|     sphere_positions HAS A SRS 0 ITZ sphere_positions_0 | ||||
|     I HAS A sphere_positions_1 ITZ A BUKKIT | ||||
|     sphere_positions_1 HAS A SRS 0 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 0 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 1 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 2 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 2 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 3 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 4 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 4 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 5 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 6 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 7 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 7 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 8 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 9 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 9 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 10 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 11 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 11 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 12 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 13 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 14 ITZ WIN | ||||
|     BTWsphere_positions_1 HAS A SRS 14 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 15 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 16 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 16 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 17 ITZ FAIL | ||||
|     sphere_positions_1 HAS A SRS 18 ITZ WIN | ||||
|     BTW sphere_positions_1 HAS A SRS 18 ITZ FAIL | ||||
|     sphere_positions HAS A SRS 1 ITZ sphere_positions_1 | ||||
|     I HAS A sphere_positions_2 ITZ A BUKKIT | ||||
|     IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19 | ||||
|         sphere_positions_2 HAS A SRS pos_index ITZ FAIL | ||||
|     IM OUTTA YR LOOP | ||||
|     sphere_positions HAS A SRS 2 ITZ sphere_positions_2 | ||||
|     I HAS A sphere_positions_3 ITZ A BUKKIT | ||||
|     sphere_positions_3 HAS A SRS 0 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 1 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 2 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 3 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 4 ITZ WIN | ||||
|     BTW sphere_positions_3 HAS A SRS 4 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 5 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 6 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 7 ITZ WIN | ||||
|     BTW sphere_positions_3 HAS A SRS 7 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 8 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 9 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 10 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 11 ITZ WIN | ||||
|     sphere_positions_3 HAS A SRS 12 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 13 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 14 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 15 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 16 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 17 ITZ FAIL | ||||
|     sphere_positions_3 HAS A SRS 18 ITZ WIN | ||||
|     BTW sphere_positions_3 HAS A SRS 18 ITZ FAIL | ||||
|     sphere_positions HAS A SRS 3 ITZ sphere_positions_3 | ||||
|     I HAS A sphere_positions_4 ITZ A BUKKIT | ||||
|     IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19 | ||||
|         sphere_positions_4 HAS A SRS pos_index ITZ FAIL | ||||
|     IM OUTTA YR LOOP | ||||
|     sphere_positions HAS A SRS 4 ITZ sphere_positions_4 | ||||
|     I HAS A sphere_positions_5 ITZ A BUKKIT | ||||
|     sphere_positions_5 HAS A SRS 0 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 1 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 2 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 3 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 4 ITZ WIN | ||||
|     BTW sphere_positions_5 HAS A SRS 4 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 5 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 6 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 7 ITZ WIN | ||||
|     BTW sphere_positions_5 HAS A SRS 7 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 8 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 9 ITZ WIN | ||||
|     BTW sphere_positions_5 HAS A SRS 9 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 10 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 11 ITZ WIN | ||||
|     BTW sphere_positions_5 HAS A SRS 11 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 12 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 13 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 14 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 15 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 16 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 17 ITZ FAIL | ||||
|     sphere_positions_5 HAS A SRS 18 ITZ WIN | ||||
|     BTW sphere_positions_5 HAS A SRS 18 ITZ FAIL | ||||
|     sphere_positions HAS A SRS 5 ITZ sphere_positions_5 | ||||
|     I HAS A sphere_positions_6 ITZ A BUKKIT | ||||
|     IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19 | ||||
|         sphere_positions_6 HAS A SRS pos_index ITZ FAIL | ||||
|     IM OUTTA YR LOOP | ||||
|     sphere_positions HAS A SRS 6 ITZ sphere_positions_6 | ||||
|     I HAS A sphere_positions_7 ITZ A BUKKIT | ||||
|     IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19 | ||||
|         sphere_positions_7 HAS A SRS pos_index ITZ FAIL | ||||
|     IM OUTTA YR LOOP | ||||
|     sphere_positions HAS A SRS 7 ITZ sphere_positions_7 | ||||
|     I HAS A sphere_positions_8 ITZ A BUKKIT | ||||
|     IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19 | ||||
|         sphere_positions_8 HAS A SRS pos_index ITZ FAIL | ||||
|     IM OUTTA YR LOOP | ||||
|     sphere_positions HAS A SRS 8 ITZ sphere_positions_8 | ||||
|  | ||||
|     BTW Camera direction | ||||
|     I HAS A g ITZ Vector IZ constructin YR -6.0 AN YR -16.0 AN YR 0.0 MKAY | ||||
|     g R Vector IZ normalizin YR g MKAY | ||||
|  | ||||
|     BTW Camera up vector | ||||
|     I HAS A a ITZ Vector IZ constructin YR 0.0 AN YR 0.0 AN YR 1.0 MKAY | ||||
|     a R Vector IZ cross_productin YR a AN YR g MKAY | ||||
|     a R Vector IZ normalizin YR a MKAY | ||||
|     a R Vector IZ scalin YR a AN YR 0.002 MKAY | ||||
|     BTW Camera right vector | ||||
|     I HAS A b ITZ Vector IZ cross_productin YR g AN YR a MKAY | ||||
|     b R Vector IZ normalizin YR b MKAY | ||||
|     b R Vector IZ scalin YR b AN YR 0.002 MKAY | ||||
|     BTW Camera eye offset | ||||
|     I HAS A c ITZ Vector IZ addin YR a AN YR b MKAY | ||||
|     c R Vector IZ scalin YR c AN YR -256.0 MKAY | ||||
|     c R Vector IZ addin YR c AN YR g MKAY | ||||
|  | ||||
|     I HAS A max_x ITZ 511 | ||||
|     I HAS A max_y ITZ max_x | ||||
|     BTW Issue the PPM Header info | ||||
|     VISIBLE "P3 " SUM OF max_x AN 1 " " SUM OF max_y AN 1 " 255"! | ||||
|  | ||||
|     I HAS A viewpoint ITZ Vector IZ constructin YR 17 AN YR 16 AN YR 8 MKAY | ||||
|  | ||||
|     I HAS A y ITZ max_y | ||||
|     IM IN YR y_loop | ||||
|         BOTH SAEM y AN -1, O RLY? | ||||
|             YA RLY, GTFO | ||||
|         OIC | ||||
|         I HAS A x ITZ max_x | ||||
|         IM IN YR x_loop | ||||
|             BOTH SAEM x AN -1, O RLY? | ||||
|                 YA RLY, GTFO | ||||
|             OIC | ||||
|             I HAS A pixel_color ITZ Vector IZ constructin YR 13 AN YR 13 AN YR 13 MKAY | ||||
|  | ||||
|             I HAS A rays ITZ 64 | ||||
|             IM IN YR ray_loop | ||||
|                 BOTH SAEM rays AN 0, O RLY? | ||||
|                     YA RLY, GTFO | ||||
|                 OIC | ||||
|  | ||||
|                 BTW The delta to apply to the origin of the view (For Depth of View blur). | ||||
|                 I HAS A a_rand ITZ DIFF OF I IZ rand_onein MKAY AN 0.5 | ||||
|                 I HAS A t_a ITZ Vector IZ scalin YR a AN YR a_rand MKAY | ||||
|                 t_a R Vector IZ scalin YR t_a AN YR 99.0 MKAY | ||||
|                 I HAS A b_rand ITZ DIFF OF I IZ rand_onein MKAY AN 0.5 | ||||
|                 I HAS A t_b ITZ Vector IZ scalin YR b AN YR b_rand MKAY | ||||
|                 t_b R Vector IZ scalin YR t_b AN YR 99.0 MKAY | ||||
|                 I HAS A t ITZ Vector IZ addin YR t_a AN YR t_b MKAY | ||||
|  | ||||
|                 I HAS A origin ITZ Vector IZ addin YR viewpoint AN YR t MKAY | ||||
|  | ||||
|                 BTW Ray direction with random deltas for stochastic sampling | ||||
|                 I HAS A direction_up ITZ SUM OF I IZ rand_onein MKAY AN x | ||||
|                 direction_up R Vector IZ scalin YR a AN YR direction_up MKAY | ||||
|                 I HAS A direction_right ITZ SUM OF I IZ rand_onein MKAY AN y | ||||
|                 direction_right R Vector IZ scalin YR b AN YR direction_right MKAY | ||||
|                 I HAS A direction_t ITZ Vector IZ scalin YR t AN YR -1 MKAY | ||||
|                 I HAS A direction ITZ Vector IZ addin YR direction_right AN YR direction_up MKAY | ||||
|                 direction R Vector IZ addin YR direction AN YR c MKAY | ||||
|                 direction R Vector IZ scalin YR direction AN YR 16 MKAY | ||||
|                 direction R Vector IZ addin YR direction AN YR direction_t MKAY | ||||
|                 direction R Vector IZ normalizin YR direction MKAY | ||||
|  | ||||
|                 I HAS A sample_color ITZ I IZ samplin YR origin AN YR direction MKAY | ||||
|                 sample_color R Vector IZ scalin YR sample_color AN YR 3.5 MKAY | ||||
|                 BTW + pixel_color for color accumulation | ||||
|                 pixel_color R Vector IZ addin YR sample_color AN YR pixel_color MKAY | ||||
|                 rays R DIFF OF rays AN 1 | ||||
|             IM OUTTA YR ray_loop | ||||
|             I HAS A write_color ITZ pixel_color | ||||
|             write_color'Z x IS NOW A NUMBR | ||||
|             write_color'Z y IS NOW A NUMBR | ||||
|             write_color'Z z IS NOW A NUMBR | ||||
|             DIFFRINT write_color'Z x AN BIGGR OF write_color'Z x AN 0, O RLY? | ||||
|                 YA RLY, write_color'Z x R 0 | ||||
|             OIC | ||||
|             DIFFRINT write_color'Z y AN BIGGR OF write_color'Z y AN 0, O RLY? | ||||
|                 YA RLY, write_color'Z y R 0 | ||||
|             OIC | ||||
|             DIFFRINT write_color'Z z AN BIGGR OF write_color'Z z AN 0, O RLY? | ||||
|                 YA RLY, write_color'Z z R 0 | ||||
|             OIC | ||||
|             VISIBLE " " write_color'Z x " " ... | ||||
|                     " " write_color'Z y " " ... | ||||
|                     " " write_color'Z z " "! | ||||
|             x R DIFF OF x AN 1 | ||||
|         IM OUTTA YR x_loop | ||||
|         y R DIFF OF y AN 1 | ||||
|     IM OUTTA YR y_loop | ||||
|  | ||||
| KTHXBYE | ||||
							
								
								
									
										28
									
								
								samples/Lua/wsapi.fcgi
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								samples/Lua/wsapi.fcgi
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| #!/usr/bin/lua | ||||
|  | ||||
| -- Generic WSAPI FastCGI launcher, extracts application to launch | ||||
| -- from SCRIPT_FILENAME/PATH_TRANSLATED, each application (defined | ||||
| -- by its script entry point) gets an isolated Lua VM; sequential | ||||
| -- requests to the same application go to the same VM | ||||
|  | ||||
| pcall(require,"luarocks.require") | ||||
|  | ||||
| local common = require "wsapi.common" | ||||
| local fastcgi = require "wsapi.fastcgi" | ||||
|  | ||||
| local ONE_HOUR = 60 * 60 | ||||
| local ONE_DAY = 24 * ONE_HOUR | ||||
|  | ||||
| local wsapi_loader = common.make_loader{ | ||||
|   isolated = true,         -- isolate each script in its own Lua state | ||||
|   filename = nil,          -- if you want to force the launch of a single script | ||||
|   launcher = "wsapi.fcgi", -- the name of this script | ||||
|   reload = false,          -- if you want to reload the application on every request | ||||
|   period = ONE_HOUR,       -- frequency of Lua state staleness checks | ||||
|   ttl = ONE_DAY,           -- time-to-live for Lua states | ||||
|   vars =                   -- order of checking for the path of the script | ||||
|    { "SCRIPT_FILENAME", | ||||
|      "PATH_TRANSLATED" }  | ||||
| } | ||||
|  | ||||
| fastcgi.run(wsapi_loader) | ||||
							
								
								
									
										3
									
								
								samples/PHP/prefix.fcgi
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								samples/PHP/prefix.fcgi
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| <?php | ||||
| echo $_SERVER[$_GET["var"]]; | ||||
| ?> | ||||
							
								
								
									
										193
									
								
								samples/Pascal/custforms.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										193
									
								
								samples/Pascal/custforms.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,193 @@ | ||||
| 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. | ||||
|  | ||||
							
								
								
									
										51
									
								
								samples/Pascal/gtkextra.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								samples/Pascal/gtkextra.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,51 @@ | ||||
| { $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. | ||||
							
								
								
									
										68
									
								
								samples/Prolog/logic-problem.pro
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								samples/Prolog/logic-problem.pro
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| /** | ||||
|  * 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). | ||||
							
								
								
									
										26
									
								
								samples/Puppet/expiringhost.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								samples/Puppet/expiringhost.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| 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 }; | ||||
|   } | ||||
| } | ||||
							
								
								
									
										26
									
								
								samples/Puppet/stages-example.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								samples/Puppet/stages-example.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| class foo { | ||||
|   notify { | ||||
|     "foo": ; | ||||
|   } | ||||
| } | ||||
|  | ||||
| class bar { | ||||
|   notify { | ||||
|     "bar": ; | ||||
|   } | ||||
| } | ||||
|  | ||||
|  | ||||
| node default { | ||||
|   stage { | ||||
|     "one": ; | ||||
|     "two": ; | ||||
|   } | ||||
|  | ||||
|   class { | ||||
|     "foo": stage => "one"; | ||||
|     "bar": stage => "two"; | ||||
|   } | ||||
|  | ||||
|   Stage["one"] -> Stage["two"] | ||||
| } | ||||
							
								
								
									
										22
									
								
								samples/Puppet/unmanaged-notify-puppet25.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								samples/Puppet/unmanaged-notify-puppet25.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| # 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; | ||||
| } | ||||
|  | ||||
							
								
								
									
										120
									
								
								samples/Python/backstage.fcgi
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										120
									
								
								samples/Python/backstage.fcgi
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| #!/usr/bin/env python | ||||
|  | ||||
| import sqlite | ||||
| import urllib2 | ||||
| import csv | ||||
| import cgi | ||||
| import simplejson | ||||
| import jsontemplate | ||||
| import time | ||||
|  | ||||
| log = open('log.txt', 'a') | ||||
|  | ||||
| def urldecode(query): | ||||
|    d = {} | ||||
|    a = query.split('&') | ||||
|    for s in a: | ||||
|       if s.find('='): | ||||
|          k,v = map(urllib2.unquote, s.split('=')) | ||||
|          try: | ||||
|             d[k].append(v) | ||||
|          except KeyError: | ||||
|             d[k] = [v] | ||||
|   | ||||
|    return d | ||||
|  | ||||
| def load_table(uri, cur): | ||||
|     table = uri.split('/')[-1] | ||||
|     table = table.split('.')[0] | ||||
|  | ||||
|     contents = urllib2.urlopen(uri) | ||||
|     fields = "" | ||||
|     for field in contents.readline().strip().split(','): | ||||
|       fields += field | ||||
|       fields += "," | ||||
|     fields = fields.rstrip(',') | ||||
|      | ||||
|     cur.execute("SELECT name FROM sqlite_master WHERE type='table' \ | ||||
|       AND name='%s';" % (table)) | ||||
|     if cur.fetchone() == None: | ||||
| #      cur.execute("DROP TABLE %s;" % (table)) | ||||
|       cur.execute("CREATE TABLE %s (%s);" % (table, fields)) | ||||
|       for line in contents: | ||||
|         values = line.strip() | ||||
|         values = "','".join([val.strip() for val in values.split(",")]) | ||||
|         values = "'" + values + "'" | ||||
|         sql = "INSERT INTO %s (%s) VALUES (%s);" % (table, fields, values) | ||||
|         cur.execute(sql) | ||||
|     return table | ||||
|  | ||||
| def build_structure(headings, allresults): | ||||
|   results = [] | ||||
|   for result in allresults: | ||||
|     results.append(dict(zip(headings, result))) | ||||
|   results = { "query" : results } | ||||
|   return results | ||||
|  | ||||
| def build_json(headings, allresults, callback): | ||||
|   results = build_structure(headings, allresults) | ||||
|   return_str = simplejson.dumps(results) | ||||
|   if callback != None: | ||||
|     return_str = callback + "(" + return_str + ");"; | ||||
|   return return_str | ||||
|  | ||||
| def load_template(templatefile): | ||||
|   return "".join(urllib2.urlopen(templatefile).readlines()) | ||||
|  | ||||
| def build_template(headings, allresults, template_str): | ||||
|   results = build_structure(headings, allresults) | ||||
|   return jsontemplate.expand(template_str, results) | ||||
|   return "" | ||||
|  | ||||
| def myapp(environ, start_response): | ||||
|     args = cgi.parse_qs(environ['QUERY_STRING']) | ||||
|      | ||||
|     query = args['query'][0] | ||||
|     uri = args['uri'][0] | ||||
|     callback = None | ||||
|     if 'callback' in args: | ||||
|       callback = args['callback'][0] | ||||
|     label = "no label" | ||||
|     if 'label' in args: | ||||
|       label = args['label'][0] | ||||
|     templatefile = None | ||||
|     if 'templatefile' in args: | ||||
|       templatefile = args['templatefile'][0] | ||||
|  | ||||
|     con = sqlite.connect('mydatabase.db') | ||||
|     cur = con.cursor() | ||||
|     table_uris = uri.split(',') | ||||
|     tables = [load_table(uri, cur) for uri in table_uris] | ||||
|     con.commit()  | ||||
|     before = time.time() | ||||
|     cur.execute(query) | ||||
|     allresults = cur.fetchall() | ||||
|     after = time.time() | ||||
|     log.write("%s: query time %f\n" % (label, after - before)) | ||||
|  | ||||
|     headings = [name[0] for name in cur.description] | ||||
|     return_str = "" | ||||
|     if templatefile != None: | ||||
|       start_response('200 OK', [('Content-Type', 'text/html')]) | ||||
|       before = time.time() | ||||
|       template_str = load_template(templatefile) | ||||
|       after = time.time() | ||||
|       log.write("%s: template loading time %f\n" % (label, after - before)) | ||||
|       before = time.time() | ||||
|       return_str = build_template(headings, allresults, template_str) | ||||
|       after = time.time() | ||||
|       log.write("%s: template rendering time %f\n" % (label, after - before)) | ||||
|     else: | ||||
|       start_response('200 OK', [('Content-Type', 'text/plain')]) | ||||
|       before = time.time() | ||||
|       return_str = build_json(headings, allresults, callback) | ||||
|       after = time.time() | ||||
|       log.write("%s: json-making time %f\n" % (label, after - before)) | ||||
|     return return_str | ||||
|  | ||||
| if __name__ == '__main__': | ||||
|     from fcgi import WSGIServer | ||||
|     WSGIServer(myapp).run() | ||||
							
								
								
									
										68
									
								
								samples/Ruby/mdata_server.fcgi
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										68
									
								
								samples/Ruby/mdata_server.fcgi
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,68 @@ | ||||
| #!/usr/bin/env ruby | ||||
| require "xmlrpc/server" | ||||
|  | ||||
| # NOTE: force the usage of the pure-ruby version of fcgi.  | ||||
| # - this is required by the workaround to get fcgi+xmlrpc working together | ||||
| FCGI_PURE_RUBY=true | ||||
| require 'fcgi' | ||||
|  | ||||
| require File.join(File.dirname(__FILE__), '../bt_cast/mdata_echo_server/bt_cast_mdata_server_t.rb') | ||||
|  | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| #			CGI handling for xmlrpc | ||||
| ################################################################################ | ||||
| ################################################################################ | ||||
| # - for basic xmlrpc via CGI example | ||||
| #   - see http://www.ntecs.de/projects/xmlrpc4r/server.html#label-19 | ||||
|  | ||||
| # create the directory needed for Neoip::Cast_mdata_server_t | ||||
| Neoip::Cast_mdata_server_t.create_dir_ifneeded(); | ||||
|  | ||||
| # init the cgi_server | ||||
| cgi_server	= XMLRPC::CGIServer.new      | ||||
| # register all the xmlrpc function | ||||
| cgi_server.add_handler("set_cast_mdata_pull") do |web2srv_str, cast_name, cast_privtext, cast_id,  | ||||
| 						port_lview, port_pview, uri_pathquery| | ||||
| 	Neoip::Cast_mdata_server_t.set_cast_mdata_pull(web2srv_str, cast_name, cast_privtext, cast_id, | ||||
| 						port_lview, port_pview, uri_pathquery, ENV['REMOTE_ADDR']); | ||||
| end  | ||||
| cgi_server.add_handler("set_cast_mdata_push") do |web2srv_str, cast_name, cast_privtext, cast_mdata| | ||||
| 	Neoip::Cast_mdata_server_t.set_cast_mdata_push(web2srv_str, cast_name, cast_privtext, cast_mdata); | ||||
| end  | ||||
| cgi_server.add_handler("get_cast_mdata") do |cast_name, cast_privhash| | ||||
| 	Neoip::Cast_mdata_server_t.get_cast_mdata(cast_name, cast_privhash); | ||||
| end  | ||||
| cgi_server.add_handler("del_cast_mdata") do |cast_name, cast_privtext| | ||||
| 	Neoip::Cast_mdata_server_t.del_cast_mdata(cast_name, cast_privtext); | ||||
| end | ||||
|  | ||||
| # handle the unknown/bad formered calls | ||||
| cgi_server.set_default_handler do |name, *args| | ||||
| 	raise XMLRPC::FaultException.new(-99, "Method #{name} missing" + | ||||
|                                    " or wrong number of parameters!") | ||||
| end | ||||
|  | ||||
| # server the cgi_server | ||||
| #cgi_server.serve | ||||
| #exit | ||||
|    | ||||
| # experiment at using fast-cgi | ||||
| FCGI.each_request do |request| | ||||
| 	# XMLRPC::CGIServer expect some value in ENV[] but FCGI doesnt provides them | ||||
| 	# - so working around by copying them by hand... dirty  | ||||
| 	ENV['REMOTE_ADDR']	= request.env['REMOTE_ADDR']; | ||||
| 	ENV['REQUEST_METHOD']	= request.env['REQUEST_METHOD']; | ||||
| 	ENV['CONTENT_TYPE']	= "text/xml"; | ||||
| 	ENV['CONTENT_LENGTH']	= "#{request.in.length}"; | ||||
|  | ||||
| 	# copy the request in/out into the stdin/stdout to act as a CGI | ||||
| 	$stdin	= request.in | ||||
| 	$stdout	= request.out | ||||
|  | ||||
| 	# process the cgi itself | ||||
| 	cgi_server.serve | ||||
|  | ||||
| 	# mark the request as finished | ||||
| 	request.finish | ||||
| end | ||||
							
								
								
									
										30
									
								
								samples/Shell/build.command
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								samples/Shell/build.command
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| set -e | ||||
|  | ||||
| echo "/************/" | ||||
| echo "/* BUILDING */" | ||||
| echo "/************/" | ||||
| echo "" | ||||
|  | ||||
| cd `dirname $0` | ||||
|  | ||||
| cd build | ||||
|  | ||||
| cmake .. | ||||
|  | ||||
| make | ||||
|  | ||||
| echo "" | ||||
| echo "/***********/" | ||||
| echo "/* TESTING */" | ||||
| echo "/***********/" | ||||
| echo "" | ||||
|  | ||||
| # ctest .. | ||||
|  | ||||
| make Experimental | ||||
|  | ||||
| echo "" | ||||
| echo "/***********/" | ||||
| echo "/* SUCCESS */" | ||||
| echo "/***********/" | ||||
| echo "" | ||||
							
								
								
									
										16
									
								
								samples/Shell/php.fcgi
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										16
									
								
								samples/Shell/php.fcgi
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| #!/bin/sh | ||||
| # you can change the PHP version here. | ||||
| version="RB_PHP_VERSION_X_Y_Z" | ||||
|  | ||||
| # php.ini file location | ||||
| PHPRC=/usr/local/php/phpfarm/inst/php-${version}/lib/php.ini | ||||
| export PHPRC | ||||
|  | ||||
| PHP_FCGI_CHILDREN=3 | ||||
| export PHP_FCGI_CHILDREN | ||||
|  | ||||
| PHP_FCGI_MAX_REQUESTS=5000 | ||||
| export PHP_FCGI_MAX_REQUESTS | ||||
|  | ||||
| # which php-cgi binary to execute | ||||
| exec /usr/local/php/inst/php-${version}/bin/php-cgi | ||||
							
								
								
									
										63
									
								
								samples/Tcl/filenames/owh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										63
									
								
								samples/Tcl/filenames/owh
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,63 @@ | ||||
| #!/usr/bin/env tclsh | ||||
| # http://wiki.tcl.tk/906 | ||||
|  | ||||
| if {[llength $argv] < 1} { | ||||
|    puts "usage: owh ?init? body ?exit? | ||||
|    performs body (in Tcl) for each line (\$0) from stdin | ||||
|    owh: Ousterhout - Welch - Hobbs, to name a few" | ||||
|    exit -1 | ||||
| } | ||||
|  | ||||
| proc awksplit {text {split default}} { | ||||
|     set no 0 | ||||
|     if {$split eq "default"} { | ||||
|         set t {} | ||||
|         foreach string [split $text] { | ||||
|             if {$string ne {}} { | ||||
|                 lappend t $string | ||||
|             } | ||||
|         } | ||||
|     } else { | ||||
|         set t [list $text $split] | ||||
|     } | ||||
|     uplevel 1 [list set NF [llength $t]] | ||||
|     foreach i $t {uplevel 1 [list set [incr no] $i]} | ||||
|     uplevel 1 {set 0 {};trace variable 0 ru 0} | ||||
| } | ||||
| proc 0 {_name index op} { | ||||
|     switch $op { | ||||
|         r { | ||||
|             uplevel { | ||||
|                 set 0 {} | ||||
|                 for {set i 1} {$i <= $NF} {incr i} {lappend 0 [set $i]} | ||||
|                 set 0 [join $0 $OFS] | ||||
|             } | ||||
|         } | ||||
|         u {rename 0 {} ;# leave no traces of the trace..} | ||||
|     } | ||||
| } | ||||
|  | ||||
| proc print s {if {[catch {puts $s}]} exit} ;# good for broken pipe | ||||
|  | ||||
| set FS default | ||||
| set OFS { } | ||||
|  | ||||
| if {[llength $argv] > 1} { | ||||
|    eval [lindex $argv 0] | ||||
|    set _body [lindex $argv 1] ;# strip outer braces | ||||
|    set _exit [lindex $argv 2] | ||||
| } else { | ||||
|    set _body [lindex $argv 0] ;# strip outer braces | ||||
|    set _exit {} | ||||
| } | ||||
|  | ||||
| set NR 1 | ||||
| while 1 { | ||||
|    gets stdin line | ||||
|    if {[eof stdin]} break | ||||
|    awksplit $line $FS | ||||
|    eval $_body | ||||
|    incr NR | ||||
| } | ||||
| set res [eval $_exit] | ||||
| if {[string length $res]} {puts $res} | ||||
							
								
								
									
										28
									
								
								samples/Tcl/filenames/starfield
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								samples/Tcl/filenames/starfield
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| #!/usr/bin/env wish | ||||
| # http://wiki.tcl.tk/14140 | ||||
|  | ||||
| proc stars'go {c factor} { | ||||
|     set w [winfo width $c] | ||||
|     set h [winfo height $c]  | ||||
|     $c scale all [expr {$w/2}] [expr {$h/2}] $factor $factor  | ||||
|     foreach item [$c find all] { | ||||
|         if {[llength [$c bbox $item]] == 0} {$c delete $item; continue} ;# (1) | ||||
|         foreach {x0 y0 x1 y1} [$c bbox $item] break | ||||
|         if {$x1<0 || $x0>$w || $y1<0 || $y0>$h} {$c delete $item} | ||||
|     } | ||||
|     time { | ||||
|         set x [expr {rand()*$w}] | ||||
|         set y [expr {rand()*$h}] | ||||
|         set col [lpick {white yellow beige bisque cyan}] | ||||
|         $c create oval $x $y [expr {$x+1}] [expr {$y+1}] -fill $col \ | ||||
|                 -outline $col | ||||
|     } 10 | ||||
|     after $::ms [info level 0] | ||||
| } | ||||
| proc lpick list {lindex $list [expr {int(rand()*[llength $list])}]} | ||||
| #-- Let's go! | ||||
| pack [canvas .c -bg black] -fill both -expand 1 | ||||
| set ms 40 | ||||
| bind . <Up> {incr ms -5} | ||||
| bind . <Down> {incr ms 5} | ||||
| stars'go .c 1.05 | ||||
							
								
								
									
										8
									
								
								samples/VimL/filenames/_vimrc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								samples/VimL/filenames/_vimrc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,8 @@ | ||||
| set nocompatible | ||||
| set ignorecase | ||||
| set incsearch | ||||
| set smartcase | ||||
| set showmatch | ||||
| set showcmd | ||||
|  | ||||
| syntax on | ||||
							
								
								
									
										18
									
								
								script/cibuild
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										18
									
								
								script/cibuild
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| #!/bin/sh | ||||
| if [ -d /usr/share/rbenv/shims ]; then | ||||
|   export PATH=/usr/share/rbenv/shims:$PATH | ||||
|   export RBENV_VERSION=2.1.2-github | ||||
|   export RUBY_VERSION=2.1.2-github | ||||
| fi | ||||
|  | ||||
| set -x | ||||
| git log -n 1 HEAD | cat | ||||
| ruby -v | ||||
| bundle -v | ||||
| set +x | ||||
|  | ||||
| mkdir -p ./vendor/gems | ||||
|  | ||||
| bundle install --local --path ./vendor/gems | ||||
| bundle exec rake samples | ||||
| bundle exec rake | ||||
| @@ -262,6 +262,10 @@ class TestBlob < Test::Unit::TestCase | ||||
|  | ||||
|  | ||||
|     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 | ||||
|  | ||||
|   def test_vendored | ||||
| @@ -279,6 +283,10 @@ class TestBlob < Test::Unit::TestCase | ||||
|     assert blob("app/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/ | ||||
|     assert blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? | ||||
|  | ||||
| @@ -437,6 +445,12 @@ class TestBlob < Test::Unit::TestCase | ||||
|     assert blob("octicons.css").vendored? | ||||
|     assert blob("public/octicons.min.css").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 | ||||
|  | ||||
|   def test_language | ||||
|   | ||||
| @@ -44,12 +44,12 @@ class TestClassifier < Test::Unit::TestCase | ||||
|   end | ||||
|  | ||||
|   def test_instance_classify_empty | ||||
|     results = Classifier.classify(Samples::DATA, "") | ||||
|     results = Classifier.classify(Samples.cache, "") | ||||
|     assert results.first[1] < 0.5, results.first.inspect | ||||
|   end | ||||
|  | ||||
|   def test_instance_classify_nil | ||||
|     assert_equal [], Classifier.classify(Samples::DATA, nil) | ||||
|     assert_equal [], Classifier.classify(Samples.cache, nil) | ||||
|   end | ||||
|  | ||||
|   def test_classify_ambiguous_languages | ||||
| @@ -58,7 +58,7 @@ class TestClassifier < Test::Unit::TestCase | ||||
|       languages = Language.find_by_filename(sample[:path]).map(&:name) | ||||
|       next unless languages.length > 1 | ||||
|  | ||||
|       results = Classifier.classify(Samples::DATA, File.read(sample[:path]), languages) | ||||
|       results = Classifier.classify(Samples.cache, File.read(sample[:path]), languages) | ||||
|       assert_equal language.name, results.first[0], "#{sample[:path]}\n#{results.inspect}" | ||||
|     end | ||||
|   end | ||||
|   | ||||
| @@ -65,6 +65,18 @@ class TestHeuristcs < Test::Unit::TestCase | ||||
|     assert_equal Language["ECL"], results.first | ||||
|   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 | ||||
|     languages = ["TypeScript", "XML"] | ||||
|     results = Heuristics.disambiguate_ts(fixture("TypeScript/classes.ts"), languages) | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| require 'linguist/repository' | ||||
|  | ||||
| require 'linguist/lazy_blob' | ||||
| require 'test/unit' | ||||
|  | ||||
| class TestRepository < Test::Unit::TestCase | ||||
| @@ -47,4 +47,58 @@ class TestRepository < Test::Unit::TestCase | ||||
|  | ||||
|     assert_equal linguist_repo.cache, new_repo.cache | ||||
|   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_commit_with_git_attributes_data | ||||
|     # Before we had any .gitattributes data | ||||
|     old_commit = '4a017d9033f91b2776eb85275463f9613cc371ef' | ||||
|     old_repo = linguist_repo(old_commit) | ||||
|  | ||||
|     # With some .gitattributes data | ||||
|     attr_commit = '7ee006cbcb2d7261f9e648510a684ee9ac64126b' | ||||
|     # It's incremental but should bust the cache | ||||
|     new_repo = Linguist::Repository.incremental(rugged_repository, attr_commit, old_commit, old_repo.cache) | ||||
|  | ||||
|     assert new_repo.breakdown_by_file["Java"].include?("lib/linguist.rb") | ||||
|   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 | ||||
|   | ||||
| @@ -8,7 +8,7 @@ class TestSamples < Test::Unit::TestCase | ||||
|   include Linguist | ||||
|  | ||||
|   def test_up_to_date | ||||
|     assert serialized = Samples::DATA | ||||
|     assert serialized = Samples.cache | ||||
|     assert latest = Samples.data | ||||
|  | ||||
|     # Just warn, it shouldn't scare people off by breaking the build. | ||||
| @@ -29,7 +29,7 @@ class TestSamples < Test::Unit::TestCase | ||||
|   end | ||||
|  | ||||
|   def test_verify | ||||
|     assert data = Samples::DATA | ||||
|     assert data = Samples.cache | ||||
|  | ||||
|     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 } | ||||
| @@ -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 | ||||
|   def test_parity | ||||
|     extensions = Samples::DATA['extnames'] | ||||
|     extensions = Samples.cache['extnames'] | ||||
|     languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) | ||||
|     languages = YAML.load_file(languages_yml) | ||||
|  | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/charlock_holmes-0.7.3.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/charlock_holmes-0.7.3.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/coderay-1.1.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/coderay-1.1.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/escape_utils-1.0.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/escape_utils-1.0.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/json-1.8.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/json-1.8.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/metaclass-0.0.4.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/metaclass-0.0.4.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/method_source-0.8.2.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/method_source-0.8.2.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/mime-types-1.25.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/mime-types-1.25.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/mocha-1.1.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/mocha-1.1.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/posix-spawn-0.3.9.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/posix-spawn-0.3.9.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/pry-0.10.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/pry-0.10.1.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/pygments.rb-0.6.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/pygments.rb-0.6.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/rake-10.3.2.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/rake-10.3.2.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/rugged-0.21.1b2.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/rugged-0.21.1b2.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/slop-3.6.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/slop-3.6.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								vendor/cache/yajl-ruby-1.1.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								vendor/cache/yajl-ruby-1.1.0.gem
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user