mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Merge branch 'master' into blob_in_memory
This commit is contained in:
		
							
								
								
									
										18
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										18
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -656,3 +656,21 @@ | ||||
| [submodule "vendor/grammars/language-crystal"] | ||||
| 	path = vendor/grammars/language-crystal | ||||
| 	url = https://github.com/k2b6s9j/language-crystal | ||||
| [submodule "vendor/grammars/language-xbase"] | ||||
| 	path = vendor/grammars/language-xbase | ||||
| 	url = https://github.com/hernad/atom-language-harbour | ||||
| [submodule "vendor/grammars/language-ncl"] | ||||
| 	path = vendor/grammars/language-ncl | ||||
| 	url = https://github.com/rpavlick/language-ncl.git | ||||
| [submodule "vendor/grammars/atom-language-purescript"] | ||||
| 	path = vendor/grammars/atom-language-purescript | ||||
| 	url = https://github.com/freebroccolo/atom-language-purescript | ||||
| [submodule "vendor/grammars/vue-syntax-highlight"] | ||||
| 	path = vendor/grammars/vue-syntax-highlight | ||||
| 	url = https://github.com/vuejs/vue-syntax-highlight | ||||
| [submodule "vendor/grammars/st2-zonefile"] | ||||
| 	path = vendor/grammars/st2-zonefile | ||||
| 	url = https://github.com/sixty4k/st2-zonefile | ||||
| [submodule "vendor/grammars/sublime-aspectj"] | ||||
| 	path = vendor/grammars/sublime-aspectj | ||||
| 	url = https://github.com/pchaigno/sublime-aspectj | ||||
|   | ||||
| @@ -1,7 +1,10 @@ | ||||
| # Contributing | ||||
|  | ||||
| Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. The majority of contributions won't need to touch any Ruby code at all. | ||||
| [code-of-conduct]: http://todogroup.org/opencodeofconduct/#Linguist/opensource@github.com | ||||
|  | ||||
| Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to uphold this code. | ||||
|  | ||||
| The majority of contributions won't need to touch any Ruby code at all. | ||||
|  | ||||
| ## Adding an extension to a language | ||||
|  | ||||
| @@ -55,7 +58,7 @@ Syntax highlighting in GitHub is performed using TextMate-compatible grammars. T | ||||
|  | ||||
| Assuming your code is being detected as the right language, in most cases this is due to a bug in the language grammar rather than a bug in Linguist. [`grammars.yml`][grammars] lists all the grammars we use for syntax highlighting on github.com. Find the one corresponding to your code's programming language and submit a bug report upstream. If you can, try to reproduce the highlighting problem in the text editor that the grammar is designed for (TextMate, Sublime Text, or Atom) and include that information in your bug report. | ||||
|  | ||||
| You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](http://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com). | ||||
| You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](https://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com). | ||||
|  | ||||
| Once the bug has been fixed upstream, we'll pick it up for GitHub in the next release of Linguist. | ||||
|  | ||||
| @@ -71,9 +74,9 @@ To run the tests: | ||||
|  | ||||
|     bundle exec rake test | ||||
|  | ||||
| Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away. | ||||
| Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](https://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away. | ||||
|  | ||||
| Here's our current build status: [](http://travis-ci.org/github/linguist) | ||||
| Here's our current build status: [](https://travis-ci.org/github/linguist) | ||||
|  | ||||
|  | ||||
| ## Releasing | ||||
|   | ||||
							
								
								
									
										2
									
								
								Rakefile
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								Rakefile
									
									
									
									
									
								
							| @@ -62,7 +62,7 @@ namespace :benchmark do | ||||
|  | ||||
|     corpus = File.expand_path(ENV["CORPUS"] || "samples") | ||||
|  | ||||
|     require 'linguist/language' | ||||
|     require 'linguist' | ||||
|  | ||||
|     results = Hash.new | ||||
|     Dir.glob("#{corpus}/**/*").each do |file| | ||||
|   | ||||
							
								
								
									
										15
									
								
								grammars.yml
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								grammars.yml
									
									
									
									
									
								
							| @@ -123,6 +123,7 @@ vendor/grammars/Sublime-SQF-Language: | ||||
| - source.sqf | ||||
| vendor/grammars/Sublime-Text-2-OpenEdge-ABL: | ||||
| - source.abl | ||||
| - text.html.abl | ||||
| vendor/grammars/Sublime-VimL: | ||||
| - source.viml | ||||
| vendor/grammars/SublimeBrainfuck: | ||||
| @@ -175,6 +176,8 @@ vendor/grammars/assembly.tmbundle: | ||||
| - source.x86asm | ||||
| vendor/grammars/atom-fsharp/: | ||||
| - source.fsharp | ||||
| vendor/grammars/atom-language-purescript/: | ||||
| - source.purescript | ||||
| vendor/grammars/atom-salt: | ||||
| - source.python.salt | ||||
| - source.yaml.salt | ||||
| @@ -317,6 +320,7 @@ vendor/grammars/language-coffee-script: | ||||
| vendor/grammars/language-crystal: | ||||
| - source.crystal | ||||
| vendor/grammars/language-csharp: | ||||
| - source.cake | ||||
| - source.cs | ||||
| - source.csx | ||||
| - source.nant-build | ||||
| @@ -327,9 +331,12 @@ vendor/grammars/language-hy: | ||||
| vendor/grammars/language-javascript: | ||||
| - source.js | ||||
| - source.js.regexp | ||||
| - source.js.regexp.replacement | ||||
| vendor/grammars/language-jsoniq/: | ||||
| - source.jq | ||||
| - source.xq | ||||
| vendor/grammars/language-ncl: | ||||
| - source.ncl | ||||
| vendor/grammars/language-python: | ||||
| - source.python | ||||
| - source.regexp.python | ||||
| @@ -338,6 +345,8 @@ vendor/grammars/language-python: | ||||
| vendor/grammars/language-shellscript: | ||||
| - source.shell | ||||
| - text.shell-session | ||||
| vendor/grammars/language-xbase: | ||||
| - source.harbour | ||||
| vendor/grammars/language-yaml: | ||||
| - source.yaml | ||||
| vendor/grammars/latex.tmbundle: | ||||
| @@ -462,6 +471,8 @@ vendor/grammars/smalltalk-tmbundle: | ||||
| - source.smalltalk | ||||
| vendor/grammars/sql.tmbundle: | ||||
| - source.sql | ||||
| vendor/grammars/st2-zonefile: | ||||
| - text.zone_file | ||||
| vendor/grammars/standard-ml.tmbundle: | ||||
| - source.cm | ||||
| - source.ml | ||||
| @@ -469,6 +480,8 @@ vendor/grammars/sublime-MuPAD: | ||||
| - source.mupad | ||||
| vendor/grammars/sublime-apl/: | ||||
| - source.apl | ||||
| vendor/grammars/sublime-aspectj/: | ||||
| - source.aspectj | ||||
| vendor/grammars/sublime-befunge: | ||||
| - source.befunge | ||||
| vendor/grammars/sublime-better-typescript: | ||||
| @@ -537,6 +550,8 @@ vendor/grammars/turtle.tmbundle: | ||||
| - source.turtle | ||||
| vendor/grammars/verilog.tmbundle: | ||||
| - source.verilog | ||||
| vendor/grammars/vue-syntax-highlight: | ||||
| - text.html.vue | ||||
| vendor/grammars/x86-assembly-textmate-bundle: | ||||
| - source.asm.x86 | ||||
| vendor/grammars/xc.tmbundle/: | ||||
|   | ||||
| @@ -13,11 +13,18 @@ | ||||
| - (^|/)[Dd]ocumentation/ | ||||
| - (^|/)javadoc/ | ||||
| - ^man/ | ||||
| - ^[Ee]xamples/ | ||||
|  | ||||
| ## Documentation files ## | ||||
|  | ||||
| - (^|/)CHANGE(S|LOG)?(\.|$) | ||||
| - (^|/)CONTRIBUTING(\.|$) | ||||
| - (^|/)COPYING(\.|$) | ||||
| - (^|/)INSTALL(\.|$) | ||||
| - (^|/)LICEN[CS]E(\.|$) | ||||
| - (^|/)[Ll]icen[cs]e(\.|$) | ||||
| - (^|/)README(\.|$) | ||||
| - (^|/)[Rr]eadme(\.|$) | ||||
|  | ||||
| # Samples folders | ||||
| - ^[Ss]amples/ | ||||
|   | ||||
| @@ -13,11 +13,14 @@ module Linguist | ||||
|     #   ]) | ||||
|     # | ||||
|     # Returns an Array of languages, or empty if none matched or were inconclusive. | ||||
|     def self.call(blob, languages) | ||||
|     def self.call(blob, candidates) | ||||
|       data = blob.data | ||||
|  | ||||
|       @heuristics.each do |heuristic| | ||||
|         return Array(heuristic.call(data)) if heuristic.matches?(languages) | ||||
|         if heuristic.matches?(blob.name) | ||||
|           languages = Array(heuristic.call(data)) | ||||
|           return languages if languages.any? || languages.all? { |l| candidates.include?(l) } | ||||
|         end | ||||
|       end | ||||
|  | ||||
|       [] # No heuristics matched | ||||
| @@ -38,22 +41,22 @@ module Linguist | ||||
|     #       end | ||||
|     #     end | ||||
|     # | ||||
|     def self.disambiguate(*languages, &heuristic) | ||||
|       @heuristics << new(languages, &heuristic) | ||||
|     def self.disambiguate(*extensions, &heuristic) | ||||
|       @heuristics << new(extensions, &heuristic) | ||||
|     end | ||||
|  | ||||
|     # Internal: Array of defined heuristics | ||||
|     @heuristics = [] | ||||
|  | ||||
|     # Internal | ||||
|     def initialize(languages, &heuristic) | ||||
|       @languages = languages | ||||
|     def initialize(extensions, &heuristic) | ||||
|       @extensions = extensions | ||||
|       @heuristic = heuristic | ||||
|     end | ||||
|  | ||||
|     # Internal: Check if this heuristic matches the candidate languages. | ||||
|     def matches?(candidates) | ||||
|       candidates.any? && candidates.all? { |l| @languages.include?(l.name) } | ||||
|     def matches?(filename) | ||||
|       @extensions.any? { |ext| filename.downcase.end_with?(ext) } | ||||
|     end | ||||
|  | ||||
|     # Internal: Perform the heuristic | ||||
| @@ -64,7 +67,7 @@ module Linguist | ||||
|     # Common heuristics | ||||
|     ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronised|selector|implementation)\b/ | ||||
|  | ||||
|     disambiguate "BitBake", "BlitzBasic" do |data| | ||||
|     disambiguate ".bb" do |data| | ||||
|       if /^\s*; /.match(data) || data.include?("End Function") | ||||
|         Language["BlitzBasic"] | ||||
|       elsif /^\s*(# |include|require)\b/.match(data) | ||||
| @@ -72,7 +75,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "C#", "Smalltalk" do |data| | ||||
|     disambiguate ".cs" do |data| | ||||
|       if /![\w\s]+methodsFor: /.match(data) | ||||
|         Language["Smalltalk"] | ||||
|       elsif /^\s*namespace\s*[\w\.]+\s*{/.match(data) || /^\s*\/\//.match(data) | ||||
| @@ -80,7 +83,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Objective-C", "C++", "C" do |data| | ||||
|     disambiguate ".h" do |data| | ||||
|       if ObjectiveCRegex.match(data) | ||||
|         Language["Objective-C"] | ||||
|       elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) || | ||||
| @@ -89,17 +92,25 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Perl", "Perl6", "Prolog" do |data| | ||||
|       if data.include?("use v6") | ||||
|     disambiguate ".pl" do |data| | ||||
|       if /^(use v6|(my )?class|module)/.match(data) | ||||
|         Language["Perl6"] | ||||
|       elsif data.match(/use strict|use\s+v?5\./) | ||||
|       elsif /use strict|use\s+v?5\./.match(data) | ||||
|         Language["Perl"] | ||||
|       elsif /^[^#]+:-/.match(data) | ||||
|         Language["Prolog"] | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "ECL", "Prolog" do |data| | ||||
|     disambiguate ".pm" do |data| | ||||
|       if /^(use v6|(my )?class|module)/.match(data) | ||||
|         Language["Perl6"] | ||||
|       elsif /use strict|use\s+v?5\./.match(data) | ||||
|         Language["Perl"] | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate ".ecl" do |data| | ||||
|       if /^[^#]+:-/.match(data) | ||||
|         Language["Prolog"] | ||||
|       elsif data.include?(":=") | ||||
| @@ -107,7 +118,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "IDL", "Prolog", "INI", "QMake" do |data| | ||||
|     disambiguate ".pro" do |data| | ||||
|       if /^[^#]+:-/.match(data) | ||||
|         Language["Prolog"] | ||||
|       elsif data.include?("last_client=") | ||||
| @@ -119,7 +130,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "GAP", "Scilab" do |data| | ||||
|     disambiguate ".tst" do |data| | ||||
|       if (data.include?("gap> ")) | ||||
|         Language["GAP"] | ||||
|       # Heads up - we don't usually write heuristics like this (with no regex match) | ||||
| @@ -128,7 +139,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Common Lisp", "OpenCL", "Cool" do |data| | ||||
|     disambiguate ".cl" do |data| | ||||
|       if /^\s*\((defun|in-package|defpackage) /i.match(data) | ||||
|         Language["Common Lisp"] | ||||
|       elsif /^class/x.match(data) | ||||
| @@ -138,7 +149,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Hack", "PHP" do |data| | ||||
|     disambiguate ".php" do |data| | ||||
|       if data.include?("<?hh") | ||||
|         Language["Hack"] | ||||
|       elsif /<?[^h]/.match(data) | ||||
| @@ -146,7 +157,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Scala", "SuperCollider" do |data| | ||||
|     disambiguate ".sc" do |data| | ||||
|       if /\^(this|super)\./.match(data) || /^\s*(\+|\*)\s*\w+\s*{/.match(data) || /^\s*~\w+\s*=\./.match(data) | ||||
|         Language["SuperCollider"] | ||||
|       elsif /^\s*import (scala|java)\./.match(data) || /^\s*val\s+\w+\s*=/.match(data) || /^\s*class\b/.match(data) | ||||
| @@ -154,7 +165,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "AsciiDoc", "AGS Script", "Public Key" do |data| | ||||
|     disambiguate ".asc" do |data| | ||||
|       if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data) | ||||
|         Language["Public Key"] | ||||
|       elsif /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data) | ||||
| @@ -164,7 +175,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "FORTRAN", "Forth", "Formatted" do |data| | ||||
|     disambiguate ".for", ".f" do |data| | ||||
|       if /^: /.match(data) | ||||
|         Language["Forth"] | ||||
|       elsif /^([c*][^a-z]|      (subroutine|program)\s|\s*!)/i.match(data) | ||||
| @@ -172,7 +183,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "F#", "Forth", "GLSL", "Filterscript" do |data| | ||||
|     disambiguate ".fs" do |data| | ||||
|       if /^(: |new-device)/.match(data) | ||||
|         Language["Forth"] | ||||
|       elsif /^\s*(#light|import|let|module|namespace|open|type)/.match(data) | ||||
| @@ -184,7 +195,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Limbo", "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data| | ||||
|     disambiguate ".m" do |data| | ||||
|       if ObjectiveCRegex.match(data) | ||||
|         Language["Objective-C"] | ||||
|       elsif data.include?(":- module") | ||||
| @@ -202,11 +213,11 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Gosu", "JavaScript" do |data| | ||||
|     disambiguate ".gs" do |data| | ||||
|       Language["Gosu"] if /^uses java\./.match(data) | ||||
|     end | ||||
|  | ||||
|     disambiguate "LoomScript", "LiveScript" do |data| | ||||
|     disambiguate ".ls" do |data| | ||||
|       if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data) | ||||
|         Language["LoomScript"] | ||||
|       else | ||||
| @@ -214,7 +225,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Common Lisp", "NewLisp" do |data| | ||||
|     disambiguate ".lsp", ".lisp" do |data| | ||||
|       if /^\s*\((defun|in-package|defpackage) /i.match(data) | ||||
|         Language["Common Lisp"] | ||||
|       elsif /^\s*\(define /.match(data) | ||||
| @@ -222,7 +233,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "TypeScript", "XML" do |data| | ||||
|     disambiguate ".ts" do |data| | ||||
|       if data.include?("<TS ") | ||||
|         Language["XML"] | ||||
|       else | ||||
| @@ -230,7 +241,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Frege", "Forth", "Text" do |data| | ||||
|     disambiguate ".fr" do |data| | ||||
|       if /^(: |also |new-device|previous )/.match(data) | ||||
|         Language["Forth"] | ||||
|       elsif /^\s*(import|module|package|data|type) /.match(data) | ||||
| @@ -240,7 +251,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "PLSQL", "SQLPL", "PLpgSQL", "SQL" do |data| | ||||
|     disambiguate ".sql" do |data| | ||||
|       if /^\\i\b|AS \$\$|LANGUAGE '+plpgsql'+/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data) | ||||
|         #Postgres | ||||
|         Language["PLpgSQL"] | ||||
| @@ -256,7 +267,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "D", "DTrace", "Makefile" do |data| | ||||
|     disambiguate ".d" do |data| | ||||
|       if /^module /.match(data) | ||||
|         Language["D"] | ||||
|       elsif /^((dtrace:::)?BEGIN|provider |#pragma (D (option|attributes)|ident)\s)/.match(data) | ||||
| @@ -266,7 +277,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "OCaml", "Standard ML" do |data| | ||||
|     disambiguate ".ml" do |data| | ||||
|       if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data) | ||||
|         Language["OCaml"] | ||||
|       elsif /=> |case\s+(\S+\s)+of/.match(data) | ||||
| @@ -274,7 +285,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "XML", "Modula-2", "Linux Kernel Module", "AMPL" do |data| | ||||
|     disambiguate ".mod" do |data| | ||||
|       if data.include?('<!ENTITY ') | ||||
|         Language["XML"] | ||||
|       elsif /MODULE\s\w+\s*;/i.match(data) || /^\s*END \w+;$/i.match(data) | ||||
| @@ -284,7 +295,13 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "NL", "NewLisp" do |data| | ||||
|     disambiguate ".ncl" do |data| | ||||
|       if data.include?("THE_TITLE") | ||||
|         Language["Text"] | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate ".nl" do |data| | ||||
|       if /^(b|g)[0-9]+ /.match(data) | ||||
|         Language["NL"] | ||||
|       else | ||||
| @@ -292,7 +309,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Rust", "RenderScript" do |data| | ||||
|     disambiguate ".rs" do |data| | ||||
|       if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data) | ||||
|         Language["Rust"] | ||||
|       elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data) | ||||
| @@ -300,7 +317,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Common Lisp", "Lex", "Groff", "PicoLisp" do |data| | ||||
|     disambiguate ".l" do |data| | ||||
|       if /\(def(un|macro)\s/.match(data) | ||||
|         Language["Common Lisp"] | ||||
|       elsif /^(%[%{}]xs|<.*>)/.match(data) | ||||
| @@ -312,7 +329,7 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "Groff", "Nemerle" do |data| | ||||
|     disambiguate ".n" do |data| | ||||
|       if /^[.']/.match(data) | ||||
|         Language["Groff"] | ||||
|       elsif /^(module|namespace|using)\s/.match(data) | ||||
| @@ -320,12 +337,26 @@ module Linguist | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate "GAS", "Groff" do |data| | ||||
|     disambiguate ".ms" do |data| | ||||
|       if /^[.'][a-z][a-z](\s|$)/i.match(data) | ||||
|         Language["Groff"] | ||||
|       elsif /((^|\s)move?[. ])|\.(include|globa?l)\s/.match(data) | ||||
|         Language["GAS"] | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate ".ch" do |data| | ||||
|       if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data) | ||||
|         Language["xBase"] | ||||
|       end | ||||
|     end | ||||
|  | ||||
|     disambiguate ".r" do |data| | ||||
|       if /\bRebol\b/i.match(data) | ||||
|         Language["Rebol"] | ||||
|       elsif data.include?("<-") | ||||
|         Language["R"] | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -150,7 +150,8 @@ module Linguist | ||||
|     # | ||||
|     # Returns the Language or nil if none was found. | ||||
|     def self.find_by_name(name) | ||||
|       name && @name_index[name.downcase] | ||||
|       return nil if name.to_s.empty? | ||||
|       name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase]) | ||||
|     end | ||||
|  | ||||
|     # Public: Look up Language by one of its aliases. | ||||
| @@ -164,7 +165,8 @@ module Linguist | ||||
|     # | ||||
|     # Returns the Language or nil if none was found. | ||||
|     def self.find_by_alias(name) | ||||
|       name && @alias_index[name.downcase] | ||||
|       return nil if name.to_s.empty? | ||||
|       name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase]) | ||||
|     end | ||||
|  | ||||
|     # Public: Look up Languages by filename. | ||||
| @@ -240,7 +242,8 @@ module Linguist | ||||
|     # | ||||
|     # Returns the Language or nil if none was found. | ||||
|     def self.[](name) | ||||
|       name && @index[name.downcase] | ||||
|       return nil if name.to_s.empty? | ||||
|       name && (@index[name.downcase] || @index[name.split(',').first.downcase]) | ||||
|     end | ||||
|  | ||||
|     # Public: A List of popular languages | ||||
|   | ||||
| @@ -214,7 +214,7 @@ AspectJ: | ||||
|   color: "#a957b0" | ||||
|   extensions: | ||||
|   - .aj | ||||
|   tm_scope: none | ||||
|   tm_scope: source.aspectj | ||||
|   ace_mode: text | ||||
|  | ||||
| Assembly: | ||||
| @@ -501,6 +501,13 @@ Chapel: | ||||
|   - .chpl | ||||
|   ace_mode: text | ||||
|  | ||||
| Charity: | ||||
|   type: programming | ||||
|   extensions: | ||||
|     - .ch | ||||
|   tm_scope: none | ||||
|   ace_mode: text | ||||
|  | ||||
| ChucK: | ||||
|   type: programming | ||||
|   extensions: | ||||
| @@ -609,6 +616,7 @@ Common Lisp: | ||||
|   - .lsp | ||||
|   - .ny | ||||
|   - .podsl | ||||
|   - .sexp | ||||
|   interpreters: | ||||
|   - lisp | ||||
|   - sbcl | ||||
| @@ -743,6 +751,14 @@ DM: | ||||
|   tm_scope: source.c++ | ||||
|   ace_mode: c_cpp | ||||
|  | ||||
| DNS Zone: | ||||
|   type: data | ||||
|   extensions: | ||||
|   - .zone | ||||
|   - .arpa | ||||
|   tm_scope: text.zone_file | ||||
|   ace_mode: text | ||||
|  | ||||
| DTrace: | ||||
|   type: programming | ||||
|   aliases: | ||||
| @@ -1261,6 +1277,14 @@ Groovy Server Pages: | ||||
|   tm_scope: text.html.jsp | ||||
|   ace_mode: jsp | ||||
|  | ||||
| HCL: | ||||
|   type: programming | ||||
|   extensions: | ||||
|     - .hcl | ||||
|     - .tf | ||||
|   ace_mode: ruby | ||||
|   tm_scope: source.ruby | ||||
|  | ||||
| HTML: | ||||
|   type: markup | ||||
|   tm_scope: text.html.basic | ||||
| @@ -1349,7 +1373,7 @@ Harbour: | ||||
|   color: "#0e60e3" | ||||
|   extensions: | ||||
|   - .hb | ||||
|   tm_scope: none | ||||
|   tm_scope: source.harbour | ||||
|   ace_mode: text | ||||
|  | ||||
| Haskell: | ||||
| @@ -1695,8 +1719,8 @@ LabVIEW: | ||||
|   type: programming | ||||
|   extensions: | ||||
|   - .lvproj | ||||
|   tm_scope: none | ||||
|   ace_mode: text | ||||
|   tm_scope: text.xml | ||||
|   ace_mode: xml | ||||
|  | ||||
| Lasso: | ||||
|   type: programming | ||||
| @@ -1918,6 +1942,7 @@ Makefile: | ||||
|   - GNUmakefile | ||||
|   - Kbuild | ||||
|   - Makefile | ||||
|   - Makefile.inc | ||||
|   - makefile | ||||
|   interpreters: | ||||
|   - make | ||||
| @@ -2091,6 +2116,14 @@ Myghty: | ||||
|   tm_scope: none | ||||
|   ace_mode: text | ||||
|  | ||||
| NCL: | ||||
|   type: programming | ||||
|   color: #28431f | ||||
|   extensions: | ||||
|   - .ncl | ||||
|   tm_scope: source.ncl | ||||
|   ace_mode: text | ||||
|  | ||||
| NL: | ||||
|   type: data | ||||
|   extensions: | ||||
| @@ -2630,7 +2663,7 @@ Public Key: | ||||
|  | ||||
| Puppet: | ||||
|   type: programming | ||||
|   color: "#332A77" | ||||
|   color: "#302B6D" | ||||
|   extensions: | ||||
|   - .pp | ||||
|   filenames: | ||||
| @@ -2659,7 +2692,7 @@ PureScript: | ||||
|   color: "#1D222D" | ||||
|   extensions: | ||||
|   - .purs | ||||
|   tm_scope: source.haskell | ||||
|   tm_scope: source.purescript | ||||
|   ace_mode: haskell | ||||
|  | ||||
| Python: | ||||
| @@ -2910,6 +2943,7 @@ Ruby: | ||||
|   - .pryrc | ||||
|   - Appraisals | ||||
|   - Berksfile | ||||
|   - Brewfile | ||||
|   - Buildfile | ||||
|   - Deliverfile | ||||
|   - Fastfile | ||||
| @@ -3158,6 +3192,7 @@ Slim: | ||||
|   color: "#ff8f77" | ||||
|   extensions: | ||||
|   - .slim | ||||
|   tm_scope: text.slim | ||||
|   ace_mode: text | ||||
|  | ||||
| Smali: | ||||
| @@ -3336,6 +3371,7 @@ Text: | ||||
|   extensions: | ||||
|   - .txt | ||||
|   - .fr | ||||
|   - .ncl | ||||
|   tm_scope: none | ||||
|   ace_mode: text | ||||
|  | ||||
| @@ -3500,6 +3536,14 @@ Volt: | ||||
|   tm_scope: source.d | ||||
|   ace_mode: d | ||||
|  | ||||
| Vue: | ||||
|   type: markup | ||||
|   color: "#2c3e50" | ||||
|   extensions: | ||||
|   - .vue | ||||
|   tm_scope: text.html.vue | ||||
|   ace_mode: html | ||||
|  | ||||
| Web Ontology Language: | ||||
|   type: markup | ||||
|   color: "#9cc9dd" | ||||
| @@ -3612,6 +3656,14 @@ XML: | ||||
|   - Web.config | ||||
|   - packages.config | ||||
|  | ||||
| XPages: | ||||
|   type: programming | ||||
|   extensions: | ||||
|   - .xsp-config | ||||
|   - .xsp.metadata | ||||
|   tm_scope: none | ||||
|   ace_mode: xml | ||||
|  | ||||
| XProc: | ||||
|   type: programming | ||||
|   extensions: | ||||
| @@ -3676,7 +3728,9 @@ YAML: | ||||
|   - .yml | ||||
|   - .reek | ||||
|   - .rviz | ||||
|   - .syntax | ||||
|   - .yaml | ||||
|   - .yaml-tmlanguage | ||||
|   ace_mode: yaml | ||||
|  | ||||
| Yacc: | ||||
| @@ -3781,7 +3835,13 @@ wisp: | ||||
| xBase: | ||||
|   type: programming | ||||
|   color: "#403a40" | ||||
|   aliases: | ||||
|   - advpl | ||||
|   - clipper | ||||
|   - foxpro | ||||
|   extensions: | ||||
|   - .prg | ||||
|   tm_scope: none | ||||
|   - .ch | ||||
|   - .prw | ||||
|   tm_scope: source.harbour | ||||
|   ace_mode: text | ||||
|   | ||||
| @@ -2,7 +2,7 @@ module Linguist | ||||
|   module Strategy | ||||
|     class Modeline | ||||
|       EmacsModeline = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i | ||||
|       VimModeline = /vim:\s*set\s*(?:ft|filetype)=(\w+):/i | ||||
|       VimModeline = /vim:\s*set.*\s(?:ft|filetype)=(\w+)\s?.*:/i | ||||
|  | ||||
|       # Public: Detects language based on Vim and Emacs modelines | ||||
|       # | ||||
|   | ||||
| @@ -96,7 +96,7 @@ module Linguist | ||||
|           end | ||||
|  | ||||
|         # Skip number literals | ||||
|         elsif s.scan(/(0x)?\d(\d|\.)*/) | ||||
|         elsif s.scan(/(0x\h(\h|\.)*|\d(\d|\.)*)([uU][lL]{0,2}|([eE][-+]\d*)?[fFlL]*)/) | ||||
|  | ||||
|         # SGML style brackets | ||||
|         elsif token = s.scan(/<[^\s<>][^<>]*>/) | ||||
|   | ||||
| @@ -122,7 +122,7 @@ | ||||
| - (^|/)Chart\.js$ | ||||
|  | ||||
| # Codemirror | ||||
| - (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap) | ||||
| - (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap|demo) | ||||
|  | ||||
| # SyntaxHighlighter - http://alexgorbatchev.com/ | ||||
| - (^|/)shBrush([^.]*)\.js$ | ||||
| @@ -179,6 +179,10 @@ | ||||
| # Fabric | ||||
| - Fabric.framework/ | ||||
|  | ||||
| # git config files | ||||
| - gitattributes$ | ||||
| - gitignore$ | ||||
| - gitmodules$ | ||||
|  | ||||
| ## Groovy ## | ||||
|  | ||||
| @@ -224,19 +228,6 @@ | ||||
| # Html5shiv | ||||
| - (^|/)html5shiv\.js$ | ||||
|  | ||||
| # Samples folders | ||||
| - ^[Ss]amples/ | ||||
|  | ||||
| # LICENSE, README, git config files | ||||
| - ^COPYING$ | ||||
| - LICENSE$ | ||||
| - License$ | ||||
| - gitattributes$ | ||||
| - gitignore$ | ||||
| - gitmodules$ | ||||
| - ^README$ | ||||
| - ^readme$ | ||||
|  | ||||
| # Test fixtures | ||||
| - ^[Tt]ests?/fixtures/ | ||||
|  | ||||
|   | ||||
| @@ -1,3 +1,3 @@ | ||||
| module Linguist | ||||
|   VERSION = "4.5.8" | ||||
|   VERSION = "4.5.14" | ||||
| end | ||||
|   | ||||
							
								
								
									
										6
									
								
								samples/Charity/example.ch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								samples/Charity/example.ch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| % | ||||
| %   Some very badly written Charity | ||||
| % | ||||
|  | ||||
| data LA(A) -> D = ss: A -> D | ||||
|                 | ff: -> D. | ||||
							
								
								
									
										2
									
								
								samples/Common Lisp/config.sexp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								samples/Common Lisp/config.sexp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,2 @@ | ||||
| ((exe_name hello) | ||||
|  (link_order (world hello))) | ||||
							
								
								
									
										103
									
								
								samples/Common Lisp/rss.sexp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										103
									
								
								samples/Common Lisp/rss.sexp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,103 @@ | ||||
|  | ||||
| (:TURTLE | ||||
|  | ||||
|  (:@PREFIX "rdf:" "<http://www.w3.org/1999/02/22-rdf-syntax-ns#>") | ||||
|  (:@PREFIX "owl:" "<http://www.w3.org/2002/07/owl#>") | ||||
|  (:@PREFIX "dc:" "<http://purl.org/dc/elements/1.1/>") | ||||
|  (:@PREFIX "xsd:" "<http://www.w3.org/2001/XMLSchema#>") | ||||
|  (:@PREFIX "rdfs:" "<http://www.w3.org/2000/01/rdf-schema#>") | ||||
|  | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/channel>") | ||||
|   | ||||
|    (:PREDICATE-OBJECT-LIST | ||||
|      (:URIREF #1="<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>") | ||||
|      (:OBJECTS | ||||
|        (:QNAME "rdfs:Class"))) | ||||
|         | ||||
|    (:PREDICATE-OBJECT-LIST | ||||
|      (:QNAME "rdfs:comment") | ||||
|      (:OBJECTS | ||||
|        (:STRING "An RSS information channel."))) | ||||
|         | ||||
|    (:PREDICATE-OBJECT-LIST | ||||
|      (:QNAME "rdfs:isDefinedBy") | ||||
|      (:OBJECTS | ||||
|        (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|         | ||||
|    (:PREDICATE-OBJECT-LIST | ||||
|      (:QNAME "rdfs:label") | ||||
|      (:OBJECTS | ||||
|        (:STRING "Channel")))) | ||||
|         | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/description>") | ||||
|    | ||||
|    (:PREDICATE-OBJECT-LIST | ||||
|      (:URIREF #1#) | ||||
|      (:OBJECTS | ||||
|        (:QNAME "rdf:Property"))) | ||||
|        | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") | ||||
|    (:OBJECTS (:STRING "A short text description of the subject."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Description"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:description")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/image>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS image."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Image")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/item>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS item."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Item")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/items>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") | ||||
|    (:OBJECTS | ||||
|     (:STRING "Points to a list of rss:item elements that are members of the subject channel."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Items")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/link>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") | ||||
|    (:OBJECTS (:STRING "The URL to which an HTML rendering of the subject will link."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Link"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/name>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") | ||||
|    (:OBJECTS (:STRING "The text input field's (variable) name."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Name")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/textinput>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS text input."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Text Input")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/title>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") | ||||
|    (:OBJECTS (:STRING "A descriptive title for the channel."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Title"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:title")))) | ||||
|  (:TRIPLES (:URIREF "<http://purl.org/rss/1.0/url>") | ||||
|   (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") | ||||
|    (:OBJECTS | ||||
|     (:STRING | ||||
|      "The URL of the image to used in the 'src' attribute of the channel's image tag when rendered as HTML."))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") | ||||
|    (:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "URL"))) | ||||
|   (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier"))))) | ||||
							
								
								
									
										13
									
								
								samples/DNS Zone/sample.arpa
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								samples/DNS Zone/sample.arpa
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| $ORIGIN 0.0.0.c.2.1.0.3.0.0.2.1.e.f.f.3.ip6.arpa. | ||||
| $TTL     60 | ||||
| @ 	 IN SOA ns root ( | ||||
| 	     2002042901 ; SERIAL | ||||
| 	     7200       ; REFRESH | ||||
| 	     600        ; RETRY | ||||
| 	     36000000   ; EXPIRE | ||||
| 	     120        ; MINIMUM | ||||
| 	     ) | ||||
|  | ||||
| 	    NS	 ns.example.com. | ||||
|  | ||||
| c.a.7.e.d.7.e.f.f.f.0.2.8.0.a.0 PTR  sip01.example.com. | ||||
							
								
								
									
										12
									
								
								samples/DNS Zone/sneaky.net.zone
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								samples/DNS Zone/sneaky.net.zone
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| $TTL 3d | ||||
| @ IN SOA root.localhost. root.sneaky.net. ( | ||||
|     2015042907 ; serial | ||||
|     3d         ; refresh | ||||
|     1h         ; retry | ||||
|     12d        ; expire | ||||
|     2h         ; negative response TTL | ||||
|   ) | ||||
|   IN NS root.localhost. | ||||
|   IN NS localhost. ; secondary name server is preferably externally maintained | ||||
|  | ||||
| www IN A 3.141.59.26 | ||||
							
								
								
									
										6
									
								
								samples/HCL/example.hcl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								samples/HCL/example.hcl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | ||||
| consul = "1.2.3.4" | ||||
|  | ||||
| // This is a comment | ||||
| template "foo" { | ||||
|   bar = "zip" | ||||
| } | ||||
							
								
								
									
										13
									
								
								samples/HCL/example.tf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								samples/HCL/example.tf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| resource "aws_instance" "web" { | ||||
|   // Copies the myapp.conf file to /etc/myapp.conf | ||||
|   provisioner "file" { | ||||
|     source = "conf/myapp.conf" | ||||
|     destination = "/etc/myapp.conf" | ||||
|   } | ||||
|  | ||||
|   // Copies the configs.d folder to /etc/configs.d | ||||
|   provisioner "file" { | ||||
|     source = "conf/configs.d" | ||||
|     destination = "/etc" | ||||
|   } | ||||
| } | ||||
							
								
								
									
										31
									
								
								samples/Makefile/filenames/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								samples/Makefile/filenames/Makefile.inc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| #	$OpenBSD: Makefile.inc,v 1.2 2003/11/14 20:09:20 drahn Exp $ | ||||
| #	$NetBSD: Makefile.inc,v 1.1 1996/09/30 16:34:59 ws Exp $ | ||||
|  | ||||
| .if !defined(__stand_makefile_inc) | ||||
| __stand_makefile_inc=1 | ||||
|  | ||||
| KERN_AS=	library | ||||
|  | ||||
| S=$(.CURDIR)/../../../$(R) | ||||
|  | ||||
| .if !make(libdep) && !make(sadep) && !make(salibdir) && !make(kernlibdir) && !make(obj) && !defined(NOMACHINE) | ||||
| .BEGIN: | ||||
| 	@([ -h machine ] || ln -s $(S)/arch/$(MACHINE)/include machine) | ||||
| .endif | ||||
|  | ||||
| # | ||||
| EXTRACFLAGS=	-msoft-float | ||||
| REAL_VIRT?=	-v | ||||
| ENTRY?=	_start | ||||
|  | ||||
| INCLUDES+=	-I. -I$(.OBJDIR) -I$(.CURDIR)/.. -I$(S)/arch -I$(S) | ||||
| INCLUDES+=	-I$(S)/lib/libsa | ||||
| DEFS+=		-DSTANDALONE | ||||
| CFLAGS+=	$(INCLUDES) $(DEFS) $(EXTRACFLAGS) | ||||
| CFLAGS+=	-fno-stack-protector | ||||
| LDFLAGS?=	-X -N -Ttext $(RELOC) -e $(ENTRY) | ||||
|  | ||||
| cleandir: | ||||
| 	rm -rf lib machine | ||||
|  | ||||
| .endif | ||||
							
								
								
									
										109
									
								
								samples/NCL/PrnOscPat_driver.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								samples/NCL/PrnOscPat_driver.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| undef("PrnOscPat_driver") | ||||
| function PrnOscPat_driver(eof[*][*][*]:numeric, eof_ts[*][*]:numeric, kPOP[1]:integer) | ||||
| ; ================================================================= | ||||
| ; compute Principal Oscillation Patterns (POPs) | ||||
| ; ================================================================= | ||||
| local dim_ts, dim_eof, neof, ntim, nlat, mlon, dnam_ts, dnam_eof, neof, j \ | ||||
|     , cov0, cov1, cov0_inverse, A, z, Z, pr, pi, zr, zi, mean, stdev      \ | ||||
|     , evlr, eigi, eigr    | ||||
| begin | ||||
|  | ||||
|   dim_ts  = dimsizes(eof_ts)        ; (neof,ntim) | ||||
|   dim_eof = dimsizes(eof)           ; (neof,nlat,mlon) | ||||
|  | ||||
|   ntim    = dim_ts(1) | ||||
|   neof    = dim_eof(0) | ||||
|   nlat    = dim_eof(1) | ||||
|   mlon    = dim_eof(2) | ||||
|  | ||||
|   dnam_ts = getvardims(eof_ts)      ; dimension names | ||||
|   dnam_eof= getvardims(eof)         ; used at end for meta data | ||||
|  | ||||
| ; ================================================================= | ||||
| ; lag-0 and lag-1  matrices  | ||||
| ; ================================================================= | ||||
|  | ||||
|   if (get_ncl_version().eq."6.1.2") then                ; bug in 6.1.2 | ||||
|       cov0    = covcorm(eof_ts,(/1,0/))			; lag-0 covariance matrix | ||||
|   else | ||||
|       cov0    = covcorm(eof_ts,(/0,1/))			; lag-0 covariance matrix (n x n) | ||||
|   end if | ||||
|                                                         ; either | ||||
|   cov1    = covcorm_xy(eof_ts, eof_ts, (/0,1,0/))       ; lag-1  | ||||
|  ;cov1    = covcorm_xy(eof_ts(:,0:ntim-2) \             ; alternative, brute force | ||||
|  ;                    ,eof_ts(:,1:ntim-1), (/0,0,0/))  | ||||
|  ;printVarSummary(cov1) | ||||
|  | ||||
| ; ================================================================= | ||||
| ; matrix A contains information for evolution of the POP system.  | ||||
| ; POPs are eigenvectors of A.   | ||||
| ; ================================================================= | ||||
|  | ||||
|   cov0_inverse = inverse_matrix(cov0) | ||||
|   A = cov1#inverse_matrix(cov0)                         ; [*][*] => neof x neof | ||||
|  | ||||
| ; ================================================================= | ||||
| ; NCL 6.1.1 of dgeevx:  evlr(2,2,N,N) ; (left(0)/right(1), real(0)/imag(1),:,:) | ||||
| ; Eigenvalues are returned as attributes: eigi  = evlr@eigi  ; eigr  = evlr@eigr | ||||
| ; ================================================================= | ||||
|  | ||||
|   evlr  = dgeevx_lapack(A, "B", "V", "V", "B", False)   | ||||
|  | ||||
| ; ================================================================= | ||||
| ; POP time series from eigenvalues and right eigenvectors  | ||||
| ; =================================================================  | ||||
|  ;PR   = (/ evlr(1,0,:,:) /)         ; right ev (1), real part (0) | ||||
|  ;PI   = (/ evlr(1,1,:,:) /)         ; right ev (1), imag part (1) | ||||
|                                      ; kPOP is what we want; use righteigenvector | ||||
|   pr   = (/ evlr(1,0,kPOP-1,:) /)    ; right ev (1), real part (0), row 'kPOP-1'  | ||||
|   pi   = (/ evlr(1,1,kPOP-1,:) /)    ; right ev (1), imag part (1), row 'kPOP-1' | ||||
|     | ||||
|   z    = inverse_matrix( (/ (/sum(pr*pr), sum(pr*pi)/) \ | ||||
|                           , (/sum(pr*pi), sum(pi*pi)/) /))#(/pr,pi/)#eof_ts | ||||
|     | ||||
|                                                         ; complex conjugate | ||||
|   z    = (/z(0,:), -z(1,:)/)       		    	; real & imag series | ||||
|   z    = dim_rmvmean_n(z,1) | ||||
|   mean = dim_avg_n(z,1)                                 ; calculate mean | ||||
|   stdev= dim_stddev_n(z,1)                              ; calculate stdev | ||||
|   z    = dim_standardize_n(z,1,1)			; standardize time series | ||||
|  | ||||
|   z!0     = "nPOP"				        ; add meta data | ||||
|   z!1     = dnam_ts(1)		 | ||||
|   z&nPOP  = (/0,1/) | ||||
|   z&$dnam_ts(1)$ = eof_ts&$dnam_ts(1)$             | ||||
|   z@stdev = stdev				 | ||||
|   z@mean  = mean			 | ||||
|   z@long_name = "POP timeseries"			 | ||||
|  ;printVarSummary(z) | ||||
|  | ||||
| ; ================================================================= | ||||
| ; POP spatial patterns | ||||
| ; ================================================================= | ||||
|  | ||||
|   zr = pr(0)*eof(0,:,:)			; construct POP spatial domain | ||||
|   zi = pi(0)*eof(0,:,:) | ||||
|   do j=1,neof-1 | ||||
|      zr = zr + pr(j)*eof(j,:,:) | ||||
|      zi = zi + pi(j)*eof(j,:,:) | ||||
|   end do | ||||
|  | ||||
|   Z   = (/zr*stdev(0), -zi*stdev(1)/)	; scale patterns by time series stdev | ||||
|  | ||||
|   Z!0 = "nPOP"				; add meta data | ||||
|   Z!1 = dnam_eof(1) | ||||
|   Z!2 = dnam_eof(2) | ||||
|  | ||||
|   Z&nPOP          = (/0,1/)                              | ||||
|   Z&$dnam_eof(1)$ = eof&$dnam_eof(1)$     | ||||
|   Z&$dnam_eof(2)$ = eof&$dnam_eof(2)$     | ||||
|   Z@long_name     = "POP pattern" | ||||
|  ;printVarSummary(Z) | ||||
|  | ||||
| ; ================================================================= | ||||
| ; return POP time series and POP spatial patterns as a  | ||||
| ; variable of type 'list' which contains 2 variables | ||||
| ; ================================================================= | ||||
|  | ||||
|   return( [/z, Z/] )    ; this is type "list"       | ||||
| end | ||||
							
								
								
									
										115
									
								
								samples/NCL/WRF_static_2.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								samples/NCL/WRF_static_2.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | ||||
| ;************************************************* | ||||
| ; WRF static: panel different variables  | ||||
| ;************************************************ | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"    | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"    | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" | ||||
| begin | ||||
| ;************************************************ | ||||
| ; open file and read in data | ||||
| ;************************************************ | ||||
|   f     = addfile("static.wrfsi.nc", "r") | ||||
| ;************************************************ | ||||
| ; Read variables | ||||
| ;************************************************ | ||||
|   use   = f->use(0,0,:,:)           ; land use dominant category | ||||
|   stl   = f->stl(0,0,:,:)           ; top layer (0-30cm) dom cat soiltype | ||||
|   sbl   = f->sbl(0,0,:,:)           ; bottom layer (30-90cm) dom cat soiltype | ||||
|   lat2d = f->lat(0,0,:,:) | ||||
|   lon2d = f->lon(0,0,:,:) | ||||
|   lsMask= f->lnd(0,0,:,:)           ; land (1) water (0) mas | ||||
|  | ||||
| ;************************************************ | ||||
| ; Use mask function to set all ocean areas to _FillValue | ||||
| ;************************************************ | ||||
|   use   = mask(use,lsMask,1) | ||||
|   stl   = mask(stl,lsMask,1) | ||||
|   sbl   = mask(sbl,lsMask,1) | ||||
|  | ||||
| ;************************************************ | ||||
| ; Associate 2D coordinates with variables for plotting | ||||
| ;************************************************ | ||||
|   use@lat2d = lat2d | ||||
|   use@lon2d = lon2d | ||||
|   stl@lat2d = lat2d | ||||
|   stl@lon2d = lon2d | ||||
|   sbl@lat2d = lat2d | ||||
|   sbl@lon2d = lon2d | ||||
|  | ||||
| ;************************************************   | ||||
| ; The file should be examined via: ncdump -v grid_type static.wrsi  | ||||
| ; This will print the print type. then enter below.  | ||||
| ;************************************************   | ||||
|   projection = "mercator"    | ||||
|  | ||||
| ;************************************************ | ||||
| ; create plots   | ||||
| ;************************************************ | ||||
|   wks = gsn_open_wks("ps" ,"WRF_static")      ; ps,pdf,x11,ncgm,eps | ||||
|   gsn_define_colormap(wks ,"BlAqGrYeOrReVi200"); choose colormap | ||||
|  | ||||
|   res                       = True             ; plot mods desired | ||||
|   res@gsnSpreadColors       = True             ; use full range of colormap | ||||
|   res@cnFillOn              = True             ; color plot desired | ||||
|   res@cnLinesOn             = False            ; turn off contour lines | ||||
|   res@cnLineLabelsOn        = False            ; turn off contour labels | ||||
|   res@cnLevelSpacingF       = 1                ; manually specify interval | ||||
|   res@cnFillMode            = "RasterFill"     ; activate raster mode | ||||
|   res@lbLabelAutoStride     = True             ; let NCL figure lb stride | ||||
|  | ||||
| ;************************************************ | ||||
| ; Turn on lat / lon labeling | ||||
| ;************************************************ | ||||
| ;;res@pmTickMarkDisplayMode = "Always"         ; turn on tickmarks | ||||
|  | ||||
|   dimll = dimsizes(lat2d) | ||||
|   nlat  = dimll(0) | ||||
|   mlon  = dimll(1) | ||||
|  | ||||
|   res@mpProjection          = projection | ||||
|   res@mpLimitMode           = "Corners"   | ||||
|   res@mpLeftCornerLatF      = lat2d(0,0) | ||||
|   res@mpLeftCornerLonF      = lon2d(0,0) | ||||
|   res@mpRightCornerLatF     = lat2d(nlat-1,mlon-1) | ||||
|   res@mpRightCornerLonF     = lon2d(nlat-1,mlon-1) | ||||
|  | ||||
|   res@mpCenterLonF          = f->LoV          ; set center logitude          | ||||
|                                      | ||||
|   if (projection.eq."LambertConformal") then     | ||||
|       res@mpLambertParallel1F   = f->Latin1     | ||||
|       res@mpLambertParallel2F   = f->Latin2    | ||||
|       res@mpLambertMeridianF    = f->LoV      | ||||
|   end if | ||||
|  | ||||
|   res@mpFillOn              = False            ; turn off map fill | ||||
|   res@mpOutlineDrawOrder    = "PostDraw"       ; draw continental outline last | ||||
|   res@mpOutlineBoundarySets = "GeophysicalAndUSStates" ; state boundaries | ||||
|  | ||||
| ;;res@tfDoNDCOverlay        = True             ; True only for 'native' grid | ||||
|   res@gsnAddCyclic          = False            ; data are not cyclic | ||||
|  | ||||
| ;************************************************ | ||||
| ; allocate array for 3 plots | ||||
| ;************************************************ | ||||
|   plts                      = new (3,"graphic")    | ||||
|  | ||||
| ;************************************************ | ||||
| ; Tell NCL not to draw or advance frame for individual plots | ||||
| ;************************************************ | ||||
|   res@gsnDraw               = False            ; (a) do not draw  | ||||
|   res@gsnFrame              = False            ; (b) do not advance 'frame' | ||||
|  | ||||
|   plts(0)                   = gsn_csm_contour_map(wks,use,res) | ||||
|   plts(1)                   = gsn_csm_contour_map(wks,stl,res) | ||||
|   plts(2)                   = gsn_csm_contour_map(wks,sbl,res) | ||||
| ;************************************************ | ||||
| ; create panel: panel plots have their own set of resources | ||||
| ;************************************************ | ||||
|   resP                  = True                   ; modify the panel plot | ||||
|   resP@txString         = "Land Use and Soil Type"      | ||||
|   resP@gsnMaximize      = True                   ; maximize panel area | ||||
|   resP@gsnPanelRowSpec  = True                   ; specify 1 top, 2 lower level   | ||||
|   gsn_panel(wks,plts,(/1,2/),resP)               ; now draw as one plot | ||||
|  | ||||
| end | ||||
|  | ||||
							
								
								
									
										160
									
								
								samples/NCL/WRF_track_1.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										160
									
								
								samples/NCL/WRF_track_1.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,160 @@ | ||||
| ;******************************************************** | ||||
| ; Plot storm stracks from wrfout files. | ||||
| ;******************************************************** | ||||
| ; | ||||
| ; JUN-18-2005  | ||||
| ; So-Young Ha (MMM/NCAR) | ||||
| ; SEP-01-2006 | ||||
| ; Slightly modified by Mary Haley to add some extra comments. | ||||
| ; =========================================== | ||||
|  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl" | ||||
|  | ||||
|  | ||||
| begin | ||||
|  | ||||
| ; DATES | ||||
|   date = (/1512,1600,1612,1700,1712,1800,1812,1900/) | ||||
|   ndate = dimsizes(date) | ||||
|  | ||||
|   sdate = sprinti("%4.0i",date) | ||||
|  | ||||
| ; Experiment name (for legend) | ||||
|   EXP = (/"EXP_I"/)                ; (/"EXP_I","EXP_II","EXP_III"/) | ||||
|   nexp = dimsizes(EXP) | ||||
|  | ||||
| ; To get lat/lon info. | ||||
|  | ||||
|   a = addfile("wrfout_d01_2003-07-15_00:00:00.nc","r") | ||||
|  | ||||
|   lat2d = a->XLAT(0,:,:) | ||||
|   lon2d = a->XLONG(0,:,:) | ||||
|   dimll = dimsizes(lat2d) | ||||
|   nlat  = dimll(0) | ||||
|   mlon  = dimll(1) | ||||
|  | ||||
| ; Sea Level Pressure | ||||
|   slp = wrf_user_getvar(a,"slp",0) | ||||
|   dims = dimsizes(slp) | ||||
|  | ||||
| ; Array for track | ||||
|   time = new(ndate,string) | ||||
|   imin = new(ndate,integer) | ||||
|   jmin = new(ndate,integer) | ||||
|   smin = new(ndate,integer) | ||||
|  | ||||
| ; ======= | ||||
| ;  ndate | ||||
| ; ======= | ||||
|   fs = systemfunc("ls wrfout*00") | ||||
|   nfs= dimsizes(fs) | ||||
|   if(nfs .ne. ndate) then | ||||
|      print("Check input data:"+nfs+" .ne. "+ndate) | ||||
|   end if | ||||
|  | ||||
|   do ifs=0,nfs-1 | ||||
|     f = addfile(fs(ifs)+".nc","r") | ||||
|     time(ifs) = wrf_user_list_times(f) | ||||
| ;    print(time(ifs)) | ||||
|     slp2d = wrf_user_getvar(f,"slp",0) | ||||
|  | ||||
| ; We need to convert 2-D array to 1-D array to find the minima. | ||||
|     slp1d     = ndtooned(slp2d) | ||||
|     smin(ifs) = minind(slp1d) | ||||
|  | ||||
| ; Convert the index for 1-D array back to the indeces for 2-D array. | ||||
|     minij     = ind_resolve(ind(slp1d.eq.min(slp2d)),dims) | ||||
|     imin(ifs) = minij(0,0) | ||||
|     jmin(ifs) = minij(0,1) | ||||
|  | ||||
| ;    print(time(ifs)+" : "+min(slp2d)+" ("+imin(ifs)+","+jmin(ifs)+")") | ||||
|   end do | ||||
| ; | ||||
|  | ||||
| ; Graphics section | ||||
|  | ||||
|   wks=gsn_open_wks("ps","track")              ; Open PS file. | ||||
|   gsn_define_colormap(wks,"BlGrYeOrReVi200")  ; Change color map. | ||||
|  | ||||
|   res                     = True | ||||
|   res@gsnDraw             = False             ; Turn off draw. | ||||
|   res@gsnFrame            = False             ; Turn off frame advance. | ||||
|   res@gsnMaximize         = True              ; Maximize plot in frame. | ||||
|  | ||||
|   res@tiMainString = "Hurricane Isabel"       ; Main title | ||||
|  | ||||
|   WRF_map_c(a,res,0)                          ; Set up map resources | ||||
|                                               ;    (plot options) | ||||
|   plot = gsn_csm_map(wks,res)                 ; Create a map. | ||||
|  | ||||
| ; Set up resources for polymarkers. | ||||
|   gsres                = True | ||||
|   gsres@gsMarkerIndex  = 16                  ; filled dot | ||||
|   ;gsres@gsMarkerSizeF = 0.005               ; default - 0.007 | ||||
|   cols                  = (/5,160,40/) | ||||
|  | ||||
| ; Set up resources for polylines. | ||||
|   res_lines                      = True | ||||
|   res_lines@gsLineThicknessF     = 3.           ; 3x as thick | ||||
|  | ||||
|   dot  = new(ndate,graphic)    ; Make sure each gsn_add_polyxxx call | ||||
|   line = new(ndate,graphic)    ; is assigned to a unique variable. | ||||
|  | ||||
| ; Loop through each date and add polylines to the plot. | ||||
|   do i = 0,ndate-2 | ||||
|      res_lines@gsLineColor           = cols(0) | ||||
|      xx=(/lon2d(imin(i),jmin(i)),lon2d(imin(i+1),jmin(i+1))/) | ||||
|      yy=(/lat2d(imin(i),jmin(i)),lat2d(imin(i+1),jmin(i+1))/) | ||||
|      line(i) = gsn_add_polyline(wks,plot,xx,yy,res_lines) | ||||
|   end do | ||||
|  | ||||
|   lon1d = ndtooned(lon2d) | ||||
|   lat1d = ndtooned(lat2d) | ||||
|  | ||||
| ; Loop through each date and add polymarkers to the plot. | ||||
|   do i = 0,ndate-1 | ||||
|      print("dot:"+lon1d(smin(i))+","+lat1d(smin(i))) | ||||
|      gsres@gsMarkerColor  = cols(0) | ||||
|      dot(i)=gsn_add_polymarker(wks,plot,lon1d(smin(i)),lat1d(smin(i)),gsres) | ||||
|   end do | ||||
|  | ||||
| ; Date (Legend) | ||||
|   txres               = True | ||||
|   txres@txFontHeightF = 0.015 | ||||
|   txres@txFontColor   = cols(0) | ||||
|  | ||||
|   txid1 = new(ndate,graphic) | ||||
| ; Loop through each date and draw a text string on the plot. | ||||
|   do i = 0, ndate-1 | ||||
|      txres@txJust = "CenterRight" | ||||
|      ix = smin(i) - 4 | ||||
|      print("Eye:"+ix) | ||||
|      if(i.eq.1) then | ||||
|         txres@txJust = "CenterLeft" | ||||
|         ix = ix + 8 | ||||
|      end if | ||||
|      txid1(i) = gsn_add_text(wks,plot,sdate(i),lon1d(ix),lat1d(ix),txres) | ||||
|   end do | ||||
|  | ||||
| ; Add marker and text for legend. (Or you can just use "pmLegend" instead.) | ||||
|   txres@txJust = "CenterLeft" | ||||
|  | ||||
|   txid2 = new(nexp,graphic) | ||||
|   pmid2 = new(nexp,graphic) | ||||
|   do i = 0,nexp-1 | ||||
|      gsres@gsMarkerColor  = cols(i) | ||||
|      txres@txFontColor    = cols(i) | ||||
|      ii = ((/129,119,109/))  ; ilat | ||||
|      jj = ((/110,110,110/))  ; jlon | ||||
|      ji = ii*mlon+jj         ; col x row | ||||
|      pmid2(i) = gsn_add_polymarker(wks,plot,lon1d(ji(i)),lat1d(ji(i)),gsres) | ||||
|      txid2(i) = gsn_add_text(wks,plot,EXP(i),lon1d(ji(i)+5),lat1d(ji(i)),txres) | ||||
|   end do | ||||
|  | ||||
|   draw(plot) | ||||
|   frame(wks) | ||||
| end | ||||
							
								
								
									
										129
									
								
								samples/NCL/cru_8.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								samples/NCL/cru_8.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,129 @@ | ||||
| ;***************************************************** | ||||
| ; cru_8.ncl | ||||
| ; | ||||
| ; Concepts illustrated: | ||||
| ;   - Plotting CRU (Climate Research Unit)/ BADC data | ||||
| ;   - Selecting a sub-period | ||||
| ;   - calculating a climatology | ||||
| ;   - Drawing raster contours; very basic graphics | ||||
| ; | ||||
| ;***************************************************** | ||||
|  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"    ; not needed 6.20 onward  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"    | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" | ||||
|  | ||||
| ; create references (pointers) to the files | ||||
|  | ||||
|   diri = "./" | ||||
|   fcld = addfile(diri+"cru_ts3.21.1901.2012.cld.dat.nc", "r") | ||||
|   fdtr = addfile(diri+"cru_ts3.21.1901.2012.dtr.dat.nc", "r") | ||||
|   ffrs = addfile(diri+"cru_ts3.21.1901.2012.frs.dat.nc", "r") | ||||
|   fpet = addfile(diri+"cru_ts3.21.1901.2012.pet.dat.nc", "r") | ||||
|   fpre = addfile(diri+"cru_ts3.21.1901.2012.pre.dat.nc", "r") | ||||
|   ftmn = addfile(diri+"cru_ts3.21.1901.2012.tmn.dat.nc", "r") | ||||
|   ftmp = addfile(diri+"cru_ts3.21.1901.2012.tmp.dat.nc", "r") | ||||
|   ftmx = addfile(diri+"cru_ts3.21.1901.2012.tmx.dat.nc", "r") | ||||
|   fvap = addfile(diri+"cru_ts3.21.1901.2012.vap.dat.nc", "r") | ||||
|   fwet = addfile(diri+"cru_ts3.21.1901.2012.wet.dat.nc", "r") | ||||
|  | ||||
| ; specify start & last dates (arbitrary) | ||||
|  | ||||
|   ymStrt = 199101 | ||||
|   ymLast = 200012 | ||||
|    | ||||
| ; get index values of start/lat dates | ||||
|  | ||||
|   time   = fcld->time | ||||
|   yyyymm = cd_calendar(time, -1) | ||||
|    | ||||
|   ntStrt = ind(yyyymm.eq.ymStrt)   ; index values | ||||
|   ntLast = ind(yyyymm.eq.ymLast) | ||||
|    | ||||
| ; read time segment | ||||
|  | ||||
|   cld    = fcld->cld(ntStrt:ntLast,:,:) | ||||
|   dtr    = fdtr->dtr(ntStrt:ntLast,:,:) | ||||
|   frs    = ffrs->frs(ntStrt:ntLast,:,:)  | ||||
|   pet    = fpet->pet(ntStrt:ntLast,:,:)   | ||||
|   pre    = fpre->pre(ntStrt:ntLast,:,:)  | ||||
|   tmn    = ftmn->tmn(ntStrt:ntLast,:,:)  | ||||
|   tmp    = ftmp->tmp(ntStrt:ntLast,:,:)       | ||||
|   tmx    = ftmx->tmx(ntStrt:ntLast,:,:)    | ||||
|   vap    = fvap->vap(ntStrt:ntLast,:,:)  | ||||
|   wet    = fwet->wet(ntStrt:ntLast,:,:)  | ||||
|    | ||||
|   printVarSummary(cld)        ;  [time | 120] x [lat | 360] x [lon | 720] | ||||
|    | ||||
| ; calculate monthly climatologies | ||||
|  | ||||
|   cldclm = clmMonTLL(cld)      | ||||
|   dtrclm = clmMonTLL(dtr) | ||||
|   frsclm = clmMonTLL(frs) | ||||
|   petclm = clmMonTLL(pet) | ||||
|   preclm = clmMonTLL(pre) | ||||
|   tmnclm = clmMonTLL(tmn) | ||||
|   tmpclm = clmMonTLL(tmp) | ||||
|   tmxclm = clmMonTLL(tmx) | ||||
|   vapclm = clmMonTLL(vap) | ||||
|   wetclm = clmMonTLL(wet) | ||||
|    | ||||
|      | ||||
|   printVarSummary(cldclm)     ;  [month | 12] x [lat | 360] x [lon | 720] | ||||
|   | ||||
| ;************************************ | ||||
| ; create plots ... very simple | ||||
| ;************************************ | ||||
|   | ||||
|   nt     = 6                          | ||||
|   month  = "July" | ||||
|   yrStrt = ymStrt/100 | ||||
|   yrLast = ymLast/100 | ||||
|   title  = month+": "+yrStrt+"-"+yrLast | ||||
|  | ||||
|   wks = gsn_open_wks("ps","cru")          ; open a ps  file | ||||
|   gsn_define_colormap(wks,"ncl_default")  ; choose colormap; not needed 6.20 onward  | ||||
|   plot = new(2,graphic)                   ; create graphic array | ||||
|  | ||||
|   res                      = True | ||||
|   res@cnFillOn             = True         ; turn on color fill; not needed 6.20 onward  | ||||
|   res@cnFillMode           = "RasterFill" ; Raster Mode | ||||
|   res@cnLinesOn            = False        ; Turn off contour lines | ||||
|    | ||||
|   res@gsnDraw              = False        ; do not draw picture | ||||
|   res@gsnFrame             = False        ; do not advance frame | ||||
|   res@lbOrientation        = "Vertical"   ; vertical label bar | ||||
|    | ||||
|   resp                     = True | ||||
|   resp@gsnMaximize         = True         ; make ps, eps, pdf large | ||||
|  | ||||
|   resp@txString            = title+": CLD, FRS" | ||||
|   plot(0)=gsn_csm_contour_map_ce(wks,cldclm(nt,:,:),res) | ||||
|   plot(1)=gsn_csm_contour_map_ce(wks,frsclm(nt,:,:),res) | ||||
|   gsn_panel(wks,plot,(/2,1/),resp) | ||||
|    | ||||
|   resp@txString            = title+": PET, VAP" | ||||
|   plot(0)=gsn_csm_contour_map_ce(wks,petclm(nt,:,:),res) | ||||
|   plot(1)=gsn_csm_contour_map_ce(wks,vapclm(nt,:,:),res) | ||||
|   gsn_panel(wks,plot,(/2,1/),resp) | ||||
|  | ||||
|   resp@txString            = title+": TMN, TMX" | ||||
|   plot(0)=gsn_csm_contour_map_ce(wks,tmnclm(nt,:,:),res) | ||||
|   plot(1)=gsn_csm_contour_map_ce(wks,tmxclm(nt,:,:),res) | ||||
|   gsn_panel(wks,plot,(/2,1/),resp) | ||||
|  | ||||
|   resp@txString            = title+": TMP, DTR" | ||||
|   plot(0)=gsn_csm_contour_map_ce(wks,tmpclm(nt,:,:),res) | ||||
|   plot(1)=gsn_csm_contour_map_ce(wks,dtrclm(nt,:,:),res) | ||||
|   gsn_panel(wks,plot,(/2,1/),resp) | ||||
|  | ||||
|   resp@txString            = title+": WET, PRE" | ||||
|   plot(0)=gsn_csm_contour_map_ce(wks,wetclm(nt,:,:),res) | ||||
|  | ||||
|  ;colors = (/ ... /)              | ||||
|  ;res@cnFillPalette    = colors                ; optional: distinct colors for categories | ||||
|   res@cnLevelSelectionMode = "ExplicitLevels"  ; use unequal spacing | ||||
|   res@cnLevels             = (/2.0,10,25,37.5,50,75,100,125,150,175,200,300,400,500,750/)  | ||||
|  | ||||
|   plot(1)=gsn_csm_contour_map_ce(wks,preclm(nt,:,:),res) | ||||
|   gsn_panel(wks,plot,(/2,1/),resp) | ||||
							
								
								
									
										20
									
								
								samples/NCL/gsn_csm_xy2_time_series_inputs.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								samples/NCL/gsn_csm_xy2_time_series_inputs.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| ;******************** Inputs Regarding Input and Output Data  ************************************* | ||||
|  | ||||
| ;netCDFFilePath = "NULL-MYD04_L2.051-MIL2ASAE.0022-AERONET_AOD_L2.2-20112106165049.nc" | ||||
| ;outputFilePath = "plot-output" | ||||
|  | ||||
| ;******************* Inputs Regarding Data Structure *********************************************** | ||||
|  | ||||
| ;lPlotVariablesList = "mean_AERONET_AOD_L2_2_AOD0558intrp_Ames,mean_MIL2ASAE_0022_AOD0866b_Ames" | ||||
| ;rPlotVariablesList = "medn_MYD04_L2_051_AOD0550dpbl_l_Ames" | ||||
|  | ||||
| ;xDimName = "time" | ||||
| ;xDimSize = 365 | ||||
|  | ||||
| ;******************* Inputs Regarding the View Annotations **************************************** | ||||
|  | ||||
| ;title = "MAPSS Time Series" | ||||
| ;yLAxisLabel = "Mean AOD" | ||||
| ;yRAxisLabel = "Median AOD" | ||||
|  | ||||
| ;*******************END INPUTS ******************************************************************** | ||||
							
								
								
									
										128
									
								
								samples/NCL/hdf4sds_7.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								samples/NCL/hdf4sds_7.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,128 @@ | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"  | ||||
| ;************************************************************** | ||||
| ; User Input | ||||
| ;*************************************************************** | ||||
|                                              ; INPUT | ||||
|    diri   = "./"                             ; input directory | ||||
|    fili   = "wv_LV3_MET08_20050102_12345678_L00013712E00013712.hdf" | ||||
|  | ||||
|    pltDir  = "./"                        ; directory for plot output | ||||
|    sfx     = get_file_suffix(fili,1)  | ||||
|   ;pltName = sfx@fBase                   ; output graphic name | ||||
|    pltName = "hdf4sds" | ||||
|    pltType = "ps"                                             | ||||
|  | ||||
| ;*************************************************************** | ||||
| ; End User Input | ||||
| ;*************************************************************** | ||||
|  | ||||
| ;*************************************************************** | ||||
| ; Open SEVIRI L3 'wv' HDF file | ||||
| ;*************************************************************** | ||||
| ; Note the rather unusual data format: flag *prepended* to data value | ||||
| ;*************************************************************** | ||||
| ;     integer twc_lv3 ( fakeDim0, fakeDim1 ) | ||||
| ;        long_name :    total water vapour column + flag | ||||
| ;        units :        fmmmm | ||||
| ;        format :       I4 | ||||
| ;        valid_range :  ( 10000, 38000 ) | ||||
| ;        _FillValue :   -99 | ||||
| ;        legend_01 :    f = flag | ||||
| ;        legend_02 :    f = 1 averaged level 2 values | ||||
| ;        legend_03 :    f = 2 interpolated from averaged level 2 values | ||||
| ;        legend_04 :    f = 3 gaps filled with NVAP climatology | ||||
| ;        legend_05 :    mmmm = water vapour column in mm * 100. as integer | ||||
| ;        legend_06 :    Example: 11025 means: flag = 1, 10.25 mm water vapour column | ||||
| ;        min_lat :      -74.75 | ||||
| ;        max_lat :      61.75 | ||||
| ;        min_lon :      -75.25 | ||||
| ;        max_lon :      75.25 | ||||
| ;        dlat : 0.5 | ||||
| ;        dlon : 0.5 | ||||
| ;--------------------------------------------------------------- | ||||
|  | ||||
|    f      = addfile (diri+fili, "r") | ||||
|    ifx    = f->twc_lv3                  ; fmmmm (integer)                      | ||||
|    printVarSummary(ifx) | ||||
|  | ||||
|    flag   = ifx/10000                   ; extract flag | ||||
|    ix     = ifx - flag*10000            ; extract mmmm | ||||
|    x      = ix*0.01                     ; scale | ||||
|  | ||||
| ; create meta data for 'x' | ||||
|  | ||||
|    dimx   = dimsizes(x) | ||||
|    nlat   = dimx(0)                     ; grid size x(nlat,mlon) | ||||
|    mlon   = dimx(1) | ||||
|  | ||||
|    lat    = fspan(ifx@min_lat, ifx@max_lat, nlat) | ||||
|    lat@units = "degrees_north" | ||||
|    lon    = fspan(ifx@min_lon, ifx@max_lon, mlon) | ||||
|    lon@units = "degrees_east" | ||||
|  | ||||
|    x!0    = "lat" | ||||
|    x!1    = "lon" | ||||
|    x&lat  =  lat | ||||
|    x&lon  =  lon | ||||
|    x@long_name = "SEVIRI: Total Water Vapor" | ||||
|    x@units     = "mm" | ||||
|  | ||||
|    delete( [/ifx, ix/] )                ; no longer needed | ||||
|  | ||||
| ;*************************************************************** | ||||
| ; Create plot  | ||||
| ;*************************************************************** | ||||
|    wks    = gsn_open_wks(pltType, pltDir+pltName) | ||||
|  | ||||
|    plot   = new (2, "graphic") | ||||
|     | ||||
|    res                      = True     ; plot mods desired | ||||
|    res@gsnAddCyclic         = False    ; data noty global | ||||
|    res@gsnDraw              = False | ||||
|    res@gsnFrame             = False | ||||
|       | ||||
|    res@cnFillOn             = True     ; turn on color fill | ||||
|    res@cnLinesOn            = False    ; turn of contour lines | ||||
|    res@cnFillMode           = "RasterFill" ; Raster Mode | ||||
|    res@cnLinesOn            =  False       ; Turn off contour lines | ||||
|    res@cnLineLabelsOn       =  False       ; Turn off contour lines | ||||
|    res@cnMissingValFillColor= "background" ; "foreground" | ||||
|     | ||||
|    res@mpCenterLonF         = 0.5*(min(x&lon) + max(x&lon)) | ||||
|    res@mpMinLatF            = min(x&lat) | ||||
|    res@mpMaxLatF            = max(x&lat) | ||||
|    res@mpMinLonF            = min(x&lon) | ||||
|    res@mpMaxLonF            = max(x&lon) | ||||
|  | ||||
|   ;res@lbOrientation        = "Vertical" | ||||
|  | ||||
|    plot(0) = gsn_csm_contour_map_ce(wks,x, res) | ||||
|  | ||||
| ; plot flag | ||||
|  | ||||
|    copy_VarCoords(x, flag) | ||||
|    flag@long_name = "Flag" | ||||
|    flag@units     = "1=avg(L2), 2=int(L2), 3=NVAP" | ||||
|    print(flag&lat+"   "+flag(:,{30})) | ||||
|  | ||||
|    res@cnLevelSelectionMode = "ManualLevels"     ; set manual contour levels | ||||
|    res@cnMinLevelValF       =   2                ; set min contour level | ||||
|    res@cnMaxLevelValF       =   3                ; one less than max | ||||
|    res@cnLevelSpacingF      =   1                ; set contour spacing | ||||
|   | ||||
|    res@lbLabelStrings       = ispan(1,3,1)       ; 1, 2, 3 | ||||
|    res@lbLabelPosition      = "Center"           ; label position | ||||
|    res@lbLabelAlignment     = "BoxCenters" | ||||
|   | ||||
|    res@gsnLeftString        = "" | ||||
|    res@gsnRightString       = "" | ||||
|    res@gsnCenterString      = "flag: 1=avg(L2), 2=int(L2), 3=NVAP" | ||||
|  | ||||
|    plot(1) = gsn_csm_contour_map_ce(wks,flag, res) | ||||
|  | ||||
|    resP                     = True                ; modify the panel plot | ||||
|    resP@txString            = fili | ||||
|    resP@gsnMaximize         = True  | ||||
|    gsn_panel(wks,plot,(/1,2/),resP)               ; now draw as one plot | ||||
							
								
								
									
										125
									
								
								samples/NCL/mask_12.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										125
									
								
								samples/NCL/mask_12.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,125 @@ | ||||
| ;---------------------------------------------------------------------- | ||||
| ; mask_12.ncl | ||||
| ; | ||||
| ; Concepts illustrated: | ||||
| ;   - Using a worldwide shapefile to create a land/ocean mask | ||||
| ;   - Masking a data array based on a geographical area | ||||
| ;   - Attaching shapefile polylines to a map plot | ||||
| ;   - Attaching lat/lon points to a map using gsn_coordinates | ||||
| ;---------------------------------------------------------------------- | ||||
| ; Downloaded GSHHS shapefiles from: | ||||
| ; | ||||
| ;  http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhg/latest/ | ||||
| ; | ||||
| ; Used the "coarsest" one: "GSHHS_shp/c/GSHHS_c_L1.shp". | ||||
| ;---------------------------------------------------------------------- | ||||
|  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" | ||||
| load "./shapefile_mask_data.ncl" | ||||
|  | ||||
| ;---------------------------------------------------------------------- | ||||
| ; Main code | ||||
| ;---------------------------------------------------------------------- | ||||
| begin | ||||
|   WRITE_MASK = True | ||||
|   DEBUG      = False | ||||
|  | ||||
| ;---Read data to plot and mask | ||||
|   dir        = "$NCARG_ROOT/lib/ncarg/data/cdf/" | ||||
|   cdf_prefix = "uv300" | ||||
|   cdf_file   = dir + cdf_prefix + ".nc" | ||||
|   fin        = addfile(cdf_file,"r") | ||||
|   u          = fin->U(1,:,:) | ||||
| ; | ||||
| ; Create a mask array the same size as "u", using | ||||
| ; lat/lon data read off a shapefile. | ||||
| ; | ||||
|   shpfile   = "GSHHS_shp/c/GSHHS_c_L1.shp" | ||||
|   opt             = True | ||||
|   opt@return_mask = True | ||||
|  | ||||
|   land_mask = shapefile_mask_data(u,shpfile,opt) | ||||
|  | ||||
| ;---Mask "u" against land and ocean. | ||||
|   u_land_mask  = where(land_mask.eq.1,u,u@_FillValue) | ||||
|   u_ocean_mask = where(land_mask.eq.0,u,u@_FillValue) | ||||
|   copy_VarMeta(u,u_land_mask) | ||||
|   copy_VarMeta(u,u_ocean_mask) | ||||
|  | ||||
| ;---Start the graphics | ||||
|   wks = gsn_open_wks("ps","mask") | ||||
|  | ||||
|   res                       = True | ||||
|  | ||||
|   res@gsnMaximize           = True           ; maximize plot in frame | ||||
|   res@gsnDraw               = False          ; don't draw plot yet | ||||
|   res@gsnFrame              = False          ; don't advance frame yet | ||||
|  | ||||
|   res@cnFillOn              = True | ||||
|   res@cnLineLabelsOn        = False | ||||
|   res@cnLinesOn             = False | ||||
|  | ||||
| ;---Make sure both plots have same contour levels | ||||
|   mnmxint                   = nice_mnmxintvl(min(u),max(u),25,False) | ||||
|   res@cnLevelSelectionMode  = "ManualLevels" | ||||
|   res@cnMinLevelValF        = mnmxint(0) | ||||
|   res@cnMaxLevelValF        = mnmxint(1) | ||||
|   res@cnLevelSpacingF       = mnmxint(2) | ||||
|  | ||||
|   res@lbLabelBarOn          = False | ||||
|   res@gsnAddCyclic          = False | ||||
|  | ||||
|   res@mpFillOn              = False | ||||
|   res@mpOutlineOn           = False | ||||
|  | ||||
|   res@gsnRightString        = "" | ||||
|   res@gsnLeftString         = "" | ||||
|  | ||||
| ;---Create plot of original data and attach shapefile outlines | ||||
|   res@tiMainString         = "Original data with shapefile outlines" | ||||
|   map_data = gsn_csm_contour_map(wks,u,res) | ||||
|   dum1     = gsn_add_shapefile_polylines(wks,map_data,shpfile,False) | ||||
|  | ||||
| ;---Create plots of masked data | ||||
|   res@tiMainString         = "Original data masked against land" | ||||
|   map_land_mask  = gsn_csm_contour_map(wks,u_land_mask,res) | ||||
|   res@tiMainString         = "Original data masked against ocean" | ||||
|   map_ocean_mask = gsn_csm_contour_map(wks,u_ocean_mask,res) | ||||
|  | ||||
|   if(DEBUG) then | ||||
|     mkres                 = True | ||||
| ;    mkres@gsMarkerSizeF   = 0.007 | ||||
|     mkres@gsnCoordsAttach = True | ||||
|     gsn_coordinates(wks,map_data,u,mkres) | ||||
|     mkres@gsnCoordsNonMissingColor = "yellow" | ||||
|     mkres@gsnCoordsMissingColor    = "black" | ||||
|     gsn_coordinates(wks,map_land_mask,u_land_mask,mkres) | ||||
|     gsn_coordinates(wks,map_ocean_mask,u_ocean_mask,mkres) | ||||
|   end if | ||||
|  | ||||
| ;---Add shapefile outlines | ||||
|   dum2 = gsn_add_shapefile_polylines(wks,map_land_mask,shpfile,False) | ||||
|   dum3 = gsn_add_shapefile_polylines(wks,map_ocean_mask,shpfile,False) | ||||
|  | ||||
| ;---Draw all three plots on one page | ||||
|   pres                  = True | ||||
|   pres@gsnMaximize      = True | ||||
|   pres@gsnPanelLabelBar = True | ||||
|   gsn_panel(wks,(/map_data,map_land_mask,map_ocean_mask/),(/3,1/),pres) | ||||
|  | ||||
|   if(WRITE_MASK) then | ||||
|     delete(fin)     ; Close file before we open again. | ||||
| ; | ||||
| ; Make copy of file so we don't overwrite original. | ||||
| ; This is not necessary, but it's safer. | ||||
| ; | ||||
|     new_cdf_file = cdf_prefix + "_with_mask.nc" | ||||
|     system("/bin/cp " + cdf_file + " " + new_cdf_file) | ||||
|     finout = addfile(new_cdf_file,"w") | ||||
|     filevardef(finout, "land_mask", typeof(land_mask), (/ "lat", "lon" /) ) | ||||
|     finout->land_mask = (/land_mask/) | ||||
|   end if | ||||
| end | ||||
|  | ||||
							
								
								
									
										115
									
								
								samples/NCL/mcsst_1.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								samples/NCL/mcsst_1.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | ||||
| ;***************************************************** | ||||
| ; mcsst_1.ncl | ||||
| ; | ||||
| ; Concepts illustrated: | ||||
| ;   - Plotting NAVO MCSST data | ||||
| ;   - Using fbindirread to read in fortran binary data | ||||
| ;   - Converting "byte" data to "float" | ||||
| ;   - Adding meta data (attributes and coordinates) to a variable | ||||
| ;   - Adding gray to an existing color map | ||||
| ;   - Spanning all but the last two colors in a color map for contour fill | ||||
| ;   - Drawing raster contours | ||||
| ; | ||||
| ;***************************************************** | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" | ||||
| ;*************************************** | ||||
| ; type of data available on file | ||||
| ;*************************************** | ||||
| ; ipar=0  Weekly Binned Sea Surface Temperature  | ||||
| ; ipar=1  Number of Points in Bin  | ||||
| ; ipar=2  Weekly Binned Sea Surface Temperature Anomaly  | ||||
| ; ipar=3  Interpolated Sea Surface Temperature  | ||||
| ; ipar=4  Interpolated Sea Surface Temperature Anomaly  | ||||
| ;*************************************** | ||||
| begin | ||||
|   ipar  = 3 | ||||
|   fname = "2001311d18N16.dat" | ||||
|   tmp   = fbindirread(fname,ipar,(/1024,2048/),"byte") | ||||
| ;*************************************** | ||||
| ; convert to float and then change to true SST | ||||
| ;*************************************** | ||||
|   xslope = 0.15 | ||||
|   if(ipar.eq.4.or.ipar.eq.2)then               ; anom has different intercept | ||||
|     yint = -20.0 | ||||
|   end if | ||||
|   if(ipar.eq.3.or.ipar.eq.0)then | ||||
|     yint = -3.0  | ||||
|   end if | ||||
|   sst  = new((/1024,2048/),"float")            ; create float var | ||||
|   sst  = tmp*xslope+yint                       ; convert to float | ||||
|   delete(tmp)                                  ; delete unecessary array | ||||
| ;*************************************** | ||||
| ; assign missing values. The original missing value was zero, but since it was | ||||
| ; not assigned in NCL, it was not recognized. The new missing values are  | ||||
| ; listed below. These will be changed later. | ||||
| ;*************************************** | ||||
|   if(ipar.eq.4)then | ||||
|      sst@_FillValue = -20                     | ||||
|   end if | ||||
|   if(ipar.eq.3.or.ipar.eq.0)then | ||||
|      sst@_FillValue = -3                      | ||||
|   end if | ||||
| ;*************************************** | ||||
| ;   create coordinate variables | ||||
| ;*************************************** | ||||
|   nlat      = 1024 | ||||
|   dy        = 180./nlat | ||||
|   lat       = (90. -(ispan(0,1023,1)*dy))-dy/2 | ||||
|   lat!0     = "lat" | ||||
|   lat&lat   = lat | ||||
|   lat@units = "degrees_north" | ||||
|  | ||||
|   nlon      = 2048 | ||||
|   dx        = 360./nlon | ||||
|   lon       = (ispan(0,2047,1)*dx)+dx/2-180. ; note -180. added by sjm to align | ||||
|   lon!0     = "lon" | ||||
|   lon&lon   = lon | ||||
|   lon@units = "degrees_east"    | ||||
| ;*************************************** | ||||
| ;   fill out the netCDF data model | ||||
| ;*************************************** | ||||
|   sst!0          = "lat"               ; name dimensions | ||||
|   sst!1          = "lon"               ; ditto | ||||
|   sst            = sst(::-1,:)         ; reverse lat orientation | ||||
|   sst@long_name  = "NAVO MCSST"        ; assign long_name | ||||
|   sst@units      = "deg C"             ; assign units | ||||
|   sst&lat        = lat                 ; assign lat cv | ||||
|   sst&lon        = lon	               ; assign lon cv | ||||
|   sst@_FillValue = -999.               ; assign missing value    | ||||
| ;*************************************** | ||||
| ;   get year and day from filename | ||||
| ;*************************************** | ||||
|   res   = True                          ; plot mods desired | ||||
|   title = stringtochar(fname)           ; parse file name to get date | ||||
|   year  = title(0:3) | ||||
|   jday  = title(4:6) | ||||
|   res@gsnCenterString = year+" "+jday   ; create center string | ||||
| ;*************************************** | ||||
| ;   create plot | ||||
| ;*************************************** | ||||
|   wks  = gsn_open_wks("ps","mcsst")    ; open workstation (plot destination) | ||||
|   gsn_define_colormap(wks,"BlGrYeOrReVi200") ; choose colormap   | ||||
| ; | ||||
| ; This will not be necessary in V6.1.0 and later. Named colors can | ||||
| ; be used without having to first add them to the color map. | ||||
| ; | ||||
|   d    = NhlNewColor(wks,0.8,0.8,0.8)   ; add gray to colormap | ||||
|  | ||||
|  | ||||
|   res@cnFillOn             = True        ; turn on color | ||||
|   res@gsnSpreadColors      = True        ; use full range of colormap | ||||
|   res@gsnSpreadColorStart  = 2           ; start at color 2 | ||||
|   res@gsnSpreadColorEnd    = -3          ; don't use added gray | ||||
|   res@cnLinesOn            = False       ; no contour lines | ||||
|   res@cnFillDrawOrder      = "PreDraw"   ; draw contours before continents | ||||
|   res@gsnMaximize          = True        ; maximize plot | ||||
|  | ||||
|  | ||||
| ; For a grid this size, it is better to use raster mode. It will be  | ||||
| ; significantly faster, and will not go over NCL's 16mb default plot size. | ||||
|   res@cnFillMode           = "RasterFill"       ; turn on raster mode | ||||
|  | ||||
|   plot = gsn_csm_contour_map_ce(wks,sst,res) ; contour the variable | ||||
|  | ||||
| end | ||||
							
								
								
									
										3
									
								
								samples/NCL/primero.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								samples/NCL/primero.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| val=102 | ||||
| a=val/4. | ||||
| print(a) | ||||
							
								
								
									
										172
									
								
								samples/NCL/topo_9.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								samples/NCL/topo_9.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,172 @@ | ||||
| ;---------------------------------------------------------------------- | ||||
| ; topo_9.ncl | ||||
| ; | ||||
| ; Concepts illustrated: | ||||
| ;   - Recreating a jpeg topographic image as an NCL map object | ||||
| ;   - Zooming in on a jpeg image | ||||
| ;   - Drawing a box around an area of interest on a map | ||||
| ;   - Attaching polylines to a map | ||||
| ;   - Using "overlay" to overlay multiple contour plots | ||||
| ;   - Using more than 256 colors per frame | ||||
| ;   - Using functions for cleaner code | ||||
| ;---------------------------------------------------------------------- | ||||
| ; NOTE: This example will only work with NCL V6.1.0 and later. | ||||
| ; | ||||
| ; This script recreates a JPEG image that was converted to a NetCDF | ||||
| ; file with color separated bands using the open source tool | ||||
| ; "gdal_translate": | ||||
| ; | ||||
| ;  gdal_translate -ot Int16 -of netCDF EarthMap_2500x1250.jpg \ | ||||
| ;           EarthMap_2500x1250.nc | ||||
| ;---------------------------------------------------------------------- | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"    | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"    | ||||
|  | ||||
| ;---------------------------------------------------------------------- | ||||
| ; This function imports a JPEG image that's on the whole globe, | ||||
| ; and recreates it as an NCL map object that is zoomed in on the | ||||
| ; southern tip of Africa. | ||||
| ;---------------------------------------------------------------------- | ||||
| undef("recreate_jpeg_image") | ||||
| function recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon) | ||||
| begin | ||||
|   orig_jpg_filename = "EarthMap_2500x1250.jpg" | ||||
|   nc_filename       = "EarthMap_2500x1250.nc" | ||||
|  | ||||
| ;--You could use a system call to do the NetCDF conversion | ||||
| ;  cmd = "gdal_translate -ot Int16 -of netCDF " + jpeg_filename + \ | ||||
| ;         " " + nc_filename) | ||||
| ;  system(cmd) | ||||
|  | ||||
| ;---Read the three bands of data | ||||
|   f     = addfile(nc_filename,"r") | ||||
|   Band1 = where(f->Band1.gt.255, 255, f->Band1)  ; red channel | ||||
|   Band2 = where(f->Band2.gt.255, 255, f->Band2)  ; green channel | ||||
|   Band3 = where(f->Band3.gt.255, 255, f->Band3)  ; blue channel | ||||
|  | ||||
|   band_dims = dimsizes(Band3) | ||||
|   nlat      = band_dims(0) | ||||
|   nlon      = band_dims(1) | ||||
|   print("dimensions of image = " + nlat + " x " + nlon) | ||||
|  | ||||
| ; | ||||
| ; Add lat/lon data so we can overlay on a map, and/or  | ||||
| ; overlay contours. We know the image is global, | ||||
| ; cylindrical equidistant, and centered about lon=0. | ||||
| ; | ||||
|   lat       = fspan( -90, 90,nlat) | ||||
|   lon       = fspan(-180,180,nlon) | ||||
|   lat@units = "degrees_north" | ||||
|   lon@units = "degrees_east" | ||||
|  | ||||
|   Band1!0   = "lat" | ||||
|   Band1!1   = "lon" | ||||
|   Band2!0   = "lat" | ||||
|   Band2!1   = "lon" | ||||
|   Band3!0   = "lat" | ||||
|   Band3!1   = "lon" | ||||
|   Band1&lat = lat | ||||
|   Band1&lon = lon | ||||
|   Band2&lat = lat | ||||
|   Band2&lon = lon | ||||
|   Band3&lat = lat | ||||
|   Band3&lon = lon | ||||
|  | ||||
|   res                 = True | ||||
|  | ||||
|   res@gsnMaximize     = True | ||||
|  | ||||
|   res@gsnFrame        = False        ; Don't draw or advance | ||||
|   res@gsnDraw         = False        ; frame yet. | ||||
|  | ||||
|   res@cnFillOn        = True          | ||||
|   res@cnFillMode      = "RasterFill" ; Raster fill can be faster | ||||
|  | ||||
|   res@cnLevelSelectionMode  = "EqualSpacedLevels" | ||||
|   res@cnMaxLevelCount       = 254   | ||||
|   res@cnFillBackgroundColor = (/ 1., 1., 1., 1./) | ||||
|  | ||||
|   res@cnLinesOn       = False              ; Turn off contour lines      . | ||||
|   res@cnLineLabelsOn  = False              ; Turn off contour labels | ||||
|   res@cnInfoLabelOn   = False              ; Turn off info label | ||||
|   res@lbLabelBarOn    = False              ; Turn off labelbar | ||||
|   res@gsnRightString  = ""                 ; Turn off subtitles | ||||
|   res@gsnLeftString   = "" | ||||
|   res@pmTickMarkDisplayMode    = "Always" | ||||
|  | ||||
| ;---Construct RGBA colormaps... | ||||
|   ramp   = fspan(0., 1., 255) | ||||
|   reds   = new((/255, 4/), float) | ||||
|   greens = new((/255, 4/), float) | ||||
|   blues  = new((/255, 4/), float) | ||||
|  | ||||
|   reds   = 0 | ||||
|   greens = 0 | ||||
|   blues  = 0 | ||||
|  | ||||
|   reds(:,0)   = ramp | ||||
|   greens(:,1) = ramp | ||||
|   blues(:,2)  = ramp | ||||
|  | ||||
|   ; The red contour map is plotted fully opaque; the green and blue | ||||
|   ; are plotted completely transparent. When overlain, the colors  | ||||
|   ; combine (rather magically). | ||||
|   reds(:,3)   = 1. | ||||
|   greens(:,3) = 0  | ||||
|   blues(:,3)  = 0 | ||||
|  | ||||
|   res@cnFillColors = greens  | ||||
|   greenMap = gsn_csm_contour(wks, Band2, res)  | ||||
|  | ||||
|   res@cnFillColors = blues | ||||
|   blueMap = gsn_csm_contour(wks, Band3, res)  | ||||
|   | ||||
| ;---This will be our base, so make it a map plot. | ||||
|   res@cnFillColors             = reds  | ||||
|   res@gsnAddCyclic             = False | ||||
|  | ||||
|   res@mpFillOn                 = False   | ||||
|  | ||||
| ;---Zoom in on area of interest | ||||
|   res@mpMinLatF                = minlat | ||||
|   res@mpMaxLatF                = maxlat | ||||
|   res@mpMinLonF                = minlon | ||||
|   res@mpMaxLonF                = maxlon | ||||
|  | ||||
|   redMap = gsn_csm_contour_map(wks, Band1, res)  | ||||
|  | ||||
| ;---Overlay everything to create the topo map | ||||
|   overlay(redMap, greenMap) | ||||
|   overlay(redMap, blueMap) | ||||
|  | ||||
|   return(redMap) | ||||
| end | ||||
|  | ||||
| ;---------------------------------------------------------------------- | ||||
| ; Main code | ||||
| ;---------------------------------------------------------------------- | ||||
| begin | ||||
| ;---Recreating jpeg images only works for X11 and PNG. | ||||
|   wks = gsn_open_wks("png","topo") | ||||
|  | ||||
| ;---Southern part of Africa | ||||
|   minlat = -40 | ||||
|   maxlat =  5 | ||||
|   minlon = 10 | ||||
|   maxlon = 40 | ||||
|  | ||||
|   map = recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon) | ||||
|  | ||||
| ;---Overlay a red box | ||||
|   lonbox = (/ 15, 35, 35, 15, 15/) | ||||
|   latbox = (/-30,-30,-10,-10,-30/) | ||||
|  | ||||
|   lnres                  = True | ||||
|   lnres@gsLineColor      = "red" ; red box  | ||||
|   lnres@gsLineThicknessF = 4.0   ; make box thicker | ||||
|   box = gsn_add_polyline(wks,map,lonbox,latbox,lnres) | ||||
|  | ||||
|   draw(map)       ; Drawing the map will draw the red box | ||||
|   frame(wks) | ||||
|  | ||||
| end | ||||
							
								
								
									
										120
									
								
								samples/NCL/traj_3.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								samples/NCL/traj_3.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| ;************************************************* | ||||
| ; traj_3.ncl | ||||
| ;************************************************* | ||||
| load          "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
| external TRAJ "./particle.so" | ||||
| ;************************************************* | ||||
| begin | ||||
|  | ||||
|   path  = "./data.asc" | ||||
|   data  = asciiread(path,(/500,6/),"float") | ||||
| ;************************************************* | ||||
| ; some parameters | ||||
| ;************************************************* | ||||
|   np = 1 | ||||
|   nq = 500 | ||||
|   ncor= 8 | ||||
|   xrot   = new((/np,nq/),float) | ||||
|   yrot   = new((/np,nq/),float) | ||||
|   xaxis  = new(ncor,float) | ||||
|   yaxis  = new(ncor,float) | ||||
| ;************************************************** | ||||
| ; convert data into rotated format | ||||
| ;************************************************** | ||||
|   TRAJ::particle(path,xrot,yrot,nq,np,xaxis,yaxis,ncor) | ||||
| ;************************************************** | ||||
| ; create plot | ||||
| ;************************************************** | ||||
|   wks = gsn_open_wks("ps","traj")      ; Open an ps file | ||||
|  | ||||
|   xyres = True | ||||
|   xyres@gsnFrame     = False      ; don't advance the frame | ||||
|   xyres@gsnDraw      = False      ; don't draw indivdual plots | ||||
|   xyres@tmXTBorderOn = False      ; don't draw top axis | ||||
|   xyres@tmXBBorderOn = False      ; don't draw bottom axis | ||||
|   xyres@tmYRBorderOn = False      ; don't draw right axis | ||||
|   xyres@tmYLBorderOn = False      ; don't draw left axis | ||||
|   xyres@tmXTOn       = False      ; don't draw top-axis tick marks  | ||||
|   xyres@tmXBOn       = False      ; don't draw bottom-axis tick marks | ||||
|   xyres@tmYROn       = False      ; don't draw right-axis tick marks | ||||
|   xyres@tmYLOn       = False      ; don't draw left-axis tick marks | ||||
|  | ||||
|   xyres@xyLineColors      = (/"red"/)    ; set the line color to red | ||||
|   xyres@xyLineThicknessF  = 4.0          ; 4 times the line thickness  | ||||
|  | ||||
|   xyres@trXMaxF      =  15000            ; choose range of axis even though | ||||
|   xyres@trXMinF      = -10000            ; we don't see them | ||||
|   xyres@trYMaxF      =  1000 | ||||
|   xyres@trYMinF      = -1000 | ||||
|  | ||||
|   plot = gsn_xy(wks,xrot,yrot,xyres)     ; Draw trajectory | ||||
| ;********************************************** | ||||
| ; create arrays needed for the bounding box | ||||
| ;********************************************** | ||||
|   a1 = new(5,float) | ||||
|   b1 = new(5,float) | ||||
|   a2 = new(5,float) | ||||
|   b2 = new(5,float) | ||||
|   a3 = new(2,float) | ||||
|   b3 = new(2,float) | ||||
|   a4 = new(2,float) | ||||
|   b4 = new(2,float) | ||||
|   a5 = new(2,float) | ||||
|   b5 = new(2,float) | ||||
|   a6 = new(2,float) | ||||
|   b6 = new(2,float) | ||||
|   a0 = new(2,float) | ||||
|   b0 = new(2,float) | ||||
| ;********************************************** | ||||
| ; determine values of each bounding line from information | ||||
| ; returned from particle.f | ||||
| ;********************************************** | ||||
|   a1(0:3) = xaxis(:3)              | ||||
|   b1(0:3) = yaxis(:3) | ||||
|   a1(4)   = xaxis(0) | ||||
|   b1(4)   = yaxis(0) | ||||
|  | ||||
|   a2(0:3) = xaxis(4:) | ||||
|   b2(0:3) = yaxis(4:)  | ||||
|   a2(4)   = xaxis(4) | ||||
|   b2(4)   = yaxis(4)  | ||||
|  | ||||
|   a3      = xaxis(0:4:4) | ||||
|   b3      = yaxis(0:4:4)  | ||||
|   a4      = xaxis(1:5:4) | ||||
|   b4      = yaxis(1:5:4) | ||||
|   | ||||
|   a5      = xaxis(2:6:4) | ||||
|   b5      = yaxis(2:6:4)  | ||||
|   a6      = xaxis(3:7:4) | ||||
|   b6      = yaxis(3:7:4)  | ||||
|  | ||||
|   a0(0)   = xaxis(3) | ||||
|   b0(0)   = yaxis(3) | ||||
|   a0(1)   = xrot(0,0) | ||||
|   b0(1)   = yrot(0,0) | ||||
| ;***************************************************************  | ||||
| ; create bounding box by drawing multiple xy plots on top of | ||||
| ; each other. each with their individual axis turned off. | ||||
| ;*************************************************************** | ||||
|   xyres@xyLineColors      =  (/"black"/)   ; line color  | ||||
|   xyres@xyLineThicknessF  = 1.0            ; regular line thickness  | ||||
|  | ||||
|   bottom = gsn_xy(wks,a1,b1,xyres) ; Draw the bottom bounding box. | ||||
|   top    = gsn_xy(wks,a2,b2,xyres) ; Draw the top bounding box. | ||||
|   side1  = gsn_xy(wks,a3,b3,xyres) ; Draw a side line. | ||||
|   side2  = gsn_xy(wks,a4,b4,xyres) ; Draw a side line. | ||||
|   side3  = gsn_xy(wks,a5,b5,xyres) ; Draw a side line. | ||||
|   side4  = gsn_xy(wks,a6,b6,xyres) ; Draw a side line. | ||||
| ;***************************************************************  | ||||
| ; now draw a large brown line to represent the chimney | ||||
| ;*************************************************************** | ||||
|   xyres@xyLineColors      = (/"brown"/)   ; chimney color | ||||
|   xyres@xyLineThicknessF  = 9.0           ; thick line  | ||||
|   xyres@tiMainString      = "Pollutant Trajectory in a 3D Volume" | ||||
|   chimney = gsn_xy(wks,a0,b0,xyres)       ; Draw the chimney. | ||||
|  | ||||
|   draw(wks) | ||||
|   frame(wks) | ||||
|  | ||||
| end | ||||
							
								
								
									
										167
									
								
								samples/NCL/tsdiagram_1.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								samples/NCL/tsdiagram_1.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| ; Read potential temp (TEMP), salinity (SALT) | ||||
| ; Compute potential density (PD) for specified range PD(t,s) | ||||
| ; (use ncl function based on Yeager's algorithm for rho computation) | ||||
| ; Assumes annual and zonally avgeraged input data set (i.e, one time slice) | ||||
| ; Used K.Lindsay's "za" for zonal avg -- already binned into basins | ||||
| ; Plots temp vs salt (scatter plot), pd overlay | ||||
|  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"   | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"   | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"   | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"   | ||||
|  | ||||
| begin | ||||
| ; ================================>  ; PARAMETERS | ||||
|   case    = "PHC2_gx1v3" | ||||
|   ocnfile = "za_PHC2_T_S_gx1v3.nc" | ||||
|  | ||||
|   depth_min = 14895.82   ; in cm, depth of first layer to be included  | ||||
|   depth_max =  537499.9 | ||||
| ; | ||||
| ; plot limits | ||||
| ; | ||||
|   smincn = 32.5  | ||||
|   smaxcn = 37.0 | ||||
|   tmincn = -2. | ||||
|   tmaxcn = 22. | ||||
| ; | ||||
| ; Choose basin index | ||||
| ; | ||||
| ; 0 = global  1 = southern ocean 2 = pacific 3 = indian 6 = atlantic  | ||||
| ; 8 = labrador 9 = GIN 10 = arctic | ||||
| ; | ||||
|   bi = 2  | ||||
|  | ||||
| ;=====> basin check  | ||||
|  | ||||
|   if(bi.lt.0.or.bi.gt.10) then | ||||
|     print("basin index "+ bi + " not supported") | ||||
|     exit | ||||
|   end if | ||||
|  | ||||
|   if(bi.eq.0) then | ||||
|     basin = "Global" | ||||
|     blab = "global" | ||||
|   end if | ||||
|   if(bi.eq.1) then | ||||
|       basin = "Southern Ocean" | ||||
|       blab = "so" | ||||
|   end if | ||||
|   if(bi.eq.2) then | ||||
|     basin = "Pacific Ocean" | ||||
|     blab = "pacific" | ||||
|   end if | ||||
|   if(bi.eq.3) then | ||||
|     basin = "Indian Ocean" | ||||
|     blab = "indian" | ||||
|   end if | ||||
|   if(bi.eq.6) then | ||||
|     basin = "Atlantic Ocean" | ||||
|     blab = "atlanticn" | ||||
|   end if | ||||
|   if(bi.eq.8) then | ||||
|     basin = "Labrador Sea" | ||||
|     blab = "lab" | ||||
|   end if | ||||
|   if(bi.eq.9) then | ||||
|     basin = "GIN Sea" | ||||
|     blab = "gin" | ||||
|   end if | ||||
|   if(bi.eq.10) then | ||||
|     basin = "Arctic Ocean" | ||||
|     blab = "arctic" | ||||
|   end if | ||||
|  | ||||
| ;=====> initial resource settings | ||||
|  | ||||
|   wks = gsn_open_wks("ps","tsdiagram")    ; Open a Postscript file | ||||
|  | ||||
| ;===== data  | ||||
|   focn = addfile(ocnfile, "r") | ||||
|   salt = focn->SALT(0,:,{depth_min:depth_max},:)   ;(basins, z_t, lat_t) | ||||
|   temp = focn->TEMP(0,:,{depth_min:depth_max},:) | ||||
|  | ||||
| ;====section out choice basin | ||||
|   temp_ba = temp(bi,:,:) | ||||
|   salt_ba = salt(bi,:,:) | ||||
|  | ||||
| ;===== put into scatter array format | ||||
|   tdata_ba = ndtooned(temp_ba) | ||||
|   sdata_ba = ndtooned(salt_ba) | ||||
|  | ||||
|   ydata = tdata_ba | ||||
|   xdata = sdata_ba | ||||
|  | ||||
| ;============== compute potenial density (PD), using rho_mwjf | ||||
| ; | ||||
| ; for potential density, depth = 0. (i.e. density as if brought to surface) | ||||
| ; | ||||
| ;=========================================================================== | ||||
| ; WARNING: T-S diagrams use POTENTIAL DENSITY... if set depth to something | ||||
| ; other then 0, then you will be plotting density contours computed for the | ||||
| ; specified depth layer. | ||||
| ;=========================================================================== | ||||
|  | ||||
|   depth = 0.  ;in meters | ||||
|   tspan = fspan(tmincn,tmaxcn,51) | ||||
|   sspan = fspan(smincn,smaxcn,51) | ||||
|  | ||||
|   ; the more points the better... using Yeager's numbers | ||||
|  | ||||
|   t_range = conform_dims((/51,51/),tspan,0) | ||||
|   s_range = conform_dims((/51,51/),sspan,1) | ||||
|  | ||||
|   pd = rho_mwjf(t_range,s_range,depth) | ||||
|  | ||||
|   pd!0    = "temp" | ||||
|   pd!1    = "salt" | ||||
|   pd&temp = tspan | ||||
|   pd&salt = sspan | ||||
|   pd      = 1000.*(pd-1.)        ; Put into kg/m3 pot den units | ||||
|  | ||||
| ;  printVarSummary(pd) | ||||
| ;  printVarInfo(pd,"rho_mwjf") | ||||
|  | ||||
| ;=================Graphics | ||||
|  | ||||
| ;--- scatter plot | ||||
|   res                     = True | ||||
|   res@gsnMaximize         = True | ||||
|   res@gsnDraw             = False | ||||
|   res@gsnFrame            = False | ||||
|  | ||||
|   res@xyMarkLineModes     = "Markers" | ||||
|   res@xyMarkers           = 16 | ||||
|   res@xyMarkerColors      = "black" | ||||
|   res@pmLegendDisplayMode = "Never" | ||||
|   res@txFontHeightF       = 0.01 | ||||
|   res@tiMainString        = case + " ANN AVG:  T-S Diagram" | ||||
|   res@tiXAxisString       = salt@units | ||||
|   res@tiXAxisFontHeightF  = 0.02 | ||||
|   res@tiYAxisString       = temp@units | ||||
|   res@tiYAxisFontHeightF  = 0.02 | ||||
|   res@trXMinF             = smincn | ||||
|   res@trXMaxF             = smaxcn | ||||
|   res@trYMinF             = tmincn | ||||
|   res@trYMaxF             = tmaxcn | ||||
|   res@gsnRightString      = depth_min/100. + "-"+depth_max/100. +"m" | ||||
|   res@gsnLeftString       = basin | ||||
|  | ||||
|   plot = gsn_csm_xy(wks,xdata,ydata,res) | ||||
|  | ||||
| ;----- pd overlay | ||||
|   resov                          = True | ||||
|   resov@gsnDraw                  = False | ||||
|   resov@gsnFrame                 = False | ||||
|   resov@cnLevelSelectionMode     = "AutomaticLevels" | ||||
|   resov@cnInfoLabelOn            = "False" | ||||
|   resov@cnLineLabelPlacementMode = "Constant" | ||||
|   resov@cnLineLabelFontHeightF     = ".02" | ||||
|    | ||||
|   plotpd = gsn_csm_contour(wks,pd,resov) | ||||
|   overlay(plot,plotpd) | ||||
|  | ||||
|   draw(plot) | ||||
|   frame(wks) | ||||
|  | ||||
| end | ||||
							
								
								
									
										141
									
								
								samples/NCL/unique_9.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										141
									
								
								samples/NCL/unique_9.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,141 @@ | ||||
| ;************************************ | ||||
| ; unique_9.ncl | ||||
| ; | ||||
| ; Concepts illustrated: | ||||
| ;   - Drawing raster contours over a map | ||||
| ;   - Creating a topography plot using raster contours | ||||
| ;   - Reading data from binary files | ||||
| ;   - Manually creating lat/lon coordinate arrays | ||||
| ;   - Customizing a labelbar for a contour plot | ||||
| ;************************************ | ||||
| ; This example generates a topo map over | ||||
| ; the area of Trinidad, Colorado. | ||||
| ;************************************ | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" | ||||
|  | ||||
| begin | ||||
|  | ||||
|  wks = gsn_open_wks("ps","unique") | ||||
|  | ||||
| ;----------------- read the west binary data ------------------------- | ||||
|  binfile = "trinidad-w.bin" | ||||
|  | ||||
|  quad_name = fbinrecread(binfile,0,60,"character") | ||||
|  | ||||
|  map_cornersW = fbinrecread(binfile,1,4,"double") | ||||
|  | ||||
|  lonW = fbinrecread(binfile,2,(/1201/),"double") | ||||
|  | ||||
|  latW = fbinrecread(binfile,3,(/1201/),"double") | ||||
|  | ||||
|  minmax_elevW = fbinrecread(binfile,4,2,"double") | ||||
|  | ||||
|  tmpW = fbinrecread(binfile,5,(/1201,1201/),"integer") | ||||
|   | ||||
| ;----------------- read the east binary data ------------------------- | ||||
|  binfile = "trinidad-e.bin" | ||||
|  | ||||
|  quad_name = fbinrecread(binfile,0,60,"character") | ||||
|  | ||||
|  map_cornersE = fbinrecread(binfile,1,4,"double") | ||||
|  | ||||
|  lonE = fbinrecread(binfile,2,(/1201/),"double") | ||||
|  | ||||
|  latE = fbinrecread(binfile,3,(/1201/),"double") | ||||
|  | ||||
|  minmax_elevE = fbinrecread(binfile,4,2,"double") | ||||
|  | ||||
|  tmpE = fbinrecread(binfile,5,(/1201,1201/),"integer") | ||||
|   | ||||
| ;---------------------------------------------------------------------- | ||||
|  min_elev = min((/minmax_elevW(0),minmax_elevE(0)/))*3.28 | ||||
|  max_elev = max((/minmax_elevW(1),minmax_elevE(1)/))*3.28 | ||||
|  | ||||
|  lat           = new(1201,"double") | ||||
|  lat           = latW | ||||
|  lat!0         = "lat" | ||||
|  lat&lat       = latW               ; same as latE | ||||
|  lat@long_name = "latitude" | ||||
|  lat@units     = "degrees_north" | ||||
|  | ||||
|  lon            = new(2401,"double") | ||||
|  lon(0:1200)    = lonW | ||||
|  lon(1201:2400) = lonE(1:1200) | ||||
|  lon!0          = "lon" | ||||
|  lon&lon        = lon | ||||
|  lon@long_name  = "longitude" | ||||
|  lon@units      = "degrees_east" | ||||
|  | ||||
|  data     = new((/1201,2401/),"float")  ; (lat,lon) | ||||
|  data!0   = "lat" | ||||
|  data&lat = lat | ||||
|  data!1   = "lon" | ||||
|  data&lon = lon | ||||
|  data(:,0:1200)    = (/tmpW*3.28/)            ; convert to feet | ||||
|  data(:,1201:2400) = (/tmpE(:,1:1200)*3.28/)  ; convert to feet | ||||
| ;------------------------------------------------------------- | ||||
|  | ||||
| ; | ||||
| ; Define colormap. | ||||
| ; | ||||
|   cmap = (/(/1.00, 1.00, 1.00/),(/0.00, 0.00, 0.00/), \ | ||||
|            (/0.51, 0.13, 0.94/),(/0.00, 0.00, 0.59/), \ | ||||
|            (/0.00, 0.00, 0.80/),(/0.25, 0.41, 0.88/), \ | ||||
|            (/0.12, 0.56, 1.00/),(/0.00, 0.75, 1.00/), \ | ||||
|            (/0.63, 0.82, 1.00/),(/0.82, 0.96, 1.00/), \ | ||||
|            (/1.00, 1.00, 0.78/),(/1.00, 0.88, 0.20/), \ | ||||
|            (/1.00, 0.67, 0.00/),(/1.00, 0.43, 0.00/), \ | ||||
|            (/1.00, 0.00, 0.00/),(/0.78, 0.00, 0.00/), \ | ||||
|            (/0.63, 0.14, 0.14/),(/1.00, 0.41, 0.70/)/) | ||||
|  | ||||
|  gsn_define_colormap(wks,cmap) | ||||
|  | ||||
|  res              = True | ||||
|  res@gsnMaximize  = True | ||||
|  res@gsnAddCyclic = False | ||||
|  | ||||
| ; map plot resources | ||||
|  res@mpFillOn              = False | ||||
|  res@mpLimitMode           = "Corners" | ||||
|  res@mpDataBaseVersion     = "Ncarg4_1" | ||||
|  res@mpOutlineBoundarySets = "AllBoundaries" | ||||
|  res@mpLeftCornerLonF      = map_cornersW(0)  | ||||
|  res@mpLeftCornerLatF      = map_cornersW(1) | ||||
|  res@mpRightCornerLonF     = map_cornersE(2) | ||||
|  res@mpRightCornerLatF     = map_cornersE(3) | ||||
|  | ||||
| ; contour resources | ||||
|  res@cnFillOn             = True | ||||
|  res@cnLinesOn            = False | ||||
|  res@cnFillMode           = "RasterFill" | ||||
|  res@cnLevelSelectionMode = "ExplicitLevels" | ||||
|  res@cnLevels             = (/ 5000., 6000., 7000., 8000., 8500., 9000., \ | ||||
|                                9500.,10000.,10500.,11000.,11500.,12000., \ | ||||
|                               12500.,13000.,13500./) | ||||
|  | ||||
| ; tickmark resources | ||||
|  res@pmTickMarkDisplayMode = "Always" | ||||
|  res@tmXBLabelFontHeightF   = 0.010 | ||||
|  | ||||
| ; labelbar resources | ||||
|  res@pmLabelBarWidthF         = 0.60 | ||||
|  res@txFontHeightF            = 0.012 | ||||
|  res@lbTitleString            = "elevation above mean sea level (feet)" | ||||
|  res@lbTitleFontHeightF       = 0.012 | ||||
|  res@lbLabelFontHeightF       = 0.008 | ||||
|  res@lbTitleOffsetF           = -0.27 | ||||
|  res@lbBoxMinorExtentF        = 0.15 | ||||
|  res@pmLabelBarOrthogonalPosF = -.05 | ||||
|  | ||||
| ; title resources | ||||
|  res@tiMainString      = "USGS DEM TRINIDAD (1 x 2 degrees)"  | ||||
|  res@tiMainOffsetYF    = -0.02    ; Move title down towards graphic. | ||||
|  res@tiMainFontHeightF = 0.015 | ||||
|  res@gsnLeftString     = "Min Elevation: "+min_elev | ||||
|  res@gsnRightString    = "Max Elevation: "+max_elev | ||||
|  res@gsnCenterString   = "Scale 1:250,000" | ||||
|  | ||||
|  plot = gsn_csm_contour_map(wks,data,res) | ||||
|  | ||||
| end | ||||
							
								
								
									
										131
									
								
								samples/NCL/viewport_4.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										131
									
								
								samples/NCL/viewport_4.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,131 @@ | ||||
| ; *********************************************** | ||||
| ; viewport_4.ncl | ||||
| ; | ||||
| ; Concepts illustrated: | ||||
| ;   - Drawing an XY plot with multiple curves | ||||
| ;   - Using drawNDCGrid to draw a nicely labeled NDC grid | ||||
| ;   - Changing the size/shape of an XY plot using viewport resources | ||||
| ;   - Drawing two XY plots on the same page using viewport resources | ||||
| ;   - Drawing polylines, polymarkers, and text in NDC space | ||||
| ;   - Using "getvalues" to retrieve resource values | ||||
| ;   - Maximizing plots after they've been created | ||||
| ; *********************************************** | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl" | ||||
|  | ||||
| ;******************************************************************** | ||||
| ; Draw a box around the viewport of the given object.. | ||||
| ;******************************************************************** | ||||
| procedure draw_vp_box(wks,plot) | ||||
| local vpx, vpy, vpw, vph, xbox, ybox, lnres, mkres, txres | ||||
| begin | ||||
|  | ||||
| ; Retrieve the viewport values of the drawable object. | ||||
|   getvalues plot | ||||
|     "vpXF"      : vpx | ||||
|     "vpYF"      : vpy | ||||
|     "vpWidthF"  : vpw | ||||
|     "vpHeightF" : vph | ||||
|   end getvalues | ||||
|  | ||||
| ; Set up some marker resources. | ||||
|   mkres                  = True | ||||
|   mkres@gsMarkerIndex    = 16     ; filled dot | ||||
|   mkres@gsMarkerSizeF    = 0.02   ; larger than default | ||||
|   mkres@gsMarkerColor    = "Red" | ||||
|  | ||||
| ; Draw a single marker at the vpXF/vpYF location. | ||||
|   gsn_polymarker_ndc(wks,vpx,vpy,mkres) | ||||
|  | ||||
|  | ||||
| ; Set up some text resources. | ||||
|   txres                       = True   | ||||
|   txres@txJust                = "BottomLeft" | ||||
|   txres@txFontHeightF         = 0.018 | ||||
|   txres@txFontColor           = "Blue" | ||||
|   txres@txBackgroundFillColor = "white" | ||||
|  | ||||
|   gsn_text_ndc(wks,"(vpXF="+vpx+", vpYF="+vpy+")",vpx,vpy+0.02,txres) | ||||
| ; Set up some line resources. | ||||
|   lnres                  = True | ||||
|   lnres@gsLineColor      = "Red"       ; line color | ||||
|   lnres@gsLineThicknessF = 2.0         ; 3.5 times as thick | ||||
|  | ||||
| ; Draw lines indicating the width and height | ||||
|   xline = (/vpx,     vpx+vpw/) | ||||
|   yline = (/vpy-0.05,vpy-0.05/) | ||||
|   gsn_polyline_ndc(wks,xline,yline,lnres) | ||||
|  | ||||
|   xline = (/vpx+0.05,vpx+0.05/) | ||||
|   yline = (/vpy,vpy-vph/) | ||||
|   gsn_polyline_ndc(wks,xline,yline,lnres) | ||||
|  | ||||
|   txres@txJust                = "CenterCenter" | ||||
|   gsn_text_ndc(wks,"vpWidthF = " + vpw,vpx+vpw/2.,vpy-0.05,txres) | ||||
|  | ||||
|   txres@txAngleF              = 90. | ||||
|   gsn_text_ndc(wks,"vpHeightF = " + vph,vpx+0.05,vpy-vph/2.,txres) | ||||
| end | ||||
|  | ||||
| ;******************************************************************** | ||||
| ; Main code | ||||
| ;******************************************************************** | ||||
| begin | ||||
| ;************************************************ | ||||
| ; read in data | ||||
| ;************************************************ | ||||
|   f     = addfile ("$NCARG_ROOT/lib/ncarg/data/cdf/uv300.nc","r") | ||||
|   u     = f->U                                    ; get u data | ||||
| ;************************************************ | ||||
| ; plotting parameters | ||||
| ;************************************************ | ||||
|   wks   = gsn_open_wks ("ps","viewport")          ; open workstation | ||||
|    | ||||
|   res                  = True                     ; plot mods desired | ||||
|  | ||||
|   res@gsnFrame         = False                    ; don't advance frame yet | ||||
|  | ||||
|   res@vpWidthF         = 0.8                      ; set width and height | ||||
|   res@vpHeightF        = 0.3 | ||||
|    | ||||
| ; First plot   | ||||
|   res@tiMainString     = "Plot 1" | ||||
|  | ||||
|   res@vpXF             = 0.15 | ||||
|   res@vpYF             = 0.9        ; Higher on the page | ||||
|  | ||||
|   plot1  = gsn_csm_xy (wks,u&lat,u(0,:,{82}),res) ; create plot | ||||
|    | ||||
| ; Second plot   | ||||
|   res@tiMainString     = "Plot 2" | ||||
|  | ||||
|   res@vpXF             = 0.15       ; Same X location as first plot | ||||
|   res@vpYF             = 0.4        ; Lower on the page | ||||
|  | ||||
|   plot2  = gsn_csm_xy (wks,u&lat,u(0,:,{3}),res) ; create plot | ||||
|  | ||||
| ; Advance the frame | ||||
|   frame(wks) | ||||
|    | ||||
| ; Now draw the two plots with illustrations. | ||||
|  | ||||
|   drawNDCGrid(wks)   ; Draw helpful grid lines showing NDC square. | ||||
|  | ||||
|   draw(plot1)        ; Draw the two plots | ||||
|   draw(plot2) | ||||
|  | ||||
|   draw_vp_box(wks,plot1)  ; Draw boxes around the two viewports. | ||||
|   draw_vp_box(wks,plot2) | ||||
|  | ||||
|   frame(wks)              ; Advance the frame. | ||||
|  | ||||
|  | ||||
| ; | ||||
| ; Uncomment the next two lines if you want to maximize these plots for | ||||
| ; PS or PDF output. | ||||
| ; | ||||
| ;  psres = True                                                                | ||||
| ;  maximize_output(wks,psres)  ; calls draw and frame for you  | ||||
| end | ||||
							
								
								
									
										120
									
								
								samples/NCL/weather_sym_6.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								samples/NCL/weather_sym_6.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,120 @@ | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
|  | ||||
| begin | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ; | ||||
| ;  Example of plotting station model data over a map  | ||||
| ;  illustrating how the wind barb directions are adjusted | ||||
| ;  for the map projection. | ||||
| ; | ||||
| ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | ||||
| ; | ||||
| ;  City names. | ||||
| ; | ||||
|   cities = (/      "NCAR",       "Seattle", "San Francisco",    \ | ||||
|             "Los Angeles",      "Billings",       "El Paso",    \ | ||||
|                 "Houston",   "Kansas City",   "Minneapolis",    \ | ||||
|                 "Chicago",       "Detroit",       "Atlanta",    \ | ||||
|                   "Miami",      "New York",        "Eugene",    \ | ||||
|                   "Boise",     "Salt Lake",       "Phoenix",    \ | ||||
|             "Albuquerque",      "Bismarck",         "Tulsa",    \ | ||||
|                  "Dallas",   "Little Rock",     "Lexington",    \ | ||||
|               "Charlotte",       "Norfolk",        "Bangor"     \ | ||||
|            /) | ||||
|   city_lats = (/     40.0,            47.6,            37.8,    \ | ||||
|                      34.1,            45.8,            31.8,    \ | ||||
|                      29.8,            39.1,            45.0,    \ | ||||
|                      41.9,            42.3,            33.8,    \ | ||||
|                      25.8,            40.8,            44.1,    \ | ||||
|                      43.6,            40.7,            33.5,    \ | ||||
|                      35.1,            46.7,            36.0,    \ | ||||
|                      32.8,            34.7,            38.1,    \ | ||||
|                      35.2,            36.8,            44.8     \ | ||||
|                /) | ||||
|   city_lons = (/   -105.0,          -122.3,          -122.4,    \ | ||||
|                    -118.3,          -108.5,          -106.5,    \ | ||||
|                    -095.3,          -094.1,          -093.8,    \ | ||||
|                    -087.6,          -083.1,          -084.4,    \ | ||||
|                    -080.2,          -074.0,          -123.1,    \ | ||||
|                    -116.2,          -111.9,          -112.1,    \ | ||||
|                    -106.6,          -100.8,          -096.0,    \ | ||||
|                    -096.8,          -092.3,          -084.1,    \ | ||||
|                    -080.8,          -076.3,          -068.8     \ | ||||
|               /) | ||||
| ; | ||||
| ;  Station model data for the 27 cities. | ||||
| ; | ||||
|   imdat = (/"11000000751126021360300004955054054600007757087712",  \ | ||||
|             "11103100011104021080300004959055050600517043080369",  \ | ||||
|             "11206200031102021040300004963056046601517084081470",  \ | ||||
|             "11309300061000021020300004967057042602017125082581",  \ | ||||
|             "11412400091002021010300004971058038602517166083592",  \ | ||||
|             "11515500121004020000300004975050034603017207084703",  \ | ||||
|             "11618600151006020030300004979051030603507248085814",  \ | ||||
|             "11721700181008020050300004983052026604007289086925",  \ | ||||
|             "11824800211009020070300004987053022604507323087036",  \ | ||||
|             "11927900241011020110300004991054018605017364088147",  \ | ||||
|             "11030000271013020130300004995055014605517405089258",  \ | ||||
|             "11133100301015020170300004999056010606017446080369",  \ | ||||
|             "11236200331017020200300004000057006606517487081470",  \ | ||||
|             "11339300361019020230300004004058002607017528082581",  \ | ||||
|             "11442400391021020250300004008050000607517569083692",  \ | ||||
|             "11545500421023020270300004012051040608017603084703",  \ | ||||
|             "11648600451025020290300004017052008608517644085814",  \ | ||||
|             "11751700481027020310300004021053012609017685086925",  \ | ||||
|             "11854800511029020330300004025054016609507726087036",  \ | ||||
|             "11958900541031020360300004029055018610007767088147",  \ | ||||
|             "11060000571033020380300004033056030610507808089258",  \ | ||||
|             "11163100601035020410300004037057034611007849080369",  \ | ||||
|             "11266200631037020430300004041058043611507883081470",  \ | ||||
|             "11369300661039020470300004045050041612007924082581",  \ | ||||
|             "11472400691041020500300004048051025612507965083692",  \ | ||||
|             "11575500721043020530300004051052022613507996084703",  \ | ||||
|             "11678600751048021580300004055053013614007337085814"   \ | ||||
|           /) | ||||
|  | ||||
| ; | ||||
| ;  Define a color map and open a workstation. | ||||
| ; | ||||
|   cmap = (/                      \ | ||||
|             (/ 1., 1., 1. /),    \  ; color index 0 - white | ||||
|             (/ 0., 0., 0. /)     \  ; color index 1 - black | ||||
|          /) | ||||
|   wks = gsn_open_wks("ps","weather_sym") | ||||
|   gsn_define_colormap(wks,cmap) | ||||
|  | ||||
| ; | ||||
| ;  Draw a world map. | ||||
| ; | ||||
|   mpres = True | ||||
|   mpres@gsnFrame     = False | ||||
|   mpres@mpSatelliteDistF  = 1.3 | ||||
|   mpres@mpOutlineBoundarySets  = "USStates" | ||||
|   mpres@mpCenterLatF =  40. | ||||
|   mpres@mpCenterLonF = -97. | ||||
|   mpres@mpCenterRotF =  35. | ||||
|   map = gsn_map(wks,"Satellite",mpres) | ||||
|  | ||||
| ; | ||||
| ;  Scale the station model plot (all aspects of the station | ||||
| ;  model plots are scaled as per the size of the wind barb). | ||||
| ; | ||||
|   wmsetp("wbs",0.018) | ||||
| ; | ||||
| ;  In the middle of Nebraska, draw a wind barb for a north wind | ||||
| ;  with a magnitude of 15 knots. | ||||
| ; | ||||
|   wmbarbmap(wks,42.,-99.,0.,-15.) | ||||
|  | ||||
| ; | ||||
| ;  Draw the station model data at the selected cities.  The call | ||||
| ;  to wmsetp informs wmstnm that the wind barbs will be drawn over | ||||
| ;  a map.  To illustrate the adjustment for plotting the model | ||||
| ;  data over a map, all winds are from the north. | ||||
| ; | ||||
|   wmsetp("ezf",1) | ||||
|   wmstnm(wks,city_lats,city_lons,imdat) | ||||
|  | ||||
|   frame(wks) | ||||
|  | ||||
| end | ||||
							
								
								
									
										151
									
								
								samples/NCL/xy_29.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								samples/NCL/xy_29.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,151 @@ | ||||
| ; xy_29.ncl | ||||
| ; | ||||
| ; Concepts illustrated: | ||||
| ;   - Reading data from an ASCII file with headers | ||||
| ;   - Creating a separate procedure to create a specific plot | ||||
| ;   - Attaching polymarkers to an XY plot | ||||
| ; | ||||
| ; This script was originally from Dr. Birgit Hassler (NOAA) | ||||
| ;**************************************************** | ||||
|  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" | ||||
|  | ||||
| ;************************************************ | ||||
| ;             Plot Procedure | ||||
| ;************************************************ | ||||
| procedure plotTCOPolym(pltName[1]:string, pltType[1]:string, filName[1]:string \ | ||||
|                    ,xTitle[1]:string , yTitle[1]:string \  | ||||
|                    ,year[*]:numeric, y[*]:numeric) | ||||
| local wks, res, ntim, gsres, MarkerCol, OldYear, i, xmarker, ymarker | ||||
|    | ||||
| begin | ||||
|   wks = gsn_open_wks(pltType,pltName) | ||||
|   gsn_define_colormap(wks,"default") | ||||
|    | ||||
|   res = True | ||||
|   res@gsnMaximize    = True            ; make "ps", "eps", "pdf" large | ||||
|  | ||||
|   res@vpHeightF      = 0.5             ; change aspect ratio of plot | ||||
|   res@vpWidthF       = 0.75                  | ||||
|   res@vpXF           = 0.15            ; start plot at x ndc coord  | ||||
|   res@tiXAxisString  = xTitle      | ||||
|   res@tiYAxisString  = yTitle      | ||||
|   res@tiMainString   = filName | ||||
|  | ||||
|   ntim   = dimsizes(year) | ||||
|   res@trXMinF = year(0)-1         | ||||
|   res@trXMaxF = year(ntim-1)+1         | ||||
|  | ||||
|   res@gsnDraw        = False | ||||
|   res@gsnFrame       = False | ||||
|   res@xyMarkLineMode = "markers" | ||||
|   res@xyMarker       = 16 | ||||
|   res@xyMarkerColor  = "Background"                      | ||||
|   plot               = gsn_csm_xy (wks,year,y,res) ; create plot frame ork | ||||
|    | ||||
|                      ; add different color polymarkers for each year  | ||||
|   gsres     = True | ||||
|   MarkerCol = 2 | ||||
|   OldYear   = year(0) | ||||
|    | ||||
|   do i=0,ntim-1  | ||||
|     xmarker = year(i) | ||||
|     ymarker = y(i) | ||||
|      | ||||
|     if (i.gt.0) then  | ||||
|       if (year(i).gt.OldYear) then | ||||
|         MarkerCol = MarkerCol+1 | ||||
|       end if | ||||
|       OldYear = year(i) | ||||
|     end if | ||||
|      | ||||
|     gsres@gsMarkerColor = MarkerCol | ||||
|     gsres@gsMarkerIndex = 16 | ||||
|    ;gsres@gsMarkerSizeF = 15.0 | ||||
|                         ; add (attach) polymarkers to existing plot object  | ||||
|     plot@$unique_string("dum")$ = gsn_add_polymarker(wks,plot,xmarker,ymarker,gsres) | ||||
|   end do | ||||
|  | ||||
|   draw(plot) | ||||
|   frame(wks) | ||||
| end | ||||
|  | ||||
| ;*********************************************************** | ||||
| ;                   MAIN | ||||
| ;*********************************************************** | ||||
|    pltType = "ps"      ; "ps", "eps", "png", "x11" | ||||
|  | ||||
|                        ; read multiple ascii file names | ||||
|  ;;fili = "Southpole_TCOTimeSeries_11.dat" | ||||
|  | ||||
|    diri = "./" | ||||
|    fili = systemfunc("cd "+diri+" ; ls *TCOT*dat") | ||||
|    print(fili) | ||||
|  | ||||
|    nfil = dimsizes(fili) | ||||
|  | ||||
|    nhead= 4      ; number of header lines on ascii file(s) | ||||
|    ncol = 4      ; year, month, day, O3 | ||||
|  | ||||
|    do nf=0,nfil-1 | ||||
|       sfx  = get_file_suffix(fili(nf), 0) ; sfx = ".dat" | ||||
|       filx = sfx@fBase                    ; filx= "Southpole_TCOTimeSeries_11" | ||||
|                                           ; read ascii files | ||||
|       data = readAsciiTable(diri+fili(nf), ncol, "float", nhead) | ||||
|       dimd = dimsizes(data) | ||||
|       ntim = dimd(0)                      ; # rows | ||||
|  | ||||
|       year = toint( data(:,0) )           ; user decision ... convert to integer | ||||
|       mon  = toint( data(:,1) ) | ||||
|       day  = toint( data(:,2) ) | ||||
|   | ||||
|       hour = new (ntim, "integer", "No_FillValue") | ||||
|       mn   = new (ntim, "integer", "No_FillValue") | ||||
|       sec  = new (ntim, "double" , "No_FillValue") | ||||
|       hour = 0 | ||||
|       mn   = 0 | ||||
|       sec  = 0d0 | ||||
|                                           ; create COARDS/udunits time variable | ||||
|     ;;tunits = "days since 1900-01-01 00:00:0.0" | ||||
|       tunits = "days since "+year(0)+"-"+mon(0)+"-"+day(0)+" 00:00:0.0" | ||||
|       time   = cd_inv_calendar(year,mon,day,hour,mn,sec,tunits, 0) | ||||
|       time!0 = "time" | ||||
|       time&time = time | ||||
|       ;printVarSummary(time) | ||||
|  | ||||
|                                           ; create a Gregorin 'date' variable | ||||
|       date = year*10000 + mon*100 + day | ||||
|       date!0 = "time" | ||||
|       date@units = "yyyymmdd" | ||||
|       date&time = time | ||||
|      ;printVarSummary(date) | ||||
|  | ||||
|       O3   = data(:,3)  | ||||
|       O3@long_name = "total column ozone" | ||||
|       O3@units     = "DU" | ||||
|  | ||||
|       O3!0         = "time" | ||||
|       O3&time      = time | ||||
|      ;printVarSummary(O3) | ||||
|      ;print(" ") | ||||
|      ;print(date+"  "+time+"   "+O3) | ||||
|  | ||||
|                                           ; plot | ||||
|       yTitle = O3@long_name | ||||
|       year@long_name = "YEAR" | ||||
|  | ||||
|       plotTCOPolym (filx, pltType, fili(nf), year@long_name, yTitle,  year, O3)  | ||||
|       | ||||
|       delete(time) ; delete ... size (# rows) may change in the next file | ||||
|       delete(date) | ||||
|       delete(year) | ||||
|       delete(mon ) | ||||
|       delete(day ) | ||||
|       delete(mn  ) | ||||
|       delete(sec ) | ||||
|       delete(O3  ) | ||||
|       delete(data) | ||||
|    end do | ||||
|  | ||||
							
								
								
									
										699
									
								
								samples/Perl6/List.pm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										699
									
								
								samples/Perl6/List.pm
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,699 @@ | ||||
| # for our tantrums | ||||
| my class X::TypeCheck { ... } | ||||
| my role Supply { ... } | ||||
|  | ||||
| my sub combinations($n, $k) { | ||||
|     my @result; | ||||
|     my @stack; | ||||
|  | ||||
|     return ([],) unless $k; | ||||
|  | ||||
|     @stack.push(0); | ||||
|     gather while @stack { | ||||
|         my $index = @stack - 1; | ||||
|         my $value = @stack.pop; | ||||
|  | ||||
|         while $value < $n { | ||||
|             @result[$index++] = $value++; | ||||
|             @stack.push($value); | ||||
|             if $index == $k { | ||||
|                 take [@result]; | ||||
|                 $value = $n;  # fake a last | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
| my sub permutations(Int $n) { | ||||
|     $n == 1 ?? ( [0,] ) !! | ||||
|     gather for ^$n -> $i { | ||||
|         my @i = grep none($i), ^$n; | ||||
|         take [$i, @i[@$_]] for permutations($n - 1); | ||||
|     } | ||||
| } | ||||
|  | ||||
| my class List does Positional { # declared in BOOTSTRAP | ||||
|     # class List is Iterable is Cool | ||||
|     #   has Mu $!items;        # VM's array of our reified elements | ||||
|     #   has Mu $!flattens;     # true if this list flattens its parcels | ||||
|     #   has Mu $!nextiter;     # iterator for generating remaining elements | ||||
|  | ||||
|     method new(|) { | ||||
|         my Mu $args := nqp::p6argvmarray(); | ||||
|         nqp::shift($args); | ||||
|  | ||||
|         nqp::p6list($args, self.WHAT, Mu); | ||||
|     } | ||||
|  | ||||
|     multi method Bool(List:D:)    { self.gimme(1).Bool } | ||||
|     multi method Int(List:D:)     { self.elems } | ||||
|     multi method end(List:D:)     { self.elems - 1 } | ||||
|     multi method Numeric(List:D:) { self.elems } | ||||
|     multi method Str(List:D:)     { self.join(' ') } | ||||
|  | ||||
|     # Pretend we're a Match assuming we're a list of Matches | ||||
|     method to()         { self.elems ?? self[self.end].to !! Nil } | ||||
|     method from()       { self.elems ?? self[0].from !! Nil } | ||||
|  | ||||
|     method fmt($format = '%s', $separator = ' ') { | ||||
|         self.map({ .fmt($format) }).join($separator); | ||||
|     } | ||||
|  | ||||
|     method flat() { self.flattens | ||||
|                     ?? self | ||||
|                     !! nqp::p6list(nqp::list(self), List, Bool::True) | ||||
|     } | ||||
|     method list() { self } | ||||
|     method lol() { | ||||
|         self.gimme(0); | ||||
|         my Mu $rpa := nqp::clone($!items); | ||||
|         nqp::push($rpa, $!nextiter) if $!nextiter.defined; | ||||
|         nqp::p6list($rpa, LoL, Mu); | ||||
|     } | ||||
|  | ||||
|     method flattens() { $!flattens } | ||||
|  | ||||
|     method Capture() { | ||||
|         self.gimme(*); | ||||
|         my $cap := nqp::create(Capture); | ||||
|         nqp::bindattr($cap, Capture, '$!list', $!items); | ||||
|         $cap | ||||
|     } | ||||
|  | ||||
|     method Parcel() { | ||||
|         my Mu $rpa := nqp::clone(nqp::p6listitems(self)); | ||||
|         nqp::push($rpa, $!nextiter) if $!nextiter.defined; | ||||
|         nqp::p6parcel($rpa, Any); | ||||
|     } | ||||
|  | ||||
|     method Supply(List:D:) { Supply.from-list(self) } | ||||
|  | ||||
|     multi method at_pos(List:D: int \pos) is rw { | ||||
|         fail X::OutOfRange.new(:what<Index>,:got(pos),:range<0..Inf>) | ||||
|           if nqp::islt_i(pos,0); | ||||
|         self.exists_pos(pos) ?? nqp::atpos($!items,pos) !! Nil; | ||||
|     } | ||||
|     multi method at_pos(List:D: Int:D \pos) is rw { | ||||
|         my int $pos = nqp::unbox_i(pos); | ||||
|         fail X::OutOfRange.new(:what<Index>,:got(pos),:range<0..Inf>) | ||||
|           if nqp::islt_i($pos,0); | ||||
|         self.exists_pos($pos) ?? nqp::atpos($!items,$pos) !! Nil; | ||||
|     } | ||||
|  | ||||
|     method eager() { self.gimme(*); self } | ||||
|  | ||||
|     method elems() { | ||||
|         return 0 unless self.DEFINITE; | ||||
|         return nqp::elems(nqp::p6listitems(self)) unless nqp::defined($!nextiter); | ||||
|         # Get as many elements as we can.  If gimme stops before | ||||
|         # reaching the end of the list, assume the list is infinite. | ||||
|         my $n := self.gimme(*); | ||||
|         nqp::defined($!nextiter) ?? Inf !! $n | ||||
|     } | ||||
|  | ||||
|     multi method exists_pos(List:D: int $pos) { | ||||
|         return False if nqp::islt_i($pos,0); | ||||
|         self.gimme($pos + 1); | ||||
|         nqp::p6bool( | ||||
|           nqp::not_i(nqp::isnull(nqp::atpos($!items,$pos))) | ||||
|         ); | ||||
|     } | ||||
|     multi method exists_pos(List:D: Int:D $pos) { | ||||
|         return False if $pos < 0; | ||||
|         self.gimme($pos + 1); | ||||
|         nqp::p6bool( | ||||
|           nqp::not_i(nqp::isnull(nqp::atpos($!items,nqp::unbox_i($pos)))) | ||||
|         ); | ||||
|     } | ||||
|  | ||||
|     method gimme($n, :$sink) { | ||||
|         return unless self.DEFINITE; | ||||
|         # loop through iterators until we have at least $n elements | ||||
|         my int $count = nqp::elems(nqp::p6listitems(self)); | ||||
|         if nqp::istype($n, Whatever) || nqp::istype($n, Num) && nqp::istrue($n == Inf) { | ||||
|             while $!nextiter.DEFINITE && !$!nextiter.infinite { | ||||
|                 $!nextiter.reify(*, :$sink); | ||||
|                 $count = nqp::elems($!items); | ||||
|             } | ||||
|         } | ||||
|         else { | ||||
|             my int $target = $n.Int; | ||||
|             while nqp::isconcrete($!nextiter) && $count < $target { | ||||
|                 $!nextiter.reify($target - $count, :$sink); | ||||
|                 $count = nqp::elems($!items); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         # return the number of elements we have now | ||||
|         $count | ||||
|     } | ||||
|  | ||||
|     multi method infinite(List:D:) { $!nextiter.infinite } | ||||
|  | ||||
|     method iterator() { | ||||
|         # Return a reified ListIter containing our currently reified elements | ||||
|         # and any subsequent iterator. | ||||
|         my $iter := nqp::create(ListIter); | ||||
|         nqp::bindattr($iter, ListIter, '$!nextiter', $!nextiter); | ||||
|         nqp::bindattr($iter, ListIter, '$!reified', self.Parcel()); | ||||
|         $iter; | ||||
|     } | ||||
|  | ||||
|     method munch($n is copy) { | ||||
|         $n = 0 if $n < 0; | ||||
|         $n = self.gimme($n) if nqp::not_i(nqp::istype($n, Int)) | ||||
|                                || nqp::not_i(nqp::islist($!items)) | ||||
|                                || nqp::islt_i(nqp::elems($!items), nqp::unbox_i($n)); | ||||
|         nqp::p6parcel( | ||||
|             nqp::p6shiftpush(nqp::list(), $!items, nqp::unbox_i($n)), | ||||
|             Any | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     proto method pick(|) { * } | ||||
|     multi method pick() { | ||||
|         fail "Cannot .pick from infinite list" if self.infinite; | ||||
|         my $elems = self.elems; | ||||
|         $elems ?? self.at_pos($elems.rand.floor) !! Nil; | ||||
|     } | ||||
|     multi method pick($n is copy) { | ||||
|         fail "Cannot .pick from infinite list" if self.infinite; | ||||
|         ## We use a version of Fisher-Yates shuffle here to | ||||
|         ## replace picked elements with elements from the end | ||||
|         ## of the list, resulting in an O(n) algorithm. | ||||
|         my $elems = self.elems; | ||||
|         return unless $elems; | ||||
|         $n = Inf if nqp::istype($n, Whatever); | ||||
|         $n = $elems if $n > $elems; | ||||
|         return self.at_pos($elems.rand.floor) if $n == 1; | ||||
|         my Mu $rpa := nqp::clone($!items); | ||||
|         my $i; | ||||
|         my Mu $v; | ||||
|         gather while $n > 0 { | ||||
|             $i = nqp::rand_I(nqp::decont($elems), Int); | ||||
|             $elems--; $n--; | ||||
|             $v := nqp::atpos($rpa, nqp::unbox_i($i)); | ||||
|             # replace selected element with last unpicked one | ||||
|             nqp::bindpos($rpa, nqp::unbox_i($i), | ||||
|                          nqp::atpos($rpa, nqp::unbox_i($elems))); | ||||
|             take-rw $v; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     method pop() is parcel { | ||||
|         my $elems = self.gimme(*); | ||||
|         fail 'Cannot .pop from an infinite list' if $!nextiter.defined; | ||||
|         $elems > 0 | ||||
|           ?? nqp::pop($!items) | ||||
|           !! fail 'Element popped from empty list'; | ||||
|     } | ||||
|  | ||||
|     method shift() is parcel { | ||||
|         # make sure we have at least one item, then shift+return it | ||||
|         nqp::islist($!items) && nqp::existspos($!items, 0) || self.gimme(1) | ||||
|           ?? nqp::shift($!items) | ||||
|           !! fail 'Element shifted from empty list'; | ||||
|     } | ||||
|  | ||||
|     my &list_push = multi method push(List:D: *@values) { | ||||
|         fail 'Cannot .push an infinite list' if @values.infinite; | ||||
|         nqp::p6listitems(self); | ||||
|         my $elems = self.gimme(*); | ||||
|         fail 'Cannot .push to an infinite list' if $!nextiter.DEFINITE; | ||||
|  | ||||
|         # push is always eager | ||||
|         @values.gimme(*); | ||||
|  | ||||
|         # need type checks? | ||||
|         my $of := self.of; | ||||
|  | ||||
|         unless $of =:= Mu { | ||||
|             X::TypeCheck.new( | ||||
|               operation => '.push', | ||||
|               expected  => $of, | ||||
|               got       => $_, | ||||
|             ).throw unless nqp::istype($_, $of) for @values; | ||||
|         } | ||||
|  | ||||
|         nqp::splice($!items, | ||||
|                 nqp::getattr(@values, List, '$!items'), | ||||
|                 $elems, 0); | ||||
|  | ||||
|         self; | ||||
|     } | ||||
|  | ||||
|     multi method push(List:D: \value) { | ||||
|         if nqp::iscont(value) || nqp::not_i(nqp::istype(value, Iterable)) && nqp::not_i(nqp::istype(value, Parcel)) { | ||||
|             $!nextiter.DEFINITE && self.gimme(*); | ||||
|             fail 'Cannot .push to an infinite list' if $!nextiter.DEFINITE; | ||||
|             nqp::p6listitems(self); | ||||
|             nqp::istype(value, self.of) | ||||
|                 ?? nqp::push($!items, nqp::assign(nqp::p6scalarfromdesc(nqp::null), value)) | ||||
|                 !! X::TypeCheck.new( | ||||
|                       operation => '.push', | ||||
|                       expected  => self.of, | ||||
|                       got       => value, | ||||
|                     ).throw; | ||||
|             self | ||||
|         } | ||||
|         else { | ||||
|             list_push(self, value) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     multi method unshift(List:D: \value) { | ||||
|         if nqp::iscont(value) || !(nqp::istype(value, Iterable) || nqp::istype(value, Parcel)) { | ||||
|             nqp::p6listitems(self); | ||||
|             value.gimme(*) if nqp::istype(value, List); # fixes #121994 | ||||
|             nqp::istype(value, self.of) | ||||
|                 ?? nqp::unshift($!items, my $ = value) | ||||
|                 !! X::TypeCheck.new( | ||||
|                       operation => '.push', | ||||
|                       expected  => self.of, | ||||
|                       got       => value, | ||||
|                     ).throw; | ||||
|             self | ||||
|         } | ||||
|         else { | ||||
|             callsame(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     multi method unshift(List:D: *@values) { | ||||
|         fail 'Cannot .unshift an infinite list' if @values.infinite; | ||||
|         nqp::p6listitems(self); | ||||
|  | ||||
|         # don't bother with type checks | ||||
|         my $of := self.of; | ||||
|         if ( $of =:= Mu ) { | ||||
|             nqp::unshift($!items, @values.pop) while @values; | ||||
|         } | ||||
|  | ||||
|         # we must check types | ||||
|         else { | ||||
|             while @values { | ||||
|                 my $value := @values.pop; | ||||
|                 if nqp::istype($value, $of) { | ||||
|                     nqp::unshift($!items, $value); | ||||
|                 } | ||||
|  | ||||
|                 # huh? | ||||
|                 else { | ||||
|                     X::TypeCheck.new( | ||||
|                       operation => '.unshift', | ||||
|                       expected  => $of, | ||||
|                       got       => $value, | ||||
|                     ).throw; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         self | ||||
|     } | ||||
|  | ||||
|     method plan(List:D: |args) { | ||||
|         nqp::p6listitems(self); | ||||
|         my $elems = self.gimme(*); | ||||
|         fail 'Cannot add plan to an infinite list' if $!nextiter.defined; | ||||
|  | ||||
| #        # need type checks? | ||||
| #        my $of := self.of; | ||||
| # | ||||
| #        unless $of =:= Mu { | ||||
| #            X::TypeCheck.new( | ||||
| #              operation => '.push', | ||||
| #              expected  => $of, | ||||
| #              got       => $_, | ||||
| #            ).throw unless nqp::istype($_, $of) for @values; | ||||
| #        } | ||||
|  | ||||
|         nqp::bindattr(self, List, '$!nextiter', nqp::p6listiter(nqp::list(args.list), self)); | ||||
|         Nil; | ||||
|     } | ||||
|  | ||||
|     proto method roll(|) { * } | ||||
|     multi method roll() { | ||||
|         fail "Cannot .roll from infinite list" if self.infinite; | ||||
|         my $elems = self.elems; | ||||
|         $elems ?? self.at_pos($elems.rand.floor) !! Nil; | ||||
|     } | ||||
|     multi method roll($n is copy) { | ||||
|         fail "Cannot .roll from infinite list" if self.infinite; | ||||
|         my $elems = self.elems; | ||||
|         return unless $elems; | ||||
|         $n = Inf if nqp::istype($n, Whatever); | ||||
|         return self.at_pos($elems.rand.floor) if $n == 1; | ||||
|  | ||||
|         gather while $n > 0 { | ||||
|             take nqp::atpos($!items, nqp::unbox_i($elems.rand.floor.Int)); | ||||
|             $n--; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     method reverse() { | ||||
|         self.gimme(*); | ||||
|         fail 'Cannot .reverse from an infinite list' if $!nextiter.defined; | ||||
|         my Mu $rev  := nqp::list(); | ||||
|         my Mu $orig := nqp::clone($!items); | ||||
|         nqp::push($rev, nqp::pop($orig)) while $orig; | ||||
|         my $rlist := nqp::create(self.WHAT); | ||||
|         nqp::bindattr($rlist, List, '$!items', $rev); | ||||
|         $rlist; | ||||
|     } | ||||
|  | ||||
|     method rotate(Int $n is copy = 1) { | ||||
|         self.gimme(*); | ||||
|         fail 'Cannot .rotate an infinite list' if $!nextiter.defined; | ||||
|         my $items = nqp::p6box_i(nqp::elems($!items)); | ||||
|         return self if !$items; | ||||
|  | ||||
|         $n %= $items; | ||||
|         return self if $n == 0; | ||||
|  | ||||
|         my Mu $res := nqp::clone($!items); | ||||
|         if $n > 0 { | ||||
|             nqp::push($res, nqp::shift($res)) while $n--; | ||||
|         } | ||||
|         elsif $n < 0 { | ||||
|             nqp::unshift($res, nqp::pop($res)) while $n++; | ||||
|         } | ||||
|         my $rlist := nqp::create(self.WHAT); | ||||
|         nqp::bindattr($rlist, List, '$!items', $res); | ||||
|         $rlist; | ||||
|     } | ||||
|  | ||||
|     method splice($offset = 0, $size?, *@values) { | ||||
|         self.gimme(*); | ||||
|         my $o = $offset; | ||||
|         my $s = $size; | ||||
|         my $elems = self.elems; | ||||
|         $o = $o($elems) if nqp::istype($o, Callable); | ||||
|         X::OutOfRange.new( | ||||
|             what => 'offset argument to List.splice', | ||||
|             got  => $offset, | ||||
|             range => (0..^self.elems), | ||||
|         ).fail if $o < 0; | ||||
|         $s //= self.elems - ($o min $elems); | ||||
|         $s = $s(self.elems - $o) if nqp::istype($s, Callable); | ||||
|         X::OutOfRange.new( | ||||
|             what => 'size argument to List.splice', | ||||
|             got  => $size, | ||||
|             range => (0..^(self.elems - $o)), | ||||
|         ).fail if $s < 0; | ||||
|  | ||||
|         my @ret = self[$o..($o + $s - 1)]; | ||||
|         nqp::splice($!items, | ||||
|                     nqp::getattr(@values.eager, List, '$!items'), | ||||
|                     $o.Int, $s.Int); | ||||
|         @ret; | ||||
|     } | ||||
|  | ||||
|     method sort($by = &infix:<cmp>) { | ||||
|         fail 'Cannot .sort an infinite list' if self.infinite; #MMD? | ||||
|  | ||||
|         # Instead of sorting elements directly, we sort a Parcel of | ||||
|         # indices from 0..^$list.elems, then use that Parcel as | ||||
|         # a slice into self. This is for historical reasons: on | ||||
|         # Parrot we delegate to RPA.sort. The JVM implementation | ||||
|         # uses a Java collection sort. MoarVM has its sort algorithm | ||||
|         # implemented in NQP. | ||||
|  | ||||
|         # nothing to do here | ||||
|         my $elems := self.elems; | ||||
|         return self if $elems < 2; | ||||
|  | ||||
|         # Range is currently optimized for fast Parcel construction. | ||||
|         my $index := Range.new(0, $elems, :excludes-max).reify(*); | ||||
|         my Mu $index_rpa := nqp::getattr($index, Parcel, '$!storage'); | ||||
|  | ||||
|         # if $by.arity < 2, then we apply the block to the elements | ||||
|         # for sorting. | ||||
|         if ($by.?count // 2) < 2 { | ||||
|             my $list = self.map($by).eager; | ||||
|             nqp::p6sort($index_rpa, -> $a, $b { $list.at_pos($a) cmp $list.at_pos($b) || $a <=> $b }); | ||||
|         } | ||||
|         else { | ||||
|             my $list = self.eager; | ||||
|             nqp::p6sort($index_rpa, -> $a, $b { $by($list.at_pos($a), $list.at_pos($b)) || $a <=> $b }); | ||||
|         } | ||||
|         self[$index]; | ||||
|     } | ||||
|  | ||||
|     multi method ACCEPTS(List:D: $topic) { self } | ||||
|  | ||||
|     method uniq(|c) { | ||||
|         DEPRECATED('unique', |<2014.11 2015.11>); | ||||
|         self.unique(|c); | ||||
|     } | ||||
|  | ||||
|     proto method unique(|) {*} | ||||
|     multi method unique() { | ||||
|         my $seen := nqp::hash(); | ||||
|         my str $target; | ||||
|         gather for @.list { | ||||
|             $target = nqp::unbox_s($_.WHICH); | ||||
|             unless nqp::existskey($seen, $target) { | ||||
|                 nqp::bindkey($seen, $target, 1); | ||||
|                 take $_; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     multi method unique( :&as!, :&with! ) { | ||||
|         my @seen = "should be Mu, but doesn't work in settings :-(" | ||||
|         my Mu $target; | ||||
|         gather for @.list { | ||||
|             $target = &as($_); | ||||
|             if first( { with($target,$_) }, @seen ) =:= Nil { | ||||
|                 @seen.push($target); | ||||
|                 take $_; | ||||
|             } | ||||
|         }; | ||||
|     } | ||||
|     multi method unique( :&as! ) { | ||||
|         my $seen := nqp::hash(); | ||||
|         my str $target; | ||||
|         gather for @.list { | ||||
|             $target = &as($_).WHICH; | ||||
|             unless nqp::existskey($seen, $target) { | ||||
|                 nqp::bindkey($seen, $target, 1); | ||||
|                 take $_; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     multi method unique( :&with! ) { | ||||
|         nextwith() if &with === &[===]; # use optimized version | ||||
|  | ||||
|         my @seen;  # should be Mu, but doesn't work in settings :-( | ||||
|         my Mu $target; | ||||
|         gather for @.list { | ||||
|             $target := $_; | ||||
|             if first( { with($target,$_) }, @seen ) =:= Nil { | ||||
|                 @seen.push($target); | ||||
|                 take $_; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     my @secret; | ||||
|     proto method squish(|) {*} | ||||
|     multi method squish( :&as!, :&with = &[===] ) { | ||||
|         my $last = @secret; | ||||
|         my str $which; | ||||
|         gather for @.list { | ||||
|             $which = &as($_).Str; | ||||
|             unless with($which,$last) { | ||||
|                 $last = $which; | ||||
|                 take $_; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|     multi method squish( :&with = &[===] ) { | ||||
|         my $last = @secret; | ||||
|         gather for @.list { | ||||
|             unless with($_,$last) { | ||||
|                 $last = $_; | ||||
|                 take $_; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     proto method rotor(|) {*} | ||||
|     multi method rotor(1, 0) { self } | ||||
|     multi method rotor($elems = 2, $overlap = 1) { | ||||
|         X::OutOfRange.new( | ||||
|             what => 'Overlap argument to List.rotor', | ||||
|             got  => $overlap, | ||||
|             range => (0 .. $elems - 1), | ||||
|         ).fail unless 0 <= $overlap < $elems; | ||||
|         X::OutOfRange.new( | ||||
|             what => 'Elements argument to List.rotor', | ||||
|             got  => $elems, | ||||
|             range => (0 .. *), | ||||
|         ).fail unless 0 <= $elems; | ||||
|  | ||||
|         my $finished = 0; | ||||
|         gather while $finished + $overlap < self.gimme($finished + $elems) { | ||||
|             take item self[$finished ..^ $finished + $elems]; | ||||
|             $finished += $elems - $overlap | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     multi method gist(List:D:) { | ||||
|         @(self).map( -> $elem { | ||||
|             given ++$ { | ||||
|                 when 101 { '...' } | ||||
|                 when 102 { last } | ||||
|                 default  { $elem.gist } | ||||
|             } | ||||
|         } ).join: ' '; | ||||
|     } | ||||
|     multi method perl(List:D \SELF:) { | ||||
|         self.gimme(*); | ||||
|         self.Parcel.perl ~ '.list' | ||||
|           ~ (nqp::iscont(SELF) ?? '.item' !! '') | ||||
|     } | ||||
|  | ||||
|     method REIFY(Parcel \parcel, Mu \nextiter) { | ||||
|         nqp::splice($!items, nqp::getattr(parcel, Parcel, '$!storage'), | ||||
|                     nqp::elems($!items), 0); | ||||
|         nqp::bindattr(self, List, '$!nextiter', nextiter); | ||||
|         parcel | ||||
|     } | ||||
|  | ||||
|     method FLATTENABLE_LIST() { self.gimme(*); $!items } | ||||
|     method FLATTENABLE_HASH() { nqp::hash() } | ||||
|  | ||||
|     multi method DUMP(List:D: :$indent-step = 4, :%ctx?) { | ||||
|         return DUMP(self, :$indent-step) unless %ctx; | ||||
|  | ||||
|         my $flags    := ("\x221e" if self.infinite); | ||||
|         my Mu $attrs := nqp::list(); | ||||
|         nqp::push($attrs, '$!flattens'); | ||||
|         nqp::push($attrs,  $!flattens ); | ||||
|         nqp::push($attrs, '$!items'   ); | ||||
|         nqp::push($attrs,  $!items    ); | ||||
|         nqp::push($attrs, '$!nextiter'); | ||||
|         nqp::push($attrs,  $!nextiter ); | ||||
|         self.DUMP-OBJECT-ATTRS($attrs, :$indent-step, :%ctx, :$flags); | ||||
|     } | ||||
|  | ||||
|     multi method keys(List:D:) { | ||||
|         self.values.map: { (state $)++ } | ||||
|     } | ||||
|     multi method kv(List:D:) { | ||||
|         gather for self.values { | ||||
|             take (state $)++; | ||||
|             take-rw $_; | ||||
|         } | ||||
|     } | ||||
|     multi method values(List:D:) { | ||||
|         my Mu $rpa := nqp::clone(nqp::p6listitems(self)); | ||||
|         nqp::push($rpa, $!nextiter) if $!nextiter.defined; | ||||
|         nqp::p6list($rpa, List, self.flattens); | ||||
|     } | ||||
|     multi method pairs(List:D:) { | ||||
|         self.values.map: {; (state $)++ => $_ } | ||||
|     } | ||||
|  | ||||
|     method reduce(List: &with) { | ||||
|         fail('can only reduce with arity 2') | ||||
|             unless &with.arity <= 2 <= &with.count; | ||||
|         return unless self.DEFINITE; | ||||
|         my \vals = self.values; | ||||
|         my Mu $val = vals.shift; | ||||
|         $val = with($val, $_) for vals; | ||||
|         $val; | ||||
|     } | ||||
|  | ||||
|     method sink() { | ||||
|         self.gimme(*, :sink) if self.DEFINITE && $!nextiter.DEFINITE; | ||||
|         Nil; | ||||
|     } | ||||
|  | ||||
|     # this is a remnant of a previous implementation of .push(), which | ||||
|     # apparently is used by LoL.  Please remove when no longer necessary. | ||||
|     method STORE_AT_POS(Int \pos, Mu \v) is rw { | ||||
|         nqp::bindpos($!items, nqp::unbox_i(pos), v) | ||||
|     } | ||||
|  | ||||
|     proto method combinations($?) {*} | ||||
|     multi method combinations( Int $of ) { | ||||
|         ([self[@$_]] for combinations(self.elems, $of).eager) | ||||
|     } | ||||
|     multi method combinations( Range $of = 0 .. * ) { | ||||
|         gather for @$of { | ||||
|             last if $_ > self.elems; | ||||
|             take self.combinations($_); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     method permutations() { | ||||
|         # need block on Moar because of RT#121830 | ||||
|         gather { take [self[@$_]] for permutations(self.elems).eager } | ||||
|     } | ||||
| } | ||||
|  | ||||
| sub eager(|) { | ||||
|     nqp::p6parcel(nqp::p6argvmarray(), Any).eager | ||||
| } | ||||
|  | ||||
| sub flat(|) { | ||||
|     nqp::p6list(nqp::p6argvmarray(), List, Bool::True) | ||||
| } | ||||
|  | ||||
| sub list(|) { | ||||
|     nqp::p6list(nqp::p6argvmarray(), List, Mu) | ||||
| } | ||||
|  | ||||
| proto sub infix:<xx>(|)       { * } | ||||
| multi sub infix:<xx>()        { fail "No zero-arg meaning for infix:<xx>" } | ||||
| multi sub infix:<xx>(Mu \x)   {x } | ||||
| multi sub infix:<xx>(Mu \x, $n is copy, :$thunked!) { | ||||
|     $n = nqp::p6bool(nqp::istype($n, Whatever)) ?? Inf !! $n.Int; | ||||
|     GatherIter.new({ take x.() while --$n >= 0; }, :infinite($n == Inf)).list | ||||
| } | ||||
| multi sub infix:<xx>(Mu \x, Whatever, :$thunked!) { | ||||
|     GatherIter.new({ loop { take x.() } }, :infinite(True)).flat | ||||
| } | ||||
| multi sub infix:<xx>(Mu \x, Whatever) { | ||||
|     GatherIter.new({ loop { take x } }, :infinite(True)).flat | ||||
| } | ||||
| multi sub infix:<xx>(Mu \x, $n) { | ||||
|     my int $size = $n.Int; | ||||
|  | ||||
|     my Mu $rpa := nqp::list(); | ||||
|     if $size > 0 { | ||||
|         nqp::setelems($rpa, $size); | ||||
|         nqp::setelems($rpa, 0); | ||||
|  | ||||
|         $size = $size + 1; | ||||
|         nqp::push($rpa,x) while $size = $size - 1; | ||||
|     } | ||||
|  | ||||
|     nqp::p6parcel($rpa, Any); | ||||
| } | ||||
|  | ||||
| proto sub pop(@) {*} | ||||
| multi sub pop(@a) { @a.pop } | ||||
|  | ||||
| proto sub shift(@) {*} | ||||
| multi sub shift(@a) { @a.shift } | ||||
|  | ||||
| proto sub unshift(|) {*} | ||||
| multi sub unshift(\a, \elem) { a.unshift: elem } | ||||
| multi sub unshift(\a, *@elems) { a.unshift: @elems } | ||||
|  | ||||
| proto sub push(|) {*} | ||||
| multi sub push(\a, \elem) { a.push: elem } | ||||
| multi sub push(\a, *@elems) { a.push: @elems } | ||||
|  | ||||
| sub reverse(*@a)            { @a.reverse } | ||||
| sub rotate(@a, Int $n = 1)  { @a.rotate($n) } | ||||
| sub reduce (&with, *@list)  { @list.reduce(&with) } | ||||
| sub splice(@arr, $offset = 0, $size?, *@values) { | ||||
|     @arr.splice($offset, $size, @values) | ||||
| } | ||||
|  | ||||
| multi sub infix:<cmp>(@a, @b) { (@a Zcmp @b).first(&prefix:<?>) || @a <=> @b } | ||||
|  | ||||
| # vim: ft=perl6 expandtab sw=4 | ||||
							
								
								
									
										1
									
								
								samples/Puppet/hiera_include.pp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/Puppet/hiera_include.pp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| hiera_include('classes') | ||||
							
								
								
									
										9
									
								
								samples/Ruby/filenames/Brewfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								samples/Ruby/filenames/Brewfile
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | ||||
| tap 'caskroom/cask' | ||||
| tap 'telemachus/brew', 'https://telemachus@bitbucket.org/telemachus/brew.git' | ||||
| brew 'emacs', args: ['with-cocoa', 'with-gnutls'] | ||||
| brew 'redis', restart_service: true | ||||
| brew 'mongodb' | ||||
| brew 'sphinx' | ||||
| brew 'imagemagick' | ||||
| brew 'mysql' | ||||
| cask 'google-chrome' | ||||
							
								
								
									
										2324
									
								
								samples/Rust/hashmap.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2324
									
								
								samples/Rust/hashmap.rs
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										12
									
								
								samples/Rust/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								samples/Rust/main.rs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| extern crate foo; | ||||
| extern crate bar; | ||||
|  | ||||
| use foo::{self, quix}; | ||||
| use bar::car::*; | ||||
| use bar; | ||||
|  | ||||
| fn main() { | ||||
|     println!("Hello {}", "World"); | ||||
|  | ||||
|     panic!("Goodbye") | ||||
| } | ||||
							
								
								
									
										18
									
								
								samples/Text/01_top.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								samples/Text/01_top.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,18 @@ | ||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | ||||
| <ncl id="topProperty" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"> | ||||
| 	<head> | ||||
| 		 | ||||
| 		<regionBase> | ||||
| 			<region height="50%" id="imageReg" top="50%"/> | ||||
| 		</regionBase> | ||||
| 		 | ||||
| 		<descriptorBase> | ||||
| 			<descriptor id="imageDescriptor" region="imageReg"/> | ||||
| 		</descriptorBase> | ||||
| 		 | ||||
| 	</head> | ||||
| 	<body> | ||||
| 		<port component="image" id="entry"/> | ||||
| 		<media descriptor="imageDescriptor" id="image" src="../resources/images/background.jpg"/>  | ||||
| 	</body> | ||||
| </ncl> | ||||
							
								
								
									
										34
									
								
								samples/Text/LIDARLite.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								samples/Text/LIDARLite.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| G04 DipTrace 2.4.0.2* | ||||
| %INLIDARLite.ncl*% | ||||
| %MOIN*% | ||||
| %ADD11C,0.0394*% | ||||
| %FSLAX44Y44*% | ||||
| G04* | ||||
| G70* | ||||
| G90* | ||||
| G75* | ||||
| G01* | ||||
| %LNBoardOutline*% | ||||
| %LPD*% | ||||
| X0Y23622D2* | ||||
| D11* | ||||
| X27953D1* | ||||
| Y0D1* | ||||
| X0D1* | ||||
| Y23622D1* | ||||
| X591Y23110D2* | ||||
| X13819D1* | ||||
| X591Y591D2* | ||||
| Y11614D1* | ||||
| Y12087D2* | ||||
| Y23110D1* | ||||
| X14291D2* | ||||
| X27520D1* | ||||
| X591Y591D2* | ||||
| X13819D1* | ||||
| X14291D2* | ||||
| X27520D1* | ||||
| Y11614D1* | ||||
| Y12087D2* | ||||
| Y23110D1* | ||||
| M02* | ||||
							
								
								
									
										22
									
								
								samples/Text/Site.local.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								samples/Text/Site.local.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| #define YmakeRoot $(DESTDIR)@prefix@ | ||||
| #define ManRoot $(DESTDIR)@mandir@ | ||||
| #define LibRoot $(DESTDIR)@libdir@/ncarg | ||||
| #define SharePath $(DESTDIR)@datadir@ | ||||
|  | ||||
| #define BuildWithF90 TRUE | ||||
| #define IncSearch -I/usr/include/netcdf -I/usr/include/udunits2 -I/usr/include/freetype2 -I/usr/include/gdal | ||||
| #define LibSearch -L@libdir@/hdf | ||||
|  | ||||
| #define BuildNetCDF4 1 | ||||
| #define NetCDF4lib -lnetcdf | ||||
| #define BuildCAIRO 1 | ||||
| #define CAIROlib -lcairo -lfreetype | ||||
| #define BuildGDAL 1 | ||||
| #define GDALlib -lgdal | ||||
| #define BuildHDFEOS 0 | ||||
| #define BuildHDFEOS5 0 | ||||
| #define BuildTRIANGLE 0 | ||||
| #define HDFlib -lmfhdf -ldf -ljpeg -lz | ||||
| #define HDF5lib -lhdf5_hl -lhdf5 | ||||
| #define BuildUdunits 1 | ||||
| #define UdUnitslib -ludunits2 | ||||
							
								
								
									
										46
									
								
								samples/Text/main.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								samples/Text/main.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,46 @@ | ||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | ||||
|  | ||||
| <!-- | ||||
| 2008 PUC-RIO/LABORATORIO TELEMIDIA, | ||||
| Some Rights Reserved. | ||||
|  | ||||
| This program is free software; you can redistribute it and/or modify it under  | ||||
| the terms of the GNU General Public License version 2 as published by | ||||
| the Free Software Foundation. | ||||
|  | ||||
| This program is distributed in the hope that it will be useful, but WITHOUT ANY  | ||||
| WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A  | ||||
| PARTICULAR PURPOSE.  See the GNU General Public License version 2 for more  | ||||
| details. | ||||
|  | ||||
| You should have received a copy of the GNU General Public License version 2 | ||||
| along with this program; if not, write to the Free Software | ||||
| Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA | ||||
| --> | ||||
|  | ||||
| <ncl id="teste" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile" | ||||
|      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  | ||||
|      xsi:schemaLocation="http://www.ncl.org.br/NCL3.0/EDTVProfile | ||||
|      http://www.ncl.org.br/NCL3.0/profiles/NCL30EDTV.xsd"> | ||||
|  | ||||
| <head> | ||||
|  | ||||
| 	<regionBase> | ||||
| 		<region id="luaRegion" width="100%" height="100%"/> | ||||
| 	</regionBase> | ||||
|  | ||||
| 	<descriptorBase> | ||||
| 		<descriptor id="luaDesc" region="luaRegion" focusIndex="luaIdx"/> | ||||
| 	</descriptorBase>   | ||||
| </head> | ||||
|  | ||||
| <body> | ||||
| 	<port id="init" component="lua"/> | ||||
| 	<media type="application/x-ginga-settings" id="programSettings"> | ||||
| 		<property name="currentKeyMaster" value="luaIdx"/> | ||||
| 	</media> | ||||
|  | ||||
| 	<media id="lua" descriptor="luaDesc" src="game.lua"/> | ||||
| </body> | ||||
|  | ||||
| </ncl> | ||||
							
								
								
									
										45
									
								
								samples/Text/min-help.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								samples/Text/min-help.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,45 @@ | ||||
| THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Built-in/min.shtml | ||||
| THE_TITLE:min | ||||
|    NCL Home > Documentation > Functions > General applied math | ||||
|  | ||||
| min | ||||
|  | ||||
|    Computes the minimum value of a multi-dimensional array. | ||||
|  | ||||
| Prototype | ||||
|  | ||||
|         function min ( | ||||
|                 value  : numeric | ||||
|         ) | ||||
|  | ||||
|         return_val [1] :  numeric | ||||
|  | ||||
| Arguments | ||||
|  | ||||
|    value | ||||
|  | ||||
|    An array of one or more numeric values of any dimension. | ||||
|  | ||||
| Return value | ||||
|  | ||||
|    Returns a scalar of the same type as value. | ||||
|  | ||||
| Description | ||||
|  | ||||
|    This function returns the minimum value for an array of any dimensionality. Missing values are ignored; a missing value | ||||
|    is returned only if all values are missing. | ||||
|  | ||||
| See Also | ||||
|  | ||||
|    max, minind, maxind, dim_min, dim_max, dim_min_n, dim_max_n | ||||
|  | ||||
| Examples | ||||
|  | ||||
|    Example 1 | ||||
|  | ||||
|   f = (/2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8/) | ||||
|   min_f = min(f) | ||||
|   print(min_f)        ; Should be 2.1 | ||||
|  | ||||
|  | ||||
|    ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF | ||||
							
								
								
									
										21
									
								
								samples/Text/receiver.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								samples/Text/receiver.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| <?xml version="1.0" encoding="ISO-8859-1"?> | ||||
| <ncl id="sender" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile"> | ||||
| 	<head> | ||||
| 		<regionBase> | ||||
| 			<region id="rTV" width="100%" height="100%" zIndex="1"/>		 | ||||
| 		</regionBase> | ||||
| 		 | ||||
| 		 | ||||
| 		<descriptorBase> | ||||
| 			<descriptor id="dTV" region="rTV" /> | ||||
| 		</descriptorBase> | ||||
| 	</head> | ||||
| 	 | ||||
| 	<body> | ||||
| 		 | ||||
| 		<port id="pLua" component="lua" /> | ||||
| 		 | ||||
| 		<media id="lua" descriptor="dTV" src="receiver.lua" /> | ||||
| 		 | ||||
| 	</body> | ||||
| </ncl> | ||||
							
								
								
									
										40
									
								
								samples/Text/rmMonAnnCycLLT-help.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								samples/Text/rmMonAnnCycLLT-help.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,40 @@ | ||||
| THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Contributed/rmMonAnnCycLLT.shtml | ||||
| THE_TITLE:rmMonAnnCycLLT | ||||
|    NCL Home > Documentation > Functions > Climatology | ||||
|  | ||||
| rmMonAnnCycLLT | ||||
|  | ||||
|    Removes the annual cycle from "monthly" data. | ||||
|  | ||||
| Prototype | ||||
|  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" | ||||
|  | ||||
|         function rmMonAnnCycLLT ( | ||||
|                 x [*][*][*] : numeric | ||||
|         ) | ||||
|  | ||||
|         return_val [dimsizes(x)] :  typeof(x) | ||||
|  | ||||
| Arguments | ||||
|  | ||||
|    x | ||||
|  | ||||
|    A three-dimensional array of monthly values, dimensioned lat x lon x time. The time dimension must be a multiple of 12. | ||||
|  | ||||
| Return value | ||||
|  | ||||
|    The results are returned in an array of the same type and dimensionality as x. If the input data contains metadata, these | ||||
|    will be retained. | ||||
|  | ||||
| Description | ||||
|  | ||||
|    This function removes the annual cycle from month (number of months = 12) data and subtracts the long term means from | ||||
|    each month. | ||||
|  | ||||
| See Also | ||||
|  | ||||
|    rmMonAnnCycLLT, rmMonAnnCycTLL, rmMonAnnCycLLLT | ||||
|  | ||||
|  | ||||
|    ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF | ||||
							
								
								
									
										35
									
								
								samples/Text/zonalAve-help.ncl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								samples/Text/zonalAve-help.ncl
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Contributed/zonalAve.shtml | ||||
| THE_TITLE:zonalAve | ||||
|    NCL Home > Documentation > Functions > General applied math | ||||
|  | ||||
| zonalAve | ||||
|  | ||||
|    Computes a zonal average of the input array. | ||||
|  | ||||
| Prototype | ||||
|  | ||||
| load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" | ||||
|  | ||||
|         function zonalAve ( | ||||
|                 x  : numeric | ||||
|         ) | ||||
|  | ||||
|         return_val  :  typeof(x) | ||||
|  | ||||
| Arguments | ||||
|  | ||||
|    x | ||||
|  | ||||
|    An array of any size and type. | ||||
|  | ||||
| Return value | ||||
|  | ||||
|    The results are returned in an array of the same type and one dimension smaller than x. Metadata are preserved. | ||||
|  | ||||
| Description | ||||
|  | ||||
|    This function computes a zonal average of the input array x. If the input array has a "long_name" or "short_name" | ||||
|    attribute, it will be updated. | ||||
|  | ||||
|  | ||||
|    ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF | ||||
							
								
								
									
										21
									
								
								samples/Vue/basic.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								samples/Vue/basic.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | ||||
| <style> | ||||
| .red { | ||||
|   color: #f00; | ||||
| } | ||||
| </style> | ||||
|  | ||||
| <template> | ||||
| <div> | ||||
|   <h2 v-class="red">{{msg}}</h2> | ||||
| </div> | ||||
| </template> | ||||
|  | ||||
| <script> | ||||
| module.exports = { | ||||
|   data: function () { | ||||
|     return { | ||||
|       msg: 'Hello from Vue!' | ||||
|     } | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										31
									
								
								samples/Vue/pre-processors.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								samples/Vue/pre-processors.vue
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,31 @@ | ||||
| <style lang="stylus"> | ||||
| font-stack = Helvetica, sans-serif | ||||
| primary-color = #999 | ||||
| body | ||||
|   font 100% font-stack | ||||
|   color primary-color | ||||
| </style> | ||||
|  | ||||
| <template lang="jade"> | ||||
| div | ||||
|   h1 {{msg}} | ||||
|   comp-a | ||||
|   comp-b | ||||
| </template> | ||||
|  | ||||
| <script lang="babel"> | ||||
| import compA from './components/a.vue' | ||||
| import compB from './components/b.vue' | ||||
|  | ||||
| export default { | ||||
|   data () { | ||||
|     return { | ||||
|       msg: 'Hello from Babel!' | ||||
|     } | ||||
|   }, | ||||
|   components: { | ||||
|     'comp-a': compA, | ||||
|     'comp-b': compB | ||||
|   } | ||||
| } | ||||
| </script> | ||||
							
								
								
									
										17
									
								
								samples/XPages/navbar.xsp-config
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								samples/XPages/navbar.xsp-config
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <faces-config> | ||||
|   <faces-config-extension> | ||||
|     <namespace-uri>http://www.ibm.com/xsp/custom</namespace-uri> | ||||
|     <default-prefix>xc</default-prefix> | ||||
|   </faces-config-extension> | ||||
|   <composite-component> | ||||
|     <component-type>navbar</component-type> | ||||
|     <composite-name>navbar</composite-name> | ||||
|     <composite-file>/navbar.xsp</composite-file> | ||||
|     <composite-extension> | ||||
|       <designer-extension> | ||||
|         <in-palette>true</in-palette> | ||||
|       </designer-extension> | ||||
|     </composite-extension> | ||||
|   </composite-component> | ||||
| </faces-config> | ||||
							
								
								
									
										22
									
								
								samples/XPages/navbar.xsp.metadata
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								samples/XPages/navbar.xsp.metadata
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,22 @@ | ||||
| <?xml version="1.0" encoding="UTF-8"?><note class="form" maintenanceversion="1.0" replicaid="88257E000001FF59" version="9.0" xmlns="http://www.lotus.com/dxl"> | ||||
| <noteinfo noteid="1aa" sequence="14" unid="47D707801D48026E85257C48007E06C7"> | ||||
| <created><datetime>20131221T175632,71-05</datetime></created> | ||||
| <modified><datetime>20150305T194407,22-08</datetime></modified> | ||||
| <revised><datetime>20150305T194407,21-08</datetime></revised> | ||||
| <lastaccessed><datetime>20150305T194407,22-08</datetime></lastaccessed> | ||||
| <addedtofile><datetime>20150305T162153,30-08</datetime></addedtofile></noteinfo> | ||||
| <updatedby><name>CN=Eric McCormick/O=Eric McCormick</name></updatedby> | ||||
| <wassignedby><name>CN=Eric McCormick/O=Eric McCormick</name></wassignedby> | ||||
| <item name="$Flags"><text>gC~4;</text></item> | ||||
| <item name="$TITLE"><text>navbar.xsp</text></item> | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| <item name="$FileNames" sign="true"><text>navbar.xsp</text></item> | ||||
| <item name="$DesignerVersion"><text>8.5.3</text></item> | ||||
|  | ||||
|  | ||||
|  | ||||
| </note> | ||||
							
								
								
									
										38
									
								
								samples/YAML/Ansible.YAML-tmLanguage
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								samples/YAML/Ansible.YAML-tmLanguage
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,38 @@ | ||||
| # [PackageDev] target_format: plist, ext: tmLanguage | ||||
| --- | ||||
| name: Ansible | ||||
| scopeName: source.ansible | ||||
| fileTypes: [] | ||||
| uuid: 787ae642-b4ae-48b1-94e9-f935bec43a8f | ||||
|  | ||||
| patterns: | ||||
| - name: comment.line.number-sign.ansible | ||||
|   match: (?:^ *|\G *)((#).*) | ||||
|   captures: | ||||
|     '1': {name: comment.line.number-sign.ansible} | ||||
|     '2': {name: punctuation.definition.comment.line.ansible} | ||||
|  | ||||
| - name: storage.type.ansible | ||||
|   match: (\{\{ *[^\{\}]+ *\}\})|(\$\{[^\{\}]+\}) | ||||
|  | ||||
| - name: keyword.other.ansible | ||||
|   match: \- (name\:|include\:) (.*)|(^(- |\s*)\w+\:) | ||||
|   captures: | ||||
|     '2': {name: string.quoted.double.ansible} | ||||
|  | ||||
| - name: variable.complex.ansible | ||||
|   contentName: string.other.ansible | ||||
|   begin: (\w+)(=)\"? | ||||
|   beginCaptures: | ||||
|     '1': {name: entity.other.attribute-name.ansible} | ||||
|     '2': {name: text} | ||||
|   end: \"?\s | ||||
|   patterns: | ||||
|     - include: $self | ||||
|     - name: constant.other.ansible | ||||
|       match: . | ||||
|  | ||||
| - name: string.quoted.double.ansible | ||||
|   match: ^(\[[0-9a-zA-Z_-]+(((\:)children)*)\]) | ||||
|   captures: | ||||
|     '2': {name: variable.parameter.ansible} | ||||
							
								
								
									
										16
									
								
								samples/YAML/source.r-console.syntax
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								samples/YAML/source.r-console.syntax
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,16 @@ | ||||
| ---  | ||||
| name: R Console | ||||
| fileTypes: [] | ||||
|  | ||||
| scopeName: source.r-console | ||||
| uuid: F629C7F3-823B-4A4C-8EEE-9971490C5710 | ||||
| patterns:  | ||||
| - name: source.r.embedded.r-console | ||||
|   begin: "^> " | ||||
|   beginCaptures:  | ||||
|     "0":  | ||||
|       name: punctuation.section.embedded.r-console | ||||
|   end: \n|\z | ||||
|   patterns:  | ||||
|   - include: source.r | ||||
| keyEquivalent: ^~R | ||||
							
								
								
									
										30
									
								
								samples/xBase/sample.ch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								samples/xBase/sample.ch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| #ifndef __HARBOUR__ | ||||
|    #ifndef __XPP__ | ||||
|       #ifndef __CLIP__ | ||||
|          #ifndef FlagShip | ||||
|             #define __CLIPPER__ | ||||
|          #endif | ||||
|       #endif | ||||
|    #endif | ||||
| #endif | ||||
|  | ||||
| /* File create flags */ | ||||
| #define FC_NORMAL          0  /* No file attributes are set */ | ||||
| #define FC_READONLY        1 | ||||
| #define FC_HIDDEN          2 | ||||
| #define FC_SYSTEM          4 | ||||
|  | ||||
| // New-style comment | ||||
| #command SET DELETED <x:ON,OFF,&>      => Set( _SET_DELETED, <(x)> ) | ||||
| #command SET DELETED (<x>)             => Set( _SET_DELETED, <x> ) | ||||
| #command @ <row>, <col> SAY <exp> [PICTURE <pic>] [COLOR <clr>] => ; | ||||
|          DevPos( <row>, <col> ) ; DevOutPict( <exp>, <pic> [, <clr>] ) | ||||
|           | ||||
| #command ENDIF <*x*> => endif | ||||
|  | ||||
| #ifdef __CLIPPER__    | ||||
|    #xtranslate hb_MemoWrit( [<x,...>] )  => MemoWrit( <x> ) | ||||
|    #xtranslate hb_dbExists( <t> )        => File( <t> ) | ||||
|    #xtranslate hb_dbPack()               => __dbPack() | ||||
|    #xtranslate hb_default( @<v>, <x> )   => iif( StrTran( ValType( <v> ), "M", "C" ) == StrTran( ValType( <x> ), "M", "C" ),, <v> := <x>, ) | ||||
| #endif | ||||
							
								
								
									
										167
									
								
								samples/xBase/sample.prg
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								samples/xBase/sample.prg
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| #require "hbtest" | ||||
|  | ||||
| #pragma linenumber=on | ||||
|  | ||||
| #include "hbclass.ch" | ||||
|  | ||||
| #stdout "stdout" | ||||
| #warning "warning" | ||||
|  | ||||
| #define MYCONST  100 | ||||
| #undef MYCONST | ||||
|  | ||||
| #ifdef __HARBOUR__ | ||||
| #else | ||||
| #endif | ||||
|  | ||||
| #if defined( __HARBOUR__ ) .OR. .T. | ||||
| #elif defined( __HARBOUR__ ) | ||||
| #endif | ||||
|  | ||||
| THREAD STATIC t_var := "thread" | ||||
|  | ||||
| REQUEST AllTrim | ||||
| ANNOUNCE my_module | ||||
|  | ||||
| PROCEDURE Main() | ||||
|  | ||||
|    MEMVAR p_var, m_var | ||||
|    FIELD fld | ||||
|  | ||||
|    STATIC s_test := "static" | ||||
|    LOCAL o := TTest():New( "one", "two" ), tmp | ||||
|    LOCAL oError | ||||
|    LOCAL bBlock := {| tmp | QOut( tmp ) } | ||||
|    LOCAL hHash := { "name" => "value", "name2" => "value2", 2 => 1 } | ||||
|    PUBLIC p_var := "public" | ||||
|    PRIVATE m_var := "private" | ||||
|    PARAMETERS p1 | ||||
|  | ||||
|    Set( _SET_DATEFORMAT, "yyyy-mm-dd" ) | ||||
|  | ||||
|    CLS | ||||
|    @ 10, 10 SAY "Hello world!" | ||||
|  | ||||
|    ? hb_ValToExp( o ) | ||||
|    ? m->p1 | ||||
|    ? hHash[ "name" ], hHash[ 2 ] | ||||
|  | ||||
|    FOR tmp := 1 TO 10 STEP 2 | ||||
|       ? tmp | ||||
|    NEXT | ||||
|  | ||||
|    FOR EACH tmp IN { "a", "b" } DESCEND | ||||
|       ? tmp | ||||
|    NEXT | ||||
|  | ||||
|    ? 10.01 + 2 - 3 / 4 * 5 ^ 6 ** 1 | ||||
|    ? 2 < 1, 2 > 1, 2 >= 1, 2 <= 1, 2 == 1, 2 = 1, 2 != 1, 2 <> 1, 2 # 1 | ||||
|    ? -( 1 + 2 ), "a" $ "ab", 10 % 2 | ||||
|  | ||||
|    tmp := 0 | ||||
|    DO WHILE tmp < 2 | ||||
|       ? tmp++ | ||||
|    ENDDO | ||||
|  | ||||
|    tmp := 0 | ||||
|    WHILE tmp < 2 | ||||
|       ? ++tmp | ||||
|       IF tmp >= 0xFF | ||||
|          LOOP | ||||
|       ENDIF | ||||
|       EXIT | ||||
|    ENDDO | ||||
|  | ||||
|    --tmp | ||||
|    tmp-- | ||||
|  | ||||
|    IF tmp < -10.0 | ||||
|       ? NIL | ||||
|    ELSEIF .F. | ||||
|       ? 0d19800101 | ||||
|    ELSE | ||||
|       ? "string" | ||||
|    ENDIF | ||||
|  | ||||
|    DO CASE | ||||
|    CASE tmp == 1 | ||||
|       ? "A" | ||||
|    OTHERWISE | ||||
|       ? "B" | ||||
|    ENDCASE | ||||
|  | ||||
|    SWITCH tmp | ||||
|    CASE 1 | ||||
|       ? "A" | ||||
|       EXIT | ||||
|    OTHERWISE | ||||
|       ? "B" | ||||
|    ENDSWITCH | ||||
|  | ||||
|    BEGIN SEQUENCE WITH __BreakBlock() | ||||
|       BREAK | ||||
|    RECOVER USING oError | ||||
|    END /* SEQUENCE */ | ||||
|  | ||||
|    local_func( @hHash ) | ||||
|  | ||||
|    RETURN | ||||
|  | ||||
| INIT PROCEDURE init_proc() | ||||
|    RETURN | ||||
|  | ||||
| EXIT PROCEDURE exit_proc() | ||||
|    RETURN | ||||
|  | ||||
| PROCEDURE returning_nothing() | ||||
|    RETURN | ||||
|  | ||||
| FUNCTION pub_func() | ||||
|    RETURN .T. | ||||
|  | ||||
| STATIC FUNCTION local_func() | ||||
|    RETURN .F. | ||||
|  | ||||
| CREATE CLASS TTest INHERIT TParent | ||||
|    VAR One, Two | ||||
|    METHOD New( One ) | ||||
|    METHOD Test() INLINE QOut( "Hello" ) | ||||
|    METHOD MethProc() | ||||
| ENDCLASS | ||||
|  | ||||
| METHOD PROCEDURE MethProc() | ||||
|    RETURN | ||||
|  | ||||
| METHOD New( One ) CLASS TTest | ||||
|  | ||||
|    ::super:New() | ||||
|    ::One := One | ||||
|  | ||||
|    RETURN Self | ||||
|  | ||||
| CREATE CLASS TParent | ||||
|    VAR One | ||||
|    METHOD New() | ||||
| ENDCLASS | ||||
|  | ||||
| METHOD New() CLASS TParent | ||||
|    ? "TParent:New()" | ||||
|    RETURN Self | ||||
|  | ||||
| // This is a comment | ||||
| /* This is a comment */ | ||||
| /* This is | ||||
| a comment */ | ||||
| * This is a comment | ||||
| && This is a comment | ||||
| NOTE This is a comment | ||||
| note This is a comment | ||||
| NOTE | ||||
|  | ||||
| FUNCTION pub_func2() | ||||
|    ? "hello world!" | ||||
|    ? 'hello world!' | ||||
|    ? "hello\world!" | ||||
|    ? "\" | ||||
|    ? "hello world!" | ||||
|    RETURN .T. | ||||
							
								
								
									
										512
									
								
								samples/xBase/sample.prw
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										512
									
								
								samples/xBase/sample.prw
									
									
									
									
									
										Executable file
									
								
							| @@ -0,0 +1,512 @@ | ||||
|  | ||||
| /** | ||||
|  * This is a sample file for Linguist. | ||||
|  * It's written in AdvPL, a xBase Language. | ||||
|  * | ||||
|  * Author: Arthur Helfstein Fragoso | ||||
|  * | ||||
|  * This script has the specific use of integrating between a financial institution | ||||
|  * and other two companies in the process of creating Installment Bills for | ||||
|  * customers. | ||||
|  * | ||||
|  * The functions are called from the ERP Protheus TOTVS. | ||||
|  * | ||||
|  **/ | ||||
|  | ||||
|  | ||||
|  | ||||
| #Include "TOPCONN.ch" | ||||
| #include "tbiconn.ch" | ||||
| #Include "Protheus.ch" | ||||
| #Include "rwmake.ch" | ||||
| #Include "FileIO.ch" | ||||
| #Include "json.ch" | ||||
| #Include "utils.ch" | ||||
|  | ||||
|  | ||||
| //////////////////////// | ||||
| // Faturando (Reparcelando) | ||||
| // FA280 | ||||
| // FA280_01 | ||||
| // | ||||
|  | ||||
| User Function FA280() | ||||
|  | ||||
| 	//Executado uma vez para cada parcela | ||||
|  | ||||
| 	If cEmpAnt == '06' | ||||
|  | ||||
| 		SE5->(dbSelectArea("SE5")) | ||||
|  | ||||
| 		cSet3Filter := "SE5->E5_FATURA == SE1->E1_NUM" | ||||
|  | ||||
| 		SE5->(dbSetFilter( {|| &cSet3Filter }, cSet3Filter )) | ||||
| 		SE5->(dbGoTOP()) | ||||
|  | ||||
| 		aOrig06Tit := {} // = Todos os Titulos que ser<65>o reparcelados | ||||
| 		nTotal := 0 | ||||
|  | ||||
| 		While SE5->(!EOF()) | ||||
| 			AADD(aOrig06Tit, {SE5->E5_PREFIXO, SE5->E5_NUMERO, SE5->E5_VALOR}) | ||||
| 			nTotal += SE5->E5_VALOR | ||||
| 			SE5->(dbSkip()) | ||||
| 		End | ||||
|  | ||||
| 		aNovoTitulo:= {;//{"E1_FILIAL"   ,SE1ORIG->E1_FILIAL ,Nil},; | ||||
| 		              ;//{"E1_PREFIXO"  ,SE1->E1_PREFIXO    ,Nil},; | ||||
| 		              {"E1_NUM"      ,SE1->E1_NUM        ,Nil},; | ||||
| 		              {"E1_TIPO"     ,SE1->E1_TIPO       ,Nil},; | ||||
| 		              {"E1_PARCELA"  ,SE1->E1_PARCELA    ,Nil},; | ||||
| 		              {"E1_NATUREZ"  ,SE1->E1_NATUREZ    ,Nil},; | ||||
| 		              {"E1_CLIENTE"  ,SE1->E1_CLIENTE    ,Nil},; | ||||
| 		              {"E1_LOJA"     ,SE1->E1_LOJA       ,Nil},; | ||||
| 		              {"E1_NRDOC"    ,SE1->E1_NRDOC      ,Nil},; | ||||
| 		              ;//{"E1_X_COD"    ,SE1->E1_NATUREZ    ,Nil},; | ||||
| 		              {"E1_EMISSAO"  ,SE1->E1_EMISSAO    ,Nil},; | ||||
| 		              {"E1_VENCTO"   ,SE1->E1_VENCTO     ,Nil},; | ||||
| 		              {"E1_VENCREA"  ,SE1->E1_VENCREA    ,Nil},; | ||||
| 		              ;//{"E1_VALOR"    ,SE1->E1_VALOR      ,Nil},; | ||||
| 		              ;//{"E1_SALDO"    ,SE1->E1_SALDO      ,Nil},; | ||||
| 		              ;//{"E1_VLCRUZ"   ,SE1->E1_VLCRUZ     ,Nil},; | ||||
| 		              {"E1_PORTADO"  ,SE1->E1_PORTADO    ,Nil},; | ||||
| 		              {"E1_FATURA"   ,SE1->E1_FATURA     ,Nil},; | ||||
| 		              {"E1_X_DTPAV"  ,SE1->E1_X_DTPAV    ,Nil},; | ||||
| 		              {"E1_X_DTSAV"  ,SE1->E1_X_DTSAV    ,Nil},; | ||||
| 		              {"E1_X_DTTAV"  ,SE1->E1_X_DTTAV    ,Nil},; | ||||
| 		              {"E1_X_DTSPC"  ,SE1->E1_X_DTSPC    ,Nil},; | ||||
| 		              {"E1_X_DTPRO"  ,SE1->E1_X_DTPRO    ,Nil},; | ||||
| 		              {"E1_NUMBCO"   ,SE1->E1_NUMBCO     ,Nil},; | ||||
| 		              {"E1_X_DUDME"  ,SE1->E1_X_DUDME    ,Nil},; | ||||
| 		              {"E1_X_TIPOP"  ,SE1->E1_X_TIPOP    ,Nil},; | ||||
| 		              {"E1_X_DTCAN"  ,SE1->E1_X_DTCAN    ,Nil},; | ||||
| 		              {"E1_X_MOTIV"  ,SE1->E1_X_MOTIV    ,Nil},; | ||||
| 		              {"E1_X_DESPC"  ,SE1->E1_X_DESPC    ,Nil},; | ||||
| 		              {"E1_NUMNOTA"  ,SE1->E1_NUMNOTA    ,Nil},; | ||||
| 		              {"E1_SERIE"    ,SE1->E1_SERIE      ,Nil},; | ||||
| 		              {"E1_X_DEPRO"  ,SE1->E1_X_DEPRO    ,Nil},; | ||||
| 		              {"E1_X_TPPAI"  ,SE1->E1_X_TPPAI    ,Nil},; | ||||
| 		              {"E1_X_CGC"    ,SE1->E1_X_CGC      ,Nil},; | ||||
| 		              {"E1_XTPEMP"   ,SE1->E1_XTPEMP     ,Nil},; | ||||
| 		              {"E1_X_CTRIM"  ,SE1->E1_X_CTRIM    ,Nil}} | ||||
|  | ||||
| 		StartJob("U_FA280_01",getenvserver(),.T., SE1->E1_PREFIXO ,SE1->E1_NUM, SE1->E1_TIPO, SE1->E1_VALOR, aOrig06Tit, nTotal, SE1->E1_PARCELA, aNovoTitulo) | ||||
|  | ||||
| 		SE5->(dbClearFilter()) | ||||
|  | ||||
| 	EndIf | ||||
|  | ||||
| Return nil | ||||
|  | ||||
|  | ||||
| User Function FA280_01(cE1PREFIXO, cE1NUM, cE1TIPO, nE1Valor, aOrig06Tit, nTotal, cE1PARCELA, aNovoTitulo) | ||||
| 	Local nValPar := nil | ||||
| 	Local aTit05 := {} | ||||
|  | ||||
| 	RpcSetType(3) // Nao consome licensa | ||||
|  | ||||
| 	//Prepare Environment Empresa "01" Filial '0102' | ||||
| 	// Muda de empresa | ||||
| 	While !RpcSetEnv('01', '0102',,,,GetEnvServer(),{}) | ||||
| 		Sleep(400) | ||||
| 	End | ||||
|  | ||||
| 		nFileLog := u_OpenLog("\Logs\FA280_"+dToS(dDataBase)+".log") | ||||
|  | ||||
| 		fWrite(nFileLog,"----- FA280 -----"+CRLF) | ||||
|  | ||||
| 		fWrite(nFileLog,cE1NUM+CRLF) | ||||
|  | ||||
| 		nParcelas := round(nTotal/nE1Valor, 0) | ||||
|  | ||||
| 		cUltima := '0'+ chr(64+nParcelas) | ||||
|  | ||||
| 		fWrite(nFileLog,"valor das parcelas: "+ cvaltochar(nE1Valor) +CRLF) | ||||
| 		fWrite(nFileLog,"parcelas: "+ cvaltochar(nParcelas) +CRLF) | ||||
| 		fWrite(nFileLog,"parcela atual: "+ cE1PARCELA +CRLF) | ||||
| 		fWrite(nFileLog,"ultima parcela: "+ cUltima +CRLF) | ||||
|  | ||||
| 		n0102total := 0 | ||||
| 		n0105total := 0 | ||||
|  | ||||
| 		//Loop entre todos os Titulos que serão Reparcelados | ||||
|  | ||||
| 		For nI := 1 To len(aOrig06Tit) | ||||
|  | ||||
| 			fWrite(nFileLog,"E5_NUMERO: "+aOrig06Tit[nI][2] +CRLF) | ||||
|  | ||||
| 			cQuery := "select * from SE1010 where E1_PREFIXO = '"+ aOrig06Tit[nI][1] +"' and E1_NUM = '"+ aOrig06Tit[nI][2] +"' and  E1_TIPO = 'FAT' and D_E_L_E_T_ <> '*'" | ||||
|  | ||||
| 			fWrite(nFileLog,cQuery +CRLF) | ||||
|  | ||||
| 			If select("SE1ORIG") > 0 | ||||
| 				SE1ORIG->(DbCloseArea()) | ||||
| 			endif | ||||
| 			TcQuery cQuery New Alias 'SE1ORIG' | ||||
| 			dbSelectArea("SE1ORIG") | ||||
| 			SE1ORIG->(DBGOTOP()) | ||||
|  | ||||
| 			While SE1ORIG->(!EOF()) //Loop entre as duas filiais: 0102, 0105 | ||||
| 				fWrite(nFileLog,"SE1ORIG loop: "+SE1ORIG->E1_FILIAL +CRLF) | ||||
| 				cFilAnt := SE1ORIG->E1_FILIAL | ||||
|  | ||||
| 				//Faz a baixa | ||||
| 				if alltrim(SE1ORIG->E1_STATUS) == 'A' | ||||
| 					fWrite(nFileLog, SE1ORIG->E1_FILIAL+" : Fazendo baixa" +CRLF) | ||||
|  | ||||
| 					aBaixa	:= {{"E1_FILIAL"   ,SE1ORIG->E1_FILIAL   ,Nil},; | ||||
| 					            {"E1_PREFIXO"  ,SE1ORIG->E1_PREFIXO  ,Nil},; | ||||
| 					            {"E1_NUM"      ,SE1ORIG->E1_NUM      ,Nil},; | ||||
| 					            {"E1_TIPO"     ,SE1ORIG->E1_TIPO     ,Nil},; | ||||
| 					            {"E1_PARCELA"  ,SE1ORIG->E1_PARCELA  ,Nil},; | ||||
| 					            {"E1_DESCONT"  ,SE1ORIG->E1_DESCONT  ,Nil},; | ||||
| 					            {"E1_JUROS"    ,SE1ORIG->E1_JUROS    ,Nil},; | ||||
| 					            {"E1_MULTA"    ,SE1ORIG->E1_MULTA    ,Nil},; | ||||
| 					            {"E1_VLRREAL"  ,SE1ORIG->E1_VLRREAL  ,Nil},; | ||||
| 					            {"AUTMOTBX"    ,"FAT"                ,Nil},; | ||||
| 					            {"AUTDTBAIXA"  ,date()               ,Nil},; | ||||
| 					            {"AUTDTCREDITO",date()               ,Nil},; | ||||
| 					            {"AUTHIST"     ,"Bx.Emis.Fat."+cE1NUM,Nil},; | ||||
| 					            {"AUTVALREC"   ,SE1ORIG->E1_VALOR    ,Nil}} | ||||
|  | ||||
|  | ||||
| 					lMsErroAuto:=.F. //reseta lMsErroAuto | ||||
| 					MSExecAuto ({|x,y| FINA070(x,y)},aBaixa, 3) | ||||
|  | ||||
| 					If lMsErroAuto | ||||
|  | ||||
| 						fWrite(nFileLog,SE1ORIG->E1_FILIAL+" : Não foi efetuada a baixa do titulo : "+CRLF+ MSErroString()+ CRLF + tojson(aBaixa) + CRLF) | ||||
| 						return | ||||
| 					else | ||||
|  | ||||
| 						RECLOCK('SE5',.F.) | ||||
| 							E5_FATURA := cE1NUM | ||||
| 							E5_FATPREF:= cE1PREFIXO | ||||
| 							//E5_LA = S | ||||
| 							//E5_MOEDA = '' | ||||
| 							//E5_TXMOEDA = 1 | ||||
| 						MSUNLOCK() | ||||
| 						RECLOCK('SE1',.F.) | ||||
| 							E1_FATURA := cE1NUM | ||||
| 							E1_FATPREF:= cE1PREFIXO | ||||
| 							E1_TIPOFAT:= cE1TIPO | ||||
| 							E1_FLAGFAT:= 'S' | ||||
| 							E1_DTFATUR:= dDataBase | ||||
| 						MSUNLOCK() | ||||
|  | ||||
| 						fWrite(nFileLog,SE1ORIG->E1_FILIAL+" : baixa feita" +CRLF) | ||||
| 					endif | ||||
|  | ||||
| 				endif | ||||
|  | ||||
| 				//calcula valor total de cada filial para poder calcular a Fatura | ||||
|  | ||||
| 				if SE1ORIG->E1_FILIAL == '0102' | ||||
| 					n0102total += SE1ORIG->E1_VALOR | ||||
| 				elseif SE1ORIG->E1_FILIAL == '0105' | ||||
| 					n0105total += SE1ORIG->E1_VALOR | ||||
| 				else | ||||
| 					fWrite(nFileLog,"Programa nao preparado para a filial "+SE1ORIG->E1_FILIAL +CRLF) | ||||
| 				endif | ||||
|  | ||||
| 				SE1ORIG->(dbskip()) | ||||
|  | ||||
| 			End | ||||
|  | ||||
| 		Next nI | ||||
|  | ||||
| 		cFilAnt := '0102' | ||||
|  | ||||
| 		fWrite(nFileLog,"Total 0102: "+cvaltochar(n0102total) +CRLF) | ||||
| 		fWrite(nFileLog,"Total 0105: "+cvaltochar(n0105total) +CRLF) | ||||
|  | ||||
| 		n0102val := round(nE1Valor * n0102total/nTotal, 2) | ||||
| 		n0105val := nE1Valor - n0102val | ||||
|  | ||||
| 		aFili := {} | ||||
|  | ||||
| 		if n0102total > 0 | ||||
| 			AADD(aFili,'0102') | ||||
| 		endif | ||||
|  | ||||
| 		if n0105total > 0 | ||||
| 			AADD(aFili,'0105') | ||||
| 		endif | ||||
|  | ||||
| 		For nI := 1 To len(aFili) | ||||
|  | ||||
| 			cQuery := "select COUNT(*) as QUANT, SUM(E1_VALOR) as TOTALINC from SE1010  where E1_NUM = '"+ cE1NUM +"'  and E1_FILIAL='"+ aFili[nI] +"' and E1_PREFIXO = '"+ cE1PREFIXO +"' and D_E_L_E_T_ <> '*'" | ||||
|  | ||||
| 			If select("PARC") > 0 | ||||
| 				PARC->(DbCloseArea()) | ||||
| 			endif | ||||
| 			TcQuery cQuery New Alias 'PARC' | ||||
| 			dbSelectArea("PARC") | ||||
|  | ||||
| 			//verificamos se estamos na ultima parcela | ||||
| 			if PARC->QUANT == nParcelas -1 //QUANT = quantidade de parcelas incluida | ||||
| 				fWrite(nFileLog,"Ultima Parcela"+CRLF) | ||||
| 				//o valor desta será o valor que resta | ||||
| 				nValPar := SE1ORIG->E1_VALOR - PARC->TOTALINC | ||||
|  | ||||
| 				if aFili[nI] == '0102' | ||||
| 					n0102val := n0102total - PARC->TOTALINC | ||||
| 				elseif aFili[nI] == '0105' | ||||
| 					n0105val := n0105total - PARC->TOTALINC | ||||
| 				endif | ||||
| 			endif | ||||
|  | ||||
| 		Next nI | ||||
|  | ||||
| 		fWrite(nFileLog,"Total 0102: "+cvaltochar(n0102total) + "  -> Parcela de: "+cvaltochar(n0102val) +CRLF) | ||||
| 		fWrite(nFileLog,"Total 0105: "+cvaltochar(n0105total) + "  -> Parcela de: "+cvaltochar(n0105val) +CRLF) | ||||
|  | ||||
| 		///////////////// | ||||
|  | ||||
| 		For nI := 1 To len(aFili) | ||||
|  | ||||
| 			if aFili[nI] == '0102' | ||||
| 				nValPar := n0102val | ||||
| 			elseif aFili[nI] == '0105' | ||||
| 				nValPar := n0105val | ||||
| 			endif | ||||
|  | ||||
| 			aTitulo := ACLONE(aNovoTitulo) | ||||
|  | ||||
| 			AADD(aTitulo, {"E1_PREFIXO" ,cE1PREFIXO          ,Nil}) | ||||
| 			AADD(aTitulo, {"E1_FILIAL"  ,aFili[nI]           ,Nil}) | ||||
| 			AADD(aTitulo, {"E1_VALOR"   ,nValPar             ,Nil}) | ||||
| 			AADD(aTitulo, {"E1_SALDO"   ,nValPar             ,Nil}) | ||||
| 			AADD(aTitulo, {"E1_VLCRUZ"  ,nValPar             ,Nil}) | ||||
|  | ||||
| 			lMsErroAuto := .F. | ||||
|  | ||||
| 			if aFili[nI] == '0102' | ||||
|  | ||||
| 				MSExecAuto({|x,y| FINA040(x,y)},aTitulo,3) //Inclusao | ||||
|  | ||||
| 				If lMsErroAuto | ||||
| 					fWrite(nFileLog,"Erro " + CRLF) | ||||
| 					fWrite(nFileLog,"Erro ao incluir titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aTitulo) + CRLF) | ||||
| 					return | ||||
| 				else | ||||
| 					fWrite(nFileLog,"Sucesso "+ CRLF) | ||||
| 					fWrite(nFileLog,"Titulo incluido: "+ aFili[nI] +" : " + cValToChar(nValPar) +CRLF) | ||||
| 				endif | ||||
|  | ||||
| 			elseif aFili[nI] == '0105' | ||||
| 				fWrite(nFileLog,"Salvando titulos 05 para o final "+aFili[nI]+CRLF) | ||||
| 				//StartJob("U_JOBF040",getenvserver(),.T., SE1ORIG->E1_FILIAL, aTitulo) | ||||
| 				AADD(aTit05, aTitulo) | ||||
| 				//fWrite(nFileLog,"passou pela thread "+CRLF) | ||||
| 			else | ||||
| 				fWrite(nFileLog,"Erro, filial nao tratada "+aFili[nI]+CRLF) | ||||
| 			endif | ||||
|  | ||||
| 		Next nI | ||||
|  | ||||
|  | ||||
| 	Reset Environment | ||||
|  | ||||
| 	While !RpcSetEnv('01', '0105',,,,GetEnvServer(),{}) | ||||
| 		Sleep(400) | ||||
| 	End | ||||
|  | ||||
| 		For nI := 1 To len(aTit05) | ||||
|  | ||||
| 			lMsErroAuto := .F. | ||||
|  | ||||
| 			MSExecAuto({|x,y| FINA040(x,y)},aTit05[nI],3) //Inclusao | ||||
|  | ||||
| 			If lMsErroAuto | ||||
| 				fWrite(nFileLog,"Erro " + CRLF) | ||||
| 				fWrite(nFileLog,"Erro ao incluir titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aTit05[nI]) + CRLF) | ||||
| 				return | ||||
| 			else | ||||
| 				fWrite(nFileLog,"Sucesso "+ CRLF) | ||||
| 				fWrite(nFileLog,"Titulo incluido: "+CRLF) | ||||
| 			endif | ||||
|  | ||||
| 		Next nI | ||||
|  | ||||
| 	Reset Environment | ||||
|  | ||||
| 	fClose(nFileLog) | ||||
|  | ||||
| Return | ||||
|  | ||||
|  | ||||
|  | ||||
|  | ||||
| //////////////////////// | ||||
| // Cancelamento da Fatura (Cancelamento do Reparcelamento) | ||||
| // F280PCAN | ||||
| // JOBF280C | ||||
| // | ||||
|  | ||||
| User Function F280PCAN() | ||||
|  | ||||
| 	/** | ||||
| 	 * cFatCan  - numero da fatura | ||||
| 	 * cPrefCan - prefixo | ||||
| 	 * cTipoCan - tipo | ||||
| 	 **/ | ||||
|  | ||||
| 	If cEmpAnt == '06' | ||||
|  | ||||
| 		StartJob("U_JOBF280C",getenvserver(),.T., cPrefCan, cFatCan, cTipoCan) | ||||
|  | ||||
| 	EndIf | ||||
|  | ||||
| Return .T. | ||||
|  | ||||
|  | ||||
| User Function JOBF280C(cPrefCan, cFatCan, cTipoCan) | ||||
|  | ||||
| 	RpcSetType(3) // Nao consome licensa | ||||
|  | ||||
| 	While !RpcSetEnv('01', '0102',,,,GetEnvServer(),{}) | ||||
| 		Sleep(400) | ||||
| 	End | ||||
|  | ||||
| 		nFileLog := u_OpenLog("\Logs\F280PCAN_"+dToS(dDataBase)+".log") | ||||
|  | ||||
| 		fWrite(nFileLog,"----- F280PCAN -----"+CRLF) | ||||
|  | ||||
| 		fWrite(nFileLog,"E1_PREFIXO = '"+ cPrefCan +"' and E1_NUM = '"+ cFatCan +"' and  E1_TIPO = '"+ cTipoCan +"'"+CRLF) | ||||
|  | ||||
| 		cQuery := "select * from SE1010 where E1_PREFIXO = '"+ cPrefCan +"' and E1_NUM = '"+ cFatCan +"' and  E1_TIPO = '"+ cTipoCan +"' and D_E_L_E_T_ <> '*'" | ||||
|  | ||||
| 		If select("SE1ORIG") > 0 | ||||
| 			SE1ORIG->(DbCloseArea()) | ||||
| 		endif | ||||
| 		TcQuery cQuery New Alias 'SE1ORIG' | ||||
| 		dbSelectArea("SE1ORIG") | ||||
| 		SE1ORIG->(DBGOTOP()) | ||||
|  | ||||
| 		While SE1ORIG->(!EOF()) //Loop entre todas as parcelas e filiais | ||||
|  | ||||
| 			SE1->(dbselectarea("SE1")) | ||||
| 			SE1->(dbSetOrder(1)) | ||||
|  | ||||
|  | ||||
| 			fWrite(nFileLog,"dbseek" + CRLF) | ||||
| 			if ! SE1->(dbSeek(SE1ORIG->E1_FILIAL+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO)) | ||||
| 				fWrite(nFileLog,"Erro dbseek" + CRLF) | ||||
| 				Alert("Erro. Verificar F280PCAN() - dbseek") | ||||
| 				fWrite(nFileLog,"Erro dbseek("+SE1ORIG->E1_FILIAL+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO+")" + CRLF) | ||||
| 				return .F. | ||||
| 			endif | ||||
|  | ||||
| 			cFilAnt := SE1ORIG->E1_FILIAL | ||||
|  | ||||
| 			aFatura:= {{"E1_FILIAL"  ,SE1ORIG->E1_FILIAL         ,Nil},; | ||||
| 			           {"E1_PREFIXO" ,SE1ORIG->E1_PREFIXO        ,Nil},; | ||||
| 			           {"E1_NUM"     ,SE1ORIG->E1_NUM            ,Nil},; | ||||
| 			           {"E1_PARCELA" ,SE1ORIG->E1_PARCELA        ,Nil},; | ||||
| 			           {"E1_TIPO"    ,SE1ORIG->E1_TIPO           ,Nil}} | ||||
|  | ||||
| 			lMsErroAuto := .F. | ||||
|  | ||||
| 			MSExecAuto({|x,y| FINA040(x,y)},aFatura,5) //Exclus<75>o | ||||
|  | ||||
| 			If lMsErroAuto | ||||
| 				fWrite(nFileLog,"Erro " + CRLF) | ||||
| 				fWrite(nFileLog,"Erro ao remover o titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aFatura) + CRLF) | ||||
| 				Alert("Erro ao remover o titulo. Verificar F280PCAN()") | ||||
| 				return .F. | ||||
| 			else | ||||
| 				fWrite(nFileLog,"Sucesso "+ CRLF) | ||||
| 				fWrite(nFileLog,"Titulo removido" +CRLF) | ||||
| 			endif | ||||
|  | ||||
| 			SE1ORIG->(dbskip()) | ||||
|  | ||||
| 		end | ||||
|  | ||||
|  | ||||
| 		///////////////////////////////////////////// | ||||
| 		///////  Cancela as baixas | ||||
| 		/// | ||||
|  | ||||
| 		fWrite(nFileLog,"- cancela baixas" + CRLF) | ||||
|  | ||||
| 		cQuery := "select * from SE1060 where  E1_FATURA = '"+ cFatCan +"' and D_E_L_E_T_ <> '*'" | ||||
|  | ||||
| 		If select("SE1ORIG") > 0 | ||||
| 			SE1ORIG->(DbCloseArea()) | ||||
| 		endif | ||||
| 		TcQuery cQuery New Alias 'SE1ORIG' | ||||
| 		dbSelectArea("SE1ORIG") | ||||
| 		SE1ORIG->(DBGOTOP()) | ||||
|  | ||||
| 		aFili := {"0102", "0105"} | ||||
|  | ||||
| 		While SE1ORIG->(!EOF()) //Loop entre todas as parcelas e filiais | ||||
|  | ||||
| 			SE1->(dbselectarea("SE1")) | ||||
| 			SE1->(dbSetOrder(1)) | ||||
|  | ||||
| 			For nI := 1 To len(aFili) | ||||
|  | ||||
| 				cFilAnt := aFili[nI] | ||||
|  | ||||
| 				fWrite(nFileLog,"dbseek" + CRLF) | ||||
| 				if ! SE1->(dbSeek(aFili[nI]+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO)) | ||||
| 					fWrite(nFileLog,"dbseek nao encontrou titulo para filial "+aFili[nI] + CRLF) | ||||
| 					fWrite(nFileLog,"dbseek('"+aFili[nI]+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO+"')" + CRLF) | ||||
| 					LOOP | ||||
| 				endif | ||||
|  | ||||
| 				nSE5Recno := u_RetSQLOne("select R_E_C_N_O_ from SE5010 where E5_FILIAL = '"+SE1->E1_FILIAL+"' and E5_PREFIXO = '"+SE1->E1_PREFIXO+"' and E5_TIPO = '"+SE1->E1_TIPO+"' and E5_NUMERO = '"+SE1->E1_NUM+"' "+; | ||||
| 				                         " and E5_FATURA = '"+SE1->E1_FATURA+"' and E5_FATPREF='"+SE1->E1_FATPREF+"' and D_E_L_E_T_ <> '*' ", "R_E_C_N_O_") | ||||
|  | ||||
| 				//Removemos os Flags de Fatura para conseguirmos cancelar a baixa pelo FINA070 | ||||
| 				RECLOCK('SE1',.F.) | ||||
| 					E1_FATURA := '' | ||||
| 					E1_FATPREF:= '' | ||||
| 					E1_TIPOFAT:= '' | ||||
| 					E1_FLAGFAT:= '' | ||||
| 					E1_DTFATUR:= StoD('') | ||||
| 			    MSUNLOCK() | ||||
|  | ||||
| 			    SE5->(DbGoTo(nSE5Recno)) | ||||
| 				RECLOCK('SE5',.F.) | ||||
| 					E5_MOTBX  := 'NOR' | ||||
| 					//E5_FATURA := '' | ||||
| 					//E5_FATPREF:= '' | ||||
| 				MSUNLOCK() | ||||
|  | ||||
| 				aBaixa := {{"E1_FILIAL"   ,SE1->E1_FILIAL  ,Nil},; | ||||
| 				           {"E1_PREFIXO"  ,SE1->E1_PREFIXO ,Nil},; | ||||
| 				           {"E1_NUM"      ,SE1->E1_NUM     ,Nil},; | ||||
| 				           {"E1_TIPO"     ,SE1->E1_TIPO    ,Nil},; | ||||
| 				           {"E1_PARCELA"  ,SE1->E1_PARCELA ,Nil},; | ||||
| 				           {"E1_DESCONT"  ,SE1->E1_DESCONT ,Nil},; | ||||
| 				           {"E1_JUROS"    ,SE1->E1_JUROS   ,Nil},; | ||||
| 				           {"E1_MULTA"    ,SE1->E1_MULTA   ,Nil},; | ||||
| 				           {"E1_VLRREAL"  ,SE1->E1_VLRREAL ,Nil},; | ||||
| 				           {"AUTMOTBX"    ,"NOR"           ,Nil},; | ||||
| 				           {"AUTDTBAIXA"  ,date()          ,Nil},; | ||||
| 				           {"AUTDTCREDITO",date()          ,Nil},; | ||||
| 				           {"AUTHIST"     ,""              ,Nil},; | ||||
| 				           {"AUTVALREC"   ,SE1->E1_VALOR   ,Nil}} | ||||
|  | ||||
|  | ||||
| 				lMsErroAuto:=.F. //reseta lMsErroAuto | ||||
| 				MSExecAuto ({|x,y| FINA070(x,y)},aBaixa, 5) | ||||
|  | ||||
| 				If lMsErroAuto | ||||
| 					fWrite(nFileLog,SE1->E1_FILIAL+" : Não foi efetuada o cancelamento de baixa : "+CRLF+ MSErroString()+ CRLF + tojson(aBaixa) + CRLF) | ||||
| 					return | ||||
| 				else | ||||
| 					fWrite(nFileLog,SE1->E1_FILIAL+" : cancelamento de baixa feito" +CRLF) | ||||
| 				endif | ||||
|  | ||||
| 			Next nI | ||||
|  | ||||
| 			SE1ORIG->(dbskip()) | ||||
| 		end | ||||
|  | ||||
| 	Reset Environment | ||||
|  | ||||
| Return | ||||
							
								
								
									
										3
									
								
								test/fixtures/Data/Modelines/ruby2
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/Data/Modelines/ruby2
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| /* vim: set ts=8 sw=4 filetype=ruby tw=0: */ | ||||
|  | ||||
| # Please help how do I into setting vim modlines | ||||
							
								
								
									
										3
									
								
								test/fixtures/Data/Modelines/ruby3
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								test/fixtures/Data/Modelines/ruby3
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| /* vim: set ft=ruby ts=8 sw=4 tw=0: */ | ||||
|  | ||||
| # I am not good at humor | ||||
| @@ -308,6 +308,12 @@ class TestBlob < Minitest::Test | ||||
|     # 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? | ||||
| @@ -326,9 +332,6 @@ class TestBlob < Minitest::Test | ||||
|     assert sample_blob("public/javascripts/controls.js").vendored? | ||||
|     assert sample_blob("public/javascripts/dragdrop.js").vendored? | ||||
|  | ||||
|     # Samples | ||||
|     assert sample_blob("Samples/Ruby/foo.rb").vendored? | ||||
|  | ||||
|     # jQuery | ||||
|     assert sample_blob("jquery.js").vendored? | ||||
|     assert sample_blob("public/javascripts/jquery.js").vendored? | ||||
| @@ -511,15 +514,36 @@ class TestBlob < Minitest::Test | ||||
|     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? | ||||
|  | ||||
| @@ -534,6 +558,11 @@ class TestBlob < Minitest::Test | ||||
|     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 | ||||
|   | ||||
| @@ -22,42 +22,55 @@ class TestHeuristcs < Minitest::Test | ||||
|     assert_equal [], results | ||||
|   end | ||||
|  | ||||
|   def assert_heuristics(hash) | ||||
|     candidates = hash.keys.map { |l| Language[l] } | ||||
|  | ||||
|     hash.each do |language, blobs| | ||||
|       Array(blobs).each do |blob| | ||||
|         result = Heuristics.call(file_blob(blob), candidates) | ||||
|         assert_equal [Language[language]], result, "Failed for #{blob}" | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   # Candidate languages = ["C++", "Objective-C"] | ||||
|   def test_obj_c_by_heuristics | ||||
|     # Only calling out '.h' filenames as these are the ones causing issues | ||||
|     assert_heuristics({ | ||||
|       "Objective-C" => all_fixtures("Objective-C", "*.h"), | ||||
|       "C++" => ["C++/render_adapter.cpp", "C++/ThreadedQueue.h"], | ||||
|       "C++" => ["C++/scanner.h", "C++/qscicommand.h", "C++/v8.h", "C++/gdsdbreader.h"], | ||||
|       "C" => nil | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_c_by_heuristics | ||||
|     languages = [Language["C++"], Language["Objective-C"], Language["C"]] | ||||
|     results = Heuristics.call(file_blob("C/ArrowLeft.h"), languages) | ||||
|     assert_equal [], results | ||||
|   end | ||||
|  | ||||
|   def test_detect_still_works_if_nothing_matches | ||||
|     blob = Linguist::FileBlob.new(File.join(samples_path, "Objective-C/hello.m")) | ||||
|     match = Language.detect(blob) | ||||
|     assert_equal Language["Objective-C"], match | ||||
|   end | ||||
|  | ||||
|   # Candidate languages = ["Perl", "Prolog"] | ||||
|   # Candidate languages = ["Perl", "Perl6", "Prolog"] | ||||
|   def test_pl_prolog_perl_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "Prolog" => all_fixtures("Prolog/*.pl"), | ||||
|       "Perl" => all_fixtures("Perl/*.pl") + ["Perl/perl-test.t"], | ||||
|       "Perl6" => all_fixtures("Perl6/*.pl") | ||||
|       "Prolog" => all_fixtures("Prolog", "*.pl"), | ||||
|       "Perl" => ["Perl/oo1.pl", "Perl/oo2.pl", "Perl/oo3.pl", "Perl/fib.pl", "Perl/use5.pl"], | ||||
|       "Perl6" => all_fixtures("Perl6", "*.pl") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   # Candidate languages = ["Perl", "Perl6"] | ||||
|   def test_pm_perl_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "Perl" => all_fixtures("Perl", "*.pm"), | ||||
|       "Perl6" => all_fixtures("Perl6", "*.pm") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   # Candidate languages = ["ECL", "Prolog"] | ||||
|   def test_ecl_prolog_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "ECL" => "ECL/sample.ecl", | ||||
|       "Prolog" => "Prolog/or-constraint.ecl" | ||||
|       "ECL" => all_fixtures("ECL", "*.ecl"), | ||||
|       "Prolog" => all_fixtures("Prolog", "*.ecl") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
| @@ -74,69 +87,69 @@ class TestHeuristcs < Minitest::Test | ||||
|   # Candidate languages = ["AGS Script", "AsciiDoc", "Public Key"] | ||||
|   def test_asc_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "AsciiDoc" => "AsciiDoc/list.asc", | ||||
|       "AGS Script" => "AGS Script/GlobalScript.asc", | ||||
|       "AsciiDoc" => all_fixtures("AsciiDoc", "*.asc"), | ||||
|       "AGS Script" => all_fixtures("AGS Script", "*.asc"), | ||||
|       "Public Key" => all_fixtures("Public Key", "*.asc") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_cl_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "Common Lisp" => all_fixtures("Common Lisp"), | ||||
|       "OpenCL" => all_fixtures("OpenCL") | ||||
|       "Common Lisp" => all_fixtures("Common Lisp", "*.cl"), | ||||
|       "OpenCL" => all_fixtures("OpenCL", "*.cl") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_f_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "FORTRAN" => all_fixtures("FORTRAN"), | ||||
|       "Forth" => all_fixtures("Forth") | ||||
|       "FORTRAN" => all_fixtures("FORTRAN", "*.f") + all_fixtures("FORTRAN", "*.for"), | ||||
|       "Forth" => all_fixtures("Forth", "*.f") + all_fixtures("Forth", "*.for") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   # Candidate languages = ["Hack", "PHP"] | ||||
|   def test_hack_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "Hack" => "Hack/funs.php", | ||||
|       "PHP" => "PHP/Model.php" | ||||
|       "Hack" => all_fixtures("Hack", "*.php"), | ||||
|       "PHP" => all_fixtures("PHP", "*.php") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   # Candidate languages = ["Scala", "SuperCollider"] | ||||
|   def test_sc_supercollider_scala_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "SuperCollider" => "SuperCollider/WarpPreset.sc", | ||||
|       "Scala" => "Scala/node11.sc" | ||||
|       "SuperCollider" => all_fixtures("SuperCollider", "*.sc"), | ||||
|       "Scala" => all_fixtures("Scala", "*.sc") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_fs_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "F#" => all_fixtures("F#"), | ||||
|       "Forth" => all_fixtures("Forth"), | ||||
|       "GLSL" => all_fixtures("GLSL") | ||||
|       "F#" => all_fixtures("F#", "*.fs"), | ||||
|       "Forth" => all_fixtures("Forth", "*.fs"), | ||||
|       "GLSL" => all_fixtures("GLSL", "*.fs") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_fr_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "Frege" => all_fixtures("Frege"), | ||||
|       "Forth" => all_fixtures("Forth"), | ||||
|       "Text" => all_fixtures("Text") | ||||
|       "Frege" => all_fixtures("Frege", "*.fr"), | ||||
|       "Forth" => all_fixtures("Forth", "*.fr"), | ||||
|       "Text" => all_fixtures("Text", "*.fr") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_bb_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "BitBake" => all_fixtures("BitBake"), | ||||
|       "BlitzBasic" => all_fixtures("BlitzBasic") | ||||
|       "BitBake" => all_fixtures("BitBake", "*.bb"), | ||||
|       "BlitzBasic" => all_fixtures("BlitzBasic", "*.bb") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_lsp_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "Common Lisp" => all_fixtures("Common Lisp"), | ||||
|       "NewLisp" => all_fixtures("NewLisp") | ||||
|       "Common Lisp" => all_fixtures("Common Lisp", "*.lsp") + all_fixtures("Common Lisp", "*.lisp"), | ||||
|       "NewLisp" => all_fixtures("NewLisp", "*.lsp") + all_fixtures("NewLisp", "*.lisp") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
| @@ -147,21 +160,10 @@ class TestHeuristcs < Minitest::Test | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def assert_heuristics(hash) | ||||
|     candidates = hash.keys.map { |l| Language[l] } | ||||
|  | ||||
|     hash.each do |language, blobs| | ||||
|       Array(blobs).each do |blob| | ||||
|         result = Heuristics.call(file_blob(blob), candidates) | ||||
|         assert_equal [Language[language]], result, "Failed for #{blob}" | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   def test_ls_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "LiveScript" => "LiveScript/hello.ls", | ||||
|       "LoomScript" => "LoomScript/HelloWorld.ls" | ||||
|       "LiveScript" => all_fixtures("LiveScript", "*.ls"), | ||||
|       "LoomScript" => all_fixtures("LoomScript", "*.ls") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
| @@ -171,4 +173,17 @@ class TestHeuristcs < Minitest::Test | ||||
|       "XML" => all_fixtures("XML", "*.ts") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_ch_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "xBase" => all_fixtures("xBase", ".ch") | ||||
|     }) | ||||
|   end | ||||
|  | ||||
|   def test_r_by_heuristics | ||||
|     assert_heuristics({ | ||||
|       "R" => all_fixtures("R", "*.r") + all_fixtures("R", "*.R"), | ||||
|       "Rebol" => all_fixtures("Rebol", "*.r") | ||||
|     }) | ||||
|   end | ||||
| end | ||||
|   | ||||
| @@ -263,6 +263,24 @@ class TestLanguage < Minitest::Test | ||||
|     assert_equal 'AGS Script', Language.find_by_alias('AGS').name | ||||
|   end | ||||
|  | ||||
|   def test_find_ignores_comma | ||||
|     assert_equal 'Rust', Language['rust,no_run'].name | ||||
|   end | ||||
|  | ||||
|   def test_find_by_name_ignores_comma | ||||
|     assert_equal Language['Rust'], Language.find_by_name('rust,no_run') | ||||
|   end | ||||
|  | ||||
|   def test_find_by_alias_ignores_comma | ||||
|     assert_equal Language['Rust'], Language.find_by_alias('rust,no_run') | ||||
|   end | ||||
|  | ||||
|   def test_doesnt_blow_up_with_blank_lookup | ||||
|     assert_equal nil, Language.find_by_alias('') | ||||
|     assert_equal nil, Language.find_by_name(nil) | ||||
|     assert_equal nil, Language[""] | ||||
|   end | ||||
|  | ||||
|   def test_name | ||||
|     assert_equal 'Perl',   Language['Perl'].name | ||||
|     assert_equal 'Python', Language['Python'].name | ||||
|   | ||||
| @@ -9,6 +9,8 @@ class TestModelines < Minitest::Test | ||||
|  | ||||
|   def test_modeline_strategy | ||||
|     assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby") | ||||
|     assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby2") | ||||
|     assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby3") | ||||
|     assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplus") | ||||
|     assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1") | ||||
|     assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2") | ||||
| @@ -27,6 +29,8 @@ class TestModelines < Minitest::Test | ||||
|  | ||||
|   def test_modeline_languages | ||||
|     assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby").language | ||||
|     assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby2").language | ||||
|     assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby3").language | ||||
|     assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplus").language | ||||
|     assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1").language | ||||
|     assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2").language | ||||
|   | ||||
| @@ -25,6 +25,10 @@ class TestTokenizer < Minitest::Test | ||||
|     assert_equal %w(add \( \)), tokenize('add(123, 456)') | ||||
|     assert_equal %w(|), tokenize('0x01 | 0x10') | ||||
|     assert_equal %w(*), tokenize('500.42 * 1.0') | ||||
|     assert_equal %w(), tokenize('1.23e-04') | ||||
|     assert_equal %w(), tokenize('1.0f') | ||||
|     assert_equal %w(), tokenize('1234ULL') | ||||
|     assert_equal %w(G1 X55 Y5 F2000), tokenize('G1 X55 Y5 F2000') | ||||
|   end | ||||
|  | ||||
|   def test_skip_comments | ||||
|   | ||||
							
								
								
									
										2
									
								
								vendor/grammars/Elm.tmLanguage
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Elm.tmLanguage
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Elm.tmLanguage updated: 8137f5a48c...f17b1914dd
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Handlebars
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Handlebars
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Handlebars updated: 60532f35cf...64f293140c
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/IDL-Syntax
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/IDL-Syntax
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/IDL-Syntax updated: ee1bded38b...bb21604f07
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/InnoSetup
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/InnoSetup
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/InnoSetup updated: 417c64d7b3...3906a8d2fb
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Lean.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Lean.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Lean.tmbundle updated: dc33b9450f...dd3e30f058
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/LiveScript.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/LiveScript.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/LiveScript.tmbundle updated: 801cfac602...92d0a7c47c
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/NimLime
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/NimLime
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/NimLime updated: 4acce8b67b...50d7344f9b
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/SMT.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/SMT.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/SMT.tmbundle updated: 5b8231f516...b72f1aef2c
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Sublime-Modula-2
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Sublime-Modula-2
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Sublime-Modula-2 updated: f30f2fbe3b...9bd5077f92
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Sublime-Text-2-OpenEdge-ABL
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Sublime-Text-2-OpenEdge-ABL
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Sublime-Text-2-OpenEdge-ABL updated: 6e8231cca1...dd14b342cb
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/SublimePapyrus
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/SublimePapyrus
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/SublimePapyrus updated: db14899948...2451bac8ef
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/Vala-TMBundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/Vala-TMBundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/Vala-TMBundle updated: bb84dccd11...1c5ebb62d1
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/abap.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/abap.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/abap.tmbundle updated: 5d8acce13c...08d6db92d0
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/api-blueprint-sublime-plugin
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/api-blueprint-sublime-plugin
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/api-blueprint-sublime-plugin updated: e5289f429b...550417b9bb
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/asciidoc.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/asciidoc.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/asciidoc.tmbundle updated: 2d3f7a4f58...0c93369ddd
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/atom-fsharp
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/atom-fsharp
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/atom-fsharp updated: 55785b6af0...e7a4159fbf
									
								
							
							
								
								
									
										1
									
								
								vendor/grammars/atom-language-purescript
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/grammars/atom-language-purescript
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/grammars/atom-language-purescript added at 5fd5b6460e
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/atom-salt
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/atom-salt
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/atom-salt updated: 6d6bdc1be1...77257d25b4
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/chapel-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/chapel-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/chapel-tmbundle updated: 03c5d25641...4c9bc68a51
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/d.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/d.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/d.tmbundle updated: f7953e41fd...e6551b27e3
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/dart-sublime-bundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/dart-sublime-bundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/dart-sublime-bundle updated: 67f23dfef2...3e3ac8cc03
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/elixir-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/elixir-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/elixir-tmbundle updated: 9542bbb684...56efe6116f
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/factor
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/factor
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/factor updated: 0124e630f0...ac5da311f7
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/haxe-sublime-bundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/haxe-sublime-bundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/haxe-sublime-bundle updated: 810b34b259...102acf66b9
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/html.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/html.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/html.tmbundle updated: e87e8de648...181a15de24
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/jade-tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/jade-tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/jade-tmbundle updated: 9ad91309a4...ad13ddaad0
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/java.tmbundle
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/java.tmbundle
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/java.tmbundle updated: bed5760ae0...5f4204576e
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-clojure
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-clojure
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-clojure updated: 04e308ae4c...19522d6acb
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-coffee-script
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-coffee-script
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-coffee-script updated: 99f29d259f...e9f47f0f55
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-crystal
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-crystal
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-crystal updated: d4f3c1f43d...932646913b
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-csharp
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-csharp
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-csharp updated: 8745f4e545...79fe8b5764
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-gfm
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-gfm
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-gfm updated: 7cb930dcaf...9b95c2ad7c
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-javascript
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-javascript
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-javascript updated: e26b8c50a3...39fd6989f7
									
								
							
							
								
								
									
										1
									
								
								vendor/grammars/language-ncl
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								vendor/grammars/language-ncl
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule vendor/grammars/language-ncl added at ae46014e68
									
								
							
							
								
								
									
										2
									
								
								vendor/grammars/language-python
									
									
									
									
										vendored
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								vendor/grammars/language-python
									
									
									
									
										vendored
									
									
								
							 Submodule vendor/grammars/language-python updated: 7271315c85...7d38baf80b
									
								
							Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user