mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Compare commits
	
		
			87 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					6b56a243e7 | ||
| 
						 | 
					5d08605aef | ||
| 
						 | 
					bf705cbaf2 | ||
| 
						 | 
					fe827896e0 | ||
| 
						 | 
					64e7df7596 | ||
| 
						 | 
					b3ff84872b | ||
| 
						 | 
					5d176a781c | ||
| 
						 | 
					e0c97f97ba | ||
| 
						 | 
					83f358976e | ||
| 
						 | 
					9ee6153891 | ||
| 
						 | 
					825e640061 | ||
| 
						 | 
					e5ae213839 | ||
| 
						 | 
					74e034c689 | ||
| 
						 | 
					a55a60a161 | ||
| 
						 | 
					9e3cc01715 | ||
| 
						 | 
					0f204767a9 | ||
| 
						 | 
					11e3251efd | ||
| 
						 | 
					1f1416a5f7 | ||
| 
						 | 
					b3786f3825 | ||
| 
						 | 
					09c2eee91e | ||
| 
						 | 
					dc78b14902 | ||
| 
						 | 
					500ce0959a | ||
| 
						 | 
					aa0c9e3572 | ||
| 
						 | 
					e6de75d48a | ||
| 
						 | 
					a5ad0a34f8 | ||
| 
						 | 
					6e609cc4e3 | ||
| 
						 | 
					27727a927f | ||
| 
						 | 
					5ff580df0a | ||
| 
						 | 
					b34acac722 | ||
| 
						 | 
					37840856ed | ||
| 
						 | 
					acfad4371f | ||
| 
						 | 
					ae42cc0307 | ||
| 
						 | 
					d06860df37 | ||
| 
						 | 
					7d5d162f6b | ||
| 
						 | 
					d39a75b68b | ||
| 
						 | 
					d72f7311f6 | ||
| 
						 | 
					3f81b7c179 | ||
| 
						 | 
					33d1255a5a | ||
| 
						 | 
					0ebea6a0ff | ||
| 
						 | 
					c28da3a4a9 | ||
| 
						 | 
					d6d368a65d | ||
| 
						 | 
					c5be9cc3e9 | ||
| 
						 | 
					c462c2bd31 | ||
| 
						 | 
					3426165621 | ||
| 
						 | 
					98b99e38bb | ||
| 
						 | 
					d8e3bec499 | ||
| 
						 | 
					7c759d4d29 | ||
| 
						 | 
					41d438b47e | ||
| 
						 | 
					41911d6921 | ||
| 
						 | 
					dca18d77cb | ||
| 
						 | 
					040af5dad2 | ||
| 
						 | 
					c624d68628 | ||
| 
						 | 
					4867c49bd9 | ||
| 
						 | 
					a354eddf4b | ||
| 
						 | 
					9b78c533a5 | ||
| 
						 | 
					090ea576b9 | ||
| 
						 | 
					6a2d33a4b3 | ||
| 
						 | 
					b54a9c7412 | ||
| 
						 | 
					2c62da7834 | ||
| 
						 | 
					0145a0adb2 | ||
| 
						 | 
					473282d64c | ||
| 
						 | 
					c2c068e9db | ||
| 
						 | 
					13d1f662d1 | ||
| 
						 | 
					bdd57f58a0 | ||
| 
						 | 
					b1bcabd6e6 | ||
| 
						 | 
					e128c3fa82 | ||
| 
						 | 
					efac9fe750 | ||
| 
						 | 
					2b8545a8fa | ||
| 
						 | 
					b275b5d728 | ||
| 
						 | 
					1f46cfafa7 | ||
| 
						 | 
					b1dcdf3418 | ||
| 
						 | 
					4bfd65deb8 | ||
| 
						 | 
					213cf322f5 | ||
| 
						 | 
					61102812a0 | ||
| 
						 | 
					580cfce7fb | ||
| 
						 | 
					f1383d7a45 | ||
| 
						 | 
					e4ce5bfe39 | ||
| 
						 | 
					6ed64f25a2 | ||
| 
						 | 
					114a331106 | ||
| 
						 | 
					a167f852dd | ||
| 
						 | 
					b428bce126 | ||
| 
						 | 
					e62d0e19a5 | ||
| 
						 | 
					2c2b37bec3 | ||
| 
						 | 
					c777f2d388 | ||
| 
						 | 
					eca10056a8 | ||
| 
						 | 
					5a646384f6 | ||
| 
						 | 
					8917f1a91a | 
							
								
								
									
										14
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										14
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -253,9 +253,6 @@
 | 
				
			|||||||
[submodule "vendor/grammars/SublimeXtend"]
 | 
					[submodule "vendor/grammars/SublimeXtend"]
 | 
				
			||||||
	path = vendor/grammars/SublimeXtend
 | 
						path = vendor/grammars/SublimeXtend
 | 
				
			||||||
	url = https://github.com/staltz/SublimeXtend
 | 
						url = https://github.com/staltz/SublimeXtend
 | 
				
			||||||
[submodule "vendor/grammars/Stata.tmbundle"]
 | 
					 | 
				
			||||||
	path = vendor/grammars/Stata.tmbundle
 | 
					 | 
				
			||||||
	url = https://github.com/statatmbundle/Stata.tmbundle
 | 
					 | 
				
			||||||
[submodule "vendor/grammars/Vala-TMBundle"]
 | 
					[submodule "vendor/grammars/Vala-TMBundle"]
 | 
				
			||||||
	path = vendor/grammars/Vala-TMBundle
 | 
						path = vendor/grammars/Vala-TMBundle
 | 
				
			||||||
	url = https://github.com/technosophos/Vala-TMBundle
 | 
						url = https://github.com/technosophos/Vala-TMBundle
 | 
				
			||||||
@@ -649,7 +646,7 @@
 | 
				
			|||||||
	url = https://github.com/SRI-CSL/SMT.tmbundle.git
 | 
						url = https://github.com/SRI-CSL/SMT.tmbundle.git
 | 
				
			||||||
[submodule "vendor/grammars/language-crystal"]
 | 
					[submodule "vendor/grammars/language-crystal"]
 | 
				
			||||||
	path = vendor/grammars/language-crystal
 | 
						path = vendor/grammars/language-crystal
 | 
				
			||||||
	url = https://github.com/k2b6s9j/language-crystal
 | 
						url = https://github.com/atom-crystal/language-crystal
 | 
				
			||||||
[submodule "vendor/grammars/language-xbase"]
 | 
					[submodule "vendor/grammars/language-xbase"]
 | 
				
			||||||
	path = vendor/grammars/language-xbase
 | 
						path = vendor/grammars/language-xbase
 | 
				
			||||||
	url = https://github.com/hernad/atom-language-harbour
 | 
						url = https://github.com/hernad/atom-language-harbour
 | 
				
			||||||
@@ -677,3 +674,12 @@
 | 
				
			|||||||
[submodule "vendor/grammars/X10"]
 | 
					[submodule "vendor/grammars/X10"]
 | 
				
			||||||
	path = vendor/grammars/X10
 | 
						path = vendor/grammars/X10
 | 
				
			||||||
	url = git@github.com:x10-lang/x10-highlighting.git
 | 
						url = git@github.com:x10-lang/x10-highlighting.git
 | 
				
			||||||
 | 
					[submodule "vendor/grammars/language-babel"]
 | 
				
			||||||
 | 
						path = vendor/grammars/language-babel
 | 
				
			||||||
 | 
						url = https://github.com/gandm/language-babel
 | 
				
			||||||
 | 
					[submodule "vendor/grammars/Stata.tmbundle"]
 | 
				
			||||||
 | 
						path = vendor/grammars/Stata.tmbundle
 | 
				
			||||||
 | 
						url = https://github.com/pschumm/Stata.tmbundle
 | 
				
			||||||
 | 
					[submodule "vendor/grammars/FreeMarker.tmbundle"]
 | 
				
			||||||
 | 
						path = vendor/grammars/FreeMarker.tmbundle
 | 
				
			||||||
 | 
						url = https://github.com/freemarker/FreeMarker.tmbundle
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ We try only to add new extensions once they have some usage on GitHub. In most c
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
To add support for a new extension:
 | 
					To add support for a new extension:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
0. Add your extension to the language entry in [`languages.yml`][languages].
 | 
					0. Add your extension to the language entry in [`languages.yml`][languages], keeping the extensions in alphabetical order.
 | 
				
			||||||
0. Add at least one sample for your extension to the [samples directory][samples] in the correct subdirectory.
 | 
					0. Add at least one sample for your extension to the [samples directory][samples] in the correct subdirectory.
 | 
				
			||||||
0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage.
 | 
					0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,11 +13,11 @@ See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md
 | 
				
			|||||||
 | 
					
 | 
				
			||||||

 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The Language stats bar is built by aggregating the languages of each file in that repository. If it is reporting a language that you don't expect:
 | 
					The Language stats bar displays languages percentages for the files in the repository. The percentages are calculated based on the bytes of code for each language as reported by the [List Languages](https://developer.github.com/v3/repos/#list-languages) API. If the bar is reporting a language that you don't expect:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language.
 | 
					0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language.
 | 
				
			||||||
0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored  code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
 | 
					0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored  code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
 | 
				
			||||||
0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you an add, especially links to public repositories, is helpful.
 | 
					0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you can add, especially links to public repositories, is helpful.
 | 
				
			||||||
0. If there are no reported issues of this misclassification, [open an issue][new-issue] and include a link to the repository or a sample of the code that is being misclassified.
 | 
					0. If there are no reported issues of this misclassification, [open an issue][new-issue] and include a link to the repository or a sample of the code that is being misclassified.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## Overrides
 | 
					## Overrides
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										137
									
								
								bin/git-linguist
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										137
									
								
								bin/git-linguist
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,137 @@
 | 
				
			|||||||
 | 
					#!/usr/bin/env ruby
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require 'linguist'
 | 
				
			||||||
 | 
					require 'rugged'
 | 
				
			||||||
 | 
					require 'optparse'
 | 
				
			||||||
 | 
					require 'json'
 | 
				
			||||||
 | 
					require 'tmpdir'
 | 
				
			||||||
 | 
					require 'zlib'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class GitLinguist
 | 
				
			||||||
 | 
					  def initialize(path, commit_oid, incremental = true)
 | 
				
			||||||
 | 
					    @repo_path = path
 | 
				
			||||||
 | 
					    @commit_oid = commit_oid
 | 
				
			||||||
 | 
					    @incremental = incremental
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def linguist
 | 
				
			||||||
 | 
					    if @commit_oid.nil?
 | 
				
			||||||
 | 
					      raise "git-linguist must be called with a specific commit OID to perform language computation"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    repo = Linguist::Repository.new(rugged, @commit_oid)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if @incremental && stats = load_language_stats
 | 
				
			||||||
 | 
					      old_commit_oid, old_stats = stats
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # A cache with NULL oid means that we want to froze
 | 
				
			||||||
 | 
					      # these language stats in place and stop computing
 | 
				
			||||||
 | 
					      # them (for performance reasons)
 | 
				
			||||||
 | 
					      return old_stats if old_commit_oid == NULL_OID
 | 
				
			||||||
 | 
					      repo.load_existing_stats(old_commit_oid, old_stats)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    result = yield repo
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    save_language_stats(@commit_oid, repo.cache)
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def load_language_stats
 | 
				
			||||||
 | 
					    version, oid, stats = load_cache
 | 
				
			||||||
 | 
					    if version == LANGUAGE_STATS_CACHE_VERSION && oid && stats
 | 
				
			||||||
 | 
					      [oid, stats]
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def save_language_stats(oid, stats)
 | 
				
			||||||
 | 
					    cache = [LANGUAGE_STATS_CACHE_VERSION, oid, stats]
 | 
				
			||||||
 | 
					    write_cache(cache)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def clear_language_stats
 | 
				
			||||||
 | 
					    File.unlink(cache_file)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def disable_language_stats
 | 
				
			||||||
 | 
					    save_language_stats(NULL_OID, {})
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  protected
 | 
				
			||||||
 | 
					  NULL_OID = ("0" * 40).freeze
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  LANGUAGE_STATS_CACHE = 'language-stats.cache'
 | 
				
			||||||
 | 
					  LANGUAGE_STATS_CACHE_VERSION = "v3:#{Linguist::VERSION}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def rugged
 | 
				
			||||||
 | 
					    @rugged ||= Rugged::Repository.bare(@repo_path)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def cache_file
 | 
				
			||||||
 | 
					    File.join(@repo_path, LANGUAGE_STATS_CACHE)
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def write_cache(object)
 | 
				
			||||||
 | 
					    return unless File.directory? @repo_path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    begin
 | 
				
			||||||
 | 
					      tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil)
 | 
				
			||||||
 | 
					      File.open(tmp_path, "wb") do |f|
 | 
				
			||||||
 | 
					        marshal = Marshal.dump(object)
 | 
				
			||||||
 | 
					        f.write(Zlib::Deflate.deflate(marshal))
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      File.rename(tmp_path, cache_file)
 | 
				
			||||||
 | 
					    rescue => e
 | 
				
			||||||
 | 
					      (File.unlink(tmp_path) rescue nil)
 | 
				
			||||||
 | 
					      raise e
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def load_cache
 | 
				
			||||||
 | 
					    marshal = File.open(cache_file, "rb") { |f| Zlib::Inflate.inflate(f.read) }
 | 
				
			||||||
 | 
					    Marshal.load(marshal)
 | 
				
			||||||
 | 
					  rescue SystemCallError, ::Zlib::DataError, ::Zlib::BufError, TypeError
 | 
				
			||||||
 | 
					    nil
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def git_linguist(args)
 | 
				
			||||||
 | 
					  incremental = true
 | 
				
			||||||
 | 
					  commit = nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parser = OptionParser.new do |opts|
 | 
				
			||||||
 | 
					    opts.banner = "Usage: git-linguist [OPTIONS] stats|breakdown|dump-cache|clear|disable"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    opts.on("-f", "--force", "Force a full rescan") { incremental = false }
 | 
				
			||||||
 | 
					    opts.on("--commit=COMMIT", "Commit to index") { |v| commit = v}
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  parser.parse!(args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  git_dir = `git rev-parse --git-dir`.strip
 | 
				
			||||||
 | 
					  raise "git-linguist must be ran in a Git repository" unless $?.success?
 | 
				
			||||||
 | 
					  wrapper = GitLinguist.new(git_dir, commit, incremental)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  case args.pop
 | 
				
			||||||
 | 
					  when "stats"
 | 
				
			||||||
 | 
					    wrapper.linguist do |linguist|
 | 
				
			||||||
 | 
					      puts JSON.dump(linguist.languages)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  when "breakdown"
 | 
				
			||||||
 | 
					    wrapper.linguist do |linguist|
 | 
				
			||||||
 | 
					      puts JSON.dump(linguist.breakdown_by_file)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  when "dump-cache"
 | 
				
			||||||
 | 
					    puts JSON.dump(wrapper.load_language_stats)
 | 
				
			||||||
 | 
					  when "clear"
 | 
				
			||||||
 | 
					    wrapper.clear_language_stats
 | 
				
			||||||
 | 
					  when "disable"
 | 
				
			||||||
 | 
					    wrapper.disable_language_stats
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
 | 
					    $stderr.print(parser.help)
 | 
				
			||||||
 | 
					    exit 1
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					git_linguist(ARGV)
 | 
				
			||||||
@@ -10,8 +10,8 @@ Gem::Specification.new do |s|
 | 
				
			|||||||
  s.homepage = "https://github.com/github/linguist"
 | 
					  s.homepage = "https://github.com/github/linguist"
 | 
				
			||||||
  s.license  = "MIT"
 | 
					  s.license  = "MIT"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb']
 | 
					  s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + ['LICENSE']
 | 
				
			||||||
  s.executables << 'linguist'
 | 
					  s.executables = ['linguist', 'git-linguist']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  s.add_dependency 'charlock_holmes', '~> 0.7.3'
 | 
					  s.add_dependency 'charlock_holmes', '~> 0.7.3'
 | 
				
			||||||
  s.add_dependency 'escape_utils',    '~> 1.1.0'
 | 
					  s.add_dependency 'escape_utils',    '~> 1.1.0'
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,8 @@ vendor/grammars/Docker.tmbundle:
 | 
				
			|||||||
- source.dockerfile
 | 
					- source.dockerfile
 | 
				
			||||||
vendor/grammars/Elm.tmLanguage:
 | 
					vendor/grammars/Elm.tmLanguage:
 | 
				
			||||||
- source.elm
 | 
					- source.elm
 | 
				
			||||||
 | 
					vendor/grammars/FreeMarker.tmbundle:
 | 
				
			||||||
 | 
					- text.html.ftl
 | 
				
			||||||
vendor/grammars/G-Code/:
 | 
					vendor/grammars/G-Code/:
 | 
				
			||||||
- source.LS
 | 
					- source.LS
 | 
				
			||||||
- source.MCPOST
 | 
					- source.MCPOST
 | 
				
			||||||
@@ -92,7 +94,7 @@ vendor/grammars/Scalate.tmbundle:
 | 
				
			|||||||
- text.html.ssp
 | 
					- text.html.ssp
 | 
				
			||||||
vendor/grammars/Slash.tmbundle:
 | 
					vendor/grammars/Slash.tmbundle:
 | 
				
			||||||
- text.html.slash
 | 
					- text.html.slash
 | 
				
			||||||
vendor/grammars/Stata.tmbundle:
 | 
					vendor/grammars/Stata.tmbundle/:
 | 
				
			||||||
- source.mata
 | 
					- source.mata
 | 
				
			||||||
- source.stata
 | 
					- source.stata
 | 
				
			||||||
vendor/grammars/Stylus/:
 | 
					vendor/grammars/Stylus/:
 | 
				
			||||||
@@ -178,6 +180,8 @@ vendor/grammars/assembly.tmbundle:
 | 
				
			|||||||
- source.x86asm
 | 
					- source.x86asm
 | 
				
			||||||
vendor/grammars/atom-fsharp/:
 | 
					vendor/grammars/atom-fsharp/:
 | 
				
			||||||
- source.fsharp
 | 
					- source.fsharp
 | 
				
			||||||
 | 
					- source.fsharp.fsi
 | 
				
			||||||
 | 
					- source.fsharp.fsx
 | 
				
			||||||
vendor/grammars/atom-language-purescript/:
 | 
					vendor/grammars/atom-language-purescript/:
 | 
				
			||||||
- source.purescript
 | 
					- source.purescript
 | 
				
			||||||
vendor/grammars/atom-salt:
 | 
					vendor/grammars/atom-salt:
 | 
				
			||||||
@@ -314,6 +318,9 @@ vendor/grammars/json.tmbundle:
 | 
				
			|||||||
- source.json
 | 
					- source.json
 | 
				
			||||||
vendor/grammars/kotlin-sublime-package:
 | 
					vendor/grammars/kotlin-sublime-package:
 | 
				
			||||||
- source.Kotlin
 | 
					- source.Kotlin
 | 
				
			||||||
 | 
					vendor/grammars/language-babel/:
 | 
				
			||||||
 | 
					- source.js.jsx
 | 
				
			||||||
 | 
					- source.regexp.babel
 | 
				
			||||||
vendor/grammars/language-clojure:
 | 
					vendor/grammars/language-clojure:
 | 
				
			||||||
- source.clojure
 | 
					- source.clojure
 | 
				
			||||||
vendor/grammars/language-coffee-script:
 | 
					vendor/grammars/language-coffee-script:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										73
									
								
								lib/linguist/blob.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								lib/linguist/blob.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,73 @@
 | 
				
			|||||||
 | 
					require 'linguist/blob_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module Linguist
 | 
				
			||||||
 | 
					  # A Blob is a wrapper around the content of a file to make it quack
 | 
				
			||||||
 | 
					  # like a Grit::Blob. It provides the basic interface: `name`,
 | 
				
			||||||
 | 
					  # `data`, `path` and `size`.
 | 
				
			||||||
 | 
					  class Blob
 | 
				
			||||||
 | 
					    include BlobHelper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Initialize a new Blob.
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # path    - A path String (does not necessarily exists on the file system).
 | 
				
			||||||
 | 
					    # content - Content of the file.
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns a FileBlob.
 | 
				
			||||||
 | 
					    def initialize(path, content)
 | 
				
			||||||
 | 
					      @path = path
 | 
				
			||||||
 | 
					      @content = content
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Filename
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Examples
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    #   Blob.new("/path/to/linguist/lib/linguist.rb", "").path
 | 
				
			||||||
 | 
					    #   # =>  "/path/to/linguist/lib/linguist.rb"
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns a String
 | 
				
			||||||
 | 
					    attr_reader :path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: File name
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns a String
 | 
				
			||||||
 | 
					    def name
 | 
				
			||||||
 | 
					      File.basename(@path)
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: File contents.
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns a String.
 | 
				
			||||||
 | 
					    def data
 | 
				
			||||||
 | 
					      @content
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Get byte size
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns an Integer.
 | 
				
			||||||
 | 
					    def size
 | 
				
			||||||
 | 
					      @content.bytesize
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Get file extension.
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns a String.
 | 
				
			||||||
 | 
					    def extension
 | 
				
			||||||
 | 
					      extensions.last || ""
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Public: Return an array of the file extensions
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    #     >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions
 | 
				
			||||||
 | 
					    #     => [".html.erb", ".erb"]
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Returns an Array
 | 
				
			||||||
 | 
					    def extensions
 | 
				
			||||||
 | 
					      basename, *segments = name.downcase.split(".")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      segments.map.with_index do |segment, index|
 | 
				
			||||||
 | 
					        "." + segments[index..-1].join(".")
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
@@ -1,10 +1,11 @@
 | 
				
			|||||||
require 'linguist/blob_helper'
 | 
					require 'linguist/blob_helper'
 | 
				
			||||||
 | 
					require 'linguist/blob'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module Linguist
 | 
					module Linguist
 | 
				
			||||||
  # A FileBlob is a wrapper around a File object to make it quack
 | 
					  # A FileBlob is a wrapper around a File object to make it quack
 | 
				
			||||||
  # like a Grit::Blob. It provides the basic interface: `name`,
 | 
					  # like a Grit::Blob. It provides the basic interface: `name`,
 | 
				
			||||||
  # `data`, `path` and `size`.
 | 
					  # `data`, `path` and `size`.
 | 
				
			||||||
  class FileBlob
 | 
					  class FileBlob < Blob
 | 
				
			||||||
    include BlobHelper
 | 
					    include BlobHelper
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Public: Initialize a new FileBlob from a path
 | 
					    # Public: Initialize a new FileBlob from a path
 | 
				
			||||||
@@ -18,20 +19,6 @@ module Linguist
 | 
				
			|||||||
      @path = base_path ? path.sub("#{base_path}/", '') : path
 | 
					      @path = base_path ? path.sub("#{base_path}/", '') : path
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Public: Filename
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # Examples
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    #   FileBlob.new("/path/to/linguist/lib/linguist.rb").path
 | 
					 | 
				
			||||||
    #   # =>  "/path/to/linguist/lib/linguist.rb"
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    #   FileBlob.new("/path/to/linguist/lib/linguist.rb",
 | 
					 | 
				
			||||||
    #                "/path/to/linguist").path
 | 
					 | 
				
			||||||
    #   # =>  "lib/linguist.rb"
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # Returns a String
 | 
					 | 
				
			||||||
    attr_reader :path
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Public: Read file permissions
 | 
					    # Public: Read file permissions
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns a String like '100644'
 | 
					    # Returns a String like '100644'
 | 
				
			||||||
@@ -39,13 +26,6 @@ module Linguist
 | 
				
			|||||||
      File.stat(@fullpath).mode.to_s(8)
 | 
					      File.stat(@fullpath).mode.to_s(8)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Public: File name
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # Returns a String
 | 
					 | 
				
			||||||
    def name
 | 
					 | 
				
			||||||
      File.basename(@fullpath)
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Public: Read file contents.
 | 
					    # Public: Read file contents.
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns a String.
 | 
					    # Returns a String.
 | 
				
			||||||
@@ -59,26 +39,5 @@ module Linguist
 | 
				
			|||||||
    def size
 | 
					    def size
 | 
				
			||||||
      File.size(@fullpath)
 | 
					      File.size(@fullpath)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Public: Get file extension.
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # Returns a String.
 | 
					 | 
				
			||||||
    def extension
 | 
					 | 
				
			||||||
      extensions.last || ""
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Public: Return an array of the file extensions
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    #     >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions
 | 
					 | 
				
			||||||
    #     => [".html.erb", ".erb"]
 | 
					 | 
				
			||||||
    #
 | 
					 | 
				
			||||||
    # Returns an Array
 | 
					 | 
				
			||||||
    def extensions
 | 
					 | 
				
			||||||
      basename, *segments = name.downcase.split(".")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      segments.map.with_index do |segment, index|
 | 
					 | 
				
			||||||
        "." + segments[index..-1].join(".")
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,7 +71,8 @@ module Linguist
 | 
				
			|||||||
      generated_jni_header? ||
 | 
					      generated_jni_header? ||
 | 
				
			||||||
      vcr_cassette? ||
 | 
					      vcr_cassette? ||
 | 
				
			||||||
      generated_module? ||
 | 
					      generated_module? ||
 | 
				
			||||||
      generated_unity3d_meta?
 | 
					      generated_unity3d_meta? ||
 | 
				
			||||||
 | 
					      generated_racc?
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Internal: Is the blob an Xcode file?
 | 
					    # Internal: Is the blob an Xcode file?
 | 
				
			||||||
@@ -241,22 +242,26 @@ module Linguist
 | 
				
			|||||||
      return lines[0].include?("Code generated by")
 | 
					      return lines[0].include?("Code generated by")
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    PROTOBUF_EXTENSIONS = ['.py', '.java', '.h', '.cc', '.cpp']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Internal: Is the blob a C++, Java or Python source file generated by the
 | 
					    # Internal: Is the blob a C++, Java or Python source file generated by the
 | 
				
			||||||
    # Protocol Buffer compiler?
 | 
					    # Protocol Buffer compiler?
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns true of false.
 | 
					    # Returns true of false.
 | 
				
			||||||
    def generated_protocol_buffer?
 | 
					    def generated_protocol_buffer?
 | 
				
			||||||
      return false unless ['.py', '.java', '.h', '.cc', '.cpp'].include?(extname)
 | 
					      return false unless PROTOBUF_EXTENSIONS.include?(extname)
 | 
				
			||||||
      return false unless lines.count > 1
 | 
					      return false unless lines.count > 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      return lines[0].include?("Generated by the protocol buffer compiler.  DO NOT EDIT!")
 | 
					      return lines[0].include?("Generated by the protocol buffer compiler.  DO NOT EDIT!")
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    APACHE_THRIFT_EXTENSIONS = ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Internal: Is the blob generated by Apache Thrift compiler?
 | 
					    # Internal: Is the blob generated by Apache Thrift compiler?
 | 
				
			||||||
    #
 | 
					    #
 | 
				
			||||||
    # Returns true or false
 | 
					    # Returns true or false
 | 
				
			||||||
    def generated_apache_thrift?
 | 
					    def generated_apache_thrift?
 | 
				
			||||||
      return false unless ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'].include?(extname)
 | 
					      return false unless APACHE_THRIFT_EXTENSIONS.include?(extname)
 | 
				
			||||||
      return false unless lines.count > 1
 | 
					      return false unless lines.count > 1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler")
 | 
					      return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler")
 | 
				
			||||||
@@ -355,5 +360,18 @@ module Linguist
 | 
				
			|||||||
      return false unless lines.count > 1
 | 
					      return false unless lines.count > 1
 | 
				
			||||||
      return lines[0].include?("fileFormatVersion: ")
 | 
					      return lines[0].include?("fileFormatVersion: ")
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Internal: Is this a Racc-generated file?
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # A Racc-generated file contains:
 | 
				
			||||||
 | 
					    # # This file is automatically generated by Racc x.y.z
 | 
				
			||||||
 | 
					    # on the third line.
 | 
				
			||||||
 | 
					    #
 | 
				
			||||||
 | 
					    # Return true or false
 | 
				
			||||||
 | 
					    def generated_racc?
 | 
				
			||||||
 | 
					      return false unless extname == '.rb'
 | 
				
			||||||
 | 
					      return false unless lines.count > 2
 | 
				
			||||||
 | 
					      return lines[2].start_with?("# This file is automatically generated by Racc")
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,8 @@ module Linguist
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    # Internal: Check if this heuristic matches the candidate languages.
 | 
					    # Internal: Check if this heuristic matches the candidate languages.
 | 
				
			||||||
    def matches?(filename)
 | 
					    def matches?(filename)
 | 
				
			||||||
      @extensions.any? { |ext| filename.downcase.end_with?(ext) }
 | 
					      filename = filename.downcase
 | 
				
			||||||
 | 
					      @extensions.any? { |ext| filename.end_with?(ext) }
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Internal: Perform the heuristic
 | 
					    # Internal: Perform the heuristic
 | 
				
			||||||
@@ -65,7 +66,7 @@ module Linguist
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Common heuristics
 | 
					    # Common heuristics
 | 
				
			||||||
    ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronized|selector|implementation)\b/
 | 
					    ObjectiveCRegex = /^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    disambiguate ".asc" do |data|
 | 
					    disambiguate ".asc" do |data|
 | 
				
			||||||
      if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data)
 | 
					      if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,7 +8,8 @@
 | 
				
			|||||||
