mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	fix the little flaws found on http protocol that is used, one of the web using the http protocol which is already supporting more secure protocol, which is https
		
			
				
	
	
		
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Ruby
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env ruby
 | |
| 
 | |
| require "bundler/setup"
 | |
| require "linguist"
 | |
| require "json"
 | |
| require "yaml"
 | |
| 
 | |
| class GrammarList
 | |
| 
 | |
|   ROOT = File.expand_path "../../", __FILE__
 | |
| 
 | |
|   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
 | |
| 
 | |
|   # 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
 | |
| 
 | |
|   # 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 "https://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].chomp("/")]
 | |
|         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
 | |
| end
 | |
| 
 | |
| list = GrammarList.new
 | |
| list.update_readme()
 |