diff --git a/.gitmodules b/.gitmodules index 01efd1c7..dcd94622 100644 --- a/.gitmodules +++ b/.gitmodules @@ -656,3 +656,12 @@ [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 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 80576ac4..1d358957 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -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: [![Build Status](https://secure.travis-ci.org/github/linguist.png?branch=master)](http://travis-ci.org/github/linguist) +Here's our current build status: [![Build Status](https://api.travis-ci.org/github/linguist.svg?branch=master)](https://travis-ci.org/github/linguist) ## Releasing diff --git a/Rakefile b/Rakefile index b38486c0..1936c5f0 100644 --- a/Rakefile +++ b/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| diff --git a/grammars.yml b/grammars.yml index 9eb3c8c2..d6d38438 100644 --- a/grammars.yml +++ b/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 @@ -330,6 +333,8 @@ vendor/grammars/language-javascript: 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 +343,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: diff --git a/lib/linguist/documentation.yml b/lib/linguist/documentation.yml index 6e06329f..f95a547d 100644 --- a/lib/linguist/documentation.yml +++ b/lib/linguist/documentation.yml @@ -16,6 +16,7 @@ ## Documentation files ## +- (^|/)CHANGE(S|LOG)?(\.|$) - (^|/)CONTRIBUTING(\.|$) - (^|/)COPYING(\.|$) - (^|/)INSTALL(\.|$) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 271d89cf..23de1b02 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -284,6 +284,12 @@ module Linguist end end + disambiguate "Text", "NCL" do |data| + if data.include?("THE_TITLE") + Language["Text"] + end + end + disambiguate "NL", "NewLisp" do |data| if /^(b|g)[0-9]+ /.match(data) Language["NL"] diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 85261f69..9b48cc23 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1349,7 +1349,7 @@ Harbour: color: "#0e60e3" extensions: - .hb - tm_scope: none + tm_scope: source.harbour ace_mode: text Haskell: @@ -2091,6 +2091,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: @@ -2659,7 +2667,7 @@ PureScript: color: "#1D222D" extensions: - .purs - tm_scope: source.haskell + tm_scope: source.purescript ace_mode: haskell Python: @@ -3336,6 +3344,7 @@ Text: extensions: - .txt - .fr + - .ncl tm_scope: none ace_mode: text @@ -3784,5 +3793,5 @@ xBase: extensions: - .prg - .ch - tm_scope: none + tm_scope: source.harbour ace_mode: text diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index c63b24c0..ef3f734c 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.5.8" + VERSION = "4.5.9" end diff --git a/samples/NCL/PrnOscPat_driver.ncl b/samples/NCL/PrnOscPat_driver.ncl new file mode 100644 index 00000000..9a4ba134 --- /dev/null +++ b/samples/NCL/PrnOscPat_driver.ncl @@ -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 diff --git a/samples/NCL/WRF_static_2.ncl b/samples/NCL/WRF_static_2.ncl new file mode 100644 index 00000000..3f2eefd6 --- /dev/null +++ b/samples/NCL/WRF_static_2.ncl @@ -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 + diff --git a/samples/NCL/WRF_track_1.ncl b/samples/NCL/WRF_track_1.ncl new file mode 100644 index 00000000..9d818519 --- /dev/null +++ b/samples/NCL/WRF_track_1.ncl @@ -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 diff --git a/samples/NCL/cru_8.ncl b/samples/NCL/cru_8.ncl new file mode 100644 index 00000000..465a9f85 --- /dev/null +++ b/samples/NCL/cru_8.ncl @@ -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) diff --git a/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl b/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl new file mode 100644 index 00000000..4efe39ab --- /dev/null +++ b/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl @@ -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 ******************************************************************** \ No newline at end of file diff --git a/samples/NCL/hdf4sds_7.ncl b/samples/NCL/hdf4sds_7.ncl new file mode 100644 index 00000000..f3aeff77 --- /dev/null +++ b/samples/NCL/hdf4sds_7.ncl @@ -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 diff --git a/samples/NCL/mask_12.ncl b/samples/NCL/mask_12.ncl new file mode 100644 index 00000000..30027c80 --- /dev/null +++ b/samples/NCL/mask_12.ncl @@ -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 + diff --git a/samples/NCL/mcsst_1.ncl b/samples/NCL/mcsst_1.ncl new file mode 100644 index 00000000..338fe26f --- /dev/null +++ b/samples/NCL/mcsst_1.ncl @@ -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 diff --git a/samples/NCL/primero.ncl b/samples/NCL/primero.ncl new file mode 100644 index 00000000..7860ab8d --- /dev/null +++ b/samples/NCL/primero.ncl @@ -0,0 +1,3 @@ +val=102 +a=val/4. +print(a) diff --git a/samples/NCL/topo_9.ncl b/samples/NCL/topo_9.ncl new file mode 100644 index 00000000..e9bd62bf --- /dev/null +++ b/samples/NCL/topo_9.ncl @@ -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 diff --git a/samples/NCL/traj_3.ncl b/samples/NCL/traj_3.ncl new file mode 100644 index 00000000..f01304b4 --- /dev/null +++ b/samples/NCL/traj_3.ncl @@ -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 diff --git a/samples/NCL/tsdiagram_1.ncl b/samples/NCL/tsdiagram_1.ncl new file mode 100644 index 00000000..be9b2f6f --- /dev/null +++ b/samples/NCL/tsdiagram_1.ncl @@ -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 diff --git a/samples/NCL/unique_9.ncl b/samples/NCL/unique_9.ncl new file mode 100644 index 00000000..edcf8285 --- /dev/null +++ b/samples/NCL/unique_9.ncl @@ -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 diff --git a/samples/NCL/viewport_4.ncl b/samples/NCL/viewport_4.ncl new file mode 100644 index 00000000..3635a2fa --- /dev/null +++ b/samples/NCL/viewport_4.ncl @@ -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 diff --git a/samples/NCL/weather_sym_6.ncl b/samples/NCL/weather_sym_6.ncl new file mode 100644 index 00000000..49ed16d1 --- /dev/null +++ b/samples/NCL/weather_sym_6.ncl @@ -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 diff --git a/samples/NCL/xy_29.ncl b/samples/NCL/xy_29.ncl new file mode 100644 index 00000000..ae231f75 --- /dev/null +++ b/samples/NCL/xy_29.ncl @@ -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 + diff --git a/samples/Text/01_top.ncl b/samples/Text/01_top.ncl new file mode 100644 index 00000000..92f12f77 --- /dev/null +++ b/samples/Text/01_top.ncl @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/Text/LIDARLite.ncl b/samples/Text/LIDARLite.ncl new file mode 100644 index 00000000..f93f95f7 --- /dev/null +++ b/samples/Text/LIDARLite.ncl @@ -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* diff --git a/samples/Text/Site.local.ncl b/samples/Text/Site.local.ncl new file mode 100644 index 00000000..695dfa24 --- /dev/null +++ b/samples/Text/Site.local.ncl @@ -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 diff --git a/samples/Text/main.ncl b/samples/Text/main.ncl new file mode 100644 index 00000000..61bee15d --- /dev/null +++ b/samples/Text/main.ncl @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/Text/min-help.ncl b/samples/Text/min-help.ncl new file mode 100644 index 00000000..9fd20117 --- /dev/null +++ b/samples/Text/min-help.ncl @@ -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 diff --git a/samples/Text/receiver.ncl b/samples/Text/receiver.ncl new file mode 100644 index 00000000..83996d66 --- /dev/null +++ b/samples/Text/receiver.ncl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Text/rmMonAnnCycLLT-help.ncl b/samples/Text/rmMonAnnCycLLT-help.ncl new file mode 100644 index 00000000..9467861a --- /dev/null +++ b/samples/Text/rmMonAnnCycLLT-help.ncl @@ -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 diff --git a/samples/Text/zonalAve-help.ncl b/samples/Text/zonalAve-help.ncl new file mode 100644 index 00000000..20abf5de --- /dev/null +++ b/samples/Text/zonalAve-help.ncl @@ -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 diff --git a/samples/xBase/sample.prg b/samples/xBase/sample.prg new file mode 100644 index 00000000..33d7a1e6 --- /dev/null +++ b/samples/xBase/sample.prg @@ -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. diff --git a/test/test_blob.rb b/test/test_blob.rb index 51c0398a..976c83ff 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -513,6 +513,21 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob("README.txt"), :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? diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index a13ae12a..010bf587 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -122,7 +122,7 @@ class TestHeuristcs < Minitest::Test assert_heuristics({ "Frege" => all_fixtures("Frege"), "Forth" => all_fixtures("Forth"), - "Text" => all_fixtures("Text") + "Text" => all_fixtures("Text", "*.fr") }) end diff --git a/vendor/grammars/Handlebars b/vendor/grammars/Handlebars index 60532f35..85c88773 160000 --- a/vendor/grammars/Handlebars +++ b/vendor/grammars/Handlebars @@ -1 +1 @@ -Subproject commit 60532f35cf89ce8d7e3354ed2f81cc131e80b614 +Subproject commit 85c88773e83e437187bc9c924257f8e41caa63cf diff --git a/vendor/grammars/InnoSetup b/vendor/grammars/InnoSetup index 417c64d7..e7ca1ee0 160000 --- a/vendor/grammars/InnoSetup +++ b/vendor/grammars/InnoSetup @@ -1 +1 @@ -Subproject commit 417c64d7b301ca08b3deeb24f4355bb806516913 +Subproject commit e7ca1ee0dd99a022dd0bd679f9bdad7cd610432e diff --git a/vendor/grammars/Sublime-Modula-2 b/vendor/grammars/Sublime-Modula-2 index f30f2fbe..9bd5077f 160000 --- a/vendor/grammars/Sublime-Modula-2 +++ b/vendor/grammars/Sublime-Modula-2 @@ -1 +1 @@ -Subproject commit f30f2fbe3b103bef939b830261bcd595f8951c28 +Subproject commit 9bd5077f925ac7a3edc87d45d1f872593ff7377e diff --git a/vendor/grammars/Sublime-Text-2-OpenEdge-ABL b/vendor/grammars/Sublime-Text-2-OpenEdge-ABL index 6e8231cc..dd14b342 160000 --- a/vendor/grammars/Sublime-Text-2-OpenEdge-ABL +++ b/vendor/grammars/Sublime-Text-2-OpenEdge-ABL @@ -1 +1 @@ -Subproject commit 6e8231cca124750b413ee50e8a4ee20e36636a03 +Subproject commit dd14b342cb436cde41752df6a014588110b9c1c0 diff --git a/vendor/grammars/abap.tmbundle b/vendor/grammars/abap.tmbundle index 5d8acce1..5973e78c 160000 --- a/vendor/grammars/abap.tmbundle +++ b/vendor/grammars/abap.tmbundle @@ -1 +1 @@ -Subproject commit 5d8acce13c54650b62556c0b307d9f30ea7ff538 +Subproject commit 5973e78c60d3d7f11fb264b5581bbe492486e771 diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp index 55785b6a..2a531a5f 160000 --- a/vendor/grammars/atom-fsharp +++ b/vendor/grammars/atom-fsharp @@ -1 +1 @@ -Subproject commit 55785b6af0115aa49ed3fc2b3c3edb02a5305068 +Subproject commit 2a531a5f7aeb8d7f6ccc99e4cbd6f564a47a7322 diff --git a/vendor/grammars/atom-language-purescript b/vendor/grammars/atom-language-purescript new file mode 160000 index 00000000..5fd5b646 --- /dev/null +++ b/vendor/grammars/atom-language-purescript @@ -0,0 +1 @@ +Subproject commit 5fd5b6460e906045625fb5bbe7644425c73a3798 diff --git a/vendor/grammars/dart-sublime-bundle b/vendor/grammars/dart-sublime-bundle index 67f23dfe..8fe7c037 160000 --- a/vendor/grammars/dart-sublime-bundle +++ b/vendor/grammars/dart-sublime-bundle @@ -1 +1 @@ -Subproject commit 67f23dfef284d180da6f9960461c8f48de10a0cb +Subproject commit 8fe7c0370b9d901d24b01cabc47ba7079c0cd5bd diff --git a/vendor/grammars/elixir-tmbundle b/vendor/grammars/elixir-tmbundle index 9542bbb6..56efe611 160000 --- a/vendor/grammars/elixir-tmbundle +++ b/vendor/grammars/elixir-tmbundle @@ -1 +1 @@ -Subproject commit 9542bbb684b7241fc39e15af998344fea22b5dde +Subproject commit 56efe6116ff92a6979ba94ff2722486e3f440583 diff --git a/vendor/grammars/factor b/vendor/grammars/factor index 0124e630..a5fbd7e3 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit 0124e630f014071a35bbea43db745e3aaa3491a6 +Subproject commit a5fbd7e3f89b1f09bd03312aababefb440db99a6 diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index 810b34b2..ece380e5 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit 810b34b259f04e6dc30a03096d3cfe16b70f4ba9 +Subproject commit ece380e599b075255285ee7be0ec4b1a787fd6f8 diff --git a/vendor/grammars/language-crystal b/vendor/grammars/language-crystal index d4f3c1f4..75462302 160000 --- a/vendor/grammars/language-crystal +++ b/vendor/grammars/language-crystal @@ -1 +1 @@ -Subproject commit d4f3c1f43d7e2fdfe7efd40c9585b3e88fbdca58 +Subproject commit 754623023bd556b2bcb927dd8c1fd1ae4153e386 diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index 7cb930dc..6202c4e3 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit 7cb930dcaf387c9eb2b40e8c20a723c52d717c55 +Subproject commit 6202c4e34d23fd288b639dce598f61e728224077 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index e26b8c50..6e9fb364 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit e26b8c50a3ee02cb1d922d82ca66c9b75d06f052 +Subproject commit 6e9fb364cbc0d1558ce6af404c3de114ee07e1d4 diff --git a/vendor/grammars/language-ncl b/vendor/grammars/language-ncl new file mode 160000 index 00000000..ae46014e --- /dev/null +++ b/vendor/grammars/language-ncl @@ -0,0 +1 @@ +Subproject commit ae46014e687be08bc4a47012fe3f21a31c081b61 diff --git a/vendor/grammars/language-xbase b/vendor/grammars/language-xbase new file mode 160000 index 00000000..86f0c6c3 --- /dev/null +++ b/vendor/grammars/language-xbase @@ -0,0 +1 @@ +Subproject commit 86f0c6c370c56c95d1b1ac9f3dbdca3b31d482bb diff --git a/vendor/grammars/latex.tmbundle b/vendor/grammars/latex.tmbundle index a20438e8..2cae8202 160000 --- a/vendor/grammars/latex.tmbundle +++ b/vendor/grammars/latex.tmbundle @@ -1 +1 @@ -Subproject commit a20438e8e491933e8cb878f4d8e3015594b135a7 +Subproject commit 2cae820272e4b88141fe3f06adfab620951952fb diff --git a/vendor/grammars/sublime-mask b/vendor/grammars/sublime-mask index bd37c4e7..819f743e 160000 --- a/vendor/grammars/sublime-mask +++ b/vendor/grammars/sublime-mask @@ -1 +1 @@ -Subproject commit bd37c4e7537f0fae03d55c02891a5f2500562faf +Subproject commit 819f743efdcfa0d90a5b935cfaad799bd4ca7e6a