#                     Use "text" if a mode does not exist.
 | 
					#                     Use "text" if a mode does not exist.
 | 
				
			||||||
# wrap              - Boolean wrap to enable line wrapping (default: false)
 | 
					# wrap              - Boolean wrap to enable line wrapping (default: false)
 | 
				
			||||||
# extensions        - An Array of associated extensions (the first one is
 | 
					# extensions        - An Array of associated extensions (the first one is
 | 
				
			||||||
#                     considered the primary extension)
 | 
					#                     considered the primary extension, the others should be
 | 
				
			||||||
 | 
					#                     listed alphabetically)
 | 
				
			||||||
# interpreters      - An Array of associated interpreters
 | 
					# interpreters      - An Array of associated interpreters
 | 
				
			||||||
# searchable        - Boolean flag to enable searching (defaults to true)
 | 
					# searchable        - Boolean flag to enable searching (defaults to true)
 | 
				
			||||||
# search_term       - Deprecated: Some languages maybe indexed under a
 | 
					# search_term       - Deprecated: Some languages maybe indexed under a
 | 
				
			||||||
@@ -1028,6 +1029,16 @@ Forth:
 | 
				
			|||||||
  - .fs
 | 
					  - .fs
 | 
				
			||||||
  ace_mode: forth
 | 
					  ace_mode: forth
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					FreeMarker:
 | 
				
			||||||
 | 
					  type: programming
 | 
				
			||||||
 | 
					  color: "#0050b2"
 | 
				
			||||||
 | 
					  aliases:
 | 
				
			||||||
 | 
					  - ftl
 | 
				
			||||||
 | 
					  extensions:
 | 
				
			||||||
 | 
					  - .ftl
 | 
				
			||||||
 | 
					  tm_scope: text.html.ftl
 | 
				
			||||||
 | 
					  ace_mode: ftl
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Frege:
 | 
					Frege:
 | 
				
			||||||
  type: programming
 | 
					  type: programming
 | 
				
			||||||
  color: "#00cafe"
 | 
					  color: "#00cafe"
 | 
				
			||||||
@@ -1322,6 +1333,16 @@ HTML+Django:
 | 
				
			|||||||
  - htmldjango
 | 
					  - htmldjango
 | 
				
			||||||
  ace_mode: django
 | 
					  ace_mode: django
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HTML+EEX:
 | 
				
			||||||
 | 
					  type: markup
 | 
				
			||||||
 | 
					  tm_scope: text.html.elixir
 | 
				
			||||||
 | 
					  group: HTML
 | 
				
			||||||
 | 
					  aliases:
 | 
				
			||||||
 | 
					  - eex
 | 
				
			||||||
 | 
					  extensions:
 | 
				
			||||||
 | 
					  - .eex
 | 
				
			||||||
 | 
					  ace_mode: text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HTML+ERB:
 | 
					HTML+ERB:
 | 
				
			||||||
  type: markup
 | 
					  type: markup
 | 
				
			||||||
  tm_scope: text.html.erb
 | 
					  tm_scope: text.html.erb
 | 
				
			||||||
@@ -1331,7 +1352,7 @@ HTML+ERB:
 | 
				
			|||||||
  extensions:
 | 
					  extensions:
 | 
				
			||||||
  - .erb
 | 
					  - .erb
 | 
				
			||||||
  - .erb.deface
 | 
					  - .erb.deface
 | 
				
			||||||
  ace_mode: html_ruby
 | 
					  ace_mode: text
 | 
				
			||||||
 | 
					
 | 
				
			||||||
HTML+PHP:
 | 
					HTML+PHP:
 | 
				
			||||||
  type: markup
 | 
					  type: markup
 | 
				
			||||||
@@ -1367,6 +1388,7 @@ Haml:
 | 
				
			|||||||
Handlebars:
 | 
					Handlebars:
 | 
				
			||||||
  type: markup
 | 
					  type: markup
 | 
				
			||||||
  color: "#01a9d6"
 | 
					  color: "#01a9d6"
 | 
				
			||||||
 | 
					  group: HTML
 | 
				
			||||||
  aliases:
 | 
					  aliases:
 | 
				
			||||||
  - hbs
 | 
					  - hbs
 | 
				
			||||||
  - htmlbars
 | 
					  - htmlbars
 | 
				
			||||||
@@ -1545,7 +1567,9 @@ JSON:
 | 
				
			|||||||
  searchable: false
 | 
					  searchable: false
 | 
				
			||||||
  extensions:
 | 
					  extensions:
 | 
				
			||||||
  - .json
 | 
					  - .json
 | 
				
			||||||
 | 
					  - .geojson
 | 
				
			||||||
  - .lock
 | 
					  - .lock
 | 
				
			||||||
 | 
					  - .topojson
 | 
				
			||||||
  filenames:
 | 
					  filenames:
 | 
				
			||||||
  - .jshintrc
 | 
					  - .jshintrc
 | 
				
			||||||
  - composer.lock
 | 
					  - composer.lock
 | 
				
			||||||
@@ -1573,6 +1597,14 @@ JSONiq:
 | 
				
			|||||||
  - .jq
 | 
					  - .jq
 | 
				
			||||||
  tm_scope: source.jq
 | 
					  tm_scope: source.jq
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					JSX:
 | 
				
			||||||
 | 
					  type: programming
 | 
				
			||||||
 | 
					  group: JavaScript
 | 
				
			||||||
 | 
					  extensions:
 | 
				
			||||||
 | 
					  - .jsx
 | 
				
			||||||
 | 
					  tm_scope: source.js.jsx
 | 
				
			||||||
 | 
					  ace_mode: javascript
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Jade:
 | 
					Jade:
 | 
				
			||||||
  group: HTML
 | 
					  group: HTML
 | 
				
			||||||
  type: markup
 | 
					  type: markup
 | 
				
			||||||
@@ -1626,7 +1658,6 @@ JavaScript:
 | 
				
			|||||||
  - .jsfl
 | 
					  - .jsfl
 | 
				
			||||||
  - .jsm
 | 
					  - .jsm
 | 
				
			||||||
  - .jss
 | 
					  - .jss
 | 
				
			||||||
  - .jsx
 | 
					 | 
				
			||||||
  - .njs
 | 
					  - .njs
 | 
				
			||||||
  - .pac
 | 
					  - .pac
 | 
				
			||||||
  - .sjs
 | 
					  - .sjs
 | 
				
			||||||
@@ -1670,6 +1701,7 @@ KiCad:
 | 
				
			|||||||
  type: programming
 | 
					  type: programming
 | 
				
			||||||
  extensions:
 | 
					  extensions:
 | 
				
			||||||
  - .sch
 | 
					  - .sch
 | 
				
			||||||
 | 
					  - .brd
 | 
				
			||||||
  - .kicad_pcb
 | 
					  - .kicad_pcb
 | 
				
			||||||
  tm_scope: none
 | 
					  tm_scope: none
 | 
				
			||||||
  ace_mode: text
 | 
					  ace_mode: text
 | 
				
			||||||
@@ -2052,6 +2084,14 @@ Mercury:
 | 
				
			|||||||
  tm_scope: source.mercury
 | 
					  tm_scope: source.mercury
 | 
				
			||||||
  ace_mode: prolog
 | 
					  ace_mode: prolog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Metal:
 | 
				
			||||||
 | 
					  type: programming
 | 
				
			||||||
 | 
					  color: "#8f14e9"
 | 
				
			||||||
 | 
					  extensions:
 | 
				
			||||||
 | 
					  - .metal
 | 
				
			||||||
 | 
					  tm_scope: source.c++
 | 
				
			||||||
 | 
					  ace_mode: c_cpp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MiniD: # Legacy
 | 
					MiniD: # Legacy
 | 
				
			||||||
  type: programming
 | 
					  type: programming
 | 
				
			||||||
  searchable: false
 | 
					  searchable: false
 | 
				
			||||||
@@ -2127,7 +2167,7 @@ Myghty:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
NCL:
 | 
					NCL:
 | 
				
			||||||
  type: programming
 | 
					  type: programming
 | 
				
			||||||
  color: #28431f
 | 
					  color: "#28431f"
 | 
				
			||||||
  extensions:
 | 
					  extensions:
 | 
				
			||||||
  - .ncl
 | 
					  - .ncl
 | 
				
			||||||
  tm_scope: source.ncl
 | 
					  tm_scope: source.ncl
 | 
				
			||||||
@@ -2430,6 +2470,7 @@ PHP:
 | 
				
			|||||||
  - .php3
 | 
					  - .php3
 | 
				
			||||||
  - .php4
 | 
					  - .php4
 | 
				
			||||||
  - .php5
 | 
					  - .php5
 | 
				
			||||||
 | 
					  - .phps
 | 
				
			||||||
  - .phpt
 | 
					  - .phpt
 | 
				
			||||||
  filenames:
 | 
					  filenames:
 | 
				
			||||||
  - Phakefile
 | 
					  - Phakefile
 | 
				
			||||||
@@ -2446,6 +2487,7 @@ PLSQL:
 | 
				
			|||||||
  color: "#dad8d8"
 | 
					  color: "#dad8d8"
 | 
				
			||||||
  extensions:
 | 
					  extensions:
 | 
				
			||||||
  - .pls
 | 
					  - .pls
 | 
				
			||||||
 | 
					  - .pck
 | 
				
			||||||
  - .pkb
 | 
					  - .pkb
 | 
				
			||||||
  - .pks
 | 
					  - .pks
 | 
				
			||||||
  - .plb
 | 
					  - .plb
 | 
				
			||||||
@@ -3431,6 +3473,7 @@ TypeScript:
 | 
				
			|||||||
  - ts
 | 
					  - ts
 | 
				
			||||||
  extensions:
 | 
					  extensions:
 | 
				
			||||||
  - .ts
 | 
					  - .ts
 | 
				
			||||||
 | 
					  - .tsx
 | 
				
			||||||
  tm_scope: source.ts
 | 
					  tm_scope: source.ts
 | 
				
			||||||
  ace_mode: typescript
 | 
					  ace_mode: typescript
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3647,6 +3690,7 @@ XML:
 | 
				
			|||||||
  - .tmSnippet
 | 
					  - .tmSnippet
 | 
				
			||||||
  - .tmTheme
 | 
					  - .tmTheme
 | 
				
			||||||
  - .ts
 | 
					  - .ts
 | 
				
			||||||
 | 
					  - .tsx
 | 
				
			||||||
  - .ui
 | 
					  - .ui
 | 
				
			||||||
  - .urdf
 | 
					  - .urdf
 | 
				
			||||||
  - .vbproj
 | 
					  - .vbproj
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,11 @@ require 'rugged'
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
module Linguist
 | 
					module Linguist
 | 
				
			||||||
  class LazyBlob
 | 
					  class LazyBlob
 | 
				
			||||||
    GIT_ATTR = ['linguist-documentation', 'linguist-language', 'linguist-vendored']
 | 
					    GIT_ATTR = ['linguist-documentation',
 | 
				
			||||||
 | 
					                'linguist-language',
 | 
				
			||||||
 | 
					                'linguist-vendored',
 | 
				
			||||||
 | 
					                'linguist-generated']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true }
 | 
					    GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true }
 | 
				
			||||||
    GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS)
 | 
					    GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,14 +35,6 @@ module Linguist
 | 
				
			|||||||
        name, GIT_ATTR, GIT_ATTR_FLAGS)
 | 
					        name, GIT_ATTR, GIT_ATTR_FLAGS)
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def vendored?
 | 
					 | 
				
			||||||
      if attr = git_attributes['linguist-vendored']
 | 
					 | 
				
			||||||
        return boolean_attribute(attr)
 | 
					 | 
				
			||||||
      else
 | 
					 | 
				
			||||||
        return super
 | 
					 | 
				
			||||||
      end
 | 
					 | 
				
			||||||
    end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def documentation?
 | 
					    def documentation?
 | 
				
			||||||
      if attr = git_attributes['linguist-documentation']
 | 
					      if attr = git_attributes['linguist-documentation']
 | 
				
			||||||
        boolean_attribute(attr)
 | 
					        boolean_attribute(attr)
 | 
				
			||||||
@@ -47,6 +43,22 @@ module Linguist
 | 
				
			|||||||
      end
 | 
					      end
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def generated?
 | 
				
			||||||
 | 
					      if attr = git_attributes['linguist-generated']
 | 
				
			||||||
 | 
					        boolean_attribute(attr)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        super
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def vendored?
 | 
				
			||||||
 | 
					      if attr = git_attributes['linguist-vendored']
 | 
				
			||||||
 | 
					        return boolean_attribute(attr)
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        super
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def language
 | 
					    def language
 | 
				
			||||||
      return @language if defined?(@language)
 | 
					      return @language if defined?(@language)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,6 +79,10 @@ module Linguist
 | 
				
			|||||||
      @size
 | 
					      @size
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def cleanup!
 | 
				
			||||||
 | 
					      @data.clear if @data
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected
 | 
					    protected
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Returns true if the attribute is present and not the string "false".
 | 
					    # Returns true if the attribute is present and not the string "false".
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -126,12 +126,13 @@ module Linguist
 | 
				
			|||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected
 | 
					    protected
 | 
				
			||||||
 | 
					    MAX_TREE_SIZE = 100_000
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def compute_stats(old_commit_oid, cache = nil)
 | 
					    def compute_stats(old_commit_oid, cache = nil)
 | 
				
			||||||
 | 
					      return {} if current_tree.count_recursive(MAX_TREE_SIZE) >= MAX_TREE_SIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
 | 
					      old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
 | 
				
			||||||
 | 
					 | 
				
			||||||
      read_index
 | 
					      read_index
 | 
				
			||||||
 | 
					 | 
				
			||||||
      diff = Rugged::Tree.diff(repository, old_tree, current_tree)
 | 
					      diff = Rugged::Tree.diff(repository, old_tree, current_tree)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      # Clear file map and fetch full diff if any .gitattributes files are changed
 | 
					      # Clear file map and fetch full diff if any .gitattributes files are changed
 | 
				
			||||||
@@ -157,8 +158,11 @@ module Linguist
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
          blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8))
 | 
					          blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          next unless blob.include_in_language_stats?
 | 
					          if blob.include_in_language_stats?
 | 
				
			||||||
          file_map[new] = [blob.language.group.name, blob.size]
 | 
					            file_map[new] = [blob.language.group.name, blob.size]
 | 
				
			||||||
 | 
					          end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          blob.cleanup!
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -266,6 +266,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# Test fixtures
 | 
					# Test fixtures
 | 
				
			||||||
- ^[Tt]ests?/fixtures/
 | 
					- ^[Tt]ests?/fixtures/
 | 
				
			||||||
 | 
					- ^[Ss]pecs?/fixtures/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# PhoneGap/Cordova
 | 
					# PhoneGap/Cordova
 | 
				
			||||||
- (^|/)cordova([^.]*)\.js$
 | 
					- (^|/)cordova([^.]*)\.js$
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,3 @@
 | 
				
			|||||||
