mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Butcher whitespace to appease tab-hating heretics
This commit is contained in:
		| @@ -4,106 +4,98 @@ require "linguist" | ||||
| require "json" | ||||
| require "yaml" | ||||
|  | ||||
|  | ||||
| class GrammarList | ||||
|    | ||||
| 	ROOT = File.expand_path "../../", __FILE__ | ||||
|   ROOT = File.expand_path "../../", __FILE__ | ||||
|    | ||||
| 	def initialize | ||||
| 		@submodules     = load_submodules() | ||||
| 		@sources        = load_sources() | ||||
| 		@language_names = load_languages() | ||||
| 	end | ||||
|   def initialize | ||||
|     @submodules     = load_submodules() | ||||
|     @sources        = load_sources() | ||||
|     @language_names = load_languages() | ||||
|   end | ||||
|    | ||||
|   # Load .gitmodules | ||||
|   def load_submodules | ||||
|     submodules = {} | ||||
|     submodule_file = File.read("#{ROOT}/.gitmodules") | ||||
|     pattern = /^\[submodule\s*"([^"]+)"\]$\n((?:^(?!\[).+(?:\n|$))+)/is | ||||
|     submodule_file.scan(pattern) do |id, attr| | ||||
|       submod = {} | ||||
|       submod[:path]  = $1 if attr =~ /^\s*path\s*=\s*(.+)$/ | ||||
|       submod[:url]   = $1 if attr =~ /^\s*url\s*=\s*(.+)$/ | ||||
|       submod[:url].gsub!(/\.git$/, "") | ||||
|       submod[:short] = shorten(submod[:url]) | ||||
|       submodules["#{id}"] = submod | ||||
|     end | ||||
|     submodules | ||||
|   end | ||||
|    | ||||
| 	# Load .gitmodules | ||||
| 	def load_submodules | ||||
| 		submodules = {} | ||||
| 		submodule_file = File.read("#{ROOT}/.gitmodules") | ||||
| 		pattern = /^\[submodule\s*"([^"]+)"\]$\n((?:^(?!\[).+(?:\n|$))+)/is | ||||
| 		submodule_file.scan(pattern) do |id, attr| | ||||
| 			submod = {} | ||||
| 			submod[:path]  = $1 if attr =~ /^\s*path\s*=\s*(.+)$/ | ||||
| 			submod[:url]   = $1 if attr =~ /^\s*url\s*=\s*(.+)$/ | ||||
| 			submod[:url].gsub!(/\.git$/, "") | ||||
| 			submod[:short] = shorten(submod[:url]) | ||||
| 			submodules["#{id}"] = submod | ||||
| 		end | ||||
| 		submodules | ||||
| 	end | ||||
|   # Grab the name of each language, sorted case-insensitively | ||||
|   def load_languages | ||||
|     Linguist::Language.all.map(&:name).sort do |a, b| | ||||
|       a.downcase() <=> b.downcase() | ||||
|     end | ||||
|   end | ||||
|    | ||||
|   # Load grammars.yml | ||||
|   def load_sources | ||||
|     sources = {} | ||||
|     grammars = YAML.load_file("#{ROOT}/grammars.yml") | ||||
|     grammars.each do |path, scopes| | ||||
|       scopes.each { |scope| sources[scope] = path } | ||||
|     end | ||||
|     sources | ||||
|   end | ||||
|    | ||||
| 	# Grab the name of each language, sorted case-insensitively | ||||
| 	def load_languages | ||||
| 		Linguist::Language.all.map(&:name).sort do |a, b| | ||||
| 			a.downcase() <=> b.downcase() | ||||
| 		end | ||||
| 	end | ||||
|   # Shorten a repository URL | ||||
|   def shorten(url) | ||||
|     if url =~ /^https?:\/\/(?:www\.)?github\.com\/([^\/]+\/[^\/]+)/i | ||||
|       $1 | ||||
|     elsif url =~ /^https?:\/\/(?:www\.)?(bitbucket|gitlab)\.(?:com|org)\/([^\/]+\/[^\/]+)/i | ||||
|       "#{$1.downcase()}:#{$2}" | ||||
|     else | ||||
|       url.replace(/^https?:\/\/(?:www\.)?/i, "") | ||||
|     end | ||||
|   end | ||||
|    | ||||
|   # Markdown: Generate grammar list | ||||
|   def to_markdown | ||||
|     markdown = "" | ||||
|     @language_names.each do |item| | ||||
|       lang  = Linguist::Language["#{item}"] | ||||
|       scope = lang.tm_scope | ||||
|       next if scope == "none" | ||||
|       path  = @sources[scope] || scope | ||||
|       case path | ||||
|       when "https://bitbucket.org/Clams/sublimesystemverilog/get/default.tar.gz" | ||||
|         short_url = "bitbucket:Clams/sublimesystemverilog" | ||||
|         long_url  = "https://bitbucket.org/Clams/sublimesystemverilog" | ||||
|       when "http://svn.edgewall.org/repos/genshi/contrib/textmate/Genshi.tmbundle/Syntaxes/Markup%20Template%20%28XML%29.tmLanguage" | ||||
|         short_url = "genshi.edgewall.org/query" | ||||
|         long_url  = "https://genshi.edgewall.org/query" | ||||
|       when "vendor/grammars/oz-tmbundle/Syntaxes/Oz.tmLanguage" | ||||
|         short_url = "eregon/oz-tmbundle" | ||||
|         long_url  = "https://github.com/eregon/oz-tmbundle" | ||||
|       else | ||||
|         submodule = @submodules[@sources[scope]] | ||||
|         next unless submodule | ||||
|         short_url = submodule[:short] | ||||
|         long_url  = submodule[:url] | ||||
|       end | ||||
|       markdown += "- **#{item}:** [#{short_url}](#{long_url})\n" | ||||
|     end | ||||
|  | ||||
| 	# Load grammars.yml | ||||
| 	def load_sources | ||||
| 		sources = {} | ||||
| 		grammars = YAML.load_file("#{ROOT}/grammars.yml") | ||||
| 		grammars.each do |path, scopes| | ||||
| 			scopes.each { |scope| sources[scope] = path } | ||||
| 		end | ||||
| 		sources | ||||
| 	end | ||||
|     markdown | ||||
|   end | ||||
|    | ||||
| 	 | ||||
| 	# Shorten a repository URL | ||||
| 	def shorten(url) | ||||
| 		if url =~ /^https?:\/\/(?:www\.)?github\.com\/([^\/]+\/[^\/]+)/i | ||||
| 			$1 | ||||
| 		elsif url =~ /^https?:\/\/(?:www\.)?(bitbucket|gitlab)\.(?:com|org)\/([^\/]+\/[^\/]+)/i | ||||
| 			"#{$1.downcase()}:#{$2}" | ||||
| 		else | ||||
| 			url.replace(/^https?:\/\/(?:www\.)?/i, "") | ||||
| 		end | ||||
| 	end | ||||
| 	 | ||||
| 	 | ||||
| 	# Markdown: Generate grammar list | ||||
| 	def to_markdown | ||||
| 		markdown = "" | ||||
| 		@language_names.each do |item| | ||||
| 			lang  = Linguist::Language["#{item}"] | ||||
| 			scope = lang.tm_scope | ||||
| 			next if scope == "none" | ||||
| 			path  = @sources[scope] || scope | ||||
| 			case path | ||||
| 			when "https://bitbucket.org/Clams/sublimesystemverilog/get/default.tar.gz" | ||||
| 				short_url = "bitbucket:Clams/sublimesystemverilog" | ||||
| 				long_url  = "https://bitbucket.org/Clams/sublimesystemverilog" | ||||
| 			when "http://svn.edgewall.org/repos/genshi/contrib/textmate/Genshi.tmbundle/Syntaxes/Markup%20Template%20%28XML%29.tmLanguage" | ||||
| 				short_url = "genshi.edgewall.org/query" | ||||
| 				long_url  = "https://genshi.edgewall.org/query" | ||||
| 			when "vendor/grammars/oz-tmbundle/Syntaxes/Oz.tmLanguage" | ||||
| 				short_url = "eregon/oz-tmbundle" | ||||
| 				long_url  = "https://github.com/eregon/oz-tmbundle" | ||||
| 			else | ||||
| 				submodule = @submodules[@sources[scope]] | ||||
| 				next unless submodule | ||||
| 				short_url = submodule[:short] | ||||
| 				long_url  = submodule[:url] | ||||
| 			end | ||||
| 			markdown += "- **#{item}:** [#{short_url}](#{long_url})\n" | ||||
| 		end | ||||
|  | ||||
| 		markdown | ||||
| 	end | ||||
| 	 | ||||
| 	 | ||||
| 	# Update the file displaying the reader-friendly list of grammar repos | ||||
| 	def update_readme | ||||
| 		readme = "#{ROOT}/vendor/README.md" | ||||
| 		preamble = File.read(readme).match(/\A.+?<!--.+?-->\n/ms) | ||||
| 		list = self.to_markdown | ||||
| 		File.write(readme, preamble.to_s + list) | ||||
| 	end | ||||
|   # Update the file displaying the reader-friendly list of grammar repos | ||||
|   def update_readme | ||||
|     readme = "#{ROOT}/vendor/README.md" | ||||
|     preamble = File.read(readme).match(/\A.+?<!--.+?-->\n/ms) | ||||
|     list = self.to_markdown | ||||
|     File.write(readme, preamble.to_s + list) | ||||
|   end | ||||
| end | ||||
|  | ||||
|  | ||||
| list = GrammarList.new | ||||
| puts list.update_readme() | ||||
|   | ||||
		Reference in New Issue
	
	Block a user