module Linguist
 | 
					module Linguist
 | 
				
			||||||
  VERSION = "4.5.15"
 | 
					  VERSION = "4.7.0"
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										31
									
								
								samples/FreeMarker/example.ftl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								samples/FreeMarker/example.ftl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					<#import "layout.ftl" as layout>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<#assign results = [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "title": "Example Result",
 | 
				
			||||||
 | 
					            "description": "Lorem ipsum dolor sit amet, pede id pellentesque, sollicitudin turpis sed in sed sed, libero dictum."
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    ] />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<@layout.page title="FreeMarker Example">
 | 
				
			||||||
 | 
					    <#if results?size == 0>
 | 
				
			||||||
 | 
					        There were no results.
 | 
				
			||||||
 | 
					    <#else>
 | 
				
			||||||
 | 
					        <ul>
 | 
				
			||||||
 | 
					            <#list results as result>
 | 
				
			||||||
 | 
					                <li>
 | 
				
			||||||
 | 
					                    <strong>${result.title}</strong>
 | 
				
			||||||
 | 
					                    <p>${result.description}</p>
 | 
				
			||||||
 | 
					                </li>
 | 
				
			||||||
 | 
					            </#list>
 | 
				
			||||||
 | 
					        </ul>
 | 
				
			||||||
 | 
					    </#if>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <#-- This is a FreeMarker comment -->
 | 
				
			||||||
 | 
					    <@currentTime />
 | 
				
			||||||
 | 
					</@layout.page>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<#macro currentTime>
 | 
				
			||||||
 | 
					    ${.now?string.full}
 | 
				
			||||||
 | 
					</#macro>
 | 
				
			||||||
							
								
								
									
										32
									
								
								samples/FreeMarker/layout.ftl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								samples/FreeMarker/layout.ftl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
				
			|||||||
 | 
					<#ftl strip_text=true />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<#macro page title>
 | 
				
			||||||
 | 
					    <!doctype html>
 | 
				
			||||||
 | 
					    <html lang="${.lang}">
 | 
				
			||||||
 | 
					        <head>
 | 
				
			||||||
 | 
					            <title>${title}</title>
 | 
				
			||||||
 | 
					            <@metaTags />
 | 
				
			||||||
 | 
					        </head>
 | 
				
			||||||
 | 
					        <body>
 | 
				
			||||||
 | 
					            <#nested />
 | 
				
			||||||
 | 
					            <@footer />
 | 
				
			||||||
 | 
					        </body>
 | 
				
			||||||
 | 
					    </html>
 | 
				
			||||||
 | 
					</#macro>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<#---
 | 
				
			||||||
 | 
					  Default meta tags
 | 
				
			||||||
 | 
					-->
 | 
				
			||||||
 | 
					<#macro metaTags>
 | 
				
			||||||
 | 
					    <#compress>
 | 
				
			||||||
 | 
					        <meta charset="utf-8">
 | 
				
			||||||
 | 
					        <meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
				
			||||||
 | 
					        <meta name="viewport" content="width=device-width,initial-scale=1">
 | 
				
			||||||
 | 
					        <meta name="format-detection" content="telephone=no">
 | 
				
			||||||
 | 
					    </#compress>
 | 
				
			||||||
 | 
					</#macro>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<#macro footer>
 | 
				
			||||||
 | 
					    <p>This page is using FreeMarker v${.version}</p>
 | 
				
			||||||
 | 
					</#macro>
 | 
				
			||||||
							
								
								
									
										26
									
								
								samples/HTML+EEX/index.html.eex
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								samples/HTML+EEX/index.html.eex
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
				
			|||||||
 | 
					<h1>Listing Books</h1>
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					<table>
 | 
				
			||||||
 | 
					  <tr>
 | 
				
			||||||
 | 
					    <th>Title</th>
 | 
				
			||||||
 | 
					    <th>Summary</th>
 | 
				
			||||||
 | 
					    <th></th>
 | 
				
			||||||
 | 
					    <th></th>
 | 
				
			||||||
 | 
					    <th></th>
 | 
				
			||||||
 | 
					  </tr>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<%= for book <- @books do %>
 | 
				
			||||||
 | 
					  <tr>
 | 
				
			||||||
 | 
					    <%# comment %>
 | 
				
			||||||
 | 
					    <td><%= book.title %></td>
 | 
				
			||||||
 | 
					    <td><%= book.content %></td>
 | 
				
			||||||
 | 
					    <td><%= link "Show", to: book_path(@conn, :show, book) %></td>
 | 
				
			||||||
 | 
					    <td><%= link "Edit", to: book_path(@conn, :edit, book) %></td>
 | 
				
			||||||
 | 
					    <td><%= link "Delete", to: book_path(@conn, :delete, book), method: :delete, data: [confirm: "Are you sure?"] %></td>
 | 
				
			||||||
 | 
					  </tr>
 | 
				
			||||||
 | 
					<% end %>
 | 
				
			||||||
 | 
					</table>
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					<br />
 | 
				
			||||||
 | 
					 
 | 
				
			||||||
 | 
					<%= link "New book", to: book_path(@conn, :new) %>
 | 
				
			||||||
							
								
								
									
										82
									
								
								samples/JSON/geo.geojson
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										82
									
								
								samples/JSON/geo.geojson
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,82 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
						"type": "FeatureCollection",
 | 
				
			||||||
 | 
						"features": [
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"type": "Feature",
 | 
				
			||||||
 | 
								"properties": {
 | 
				
			||||||
 | 
									"name": "Australia Post - North Ryde BC",
 | 
				
			||||||
 | 
									"geo": [-33.787792, 151.13288],
 | 
				
			||||||
 | 
									"streetAddress": "11 Waterloo Road",
 | 
				
			||||||
 | 
									"addressLocality": "Macquarie Park",
 | 
				
			||||||
 | 
									"addressRegion": "New South Wales",
 | 
				
			||||||
 | 
									"addressCountry": "Australia",
 | 
				
			||||||
 | 
									"postalCode": "2113"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"geometry": {
 | 
				
			||||||
 | 
									"type": "Point",
 | 
				
			||||||
 | 
									"coordinates": [151.13288, -33.787792, 0]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"type": "Feature",
 | 
				
			||||||
 | 
								"properties": {
 | 
				
			||||||
 | 
									"name": "George Weston Foods Limited",
 | 
				
			||||||
 | 
									"geo": [-37.8263884, 144.9105381],
 | 
				
			||||||
 | 
									"streetAddress": "Level 3, 187 Todd Road",
 | 
				
			||||||
 | 
									"addressLocality": "Port Melbourne",
 | 
				
			||||||
 | 
									"addressRegion": "Victoria",
 | 
				
			||||||
 | 
									"addressCountry": "Australia",
 | 
				
			||||||
 | 
									"postalCode": "3207"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"geometry": {
 | 
				
			||||||
 | 
									"type": "Polygon",
 | 
				
			||||||
 | 
									"coordinates": [
 | 
				
			||||||
 | 
										[
 | 
				
			||||||
 | 
											[144.9097088901841, -37.82622654171794, 0],
 | 
				
			||||||
 | 
											[144.9099724266943, -37.82679388891783, 0],
 | 
				
			||||||
 | 
											[144.9110127325916, -37.82651526396403, 0],
 | 
				
			||||||
 | 
											[144.9112227645738, -37.82655667152123, 0],
 | 
				
			||||||
 | 
											[144.9113739439796, -37.82618552508767, 0],
 | 
				
			||||||
 | 
											[144.9112740633105, -37.82615750100924, 0],
 | 
				
			||||||
 | 
											[144.9111355846674, -37.82584493693527, 0],
 | 
				
			||||||
 | 
											[144.9097088901841, -37.82622654171794, 0]
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								"type": "Feature",
 | 
				
			||||||
 | 
								"properties": {
 | 
				
			||||||
 | 
									"name": "George Weston Foods Limited",
 | 
				
			||||||
 | 
									"geo": [-37.05202791502396, 144.2085614999388],
 | 
				
			||||||
 | 
									"streetAddress": "67 Richards Road",
 | 
				
			||||||
 | 
									"addressLocality": "Castlemaine",
 | 
				
			||||||
 | 
									"addressRegion": "Victoria",
 | 
				
			||||||
 | 
									"addressCountry": "Australia",
 | 
				
			||||||
 | 
									"postalCode": "3450"
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"geometry": {
 | 
				
			||||||
 | 
									"type": "Polygon",
 | 
				
			||||||
 | 
									"coordinates": [
 | 
				
			||||||
 | 
										[
 | 
				
			||||||
 | 
											[144.2052428913937, -37.04906391287216, 0],
 | 
				
			||||||
 | 
											[144.205540392692,  -37.05049727485623, 0],
 | 
				
			||||||
 | 
											[144.2059800881858, -37.05066835966983, 0],
 | 
				
			||||||
 | 
											[144.206490656024,  -37.05279538900776, 0],
 | 
				
			||||||
 | 
											[144.2064525845008, -37.05366195881602, 0],
 | 
				
			||||||
 | 
											[144.2084322301922, -37.0538920493147,  0],
 | 
				
			||||||
 | 
											[144.2084811895712, -37.05266519735124, 0],
 | 
				
			||||||
 | 
											[144.2079784002005, -37.05041270555773, 0],
 | 
				
			||||||
 | 
											[144.2074017905817, -37.04817406993293, 0],
 | 
				
			||||||
 | 
											[144.2061363939852, -37.04834972871226, 0],
 | 
				
			||||||
 | 
											[144.2052428913937, -37.04906391287216, 0]
 | 
				
			||||||
 | 
										]
 | 
				
			||||||
 | 
									]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						]
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								samples/JSON/switzerland.topojson
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/JSON/switzerland.topojson
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										23
									
								
								samples/JSX/sample.jsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								samples/JSX/sample.jsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					'use strict';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const React = require('react')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					module.exports = React.createClass({
 | 
				
			||||||
 | 
					  render: function() {
 | 
				
			||||||
 | 
					    let {feeds, log} = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    log.info(feeds);
 | 
				
			||||||
 | 
					    return <div className="feed-list">
 | 
				
			||||||
 | 
					      <h3>News Feed's</h3>
 | 
				
			||||||
 | 
					      <ul>
 | 
				
			||||||
 | 
					        {feeds.map(function(feed) {
 | 
				
			||||||
 | 
					          return <li key={feed.name} className={feed.fetched ? 'loaded' : 'loading'}>
 | 
				
			||||||
 | 
					            {feed.data && feed.data.length > 0 ?
 | 
				
			||||||
 | 
					              <span>{feed.name} <span className='light'>({feed.data.length})</span></span>
 | 
				
			||||||
 | 
					              : 'feed.name' }
 | 
				
			||||||
 | 
					          </li>
 | 
				
			||||||
 | 
					        })}
 | 
				
			||||||
 | 
					      </ul>
 | 
				
			||||||
 | 
					    </div>;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
							
								
								
									
										14069
									
								
								samples/KiCad/tc14badge.brd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14069
									
								
								samples/KiCad/tc14badge.brd
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										99
									
								
								samples/Metal/ITMVisualisationEngine.metal
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										99
									
								
								samples/Metal/ITMVisualisationEngine.metal
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,99 @@
 | 
				
			|||||||
 | 
					// Copyright 2014 Isis Innovation Limited and the authors of InfiniTAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <metal_stdlib>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../../DeviceAgnostic/ITMSceneReconstructionEngine.h"
 | 
				
			||||||
 | 
					#include "../../DeviceAgnostic/ITMVisualisationEngine.h"
 | 
				
			||||||
 | 
					#include "ITMVisualisationEngine_Metal.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					using namespace metal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kernel void genericRaycastVH_device(DEVICEPTR(Vector4f) *pointsRay                                  [[ buffer(0) ]],
 | 
				
			||||||
 | 
					                                    const CONSTPTR(ITMVoxel) *voxelData                             [[ buffer(1) ]],
 | 
				
			||||||
 | 
					                                    const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex   [[ buffer(2) ]],
 | 
				
			||||||
 | 
					                                    const CONSTPTR(Vector2f) *minmaxdata                            [[ buffer(3) ]],
 | 
				
			||||||
 | 
					                                    const CONSTPTR(CreateICPMaps_Params) *params                    [[ buffer(4) ]],
 | 
				
			||||||
 | 
					                                    uint2 threadIdx                                                 [[ thread_position_in_threadgroup ]],
 | 
				
			||||||
 | 
					                                    uint2 blockIdx                                                  [[ threadgroup_position_in_grid ]],
 | 
				
			||||||
 | 
					                                    uint2 blockDim                                                  [[ threads_per_threadgroup ]])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (x >= params->imgSize.x || y >= params->imgSize.y) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    int locId = x + y * params->imgSize.x;
 | 
				
			||||||
 | 
					    int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    castRay<ITMVoxel, ITMVoxelIndex>(pointsRay[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams,
 | 
				
			||||||
 | 
					                                     params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kernel void genericRaycastVGMissingPoints_device(DEVICEPTR(Vector4f) *forwardProjection                         [[ buffer(0) ]],
 | 
				
			||||||
 | 
					                                                 const CONSTPTR(int) *fwdProjMissingPoints                      [[ buffer(1) ]],
 | 
				
			||||||
 | 
					                                                 const CONSTPTR(ITMVoxel) *voxelData                            [[ buffer(2) ]],
 | 
				
			||||||
 | 
					                                                 const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex  [[ buffer(3) ]],
 | 
				
			||||||
 | 
					                                                 const CONSTPTR(Vector2f) *minmaxdata                           [[ buffer(4) ]],
 | 
				
			||||||
 | 
					                                                 const CONSTPTR(CreateICPMaps_Params) *params                   [[ buffer(5) ]],
 | 
				
			||||||
 | 
					                                                 uint2 threadIdx                                                [[ thread_position_in_threadgroup ]],
 | 
				
			||||||
 | 
					                                                 uint2 blockIdx                                                 [[ threadgroup_position_in_grid ]],
 | 
				
			||||||
 | 
					                                                 uint2 blockDim                                                 [[ threads_per_threadgroup ]])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int pointId = threadIdx.x + blockIdx.x * blockDim.x;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (pointId >= params->imgSize.z) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    int locId = fwdProjMissingPoints[pointId];
 | 
				
			||||||
 | 
					    int y = locId / params->imgSize.x, x = locId - y * params->imgSize.x;
 | 
				
			||||||
 | 
					    int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    castRay<ITMVoxel, ITMVoxelIndex>(forwardProjection[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams,
 | 
				
			||||||
 | 
					                                     params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kernel void renderICP_device(const CONSTPTR(Vector4f) *pointsRay            [[ buffer(0) ]],
 | 
				
			||||||
 | 
					                             DEVICEPTR(Vector4f) *pointsMap                 [[ buffer(1) ]],
 | 
				
			||||||
 | 
					                             DEVICEPTR(Vector4f) *normalsMap                [[ buffer(2) ]],
 | 
				
			||||||
 | 
					                             DEVICEPTR(Vector4u) *outRendering              [[ buffer(3) ]],
 | 
				
			||||||
 | 
					                             const CONSTPTR(CreateICPMaps_Params) *params   [[ buffer(4) ]],
 | 
				
			||||||
 | 
					                             uint2 threadIdx                                [[ thread_position_in_threadgroup ]],
 | 
				
			||||||
 | 
					                             uint2 blockIdx                                 [[ threadgroup_position_in_grid ]],
 | 
				
			||||||
 | 
					                             uint2 blockDim                                 [[ threads_per_threadgroup ]])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (x >= params->imgSize.x || y >= params->imgSize.y) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    processPixelICP<false>(outRendering, pointsMap, normalsMap, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kernel void renderForward_device(DEVICEPTR(Vector4u) *outRendering              [[ buffer(0) ]],
 | 
				
			||||||
 | 
					                                 const CONSTPTR(Vector4f) *pointsRay            [[ buffer(1) ]],
 | 
				
			||||||
 | 
					                                 const CONSTPTR(CreateICPMaps_Params) *params   [[ buffer(2) ]],
 | 
				
			||||||
 | 
					                                 uint2 threadIdx                                [[ thread_position_in_threadgroup ]],
 | 
				
			||||||
 | 
					                                 uint2 blockIdx                                 [[ threadgroup_position_in_grid ]],
 | 
				
			||||||
 | 
					                                 uint2 blockDim                                 [[ threads_per_threadgroup ]])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (x >= params->imgSize.x || y >= params->imgSize.y) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    processPixelForwardRender<false>(outRendering, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource));
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					kernel void forwardProject_device(DEVICEPTR(Vector4f) *forwardProjection         [[ buffer(0) ]],
 | 
				
			||||||
 | 
					                                  const CONSTPTR(Vector4f) *pointsRay            [[ buffer(1) ]],
 | 
				
			||||||
 | 
					                                  const CONSTPTR(CreateICPMaps_Params) *params   [[ buffer(2) ]],
 | 
				
			||||||
 | 
					                                  uint2 threadIdx                                [[ thread_position_in_threadgroup ]],
 | 
				
			||||||
 | 
					                                  uint2 blockIdx                                 [[ threadgroup_position_in_grid ]],
 | 
				
			||||||
 | 
					                                  uint2 blockDim                                 [[ threads_per_threadgroup ]])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    int x = (threadIdx.x + blockIdx.x * blockDim.x), y = (threadIdx.y + blockIdx.y * blockDim.y);
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    if (x >= params->imgSize.x || y >= params->imgSize.y) return;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    int locId = x + y * params->imgSize.x;
 | 
				
			||||||
 | 
					    Vector4f pixel = pointsRay[locId];
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    int locId_new = forwardProjectPixel(pixel * params->voxelSizes.x, params->M, params->projParams, params->imgSize.xy);
 | 
				
			||||||
 | 
					    if (locId_new >= 0) forwardProjection[locId_new] = pixel;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										16
									
								
								samples/Objective-C/Siesta.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								samples/Objective-C/Siesta.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Siesta.h
 | 
				
			||||||
 | 
					//  Siesta
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//  Created by Paul on 2015/6/14.
 | 
				
			||||||
 | 
					//  Copyright © 2015 Bust Out Solutions. MIT license.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#import <UIKit/UIKit.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Project version number for Siesta.
 | 
				
			||||||
 | 
					FOUNDATION_EXPORT double SiestaVersionNumber;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//! Project version string for Siesta.
 | 
				
			||||||
 | 
					FOUNDATION_EXPORT const unsigned char SiestaVersionString[];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										31
									
								
								samples/PHP/mail.phps
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								samples/PHP/mail.phps
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * This example shows sending a message using PHP's mail() function.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require '../PHPMailerAutoload.php';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Create a new PHPMailer instance
 | 
				
			||||||
 | 
					$mail = new PHPMailer;
 | 
				
			||||||
 | 
					//Set who the message is to be sent from
 | 
				
			||||||
 | 
					$mail->setFrom('from@example.com', 'First Last');
 | 
				
			||||||
 | 
					//Set an alternative reply-to address
 | 
				
			||||||
 | 
					$mail->addReplyTo('replyto@example.com', 'First Last');
 | 
				
			||||||
 | 
					//Set who the message is to be sent to
 | 
				
			||||||
 | 
					$mail->addAddress('whoto@example.com', 'John Doe');
 | 
				
			||||||
 | 
					//Set the subject line
 | 
				
			||||||
 | 
					$mail->Subject = 'PHPMailer mail() test';
 | 
				
			||||||
 | 
					//Read an HTML message body from an external file, convert referenced images to embedded,
 | 
				
			||||||
 | 
					//convert HTML into a basic plain-text alternative body
 | 
				
			||||||
 | 
					$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
 | 
				
			||||||
 | 
					//Replace the plain text body with one created manually
 | 
				
			||||||
 | 
					$mail->AltBody = 'This is a plain-text message body';
 | 
				
			||||||
 | 
					//Attach an image file
 | 
				
			||||||
 | 
					$mail->addAttachment('images/phpmailer_mini.png');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//send the message, check for errors
 | 
				
			||||||
 | 
					if (!$mail->send()) {
 | 
				
			||||||
 | 
					    echo "Mailer Error: " . $mail->ErrorInfo;
 | 
				
			||||||
 | 
					} else {
 | 
				
			||||||
 | 
					    echo "Message sent!";
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										90
									
								
								samples/PLSQL/plsqlguide.pck
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								samples/PLSQL/plsqlguide.pck
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,90 @@
 | 
				
			|||||||
 | 
					create or replace package plsqlguide is
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Author  : Jared Petersen
 | 
				
			||||||
 | 
					-- Created : 9/22/2015 12:26:22 AM
 | 
				
			||||||
 | 
					-- Purpose : Basic PLSQL template/guide
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Procedures */
 | 
				
			||||||
 | 
					procedure p_main;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end plsqlguide;
 | 
				
			||||||
 | 
					/
 | 
				
			||||||
 | 
					create or replace package body plsqlguide is
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Main entry point (homepage) */
 | 
				
			||||||
 | 
					procedure p_main
 | 
				
			||||||
 | 
						is
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					htp.prn('
 | 
				
			||||||
 | 
						<!DOCTYPE html>
 | 
				
			||||||
 | 
							<html lang="en">
 | 
				
			||||||
 | 
							<head>
 | 
				
			||||||
 | 
								<meta charset="utf-8">
 | 
				
			||||||
 | 
								<meta http-equiv="X-UA-Compatible" content="IE=edge">
 | 
				
			||||||
 | 
								<meta name="viewport" content="width=device-width, initial-scale=1">
 | 
				
			||||||
 | 
								<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
 | 
				
			||||||
 | 
								<title>PL/SQL Sample Application</title>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<!-- Bootstrap -->
 | 
				
			||||||
 | 
								<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
 | 
				
			||||||
 | 
								<!--[if lt IE 9]>
 | 
				
			||||||
 | 
									<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
 | 
				
			||||||
 | 
									<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
 | 
				
			||||||
 | 
								<![endif]-->
 | 
				
			||||||
 | 
							</head>
 | 
				
			||||||
 | 
							<body>
 | 
				
			||||||
 | 
								<!-- Static navbar -->
 | 
				
			||||||
 | 
								<nav class="navbar navbar-default navbar-static-top">
 | 
				
			||||||
 | 
									<div class="container">
 | 
				
			||||||
 | 
										<div class="navbar-header">
 | 
				
			||||||
 | 
											<a class="navbar-brand" href="#">PL/SQL Sample Application</a>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
								</nav>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<div class="container">
 | 
				
			||||||
 | 
									<table class="table table-bordered">
 | 
				
			||||||
 | 
										<tr>
 | 
				
			||||||
 | 
											<th>#</th>
 | 
				
			||||||
 | 
											<th>Name</th>
 | 
				
			||||||
 | 
											<th>Description</th>
 | 
				
			||||||
 | 
											<th>Quantity</th>
 | 
				
			||||||
 | 
											<th>Price</th>
 | 
				
			||||||
 | 
										</tr>
 | 
				
			||||||
 | 
					');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					-- Fill out the parts table
 | 
				
			||||||
 | 
					for row in (select * from parts) loop
 | 
				
			||||||
 | 
						htp.prn('
 | 
				
			||||||
 | 
										<tr>
 | 
				
			||||||
 | 
											<td>'||row.pid||'</td>
 | 
				
			||||||
 | 
											<td>'||row.name||'</td>
 | 
				
			||||||
 | 
											<td>'||row.description||'</td>
 | 
				
			||||||
 | 
											<td>'||row.quantity||'</td>
 | 
				
			||||||
 | 
											<td>'||row.price||'</td>
 | 
				
			||||||
 | 
										</tr>
 | 
				
			||||||
 | 
						');
 | 
				
			||||||
 | 
					end loop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					htp.prn('
 | 
				
			||||||
 | 
					    		</table>
 | 
				
			||||||
 | 
								</div> <!-- /container -->
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								<!-- jQuery (necessary for Bootstrap''s JavaScript plugins) -->
 | 
				
			||||||
 | 
								<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
 | 
				
			||||||
 | 
								<!-- Include all compiled plugins (below), or include individual files as needed -->
 | 
				
			||||||
 | 
								<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
 | 
				
			||||||
 | 
							</body>
 | 
				
			||||||
 | 
						</html>
 | 
				
			||||||
 | 
					');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end p_main;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					begin
 | 
				
			||||||
 | 
					  -- Initialization
 | 
				
			||||||
 | 
					  null;
 | 
				
			||||||
 | 
					end plsqlguide;
 | 
				
			||||||
 | 
					/
 | 
				
			||||||
							
								
								
									
										267
									
								
								samples/Ruby/racc.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										267
									
								
								samples/Ruby/racc.rb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,267 @@
 | 
				
			|||||||
 | 
					#
 | 
				
			||||||
 | 
					# DO NOT MODIFY!!!!
 | 
				
			||||||
 | 
					# This file is automatically generated by Racc 1.4.7
 | 
				
			||||||
 | 
					# from Racc grammer file "".
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					require 'racc/parser.rb'
 | 
				
			||||||
 | 
					module RJSON
 | 
				
			||||||
 | 
					  class Parser < Racc::Parser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  require 'rjson/handler'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  attr_reader :handler
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def initialize tokenizer, handler = Handler.new
 | 
				
			||||||
 | 
					    @tokenizer = tokenizer
 | 
				
			||||||
 | 
					    @handler   = handler
 | 
				
			||||||
 | 
					    super()
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def next_token
 | 
				
			||||||
 | 
					    @tokenizer.next_token
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def parse
 | 
				
			||||||
 | 
					    do_parse
 | 
				
			||||||
 | 
					    handler
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					##### State transition tables begin ###
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_action_table = [
 | 
				
			||||||
 | 
					     9,    33,     9,    11,    13,    16,    19,    22,     9,     7,
 | 
				
			||||||
 | 
					    23,     1,     9,    11,    13,    16,    19,    29,    30,     7,
 | 
				
			||||||
 | 
					    21,     1,     9,    11,    13,    16,    19,    31,   nil,     7,
 | 
				
			||||||
 | 
					    21,     1,    23,     7,   nil,     1 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_action_check = [
 | 
				
			||||||
 | 
					     6,    27,    33,    33,    33,    33,    33,     3,    31,    33,
 | 
				
			||||||
 | 
					     6,    33,    29,    29,    29,    29,    29,    12,    22,    29,
 | 
				
			||||||
 | 
					    12,    29,     2,     2,     2,     2,     2,    25,   nil,     2,
 | 
				
			||||||
 | 
					     2,     2,    25,     0,   nil,     0 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_action_pointer = [
 | 
				
			||||||
 | 
					    24,   nil,    20,     7,   nil,   nil,    -2,   nil,   nil,   nil,
 | 
				
			||||||
 | 
					   nil,   nil,    10,   nil,   nil,   nil,   nil,   nil,   nil,   nil,
 | 
				
			||||||
 | 
					   nil,   nil,    18,   nil,   nil,    20,   nil,    -7,   nil,    10,
 | 
				
			||||||
 | 
					   nil,     6,   nil,     0,   nil,   nil,   nil ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_action_default = [
 | 
				
			||||||
 | 
					   -27,   -12,   -21,   -27,    -1,    -2,   -27,   -10,   -15,   -26,
 | 
				
			||||||
 | 
					    -8,   -22,   -27,   -23,   -17,   -16,   -24,   -20,   -18,   -25,
 | 
				
			||||||
 | 
					   -19,   -11,   -27,   -13,    -3,   -27,    -6,   -27,    -9,   -21,
 | 
				
			||||||
 | 
					    37,   -27,    -4,   -21,   -14,    -5,    -7 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_goto_table = [
 | 
				
			||||||
 | 
					     8,    26,    24,    27,    10,     3,    25,     5,     4,    12,
 | 
				
			||||||
 | 
					   nil,   nil,   nil,   nil,    28,   nil,   nil,   nil,   nil,   nil,
 | 
				
			||||||
 | 
					   nil,    32,   nil,   nil,   nil,   nil,    35,    34,    27,   nil,
 | 
				
			||||||
 | 
					   nil,    36 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_goto_check = [
 | 
				
			||||||
 | 
					     9,     7,     5,     8,    11,     1,     6,     3,     2,    12,
 | 
				
			||||||
 | 
					   nil,   nil,   nil,   nil,    11,   nil,   nil,   nil,   nil,   nil,
 | 
				
			||||||
 | 
					   nil,     5,   nil,   nil,   nil,   nil,     7,     9,     8,   nil,
 | 
				
			||||||
 | 
					   nil,     9 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_goto_pointer = [
 | 
				
			||||||
 | 
					   nil,     5,     8,     7,   nil,    -4,     0,    -5,    -3,    -2,
 | 
				
			||||||
 | 
					   nil,     2,     7,   nil,   nil ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_goto_default = [
 | 
				
			||||||
 | 
					   nil,   nil,    14,    18,     6,   nil,   nil,   nil,    20,   nil,
 | 
				
			||||||
 | 
					     2,   nil,   nil,    15,    17 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_reduce_table = [
 | 
				
			||||||
 | 
					  0, 0, :racc_error,
 | 
				
			||||||
 | 
					  1, 14, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 14, :_reduce_none,
 | 
				
			||||||
 | 
					  2, 15, :_reduce_none,
 | 
				
			||||||
 | 
					  3, 15, :_reduce_none,
 | 
				
			||||||
 | 
					  3, 19, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 19, :_reduce_none,
 | 
				
			||||||
 | 
					  3, 20, :_reduce_none,
 | 
				
			||||||
 | 
					  2, 16, :_reduce_none,
 | 
				
			||||||
 | 
					  3, 16, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 23, :_reduce_10,
 | 
				
			||||||
 | 
					  1, 24, :_reduce_11,
 | 
				
			||||||
 | 
					  1, 17, :_reduce_12,
 | 
				
			||||||
 | 
					  1, 18, :_reduce_13,
 | 
				
			||||||
 | 
					  3, 25, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 25, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 22, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 22, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 22, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 26, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 26, :_reduce_20,
 | 
				
			||||||
 | 
					  0, 27, :_reduce_none,
 | 
				
			||||||
 | 
					  1, 27, :_reduce_22,
 | 
				
			||||||
 | 
					  1, 27, :_reduce_23,
 | 
				
			||||||
 | 
					  1, 27, :_reduce_24,
 | 
				
			||||||
 | 
					  1, 27, :_reduce_25,
 | 
				
			||||||
 | 
					  1, 21, :_reduce_26 ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_reduce_n = 27
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_shift_n = 37
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_token_table = {
 | 
				
			||||||
 | 
					  false => 0,
 | 
				
			||||||
 | 
					  :error => 1,
 | 
				
			||||||
 | 
					  :STRING => 2,
 | 
				
			||||||
 | 
					  :NUMBER => 3,
 | 
				
			||||||
 | 
					  :TRUE => 4,
 | 
				
			||||||
 | 
					  :FALSE => 5,
 | 
				
			||||||
 | 
					  :NULL => 6,
 | 
				
			||||||
 | 
					  "," => 7,
 | 
				
			||||||
 | 
					  ":" => 8,
 | 
				
			||||||
 | 
					  "[" => 9,
 | 
				
			||||||
 | 
					  "]" => 10,
 | 
				
			||||||
 | 
					  "{" => 11,
 | 
				
			||||||
 | 
					  "}" => 12 }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_nt_base = 13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					racc_use_result_var = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Racc_arg = [
 | 
				
			||||||
 | 
					  racc_action_table,
 | 
				
			||||||
 | 
					  racc_action_check,
 | 
				
			||||||
 | 
					  racc_action_default,
 | 
				
			||||||
 | 
					  racc_action_pointer,
 | 
				
			||||||
 | 
					  racc_goto_table,
 | 
				
			||||||
 | 
					  racc_goto_check,
 | 
				
			||||||
 | 
					  racc_goto_default,
 | 
				
			||||||
 | 
					  racc_goto_pointer,
 | 
				
			||||||
 | 
					  racc_nt_base,
 | 
				
			||||||
 | 
					  racc_reduce_table,
 | 
				
			||||||
 | 
					  racc_token_table,
 | 
				
			||||||
 | 
					  racc_shift_n,
 | 
				
			||||||
 | 
					  racc_reduce_n,
 | 
				
			||||||
 | 
					  racc_use_result_var ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Racc_token_to_s_table = [
 | 
				
			||||||
 | 
					  "$end",
 | 
				
			||||||
 | 
					  "error",
 | 
				
			||||||
 | 
					  "STRING",
 | 
				
			||||||
 | 
					  "NUMBER",
 | 
				
			||||||
 | 
					  "TRUE",
 | 
				
			||||||
 | 
					  "FALSE",
 | 
				
			||||||
 | 
					  "NULL",
 | 
				
			||||||
 | 
					  "\",\"",
 | 
				
			||||||
 | 
					  "\":\"",
 | 
				
			||||||
 | 
					  "\"[\"",
 | 
				
			||||||
 | 
					  "\"]\"",
 | 
				
			||||||
 | 
					  "\"{\"",
 | 
				
			||||||
 | 
					  "\"}\"",
 | 
				
			||||||
 | 
					  "$start",
 | 
				
			||||||
 | 
					  "document",
 | 
				
			||||||
 | 
					  "object",
 | 
				
			||||||
 | 
					  "array",
 | 
				
			||||||
 | 
					  "start_object",
 | 
				
			||||||
 | 
					  "end_object",
 | 
				
			||||||
 | 
					  "pairs",
 | 
				
			||||||
 | 
					  "pair",
 | 
				
			||||||
 | 
					  "string",
 | 
				
			||||||
 | 
					  "value",
 | 
				
			||||||
 | 
					  "start_array",
 | 
				
			||||||
 | 
					  "end_array",
 | 
				
			||||||
 | 
					  "values",
 | 
				
			||||||
 | 
					  "scalar",
 | 
				
			||||||
 | 
					  "literal" ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Racc_debug_parser = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##### State transition tables end #####
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 0 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 1 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 2 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 3 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 4 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 5 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 6 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 7 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 8 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 9 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_10(val, _values, result)
 | 
				
			||||||
 | 
					 @handler.start_array  
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_11(val, _values, result)
 | 
				
			||||||
 | 
					 @handler.end_array    
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_12(val, _values, result)
 | 
				
			||||||
 | 
					 @handler.start_object 
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_13(val, _values, result)
 | 
				
			||||||
 | 
					 @handler.end_object   
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 14 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 15 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 16 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 17 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 18 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 19 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_20(val, _values, result)
 | 
				
			||||||
 | 
					 @handler.scalar val[0] 
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# reduce 21 omitted
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_22(val, _values, result)
 | 
				
			||||||
 | 
					 n = val[0]; result = n.count('.') > 0 ? n.to_f : n.to_i 
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_23(val, _values, result)
 | 
				
			||||||
 | 
					 result = true 
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_24(val, _values, result)
 | 
				
			||||||
 | 
					 result = false 
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_25(val, _values, result)
 | 
				
			||||||
 | 
					 result = nil 
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_26(val, _values, result)
 | 
				
			||||||
 | 
					 @handler.scalar val[0].gsub(/^"|"$/, '') 
 | 
				
			||||||
 | 
					    result
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def _reduce_none(val, _values, result)
 | 
				
			||||||
 | 
					  val[0]
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  end   # class Parser
 | 
				
			||||||
 | 
					  end   # module RJSON
 | 
				
			||||||
							
								
								
									
										27
									
								
								samples/TypeScript/tsxAttributeResolution9.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								samples/TypeScript/tsxAttributeResolution9.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					//@jsx: preserve
 | 
				
			||||||
 | 
					//@module: amd
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//@filename: react.d.ts
 | 
				
			||||||
 | 
					declare module JSX {
 | 
				
			||||||
 | 
						interface Element { }
 | 
				
			||||||
 | 
						interface IntrinsicElements {
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						interface ElementAttributesProperty {
 | 
				
			||||||
 | 
							props;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					interface Props {  
 | 
				
			||||||
 | 
					  foo: string;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//@filename: file.tsx
 | 
				
			||||||
 | 
					export class MyComponent {  
 | 
				
			||||||
 | 
					  render() {
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  props: { foo: string; }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<MyComponent foo="bar" />; // ok  
 | 
				
			||||||
 | 
					<MyComponent foo={0} />; // should be an error
 | 
				
			||||||
							
								
								
									
										213
									
								
								samples/XML/water.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										213
									
								
								samples/XML/water.tsx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,213 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" ?>
 | 
				
			||||||
 | 
					<tileset name="Sunny Beach">
 | 
				
			||||||
 | 
					  <tile id="0">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABYklEQVR42tVVq47DMBDsp/hHDxQcOFBwwMAgwMDEIKAgoCAgUqBhqH8l50126lHaq9TrQ7pKq8TOemd2dtfd7f7rz3TTbNpibpyNT/N7gUOxSHbKs+mLlW+vAwaQJ1B5ulQN+88kYkIJ3GhwkVwyFRABvKbEkKvfI0TOGYkha9nDe4AiqfqIHZUoznbTfURwYA1agn+rvAL2VRpuX8ym1Rw9QUpIiB/WLQilRZXfgXuVziro51hr69HxtPZUAlk3ui9ErZYNvvLeEplAU7MAx00tj3mVEhkMuWYdVeZGQTrtCZTDqz8IsAotleqCCDcUZ7aQUduSsanKjnVDe44yx9Qogdvj1k21m08KDiltqllAdnwX+xgvRzNqvLuaUQ4EDSCgB8oQtb4GxIBDfvxeOE9ApO7mUjltWl5HvQfiMy+kXhXBjGP8DhsF2rTYa6/kQKPFV7Sf3vinFLQX3Np0f43zA259mZw6IuSNAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="1">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAB/0lEQVR42tVVLYvDQBBduTJy5drIyMrY/oOTFScrKioqKioiwhFxcBWFVhQaU0JEOCIKPXFQGVmbvzI3M/vRlIM7ev2AKwwNk7Bv3nvzEiH+7S/dQG/dg2gVQZRpeBiuro+g8yPI+R7E8A3EQEC0jkDPNdf9gLcIvGtBr/Efr4k9lUoVxGUMYaJAZaaofzvgvAG9ahhUl1gfLYisADEpQE6ksWFrFIgWEcixhHAVXq+IXlhQKsuae3gtZoVnT/47QGKvZwEPxCqMBPcvUoQ9rh0wAr42BpjkTw+gp+j985IVoIOZ5VhAv+p7sF5p+kES+Gd+HYSkZYnnFjQ5GGDLmu/htRhtEBBruGRgqi6QnEkPqKxFdN/1SLEzaxjYSe2qwl5ltp2BP1szGJbCfSALeJCRjSKmgOQncAKL85j3g/qcELLFPuOG8eqdlq0zQN7xnodpQZVmmKBq2ALHjBgFCECH0y7wXmwjz5R6POQ8hLiKvQo/x622rEsbvcrETybvIJ4w+9PibMlUYsAJWE0VD+Ei6Qa5OBU8QG6TQPJnDQTpnv0PUwti2bLvC8OMpBdDYVJCqbhJHHdmT8TASK9Ty8hGjpmujN+8Ayj1N4+vfiHRCyjB5Ru88Oazv1l48hR7DLwIOYb3+xiMlp4d+U5yx3Xs4/ewjxLtQfcl89dzvgD75hkn04cPugAAAABJRU5ErkJggg==
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="2">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACjElEQVR42r1VIY/iYBTkZ6ysrURWYpFIJBKLRJJTVZsUQcKKTajZEAQhCBIqmrSCpAiSIhCfQFQgKk5UnHk3876W3Iq7bLjdJXkp/dow8+bNPFqtBz+d2EgSjaQs5pKfJtL6ro93rqR7EuluS+lFpSTpWMx5ItlxjPpCIs5bLm5UiLcrZVmI+BcB+ATgvlQ/F5LEI1UiP40/VxEnzMR5QYGAd6jEOxvx3ox0VoVk6L4s50ogO0CJSyCb9UC/a0GV/W74GBlnZkG1Xu316TmR7nQv3bQSY5bo1FcgksgxBnPhfaPERJZhX58X1+DjJJwtwLYNMEg8o0hmZ6Q9y2WwrmR5E1WABmSHSTqSqlwoENUgGZ5xLMYEksMbfC/HuP4OHBlxVgCd1qA/EgvMogJryB5VMkD14IN+Kiq3zh6ABNZRANiOw1dTFte5ktlH9fnZqvYeuJG6KYA5a1zD3JJKC3Ffclu4J3j/INJbGZFfSy0CslOmoqiV4YhYJEm/6LUmV1AZPLMmQ6YpsYKz42ndNa+hBW6/Gn3G+I0ZQ4BT8rIIABjc5eYZKz+OLQGSIvDRArM226ESfRdb7bZRIPzDfFuj8WunpQzOkL1EBAsrP+Uk0F1eyk4/YBQkRflz3RETu7Rudmnx7J95VxPG1hNubMGfZkgAZq8RDCG9bDR2/PEstbNVJVKbAhvPOVTx9ayJ5sfTQAIYjwupvXUhvRjOBwEXY1A5jTUTu+G8lYiqMcT96L6gtOv/2ZAuuu2gYRdjGR5FFWBH9+xj7kZ3QKCxJClrzD3eWXzeRuTy8a9wP/xAiRtD6UzZPRfOJagN94X/Cb24VBC6mPJmBxKwbv/Wf0Wu3PK2UKdT/kd/5zeaE2gm63UKTAAAAABJRU5ErkJggg==
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="3">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABvklEQVR42tVVr2/CQBTmb0XWVlZW1lZWoicWMkECgqQIklY0acVEBeIEomICe3vfd33H0Y1kY0AykpfCcbzv17tjNvuvr7ZLbbmL7fJlbodjYZ8GbA65rQS42ie2f88Izs91IpU+jki5jW3f57YVkPUqssYU4oC838Qkge/bJpVK+LwbsCqFOnMoaDvKgWEtF2LZ6Ehul69zvmeJKzcDAxRqoRSK2yZjEUwInD4Wjgyc6TKCYX9Irto5IiD5K2DU8i2y5SaixVQjzQCkmQMsdOY0LEhuEMI6oNPYWvn99akWxuWYJxV0yDfywLBX1VWBM8NQuGEUAn4gJ7GhB/pxvXNxBYq/5oYnWJOEgKAR1kFovYp9HFCI5krCRZCQXDiY6kSvJGSvgTNN4Mh3thGodg2MEIW9aKBOADiMiarVAVEK9XQJZCbuXp/60TZjcj6x2ZFJSQJk1AmAaEzqhq7r6UCVI6kL639y7n3jiW3lNmJsdGokyH114qPi3IxD2/7lgro4FTt32zkw54qS4PrmrLStEw7mXe9+r7o5Dyczrd1waUQPvZL1uOpwVXsQyPycPO1PCTkPxwUHFUf51j6f/7okyrolgPYAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="4">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACUklEQVR42tWVr2/qUBTHJ5FIZC2yEomdRCKRtVUvVUsz8dLMMUHSiSXMEDJBGgRJESRFkBRB0oknEE8gJvgXzjufU+4eZsl7+5Vsyclt77m73+/5nu8pFxff9a991xZ/5EvzuinJYiBfBty6aUk060k4uZR4NZDhNpDw8VIg1LnvfB4R79aT1nXLgCAQzfoSKInurCvZLpJ40RfOuPi4in+2hACgcdUQb+SJf+NJ8NCV6TqU6aYOiBj4VVP8e19Qiva8GXj/K5FqG8vhkEq+CMSf1JdWu0TSdWCgibYA2WlB9NizM5BwZFjJ/5ciABPZvAbNl6GUm0jKdWQEqB5iUyWRK4lcc7G2BJB42TfAYhtJtgqMAHewWqhqrwJXu1gKBTs+p8Jz9RQreCCNHw3ZPyUmZ61AnYNENO9Ze9gnkuXAgMcajhSEjMht21b+hyLOKh5KNhtYlUhZKnueAeAC5C/1mYsgFDzUcpODGN4ghyJjzac6kuYZVSOcdF+IEJxJ533DQQ2K+6uAVlWoqYpVKPv90AjQb1b2Dkr0qH6AHOfoP7nOqG3nbX9XFzFVBVAjcW3AtHddI8UUQfDVVlDtcBOo+YZy+J1KpqydGpBAapTIF6HKWVdDDpKstJB9fMQ7gOcj/M9m5EKMZ6tWx4UHlFFVCq2MtplSJz84tx+fx0ac1tIiqseI7xrHUo3HVBRKyPmhPKkCCT5MvBeniWG/Ui8dj+OP+yBR6UvVSsiZ06ZCVwdsiun7p32SM519KnUfJ6SutsnJtPHX/ShhxPN+v/WeP+Pal6x1OIpVAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="5">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACTElEQVR42tVUr2vrUBSenKyMjI28MjI2MrIyMjYyaoSJEepSUWhEoc+UMlFKRaAVhUwUOvFgExMVT0Q80X/hvO876X2rGlvf9mCBQ27Opff7cb7bq6vv+qw3iRx/T6X9NUaV8t+Al7tUmk0q6zqRfBsr+H6Xy9Mj6mf+dUSennNZLmI5HEoFIoE9QNNZCCfG0jyk4g5dabap9j8N+PBSyB6Ay1UCkEwP9ye+vgmY1311Ib0PlRh7XuXBkUyOx+nlRFQJAPW9y4REWqhvtok6oT26AWem6K0xGhLjKOYPiWT3fYnrUMzAFTMz7ydCZeUukbYtNWDnituXUrrwjcUZOB34JlYXSJTquTcHmRC/MZVRN9h3bh1dvzljzpEHqTINVaFlVVvFtDutIx2JP/K0T0cIzL1s1ZfiRIzkvYGna+7x7dw5r0SyRaTAnB9LlbdjDRn3qJyq13WqB3ezLnBQLMkkgNWR3obmGePC3OMfgSSLUIH5e6veTEzXm0VKwoyMBvjVAYDzetFCrglkU22tVdvPg3YoJMahcQVQHBbOfAmrDsgC85wSmTBDT4JFoH3m4s3Us5h6hufc2jlGoXmA9UusUygMoCw8qck3nUNqOwhmGBOLoAQP4M67w5itIs2BHQfJdA4UmvJ+BeWrUMuH8ilGQmBabYvf3OP74uvIwLBI4PrmWtxRZ2ECNTy4d9v7m3AqdW96SL+nZLn3aX9I51fJqqKt/O4BlD0lcKov+0umMmt1+Ygc4BZwrcT+xeqPPgT0ht399kbexcB/AEhbiVW/ps4pAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="6">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACOUlEQVR42tWVrW/bUBTF+2cEhhoaGpoGBgYamhoaWgOTFeaCSS6IlJEoKoiiAksNiJSASimIlIACgwKDAoOB0bv7u3bc7qPSlq2VFunpfeTl3XPPOffm4uJ//RyOiWy2kSyvA0lXI3m3wNVjJjsNvLuLpXxIpX7Km/19rCN5OyCbdSRlmclBg9wWoVRVrgzoehU1IBRQ/7Iv3Dvs/yGQU6ZkVz3mRjuDIAwYKcvUALAHhK2Vkbqeng8kXQWWLZmS8WGf2rBgCuDrl2kDBmaOqczXoXgTz34z34YGJF4MxR33xZ25vw+EbBnLm1A2q9AoJqPdNrZA0A24cOJLfDPsmGFNUL6f30UdEOfKsfPeh56tX3e10rdp9TR6j+gbdoHLh8wyZk/WnQnrvJ2nnSFhgzOAZLqOZ0ML3hs3IHofe89AkmIky0XQZMm4j1sNWxBKP1lyD0Bkyx66mfmtmVPvDj65kq4Dkw3qgyvPZIgmA3EnrjHnjB0DkRaBTPW9n+r6pdtNd505q5SBuso7OQBzW0RK/chkiq4HBpLAxpiOZDGy80ylcC8d8Re+ycGd113falpVmc0Aa8AkBgKtYYWHYAEgyENAHiY77kAzhuUeg+D+Z1/+qO5/1LuCGWWFMx6FKXQ1/6xPzSg22qGb7L2ZZ0DPLsfvqmLbdDuCYTACnMrPzlUKPABgfPBXfeBXvb8z3P7ZnFYxOhOUeqc/vGlLPpUrAKwnFDSstPPJu/0pYb76aWpGxYTnvvMN/STd514e0SYAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="7">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABjklEQVR42tVVsWrDMBDNp+i7+gnZO3UqoUMoHQL1YKgHgbWYoKEUD4Z4CHhUN636FVV30knnkBYSnEADRwKS7r179+6yWv3Xj+itFzpEPXkhjb8vsArRsRicf1d7jNsBJyAhCyh+18Yfvq3f9wcksN6++vXzZjkiQhkvGhPBQHKZwAMwKAHg7ThlApvdRyYBal0PXJsisYwgAJAVOAFv9ddMhYfHp0i4t5cRoQcROJDYJYmHklxUBoMDcxUyAZVUg+jCm9H9TgQO8WIVQcXLFGU+6TFJjORUJEZndI7gTXyLisFvzcgoNjXY46ObmQpJyEgGKoMqITlXAXssbfYCEQeysztkWMoPcXTniLCxUqz3w5SrbEczr7JK4InsOaWQhGZTI2P8PW49YwkPPx0SIZkpCZxRxbxVdDd7gaq+yIzwQKVJgErfUmsakwnM5j9Uimr1xRMIPrgFxpHk206lTckrBE6uJ3A0dWcXXEhjUkQXf+TNqJl/tMG47UpWbLT4ipb2jn9KKnmhjvvi2jw/5gK11tLQbjMAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="8">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACOElEQVR42tWVr2/bQBzF+ycMBoYaFgaGBhoGGoYaGgZN0cCkDERKQaWGBBhEVUGkBVRywCQHRDqDAIOAAwUHCgxG3t73e7nVqbQf6tpKi/TV2U7k97n3np2Li//1Y6oxim2K2zyBe5jj3YTtcYqSwuW3DPVhouJ6vss447cDKe5T1PUUhiJf1yNYO6cDPN6kCiHfm/2Yk+n6asJhp7I7e5yr7TJeTK5NCTY5OTLF7SrRYx268mLhXm4x2AHxIzDcNxSb6KgYAZrHGw8jzlQTFRN32nDl1oMI5F8Ld+8MZPoU7W8d4gOQNdCby42cu1EAOW870/C6wDlGEwr6PDZD0F8Lb2p0c4NoZtBbcve5Q39NgIoOfAdGRyCxQEpX1HoKyU2dm/syEuBnIZ/FJk4IlF6vfFznwktzPqsavY1TF3pbH8Xw4DDY0w1GktTQOGSHcvMA4SPIFK5dzOBEHSD4WyvO7FuOdBctgHB8bdD5WODyzjKOBjFdESBxIqEzqayMaESoEXxX9HEMIkfvkoy4IVDaj+o3T4kKSw/ufSTdWakwceU7ITCJA4+tuhTTjf7OR5XUDYaMagwfWXhCilMsZ9b/sYwCsPDinSuun0qEJ+NDXrKcjT/fcF0RhhAiPhCQB66O1wmnu/6XF5Q6sD71hHGEmDrXJaJlrQ5FVwaXa6sdESBxYyAQhH21F5KWVRzJT/34UqLzudCOhJjaxX2zV3IoabR4KqxEIjHJvNufUpSfIGT3s5cL/wB3sgL2s65DmgAAAABJRU5ErkJggg==
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="9">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACYUlEQVR42tVVoW7jUBDsJwQGmhoaGpoWBhoGhgYGGp2igpN6IFICItUkqgKiKiBSDCo5IJIDLNkg4IECgwKDAwYlc7P77F7InapeW+kirTZ5D8zszOzL1dX/+vGTAulhguppjof1EF8HXDYIn4HBocGoBIpyyoqQnSas6POIOHEBZ8tKDIYkMMwBY+aoqjman3dIH8co8og10f5hwL3ZHv3vKYSA+2jg5TX8Y43BETp1/TwnkalWdpzgYTPUrsX79088y9BfZOgtUvT53VkX7Clc9rEB/F2FQSW9Zg5uYWiFAKaHTokI93GoROT+zcDuhpOynFWhwP2bVBXwdgbukndLA39TIUgaS4CZcI8V1anQ1HdWjfNUiYgtxtyiYDb2u5Hm5c/AW2On/JFp9QgsKjgLS8TjxN6KJGiFTO2faoxqZoF1zUyM2cMz1JKM4DK5EJEtETL7pD0rrVW/pWaoZNrLcjfGqhC3Zy0xISBEglOD4NzYPLAPSGAiRI7cEG5G+AINp5ARFaQyrqz2jpgok18o8gq2ugBeWvCOlJdQ6q2oYNQKb0VVaIe3rXB9qGlLDYdBlTUVYjKtKKAqUAEhpPko/7IlFqxQzwX81RrJA7PQ+9aGUraCBBU8b7TL9O6hQiRqPNEe/sbLvX0n2s14+xZwEifOrBKU37nJtAuozQTDSFBnYc/EmgEBAyoxJnjITbn0/p/W0dnZnMhGdDb1l5Zcp4ooEPB19NZU5MTpSUI8/7iXMGkVaTOh2yLg3bbwzGcGAtrhU4XPe5LbkLrxZWDtoyX1ZX9K8iIqCZl+9n7gXyTF4JLCnrXHAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="10">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACQ0lEQVR42tVVoW7jQBDtp5gaGhqaGgYGGpoaBgaGBvbASSmpTgVRFWCpAZFiYMkGkRxgsKDAIGBBgMGRd29mbQdVV7W9ShdpNJvx23nvza6Tu7v/9ePtGvg7A/+hgfezwvcR5yR9MvAem1uw5u0ZFPXviIWIJAHJ/S1zaTX7PxqETx3CbXcT85VCpKmOmTnYk+jcI6itEsskgrxDVPRILeAXFl7RwWfNO3xSiCcE28Et3QmR/2AQ5hbhwSJi+CQLBhEhI9gxKCI4OIz7zn0U827ikO7iVyA+gSQ9oi0bPRp1HnM9z4G0BeZ8PiuJI2Zecy01iTOQFMzsMROMAcKSU5O7QzFvE7e9kkqzhHnBjSmbROKYEbGWGEeado5oxojqHlnvBCWCN66HiJH9ijs5Q7HgmWU6E7Fp13jeJgqoygWaekkQxbQOKOpnV2D5mwStcxoPbkVQwvqsc8SZdfWA05Je/XWD5rxEc1pifiGWz+NymBS/R+w9CRHgschwPGQwZq1CmtNKszQTkv76S9eCk6bW3uNln6IqFlo37YrrTNcV93WvfJ6nsJd7HPeZZtknXG8exbix69aa1UHtXHSclggU0pecQs+rYZ0qYVUvpmci3hgXx1EU492XUYjEmebBXSeTYePjIdVj00kNAhVXLyYRIk5CXdfLj7+OQizxvEvpxI3WkbmpjCK0vr85bSjE2s3X/SAJyeSaxOPY9UyHezIeUfUZx38VcnJOx8tVlSJgNd2Tb/tTknO2l41eVHmVP9rnD/NFCxuaQAv3AAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="11">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACIUlEQVR42tWVrW/jQBDFCwsPFi41NDQ0NQwMLCy9vyLgwIGCgIAAEwMD62RgEGCpAZEcUCkFAQYFhgYHDI5M35vZ9VWV7qT22koXabRrOTvvN1/ri4v/9efqk7gStr4Tt+3kc4VzWHGSqO7NdoO4XS9893HCEKRIVMDKXuLDaGuOZwCp4dk17wzi8k7cpjPnFcT2AwziG8vCbChH1CITbW+l+deMuHU3O3Zbi46iIdIYMGkvktSDLM4iiyP2u1GS4yRxC0C81/P16XUg4YBGRDGARACIGfU37FedgXgYdwvQAJsbrFvdGUDu/QQYZOXPwj51KriG4HcY6p3UiKqBHSaNNuW+GXSvZQnCKJOu7AH6IDzBS+sRLV/ty1g+y4jWqnhRT3Y2ROJq0DU6jupMo4aDGF1PxwTkBLD2armHYZ9QnA1a2JkwMZqhrS9t/mx8w2iFiFSoMoG49SBwkJwndUxxXZkNwnpAhSp8+TYWuVrjA/UAfx+32kdBaoozyqKfnc6j6FeFK3y6V92cLbf5fWdoiV/TjBHmPEE3pwBJykGyBj2AkqTsdFiKTLAfUvYI+iHZ2/+ZEb2kcO5L1clVdZLL2x9vH0cVwZgpTAGA/WRiAYSrLwXf8XnxIBIdrEnf7UKK0YgZZvx6FLn5KXJ9NlvuRbJ20rtg+Yj9AyDux4+7kimU4dJZEgAgX38hOxDNDqIZ+LSPEtO8uIdRePf2iJ8AkT7BKeWMTHEAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="12">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAhklEQVR42mNgGKpgztI5/5Ex3S2u7mxGwTR3CC6Lae4QYi1Gx1GZSWBMscVAJhjDDCTBYjAmOUTQfUysQ3BZTHTUEApqXA4hZDHBNEJqHKM7hFiLCTqEUBzj8impaYVg4kQ3gNggJuQQknMFqXFLyCF0LweoXiCRUQ7QBhBRDtAHYCkHyAIATRZdO8VgYzoAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="13">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACNElEQVR42tWVrY/bQBTEAwMNDU0NAw8eDQwMDDQNDIwKqqisBZbOINKZRJGBZRlY2gORHHCSD0TaggJD/xuvM2+zl6hqq7b3ITXSUxwr8fx2ZnYzGv2vr7DoJCqsxFsr44+VvJtwd1xJVS4k3HYSl71MT4OEpZWg7GSct28Hss/n0h6WUtULud/OpHtcyb5I5KYeJM6tRBmAil6CXSejzLweCFdrHpxwd1zLfjfXMXUipklk0gxyexwkSNtnJ4IMTtCN9AXRtF4UK+WKTbPUoQv7Yi79t42DgTM3DwN6YCRCH2JcTzCEGH8yzo2/AaEwRe7SqdznMxWvigVE6UQi9rRWAMJ5Z+LMukLu8I44psWgUGHq3Bh/MYCpnCu/etFOCtqntXs4P0PcC7eHlbMe96+d6fvPMkEZ2QWKx4jjtmQvepmgE4RSkPQMghld7xq/Wgox78u4jO+ymQrynjqSXeLQCOCG/bpR17SIEIwfBxUn1PQJbhwAB8gwx075ULn5EYRiPlPfdooQhMJ0oKM7APFOMI7rmPg70ywkAgRd4RkR1xBmNE2vMYWA/O254dtOi7nnKeQb72PwTrQA9DF5N3hfhTm564ZGA1ei2v55GZ8fmDsBLacCLfUeY2uPS9eJs0s+Pl4H2JLRoddOBLv2Zdvx0hPXfsJpR+DMTyFYXHyPW/XVDiQt5HnVVe12iIfguA64iAj5ZkcyxTSC7LxldbWJQhHy3f6U9Mw4bVDWta78X5/zHZ1ZvLB/eOxTAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="14">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACSUlEQVR42tVVLW/jQBTsT1lquNAw1NDw4MHQwEKjKjqWgkgpqFSTgoCAAEs1iBSDSDaw5IACg4IFAYamrzNvN70rqO7UL+kijXbzIc+8efNeLi7+15fZdmLWwHIv5raWbyOOyl7MfSfR2p963zmJmgFn/3VClBDk0T2wASqnIuKNk0kxyKQEDqPERwBiPs/qvBZzU/tqaTmqNUUvNge2TuJdIIYAklsK2Pn7BHg/8bLWClmtuQ3kN506YAunhIkT+XEUmVQgoxCe7SjJIz7vAXxPEe5p8e9CTAESWG1Lpw9NylER48HxEp9fd2IhgrYnu1HSSvSkC2kQM21F3+93M+n7hXRNJg/FVLrj/G0h7K/ZgByVm2tUf1VLvPb9jYEIVdvQc62+8raTSFuB36QgnopIehCtugaxe1pJXV2CPJP6cCk9RPB8TRzSfE63ksEB2s/TIlQWbYgA7W8zauhiEvMOy9NB5Cdsn55EhtMdsFIHujZ7caI/i3ici6Mz7R+OmPy3iJc7e7/1ghRM/wHEaAExgRusPml81dqSxtvv3AJYyUM59WLKmZ4URDfebgWJuWQw0xo8JF5FBEERgmhJvAntKLwLtJ9tmZ98MAeQ9/1csa9mWvkr6/8aRgrIw/ghE+aXzwZFkJzLh6N4DiNd0Gy0fgJsOyi5Vt1kHxtHdYFCrvY+F2H+mRcVUPgpoAiK4fhlCCPFfN5CKoMja58PToi2IHd6TxlEWM8tyF3wdX9CIaRRWE5cSpyS80L6vn9DuBGdhSCY733OM8S85MLHyAKwAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="15">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACUElEQVR42tWVr4/icBDF90/BViIrschKZGVtJbKyFsmKS8CsQJANgoSKJosgAdGkFYgKxFcgKlZUnHn33rTcj+Tukg27myzJZL5pE+Yzb958+/DwVX9eXsNb1xg8HjH4dsSnFfZPDYYbh+HWwc8ay17uMMgIsyk/DkSFgiswqYDgDPhFi2FGiJXDaNvAXzsD8/aNwbxb4Rhd0dABowIYXxg8T3iWAqN9izFhgopAVMdnttHcq0h9TlGeEqTfgbhhMEeXXwoEVa9C37kvFTSSvIGnsQjiqTSIN4GosOJ5E+Eli7DLYhwPU4QESF8JcaICWWtgAc+SXmMY8zwh2Chv4T/WnU96rwxuMP8bTVkkLBijuc4tu8vc4rifoq5SO6ccx5wR0Qth3SmhEajokBBDFpIqgtKzUa+Ktyw7RRQrgix/25qySPGyjyEAhXMzBiHy2ELvd9sIDZ9JifI0tWft6wLhpRvLWN5Q508svGZRjkHFBSejevtuU7xVr0T+FxD9uTpVluyCUtcah0DcefYT4gbcNHPLET0SUZGw6sx5U8WUkFkPrSljAMvS4t+jqLqOZUABlFViZ1OHEILZyRvb2IAnGoU2hF2PtRFLZ/m2mjYCSq8NeZMZ3WVm81dBU4dKuHpm8r/kEfQ+pAeStjNjzDxip/KFyX5g8XO3mt4998IfW0GgI9UwqJsqBJm6zpC2CUV/UfX3wbtdSCr2vA5RmwqJjUkQzi2QoAdQcZoy4Fg+7Eo2BWhS2wyubKS7Ad3FFBT4vI+SjNhcF2bU8I6OfwC3fgnHe4r96AAAAABJRU5ErkJggg==
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="16">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACP0lEQVR42tWVoW/qUBjF96dgkZWVtUjkZGVt5WQlFgnuzSAQhCCagGgCgqQIklYgKhAVExUTFc+cd853C1u2ZAvLtuTd5MulN4Tf+c53brm7+19XUSbY7mIs5yHCCvg1cH0eIyc43z+gOo0QPQMRgGHJOv6gkG0Wo6rGKA4J1mmEup7QgQTRGUgk4AQMKGDI5+F3OnLpNCe4Pk/MdlVxTKwEe6g7AQfg/ug++2WL/qL6uhBB1a06VcfFcWRVVSMbQfv8ByFBSUsgwTH3YN8a3NvU6O9r+KcW3qFBf3ODEIFVy1WE7SbCeuPmne/oRDlC8zQxmED3ZWc7HQiyBoNdi8FjbXuQNvAXFLFpzAmJ6K0KfGj1ljABzF6mfE0BF3B1Gl+t1zi8FUFnZ3vUsDiKsHQjCCQga01AwGd918voypwiHgurVx2PsVyErkvVwe2y30TQfgF1LkHrNL6OI6C9yoBcGAg4I3DBzumGHJAQ6z4lWHURsGDNJSTHu3v9Ou0G4q6zmkIb5sGc6pxomsm1W2/OLgnzj13nOptV1n1vRtiqctC34Hej6NJe12PbJUwiwr/AiHdeYi5OKHw2Z8LtBpzgrJ86cJ8C5EBPJRG3hFEgzV9BiznjmAJ05/WsAOrFo249ChDMV+gYOC9zoTPLVy54H4bvsxXDBStU0jVrBa92ZwJqBAPZrquXujKbP0v9rUv2D59eHLDuBZ0WNmsl3Cr9ZvDb5TP5dq3Slztu3XbJ/rU/pX7WBWyaW331d/4B+NMC1rjos6YAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="17">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAB/klEQVR42tVVLU/DUBTlp9RWPln57CRykv/BD0AiEBMTFTUVFRUVT1Q02QRJJ0geAlGBmEBM1l7Oue9t3QKEAIOEJSdru6Tn4577dnHxXz+J85JUwGIlSd7LnxGn3VZSEKfNIEnpAxyuW6DxvyeEhGkL8gLk9SBmsxPjtkign7AXc04hhsTlIFkLQgjIHkd1m+ZeTMM0hjAKkjOFLt7/NJH5g4i9H5U4c0AH1FsxAMnoPtuMYiCAiSQQlCCdpPaTIKLxXxOSIdr5KDJ7BNaj2HonlgLg3BZbsTlEFENAOUGToAAKuVkF8iKKUUG9pvIx8RMI4Mg2ELARmTvRa5JbprAOCdh21BRMHZxrN5jCnpwduAPZMvaCz3hdHYkpjrbGPOzk6kU0UkZOzF9CAiTht30OYmbdKJe4T10YhfYAwnQzulBQdc0e7AUcp1BFkfl7QjhTvExFIHoWTIFnhEUnMvxmMIqT+FlEjmDpA+Gyn0axOHLu4tpGAR+OYob4OW8S0Wm6DiIOZYTzzEVxFMAk3DA5u169Xc0ypvKVMnI0PHA0mQpkOVaxjNFzLdEXjiAtYtylP0UXV/Kn54I6Zho8fBb+UDyeCdp8kt/2U+v3rtsQ+flOQo6CxC4Qq3tGftufJlD1it87kqvhICCph+n4/axcZ/83LOKOL0LpvvueV8nivBN16X1tAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="18">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACQklEQVR42tVUr4vjQBTePyV25MjI2pGRKyPXVlZWHeXEQc1CKwoXU46IslQELiLQiEAiFhKxYkTFiBURJ2Lffe9NuqUcy+4t3YMrPObHy/u+731v6M3N//pruzkdyik9pDH1zyv6Z8TuuKQaxHU1I/u0EHI5NzPE/POEHIopWbukFiQ/sztybgUHsM+nIoLz7eMcMZP1asTSqV1Id+64Ets5PBnfLX1eHFnSwy6WvQRc+TBxVBHdOqJJM1DUEMgWEkIGATT8EBJxplu8CGJxYdmTeSQK85506Ujl9v1C+ONJNwjAbUd094QVAnTTy8yHX98pRm76TBRb5DmOOBORacaakZwjQt4AQ2cQUrnXhXBSui2JogLgCFNACM6mHASIhbAb8dETRQBmoVHnv2FCgxy7x2Fy1FcDTYCjcwjYW4kgqc9CAnQcpC0F25ZUaiksejgA68cuWH004Jz1XhyfIWbCOQCHEM3fh52/03uHPe53jvTWkt7ZC3KFu2DTes4LIYkXcRKiuBBgGvNUGfYF9hCnKggEuMlAkjovmDtMrIRKfK0QrWtPhHMADMHf+Hh1FPLRHlGMznChKIcwiFTrlnTqxYkLbDG7hRmHuDNJL/fsgNr4ZgST8fbt+x+jFMAiKb7H+rWWlUHFVjgjXbPN6XmMvAppMUb2l8R/CGHyk31fDhckMiKMQW/8/kUsr7mvudofkgCyIzxffiNrPw71rZb17EAt8Wl/yULCD/b0wLbjO3nrcV1dCLvBpPcHsf2jOL8BAQzkc/Yiwa4AAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="19">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACN0lEQVR42tVUr4vjQBjdPyU2MjKyNjKyMjI2srKyticWeuJga1ZUlFIRaEShEYVUFFJREVExomLEidjv3vsmuestt+zt0j24wGPIJOT9+iYPD//rVZ/GsiszWS0SsdeZ/DNic5lKBeJqP5LmPFFyvT+MgPHnCdltM2maqdQg2eSpGDNDAiPZFJmK4PP6OAZGut6NuHdKd+Yy09gJR8a9KYRNukSmslomP58xlQ8Tk5Ru6ZSO6+NEoWQQ0H5/cmKYzGmiZHz/Vlx0FIkakcGplXcRE6t1Krsi1YjprkLcJOo7J9ltMq19UnFZK5LsgatIDAFhaSXctxLkRoKjfV0IFe+6PtUBpnwDAT0x4+3dVTfJWDtzwwgByQWEcJucRTE8AFhTiBlAzABCvEUt3rz6JeRlbMZMf4ud5CrkMNJ1k2e6zwr4LgXzwynIh3R+AlHZSrgwEkFAWFjxSyNe3oi/aMR7hoCt+YOQ7lzfTnvfO/cMErAQxjpINkbUKd3ZziW6jvJWBrlVQSHWaIv7A+IvDERYR/7N4fWp7zq9Pd9OzFhiOIpLAC4jkMRwPARx0rq9AdwmhUhAp18r8ee1I1XX2FvXfz+M/fmmY/aZwbXGzMlmtMdWBUWIm+CQMWKNfN1IcLAu6vydxC8vuoyvzmGMiOOz67hH8Ixuv8DtEqRriJh3PRduvdsPiY5CdMl+6dBHjwHIgsdaSSmA8BaV4tN+yXTlE+x32bllzG8N192F4Agp6eMO+LjjH9KwCMHNaVe4AAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="20">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACS0lEQVR42tWVrY/bQBDF708oDDQNLDQMDTQMDDQNDAyqogOVUlApB066kFNlUBAQKQaRHBDJBpEcELDggMGBBQELSqbvza7dkqq9T6mRVjMZW57fvHlxrq7+10/0tRSe/qqWflbLuzXu3ZTC8yEDAJpH97VCtPmbNY73jQyOTuLcaiNO3/tUSO9zIdGX0tcygiDPzeuBDCuR4aNIckLMnQyPIh83jfRvPET/3kjvNgDwAErjxuj1Zzeuq5nYx6XEBo2tkzEghoAYPYjElZX4e6NAcdZIcna6EsLye3Tt16QgVGT3BEXKairlYSrFbiL1aSbNw0JSNJ2Jbz42TtUYACIBHFcywHrGFsqssaY96ifXrUnXAoBo/RePsBmbc+oS0xNgu0kBsBRznisUr4/ggxQw6QUwZ5FJgwigMSJ9kmQEcgoTXRedObsY8l+Nj74ZH25Oc6H0rLUQxX4ixsxVCR5jFmrGFBMPDk5ssxBx33RqrQUFqFD/tvZeWQU16JnMeH9QldVvHmkBOGkbGzQrA5CCBV9Ye6eqWLuUbZ5qznsmlVeCKxv9CMbdI9/hHJDvCAZ1APfnVRznOjVXwmmZl/upfrfNUtVwAOBqFKxVC/c1UENVRG3qAHAOigBoAFXio/13M1JuNSNhQiPNK++VzqyoucsdIP2qOAAPvZJcvAoJlHnRz7Ez5TrtDMlIheowMUF4j9G1ecVYf7UXkkp98A9ujanmPczUK9vcK8UV8PqbvZKpRvueoCGpQFvj9O/2p6QK5JMg9/zZjX8CTEsEAZI+lIoAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="21">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAABfElEQVR42tVVoW7DQAw9WFhYGBoYGBg2RQVTpIJWChgoKCgYGBgYGNh33+7Zfo6jVZuqtJtW6ZSrk/g9Pz9fUvqvv+a4yt3zWlZb9r8H/JQyloC/bHK90z3jdwPuATYmXfuUh7cq91glPrxXEmtGXYjdvOL2vM7Vg17xHyBC6lH3iEENEMEziIPMoooJHsGkSiMEHwCUpHgPRBGnQlcpcglY9pYM++GjFhB6AUT6181U/W56nx6R575TREBLIoJLT01WVigKWGIkrLZJgU36ejt5wL1R7uEqhJHfMGbAsYdIgORkLjFUaNXENpCcE9wnrz7mxfN471CUi36CkrO5FnkL2/akgN5bEjCJmbCxieBe5I/KnVZfvMF8P7reWzJOQKiAxGKlVMKNauZ0HwRvXDd+RoDyM4bKOH4wJ/ZSrfUYvujCO7i/6ByIhoqOjj3mNOAqbTRv3O4kLJV2Z03uUzLqFMzGDa0oz971W+BngynDNjR/8VGSM2HB2f8JRvClN9IGbE8AAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="22">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACO0lEQVR42tVVLW/CUBRFIpGVWGRlZW1lJRJZ26CqlmZiaeaKICmChBlCEM2CIAGxpAiSIkiKmKhAIBD8hbt77uN1H8m+P5ItuenbbXPPueect9Vq//XHvG6SOTBV8fnPgJu9JqHaU5vMsUnNiwaZQ5N0/9eAraFFxrUh1bo0yGYC1tQi9HFGT79H78eAHR6GzVqDFvljl8y+2hbbA6h+UVdKcK9x2SDjypBvG6wMyHwZuLyPqNiEdDgktJh7VGwjqbKMKkLugBXotSictylIXQHEu3q3TgYrohX6lCIARt3OPMqWngzO1wHlq4CiZYdOx4TPvpCL+XdUtg1psgvkDGLIBYgAGKogIwjrm4oUPCRb+gKAc7ELacEEAFzuQCqmDMD8Ln+izGTLxFiBZOWR0+c8MFBn6kghGyBgpzbVujW5LahnYcXg27QjWyZzfm4COWNDkOiwzABEH4QWc7+yI7vzheDplJC2zLuxyR1blKxZvZlbWYOs2DO7sg+EnNR5JAIwbIihZRkrAls1FL3ojuXnrUFOKwHgOG0zMV/6IAF75MyqhWwJVIKqL9V91QqRd5+wxLE88bEiw33YwGS0EgDRNmk1vIEt/cM+lsCisjMp1IfDqAfK87zdAcqI9J7YhuunCcp3sO9sleSGS7behN+7jtWtWAWSBwWmVBG7diqYCduhNy02yMbo5/4gAQRbCyADx1O3IoENAaotyr+z8btEztdVhytfg0BU5eTP/inB59NxJEHFVf7qnAcPbLZlMU2ZQwAAAABJRU5ErkJggg==
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="23">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACPUlEQVR42tVVLY/iUBSdn4KtrKzEVlYikVgkshKLZMUmjBmBaAiChIomVJC0okkRiCdGPIF4YkTFmrP33DclzSa7yczOTDKT3DwohPN1z5uHh+/6115SnMo5dtsp4nOHLwO2zytUAlydFzDXJeIGGBsgbByC3HwekVMxhzErtHWK42EGa9fiQIqkBiYXIM47RLlDdJGz+SBHCNQrrQTYPq/Vdk7bpDp0JCoc5r+8E5xIIomuHUb79v1ECEq1VEoibbPUMWapEXQvG0+GzlyWGJcdEnEiIYHS6fsgM0riTUQIzNntZzjlMxxzn3dVLhTI3dZKgOSGzpBQIvsQZhbx1qkr0cEikAlzOTMh8q8doZ0nASOA2itbfhQCPbC5ru7WVwNnnFsrkc5tMC46hGdRf/Az+tEi3BpMhFh89c6MtkLkscJA8Qq7bOpVcmp/UqGS4B7UqT4noeNhfo+D9pOgkpBo4jO0kvFNwPai+lEI7L0LwV7iYCQ/Wz9/Eul7Pdx2BZKTz6wQdaKa5Pg9RkPgPqaJtCHtPDCryTjYjqnzSxkUFqOn9k7gr1H0mVq70pPEPJlUSZDMMBp9LZ/HrKPYnEj+Y9ZRiESZ9YtI4MK8bRl7e/V8raKlM2r9TGOjU3w+swIs4KFYzZNkWMNA9mF0MP9fx3sryoWq9dV7dUWcSgrpv9isVZQ9UNWFV/6hd3+vmsD9cmpE4gprp9dyLaqz9vOu5L6uWkHeCbXfDV7JdODL/ilx+dxto0Pw9/7Ob7W/DzcYBXyyAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="24">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACK0lEQVR42tVVr2/CQBTmT5hEYpGVSCwSOYmsPVnZTF3mOrGkCBIUIROEIEiKICmCpAiSTiAqJhAT/Rfevu/BwUZGlv2AZCSXu757fe/7cVcqlf/6C0dt8bqeDju9las1rj3UhMProfnAk3DS1nW9W5dGr3E5ICxeva/qqN9VJVr60p8ZiScdCWe3YnpN3XMA/5wxGQ4XRrxHT8xTS9nzebg0umYsgC2dbkNzCebm7ubnQIqNlXwVynYbSzL1wbIj/bkvASQnoLQIZTzzZTiFAjgDjHGOMey8o8/NUVOyZSDbl0i+1ZhjPPElRYMEMrNItgjA2BcLIHxOwJwKsGn2bCXZhMq8BOD8OZQUe+ncSFFESoQkcuSdbZyv8RKala8ogDWLJADAxmxSbCKVlXsZlUFh9R97jCfI57vZYgeYJJhHW1iD9TQOEJyP1wkFxqMdK/qYrQJdEzVlJHIWYpyAkqnRovnaKkMWL8tYnGU8D7SNYLivgNkYgAsHArkkwBpHBT6RjQmcGdtCAcrLAsxjYTZ2NvH5ABY55WtfZz0veP9U3bNWqLwvMVhEOo/hu1ODIMygeVCCcppBS1XgNc3U612czYrC6kj3tnyQ/qufk1fnE9lS3AbapkqBjVPJSc0Y7XRAuP+r63i4FQCUuWaYeS1dQ43PjkzzFc9G/+8+SGxyYP3Ob/V07zstcuAu9kl215UA9NotCcDuD214vT8lHkSedItDym/ET+u8AfUc39TwIyvtAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="25">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACV0lEQVR42tWVr4/iUBDHV1YiK7HISmQtElmJrCUnLlWbZsWlwbHiEhAkrCEXREMQJEVsAoKkiE1YsQKBqFjBvzA3n+k+cifuR/Z2NzmSyXt9fW++P2Zeubr6X39p3pVgHNQxaMqHATdvm0IEEwWeBdK8btjcrb8bcHvSFn/gW7RufAnnobTnbWGdOWvuPWtvrrg1bon3yZPga60W9QB5155k9z2ZrnvSuGlIb9yWRMvTUGcg80/AALjR2W0ODFpGKJl1ZJhH8m3XN9D+vGNxeEilWMVSVSM57FM5PmV/TyS8CyXMw4tK5iRNV5EsFChVpZ28I/Gk3sN6pjHcxeJ/8c0NiHGmWPfleBxKpCWCxOHxN0ToZBI6cJIxYisgHEatA13sE/E+ewJhR/D8PJKO3op0GRlgqeqrk7rwmFqUu0S4PYwXYJI4qwHDYutqtRtrqSnkim1fFmorNcfuQpOwP5nr/CmVZNk1uzdbBVnXZDb3dWkYceL4QgJylT4fHn5wBMXUFQeC25YpQsF0HctIlWNtqQfZM1KFhZI7nDJzCqtxgXfltp4DCiF6wcjoHkb6Azd+WQqS+HqlUFGq7XVzdQ3IqWLPcBapaiWiBEtVzTpjsVK1eq46qeJjZrFRUij/yfo//WhArI/vaKDhxbbRqqdgsSzyntmKGsoCgUjLVe5riwFzpHDi1deRZMRiGRsZymKJdcSlukFTey5feoC9pVp9Pk/f7oMEiFNNw1JbAN2dR3GlTjly7/ZJBpCGcs1V7pTEPjObefdhf0o03/l5Ktk2th55bZ7vlm2RtXeU/5AAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="26">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACSElEQVR42tVVr4vjQBReWVkZGRsZGRlbWVkZOXY4FU4sYcUR1nVFIRWFrikloiwVhVQUuqLQioWuOBGxIuLE/gvfve+ls+yJ+8F1e3CFIdOZl/f9mDcvV1f/6y+89RGOQ9j7HqqnFP8M2L/zwRFOQoSzEP51V+du/WLA0SSCd+vpCG48xGWMbJUgLfsodkbX3D5jPwzYlj2kyz6CcYDOp44Cci1bD5CTwKKPh4PVNc69L57GmvtY185S7GwlqLObCpk43wn4rAczoRMDBZ+uDQqZH58yHfvHFPtdiuZliL8C5lyBOS8juL3eogWeP1pMNwZakBJHEq9NgeNzJkQSbDcWdT3E8ZChWhmJN/hlcTERrXVWcq1701VLOSco96g43yTIZ33UzVATM9773NZAthyg/ppjL8CMpxMkRTfq51yfb8CpBDtlBGMCrepTdSfjCFnZgpIA/89F9VzUzUXlgzyPYvFWriKVbgWsERdevxXqAI/COVELiam8Q3KN/B9u3jlC9SQRL2KEd4GScsqdxXrWUpBWzn66TtQtKq/WtlUnie2sLT4qbV4KtV7JSAyfWh9C5Lf33AHTQnuq/EpedjfCjOU4xD0jZNiMqJJWVyt7AhfFda6jWCZK8Afr/6ThENTdax6PI+WPfCSjqK0DGcYROKR6Y0ia75CIqj5kOKvzMRmPhiRYF60rbS/gvtaNtGV1TBzSYxyF6tTHdUJew1GgyQnqOl8sDed9S2YMYy/6LXjrDXRGWjIBO9edy34LfvpREjLn9P7vqg9kQ79shN4AAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="27">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAACMUlEQVR42tVVrW/bQBTvnzBYGDpoaBgaaGhoaHrw0HTQKkuZByK5JKoCLCsgkg0iOSBSAiI5YMCgwKDAYKD07f3e+bwUbNW6dNIsPeWcD/8+73Jz879ezdlQvVNUrCJS+Yz+GXD3NKcDAx/2mtpvCfXPqb0/ah7zcUTqrSK9DqhhkHITU9el7ACvKyUk8HlzMjxaXq8G7JRCXfeUiu2Yx50FhCNtmwyOzKnII1nLsCvvBvYXPk3uJ1SwonQdMVhCejkTF9RqRi/fM0uGlbfnRMDgTj0Qy6qYo7FEQPKPgPU6FHCsvaVn1yufHKmkiiheTIUMnEk2Ib30mTjRczSuoEKunY+xNUz0l8B4sHc3EQAMVMZQzANAlQcUfvUpePBlrRgUD+371JaRCbhCGhZwGVu2jYWUxHS2cb0Cdsrihynd3t2St2DVXz6RqUJKlgGVUMM/KtnWYh1LHBgohM2OhI1AS0Evi+mcaB0J/m7H98UlEad+mk/Ju/8spAyr1Kw2Yrs7FOxoM3U5A7hmUvNVOD543KKsFOrFJZAZdovslLP5fRRuQAqOmDzkCSjdKy5XJPGUG1u+ciibcwPvF0zC7Q5MPZB6Zf1bl+tBynmiZI87tv+oButj2W5SMFYj1m/dYWSjAjmMqP6bAwq2YhAF8j2MYEbsRExSMLxf/VTaHLUU86pn/6j6ZLeVIwGFst+5J47cx/0JnaxSV67DHgTsDrjqEfzWhZz750yajiP4vc/5ASZt46J2q67KAAAAAElFTkSuQmCC
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="30">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAF0lEQVR42mNgGAWjYBSMglEwCkbBSAcACBAAAb475JcAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					  <tile id="31">
 | 
				
			||||||
 | 
					   <image format="png">
 | 
				
			||||||
 | 
					    <data encoding="base64">
 | 
				
			||||||
 | 
					     iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAF0lEQVR42mNgGAWjYBSMglEwCkbBSAcACBAAAb475JcAAAAASUVORK5CYII=
 | 
				
			||||||
 | 
					    </data>
 | 
				
			||||||
 | 
					   </image>
 | 
				
			||||||
 | 
					  </tile>
 | 
				
			||||||
 | 
					 </tileset>
 | 
				
			||||||
@@ -3,6 +3,7 @@ require "minitest/autorun"
 | 
				
			|||||||
require "mocha/setup"
 | 
					require "mocha/setup"
 | 
				
			||||||
require "linguist"
 | 
					require "linguist"
 | 
				
			||||||
require 'color-proximity'
 | 
					require 'color-proximity'
 | 
				
			||||||
 | 
					require "linguist/blob"
 | 
				
			||||||
require 'licensee'
 | 
					require 'licensee'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def fixtures_path
 | 
					def fixtures_path
 | 
				
			||||||
@@ -10,8 +11,14 @@ def fixtures_path
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def fixture_blob(name)
 | 
					def fixture_blob(name)
 | 
				
			||||||
  name = File.join(fixtures_path, name) unless name =~ /^\//
 | 
					  filepath = (name =~ /^\//)? name : File.join(fixtures_path, name)
 | 
				
			||||||
  Linguist::FileBlob.new(name, fixtures_path)
 | 
					  Linguist::FileBlob.new(filepath, fixtures_path)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def fixture_blob_memory(name)
 | 
				
			||||||
 | 
					  filepath = (name =~ /^\//)? name : File.join(fixtures_path, name)
 | 
				
			||||||
 | 
					  content = File.read(filepath)
 | 
				
			||||||
 | 
					  Linguist::Blob.new(name, content)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def samples_path
 | 
					def samples_path
 | 
				
			||||||
@@ -19,6 +26,12 @@ def samples_path
 | 
				
			|||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def sample_blob(name)
 | 
					def sample_blob(name)
 | 
				
			||||||
  name = File.join(samples_path, name) unless name =~ /^\//
 | 
					  filepath = (name =~ /^\//)? name : File.join(samples_path, name)
 | 
				
			||||||
  Linguist::FileBlob.new(name, samples_path)
 | 
					  Linguist::FileBlob.new(filepath, samples_path)
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def sample_blob_memory(name)
 | 
				
			||||||
 | 
					  filepath = (name =~ /^\//)? name : File.join(samples_path, name)
 | 
				
			||||||
 | 
					  content = File.read(filepath)
 | 
				
			||||||
 | 
					  Linguist::Blob.new(name, content)
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,50 +15,47 @@ class TestBlob < Minitest::Test
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def script_blob(name)
 | 
					  def script_blob(name)
 | 
				
			||||||
    blob = sample_blob(name)
 | 
					    blob = sample_blob_memory(name)
 | 
				
			||||||
    blob.instance_variable_set(:@name, 'script')
 | 
					    blob.instance_variable_set(:@name, 'script')
 | 
				
			||||||
    blob
 | 
					    blob
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_name
 | 
					  def test_name
 | 
				
			||||||
    assert_equal "foo.rb", sample_blob("foo.rb").name
 | 
					    assert_equal "foo.rb", sample_blob_memory("Ruby/foo.rb").name
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_mime_type
 | 
					  def test_mime_type
 | 
				
			||||||
    assert_equal "application/postscript", fixture_blob("Binary/octocat.ai").mime_type
 | 
					    assert_equal "application/postscript", fixture_blob_memory("Binary/octocat.ai").mime_type
 | 
				
			||||||
    assert_equal "application/x-ruby", sample_blob("Ruby/grit.rb").mime_type
 | 
					    assert_equal "application/x-ruby", sample_blob_memory("Ruby/grit.rb").mime_type
 | 
				
			||||||
    assert_equal "application/x-sh", sample_blob("Shell/script.sh").mime_type
 | 
					    assert_equal "application/x-sh", sample_blob_memory("Shell/script.sh").mime_type
 | 
				
			||||||
    assert_equal "application/xml", sample_blob("XML/bar.xml").mime_type
 | 
					    assert_equal "text/plain", fixture_blob_memory("Data/README").mime_type
 | 
				
			||||||
    assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").mime_type
 | 
					 | 
				
			||||||
    assert_equal "text/plain", fixture_blob("Data/README").mime_type
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_content_type
 | 
					  def test_content_type
 | 
				
			||||||
    assert_equal "application/pdf", fixture_blob("Binary/foo.pdf").content_type
 | 
					    assert_equal "application/pdf", fixture_blob_memory("Binary/foo.pdf").content_type
 | 
				
			||||||
    assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").content_type
 | 
					    assert_equal "image/png", fixture_blob_memory("Binary/foo.png").content_type
 | 
				
			||||||
    assert_equal "image/png", fixture_blob("Binary/foo.png").content_type
 | 
					    assert_equal "text/plain; charset=iso-8859-2", fixture_blob_memory("Data/README").content_type
 | 
				
			||||||
    assert_equal "text/plain; charset=iso-8859-2", fixture_blob("Data/README").content_type
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_disposition
 | 
					  def test_disposition
 | 
				
			||||||
    assert_equal "attachment; filename=foo+bar.jar", fixture_blob("Binary/foo bar.jar").disposition
 | 
					    assert_equal "attachment; filename=foo+bar.jar", fixture_blob_memory("Binary/foo bar.jar").disposition
 | 
				
			||||||
    assert_equal "attachment; filename=foo.bin", fixture_blob("Binary/foo.bin").disposition
 | 
					    assert_equal "attachment; filename=foo.bin", fixture_blob_memory("Binary/foo.bin").disposition
 | 
				
			||||||
    assert_equal "attachment; filename=linguist.gem", fixture_blob("Binary/linguist.gem").disposition
 | 
					    assert_equal "attachment; filename=linguist.gem", fixture_blob_memory("Binary/linguist.gem").disposition
 | 
				
			||||||
    assert_equal "attachment; filename=octocat.ai", fixture_blob("Binary/octocat.ai").disposition
 | 
					    assert_equal "attachment; filename=octocat.ai", fixture_blob_memory("Binary/octocat.ai").disposition
 | 
				
			||||||
    assert_equal "inline", fixture_blob("Data/README").disposition
 | 
					    assert_equal "inline", fixture_blob_memory("Data/README").disposition
 | 
				
			||||||
    assert_equal "inline", sample_blob("Text/foo.txt").disposition
 | 
					    assert_equal "inline", sample_blob_memory("Text/foo.txt").disposition
 | 
				
			||||||
    assert_equal "inline", sample_blob("Ruby/grit.rb").disposition
 | 
					    assert_equal "inline", sample_blob_memory("Ruby/grit.rb").disposition
 | 
				
			||||||
    assert_equal "inline", fixture_blob("Binary/octocat.png").disposition
 | 
					    assert_equal "inline", fixture_blob_memory("Binary/octocat.png").disposition
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_data
 | 
					  def test_data
 | 
				
			||||||
    assert_equal "module Foo\nend\n", sample_blob("Ruby/foo.rb").data
 | 
					    assert_equal "module Foo\nend\n", sample_blob_memory("Ruby/foo.rb").data
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_lines
 | 
					  def test_lines
 | 
				
			||||||
    assert_equal ["module Foo", "end", ""], sample_blob("Ruby/foo.rb").lines
 | 
					    assert_equal ["module Foo", "end", ""], sample_blob_memory("Ruby/foo.rb").lines
 | 
				
			||||||
    assert_equal ["line 1", "line 2", ""], sample_blob("Text/mac.txt").lines
 | 
					    assert_equal ["line 1", "line 2", ""], sample_blob_memory("Text/mac.txt").lines
 | 
				
			||||||
    assert_equal 475, sample_blob("Emacs Lisp/ess-julia.el").lines.length
 | 
					    assert_equal 475, sample_blob_memory("Emacs Lisp/ess-julia.el").lines.length
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_lines_maintains_original_encoding
 | 
					  def test_lines_maintains_original_encoding
 | 
				
			||||||
@@ -66,534 +63,173 @@ class TestBlob < Minitest::Test
 | 
				
			|||||||
    # earlier versions of the gem made implicit guarantees that the encoding of
 | 
					    # earlier versions of the gem made implicit guarantees that the encoding of
 | 
				
			||||||
    # each `line` is in the same encoding as the file was originally read (in
 | 
					    # each `line` is in the same encoding as the file was originally read (in
 | 
				
			||||||
    # practice, UTF-8 or ASCII-8BIT)
 | 
					    # practice, UTF-8 or ASCII-8BIT)
 | 
				
			||||||
    assert_equal Encoding.default_external, fixture_blob("Data/utf16le").lines.first.encoding
 | 
					    assert_equal Encoding.default_external, fixture_blob_memory("Data/utf16le").lines.first.encoding
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_size
 | 
					  def test_size
 | 
				
			||||||
    assert_equal 15, sample_blob("Ruby/foo.rb").size
 | 
					    assert_equal 15, sample_blob_memory("Ruby/foo.rb").size
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_loc
 | 
					  def test_loc
 | 
				
			||||||
    assert_equal 3, sample_blob("Ruby/foo.rb").loc
 | 
					    assert_equal 3, sample_blob_memory("Ruby/foo.rb").loc
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_sloc
 | 
					  def test_sloc
 | 
				
			||||||
    assert_equal 2, sample_blob("Ruby/foo.rb").sloc
 | 
					    assert_equal 2, sample_blob_memory("Ruby/foo.rb").sloc
 | 
				
			||||||
    assert_equal 3, fixture_blob("Data/utf16le-windows").sloc
 | 
					    assert_equal 3, fixture_blob_memory("Data/utf16le-windows").sloc
 | 
				
			||||||
    assert_equal 1, fixture_blob("Data/iso8859-8-i").sloc
 | 
					    assert_equal 1, fixture_blob_memory("Data/iso8859-8-i").sloc
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_encoding
 | 
					  def test_encoding
 | 
				
			||||||
    assert_equal "ISO-8859-2", fixture_blob("Data/README").encoding
 | 
					    assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").encoding
 | 
				
			||||||
    assert_equal "ISO-8859-2", fixture_blob("Data/README").ruby_encoding
 | 
					    assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").ruby_encoding
 | 
				
			||||||
    assert_equal "UTF-8", sample_blob("Text/foo.txt").encoding
 | 
					    assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").encoding
 | 
				
			||||||
    assert_equal "UTF-8", sample_blob("Text/foo.txt").ruby_encoding
 | 
					    assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").ruby_encoding
 | 
				
			||||||
    assert_equal "UTF-16LE", fixture_blob("Data/utf16le").encoding
 | 
					    assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").encoding
 | 
				
			||||||
    assert_equal "UTF-16LE", fixture_blob("Data/utf16le").ruby_encoding
 | 
					    assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").ruby_encoding
 | 
				
			||||||
    assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").encoding
 | 
					    assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").encoding
 | 
				
			||||||
    assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").ruby_encoding
 | 
					    assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").ruby_encoding
 | 
				
			||||||
    assert_equal "ISO-2022-KR", sample_blob("Text/ISO-2022-KR.txt").encoding
 | 
					    assert_equal "ISO-2022-KR", sample_blob_memory("Text/ISO-2022-KR.txt").encoding
 | 
				
			||||||
    assert_equal "binary", sample_blob("Text/ISO-2022-KR.txt").ruby_encoding
 | 
					    assert_equal "binary", sample_blob_memory("Text/ISO-2022-KR.txt").ruby_encoding
 | 
				
			||||||
    assert_nil fixture_blob("Binary/dog.o").encoding
 | 
					    assert_nil fixture_blob_memory("Binary/dog.o").encoding
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_binary
 | 
					  def test_binary
 | 
				
			||||||
    # Large blobs aren't loaded
 | 
					    assert fixture_blob_memory("Binary/git.deb").binary?
 | 
				
			||||||
    large_blob = sample_blob("git.exe")
 | 
					    assert fixture_blob_memory("Binary/hello.pbc").binary?
 | 
				
			||||||
    large_blob.instance_eval do
 | 
					    assert fixture_blob_memory("Binary/linguist.gem").binary?
 | 
				
			||||||
      def data; end
 | 
					    assert fixture_blob_memory("Binary/octocat.ai").binary?
 | 
				
			||||||
    end
 | 
					    assert fixture_blob_memory("Binary/octocat.png").binary?
 | 
				
			||||||
    assert large_blob.binary?
 | 
					    assert fixture_blob_memory("Binary/zip").binary?
 | 
				
			||||||
 | 
					    assert !fixture_blob_memory("Data/README").binary?
 | 
				
			||||||
    assert fixture_blob("Binary/git.deb").binary?
 | 
					    assert !sample_blob_memory("Ruby/foo.rb").binary?
 | 
				
			||||||
    assert fixture_blob("Binary/git.exe").binary?
 | 
					    assert !sample_blob_memory("Perl/script.pl").binary?
 | 
				
			||||||
    assert fixture_blob("Binary/hello.pbc").binary?
 | 
					 | 
				
			||||||
    assert fixture_blob("Binary/linguist.gem").binary?
 | 
					 | 
				
			||||||
    assert fixture_blob("Binary/octocat.ai").binary?
 | 
					 | 
				
			||||||
    assert fixture_blob("Binary/octocat.png").binary?
 | 
					 | 
				
			||||||
    assert fixture_blob("Binary/zip").binary?
 | 
					 | 
				
			||||||
    assert !fixture_blob("Data/README").binary?
 | 
					 | 
				
			||||||
    assert !sample_blob("Ruby/foo.rb").binary?
 | 
					 | 
				
			||||||
    assert !sample_blob("Perl/script.pl").binary?
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_all_binary
 | 
					  def test_all_binary
 | 
				
			||||||
    Samples.each do |sample|
 | 
					    Samples.each do |sample|
 | 
				
			||||||
      blob = sample_blob(sample[:path])
 | 
					      blob = sample_blob_memory(sample[:path])
 | 
				
			||||||
      assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file"
 | 
					      assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file"
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_text
 | 
					  def test_text
 | 
				
			||||||
    assert fixture_blob("Data/README").text?
 | 
					    assert fixture_blob_memory("Data/README").text?
 | 
				
			||||||
    assert fixture_blob("Data/md").text?
 | 
					    assert fixture_blob_memory("Data/md").text?
 | 
				
			||||||
    assert sample_blob("Shell/script.sh").text?
 | 
					    assert sample_blob_memory("Shell/script.sh").text?
 | 
				
			||||||
    assert fixture_blob("Data/txt").text?
 | 
					    assert fixture_blob_memory("Data/txt").text?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_image
 | 
					  def test_image
 | 
				
			||||||
    assert fixture_blob("Binary/octocat.gif").image?
 | 
					    assert fixture_blob_memory("Binary/octocat.png").image?
 | 
				
			||||||
    assert fixture_blob("Binary/octocat.jpeg").image?
 | 
					    assert !fixture_blob_memory("Binary/octocat.ai").image?
 | 
				
			||||||
    assert fixture_blob("Binary/octocat.jpg").image?
 | 
					    assert !fixture_blob_memory("Binary/octocat.psd").image?
 | 
				
			||||||
    assert fixture_blob("Binary/octocat.png").image?
 | 
					 | 
				
			||||||
    assert !fixture_blob("Binary/octocat.ai").image?
 | 
					 | 
				
			||||||
    assert !fixture_blob("Binary/octocat.psd").image?
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_solid
 | 
					  def test_solid
 | 
				
			||||||
    assert fixture_blob("Binary/cube.stl").solid?
 | 
					    assert fixture_blob_memory("Binary/cube.stl").solid?
 | 
				
			||||||
    assert fixture_blob("Data/cube.stl").solid?
 | 
					    assert fixture_blob_memory("Data/cube.stl").solid?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_csv
 | 
					  def test_csv
 | 
				
			||||||
    assert fixture_blob("Data/cars.csv").csv?
 | 
					    assert fixture_blob_memory("Data/cars.csv").csv?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_pdf
 | 
					  def test_pdf
 | 
				
			||||||
    assert fixture_blob("Binary/foo.pdf").pdf?
 | 
					    assert fixture_blob_memory("Binary/foo.pdf").pdf?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_viewable
 | 
					  def test_viewable
 | 
				
			||||||
    assert fixture_blob("Data/README").viewable?
 | 
					    assert fixture_blob_memory("Data/README").viewable?
 | 
				
			||||||
    assert sample_blob("Ruby/foo.rb").viewable?
 | 
					    assert sample_blob_memory("Ruby/foo.rb").viewable?
 | 
				
			||||||
    assert sample_blob("Perl/script.pl").viewable?
 | 
					    assert sample_blob_memory("Perl/script.pl").viewable?
 | 
				
			||||||
    assert !fixture_blob("Binary/linguist.gem").viewable?
 | 
					    assert !fixture_blob_memory("Binary/linguist.gem").viewable?
 | 
				
			||||||
    assert !fixture_blob("Binary/octocat.ai").viewable?
 | 
					    assert !fixture_blob_memory("Binary/octocat.ai").viewable?
 | 
				
			||||||
    assert !fixture_blob("Binary/octocat.png").viewable?
 | 
					    assert !fixture_blob_memory("Binary/octocat.png").viewable?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_generated
 | 
					  def test_generated
 | 
				
			||||||
    assert !fixture_blob("Data/README").generated?
 | 
					    assert !fixture_blob_memory("Data/README").generated?
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Xcode project files
 | 
					 | 
				
			||||||
    assert !sample_blob("XML/MainMenu.xib").generated?
 | 
					 | 
				
			||||||
    assert fixture_blob("Binary/MainMenu.nib").generated?
 | 
					 | 
				
			||||||
    assert !sample_blob("XML/project.pbxproj").generated?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Gemfile.lock is NOT generated
 | 
					 | 
				
			||||||
    assert !sample_blob("Gemfile.lock").generated?
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Generated .NET Docfiles
 | 
					    # Generated .NET Docfiles
 | 
				
			||||||
    assert sample_blob("XML/net_docfile.xml").generated?
 | 
					    assert sample_blob_memory("XML/net_docfile.xml").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Long line
 | 
					    # Long line
 | 
				
			||||||
    assert !sample_blob("JavaScript/uglify.js").generated?
 | 
					    assert !sample_blob_memory("JavaScript/uglify.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Inlined JS, but mostly code
 | 
					    # Inlined JS, but mostly code
 | 
				
			||||||
    assert !sample_blob("JavaScript/json2_backbone.js").generated?
 | 
					    assert !sample_blob_memory("JavaScript/json2_backbone.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Minified JS
 | 
					    # Minified JS
 | 
				
			||||||
    assert !sample_blob("JavaScript/jquery-1.6.1.js").generated?
 | 
					    assert !sample_blob_memory("JavaScript/jquery-1.6.1.js").generated?
 | 
				
			||||||
    assert sample_blob("JavaScript/jquery-1.6.1.min.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/jquery-1.6.1.min.js").generated?
 | 
				
			||||||
    assert sample_blob("JavaScript/jquery-1.4.2.min.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/jquery-1.4.2.min.js").generated?
 | 
				
			||||||
 | 
					 | 
				
			||||||
    # CoffeeScript-generated JS
 | 
					 | 
				
			||||||
    # TODO
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # TypeScript-generated JS
 | 
					 | 
				
			||||||
    # TODO
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Composer generated composer.lock file
 | 
					    # Composer generated composer.lock file
 | 
				
			||||||
    assert sample_blob("JSON/composer.lock").generated?
 | 
					    assert sample_blob_memory("JSON/composer.lock").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # PEG.js-generated parsers
 | 
					    # PEG.js-generated parsers
 | 
				
			||||||
    assert sample_blob("JavaScript/parser.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/parser.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Generated PostScript
 | 
					    # Generated PostScript
 | 
				
			||||||
    assert !sample_blob("PostScript/sierpinski.ps").generated?
 | 
					    assert !sample_blob_memory("PostScript/sierpinski.ps").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # These examples are too basic to tell
 | 
					    # These examples are too basic to tell
 | 
				
			||||||
    assert !sample_blob("JavaScript/hello.js").generated?
 | 
					    assert !sample_blob_memory("JavaScript/hello.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert sample_blob("JavaScript/intro-old.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/intro-old.js").generated?
 | 
				
			||||||
    assert sample_blob("JavaScript/classes-old.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/classes-old.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert sample_blob("JavaScript/intro.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/intro.js").generated?
 | 
				
			||||||
    assert sample_blob("JavaScript/classes.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/classes.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Protocol Buffer generated code
 | 
					    # Protocol Buffer generated code
 | 
				
			||||||
    assert sample_blob("C++/protocol-buffer.pb.h").generated?
 | 
					    assert sample_blob_memory("C++/protocol-buffer.pb.h").generated?
 | 
				
			||||||
    assert sample_blob("C++/protocol-buffer.pb.cc").generated?
 | 
					    assert sample_blob_memory("C++/protocol-buffer.pb.cc").generated?
 | 
				
			||||||
    assert sample_blob("Java/ProtocolBuffer.java").generated?
 | 
					    assert sample_blob_memory("Java/ProtocolBuffer.java").generated?
 | 
				
			||||||
    assert sample_blob("Python/protocol_buffer_pb2.py").generated?
 | 
					    assert sample_blob_memory("Python/protocol_buffer_pb2.py").generated?
 | 
				
			||||||
    assert sample_blob("Go/api.pb.go").generated?
 | 
					    assert sample_blob_memory("Go/api.pb.go").generated?
 | 
				
			||||||
    assert sample_blob("Go/embedded.go").generated?
 | 
					    assert sample_blob_memory("Go/embedded.go").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Apache Thrift generated code
 | 
					    # Apache Thrift generated code
 | 
				
			||||||
    assert sample_blob("Python/gen-py-linguist-thrift.py").generated?
 | 
					    assert sample_blob_memory("Python/gen-py-linguist-thrift.py").generated?
 | 
				
			||||||
    assert sample_blob("Go/gen-go-linguist-thrift.go").generated?
 | 
					    assert sample_blob_memory("Go/gen-go-linguist-thrift.go").generated?
 | 
				
			||||||
    assert sample_blob("Java/gen-java-linguist-thrift.java").generated?
 | 
					    assert sample_blob_memory("Java/gen-java-linguist-thrift.java").generated?
 | 
				
			||||||
    assert sample_blob("JavaScript/gen-js-linguist-thrift.js").generated?
 | 
					    assert sample_blob_memory("JavaScript/gen-js-linguist-thrift.js").generated?
 | 
				
			||||||
    assert sample_blob("Ruby/gen-rb-linguist-thrift.rb").generated?
 | 
					    assert sample_blob_memory("Ruby/gen-rb-linguist-thrift.rb").generated?
 | 
				
			||||||
    assert sample_blob("Objective-C/gen-cocoa-linguist-thrift.m").generated?
 | 
					    assert sample_blob_memory("Objective-C/gen-cocoa-linguist-thrift.m").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Generated JNI
 | 
					    # Generated JNI
 | 
				
			||||||
    assert sample_blob("C/jni_layer.h").generated?
 | 
					    assert sample_blob_memory("C/jni_layer.h").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Minified CSS
 | 
					    # Minified CSS
 | 
				
			||||||
    assert !sample_blob("CSS/bootstrap.css").generated?
 | 
					    assert !sample_blob_memory("CSS/bootstrap.css").generated?
 | 
				
			||||||
    assert sample_blob("CSS/bootstrap.min.css").generated?
 | 
					    assert sample_blob_memory("CSS/bootstrap.min.css").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Generated VCR
 | 
					    # Generated VCR
 | 
				
			||||||
    assert sample_blob("YAML/vcr_cassette.yml").generated?
 | 
					    assert sample_blob_memory("YAML/vcr_cassette.yml").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Generated by Zephir
 | 
					    # Generated by Zephir
 | 
				
			||||||
    assert sample_blob("Zephir/filenames/exception.zep.c").generated?
 | 
					    assert !sample_blob_memory("Zephir/Router.zep").generated?
 | 
				
			||||||
    assert sample_blob("Zephir/filenames/exception.zep.h").generated?
 | 
					 | 
				
			||||||
    assert sample_blob("Zephir/filenames/exception.zep.php").generated?
 | 
					 | 
				
			||||||
    assert !sample_blob("Zephir/Router.zep").generated?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert sample_blob("node_modules/grunt/lib/grunt.js").generated?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Godep saved dependencies
 | 
					 | 
				
			||||||
    assert sample_blob("Godeps/Godeps.json").generated?
 | 
					 | 
				
			||||||
    assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated?
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Cython-generated C/C++
 | 
					    # Cython-generated C/C++
 | 
				
			||||||
    assert sample_blob("C/sgd_fast.c").generated?
 | 
					    assert sample_blob_memory("C/sgd_fast.c").generated?
 | 
				
			||||||
    assert sample_blob("C++/wrapper_inner.cpp").generated?
 | 
					    assert sample_blob_memory("C++/wrapper_inner.cpp").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Unity3D-generated metadata
 | 
					    # Unity3D-generated metadata
 | 
				
			||||||
    assert sample_blob("Unity3D Asset/Tiles.meta").generated?
 | 
					    assert sample_blob_memory("Unity3D Asset/Tiles.meta").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Racc-generated Ruby
 | 
				
			||||||
 | 
					    assert sample_blob_memory("Ruby/racc.rb").generated?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_vendored
 | 
					  def test_vendored
 | 
				
			||||||
    assert !fixture_blob("Data/README").vendored?
 | 
					    assert !fixture_blob_memory("Data/README").vendored?
 | 
				
			||||||
    assert !sample_blob("ext/extconf.rb").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Dependencies
 | 
					 | 
				
			||||||
    assert sample_blob("dependencies/windows/headers/GL/glext.h").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Node dependencies
 | 
					 | 
				
			||||||
    assert sample_blob("node_modules/coffee-script/lib/coffee-script.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Bower Components
 | 
					 | 
				
			||||||
    assert sample_blob("bower_components/custom/custom.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("app/bower_components/custom/custom.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("vendor/assets/bower_components/custom/custom.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Go dependencies
 | 
					 | 
				
			||||||
    assert !sample_blob("Godeps/Godeps.json").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Rails vendor/
 | 
					 | 
				
			||||||
    assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Vendor/
 | 
					 | 
				
			||||||
    assert sample_blob("Vendor/my_great_file.h").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # 'thirdparty' directory
 | 
					 | 
				
			||||||
    assert sample_blob("thirdparty/lib/main.c").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # 'extern(al)' directory
 | 
					 | 
				
			||||||
    assert sample_blob("extern/util/__init__.py").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("external/jquery.min.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # C deps
 | 
					 | 
				
			||||||
    assert sample_blob("deps/http_parser/http_parser.c").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("deps/v8/src/v8.h").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert sample_blob("tools/something/else.c").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Chart.js
 | 
					 | 
				
			||||||
    assert sample_blob("some/vendored/path/Chart.js").vendored?
 | 
					 | 
				
			||||||
    assert !sample_blob("some/vendored/path/chart.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Codemirror deps
 | 
					 | 
				
			||||||
    assert sample_blob("codemirror/mode/blah.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("codemirror/5.0/mode/blah.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Debian packaging
 | 
					 | 
				
			||||||
    assert sample_blob("debian/cron.d").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Erlang
 | 
					 | 
				
			||||||
    assert sample_blob("rebar").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # git config files
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("some/path/.gitattributes"), :vendored?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob(".gitignore"), :vendored?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("special/path/.gitmodules"), :vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Minified JavaScript and CSS
 | 
					 | 
				
			||||||
    assert sample_blob("foo.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("foo.min.css").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("foo-min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("foo-min.css").vendored?
 | 
					 | 
				
			||||||
    assert !sample_blob("foomin.css").vendored?
 | 
					 | 
				
			||||||
    assert !sample_blob("foo.min.txt").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    #.osx
 | 
					 | 
				
			||||||
    assert sample_blob(".osx").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Prototype
 | 
					 | 
				
			||||||
    assert !sample_blob("public/javascripts/application.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/prototype.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/effects.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/controls.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/dragdrop.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # jQuery
 | 
					 | 
				
			||||||
    assert sample_blob("jquery.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery-1.7.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery-1.7.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery-1.5.2.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery-1.6.1.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery-1.6.1.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery-1.10.1.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/jquery-1.10.1.min.js").vendored?
 | 
					 | 
				
			||||||
    assert !sample_blob("public/javascripts/jquery.github.menu.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # jQuery UI
 | 
					 | 
				
			||||||
    assert sample_blob("themes/ui-lightness/jquery-ui.css").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("themes/ui-lightness/jquery.ui.accordion.css").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/i18n/jquery-ui-i18n.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/jquery.effects.blind.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/jquery-ui-1.8.22.custom.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/jquery-ui-1.8.22.custom.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/jquery-ui-1.8.22.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/jquery-ui-1.8.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/jquery-ui.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/jquery.ui.accordion.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # jQuery Gantt
 | 
					 | 
				
			||||||
    assert sample_blob("web-app/jquery-gantt/js/jquery.fn.gantt.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # jQuery fancyBox
 | 
					 | 
				
			||||||
    assert sample_blob("web-app/fancybox/jquery.fancybox.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Fuel UX
 | 
					 | 
				
			||||||
    assert sample_blob("web-app/fuelux/js/fuelux.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # jQuery File Upload
 | 
					 | 
				
			||||||
    assert sample_blob("fileupload-9.0.0/jquery.fileupload-process.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Slick
 | 
					 | 
				
			||||||
    assert sample_blob("web-app/slickgrid/controls/slick.columnpicker.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Leaflet plugins
 | 
					 | 
				
			||||||
    assert sample_blob("leaflet-plugins/Leaflet.Coordinates-0.5.0.src.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("leaflet-plugins/leaflet.draw-src.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("leaflet-plugins/leaflet.spin.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # MooTools
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Dojo
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/dojo.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # MochiKit
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/MochiKit.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # YUI
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/yahoo-dom-event.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/yahoo-min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/yuiloader-dom-event.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # WYS editors
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/ckeditor.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/tiny_mce.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/tiny_mce_popup.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/tiny_mce_src.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # AngularJS
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/angular.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/angular.min.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # D3.js
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/d3.v3.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/d3.v3.min.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Modernizr
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/modernizr-2.7.1.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/javascripts/modernizr.custom.01009.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Fabric
 | 
					 | 
				
			||||||
    assert sample_blob("fabfile.py").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # WAF
 | 
					 | 
				
			||||||
    assert sample_blob("waf").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Visual Studio IntelliSense
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/jquery-1.7-vsdoc.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Microsoft Ajax
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/MicrosoftAjax.debug.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/MicrosoftAjax.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/MicrosoftMvcAjax.debug.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/MicrosoftMvcAjax.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/MicrosoftMvcValidation.debug.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/MicrosoftMvcValidation.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # jQuery validation plugin (MS bundles this with asp.net mvc)
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/jquery.validate.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/jquery.validate.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/jquery.validate.unobtrusive.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/jquery.validate.unobtrusive.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/jquery.unobtrusive-ajax.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # NuGet Packages
 | 
					 | 
				
			||||||
    assert sample_blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Font Awesome
 | 
					 | 
				
			||||||
    assert sample_blob("some/asset/path/font-awesome.min.css").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("some/asset/path/font-awesome.css").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Normalize
 | 
					 | 
				
			||||||
    assert sample_blob("some/asset/path/normalize.css").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Carthage
 | 
					 | 
				
			||||||
    assert sample_blob('Carthage/blah').vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Cocoapods
 | 
					 | 
				
			||||||
    assert sample_blob('Pods/blah').vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Html5shiv
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/html5shiv.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Scripts/html5shiv.min.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Test fixtures
 | 
					 | 
				
			||||||
    assert sample_blob("test/fixtures/random.rkt").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("Test/fixtures/random.rkt").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("tests/fixtures/random.rkt").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Cordova/PhoneGap
 | 
					 | 
				
			||||||
    assert sample_blob("cordova.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("cordova.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("cordova-2.1.0.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("cordova-2.1.0.min.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Foundation js
 | 
					 | 
				
			||||||
    assert sample_blob("foundation.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("foundation.min.js").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("foundation.abide.js").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Vagrant
 | 
					 | 
				
			||||||
    assert sample_blob("Vagrantfile").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Gradle
 | 
					 | 
				
			||||||
    assert sample_blob("gradlew").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("gradlew.bat").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("gradle/wrapper/gradle-wrapper.properties").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("subproject/gradlew").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("subproject/gradlew.bat").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("subproject/gradle/wrapper/gradle-wrapper.properties").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Octicons
 | 
					 | 
				
			||||||
    assert sample_blob("octicons.css").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/octicons.min.css").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("public/octicons/sprockets-octicons.scss").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Typesafe Activator
 | 
					 | 
				
			||||||
    assert sample_blob("activator").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("activator.bat").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("subproject/activator").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("subproject/activator.bat").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob(".google_apis/bar.jar"), :vendored?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/.google_apis/bar.jar"), :vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Sphinx docs
 | 
					 | 
				
			||||||
    assert sample_blob("docs/_build/asset.doc").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("docs/theme/file.css").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Vagrant
 | 
					 | 
				
			||||||
    assert sample_blob("puphpet/file.pp").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Fabric.io
 | 
					 | 
				
			||||||
    assert sample_blob("Fabric.framework/Fabric.h").vendored?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Crashlytics
 | 
					 | 
				
			||||||
    assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored?
 | 
					 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    # Xcode
 | 
					 | 
				
			||||||
    assert sample_blob("myapp/My Template.xctemplate/___FILEBASENAME___.h").vendored?
 | 
					 | 
				
			||||||
    assert sample_blob("myapp/My Images.xcassets/some/stuff.imageset/Contents.json").vendored?
 | 
					 | 
				
			||||||
    assert !sample_blob("myapp/MyData.json").vendored?
 | 
					 | 
				
			||||||
  end
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  def test_documentation
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("doc/foo.html"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("docs/foo.html"), :documentation?
 | 
					 | 
				
			||||||
    refute_predicate fixture_blob("project/doc/foo.html"), :documentation?
 | 
					 | 
				
			||||||
    refute_predicate fixture_blob("project/docs/foo.html"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("Documentation/foo.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("documentation/foo.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("project/Documentation/foo.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("project/documentation/foo.md"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("javadoc/foo.html"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("project/javadoc/foo.html"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("man/foo.html"), :documentation?
 | 
					 | 
				
			||||||
    refute_predicate fixture_blob("project/man/foo.html"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("README"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("README.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("README.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("Readme"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("readme"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/README"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGE"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGE.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGE.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/CHANGE"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGELOG"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGELOG.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGELOG.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/CHANGELOG"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGES"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGES.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CHANGES.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/CHANGES"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CONTRIBUTING"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/CONTRIBUTING"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("examples/some-file.pl"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("Examples/some-example-file.rb"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("LICENSE"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("LICENCE.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("License.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("LICENSE.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/LICENSE"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("COPYING"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("COPYING.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("COPYING.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/COPYING"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("INSTALL"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("INSTALL.md"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("INSTALL.txt"), :documentation?
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("foo/INSTALL"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    refute_predicate fixture_blob("foo.md"), :documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Samples
 | 
					 | 
				
			||||||
    assert sample_blob("Samples/Ruby/foo.rb").documentation?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    assert_predicate fixture_blob("INSTALL.txt"), :documentation?
 | 
					 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_language
 | 
					  def test_language
 | 
				
			||||||
    Samples.each do |sample|
 | 
					    Samples.each do |sample|
 | 
				
			||||||
      blob = sample_blob(sample[:path])
 | 
					      blob = sample_blob_memory(sample[:path])
 | 
				
			||||||
      assert blob.language, "No language for #{sample[:path]}"
 | 
					      assert blob.language, "No language for #{sample[:path]}"
 | 
				
			||||||
      assert_equal sample[:language], blob.language.name, blob.name
 | 
					      assert_equal sample[:language], blob.language.name, blob.name
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
@@ -612,7 +248,7 @@ class TestBlob < Minitest::Test
 | 
				
			|||||||
        filepath = File.join(dirname, filename)
 | 
					        filepath = File.join(dirname, filename)
 | 
				
			||||||
        next unless File.file?(filepath)
 | 
					        next unless File.file?(filepath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        blob = fixture_blob(filepath)
 | 
					        blob = fixture_blob_memory(filepath)
 | 
				
			||||||
        if language == 'Data'
 | 
					        if language == 'Data'
 | 
				
			||||||
          assert blob.language.nil?, "A language was found for #{filepath}"
 | 
					          assert blob.language.nil?, "A language was found for #{filepath}"
 | 
				
			||||||
        elsif language == 'Generated'
 | 
					        elsif language == 'Generated'
 | 
				
			||||||
@@ -626,7 +262,7 @@ class TestBlob < Minitest::Test
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_minified_files_not_safe_to_highlight
 | 
					  def test_minified_files_not_safe_to_highlight
 | 
				
			||||||
    assert !sample_blob("JavaScript/jquery-1.6.1.min.js").safe_to_colorize?
 | 
					    assert !sample_blob_memory("JavaScript/jquery-1.6.1.min.js").safe_to_colorize?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_empty
 | 
					  def test_empty
 | 
				
			||||||
@@ -639,27 +275,19 @@ class TestBlob < Minitest::Test
 | 
				
			|||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_include_in_language_stats
 | 
					  def test_include_in_language_stats
 | 
				
			||||||
    vendored = sample_blob("bower_components/custom/custom.js")
 | 
					    generated = sample_blob_memory("CSS/bootstrap.min.css")
 | 
				
			||||||
    assert_predicate vendored, :vendored?
 | 
					 | 
				
			||||||
    refute_predicate vendored, :include_in_language_stats?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    documentation = fixture_blob("README")
 | 
					 | 
				
			||||||
    assert_predicate documentation, :documentation?
 | 
					 | 
				
			||||||
    refute_predicate documentation, :include_in_language_stats?
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    generated = sample_blob("CSS/bootstrap.min.css")
 | 
					 | 
				
			||||||
    assert_predicate generated, :generated?
 | 
					    assert_predicate generated, :generated?
 | 
				
			||||||
    refute_predicate generated, :include_in_language_stats?
 | 
					    refute_predicate generated, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    data = sample_blob("Ant Build System/filenames/ant.xml")
 | 
					    data = sample_blob_memory("Ant Build System/filenames/ant.xml")
 | 
				
			||||||
    assert_equal :data, data.language.type
 | 
					    assert_equal :data, data.language.type
 | 
				
			||||||
    refute_predicate data, :include_in_language_stats?
 | 
					    refute_predicate data, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    prose = sample_blob("Markdown/tender.md")
 | 
					    prose = sample_blob_memory("Markdown/tender.md")
 | 
				
			||||||
    assert_equal :prose, prose.language.type
 | 
					    assert_equal :prose, prose.language.type
 | 
				
			||||||
    refute_predicate prose, :include_in_language_stats?
 | 
					    refute_predicate prose, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    included = sample_blob("HTML/pages.html")
 | 
					    included = sample_blob_memory("HTML/pages.html")
 | 
				
			||||||
    assert_predicate included, :include_in_language_stats?
 | 
					    assert_predicate included, :include_in_language_stats?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,669 @@
 | 
				
			|||||||
require_relative "./helper"
 | 
					require_relative "./helper"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestFileBlob < Minitest::Test
 | 
					class TestBlob < Minitest::Test
 | 
				
			||||||
 | 
					  include Linguist
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def setup
 | 
				
			||||||
 | 
					    # git blobs are normally loaded as ASCII-8BIT since they may contain data
 | 
				
			||||||
 | 
					    # with arbitrary encoding not known ahead of time
 | 
				
			||||||
 | 
					    @original_external = Encoding.default_external
 | 
				
			||||||
 | 
					    Encoding.default_external = Encoding.find("ASCII-8BIT")
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def teardown
 | 
				
			||||||
 | 
					    Encoding.default_external = @original_external
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def script_blob(name)
 | 
				
			||||||
 | 
					    blob = sample_blob(name)
 | 
				
			||||||
 | 
					    blob.instance_variable_set(:@name, 'script')
 | 
				
			||||||
 | 
					    blob
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  def test_extensions
 | 
					  def test_extensions
 | 
				
			||||||
    assert_equal [".gitignore"], Linguist::FileBlob.new(".gitignore").extensions
 | 
					    assert_equal [".gitignore"], Linguist::FileBlob.new(".gitignore").extensions
 | 
				
			||||||
    assert_equal [".xml"],  Linguist::FileBlob.new("build.xml").extensions
 | 
					    assert_equal [".xml"],  Linguist::FileBlob.new("build.xml").extensions
 | 
				
			||||||
    assert_equal [".html.erb", ".erb"],  Linguist::FileBlob.new("dotted.dir/index.html.erb").extensions
 | 
					    assert_equal [".html.erb", ".erb"],  Linguist::FileBlob.new("dotted.dir/index.html.erb").extensions
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_name
 | 
				
			||||||
 | 
					    assert_equal "foo.rb", sample_blob("foo.rb").name
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_mime_type
 | 
				
			||||||
 | 
					    assert_equal "application/postscript", fixture_blob("Binary/octocat.ai").mime_type
 | 
				
			||||||
 | 
					    assert_equal "application/x-ruby", sample_blob("Ruby/grit.rb").mime_type
 | 
				
			||||||
 | 
					    assert_equal "application/x-sh", sample_blob("Shell/script.sh").mime_type
 | 
				
			||||||
 | 
					    assert_equal "application/xml", sample_blob("XML/bar.xml").mime_type
 | 
				
			||||||
 | 
					    assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").mime_type
 | 
				
			||||||
 | 
					    assert_equal "text/plain", fixture_blob("Data/README").mime_type
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_content_type
 | 
				
			||||||
 | 
					    assert_equal "application/pdf", fixture_blob("Binary/foo.pdf").content_type
 | 
				
			||||||
 | 
					    assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").content_type
 | 
				
			||||||
 | 
					    assert_equal "image/png", fixture_blob("Binary/foo.png").content_type
 | 
				
			||||||
 | 
					    assert_equal "text/plain; charset=iso-8859-2", fixture_blob("Data/README").content_type
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_disposition
 | 
				
			||||||
 | 
					    assert_equal "attachment; filename=foo+bar.jar", fixture_blob("Binary/foo bar.jar").disposition
 | 
				
			||||||
 | 
					    assert_equal "attachment; filename=foo.bin", fixture_blob("Binary/foo.bin").disposition
 | 
				
			||||||
 | 
					    assert_equal "attachment; filename=linguist.gem", fixture_blob("Binary/linguist.gem").disposition
 | 
				
			||||||
 | 
					    assert_equal "attachment; filename=octocat.ai", fixture_blob("Binary/octocat.ai").disposition
 | 
				
			||||||
 | 
					    assert_equal "inline", fixture_blob("Data/README").disposition
 | 
				
			||||||
 | 
					    assert_equal "inline", sample_blob("Text/foo.txt").disposition
 | 
				
			||||||
 | 
					    assert_equal "inline", sample_blob("Ruby/grit.rb").disposition
 | 
				
			||||||
 | 
					    assert_equal "inline", fixture_blob("Binary/octocat.png").disposition
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_data
 | 
				
			||||||
 | 
					    assert_equal "module Foo\nend\n", sample_blob("Ruby/foo.rb").data
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_lines
 | 
				
			||||||
 | 
					    assert_equal ["module Foo", "end", ""], sample_blob("Ruby/foo.rb").lines
 | 
				
			||||||
 | 
					    assert_equal ["line 1", "line 2", ""], sample_blob("Text/mac.txt").lines
 | 
				
			||||||
 | 
					    assert_equal 475, sample_blob("Emacs Lisp/ess-julia.el").lines.length
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_lines_maintains_original_encoding
 | 
				
			||||||
 | 
					    # Even if the file's encoding is detected as something like UTF-16LE,
 | 
				
			||||||
 | 
					    # earlier versions of the gem made implicit guarantees that the encoding of
 | 
				
			||||||
 | 
					    # each `line` is in the same encoding as the file was originally read (in
 | 
				
			||||||
 | 
					    # practice, UTF-8 or ASCII-8BIT)
 | 
				
			||||||
 | 
					    assert_equal Encoding.default_external, fixture_blob("Data/utf16le").lines.first.encoding
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_size
 | 
				
			||||||
 | 
					    assert_equal 15, sample_blob("Ruby/foo.rb").size
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_loc
 | 
				
			||||||
 | 
					    assert_equal 3, sample_blob("Ruby/foo.rb").loc
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_sloc
 | 
				
			||||||
 | 
					    assert_equal 2, sample_blob("Ruby/foo.rb").sloc
 | 
				
			||||||
 | 
					    assert_equal 3, fixture_blob("Data/utf16le-windows").sloc
 | 
				
			||||||
 | 
					    assert_equal 1, fixture_blob("Data/iso8859-8-i").sloc
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_encoding
 | 
				
			||||||
 | 
					    assert_equal "ISO-8859-2", fixture_blob("Data/README").encoding
 | 
				
			||||||
 | 
					    assert_equal "ISO-8859-2", fixture_blob("Data/README").ruby_encoding
 | 
				
			||||||
 | 
					    assert_equal "UTF-8", sample_blob("Text/foo.txt").encoding
 | 
				
			||||||
 | 
					    assert_equal "UTF-8", sample_blob("Text/foo.txt").ruby_encoding
 | 
				
			||||||
 | 
					    assert_equal "UTF-16LE", fixture_blob("Data/utf16le").encoding
 | 
				
			||||||
 | 
					    assert_equal "UTF-16LE", fixture_blob("Data/utf16le").ruby_encoding
 | 
				
			||||||
 | 
					    assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").encoding
 | 
				
			||||||
 | 
					    assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").ruby_encoding
 | 
				
			||||||
 | 
					    assert_equal "ISO-2022-KR", sample_blob("Text/ISO-2022-KR.txt").encoding
 | 
				
			||||||
 | 
					    assert_equal "binary", sample_blob("Text/ISO-2022-KR.txt").ruby_encoding
 | 
				
			||||||
 | 
					    assert_nil fixture_blob("Binary/dog.o").encoding
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_binary
 | 
				
			||||||
 | 
					    # Large blobs aren't loaded
 | 
				
			||||||
 | 
					    large_blob = sample_blob("git.exe")
 | 
				
			||||||
 | 
					    large_blob.instance_eval do
 | 
				
			||||||
 | 
					      def data; end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					    assert large_blob.binary?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/git.deb").binary?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/git.exe").binary?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/hello.pbc").binary?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/linguist.gem").binary?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/octocat.ai").binary?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/octocat.png").binary?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/zip").binary?
 | 
				
			||||||
 | 
					    assert !fixture_blob("Data/README").binary?
 | 
				
			||||||
 | 
					    assert !sample_blob("Ruby/foo.rb").binary?
 | 
				
			||||||
 | 
					    assert !sample_blob("Perl/script.pl").binary?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_all_binary
 | 
				
			||||||
 | 
					    Samples.each do |sample|
 | 
				
			||||||
 | 
					      blob = sample_blob(sample[:path])
 | 
				
			||||||
 | 
					      assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file"
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_text
 | 
				
			||||||
 | 
					    assert fixture_blob("Data/README").text?
 | 
				
			||||||
 | 
					    assert fixture_blob("Data/md").text?
 | 
				
			||||||
 | 
					    assert sample_blob("Shell/script.sh").text?
 | 
				
			||||||
 | 
					    assert fixture_blob("Data/txt").text?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_image
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/octocat.gif").image?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/octocat.jpeg").image?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/octocat.jpg").image?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/octocat.png").image?
 | 
				
			||||||
 | 
					    assert !fixture_blob("Binary/octocat.ai").image?
 | 
				
			||||||
 | 
					    assert !fixture_blob("Binary/octocat.psd").image?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_solid
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/cube.stl").solid?
 | 
				
			||||||
 | 
					    assert fixture_blob("Data/cube.stl").solid?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_csv
 | 
				
			||||||
 | 
					    assert fixture_blob("Data/cars.csv").csv?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_pdf
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/foo.pdf").pdf?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_viewable
 | 
				
			||||||
 | 
					    assert fixture_blob("Data/README").viewable?
 | 
				
			||||||
 | 
					    assert sample_blob("Ruby/foo.rb").viewable?
 | 
				
			||||||
 | 
					    assert sample_blob("Perl/script.pl").viewable?
 | 
				
			||||||
 | 
					    assert !fixture_blob("Binary/linguist.gem").viewable?
 | 
				
			||||||
 | 
					    assert !fixture_blob("Binary/octocat.ai").viewable?
 | 
				
			||||||
 | 
					    assert !fixture_blob("Binary/octocat.png").viewable?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_generated
 | 
				
			||||||
 | 
					    assert !fixture_blob("Data/README").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Xcode project files
 | 
				
			||||||
 | 
					    assert !sample_blob("XML/MainMenu.xib").generated?
 | 
				
			||||||
 | 
					    assert fixture_blob("Binary/MainMenu.nib").generated?
 | 
				
			||||||
 | 
					    assert !sample_blob("XML/project.pbxproj").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Gemfile.lock is NOT generated
 | 
				
			||||||
 | 
					    assert !sample_blob("Gemfile.lock").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Generated .NET Docfiles
 | 
				
			||||||
 | 
					    assert sample_blob("XML/net_docfile.xml").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Long line
 | 
				
			||||||
 | 
					    assert !sample_blob("JavaScript/uglify.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Inlined JS, but mostly code
 | 
				
			||||||
 | 
					    assert !sample_blob("JavaScript/json2_backbone.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Minified JS
 | 
				
			||||||
 | 
					    assert !sample_blob("JavaScript/jquery-1.6.1.js").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/jquery-1.6.1.min.js").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/jquery-1.4.2.min.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # CoffeeScript-generated JS
 | 
				
			||||||
 | 
					    # TODO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # TypeScript-generated JS
 | 
				
			||||||
 | 
					    # TODO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Composer generated composer.lock file
 | 
				
			||||||
 | 
					    assert sample_blob("JSON/composer.lock").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # PEG.js-generated parsers
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/parser.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Generated PostScript
 | 
				
			||||||
 | 
					    assert !sample_blob("PostScript/sierpinski.ps").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # These examples are too basic to tell
 | 
				
			||||||
 | 
					    assert !sample_blob("JavaScript/hello.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/intro-old.js").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/classes-old.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/intro.js").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/classes.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Protocol Buffer generated code
 | 
				
			||||||
 | 
					    assert sample_blob("C++/protocol-buffer.pb.h").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("C++/protocol-buffer.pb.cc").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Java/ProtocolBuffer.java").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Python/protocol_buffer_pb2.py").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Go/api.pb.go").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Go/embedded.go").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Apache Thrift generated code
 | 
				
			||||||
 | 
					    assert sample_blob("Python/gen-py-linguist-thrift.py").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Go/gen-go-linguist-thrift.go").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Java/gen-java-linguist-thrift.java").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("JavaScript/gen-js-linguist-thrift.js").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Ruby/gen-rb-linguist-thrift.rb").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Objective-C/gen-cocoa-linguist-thrift.m").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Generated JNI
 | 
				
			||||||
 | 
					    assert sample_blob("C/jni_layer.h").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Minified CSS
 | 
				
			||||||
 | 
					    assert !sample_blob("CSS/bootstrap.css").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("CSS/bootstrap.min.css").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Generated VCR
 | 
				
			||||||
 | 
					    assert sample_blob("YAML/vcr_cassette.yml").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Generated by Zephir
 | 
				
			||||||
 | 
					    assert sample_blob("Zephir/filenames/exception.zep.c").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Zephir/filenames/exception.zep.h").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Zephir/filenames/exception.zep.php").generated?
 | 
				
			||||||
 | 
					    assert !sample_blob("Zephir/Router.zep").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert sample_blob("node_modules/grunt/lib/grunt.js").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Godep saved dependencies
 | 
				
			||||||
 | 
					    assert sample_blob("Godeps/Godeps.json").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Cython-generated C/C++
 | 
				
			||||||
 | 
					    assert sample_blob("C/sgd_fast.c").generated?
 | 
				
			||||||
 | 
					    assert sample_blob("C++/wrapper_inner.cpp").generated?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Unity3D-generated metadata
 | 
				
			||||||
 | 
					    assert sample_blob("Unity3D Asset/Tiles.meta").generated?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_vendored
 | 
				
			||||||
 | 
					    assert !fixture_blob("Data/README").vendored?
 | 
				
			||||||
 | 
					    assert !sample_blob("ext/extconf.rb").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Dependencies
 | 
				
			||||||
 | 
					    assert sample_blob("dependencies/windows/headers/GL/glext.h").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Node dependencies
 | 
				
			||||||
 | 
					    assert sample_blob("node_modules/coffee-script/lib/coffee-script.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Bower Components
 | 
				
			||||||
 | 
					    assert sample_blob("bower_components/custom/custom.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("app/bower_components/custom/custom.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("vendor/assets/bower_components/custom/custom.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Go dependencies
 | 
				
			||||||
 | 
					    assert !sample_blob("Godeps/Godeps.json").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Rails vendor/
 | 
				
			||||||
 | 
					    assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Vendor/
 | 
				
			||||||
 | 
					    assert sample_blob("Vendor/my_great_file.h").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # 'thirdparty' directory
 | 
				
			||||||
 | 
					    assert sample_blob("thirdparty/lib/main.c").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # 'extern(al)' directory
 | 
				
			||||||
 | 
					    assert sample_blob("extern/util/__init__.py").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("external/jquery.min.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # C deps
 | 
				
			||||||
 | 
					    assert sample_blob("deps/http_parser/http_parser.c").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("deps/v8/src/v8.h").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert sample_blob("tools/something/else.c").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Chart.js
 | 
				
			||||||
 | 
					    assert sample_blob("some/vendored/path/Chart.js").vendored?
 | 
				
			||||||
 | 
					    assert !sample_blob("some/vendored/path/chart.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Codemirror deps
 | 
				
			||||||
 | 
					    assert sample_blob("codemirror/mode/blah.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("codemirror/5.0/mode/blah.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Debian packaging
 | 
				
			||||||
 | 
					    assert sample_blob("debian/cron.d").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Erlang
 | 
				
			||||||
 | 
					    assert sample_blob("rebar").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # git config files
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("some/path/.gitattributes"), :vendored?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob(".gitignore"), :vendored?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("special/path/.gitmodules"), :vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Minified JavaScript and CSS
 | 
				
			||||||
 | 
					    assert sample_blob("foo.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("foo.min.css").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("foo-min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("foo-min.css").vendored?
 | 
				
			||||||
 | 
					    assert !sample_blob("foomin.css").vendored?
 | 
				
			||||||
 | 
					    assert !sample_blob("foo.min.txt").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #.osx
 | 
				
			||||||
 | 
					    assert sample_blob(".osx").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Prototype
 | 
				
			||||||
 | 
					    assert !sample_blob("public/javascripts/application.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/prototype.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/effects.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/controls.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/dragdrop.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # jQuery
 | 
				
			||||||
 | 
					    assert sample_blob("jquery.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery-1.7.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery-1.7.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery-1.5.2.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery-1.6.1.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery-1.6.1.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery-1.10.1.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/jquery-1.10.1.min.js").vendored?
 | 
				
			||||||
 | 
					    assert !sample_blob("public/javascripts/jquery.github.menu.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # jQuery UI
 | 
				
			||||||
 | 
					    assert sample_blob("themes/ui-lightness/jquery-ui.css").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("themes/ui-lightness/jquery.ui.accordion.css").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/i18n/jquery-ui-i18n.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/jquery.effects.blind.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/jquery-ui-1.8.22.custom.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/jquery-ui-1.8.22.custom.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/jquery-ui-1.8.22.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/jquery-ui-1.8.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/jquery-ui.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/jquery.ui.accordion.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # jQuery Gantt
 | 
				
			||||||
 | 
					    assert sample_blob("web-app/jquery-gantt/js/jquery.fn.gantt.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # jQuery fancyBox
 | 
				
			||||||
 | 
					    assert sample_blob("web-app/fancybox/jquery.fancybox.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Fuel UX
 | 
				
			||||||
 | 
					    assert sample_blob("web-app/fuelux/js/fuelux.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # jQuery File Upload
 | 
				
			||||||
 | 
					    assert sample_blob("fileupload-9.0.0/jquery.fileupload-process.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Slick
 | 
				
			||||||
 | 
					    assert sample_blob("web-app/slickgrid/controls/slick.columnpicker.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Leaflet plugins
 | 
				
			||||||
 | 
					    assert sample_blob("leaflet-plugins/Leaflet.Coordinates-0.5.0.src.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("leaflet-plugins/leaflet.draw-src.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("leaflet-plugins/leaflet.spin.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # MooTools
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Dojo
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/dojo.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # MochiKit
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/MochiKit.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # YUI
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/yahoo-dom-event.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/yahoo-min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/yuiloader-dom-event.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # WYS editors
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/ckeditor.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/tiny_mce.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/tiny_mce_popup.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/tiny_mce_src.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # AngularJS
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/angular.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/angular.min.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # D3.js
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/d3.v3.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/d3.v3.min.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Modernizr
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/modernizr-2.7.1.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/javascripts/modernizr.custom.01009.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Fabric
 | 
				
			||||||
 | 
					    assert sample_blob("fabfile.py").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # WAF
 | 
				
			||||||
 | 
					    assert sample_blob("waf").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Visual Studio IntelliSense
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/jquery-1.7-vsdoc.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Microsoft Ajax
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/MicrosoftAjax.debug.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/MicrosoftAjax.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/MicrosoftMvcAjax.debug.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/MicrosoftMvcAjax.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/MicrosoftMvcValidation.debug.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/MicrosoftMvcValidation.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # jQuery validation plugin (MS bundles this with asp.net mvc)
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/jquery.validate.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/jquery.validate.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/jquery.validate.unobtrusive.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/jquery.validate.unobtrusive.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/jquery.unobtrusive-ajax.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # NuGet Packages
 | 
				
			||||||
 | 
					    assert sample_blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Font Awesome
 | 
				
			||||||
 | 
					    assert sample_blob("some/asset/path/font-awesome.min.css").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("some/asset/path/font-awesome.css").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Normalize
 | 
				
			||||||
 | 
					    assert sample_blob("some/asset/path/normalize.css").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Carthage
 | 
				
			||||||
 | 
					    assert sample_blob('Carthage/blah').vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Cocoapods
 | 
				
			||||||
 | 
					    assert sample_blob('Pods/blah').vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Html5shiv
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/html5shiv.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Scripts/html5shiv.min.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Test fixtures
 | 
				
			||||||
 | 
					    assert sample_blob("test/fixtures/random.rkt").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("Test/fixtures/random.rkt").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("tests/fixtures/random.rkt").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Cordova/PhoneGap
 | 
				
			||||||
 | 
					    assert sample_blob("cordova.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("cordova.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("cordova-2.1.0.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("cordova-2.1.0.min.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Foundation js
 | 
				
			||||||
 | 
					    assert sample_blob("foundation.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("foundation.min.js").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("foundation.abide.js").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Vagrant
 | 
				
			||||||
 | 
					    assert sample_blob("Vagrantfile").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Gradle
 | 
				
			||||||
 | 
					    assert sample_blob("gradlew").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("gradlew.bat").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("gradle/wrapper/gradle-wrapper.properties").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("subproject/gradlew").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("subproject/gradlew.bat").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("subproject/gradle/wrapper/gradle-wrapper.properties").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Octicons
 | 
				
			||||||
 | 
					    assert sample_blob("octicons.css").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/octicons.min.css").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("public/octicons/sprockets-octicons.scss").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Typesafe Activator
 | 
				
			||||||
 | 
					    assert sample_blob("activator").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("activator.bat").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("subproject/activator").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("subproject/activator.bat").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob(".google_apis/bar.jar"), :vendored?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/.google_apis/bar.jar"), :vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Sphinx docs
 | 
				
			||||||
 | 
					    assert sample_blob("docs/_build/asset.doc").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("docs/theme/file.css").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Vagrant
 | 
				
			||||||
 | 
					    assert sample_blob("puphpet/file.pp").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Fabric.io
 | 
				
			||||||
 | 
					    assert sample_blob("Fabric.framework/Fabric.h").vendored?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Crashlytics
 | 
				
			||||||
 | 
					    assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("myapp/My Template.xctemplate/___FILEBASENAME___.h").vendored?
 | 
				
			||||||
 | 
					    assert sample_blob("myapp/My Images.xcassets/some/stuff.imageset/Contents.json").vendored?
 | 
				
			||||||
 | 
					    assert !sample_blob("myapp/MyData.json").vendored?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_documentation
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("doc/foo.html"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("docs/foo.html"), :documentation?
 | 
				
			||||||
 | 
					    refute_predicate fixture_blob("project/doc/foo.html"), :documentation?
 | 
				
			||||||
 | 
					    refute_predicate fixture_blob("project/docs/foo.html"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("Documentation/foo.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("documentation/foo.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("project/Documentation/foo.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("project/documentation/foo.md"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("javadoc/foo.html"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("project/javadoc/foo.html"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("man/foo.html"), :documentation?
 | 
				
			||||||
 | 
					    refute_predicate fixture_blob("project/man/foo.html"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("README"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("README.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("README.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("Readme"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("readme"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/README"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGE"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGE.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGE.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/CHANGE"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGELOG"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGELOG.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGELOG.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/CHANGELOG"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGES"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGES.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CHANGES.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/CHANGES"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CONTRIBUTING"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/CONTRIBUTING"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("examples/some-file.pl"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("Examples/some-example-file.rb"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("LICENSE"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("LICENCE.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("License.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("LICENSE.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/LICENSE"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("COPYING"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("COPYING.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("COPYING.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/COPYING"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("INSTALL"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("INSTALL.md"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("INSTALL.txt"), :documentation?
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("foo/INSTALL"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    refute_predicate fixture_blob("foo.md"), :documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Samples
 | 
				
			||||||
 | 
					    assert sample_blob("Samples/Ruby/foo.rb").documentation?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert_predicate fixture_blob("INSTALL.txt"), :documentation?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_language
 | 
				
			||||||
 | 
					    Samples.each do |sample|
 | 
				
			||||||
 | 
					      blob = sample_blob(sample[:path])
 | 
				
			||||||
 | 
					      assert blob.language, "No language for #{sample[:path]}"
 | 
				
			||||||
 | 
					      assert_equal sample[:language], blob.language.name, blob.name
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Test language detection for files which shouldn't be used as samples
 | 
				
			||||||
 | 
					    root = File.expand_path('../fixtures', __FILE__)
 | 
				
			||||||
 | 
					    Dir.entries(root).each do |language|
 | 
				
			||||||
 | 
					      next if language == '.' || language == '..' || language == 'Binary' ||
 | 
				
			||||||
 | 
					              File.basename(language) == 'ace_modes.json'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      # Each directory contains test files of a language
 | 
				
			||||||
 | 
					      dirname = File.join(root, language)
 | 
				
			||||||
 | 
					      Dir.entries(dirname).each do |filename|
 | 
				
			||||||
 | 
					        # By default blob search the file in the samples;
 | 
				
			||||||
 | 
					        # thus, we need to give it the absolute path
 | 
				
			||||||
 | 
					        filepath = File.join(dirname, filename)
 | 
				
			||||||
 | 
					        next unless File.file?(filepath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        blob = fixture_blob(filepath)
 | 
				
			||||||
 | 
					        if language == 'Data'
 | 
				
			||||||
 | 
					          assert blob.language.nil?, "A language was found for #{filepath}"
 | 
				
			||||||
 | 
					        elsif language == 'Generated'
 | 
				
			||||||
 | 
					          assert blob.generated?, "#{filepath} is not a generated file"
 | 
				
			||||||
 | 
					        else
 | 
				
			||||||
 | 
					          assert blob.language, "No language for #{filepath}"
 | 
				
			||||||
 | 
					          assert_equal language, blob.language.name, blob.name
 | 
				
			||||||
 | 
					        end
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_minified_files_not_safe_to_highlight
 | 
				
			||||||
 | 
					    assert !sample_blob("JavaScript/jquery-1.6.1.min.js").safe_to_colorize?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_empty
 | 
				
			||||||
 | 
					    blob = Struct.new(:data) { include Linguist::BlobHelper }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    assert blob.new("").empty?
 | 
				
			||||||
 | 
					    assert blob.new(nil).empty?
 | 
				
			||||||
 | 
					    refute blob.new(" ").empty?
 | 
				
			||||||
 | 
					    refute blob.new("nope").empty?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_include_in_language_stats
 | 
				
			||||||
 | 
					    vendored = sample_blob("bower_components/custom/custom.js")
 | 
				
			||||||
 | 
					    assert_predicate vendored, :vendored?
 | 
				
			||||||
 | 
					    refute_predicate vendored, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    documentation = fixture_blob("README")
 | 
				
			||||||
 | 
					    assert_predicate documentation, :documentation?
 | 
				
			||||||
 | 
					    refute_predicate documentation, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    generated = sample_blob("CSS/bootstrap.min.css")
 | 
				
			||||||
 | 
					    assert_predicate generated, :generated?
 | 
				
			||||||
 | 
					    refute_predicate generated, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    data = sample_blob("Ant Build System/filenames/ant.xml")
 | 
				
			||||||
 | 
					    assert_equal :data, data.language.type
 | 
				
			||||||
 | 
					    refute_predicate data, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    prose = sample_blob("Markdown/tender.md")
 | 
				
			||||||
 | 
					    assert_equal :prose, prose.language.type
 | 
				
			||||||
 | 
					    refute_predicate prose, :include_in_language_stats?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    included = sample_blob("HTML/pages.html")
 | 
				
			||||||
 | 
					    assert_predicate included, :include_in_language_stats?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ class TestPedantic < Minitest::Test
 | 
				
			|||||||
    assert_sorted LANGUAGES.keys
 | 
					    assert_sorted LANGUAGES.keys
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  def test_extensions_are_sorted
 | 
					  def test_nonprimary_extensions_are_sorted
 | 
				
			||||||
    LANGUAGES.each do |name, language|
 | 
					    LANGUAGES.each do |name, language|
 | 
				
			||||||
      extensions = language['extensions']
 | 
					      extensions = language['extensions']
 | 
				
			||||||
      assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1
 | 
					      assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -111,4 +111,14 @@ class TestRepository < Minitest::Test
 | 
				
			|||||||
    refute_predicate readme, :documentation?
 | 
					    refute_predicate readme, :documentation?
 | 
				
			||||||
    assert_predicate arduino, :documentation?
 | 
					    assert_predicate arduino, :documentation?
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  def test_linguist_override_generated?
 | 
				
			||||||
 | 
					    attr_commit = "351c1cc8fd57340839bdb400d7812332af80e9bd"
 | 
				
			||||||
 | 
					    repo = linguist_repo(attr_commit).read_index
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rakefile = Linguist::LazyBlob.new(rugged_repository, attr_commit, "Rakefile")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # overridden .gitattributes
 | 
				
			||||||
 | 
					    assert rakefile.generated?
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/grammars/ColdFusion
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/ColdFusion
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/ColdFusion updated: 3e7e68b14d...c54a4c5f5e
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Docker.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Docker.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Docker.tmbundle updated: 8ff6e62c89...6bb36d8262
									
								
							
							
								
								
									
										1
									
								
								vendor/grammars/FreeMarker.tmbundle
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/grammars/FreeMarker.tmbundle
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/grammars/FreeMarker.tmbundle added at 6b7b880c53
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Handlebars
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Handlebars
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Handlebars updated: 88a0836abe...6030982880
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/InnoSetup
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/InnoSetup
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/InnoSetup updated: 3906a8d2fb...a7f79fd1a5
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/LiveScript.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/LiveScript.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/LiveScript.tmbundle updated: 92d0a7c47c...05dc46397a
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/NSIS
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/NSIS
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/NSIS updated: 53b64a0a11...ea6104445d
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/NimLime
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/NimLime
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/NimLime updated: 50d7344f9b...5111833868
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Stylus
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Stylus
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Stylus updated: 8b1c77d054...9766d8d936
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Sublime-Nit
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Sublime-Nit
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Sublime-Nit updated: e1e5463c9c...12c1d65416
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/SublimePapyrus
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/SublimePapyrus
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/SublimePapyrus updated: a9d818f0ac...75d567dc3a
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/abap.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/abap.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/abap.tmbundle updated: 08d6db92d0...8ab33a8978
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/atom-fsharp
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/atom-fsharp
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/atom-fsharp updated: 2cbcaca93c...7051d65d63
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/ats.sublime
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/ats.sublime
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/ats.sublime updated: d6317b2309...1ecc2b011e
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/chapel-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/chapel-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/chapel-tmbundle updated: 4c9bc68a51...b657738cc0
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/dart-sublime-bundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/dart-sublime-bundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/dart-sublime-bundle updated: d61e6efcbd...d891fb36c9
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/elixir-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/elixir-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/elixir-tmbundle updated: 56efe6116f...46514e8f9f
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/factor
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/factor
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/factor updated: b2a51dfeb2...9b5cb445ee
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/gnuplot-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/gnuplot-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/gnuplot-tmbundle updated: 14e0f70c7b...1950830563
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/haxe-sublime-bundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/haxe-sublime-bundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/haxe-sublime-bundle updated: c3b96f1c75...94cc8eea31
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/jade-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/jade-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/jade-tmbundle updated: ad13ddaad0...fea35b58dc
									
								
							
							
								
								
									
										1
									
								
								vendor/grammars/language-babel
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/grammars/language-babel
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/grammars/language-babel added at 44ff68da9e
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-clojure
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-clojure
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-clojure updated: 19522d6acb...3173abe995
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-coffee-script
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-coffee-script
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-coffee-script updated: e9f47f0f55...0eeace014b
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-crystal
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-crystal
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-crystal updated: 932646913b...5c0e60fd53
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-csharp
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-csharp
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-csharp updated: 79fe8b5764...f635e67ede
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-hy
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-hy
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-hy updated: f9750744ae...93d267de4c
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-javascript
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-javascript
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-javascript updated: c5c381e378...9d69b86e30
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-python
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-python
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-python updated: 8933c5239a...6d7b52b882
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-shellscript
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-shellscript
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-shellscript updated: a682379588...0bbc7eee5a
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/latex.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/latex.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/latex.tmbundle updated: 6358337b62...d40245e130
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/nesC.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/nesC.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/nesC.tmbundle updated: d0d322ceaf...f58def8c55
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/php.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/php.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/php.tmbundle updated: baad875878...2ecaa60d92
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sql.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sql.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sql.tmbundle updated: 0e80dd0c7d...1fd3f03f97
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/standard-ml.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/standard-ml.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/standard-ml.tmbundle updated: 791c8b2054...b52a5ebf52
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-aspectj
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-aspectj
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-aspectj updated: 72b35f795c...043444fc3f
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-bsv
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-bsv
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-bsv updated: ca223cdd65...6b3ecf1d44
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-cirru
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-cirru
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-cirru updated: c27a9604db...75674a73e1
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-glsl
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-glsl
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-glsl updated: 31bb50cbb3...0443b921df
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-golo
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-golo
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-golo updated: 2c0707bd4f...33259eba0c
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-nix
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-nix
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-nix updated: 217ffe591f...d7a3653d59
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-rust
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-rust
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-rust updated: cff9c9c1c6...06a278ccfa
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime-typescript
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime-typescript
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime-typescript updated: cf0fe35e36...a4c4b9fc79
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/sublime_cobol
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/sublime_cobol
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/sublime_cobol updated: bc8c0ff073...19ae2ba33e
									
								
							
		Reference in New Issue
	
	Block a user