mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +00:00 
			
		
		
		
	Compare commits
	
		
			250 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e78e9e4747 | ||
| 
						 | 
					81f9079f43 | ||
| 
						 | 
					16eaa533b6 | ||
| 
						 | 
					2e521a6c74 | ||
| 
						 | 
					56a65d0975 | ||
| 
						 | 
					e4c6c1d245 | ||
| 
						 | 
					a9f366aed2 | ||
| 
						 | 
					96bd08e391 | ||
| 
						 | 
					02fe28eb25 | ||
| 
						 | 
					e77530b390 | ||
| 
						 | 
					d0370a3b4c | ||
| 
						 | 
					ebce4890b2 | ||
| 
						 | 
					1bc87aadb3 | ||
| 
						 | 
					53a532dc76 | ||
| 
						 | 
					0669a83e40 | ||
| 
						 | 
					c4ab3b276f | ||
| 
						 | 
					920f825496 | ||
| 
						 | 
					f28573420e | ||
| 
						 | 
					c471990aa3 | ||
| 
						 | 
					baf56666d4 | ||
| 
						 | 
					cbbc05f7b8 | ||
| 
						 | 
					051906727b | ||
| 
						 | 
					cfd5cbaba0 | ||
| 
						 | 
					caaad886c3 | ||
| 
						 | 
					2305f9051c | ||
| 
						 | 
					392ab2960f | ||
| 
						 | 
					1e134b5754 | ||
| 
						 | 
					d356ea28af | ||
| 
						 | 
					a015138dcd | ||
| 
						 | 
					ff99d1bac8 | ||
| 
						 | 
					f4af4727a1 | ||
| 
						 | 
					2c3069db77 | ||
| 
						 | 
					8845cd9c58 | ||
| 
						 | 
					090f765c7e | ||
| 
						 | 
					b58c0e8f3e | ||
| 
						 | 
					b4ff170603 | ||
| 
						 | 
					3bc540a283 | ||
| 
						 | 
					25b761b506 | ||
| 
						 | 
					1e502808c9 | ||
| 
						 | 
					27e0c8f78a | ||
| 
						 | 
					897218678e | ||
| 
						 | 
					4eb33fe3be | ||
| 
						 | 
					0614055efd | ||
| 
						 | 
					e70f3f595a | ||
| 
						 | 
					28af996bf9 | ||
| 
						 | 
					8bd8f0960c | ||
| 
						 | 
					255db77f1f | ||
| 
						 | 
					8b0b14c9a6 | ||
| 
						 | 
					95e83311b6 | ||
| 
						 | 
					6c07476c45 | ||
| 
						 | 
					1968f8193c | ||
| 
						 | 
					5155ad89e8 | ||
| 
						 | 
					c2505e8b7b | ||
| 
						 | 
					b38f4b786b | ||
| 
						 | 
					1a04c79738 | ||
| 
						 | 
					a464c234b8 | ||
| 
						 | 
					aa2319a052 | ||
| 
						 | 
					f22181f47d | ||
| 
						 | 
					3191ff498d | ||
| 
						 | 
					91ea482ea6 | ||
| 
						 | 
					905d87a112 | ||
| 
						 | 
					8eae4e56ef | ||
| 
						 | 
					5466fcfd2f | ||
| 
						 | 
					176a0e9926 | ||
| 
						 | 
					aa049b4677 | ||
| 
						 | 
					5c19f1f546 | ||
| 
						 | 
					9ae19a1f94 | ||
| 
						 | 
					8cf3b7ad51 | ||
| 
						 | 
					03d16835aa | ||
| 
						 | 
					7174130e46 | ||
| 
						 | 
					59f64c47b1 | ||
| 
						 | 
					f3655e8a1e | ||
| 
						 | 
					f97d796f90 | ||
| 
						 | 
					d342aa4841 | ||
| 
						 | 
					5c655e3b20 | ||
| 
						 | 
					9a0ac4a477 | ||
| 
						 | 
					8ea9632ccf | ||
| 
						 | 
					03ef4f30e8 | ||
| 
						 | 
					12228fb525 | ||
| 
						 | 
					92897046ed | ||
| 
						 | 
					91aa843a4e | ||
| 
						 | 
					c3145d3c08 | ||
| 
						 | 
					1ad2123896 | ||
| 
						 | 
					9b9a256c60 | ||
| 
						 | 
					0f3644d23a | ||
| 
						 | 
					04d3023f76 | ||
| 
						 | 
					5c7aa5406a | ||
| 
						 | 
					bce676e902 | ||
| 
						 | 
					7c9fd59a99 | ||
| 
						 | 
					b89d1a2e77 | ||
| 
						 | 
					f8c5015b20 | ||
| 
						 | 
					f28cdc8a15 | ||
| 
						 | 
					0e147f1f66 | ||
| 
						 | 
					a91705724d | ||
| 
						 | 
					5e3e8133fb | ||
| 
						 | 
					5a3758f1c7 | ||
| 
						 | 
					57237106f3 | ||
| 
						 | 
					99ad2368b0 | ||
| 
						 | 
					21d7f99a4e | ||
| 
						 | 
					24b368a30c | ||
| 
						 | 
					7c8bc8561d | ||
| 
						 | 
					ce37cd665d | ||
| 
						 | 
					bd0f4f6f78 | ||
| 
						 | 
					4867db8831 | ||
| 
						 | 
					e6ab516fb7 | ||
| 
						 | 
					7501b82df1 | ||
| 
						 | 
					aa6b881971 | ||
| 
						 | 
					3928734d0f | ||
| 
						 | 
					c7868a95bc | ||
| 
						 | 
					2012647f78 | ||
| 
						 | 
					84471a5463 | ||
| 
						 | 
					57a3c14f2b | ||
| 
						 | 
					d9914307eb | ||
| 
						 | 
					71cdf46197 | ||
| 
						 | 
					8a27884c70 | ||
| 
						 | 
					b881e3e6cb | ||
| 
						 | 
					ca718d8f2a | ||
| 
						 | 
					c6625b1b8a | ||
| 
						 | 
					16a6d680c4 | ||
| 
						 | 
					270fa8f5d3 | ||
| 
						 | 
					b1f5e93b4a | ||
| 
						 | 
					79a61c72e1 | ||
| 
						 | 
					3f04c11537 | ||
| 
						 | 
					b2270613d7 | ||
| 
						 | 
					0fe854421b | ||
| 
						 | 
					de074f421e | ||
| 
						 | 
					27590c39bd | ||
| 
						 | 
					67191d4d5e | ||
| 
						 | 
					00764f3d59 | ||
| 
						 | 
					4a2cb32149 | ||
| 
						 | 
					1a11664239 | ||
| 
						 | 
					9520cbb44c | ||
| 
						 | 
					1aea6b2cdb | ||
| 
						 | 
					6ff950341a | ||
| 
						 | 
					b9501e42b2 | ||
| 
						 | 
					065c809dd5 | ||
| 
						 | 
					5b9ea4a78f | ||
| 
						 | 
					b72c4d4400 | ||
| 
						 | 
					d46e214985 | ||
| 
						 | 
					799c47ce7a | ||
| 
						 | 
					b5121e59dd | ||
| 
						 | 
					f6a7b4929f | ||
| 
						 | 
					162b77ab5a | ||
| 
						 | 
					92904efd45 | ||
| 
						 | 
					93fabe487f | ||
| 
						 | 
					74d704bea2 | ||
| 
						 | 
					ee1bd50dd1 | ||
| 
						 | 
					07096f84f5 | ||
| 
						 | 
					a9b3bd632b | ||
| 
						 | 
					eec324890e | ||
| 
						 | 
					ca6ac8f0db | ||
| 
						 | 
					60ab4a5fe7 | ||
| 
						 | 
					10eb5830f0 | ||
| 
						 | 
					835ceae6f6 | ||
| 
						 | 
					abe3aa47f6 | ||
| 
						 | 
					53e34072ed | ||
| 
						 | 
					f83f761d0a | ||
| 
						 | 
					9c18bf3a89 | ||
| 
						 | 
					f6e1ab444e | ||
| 
						 | 
					0ae8b2959d | ||
| 
						 | 
					46b0b1e5e2 | ||
| 
						 | 
					b44dfb4ab8 | ||
| 
						 | 
					868e528810 | ||
| 
						 | 
					0a4c850ef1 | ||
| 
						 | 
					b3c4232251 | ||
| 
						 | 
					0c38df47b9 | ||
| 
						 | 
					bfd4005760 | ||
| 
						 | 
					fc9fad15a3 | ||
| 
						 | 
					b5091e88ad | ||
| 
						 | 
					2610808b6d | ||
| 
						 | 
					3cfee4f214 | ||
| 
						 | 
					70fd116eaf | ||
| 
						 | 
					62aac9c2f7 | ||
| 
						 | 
					afcf1c6c22 | ||
| 
						 | 
					f3f0365b13 | ||
| 
						 | 
					9bc12843fe | ||
| 
						 | 
					5e3ceddf69 | ||
| 
						 | 
					d377e23193 | ||
| 
						 | 
					e6dabd59ad | ||
| 
						 | 
					f0c7380132 | ||
| 
						 | 
					697ad4c568 | ||
| 
						 | 
					1efd9b384d | ||
| 
						 | 
					c1e71dc215 | ||
| 
						 | 
					d2c7d27d13 | ||
| 
						 | 
					1efd4c83f9 | ||
| 
						 | 
					0f7677423f | ||
| 
						 | 
					2a0b0e9f93 | ||
| 
						 | 
					faec60188f | ||
| 
						 | 
					709a688858 | ||
| 
						 | 
					2448ff8314 | ||
| 
						 | 
					311202102d | ||
| 
						 | 
					6812a22706 | ||
| 
						 | 
					fb727ce731 | ||
| 
						 | 
					6af499e352 | ||
| 
						 | 
					66ec33cf8e | ||
| 
						 | 
					f2694f3a74 | ||
| 
						 | 
					d069d0e444 | ||
| 
						 | 
					56ee61b17c | ||
| 
						 | 
					b945726017 | ||
| 
						 | 
					6f8a7d1070 | ||
| 
						 | 
					b032886c21 | ||
| 
						 | 
					988739d566 | ||
| 
						 | 
					8cd80801e8 | ||
| 
						 | 
					c3b7a1a6fb | ||
| 
						 | 
					9d0eff75ad | ||
| 
						 | 
					3ccb548b6d | ||
| 
						 | 
					eeedd53f32 | ||
| 
						 | 
					11a3b5b73c | ||
| 
						 | 
					eacc48e8c7 | ||
| 
						 | 
					5b72b4d353 | ||
| 
						 | 
					3f940ce8b8 | ||
| 
						 | 
					b2e3ea2334 | ||
| 
						 | 
					4637da8c32 | ||
| 
						 | 
					6b88c5ba86 | ||
| 
						 | 
					5fdb596214 | ||
| 
						 | 
					c989b02285 | ||
| 
						 | 
					c8301dc20b | ||
| 
						 | 
					ca4ea03828 | ||
| 
						 | 
					ae27c71d5a | ||
| 
						 | 
					6b60e5e786 | ||
| 
						 | 
					40413dfcc7 | ||
| 
						 | 
					07f5ad1daa | ||
| 
						 | 
					bfa7eced44 | ||
| 
						 | 
					b1d103b1f3 | ||
| 
						 | 
					04a4e8c8e6 | ||
| 
						 | 
					6b001cf861 | ||
| 
						 | 
					fa56879790 | ||
| 
						 | 
					41713d7719 | ||
| 
						 | 
					2e9d8f5520 | ||
| 
						 | 
					c8ea3fba5a | ||
| 
						 | 
					56af13047c | ||
| 
						 | 
					9b8b39f444 | ||
| 
						 | 
					e32a837fb2 | ||
| 
						 | 
					33dc865c30 | ||
| 
						 | 
					0d469e2966 | ||
| 
						 | 
					26a35ea43d | ||
| 
						 | 
					81ebef2e29 | ||
| 
						 | 
					1068cfb4b5 | ||
| 
						 | 
					73b1737dc7 | ||
| 
						 | 
					1d86f40fcd | ||
| 
						 | 
					59fb481138 | ||
| 
						 | 
					16e22b3b77 | ||
| 
						 | 
					aa701c6766 | ||
| 
						 | 
					ed4bbe97d1 | ||
| 
						 | 
					f05c437221 | ||
| 
						 | 
					483488a2fa | ||
| 
						 | 
					b36c4f2428 | ||
| 
						 | 
					924fddf698 | ||
| 
						 | 
					23e55e92ca | ||
| 
						 | 
					0cfdbfb91c | 
							
								
								
									
										168
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										168
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							@@ -7,9 +7,6 @@
 | 
			
		||||
[submodule "vendor/grammars/sublime-cirru"]
 | 
			
		||||
	path = vendor/grammars/sublime-cirru
 | 
			
		||||
	url = https://github.com/Cirru/sublime-cirru
 | 
			
		||||
[submodule "vendor/grammars/Sublime-Logos"]
 | 
			
		||||
	path = vendor/grammars/Sublime-Logos
 | 
			
		||||
	url = https://github.com/Cykey/Sublime-Logos
 | 
			
		||||
[submodule "vendor/grammars/SublimeBrainfuck"]
 | 
			
		||||
	path = vendor/grammars/SublimeBrainfuck
 | 
			
		||||
	url = https://github.com/Drako/SublimeBrainfuck
 | 
			
		||||
@@ -25,15 +22,9 @@
 | 
			
		||||
[submodule "vendor/grammars/Sublime-REBOL"]
 | 
			
		||||
	path = vendor/grammars/Sublime-REBOL
 | 
			
		||||
	url = https://github.com/Oldes/Sublime-REBOL
 | 
			
		||||
[submodule "vendor/grammars/autoitv3-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/autoitv3-tmbundle
 | 
			
		||||
	url = https://github.com/Red-Nova-Technologies/autoitv3-tmbundle
 | 
			
		||||
[submodule "vendor/grammars/Sublime-VimL"]
 | 
			
		||||
	path = vendor/grammars/Sublime-VimL
 | 
			
		||||
	url = https://github.com/SalGnt/Sublime-VimL
 | 
			
		||||
[submodule "vendor/grammars/boo-sublime"]
 | 
			
		||||
	path = vendor/grammars/boo-sublime
 | 
			
		||||
	url = https://github.com/Shammah/boo-sublime
 | 
			
		||||
[submodule "vendor/grammars/ColdFusion"]
 | 
			
		||||
	path = vendor/grammars/ColdFusion
 | 
			
		||||
	url = https://github.com/SublimeText/ColdFusion
 | 
			
		||||
@@ -88,9 +79,6 @@
 | 
			
		||||
[submodule "vendor/grammars/language-yaml"]
 | 
			
		||||
	path = vendor/grammars/language-yaml
 | 
			
		||||
	url = https://github.com/atom/language-yaml
 | 
			
		||||
[submodule "vendor/grammars/sublime-sourcepawn"]
 | 
			
		||||
	path = vendor/grammars/sublime-sourcepawn
 | 
			
		||||
	url = https://github.com/austinwagner/sublime-sourcepawn
 | 
			
		||||
[submodule "vendor/grammars/Sublime-Lasso"]
 | 
			
		||||
	path = vendor/grammars/Sublime-Lasso
 | 
			
		||||
	url = https://github.com/bfad/Sublime-Lasso
 | 
			
		||||
@@ -109,9 +97,6 @@
 | 
			
		||||
[submodule "vendor/grammars/sublime-MuPAD"]
 | 
			
		||||
	path = vendor/grammars/sublime-MuPAD
 | 
			
		||||
	url = https://github.com/ccreutzig/sublime-MuPAD
 | 
			
		||||
[submodule "vendor/grammars/nesC.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/nesC.tmbundle
 | 
			
		||||
	url = https://github.com/cdwilson/nesC.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/haxe-sublime-bundle"]
 | 
			
		||||
	path = vendor/grammars/haxe-sublime-bundle
 | 
			
		||||
	url = https://github.com/clemos/haxe-sublime-bundle
 | 
			
		||||
@@ -133,9 +118,6 @@
 | 
			
		||||
[submodule "vendor/grammars/fancy-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/fancy-tmbundle
 | 
			
		||||
	url = https://github.com/fancy-lang/fancy-tmbundle
 | 
			
		||||
[submodule "vendor/grammars/monkey.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/monkey.tmbundle
 | 
			
		||||
	url = https://github.com/gingerbeardman/monkey.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/dart-sublime-bundle"]
 | 
			
		||||
	path = vendor/grammars/dart-sublime-bundle
 | 
			
		||||
	url = https://github.com/guillermooo/dart-sublime-bundle
 | 
			
		||||
@@ -166,18 +148,12 @@
 | 
			
		||||
[submodule "vendor/grammars/fish-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/fish-tmbundle
 | 
			
		||||
	url = https://github.com/l15n/fish-tmbundle
 | 
			
		||||
[submodule "vendor/grammars/sublime-idris"]
 | 
			
		||||
	path = vendor/grammars/sublime-idris
 | 
			
		||||
	url = https://github.com/laughedelic/sublime-idris
 | 
			
		||||
[submodule "vendor/grammars/moonscript-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/moonscript-tmbundle
 | 
			
		||||
	url = https://github.com/leafo/moonscript-tmbundle
 | 
			
		||||
[submodule "vendor/grammars/Isabelle.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/Isabelle.tmbundle
 | 
			
		||||
	url = https://github.com/lsf37/Isabelle.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/x86-assembly-textmate-bundle"]
 | 
			
		||||
	path = vendor/grammars/x86-assembly-textmate-bundle
 | 
			
		||||
	url = https://github.com/lunixbochs/x86-assembly-textmate-bundle
 | 
			
		||||
[submodule "vendor/grammars/Alloy.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/Alloy.tmbundle
 | 
			
		||||
	url = https://github.com/macekond/Alloy.tmbundle
 | 
			
		||||
@@ -208,9 +184,6 @@
 | 
			
		||||
[submodule "vendor/grammars/Julia.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/Julia.tmbundle
 | 
			
		||||
	url = https://github.com/nanoant/Julia.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/assembly.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/assembly.tmbundle
 | 
			
		||||
	url = https://github.com/nanoant/assembly.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/ooc.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/ooc.tmbundle
 | 
			
		||||
	url = https://github.com/nilium/ooc.tmbundle
 | 
			
		||||
@@ -220,9 +193,6 @@
 | 
			
		||||
[submodule "vendor/grammars/sublime-tea"]
 | 
			
		||||
	path = vendor/grammars/sublime-tea
 | 
			
		||||
	url = https://github.com/pferruggiaro/sublime-tea
 | 
			
		||||
[submodule "vendor/grammars/puppet-textmate-bundle"]
 | 
			
		||||
	path = vendor/grammars/puppet-textmate-bundle
 | 
			
		||||
	url = https://github.com/puppet-textmate-bundle/puppet-textmate-bundle
 | 
			
		||||
[submodule "vendor/grammars/abap.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/abap.tmbundle
 | 
			
		||||
	url = https://github.com/pvl/abap.tmbundle
 | 
			
		||||
@@ -394,9 +364,6 @@
 | 
			
		||||
[submodule "vendor/grammars/r.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/r.tmbundle
 | 
			
		||||
	url = https://github.com/textmate/r.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/restructuredtext.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/restructuredtext.tmbundle
 | 
			
		||||
	url = https://github.com/textmate/restructuredtext.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/ruby-haml.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/ruby-haml.tmbundle
 | 
			
		||||
	url = https://github.com/textmate/ruby-haml.tmbundle
 | 
			
		||||
@@ -448,9 +415,6 @@
 | 
			
		||||
[submodule "vendor/grammars/llvm.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/llvm.tmbundle
 | 
			
		||||
	url = https://github.com/whitequark/llvm.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/sublime-nix"]
 | 
			
		||||
	path = vendor/grammars/sublime-nix
 | 
			
		||||
	url = https://github.com/wmertens/sublime-nix
 | 
			
		||||
[submodule "vendor/grammars/oz-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/oz-tmbundle
 | 
			
		||||
	url = https://github.com/eregon/oz-tmbundle
 | 
			
		||||
@@ -479,9 +443,6 @@
 | 
			
		||||
[submodule "vendor/grammars/Scalate.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/Scalate.tmbundle
 | 
			
		||||
	url = https://github.com/scalate/Scalate.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/Elm.tmLanguage"]
 | 
			
		||||
	path = vendor/grammars/Elm.tmLanguage
 | 
			
		||||
	url = https://github.com/deadfoxygrandpa/Elm.tmLanguage
 | 
			
		||||
[submodule "vendor/grammars/sublime-bsv"]
 | 
			
		||||
	path = vendor/grammars/sublime-bsv
 | 
			
		||||
	url = https://github.com/thotypous/sublime-bsv
 | 
			
		||||
@@ -509,24 +470,9 @@
 | 
			
		||||
[submodule "vendor/grammars/liquid.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/liquid.tmbundle
 | 
			
		||||
	url = https://github.com/bastilian/validcode-textmate-bundles
 | 
			
		||||
[submodule "vendor/grammars/ats.sublime"]
 | 
			
		||||
	path = vendor/grammars/ats.sublime
 | 
			
		||||
	url = https://github.com/steinwaywhw/ats-mode-sublimetext
 | 
			
		||||
[submodule "vendor/grammars/Modelica"]
 | 
			
		||||
	path = vendor/grammars/Modelica
 | 
			
		||||
	url = https://github.com/BorisChumichev/modelicaSublimeTextPackage
 | 
			
		||||
[submodule "vendor/grammars/sublime-apl"]
 | 
			
		||||
	path = vendor/grammars/sublime-apl
 | 
			
		||||
	url = https://github.com/StoneCypher/sublime-apl
 | 
			
		||||
[submodule "vendor/grammars/CLIPS-sublime"]
 | 
			
		||||
	path = vendor/grammars/CLIPS-sublime
 | 
			
		||||
	url = https://github.com/psicomante/CLIPS-sublime
 | 
			
		||||
[submodule "vendor/grammars/Creole"]
 | 
			
		||||
	path = vendor/grammars/Creole
 | 
			
		||||
	url = https://github.com/Siddley/Creole
 | 
			
		||||
[submodule "vendor/grammars/GDScript-sublime"]
 | 
			
		||||
	path = vendor/grammars/GDScript-sublime
 | 
			
		||||
	url = https://github.com/beefsack/GDScript-sublime
 | 
			
		||||
[submodule "vendor/grammars/sublime-golo"]
 | 
			
		||||
	path = vendor/grammars/sublime-golo
 | 
			
		||||
	url = https://github.com/TypeUnsafe/sublime-golo
 | 
			
		||||
@@ -539,9 +485,6 @@
 | 
			
		||||
[submodule "vendor/grammars/G-Code"]
 | 
			
		||||
	path = vendor/grammars/G-Code
 | 
			
		||||
	url = https://github.com/robotmaster/sublime-text-syntax-highlighting
 | 
			
		||||
[submodule "vendor/grammars/grace-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/grace-tmbundle
 | 
			
		||||
	url = https://github.com/zmthy/grace-tmbundle
 | 
			
		||||
[submodule "vendor/grammars/sublime-text-ox"]
 | 
			
		||||
	path = vendor/grammars/sublime-text-ox
 | 
			
		||||
	url = https://github.com/andreashetland/sublime-text-ox
 | 
			
		||||
@@ -551,9 +494,6 @@
 | 
			
		||||
[submodule "vendor/grammars/ec.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/ec.tmbundle
 | 
			
		||||
	url = https://github.com/ecere/ec.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/InnoSetup"]
 | 
			
		||||
	path = vendor/grammars/InnoSetup
 | 
			
		||||
	url = https://github.com/idleberg/InnoSetup-Sublime-Text
 | 
			
		||||
[submodule "vendor/grammars/gap-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/gap-tmbundle
 | 
			
		||||
	url = https://github.com/dhowden/gap-tmbundle
 | 
			
		||||
@@ -575,9 +515,6 @@
 | 
			
		||||
[submodule "vendor/grammars/SublimeClarion"]
 | 
			
		||||
	path = vendor/grammars/SublimeClarion
 | 
			
		||||
	url = https://github.com/fushnisoft/SublimeClarion
 | 
			
		||||
[submodule "vendor/grammars/oracle.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/oracle.tmbundle
 | 
			
		||||
	url = https://github.com/mulander/oracle.tmbundle.git
 | 
			
		||||
[submodule "vendor/grammars/BrightScript.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/BrightScript.tmbundle
 | 
			
		||||
	url = https://github.com/cmink/BrightScript.tmbundle
 | 
			
		||||
@@ -587,18 +524,12 @@
 | 
			
		||||
[submodule "vendor/grammars/asciidoc.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/asciidoc.tmbundle
 | 
			
		||||
	url = https://github.com/zuckschwerdt/asciidoc.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/sublime-text-pig-latin"]
 | 
			
		||||
	path = vendor/grammars/sublime-text-pig-latin
 | 
			
		||||
	url = https://github.com/goblindegook/sublime-text-pig-latin
 | 
			
		||||
[submodule "vendor/grammars/Lean.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/Lean.tmbundle
 | 
			
		||||
	url = https://github.com/leanprover/Lean.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/ampl"]
 | 
			
		||||
	path = vendor/grammars/ampl
 | 
			
		||||
	url = https://github.com/ampl/sublime-ampl
 | 
			
		||||
[submodule "vendor/grammars/openscad.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/openscad.tmbundle
 | 
			
		||||
	url = https://github.com/tbuser/openscad.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/sublime-varnish"]
 | 
			
		||||
	path = vendor/grammars/sublime-varnish
 | 
			
		||||
	url = https://github.com/brandonwamboldt/sublime-varnish
 | 
			
		||||
@@ -650,6 +581,9 @@
 | 
			
		||||
[submodule "vendor/grammars/language-ncl"]
 | 
			
		||||
	path = vendor/grammars/language-ncl
 | 
			
		||||
	url = https://github.com/rpavlick/language-ncl.git
 | 
			
		||||
[submodule "vendor/grammars/pawn-sublime-language"]
 | 
			
		||||
	path = vendor/grammars/pawn-sublime-language
 | 
			
		||||
	url = https://github.com/Southclaw/pawn-sublime-language.git
 | 
			
		||||
[submodule "vendor/grammars/atom-language-purescript"]
 | 
			
		||||
	path = vendor/grammars/atom-language-purescript
 | 
			
		||||
	url = https://github.com/purescript-contrib/atom-language-purescript
 | 
			
		||||
@@ -716,3 +650,99 @@
 | 
			
		||||
[submodule "vendor/grammars/language-povray"]
 | 
			
		||||
	path = vendor/grammars/language-povray
 | 
			
		||||
	url = https://github.com/c-lipka/language-povray
 | 
			
		||||
[submodule "vendor/grammars/sublime-terra"]
 | 
			
		||||
	path = vendor/grammars/sublime-terra
 | 
			
		||||
	url = https://github.com/pyk/sublime-terra
 | 
			
		||||
[submodule "vendor/grammars/SublimePuppet"]
 | 
			
		||||
	path = vendor/grammars/SublimePuppet
 | 
			
		||||
	url = https://github.com/russCloak/SublimePuppet
 | 
			
		||||
[submodule "vendor/grammars/sublimeassembly"]
 | 
			
		||||
	path = vendor/grammars/sublimeassembly
 | 
			
		||||
	url = https://github.com/Nessphoro/sublimeassembly
 | 
			
		||||
[submodule "vendor/grammars/monkey"]
 | 
			
		||||
	path = vendor/grammars/monkey
 | 
			
		||||
	url = https://github.com/gingerbeardman/monkey.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/assembly"]
 | 
			
		||||
	path = vendor/grammars/assembly
 | 
			
		||||
	url = https://github.com/nanoant/assembly.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/boo"]
 | 
			
		||||
	path = vendor/grammars/boo
 | 
			
		||||
	url = https://github.com/Shammah/boo-sublime
 | 
			
		||||
[submodule "vendor/grammars/logos"]
 | 
			
		||||
	path = vendor/grammars/logos
 | 
			
		||||
	url = https://github.com/Cykey/Sublime-Logos
 | 
			
		||||
[submodule "vendor/grammars/pig-latin"]
 | 
			
		||||
	path = vendor/grammars/pig-latin
 | 
			
		||||
	url = https://github.com/goblindegook/sublime-text-pig-latin
 | 
			
		||||
[submodule "vendor/grammars/sourcepawn"]
 | 
			
		||||
path = vendor/grammars/sourcepawn
 | 
			
		||||
url = https://github.com/austinwagner/sublime-sourcepawn
 | 
			
		||||
[submodule "vendor/grammars/gdscript"]
 | 
			
		||||
	path = vendor/grammars/gdscript
 | 
			
		||||
	url = https://github.com/beefsack/GDScript-sublime
 | 
			
		||||
[submodule "vendor/grammars/nesC"]
 | 
			
		||||
	path = vendor/grammars/nesC
 | 
			
		||||
	url = https://github.com/cdwilson/nesC.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/ats"]
 | 
			
		||||
	path = vendor/grammars/ats
 | 
			
		||||
	url = https://github.com/steinwaywhw/ats-mode-sublimetext
 | 
			
		||||
[submodule "vendor/grammars/grace"]
 | 
			
		||||
	path = vendor/grammars/grace
 | 
			
		||||
	url = https://github.com/zmthy/grace-tmbundle
 | 
			
		||||
[submodule "vendor/grammars/ejs-tmbundle"]
 | 
			
		||||
	path = vendor/grammars/ejs-tmbundle
 | 
			
		||||
	url = https://github.com/gregory-m/ejs-tmbundle
 | 
			
		||||
[submodule "vendor/grammars/nix"]
 | 
			
		||||
	path = vendor/grammars/nix
 | 
			
		||||
	url = https://github.com/wmertens/sublime-nix
 | 
			
		||||
[submodule "vendor/grammars/idris"]
 | 
			
		||||
	path = vendor/grammars/idris
 | 
			
		||||
	url = https://github.com/idris-hackers/idris-sublime.git
 | 
			
		||||
[submodule "vendor/grammars/atomic-dreams"]
 | 
			
		||||
	path = vendor/grammars/atomic-dreams
 | 
			
		||||
	url = https://github.com/PJB3005/atomic-dreams
 | 
			
		||||
[submodule "vendor/grammars/language-apl"]
 | 
			
		||||
	path = vendor/grammars/language-apl
 | 
			
		||||
	url = https://github.com/Alhadis/language-apl.git
 | 
			
		||||
[submodule "vendor/grammars/language-graphql"]
 | 
			
		||||
	path = vendor/grammars/language-graphql
 | 
			
		||||
	url = https://github.com/rmosolgo/language-graphql
 | 
			
		||||
[submodule "vendor/grammars/language-toc-wow"]
 | 
			
		||||
	path = vendor/grammars/language-toc-wow
 | 
			
		||||
	url = https://github.com/nebularg/language-toc-wow
 | 
			
		||||
[submodule "vendor/grammars/sublime-autoit"]
 | 
			
		||||
	path = vendor/grammars/sublime-autoit
 | 
			
		||||
	url = https://github.com/AutoIt/SublimeAutoItScript
 | 
			
		||||
[submodule "vendor/grammars/TLA"]
 | 
			
		||||
	path = vendor/grammars/TLA
 | 
			
		||||
	url = https://github.com/agentultra/TLAGrammar
 | 
			
		||||
[submodule "vendor/grammars/sublime-clips"]
 | 
			
		||||
	path = vendor/grammars/sublime-clips
 | 
			
		||||
	url = https://github.com/psicomante/CLIPS-sublime
 | 
			
		||||
[submodule "vendor/grammars/creole"]
 | 
			
		||||
	path = vendor/grammars/creole
 | 
			
		||||
	url = https://github.com/Siddley/Creole
 | 
			
		||||
[submodule "vendor/grammars/language-csound"]
 | 
			
		||||
	path = vendor/grammars/language-csound
 | 
			
		||||
	url = https://github.com/nwhetsell/language-csound
 | 
			
		||||
[submodule "vendor/grammars/language-wavefront"]
 | 
			
		||||
	path = vendor/grammars/language-wavefront
 | 
			
		||||
	url = https://github.com/Alhadis/language-wavefront
 | 
			
		||||
[submodule "vendor/grammars/nu.tmbundle"]
 | 
			
		||||
	path = vendor/grammars/nu.tmbundle
 | 
			
		||||
	url = https://github.com/jsallis/nu.tmbundle
 | 
			
		||||
[submodule "vendor/grammars/Elm"]
 | 
			
		||||
	path = vendor/grammars/Elm
 | 
			
		||||
	url = https://github.com/elm-community/Elm.tmLanguage
 | 
			
		||||
[submodule "vendor/grammars/language-restructuredtext"]
 | 
			
		||||
	path = vendor/grammars/language-restructuredtext
 | 
			
		||||
	url = https://github.com/Lukasa/language-restructuredtext
 | 
			
		||||
[submodule "vendor/grammars/atom-language-clean"]
 | 
			
		||||
	path = vendor/grammars/atom-language-clean
 | 
			
		||||
	url = https://github.com/timjs/atom-language-clean.git
 | 
			
		||||
[submodule "vendor/grammars/language-turing"]
 | 
			
		||||
	path = vendor/grammars/language-turing
 | 
			
		||||
	url = https://github.com/Alhadis/language-turing
 | 
			
		||||
[submodule "vendor/grammars/atom-language-srt"]
 | 
			
		||||
	path = vendor/grammars/atom-language-srt
 | 
			
		||||
	url = https://github.com/314eter/atom-language-srt
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,9 @@ addons:
 | 
			
		||||
    - libicu-dev
 | 
			
		||||
    - libicu48
 | 
			
		||||
before_install: script/travis/before_install
 | 
			
		||||
script:
 | 
			
		||||
  - bundle exec rake
 | 
			
		||||
  - script/licensed verify
 | 
			
		||||
rvm:
 | 
			
		||||
  - 2.0.0
 | 
			
		||||
  - 2.1
 | 
			
		||||
 
 | 
			
		||||
@@ -1,8 +1,6 @@
 | 
			
		||||
# Contributing
 | 
			
		||||
 | 
			
		||||
[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.
 | 
			
		||||
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 [Contributor Covenant Code of Conduct](http://contributor-covenant.org/). By participating, you are expected to uphold this code.
 | 
			
		||||
 | 
			
		||||
The majority of contributions won't need to touch any Ruby code at all.
 | 
			
		||||
 | 
			
		||||
@@ -33,6 +31,7 @@ To add support for a new language:
 | 
			
		||||
0. Add a grammar for your language. Please only add grammars that have a license that permits redistribution.
 | 
			
		||||
  0. Add your grammar as a submodule: `git submodule add https://github.com/JaneSmith/MyGrammar vendor/grammars/MyGrammar`.
 | 
			
		||||
  0. Add your grammar to [`grammars.yml`][grammars] by running `script/convert-grammars --add vendor/grammars/MyGrammar`.
 | 
			
		||||
  0. Download the license for the grammar: `script/licensed`. Be careful to only commit the file for the new grammar, as this script may update licenses for other grammars as well.
 | 
			
		||||
0. Add samples for your language to the [samples directory][samples] in the correct subdirectory.
 | 
			
		||||
0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage.
 | 
			
		||||
 | 
			
		||||
@@ -78,8 +77,20 @@ Sometimes getting the tests running can be too much work, especially if you don'
 | 
			
		||||
 | 
			
		||||
Here's our current build status: [](https://travis-ci.org/github/linguist)
 | 
			
		||||
 | 
			
		||||
## Maintainers
 | 
			
		||||
 | 
			
		||||
## Releasing
 | 
			
		||||
Linguist is maintained with :heart: by:
 | 
			
		||||
 | 
			
		||||
- @arfon (GitHub Staff)
 | 
			
		||||
- @larsbrinkhoff
 | 
			
		||||
- @pchaigno
 | 
			
		||||
 
 | 
			
		||||
As Linguist is a production dependency for GitHub we have a couple of workflow restrictions:
 | 
			
		||||
 | 
			
		||||
- Anyone with commit rights can merge Pull Requests provided that there is a :+1: from a GitHub member of staff
 | 
			
		||||
- Releases are performed by GitHub staff so we can ensure GitHub.com always stays up to date with the latest release of Linguist and there are no regressions in production.
 | 
			
		||||
 | 
			
		||||
### Releasing
 | 
			
		||||
 | 
			
		||||
If you are the current maintainer of this gem:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										1
									
								
								Gemfile
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								Gemfile
									
									
									
									
									
								
							@@ -1,4 +1,3 @@
 | 
			
		||||
source 'https://rubygems.org'
 | 
			
		||||
gemspec :name => "github-linguist"
 | 
			
		||||
gemspec :name => "github-linguist-grammars"
 | 
			
		||||
gem 'byebug' if RUBY_VERSION >= '2.0'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										19
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								README.md
									
									
									
									
									
								
							@@ -43,7 +43,7 @@ special-vendored-path/* linguist-vendored
 | 
			
		||||
jquery.js linguist-vendored=false
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Similar to vendored files, Linguist excludes documentation files from your project's language stats. (Unlike vendored files, documentation files are displayed in diffs on github.com.) [lib/linguist/documentation.yml](lib/linguist/documentation.yml) lists common documentation paths and excludes them from the language statistics for your repository.
 | 
			
		||||
Just like vendored files, Linguist excludes documentation files from your project's language stats. [lib/linguist/documentation.yml](lib/linguist/documentation.yml) lists common documentation paths and excludes them from the language statistics for your repository.
 | 
			
		||||
 | 
			
		||||
Use the `linguist-documentation` attribute to mark or unmark paths as documentation.
 | 
			
		||||
 | 
			
		||||
@@ -53,6 +53,16 @@ project-docs/* linguist-documentation
 | 
			
		||||
docs/formatter.rb linguist-documentation=false
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
#### Generated file detection
 | 
			
		||||
 | 
			
		||||
Not all plain text files are true source files. Generated files like minified js and compiled CoffeeScript can be detected and excluded from language stats. As an added bonus, unlike vendored and documentation files, these files are suppressed in diffs.
 | 
			
		||||
 | 
			
		||||
```ruby
 | 
			
		||||
Linguist::FileBlob.new("underscore.min.js").generated? # => true
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/master/lib/linguist/generated.rb).
 | 
			
		||||
 | 
			
		||||
### Using Emacs or Vim modelines
 | 
			
		||||
 | 
			
		||||
Alternatively, you can use Vim or Emacs style modelines to set the language for a single file. Modelines can be placed anywhere within a file and are respected when determining how to syntax-highlight a file on GitHub.com
 | 
			
		||||
@@ -114,4 +124,9 @@ lib/linguist.rb
 | 
			
		||||
 | 
			
		||||
Please check out our [contributing guidelines](CONTRIBUTING.md).
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
## License
 | 
			
		||||
 | 
			
		||||
The language grammars included in this gem are covered by their repositories'
 | 
			
		||||
respective licenses. `grammars.yml` specifies the repository for each grammar.
 | 
			
		||||
 | 
			
		||||
All other files are covered by the MIT license, see `LICENSE`.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								Rakefile
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								Rakefile
									
									
									
									
									
								
							@@ -40,18 +40,14 @@ task :samples do
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
task :build_gem => :samples do
 | 
			
		||||
  rm_rf "grammars"
 | 
			
		||||
  sh "script/convert-grammars"
 | 
			
		||||
  languages = YAML.load_file("lib/linguist/languages.yml")
 | 
			
		||||
  File.write("lib/linguist/languages.json", Yajl.dump(languages))
 | 
			
		||||
  `gem build github-linguist.gemspec`
 | 
			
		||||
  File.delete("lib/linguist/languages.json")
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
task :build_grammars_gem do
 | 
			
		||||
  rm_rf "grammars"
 | 
			
		||||
  sh "script/convert-grammars"
 | 
			
		||||
  sh "gem", "build", "github-linguist-grammars.gemspec"
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
namespace :benchmark do
 | 
			
		||||
  benchmark_path = "benchmark/results"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -111,7 +111,7 @@ def git_linguist(args)
 | 
			
		||||
  parser.parse!(args)
 | 
			
		||||
 | 
			
		||||
  git_dir = `git rev-parse --git-dir`.strip
 | 
			
		||||
  raise "git-linguist must be ran in a Git repository" unless $?.success?
 | 
			
		||||
  raise "git-linguist must be ran in a Git repository (#{Dir.pwd})" unless $?.success?
 | 
			
		||||
  wrapper = GitLinguist.new(git_dir, commit, incremental)
 | 
			
		||||
 | 
			
		||||
  case args.pop
 | 
			
		||||
 
 | 
			
		||||
@@ -1,14 +0,0 @@
 | 
			
		||||
require File.expand_path('../lib/linguist/version', __FILE__)
 | 
			
		||||
 | 
			
		||||
Gem::Specification.new do |s|
 | 
			
		||||
  s.name    = 'github-linguist-grammars'
 | 
			
		||||
  s.version = Linguist::VERSION
 | 
			
		||||
  s.summary = "Language grammars for use with github-linguist"
 | 
			
		||||
 | 
			
		||||
  s.authors  = "GitHub"
 | 
			
		||||
  s.homepage = "https://github.com/github/linguist"
 | 
			
		||||
 | 
			
		||||
  s.files = ['lib/linguist/grammars.rb'] + Dir['grammars/*']
 | 
			
		||||
 | 
			
		||||
  s.add_development_dependency 'plist', '~>3.1'
 | 
			
		||||
end
 | 
			
		||||
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
 | 
			
		||||
  s.homepage = "https://github.com/github/linguist"
 | 
			
		||||
  s.license  = "MIT"
 | 
			
		||||
 | 
			
		||||
  s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + ['LICENSE']
 | 
			
		||||
  s.files = Dir['lib/**/*'] + Dir['grammars/*'] + ['LICENSE']
 | 
			
		||||
  s.executables = ['linguist', 'git-linguist']
 | 
			
		||||
 | 
			
		||||
  s.add_dependency 'charlock_holmes', '~> 0.7.3'
 | 
			
		||||
@@ -20,10 +20,11 @@ Gem::Specification.new do |s|
 | 
			
		||||
 | 
			
		||||
  s.add_development_dependency 'minitest', '>= 5.0'
 | 
			
		||||
  s.add_development_dependency 'mocha'
 | 
			
		||||
  s.add_development_dependency 'plist', '~>3.1'
 | 
			
		||||
  s.add_development_dependency 'pry'
 | 
			
		||||
  s.add_development_dependency 'rake'
 | 
			
		||||
  s.add_development_dependency 'yajl-ruby'
 | 
			
		||||
  s.add_development_dependency 'color-proximity', '~> 0.2.1'
 | 
			
		||||
  s.add_development_dependency 'licensee', '6.0.0b1'
 | 
			
		||||
  s.add_development_dependency 'licensed'
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										111
									
								
								grammars.yml
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								grammars.yml
									
									
									
									
									
								
							@@ -18,8 +18,6 @@ http://svn.textmate.org/trunk/Review/Bundles/XQuery.tmbundle:
 | 
			
		||||
https://bitbucket.org/Clams/sublimesystemverilog/get/default.tar.gz:
 | 
			
		||||
- source.systemverilog
 | 
			
		||||
- source.ucfconstraints
 | 
			
		||||
https://fan.googlecode.com/hg-history/Build%201.0.55/adm/tools/textmate/Fan.tmbundle/Syntaxes/Fan.tmLanguage:
 | 
			
		||||
- source.fan
 | 
			
		||||
vendor/grammars/Agda.tmbundle:
 | 
			
		||||
- source.agda
 | 
			
		||||
vendor/grammars/Alloy.tmbundle:
 | 
			
		||||
@@ -29,18 +27,14 @@ vendor/grammars/AutoHotkey/:
 | 
			
		||||
vendor/grammars/BrightScript.tmbundle/:
 | 
			
		||||
- source.brightauthorproject
 | 
			
		||||
- source.brightscript
 | 
			
		||||
vendor/grammars/CLIPS-sublime:
 | 
			
		||||
- source.clips
 | 
			
		||||
vendor/grammars/ColdFusion:
 | 
			
		||||
- source.cfscript
 | 
			
		||||
- source.cfscript.cfc
 | 
			
		||||
- text.cfml.basic
 | 
			
		||||
- text.html.cfm
 | 
			
		||||
vendor/grammars/Creole:
 | 
			
		||||
- text.html.creole
 | 
			
		||||
vendor/grammars/Docker.tmbundle:
 | 
			
		||||
- source.dockerfile
 | 
			
		||||
vendor/grammars/Elm.tmLanguage:
 | 
			
		||||
vendor/grammars/Elm/:
 | 
			
		||||
- source.elm
 | 
			
		||||
vendor/grammars/FreeMarker.tmbundle:
 | 
			
		||||
- text.html.ftl
 | 
			
		||||
@@ -50,14 +44,10 @@ vendor/grammars/G-Code/:
 | 
			
		||||
- source.MOD
 | 
			
		||||
- source.apt
 | 
			
		||||
- source.gcode
 | 
			
		||||
vendor/grammars/GDScript-sublime/:
 | 
			
		||||
- source.gdscript
 | 
			
		||||
vendor/grammars/Handlebars:
 | 
			
		||||
- text.html.handlebars
 | 
			
		||||
vendor/grammars/IDL-Syntax:
 | 
			
		||||
- source.webidl
 | 
			
		||||
vendor/grammars/InnoSetup/:
 | 
			
		||||
- source.inno
 | 
			
		||||
vendor/grammars/Isabelle.tmbundle:
 | 
			
		||||
- source.isabelle.root
 | 
			
		||||
- source.isabelle.theory
 | 
			
		||||
@@ -108,8 +98,6 @@ vendor/grammars/Sublime-HTTP:
 | 
			
		||||
- source.httpspec
 | 
			
		||||
vendor/grammars/Sublime-Lasso:
 | 
			
		||||
- file.lasso
 | 
			
		||||
vendor/grammars/Sublime-Logos:
 | 
			
		||||
- source.logos
 | 
			
		||||
vendor/grammars/Sublime-Loom:
 | 
			
		||||
- source.loomscript
 | 
			
		||||
vendor/grammars/Sublime-Modula-2/:
 | 
			
		||||
@@ -134,11 +122,13 @@ vendor/grammars/SublimeBrainfuck:
 | 
			
		||||
vendor/grammars/SublimeClarion/:
 | 
			
		||||
- source.clarion
 | 
			
		||||
vendor/grammars/SublimePapyrus/:
 | 
			
		||||
- source.compiled-papyrus
 | 
			
		||||
- source.papyrus
 | 
			
		||||
- source.papyrus-assembly
 | 
			
		||||
- source.papyrus.skyrim
 | 
			
		||||
vendor/grammars/SublimePuppet/:
 | 
			
		||||
- source.puppet
 | 
			
		||||
vendor/grammars/SublimeXtend:
 | 
			
		||||
- source.xtend
 | 
			
		||||
vendor/grammars/TLA:
 | 
			
		||||
- source.tla
 | 
			
		||||
vendor/grammars/TXL/:
 | 
			
		||||
- source.txl
 | 
			
		||||
vendor/grammars/Textmate-Gosu-Bundle:
 | 
			
		||||
@@ -178,7 +168,7 @@ vendor/grammars/asciidoc.tmbundle/:
 | 
			
		||||
vendor/grammars/asp.tmbundle:
 | 
			
		||||
- source.asp
 | 
			
		||||
- text.html.asp
 | 
			
		||||
vendor/grammars/assembly.tmbundle:
 | 
			
		||||
vendor/grammars/assembly/:
 | 
			
		||||
- objdump.x86asm
 | 
			
		||||
- source.x86asm
 | 
			
		||||
vendor/grammars/atom-fsharp/:
 | 
			
		||||
@@ -186,22 +176,27 @@ vendor/grammars/atom-fsharp/:
 | 
			
		||||
- source.fsharp.fsi
 | 
			
		||||
- source.fsharp.fsl
 | 
			
		||||
- source.fsharp.fsx
 | 
			
		||||
vendor/grammars/atom-language-clean:
 | 
			
		||||
- source.clean
 | 
			
		||||
vendor/grammars/atom-language-purescript/:
 | 
			
		||||
- source.purescript
 | 
			
		||||
vendor/grammars/atom-language-srt:
 | 
			
		||||
- text.srt
 | 
			
		||||
vendor/grammars/atom-language-stan/:
 | 
			
		||||
- source.stan
 | 
			
		||||
vendor/grammars/atom-salt:
 | 
			
		||||
- source.python.salt
 | 
			
		||||
- source.yaml.salt
 | 
			
		||||
vendor/grammars/ats.sublime:
 | 
			
		||||
vendor/grammars/atomic-dreams/:
 | 
			
		||||
- source.dm
 | 
			
		||||
- source.dmf
 | 
			
		||||
vendor/grammars/ats:
 | 
			
		||||
- source.ats
 | 
			
		||||
vendor/grammars/autoitv3-tmbundle:
 | 
			
		||||
- source.autoit.3
 | 
			
		||||
vendor/grammars/awk-sublime:
 | 
			
		||||
- source.awk
 | 
			
		||||
vendor/grammars/bison.tmbundle:
 | 
			
		||||
- source.bison
 | 
			
		||||
vendor/grammars/boo-sublime:
 | 
			
		||||
vendor/grammars/boo/:
 | 
			
		||||
- source.boo
 | 
			
		||||
vendor/grammars/bro-sublime:
 | 
			
		||||
- source.bro
 | 
			
		||||
@@ -226,6 +221,8 @@ vendor/grammars/cool-tmbundle:
 | 
			
		||||
vendor/grammars/cpp-qt.tmbundle:
 | 
			
		||||
- source.c++.qt
 | 
			
		||||
- source.qmake
 | 
			
		||||
vendor/grammars/creole/:
 | 
			
		||||
- text.html.creole
 | 
			
		||||
vendor/grammars/css.tmbundle:
 | 
			
		||||
- source.css
 | 
			
		||||
vendor/grammars/cucumber-tmbundle:
 | 
			
		||||
@@ -252,6 +249,8 @@ vendor/grammars/ec.tmbundle/:
 | 
			
		||||
- source.c.ec
 | 
			
		||||
vendor/grammars/eiffel.tmbundle:
 | 
			
		||||
- source.eiffel
 | 
			
		||||
vendor/grammars/ejs-tmbundle:
 | 
			
		||||
- text.html.js
 | 
			
		||||
vendor/grammars/elixir-tmbundle:
 | 
			
		||||
- source.elixir
 | 
			
		||||
- text.elixir
 | 
			
		||||
@@ -271,13 +270,15 @@ vendor/grammars/fortran.tmbundle:
 | 
			
		||||
- source.fortran.modern
 | 
			
		||||
vendor/grammars/gap-tmbundle/:
 | 
			
		||||
- source.gap
 | 
			
		||||
vendor/grammars/gdscript/:
 | 
			
		||||
- source.gdscript
 | 
			
		||||
vendor/grammars/gettext.tmbundle:
 | 
			
		||||
- source.po
 | 
			
		||||
vendor/grammars/gnuplot-tmbundle:
 | 
			
		||||
- source.gnuplot
 | 
			
		||||
vendor/grammars/go-tmbundle:
 | 
			
		||||
- source.go
 | 
			
		||||
vendor/grammars/grace-tmbundle/:
 | 
			
		||||
vendor/grammars/grace:
 | 
			
		||||
- source.grace
 | 
			
		||||
vendor/grammars/gradle.tmbundle:
 | 
			
		||||
- source.groovy.gradle
 | 
			
		||||
@@ -300,6 +301,8 @@ vendor/grammars/idl.tmbundle:
 | 
			
		||||
- source.idl
 | 
			
		||||
- source.idl-dlm
 | 
			
		||||
- text.idl-idldoc
 | 
			
		||||
vendor/grammars/idris/:
 | 
			
		||||
- source.idris
 | 
			
		||||
vendor/grammars/ini.tmbundle:
 | 
			
		||||
- source.ini
 | 
			
		||||
vendor/grammars/io.tmbundle:
 | 
			
		||||
@@ -324,6 +327,8 @@ vendor/grammars/json.tmbundle:
 | 
			
		||||
- source.json
 | 
			
		||||
vendor/grammars/kotlin-sublime-package:
 | 
			
		||||
- source.Kotlin
 | 
			
		||||
vendor/grammars/language-apl:
 | 
			
		||||
- source.apl
 | 
			
		||||
vendor/grammars/language-babel/:
 | 
			
		||||
- source.js.jsx
 | 
			
		||||
- source.regexp.babel
 | 
			
		||||
@@ -336,13 +341,20 @@ vendor/grammars/language-coffee-script:
 | 
			
		||||
- source.litcoffee
 | 
			
		||||
vendor/grammars/language-crystal:
 | 
			
		||||
- source.crystal
 | 
			
		||||
- text.html.ecr
 | 
			
		||||
vendor/grammars/language-csharp:
 | 
			
		||||
- source.cake
 | 
			
		||||
- source.cs
 | 
			
		||||
- source.csx
 | 
			
		||||
- source.nant-build
 | 
			
		||||
vendor/grammars/language-csound:
 | 
			
		||||
- source.csound
 | 
			
		||||
- source.csound-document
 | 
			
		||||
- source.csound-score
 | 
			
		||||
vendor/grammars/language-gfm:
 | 
			
		||||
- source.gfm
 | 
			
		||||
vendor/grammars/language-graphql:
 | 
			
		||||
- source.graphql
 | 
			
		||||
vendor/grammars/language-hy:
 | 
			
		||||
- source.hy
 | 
			
		||||
vendor/grammars/language-inform7:
 | 
			
		||||
@@ -367,11 +379,20 @@ vendor/grammars/language-python:
 | 
			
		||||
- text.python.traceback
 | 
			
		||||
vendor/grammars/language-renpy:
 | 
			
		||||
- source.renpy
 | 
			
		||||
vendor/grammars/language-restructuredtext:
 | 
			
		||||
- text.restructuredtext
 | 
			
		||||
vendor/grammars/language-shellscript:
 | 
			
		||||
- source.shell
 | 
			
		||||
- text.shell-session
 | 
			
		||||
vendor/grammars/language-supercollider:
 | 
			
		||||
- source.supercollider
 | 
			
		||||
vendor/grammars/language-toc-wow:
 | 
			
		||||
- source.toc
 | 
			
		||||
vendor/grammars/language-turing:
 | 
			
		||||
- source.turing
 | 
			
		||||
vendor/grammars/language-wavefront:
 | 
			
		||||
- source.wavefront.mtl
 | 
			
		||||
- source.wavefront.obj
 | 
			
		||||
vendor/grammars/language-xbase:
 | 
			
		||||
- source.harbour
 | 
			
		||||
vendor/grammars/language-yaml:
 | 
			
		||||
@@ -393,6 +414,8 @@ vendor/grammars/lisp.tmbundle:
 | 
			
		||||
- source.lisp
 | 
			
		||||
vendor/grammars/llvm.tmbundle:
 | 
			
		||||
- source.llvm
 | 
			
		||||
vendor/grammars/logos:
 | 
			
		||||
- source.logos
 | 
			
		||||
vendor/grammars/logtalk.tmbundle:
 | 
			
		||||
- source.logtalk
 | 
			
		||||
vendor/grammars/lua.tmbundle:
 | 
			
		||||
@@ -412,16 +435,20 @@ vendor/grammars/mediawiki.tmbundle/:
 | 
			
		||||
- text.html.mediawiki
 | 
			
		||||
vendor/grammars/mercury-tmlanguage:
 | 
			
		||||
- source.mercury
 | 
			
		||||
vendor/grammars/monkey.tmbundle:
 | 
			
		||||
vendor/grammars/monkey/:
 | 
			
		||||
- source.monkey
 | 
			
		||||
vendor/grammars/moonscript-tmbundle:
 | 
			
		||||
- source.moonscript
 | 
			
		||||
vendor/grammars/nemerle.tmbundle:
 | 
			
		||||
- source.nemerle
 | 
			
		||||
vendor/grammars/nesC.tmbundle:
 | 
			
		||||
vendor/grammars/nesC:
 | 
			
		||||
- source.nesc
 | 
			
		||||
vendor/grammars/ninja.tmbundle:
 | 
			
		||||
- source.ninja
 | 
			
		||||
vendor/grammars/nix:
 | 
			
		||||
- source.nix
 | 
			
		||||
vendor/grammars/nu.tmbundle:
 | 
			
		||||
- source.nu
 | 
			
		||||
vendor/grammars/objective-c.tmbundle:
 | 
			
		||||
- source.objc
 | 
			
		||||
- source.objc++
 | 
			
		||||
@@ -436,14 +463,12 @@ vendor/grammars/ooc.tmbundle:
 | 
			
		||||
- source.ooc
 | 
			
		||||
vendor/grammars/opa.tmbundle:
 | 
			
		||||
- source.opa
 | 
			
		||||
vendor/grammars/openscad.tmbundle/:
 | 
			
		||||
- source.scad
 | 
			
		||||
vendor/grammars/oracle.tmbundle:
 | 
			
		||||
- source.plsql.oracle
 | 
			
		||||
vendor/grammars/oz-tmbundle/Syntaxes/Oz.tmLanguage:
 | 
			
		||||
- source.oz
 | 
			
		||||
vendor/grammars/pascal.tmbundle:
 | 
			
		||||
- source.pascal
 | 
			
		||||
vendor/grammars/pawn-sublime-language/:
 | 
			
		||||
- source.pawn
 | 
			
		||||
vendor/grammars/perl.tmbundle/:
 | 
			
		||||
- source.perl
 | 
			
		||||
- source.perl.6
 | 
			
		||||
@@ -455,6 +480,8 @@ vendor/grammars/php-smarty.tmbundle:
 | 
			
		||||
- text.html.smarty
 | 
			
		||||
vendor/grammars/php.tmbundle:
 | 
			
		||||
- text.html.php
 | 
			
		||||
vendor/grammars/pig-latin/:
 | 
			
		||||
- source.pig_latin
 | 
			
		||||
vendor/grammars/pike-textmate:
 | 
			
		||||
- source.pike
 | 
			
		||||
vendor/grammars/postscript.tmbundle:
 | 
			
		||||
@@ -465,16 +492,12 @@ vendor/grammars/processing.tmbundle:
 | 
			
		||||
- source.processing
 | 
			
		||||
vendor/grammars/protobuf-tmbundle:
 | 
			
		||||
- source.protobuf
 | 
			
		||||
vendor/grammars/puppet-textmate-bundle:
 | 
			
		||||
- source.puppet
 | 
			
		||||
vendor/grammars/python-django.tmbundle:
 | 
			
		||||
- source.python.django
 | 
			
		||||
- text.html.django
 | 
			
		||||
vendor/grammars/r.tmbundle:
 | 
			
		||||
- source.r
 | 
			
		||||
- text.tex.latex.rd
 | 
			
		||||
vendor/grammars/restructuredtext.tmbundle:
 | 
			
		||||
- text.restructuredtext
 | 
			
		||||
vendor/grammars/ruby-haml.tmbundle:
 | 
			
		||||
- text.haml
 | 
			
		||||
vendor/grammars/ruby-slim.tmbundle:
 | 
			
		||||
@@ -483,8 +506,8 @@ vendor/grammars/ruby.tmbundle:
 | 
			
		||||
- source.ruby
 | 
			
		||||
- text.html.erb
 | 
			
		||||
vendor/grammars/sas.tmbundle:
 | 
			
		||||
- source.SASLog
 | 
			
		||||
- source.sas
 | 
			
		||||
- source.sas_log
 | 
			
		||||
vendor/grammars/sass-textmate-bundle:
 | 
			
		||||
- source.sass
 | 
			
		||||
vendor/grammars/scala.tmbundle:
 | 
			
		||||
@@ -498,6 +521,8 @@ vendor/grammars/smali-sublime/smali.tmLanguage:
 | 
			
		||||
- source.smali
 | 
			
		||||
vendor/grammars/smalltalk-tmbundle:
 | 
			
		||||
- source.smalltalk
 | 
			
		||||
vendor/grammars/sourcepawn/:
 | 
			
		||||
- source.sp
 | 
			
		||||
vendor/grammars/sql.tmbundle:
 | 
			
		||||
- source.sql
 | 
			
		||||
vendor/grammars/st2-zonefile:
 | 
			
		||||
@@ -507,23 +532,23 @@ vendor/grammars/standard-ml.tmbundle:
 | 
			
		||||
- source.ml
 | 
			
		||||
vendor/grammars/sublime-MuPAD:
 | 
			
		||||
- source.mupad
 | 
			
		||||
vendor/grammars/sublime-apl/:
 | 
			
		||||
- source.apl
 | 
			
		||||
vendor/grammars/sublime-aspectj/:
 | 
			
		||||
- source.aspectj
 | 
			
		||||
vendor/grammars/sublime-autoit/:
 | 
			
		||||
- source.autoit
 | 
			
		||||
vendor/grammars/sublime-befunge:
 | 
			
		||||
- source.befunge
 | 
			
		||||
vendor/grammars/sublime-bsv:
 | 
			
		||||
- source.bsv
 | 
			
		||||
vendor/grammars/sublime-cirru:
 | 
			
		||||
- source.cirru
 | 
			
		||||
vendor/grammars/sublime-clips/:
 | 
			
		||||
- source.clips
 | 
			
		||||
vendor/grammars/sublime-glsl:
 | 
			
		||||
- source.essl
 | 
			
		||||
- source.glsl
 | 
			
		||||
vendor/grammars/sublime-golo/:
 | 
			
		||||
- source.golo
 | 
			
		||||
vendor/grammars/sublime-idris:
 | 
			
		||||
- source.idris
 | 
			
		||||
vendor/grammars/sublime-mask:
 | 
			
		||||
- source.mask
 | 
			
		||||
vendor/grammars/sublime-netlinx:
 | 
			
		||||
@@ -531,8 +556,6 @@ vendor/grammars/sublime-netlinx:
 | 
			
		||||
- source.netlinx.erb
 | 
			
		||||
vendor/grammars/sublime-nginx:
 | 
			
		||||
- source.nginx
 | 
			
		||||
vendor/grammars/sublime-nix:
 | 
			
		||||
- source.nix
 | 
			
		||||
vendor/grammars/sublime-opal/:
 | 
			
		||||
- source.opal
 | 
			
		||||
- source.opalsysdefs
 | 
			
		||||
@@ -542,17 +565,15 @@ vendor/grammars/sublime-robot-plugin:
 | 
			
		||||
- text.robot
 | 
			
		||||
vendor/grammars/sublime-rust:
 | 
			
		||||
- source.rust
 | 
			
		||||
vendor/grammars/sublime-sourcepawn:
 | 
			
		||||
- source.sp
 | 
			
		||||
vendor/grammars/sublime-spintools/:
 | 
			
		||||
- source.regexp.spin
 | 
			
		||||
- source.spin
 | 
			
		||||
vendor/grammars/sublime-tea:
 | 
			
		||||
- source.tea
 | 
			
		||||
vendor/grammars/sublime-terra:
 | 
			
		||||
- source.terra
 | 
			
		||||
vendor/grammars/sublime-text-ox/:
 | 
			
		||||
- source.ox
 | 
			
		||||
vendor/grammars/sublime-text-pig-latin/:
 | 
			
		||||
- source.pig_latin
 | 
			
		||||
vendor/grammars/sublime-typescript/:
 | 
			
		||||
- source.ts
 | 
			
		||||
- source.tsx
 | 
			
		||||
@@ -566,6 +587,8 @@ vendor/grammars/sublime_cobol:
 | 
			
		||||
vendor/grammars/sublime_man_page_support:
 | 
			
		||||
- source.man
 | 
			
		||||
- text.groff
 | 
			
		||||
vendor/grammars/sublimeassembly/:
 | 
			
		||||
- source.assembly
 | 
			
		||||
vendor/grammars/sublimeprolog/:
 | 
			
		||||
- source.prolog
 | 
			
		||||
- source.prolog.eclipse
 | 
			
		||||
@@ -587,8 +610,6 @@ 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/:
 | 
			
		||||
- source.xc
 | 
			
		||||
vendor/grammars/xml.tmbundle:
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,6 @@
 | 
			
		||||
require 'linguist/blob_helper'
 | 
			
		||||
require 'linguist/generated'
 | 
			
		||||
require 'linguist/grammars'
 | 
			
		||||
require 'linguist/heuristics'
 | 
			
		||||
require 'linguist/language'
 | 
			
		||||
require 'linguist/repository'
 | 
			
		||||
@@ -8,8 +9,85 @@ require 'linguist/shebang'
 | 
			
		||||
require 'linguist/version'
 | 
			
		||||
 | 
			
		||||
class << Linguist
 | 
			
		||||
  # Public: Detects the Language of the blob.
 | 
			
		||||
  #
 | 
			
		||||
  # blob - an object that includes the Linguist `BlobHelper` interface;
 | 
			
		||||
  #       see Linguist::LazyBlob and Linguist::FileBlob for examples
 | 
			
		||||
  #
 | 
			
		||||
  # Returns Language or nil.
 | 
			
		||||
  def detect(blob)
 | 
			
		||||
    # Bail early if the blob is binary or empty.
 | 
			
		||||
    return nil if blob.likely_binary? || blob.binary? || blob.empty?
 | 
			
		||||
 | 
			
		||||
    Linguist.instrument("linguist.detection", :blob => blob) do
 | 
			
		||||
      # Call each strategy until one candidate is returned.
 | 
			
		||||
      languages = []
 | 
			
		||||
      returning_strategy = nil
 | 
			
		||||
 | 
			
		||||
      STRATEGIES.each do |strategy|
 | 
			
		||||
        returning_strategy = strategy
 | 
			
		||||
        candidates = Linguist.instrument("linguist.strategy", :blob => blob, :strategy => strategy, :candidates => languages) do
 | 
			
		||||
          strategy.call(blob, languages)
 | 
			
		||||
        end
 | 
			
		||||
        if candidates.size == 1
 | 
			
		||||
          languages = candidates
 | 
			
		||||
          break
 | 
			
		||||
        elsif candidates.size > 1
 | 
			
		||||
          # More than one candidate was found, pass them to the next strategy.
 | 
			
		||||
          languages = candidates
 | 
			
		||||
        else
 | 
			
		||||
          # No candidates, try the next strategy
 | 
			
		||||
        end
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      Linguist.instrument("linguist.detected", :blob => blob, :strategy => returning_strategy, :language => languages.first)
 | 
			
		||||
 | 
			
		||||
      languages.first
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Internal: The strategies used to detect the language of a file.
 | 
			
		||||
  #
 | 
			
		||||
  # A strategy is an object that has a `.call` method that takes two arguments:
 | 
			
		||||
  #
 | 
			
		||||
  #   blob - An object that quacks like a blob.
 | 
			
		||||
  #   languages - An Array of candidate Language objects that were returned by the
 | 
			
		||||
  #               previous strategy.
 | 
			
		||||
  #
 | 
			
		||||
  # A strategy should return an Array of Language candidates.
 | 
			
		||||
  #
 | 
			
		||||
  # Strategies are called in turn until a single Language is returned.
 | 
			
		||||
  STRATEGIES = [
 | 
			
		||||
    Linguist::Strategy::Modeline,
 | 
			
		||||
    Linguist::Shebang,
 | 
			
		||||
    Linguist::Strategy::Filename,
 | 
			
		||||
    Linguist::Heuristics,
 | 
			
		||||
    Linguist::Classifier
 | 
			
		||||
  ]
 | 
			
		||||
 | 
			
		||||
  # Public: Set an instrumenter.
 | 
			
		||||
  #
 | 
			
		||||
  #     class CustomInstrumenter
 | 
			
		||||
  #       def instrument(name, payload = {})
 | 
			
		||||
  #         warn "Instrumenting #{name}: #{payload[:blob]}"
 | 
			
		||||
  #       end
 | 
			
		||||
  #     end
 | 
			
		||||
  #
 | 
			
		||||
  #     Linguist.instrumenter = CustomInstrumenter
 | 
			
		||||
  #
 | 
			
		||||
  # The instrumenter must conform to the `ActiveSupport::Notifications`
 | 
			
		||||
  # interface, which defines `#instrument` and accepts:
 | 
			
		||||
  #
 | 
			
		||||
  # name    - the String name of the event (e.g. "linguist.detected")
 | 
			
		||||
  # payload - a Hash of the exception context.
 | 
			
		||||
  attr_accessor :instrumenter
 | 
			
		||||
 | 
			
		||||
  # Internal: Perform instrumentation on a block
 | 
			
		||||
  #
 | 
			
		||||
  #     Linguist.instrument("linguist.dosomething", :blob => blob) do
 | 
			
		||||
  #       # logic to instrument here.
 | 
			
		||||
  #     end
 | 
			
		||||
  #
 | 
			
		||||
  def instrument(*args, &bk)
 | 
			
		||||
    if instrumenter
 | 
			
		||||
      instrumenter.instrument(*args, &bk)
 | 
			
		||||
@@ -17,4 +95,5 @@ class << Linguist
 | 
			
		||||
      yield
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -63,7 +63,7 @@ module Linguist
 | 
			
		||||
    #
 | 
			
		||||
    # Returns an Array
 | 
			
		||||
    def extensions
 | 
			
		||||
      basename, *segments = name.downcase.split(".")
 | 
			
		||||
      _, *segments = name.downcase.split(".")
 | 
			
		||||
 | 
			
		||||
      segments.map.with_index do |segment, index|
 | 
			
		||||
        "." + segments[index..-1].join(".")
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ require 'yaml'
 | 
			
		||||
 | 
			
		||||
module Linguist
 | 
			
		||||
  # DEPRECATED Avoid mixing into Blob classes. Prefer functional interfaces
 | 
			
		||||
  # like `Language.detect` over `Blob#language`. Functions are much easier to
 | 
			
		||||
  # like `Linguist.detect` over `Blob#language`. Functions are much easier to
 | 
			
		||||
  # cache and compose.
 | 
			
		||||
  #
 | 
			
		||||
  # Avoid adding additional bloat to this module.
 | 
			
		||||
@@ -325,7 +325,7 @@ module Linguist
 | 
			
		||||
    #
 | 
			
		||||
    # Returns a Language or nil if none is detected
 | 
			
		||||
    def language
 | 
			
		||||
      @language ||= Language.detect(self)
 | 
			
		||||
      @language ||= Linguist.detect(self)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Internal: Get the TextMate compatible scope for the blob
 | 
			
		||||
 
 | 
			
		||||
@@ -56,9 +56,11 @@ module Linguist
 | 
			
		||||
      generated_net_specflow_feature_file? ||
 | 
			
		||||
      composer_lock? ||
 | 
			
		||||
      node_modules? ||
 | 
			
		||||
      npm_shrinkwrap? ||
 | 
			
		||||
      godeps? ||
 | 
			
		||||
      generated_by_zephir? ||
 | 
			
		||||
      minified_files? ||
 | 
			
		||||
      has_source_map? ||
 | 
			
		||||
      source_map? ||
 | 
			
		||||
      compiled_coffeescript? ||
 | 
			
		||||
      generated_parser? ||
 | 
			
		||||
@@ -104,6 +106,21 @@ module Linguist
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Internal: Does the blob contain a source map reference?
 | 
			
		||||
    #
 | 
			
		||||
    # We assume that if one of the last 2 lines starts with a source map
 | 
			
		||||
    # reference, then the current file was generated from other files.
 | 
			
		||||
    #
 | 
			
		||||
    # We use the last 2 lines because the last line might be empty.
 | 
			
		||||
    #
 | 
			
		||||
    # We only handle JavaScript, no CSS support yet.
 | 
			
		||||
    #
 | 
			
		||||
    # Returns true or false.
 | 
			
		||||
    def has_source_map?
 | 
			
		||||
      return false unless extname.downcase == '.js'
 | 
			
		||||
      lines.last(2).any? { |line| line.start_with?('//# sourceMappingURL') }
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Internal: Is the blob a generated source map?
 | 
			
		||||
    #
 | 
			
		||||
    # Source Maps usually have .css.map or .js.map extensions. In case they
 | 
			
		||||
@@ -287,6 +304,13 @@ module Linguist
 | 
			
		||||
      !!name.match(/node_modules\//)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Internal: Is the blob a generated npm shrinkwrap file.
 | 
			
		||||
    #
 | 
			
		||||
    # Returns true or false.
 | 
			
		||||
    def npm_shrinkwrap?
 | 
			
		||||
      !!name.match(/npm-shrinkwrap\.json/)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Internal: Is the blob part of Godeps/,
 | 
			
		||||
    # which are not meant for humans in pull requests.
 | 
			
		||||
    #
 | 
			
		||||
@@ -339,14 +363,14 @@ module Linguist
 | 
			
		||||
    # on the first line.
 | 
			
		||||
    #
 | 
			
		||||
    # GFortran module files contain:
 | 
			
		||||
    # GFORTRAN module version 'x' created from 
 | 
			
		||||
    # GFORTRAN module version 'x' created from
 | 
			
		||||
    # on the first line.
 | 
			
		||||
    #
 | 
			
		||||
    # Return true of false
 | 
			
		||||
    def generated_module?
 | 
			
		||||
      return false unless extname == '.mod'
 | 
			
		||||
      return false unless lines.count > 1
 | 
			
		||||
      return lines[0].include?("PCBNEW-LibModule-V") || 
 | 
			
		||||
      return lines[0].include?("PCBNEW-LibModule-V") ||
 | 
			
		||||
              lines[0].include?("GFORTRAN module version '")
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,3 @@
 | 
			
		||||
# Note: This file is included in the github-linguist-grammars gem, not the
 | 
			
		||||
# github-linguist gem.
 | 
			
		||||
 | 
			
		||||
module Linguist
 | 
			
		||||
  module Grammars
 | 
			
		||||
    # Get the path to the directory containing the language grammar JSON files.
 | 
			
		||||
 
 | 
			
		||||
@@ -86,6 +86,14 @@ module Linguist
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".builds" do |data|
 | 
			
		||||
      if /^(\s*)(<Project|<Import|<Property|<?xml|xmlns)/i.match(data)
 | 
			
		||||
        Language["XML"]
 | 
			
		||||
      else
 | 
			
		||||
        Language["Text"]
 | 
			
		||||
      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"]
 | 
			
		||||
@@ -127,6 +135,14 @@ module Linguist
 | 
			
		||||
        Language["ECL"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    disambiguate ".es" do |data|
 | 
			
		||||
      if /^\s*(?:%%|main\s*\(.*?\)\s*->)/.match(data)
 | 
			
		||||
        Language["Erlang"]
 | 
			
		||||
      elsif /(?:\/\/|("|')use strict\1|export\s+default\s|\/\*.*?\*\/)/m.match(data)
 | 
			
		||||
        Language["JavaScript"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".for", ".f" do |data|
 | 
			
		||||
      if /^: /.match(data)
 | 
			
		||||
@@ -171,6 +187,12 @@ module Linguist
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".inc" do |data|
 | 
			
		||||
      if /^<\?(?:php)?/.match(data)
 | 
			
		||||
        Language["PHP"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".l" do |data|
 | 
			
		||||
      if /\(def(un|macro)\s/.match(data)
 | 
			
		||||
        Language["Common Lisp"]
 | 
			
		||||
@@ -313,6 +335,14 @@ module Linguist
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".props" do |data|
 | 
			
		||||
      if /^(\s*)(<Project|<Import|<Property|<?xml|xmlns)/i.match(data)
 | 
			
		||||
        Language["XML"]
 | 
			
		||||
      elsif /\w+\s*=\s*/i.match(data)
 | 
			
		||||
        Language["INI"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".r" do |data|
 | 
			
		||||
      if /\bRebol\b/i.match(data)
 | 
			
		||||
        Language["Rebol"]
 | 
			
		||||
@@ -321,6 +351,14 @@ module Linguist
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".rpy" do |data|
 | 
			
		||||
      if /(^(import|from|class|def)\s)/m.match(data)
 | 
			
		||||
        Language["Python"]
 | 
			
		||||
      else
 | 
			
		||||
        Language["Ren'Py"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".rs" do |data|
 | 
			
		||||
      if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data)
 | 
			
		||||
        Language["Rust"]
 | 
			
		||||
@@ -338,13 +376,13 @@ module Linguist
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    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)
 | 
			
		||||
      if /^\\i\b|AS \$\$|LANGUAGE '?plpgsql'?/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data)
 | 
			
		||||
        #Postgres
 | 
			
		||||
        Language["PLpgSQL"]
 | 
			
		||||
      elsif /(alter module)|(language sql)|(begin( NOT)+ atomic)/i.match(data)  || /signal SQLSTATE '[0-9]+'/i.match(data)
 | 
			
		||||
        #IBM db2
 | 
			
		||||
        Language["SQLPL"]
 | 
			
		||||
      elsif /pragma|\$\$PLSQL_|XMLTYPE|sysdate|systimestamp|\.nextval|connect by|AUTHID (DEFINER|CURRENT_USER)/i.match(data) || /constructor\W+function/i.match(data)
 | 
			
		||||
      elsif /\$\$PLSQL_|XMLTYPE|sysdate|systimestamp|\.nextval|connect by|AUTHID (DEFINER|CURRENT_USER)/i.match(data) || /constructor\W+function/i.match(data)
 | 
			
		||||
        #Oracle
 | 
			
		||||
        Language["PLSQL"]
 | 
			
		||||
      elsif ! /begin|boolean|package|exception/i.match(data)
 | 
			
		||||
@@ -352,6 +390,28 @@ module Linguist
 | 
			
		||||
        Language["SQL"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    disambiguate ".srt" do |data|
 | 
			
		||||
      if /^(\d{2}:\d{2}:\d{2},\d{3})\s*(-->)\s*(\d{2}:\d{2}:\d{2},\d{3})$/.match(data)
 | 
			
		||||
        Language["SubRip Text"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    disambiguate ".t" do |data|
 | 
			
		||||
      if /^\s*%|^\s*var\s+\w+\s*:\s*\w+/.match(data)
 | 
			
		||||
        Language["Turing"]
 | 
			
		||||
      elsif /^\s*use\s+v6\s*;/.match(data)
 | 
			
		||||
        Language["Perl6"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    
 | 
			
		||||
    disambiguate ".toc" do |data|
 | 
			
		||||
      if /^## |@no-lib-strip@/.match(data)
 | 
			
		||||
        Language["World of Warcraft Addon Data"]
 | 
			
		||||
      elsif /^\\(contentsline|defcounter|beamer|boolfalse)/.match(data)
 | 
			
		||||
        Language["TeX"]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    disambiguate ".ts" do |data|
 | 
			
		||||
      if data.include?("<TS ")
 | 
			
		||||
 
 | 
			
		||||
@@ -87,14 +87,6 @@ module Linguist
 | 
			
		||||
      language
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    STRATEGIES = [
 | 
			
		||||
      Linguist::Strategy::Modeline,
 | 
			
		||||
      Linguist::Shebang,
 | 
			
		||||
      Linguist::Strategy::Filename,
 | 
			
		||||
      Linguist::Heuristics,
 | 
			
		||||
      Linguist::Classifier
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    # Public: Detects the Language of the blob.
 | 
			
		||||
    #
 | 
			
		||||
    # blob - an object that includes the Linguist `BlobHelper` interface;
 | 
			
		||||
@@ -102,34 +94,8 @@ module Linguist
 | 
			
		||||
    #
 | 
			
		||||
    # Returns Language or nil.
 | 
			
		||||
    def self.detect(blob)
 | 
			
		||||
      # Bail early if the blob is binary or empty.
 | 
			
		||||
      return nil if blob.likely_binary? || blob.binary? || blob.empty?
 | 
			
		||||
 | 
			
		||||
      Linguist.instrument("linguist.detection", :blob => blob) do
 | 
			
		||||
        # Call each strategy until one candidate is returned.
 | 
			
		||||
        languages = []
 | 
			
		||||
        returning_strategy = nil
 | 
			
		||||
 | 
			
		||||
        STRATEGIES.each do |strategy|
 | 
			
		||||
          returning_strategy = strategy
 | 
			
		||||
          candidates = Linguist.instrument("linguist.strategy", :blob => blob, :strategy => strategy, :candidates => languages) do
 | 
			
		||||
            strategy.call(blob, languages)
 | 
			
		||||
          end
 | 
			
		||||
          if candidates.size == 1
 | 
			
		||||
            languages = candidates
 | 
			
		||||
            break
 | 
			
		||||
          elsif candidates.size > 1
 | 
			
		||||
            # More than one candidate was found, pass them to the next strategy.
 | 
			
		||||
            languages = candidates
 | 
			
		||||
          else
 | 
			
		||||
            # No candidates, try the next strategy
 | 
			
		||||
          end
 | 
			
		||||
        end
 | 
			
		||||
 | 
			
		||||
        Linguist.instrument("linguist.detected", :blob => blob, :strategy => returning_strategy, :language => languages.first)
 | 
			
		||||
 | 
			
		||||
        languages.first
 | 
			
		||||
      end
 | 
			
		||||
      warn "[DEPRECATED] `Linguist::Language.detect` is deprecated. Use `Linguist.detect`. #{caller[0]}"
 | 
			
		||||
      Linguist.detect(blob)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    # Public: Get all Languages
 | 
			
		||||
 
 | 
			
		||||
@@ -75,6 +75,10 @@ APL:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .apl
 | 
			
		||||
  - .dyalog
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - apl
 | 
			
		||||
  - aplx
 | 
			
		||||
  - dyalog
 | 
			
		||||
  tm_scope: source.apl
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
@@ -147,6 +151,17 @@ Alloy:
 | 
			
		||||
  - .als
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Alpine Abuild:
 | 
			
		||||
  type: programming
 | 
			
		||||
  group: Shell
 | 
			
		||||
  aliases:
 | 
			
		||||
  - abuild
 | 
			
		||||
  - apkbuild
 | 
			
		||||
  filenames:
 | 
			
		||||
  - APKBUILD
 | 
			
		||||
  tm_scope: source.shell
 | 
			
		||||
  ace_mode: sh
 | 
			
		||||
 | 
			
		||||
Ant Build System:
 | 
			
		||||
  type: data
 | 
			
		||||
  tm_scope: text.xml.ant
 | 
			
		||||
@@ -230,7 +245,7 @@ Assembly:
 | 
			
		||||
  - .a51
 | 
			
		||||
  - .inc
 | 
			
		||||
  - .nasm
 | 
			
		||||
  tm_scope: source.asm.x86
 | 
			
		||||
  tm_scope: source.assembly
 | 
			
		||||
  ace_mode: assembly_x86
 | 
			
		||||
 | 
			
		||||
Augeas:
 | 
			
		||||
@@ -260,7 +275,7 @@ AutoIt:
 | 
			
		||||
  - AutoItScript
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .au3
 | 
			
		||||
  tm_scope: source.autoit.3
 | 
			
		||||
  tm_scope: source.autoit
 | 
			
		||||
  ace_mode: autohotkey
 | 
			
		||||
 | 
			
		||||
Awk:
 | 
			
		||||
@@ -350,6 +365,7 @@ Boo:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .boo
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: source.boo
 | 
			
		||||
 | 
			
		||||
Brainfuck:
 | 
			
		||||
  type: programming
 | 
			
		||||
@@ -467,6 +483,13 @@ COBOL:
 | 
			
		||||
  - .cpy
 | 
			
		||||
  ace_mode: cobol
 | 
			
		||||
 | 
			
		||||
COLLADA:
 | 
			
		||||
  type: data
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .dae
 | 
			
		||||
  tm_scope: text.xml
 | 
			
		||||
  ace_mode: xml
 | 
			
		||||
 | 
			
		||||
CSS:
 | 
			
		||||
  type: markup
 | 
			
		||||
  tm_scope: source.css
 | 
			
		||||
@@ -474,7 +497,7 @@ CSS:
 | 
			
		||||
  color: "#563d7c"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .css
 | 
			
		||||
  
 | 
			
		||||
 | 
			
		||||
CSV:
 | 
			
		||||
  type: data
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
@@ -548,7 +571,7 @@ Clean:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .icl
 | 
			
		||||
  - .dcl
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  tm_scope: source.clean
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Click:
 | 
			
		||||
@@ -682,7 +705,7 @@ Cpp-ObjDump:
 | 
			
		||||
  - .cxx-objdump
 | 
			
		||||
  tm_scope: objdump.x86asm
 | 
			
		||||
  aliases:
 | 
			
		||||
  - c++-objdumb
 | 
			
		||||
  - c++-objdump
 | 
			
		||||
  ace_mode: assembly_x86
 | 
			
		||||
 | 
			
		||||
Creole:
 | 
			
		||||
@@ -703,6 +726,34 @@ Crystal:
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - crystal
 | 
			
		||||
 | 
			
		||||
Csound:
 | 
			
		||||
  type: programming
 | 
			
		||||
  aliases:
 | 
			
		||||
  - csound-orc
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .orc
 | 
			
		||||
  - .udo
 | 
			
		||||
  tm_scope: source.csound
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Csound Document:
 | 
			
		||||
  type: programming
 | 
			
		||||
  aliases:
 | 
			
		||||
  - csound-csd
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .csd
 | 
			
		||||
  tm_scope: source.csound-document
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Csound Score:
 | 
			
		||||
  type: programming
 | 
			
		||||
  aliases:
 | 
			
		||||
  - csound-sco
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .sco
 | 
			
		||||
  tm_scope: source.csound-score
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Cucumber:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
@@ -771,7 +822,7 @@ DM:
 | 
			
		||||
  - .dm
 | 
			
		||||
  aliases:
 | 
			
		||||
  - byond
 | 
			
		||||
  tm_scope: source.c++
 | 
			
		||||
  tm_scope: source.dm
 | 
			
		||||
  ace_mode: c_cpp
 | 
			
		||||
 | 
			
		||||
DNS Zone:
 | 
			
		||||
@@ -873,6 +924,15 @@ ECLiPSe:
 | 
			
		||||
  tm_scope: source.prolog.eclipse
 | 
			
		||||
  ace_mode: prolog
 | 
			
		||||
 | 
			
		||||
EJS:
 | 
			
		||||
  type: markup
 | 
			
		||||
  color: "#a91e50"
 | 
			
		||||
  group: HTML
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .ejs
 | 
			
		||||
  tm_scope: text.html.js
 | 
			
		||||
  ace_mode: ejs
 | 
			
		||||
 | 
			
		||||
Eagle:
 | 
			
		||||
  type: markup
 | 
			
		||||
  color: "#814C05"
 | 
			
		||||
@@ -947,6 +1007,7 @@ Erlang:
 | 
			
		||||
  color: "#B83998"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .erl
 | 
			
		||||
  - .app.src
 | 
			
		||||
  - .es
 | 
			
		||||
  - .escript
 | 
			
		||||
  - .hrl
 | 
			
		||||
@@ -1022,7 +1083,7 @@ Fantom:
 | 
			
		||||
  color: "#dbded5"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .fan
 | 
			
		||||
  tm_scope: source.fan
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Filterscript:
 | 
			
		||||
@@ -1106,7 +1167,7 @@ GAS:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .s
 | 
			
		||||
  - .ms
 | 
			
		||||
  tm_scope: source.asm.x86
 | 
			
		||||
  tm_scope: source.assembly
 | 
			
		||||
  ace_mode: assembly_x86
 | 
			
		||||
 | 
			
		||||
GDScript:
 | 
			
		||||
@@ -1124,6 +1185,7 @@ GLSL:
 | 
			
		||||
  - .frag
 | 
			
		||||
  - .frg
 | 
			
		||||
  - .fs
 | 
			
		||||
  - .fsh
 | 
			
		||||
  - .fshader
 | 
			
		||||
  - .geo
 | 
			
		||||
  - .geom
 | 
			
		||||
@@ -1132,6 +1194,7 @@ GLSL:
 | 
			
		||||
  - .shader
 | 
			
		||||
  - .vert
 | 
			
		||||
  - .vrx
 | 
			
		||||
  - .vsh
 | 
			
		||||
  - .vshader
 | 
			
		||||
  ace_mode: glsl
 | 
			
		||||
 | 
			
		||||
@@ -1261,6 +1324,14 @@ Graph Modeling Language:
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
GraphQL:
 | 
			
		||||
  type: data
 | 
			
		||||
  extensions:
 | 
			
		||||
    - .graphql
 | 
			
		||||
  color: "#E535AB"
 | 
			
		||||
  tm_scope: source.graphql
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Graphviz (DOT):
 | 
			
		||||
  type: data
 | 
			
		||||
  tm_scope: source.dot
 | 
			
		||||
@@ -1290,6 +1361,7 @@ Groff:
 | 
			
		||||
  - '.8'
 | 
			
		||||
  - '.9'
 | 
			
		||||
  - .l
 | 
			
		||||
  - .me
 | 
			
		||||
  - .ms
 | 
			
		||||
  - .n
 | 
			
		||||
  - .rno
 | 
			
		||||
@@ -1310,6 +1382,8 @@ Groovy:
 | 
			
		||||
  - .gvy
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - groovy
 | 
			
		||||
  filenames:
 | 
			
		||||
  - Jenkinsfile
 | 
			
		||||
 | 
			
		||||
Groovy Server Pages:
 | 
			
		||||
  type: programming
 | 
			
		||||
@@ -1330,6 +1404,16 @@ HCL:
 | 
			
		||||
  ace_mode: ruby
 | 
			
		||||
  tm_scope: source.ruby
 | 
			
		||||
 | 
			
		||||
HLSL:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
    - .hlsl
 | 
			
		||||
    - .fx
 | 
			
		||||
    - .fxh
 | 
			
		||||
    - .hlsli
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
 | 
			
		||||
HTML:
 | 
			
		||||
  type: markup
 | 
			
		||||
  tm_scope: text.html.basic
 | 
			
		||||
@@ -1360,6 +1444,16 @@ HTML+Django:
 | 
			
		||||
  - htmldjango
 | 
			
		||||
  ace_mode: django
 | 
			
		||||
 | 
			
		||||
HTML+ECR:
 | 
			
		||||
  type: markup
 | 
			
		||||
  tm_scope: text.html.ecr
 | 
			
		||||
  group: HTML
 | 
			
		||||
  aliases:
 | 
			
		||||
  - ecr
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .ecr
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
HTML+EEX:
 | 
			
		||||
  type: markup
 | 
			
		||||
  tm_scope: text.html.elixir
 | 
			
		||||
@@ -1518,6 +1612,7 @@ Idris:
 | 
			
		||||
  - .idr
 | 
			
		||||
  - .lidr
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: source.idris
 | 
			
		||||
 | 
			
		||||
Inform 7:
 | 
			
		||||
  type: programming
 | 
			
		||||
@@ -1535,7 +1630,7 @@ Inno Setup:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .iss
 | 
			
		||||
  tm_scope: source.inno
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Io:
 | 
			
		||||
@@ -1575,6 +1670,8 @@ J:
 | 
			
		||||
  color: "#9EEDFF"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .ijs
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - jconsole
 | 
			
		||||
  tm_scope: source.j
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
@@ -1597,11 +1694,13 @@ JSON:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .json
 | 
			
		||||
  - .geojson
 | 
			
		||||
  - .lock
 | 
			
		||||
  - .JSON-tmLanguage
 | 
			
		||||
  - .topojson
 | 
			
		||||
  filenames:
 | 
			
		||||
  - .arcconfig
 | 
			
		||||
  - .jshintrc
 | 
			
		||||
  - composer.lock
 | 
			
		||||
  - mcmod.info
 | 
			
		||||
 | 
			
		||||
JSON5:
 | 
			
		||||
  type: data
 | 
			
		||||
@@ -1639,6 +1738,7 @@ Jade:
 | 
			
		||||
  type: markup
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .jade
 | 
			
		||||
  - .pug
 | 
			
		||||
  tm_scope: text.jade
 | 
			
		||||
  ace_mode: jade
 | 
			
		||||
 | 
			
		||||
@@ -1679,6 +1779,7 @@ JavaScript:
 | 
			
		||||
  - .js
 | 
			
		||||
  - ._js
 | 
			
		||||
  - .bones
 | 
			
		||||
  - .es
 | 
			
		||||
  - .es6
 | 
			
		||||
  - .frag
 | 
			
		||||
  - .gs
 | 
			
		||||
@@ -1948,6 +2049,7 @@ Logos:
 | 
			
		||||
  - .x
 | 
			
		||||
  - .xi
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: source.logos
 | 
			
		||||
 | 
			
		||||
Logtalk:
 | 
			
		||||
  type: programming
 | 
			
		||||
@@ -1995,6 +2097,25 @@ M:
 | 
			
		||||
  tm_scope: source.lisp
 | 
			
		||||
  ace_mode: lisp
 | 
			
		||||
 | 
			
		||||
M4:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .m4
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
M4Sugar:
 | 
			
		||||
  type: programming
 | 
			
		||||
  group: M4
 | 
			
		||||
  aliases:
 | 
			
		||||
  - autoconf
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .m4
 | 
			
		||||
  filenames:
 | 
			
		||||
  - configure.ac
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
MAXScript:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#00a6a6"
 | 
			
		||||
@@ -2032,14 +2153,19 @@ Makefile:
 | 
			
		||||
  - .mak
 | 
			
		||||
  - .d
 | 
			
		||||
  - .mk
 | 
			
		||||
  - .mkfile
 | 
			
		||||
  filenames:
 | 
			
		||||
  - BSDmakefile
 | 
			
		||||
  - GNUmakefile
 | 
			
		||||
  - Kbuild
 | 
			
		||||
  - Makefile
 | 
			
		||||
  - Makefile.am
 | 
			
		||||
  - Makefile.frag
 | 
			
		||||
  - Makefile.in
 | 
			
		||||
  - Makefile.inc
 | 
			
		||||
  - makefile
 | 
			
		||||
  - makefile.sco
 | 
			
		||||
  - mkfile
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - make
 | 
			
		||||
  ace_mode: makefile
 | 
			
		||||
@@ -2202,6 +2328,7 @@ Monkey:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .monkey
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: source.monkey
 | 
			
		||||
 | 
			
		||||
Moocode:
 | 
			
		||||
  type: programming
 | 
			
		||||
@@ -2349,7 +2476,7 @@ Nu:
 | 
			
		||||
  - .nu
 | 
			
		||||
  filenames:
 | 
			
		||||
  - Nukefile
 | 
			
		||||
  tm_scope: source.scheme
 | 
			
		||||
  tm_scope: source.nu
 | 
			
		||||
  ace_mode: scheme
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - nush
 | 
			
		||||
@@ -2470,11 +2597,21 @@ OpenEdge ABL:
 | 
			
		||||
  tm_scope: source.abl
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
OpenRC runscript:
 | 
			
		||||
  type: programming
 | 
			
		||||
  group: Shell
 | 
			
		||||
  aliases:
 | 
			
		||||
  - openrc
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - openrc-run
 | 
			
		||||
  tm_scope: source.shell
 | 
			
		||||
  ace_mode: sh
 | 
			
		||||
 | 
			
		||||
OpenSCAD:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .scad
 | 
			
		||||
  tm_scope: source.scad
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: scad
 | 
			
		||||
 | 
			
		||||
Org:
 | 
			
		||||
@@ -2515,8 +2652,9 @@ PAWN:
 | 
			
		||||
  color: "#dbb284"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .pwn
 | 
			
		||||
  tm_scope: source.c++
 | 
			
		||||
  ace_mode: c_cpp
 | 
			
		||||
  - .inc
 | 
			
		||||
  tm_scope: source.pawn
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
PHP:
 | 
			
		||||
  type: programming
 | 
			
		||||
@@ -2545,7 +2683,7 @@ PHP:
 | 
			
		||||
PLSQL:
 | 
			
		||||
  type: programming
 | 
			
		||||
  ace_mode: sql
 | 
			
		||||
  tm_scope: source.plsql.oracle
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  color: "#dad8d8"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .pls
 | 
			
		||||
@@ -2587,7 +2725,7 @@ Papyrus:
 | 
			
		||||
  color: "#6600cc"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .psc
 | 
			
		||||
  tm_scope: source.papyrus
 | 
			
		||||
  tm_scope: source.papyrus.skyrim
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Parrot:
 | 
			
		||||
@@ -2809,6 +2947,7 @@ Puppet:
 | 
			
		||||
  filenames:
 | 
			
		||||
  - Modulefile
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: source.puppet
 | 
			
		||||
 | 
			
		||||
Pure Data:
 | 
			
		||||
  type: programming
 | 
			
		||||
@@ -2850,10 +2989,12 @@ Python:
 | 
			
		||||
  - .pyp
 | 
			
		||||
  - .pyt
 | 
			
		||||
  - .pyw
 | 
			
		||||
  - .rpy
 | 
			
		||||
  - .tac
 | 
			
		||||
  - .wsgi
 | 
			
		||||
  - .xpy
 | 
			
		||||
  filenames:
 | 
			
		||||
  - BUCK
 | 
			
		||||
  - BUILD
 | 
			
		||||
  - SConscript
 | 
			
		||||
  - SConstruct
 | 
			
		||||
@@ -3023,7 +3164,6 @@ Redcode:
 | 
			
		||||
 | 
			
		||||
Ren'Py:
 | 
			
		||||
  type: programming
 | 
			
		||||
  group: Python
 | 
			
		||||
  aliases:
 | 
			
		||||
  - renpy
 | 
			
		||||
  color: "#ff7f7f"
 | 
			
		||||
@@ -3196,6 +3336,14 @@ SQLPL:
 | 
			
		||||
  - .sql
 | 
			
		||||
  - .db2
 | 
			
		||||
 | 
			
		||||
SRecode Template:
 | 
			
		||||
  type: markup
 | 
			
		||||
  color: "#348a34"
 | 
			
		||||
  tm_scope: source.lisp
 | 
			
		||||
  ace_mode: lisp
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .srt
 | 
			
		||||
 | 
			
		||||
STON:
 | 
			
		||||
  type: data
 | 
			
		||||
  group: Smalltalk
 | 
			
		||||
@@ -3311,6 +3459,13 @@ Shell:
 | 
			
		||||
  - .tmux
 | 
			
		||||
  - .tool
 | 
			
		||||
  - .zsh
 | 
			
		||||
  filenames:
 | 
			
		||||
  - .bash_history
 | 
			
		||||
  - .bash_logout
 | 
			
		||||
  - .bash_profile
 | 
			
		||||
  - .bashrc
 | 
			
		||||
  - PKGBUILD
 | 
			
		||||
  - gradlew
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - bash
 | 
			
		||||
  - rc
 | 
			
		||||
@@ -3438,6 +3593,13 @@ Stylus:
 | 
			
		||||
  tm_scope: source.stylus
 | 
			
		||||
  ace_mode: stylus
 | 
			
		||||
 | 
			
		||||
SubRip Text:
 | 
			
		||||
  type: data
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .srt
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: text.srt
 | 
			
		||||
 | 
			
		||||
SuperCollider:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#46390b"
 | 
			
		||||
@@ -3466,6 +3628,13 @@ SystemVerilog:
 | 
			
		||||
  - .vh
 | 
			
		||||
  ace_mode: verilog
 | 
			
		||||
 | 
			
		||||
TLA:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .tla
 | 
			
		||||
  tm_scope: source.tla
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
TOML:
 | 
			
		||||
  type: data
 | 
			
		||||
  extensions:
 | 
			
		||||
@@ -3532,6 +3701,15 @@ Tea:
 | 
			
		||||
  tm_scope: source.tea
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Terra:
 | 
			
		||||
  type: programming
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .t
 | 
			
		||||
  color: "#00004c"
 | 
			
		||||
  ace_mode: lua
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - lua
 | 
			
		||||
 | 
			
		||||
Text:
 | 
			
		||||
  type: prose
 | 
			
		||||
  wrap: true
 | 
			
		||||
@@ -3540,7 +3718,21 @@ Text:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .txt
 | 
			
		||||
  - .fr
 | 
			
		||||
  - .nb
 | 
			
		||||
  - .ncl
 | 
			
		||||
  - .no
 | 
			
		||||
  filenames:
 | 
			
		||||
  - COPYING
 | 
			
		||||
  - INSTALL
 | 
			
		||||
  - LICENSE
 | 
			
		||||
  - NEWS
 | 
			
		||||
  - README.1ST
 | 
			
		||||
  - README.me
 | 
			
		||||
  - click.me
 | 
			
		||||
  - delete.me
 | 
			
		||||
  - keep.me
 | 
			
		||||
  - read.me
 | 
			
		||||
  - test.me
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
@@ -3561,11 +3753,11 @@ Thrift:
 | 
			
		||||
 | 
			
		||||
Turing:
 | 
			
		||||
  type: programming
 | 
			
		||||
  color: "#45f715"
 | 
			
		||||
  color: "#cf142b"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .t
 | 
			
		||||
  - .tu
 | 
			
		||||
  tm_scope: none
 | 
			
		||||
  tm_scope: source.turing
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Turtle:
 | 
			
		||||
@@ -3731,6 +3923,20 @@ Vue:
 | 
			
		||||
  tm_scope: text.html.vue
 | 
			
		||||
  ace_mode: html
 | 
			
		||||
 | 
			
		||||
Wavefront Material:
 | 
			
		||||
  type: data
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .mtl
 | 
			
		||||
  tm_scope: source.wavefront.mtl
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Wavefront Object:
 | 
			
		||||
  type: data
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .obj
 | 
			
		||||
  tm_scope: source.wavefront.obj
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
Web Ontology Language:
 | 
			
		||||
  type: markup
 | 
			
		||||
  color: "#9cc9dd"
 | 
			
		||||
@@ -3746,6 +3952,14 @@ WebIDL:
 | 
			
		||||
  tm_scope: source.webidl
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
World of Warcraft Addon Data:
 | 
			
		||||
  type: data
 | 
			
		||||
  color: "#e0b330"
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .toc
 | 
			
		||||
  tm_scope: source.toc
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
 | 
			
		||||
X10:
 | 
			
		||||
  type: programming
 | 
			
		||||
  aliases:
 | 
			
		||||
@@ -3775,6 +3989,7 @@ XML:
 | 
			
		||||
  - .xml
 | 
			
		||||
  - .ant
 | 
			
		||||
  - .axml
 | 
			
		||||
  - .builds
 | 
			
		||||
  - .ccxml
 | 
			
		||||
  - .clixml
 | 
			
		||||
  - .cproject
 | 
			
		||||
@@ -3785,6 +4000,7 @@ XML:
 | 
			
		||||
  - .ditamap
 | 
			
		||||
  - .ditaval
 | 
			
		||||
  - .dll.config
 | 
			
		||||
  - .dotsettings
 | 
			
		||||
  - .filters
 | 
			
		||||
  - .fsproj
 | 
			
		||||
  - .fxml
 | 
			
		||||
@@ -3805,14 +4021,18 @@ XML:
 | 
			
		||||
  - .nuspec
 | 
			
		||||
  - .odd
 | 
			
		||||
  - .osm
 | 
			
		||||
  - .pkgproj
 | 
			
		||||
  - .plist
 | 
			
		||||
  - .pluginspec
 | 
			
		||||
  - .props
 | 
			
		||||
  - .ps1xml
 | 
			
		||||
  - .psc1
 | 
			
		||||
  - .pt
 | 
			
		||||
  - .rdf
 | 
			
		||||
  - .resx
 | 
			
		||||
  - .rss
 | 
			
		||||
  - .scxml
 | 
			
		||||
  - .sfproj
 | 
			
		||||
  - .srdf
 | 
			
		||||
  - .storyboard
 | 
			
		||||
  - .stTheme
 | 
			
		||||
@@ -3831,6 +4051,7 @@ XML:
 | 
			
		||||
  - .ux
 | 
			
		||||
  - .vbproj
 | 
			
		||||
  - .vcxproj
 | 
			
		||||
  - .vssettings
 | 
			
		||||
  - .vxml
 | 
			
		||||
  - .wsdl
 | 
			
		||||
  - .wsf
 | 
			
		||||
@@ -3852,6 +4073,8 @@ XML:
 | 
			
		||||
  filenames:
 | 
			
		||||
  - .classpath
 | 
			
		||||
  - .project
 | 
			
		||||
  - App.config
 | 
			
		||||
  - NuGet.config
 | 
			
		||||
  - Settings.StyleCop
 | 
			
		||||
  - Web.Debug.config
 | 
			
		||||
  - Web.Release.config
 | 
			
		||||
@@ -3931,9 +4154,12 @@ YAML:
 | 
			
		||||
  - .yml
 | 
			
		||||
  - .reek
 | 
			
		||||
  - .rviz
 | 
			
		||||
  - .sublime-syntax
 | 
			
		||||
  - .syntax
 | 
			
		||||
  - .yaml
 | 
			
		||||
  - .yaml-tmlanguage
 | 
			
		||||
  filenames:
 | 
			
		||||
  - .clang-format
 | 
			
		||||
  ace_mode: yaml
 | 
			
		||||
 | 
			
		||||
YANG:
 | 
			
		||||
@@ -3998,6 +4224,8 @@ edn:
 | 
			
		||||
fish:
 | 
			
		||||
  type: programming
 | 
			
		||||
  group: Shell
 | 
			
		||||
  interpreters:
 | 
			
		||||
  - fish
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .fish
 | 
			
		||||
  tm_scope: source.fish
 | 
			
		||||
@@ -4015,6 +4243,7 @@ nesC:
 | 
			
		||||
  extensions:
 | 
			
		||||
  - .nc
 | 
			
		||||
  ace_mode: text
 | 
			
		||||
  tm_scope: source.nesc
 | 
			
		||||
 | 
			
		||||
ooc:
 | 
			
		||||
  type: programming
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,7 @@ module Linguist
 | 
			
		||||
      @oid = oid
 | 
			
		||||
      @path = path
 | 
			
		||||
      @mode = mode
 | 
			
		||||
      @data = nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def git_attributes
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,9 @@ module Linguist
 | 
			
		||||
      @repository = repo
 | 
			
		||||
      @commit_oid = commit_oid
 | 
			
		||||
 | 
			
		||||
      @old_commit_oid = nil
 | 
			
		||||
      @old_stats = nil
 | 
			
		||||
 | 
			
		||||
      raise TypeError, 'commit_oid must be a commit SHA1' unless commit_oid.is_a?(String)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -21,7 +21,7 @@ module Linguist
 | 
			
		||||
    def self.cache
 | 
			
		||||
      @cache ||= begin
 | 
			
		||||
        serializer = defined?(Yajl) ? Yajl : YAML
 | 
			
		||||
        serializer.load(File.read(PATH))
 | 
			
		||||
        serializer.load(File.read(PATH, encoding: 'utf-8'))
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -42,10 +42,10 @@ module Linguist
 | 
			
		||||
      return unless script
 | 
			
		||||
 | 
			
		||||
      # "python2.6" -> "python2"
 | 
			
		||||
      script.sub! /(\.\d+)$/, ''
 | 
			
		||||
      script.sub!(/(\.\d+)$/, '')
 | 
			
		||||
 | 
			
		||||
      # #! perl -> perl
 | 
			
		||||
      script.sub! /^#!\s*/, ''
 | 
			
		||||
      script.sub!(/^#!\s*/, '')
 | 
			
		||||
 | 
			
		||||
      # Check for multiline shebang hacks that call `exec`
 | 
			
		||||
      if script == 'sh' &&
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,10 @@ module Linguist
 | 
			
		||||
 | 
			
		||||
      MODELINES = [EMACS_MODELINE, VIM_MODELINE_1, VIM_MODELINE_2]
 | 
			
		||||
 | 
			
		||||
      # Scope of the search for modelines
 | 
			
		||||
      # Number of lines to check at the beginning and at the end of the file
 | 
			
		||||
      SEARCH_SCOPE = 5
 | 
			
		||||
 | 
			
		||||
      # Public: Detects language based on Vim and Emacs modelines
 | 
			
		||||
      #
 | 
			
		||||
      # blob               - An object that quacks like a blob.
 | 
			
		||||
@@ -26,7 +30,9 @@ module Linguist
 | 
			
		||||
      # Returns an Array with one Language if the blob has a Vim or Emacs modeline
 | 
			
		||||
      # that matches a Language name or alias. Returns an empty array if no match.
 | 
			
		||||
      def self.call(blob, _ = nil)
 | 
			
		||||
        Array(Language.find_by_alias(modeline(blob.data)))
 | 
			
		||||
        header = blob.lines.first(SEARCH_SCOPE).join("\n")
 | 
			
		||||
        footer = blob.lines.last(SEARCH_SCOPE).join("\n")
 | 
			
		||||
        Array(Language.find_by_alias(modeline(header + footer)))
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      # Public: Get the modeline from the first n-lines of the file
 | 
			
		||||
 
 | 
			
		||||
@@ -20,10 +20,17 @@
 | 
			
		||||
- ^deps/
 | 
			
		||||
- ^tools/
 | 
			
		||||
- (^|/)configure$
 | 
			
		||||
- (^|/)configure.ac$
 | 
			
		||||
- (^|/)config.guess$
 | 
			
		||||
- (^|/)config.sub$
 | 
			
		||||
 | 
			
		||||
# stuff autogenerated by autoconf - still C deps
 | 
			
		||||
- (^|/)aclocal.m4
 | 
			
		||||
- (^|/)libtool.m4
 | 
			
		||||
- (^|/)ltoptions.m4
 | 
			
		||||
- (^|/)ltsugar.m4
 | 
			
		||||
- (^|/)ltversion.m4
 | 
			
		||||
- (^|/)lt~obsolete.m4
 | 
			
		||||
 | 
			
		||||
# Linters
 | 
			
		||||
- cpplint.py
 | 
			
		||||
 | 
			
		||||
@@ -146,6 +153,9 @@
 | 
			
		||||
- (^|/)tiny_mce([^.]*)\.js$
 | 
			
		||||
- (^|/)tiny_mce/(langs|plugins|themes|utils)
 | 
			
		||||
 | 
			
		||||
# Ace Editor
 | 
			
		||||
- (^|/)ace-builds/
 | 
			
		||||
 | 
			
		||||
# MathJax
 | 
			
		||||
- (^|/)MathJax/
 | 
			
		||||
 | 
			
		||||
@@ -183,6 +193,7 @@
 | 
			
		||||
 | 
			
		||||
# django
 | 
			
		||||
- (^|/)admin_media/
 | 
			
		||||
- (^|/)env/
 | 
			
		||||
 | 
			
		||||
# Fabric
 | 
			
		||||
- ^fabfile\.py$
 | 
			
		||||
@@ -302,3 +313,6 @@
 | 
			
		||||
 | 
			
		||||
# Android Google APIs
 | 
			
		||||
- (^|/)\.google_apis/
 | 
			
		||||
 | 
			
		||||
# Jenkins Pipeline
 | 
			
		||||
- ^Jenkinsfile$
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,3 @@
 | 
			
		||||
module Linguist
 | 
			
		||||
  VERSION = "4.7.6"
 | 
			
		||||
  VERSION = "4.8.7"
 | 
			
		||||
end
 | 
			
		||||
 
 | 
			
		||||
@@ -2,5 +2,6 @@
 | 
			
		||||
  "repository": "https://github.com/github/linguist",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "season": "~>5.0"
 | 
			
		||||
  }
 | 
			
		||||
  },
 | 
			
		||||
  "license": "MIT"
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								samples/APL/hashbang
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										7
									
								
								samples/APL/hashbang
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
#!/usr/local/bin/apl --script
 | 
			
		||||
NEWLINE ← ⎕UCS 10
 | 
			
		||||
HEADERS ← 'Content-Type: text/plain', NEWLINE
 | 
			
		||||
HEADERS
 | 
			
		||||
⍝ ⎕←HEADERS
 | 
			
		||||
⍝ ⍕⎕TS
 | 
			
		||||
)OFF
 | 
			
		||||
							
								
								
									
										70
									
								
								samples/Alpine Abuild/filenames/APKBUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								samples/Alpine Abuild/filenames/APKBUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,70 @@
 | 
			
		||||
# Contributor: Natanael Copa <ncopa@alpinelinux.org>
 | 
			
		||||
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
 | 
			
		||||
pkgname=abuild
 | 
			
		||||
pkgver=2.27.0
 | 
			
		||||
_ver=${pkgver%_git*}
 | 
			
		||||
pkgrel=0
 | 
			
		||||
pkgdesc="Script to build Alpine Packages"
 | 
			
		||||
url="http://git.alpinelinux.org/cgit/abuild/"
 | 
			
		||||
arch="all"
 | 
			
		||||
license="GPL2"
 | 
			
		||||
depends="fakeroot sudo pax-utils openssl apk-tools>=2.0.7-r1 libc-utils
 | 
			
		||||
	attr tar pkgconf patch"
 | 
			
		||||
if [ "$CBUILD" = "$CHOST" ]; then
 | 
			
		||||
	depends="$depends curl"
 | 
			
		||||
fi
 | 
			
		||||
makedepends_build="pkgconfig"
 | 
			
		||||
makedepends_host="openssl-dev"
 | 
			
		||||
makedepends="$makedepends_host $makedepends_build"
 | 
			
		||||
install="$pkgname.pre-install $pkgname.pre-upgrade"
 | 
			
		||||
subpackages="apkbuild-cpan:cpan apkbuild-gem-resolver:gems"
 | 
			
		||||
options="suid"
 | 
			
		||||
pkggroups="abuild"
 | 
			
		||||
source="http://dev.alpinelinux.org/archive/abuild/abuild-$_ver.tar.xz
 | 
			
		||||
	"
 | 
			
		||||
 | 
			
		||||
_builddir="$srcdir/$pkgname-$_ver"
 | 
			
		||||
prepare() {
 | 
			
		||||
	cd "$_builddir"
 | 
			
		||||
	for i in $source; do
 | 
			
		||||
		case $i in
 | 
			
		||||
		*.patch)
 | 
			
		||||
			msg "Applying $i"
 | 
			
		||||
			patch -p1 -i "$srcdir"/$i || return 1
 | 
			
		||||
			;;
 | 
			
		||||
		esac
 | 
			
		||||
	done
 | 
			
		||||
	sed -i -e "/^CHOST=/s/=.*/=$CHOST/" abuild.conf
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
build() {
 | 
			
		||||
	cd "$_builddir"
 | 
			
		||||
	make || return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
package() {
 | 
			
		||||
	cd "$_builddir"
 | 
			
		||||
	make install DESTDIR="$pkgdir" || return 1
 | 
			
		||||
	install -m 644 abuild.conf "$pkgdir"/etc/abuild.conf || return 1
 | 
			
		||||
	install -d -m 775 -g abuild "$pkgdir"/var/cache/distfiles || return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cpan() {
 | 
			
		||||
	pkgdesc="Script to generate perl APKBUILD from CPAN"
 | 
			
		||||
	depends="perl perl-libwww perl-json"
 | 
			
		||||
	arch="noarch"
 | 
			
		||||
	mkdir -p "$subpkgdir"/usr/bin
 | 
			
		||||
	mv "$pkgdir"/usr/bin/apkbuild-cpan "$subpkgdir"/usr/bin/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
gems() {
 | 
			
		||||
	pkgdesc="APKBUILD dependency resolver for RubyGems"
 | 
			
		||||
	depends="ruby ruby-augeas"
 | 
			
		||||
	arch="noarch"
 | 
			
		||||
	mkdir -p "$subpkgdir"/usr/bin
 | 
			
		||||
	mv "$pkgdir"/usr/bin/apkbuild-gem-resolver "$subpkgdir"/usr/bin/
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
md5sums="c67e4c971c54b4d550e16db3ba331f96  abuild-2.27.0.tar.xz"
 | 
			
		||||
sha256sums="c8db017e3dd168edb20ceeb91971535cf66b8c95f29d3288f88ac755bffc60e5  abuild-2.27.0.tar.xz"
 | 
			
		||||
sha512sums="98e1da4e47f3ab68700b3bc992c83e103f770f3196e433788ee74145f57cd33e5239c87f0a7a15f7266840d5bad893fc8c0d4c826d663df53deaee2678c56984  abuild-2.27.0.tar.xz"
 | 
			
		||||
							
								
								
									
										397
									
								
								samples/C/main.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										397
									
								
								samples/C/main.c
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,397 @@
 | 
			
		||||
// Copyright 2014 the V8 project authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style license that can be
 | 
			
		||||
// found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
#include "src/runtime/runtime-utils.h"
 | 
			
		||||
 | 
			
		||||
#include "src/arguments.h"
 | 
			
		||||
#include "src/compiler.h"
 | 
			
		||||
#include "src/deoptimizer.h"
 | 
			
		||||
#include "src/frames-inl.h"
 | 
			
		||||
#include "src/full-codegen/full-codegen.h"
 | 
			
		||||
#include "src/isolate-inl.h"
 | 
			
		||||
#include "src/messages.h"
 | 
			
		||||
#include "src/v8threads.h"
 | 
			
		||||
#include "src/vm-state-inl.h"
 | 
			
		||||
 | 
			
		||||
namespace v8 {
 | 
			
		||||
namespace internal {
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_CompileLazy) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK_EQ(1, args.length());
 | 
			
		||||
	CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	if (FLAG_trace_lazy && !function->shared()->is_compiled()) {
 | 
			
		||||
		PrintF("[unoptimized: ");
 | 
			
		||||
		function->PrintName();
 | 
			
		||||
		PrintF("]\n");
 | 
			
		||||
	}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
	StackLimitCheck check(isolate);
 | 
			
		||||
	if (check.JsHasOverflowed(1 * KB)) return isolate->StackOverflow();
 | 
			
		||||
	if (!Compiler::Compile(function, Compiler::KEEP_EXCEPTION)) {
 | 
			
		||||
		return isolate->heap()->exception();
 | 
			
		||||
	}
 | 
			
		||||
	DCHECK(function->is_compiled());
 | 
			
		||||
	return function->code();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_CompileBaseline) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK_EQ(1, args.length());
 | 
			
		||||
	CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
 | 
			
		||||
	StackLimitCheck check(isolate);
 | 
			
		||||
	if (check.JsHasOverflowed(1 * KB)) return isolate->StackOverflow();
 | 
			
		||||
	if (!Compiler::CompileBaseline(function)) {
 | 
			
		||||
		return isolate->heap()->exception();
 | 
			
		||||
	}
 | 
			
		||||
	DCHECK(function->is_compiled());
 | 
			
		||||
	return function->code();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_CompileOptimized_Concurrent) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK_EQ(1, args.length());
 | 
			
		||||
	CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
 | 
			
		||||
	StackLimitCheck check(isolate);
 | 
			
		||||
	if (check.JsHasOverflowed(1 * KB)) return isolate->StackOverflow();
 | 
			
		||||
	if (!Compiler::CompileOptimized(function, Compiler::CONCURRENT)) {
 | 
			
		||||
		return isolate->heap()->exception();
 | 
			
		||||
	}
 | 
			
		||||
	DCHECK(function->is_compiled());
 | 
			
		||||
	return function->code();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_CompileOptimized_NotConcurrent) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK_EQ(1, args.length());
 | 
			
		||||
	CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
 | 
			
		||||
	StackLimitCheck check(isolate);
 | 
			
		||||
	if (check.JsHasOverflowed(1 * KB)) return isolate->StackOverflow();
 | 
			
		||||
	if (!Compiler::CompileOptimized(function, Compiler::NOT_CONCURRENT)) {
 | 
			
		||||
		return isolate->heap()->exception();
 | 
			
		||||
	}
 | 
			
		||||
	DCHECK(function->is_compiled());
 | 
			
		||||
	return function->code();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_NotifyStubFailure) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK(args.length() == 0);
 | 
			
		||||
	Deoptimizer* deoptimizer = Deoptimizer::Grab(isolate);
 | 
			
		||||
	DCHECK(AllowHeapAllocation::IsAllowed());
 | 
			
		||||
	delete deoptimizer;
 | 
			
		||||
	return isolate->heap()->undefined_value();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ActivationsFinder : public ThreadVisitor {
 | 
			
		||||
public:
 | 
			
		||||
	Code* code_;
 | 
			
		||||
	bool has_code_activations_;
 | 
			
		||||
 | 
			
		||||
	explicit ActivationsFinder(Code* code)
 | 
			
		||||
		: code_(code), has_code_activations_(false) {}
 | 
			
		||||
 | 
			
		||||
	void VisitThread(Isolate* isolate, ThreadLocalTop* top) {
 | 
			
		||||
		JavaScriptFrameIterator it(isolate, top);
 | 
			
		||||
		VisitFrames(&it);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	void VisitFrames(JavaScriptFrameIterator* it) {
 | 
			
		||||
		for (; !it->done(); it->Advance()) {
 | 
			
		||||
			JavaScriptFrame* frame = it->frame();
 | 
			
		||||
			if (code_->contains(frame->pc())) has_code_activations_ = true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_NotifyDeoptimized) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK(args.length() == 1);
 | 
			
		||||
	CONVERT_SMI_ARG_CHECKED(type_arg, 0);
 | 
			
		||||
	Deoptimizer::BailoutType type =
 | 
			
		||||
		static_cast<Deoptimizer::BailoutType>(type_arg);
 | 
			
		||||
	Deoptimizer* deoptimizer = Deoptimizer::Grab(isolate);
 | 
			
		||||
	DCHECK(AllowHeapAllocation::IsAllowed());
 | 
			
		||||
	TimerEventScope<TimerEventDeoptimizeCode> timer(isolate);
 | 
			
		||||
	TRACE_EVENT0("v8", "V8.DeoptimizeCode");
 | 
			
		||||
 | 
			
		||||
	Handle<JSFunction> function = deoptimizer->function();
 | 
			
		||||
	Handle<Code> optimized_code = deoptimizer->compiled_code();
 | 
			
		||||
 | 
			
		||||
	DCHECK(optimized_code->kind() == Code::OPTIMIZED_FUNCTION);
 | 
			
		||||
	DCHECK(type == deoptimizer->bailout_type());
 | 
			
		||||
 | 
			
		||||
	// Make sure to materialize objects before causing any allocation.
 | 
			
		||||
	JavaScriptFrameIterator it(isolate);
 | 
			
		||||
	deoptimizer->MaterializeHeapObjects(&it);
 | 
			
		||||
	delete deoptimizer;
 | 
			
		||||
 | 
			
		||||
	// Ensure the context register is updated for materialized objects.
 | 
			
		||||
	JavaScriptFrameIterator top_it(isolate);
 | 
			
		||||
	JavaScriptFrame* top_frame = top_it.frame();
 | 
			
		||||
	isolate->set_context(Context::cast(top_frame->context()));
 | 
			
		||||
 | 
			
		||||
	if (type == Deoptimizer::LAZY) {
 | 
			
		||||
		return isolate->heap()->undefined_value();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Search for other activations of the same optimized code.
 | 
			
		||||
	// At this point {it} is at the topmost frame of all the frames materialized
 | 
			
		||||
	// by the deoptimizer. Note that this frame does not necessarily represent
 | 
			
		||||
	// an activation of {function} because of potential inlined tail-calls.
 | 
			
		||||
	ActivationsFinder activations_finder(*optimized_code);
 | 
			
		||||
	activations_finder.VisitFrames(&it);
 | 
			
		||||
	isolate->thread_manager()->IterateArchivedThreads(&activations_finder);
 | 
			
		||||
 | 
			
		||||
	if (!activations_finder.has_code_activations_) {
 | 
			
		||||
		if (function->code() == *optimized_code) {
 | 
			
		||||
			if (FLAG_trace_deopt) {
 | 
			
		||||
				PrintF("[removing optimized code for: ");
 | 
			
		||||
				function->PrintName();
 | 
			
		||||
				PrintF("]\n");
 | 
			
		||||
			}
 | 
			
		||||
			function->ReplaceCode(function->shared()->code());
 | 
			
		||||
		}
 | 
			
		||||
		// Evict optimized code for this function from the cache so that it
 | 
			
		||||
		// doesn't get used for new closures.
 | 
			
		||||
		function->shared()->EvictFromOptimizedCodeMap(*optimized_code, "notify deoptimized");
 | 
			
		||||
	} else {
 | 
			
		||||
		// TODO(titzer): we should probably do DeoptimizeCodeList(code)
 | 
			
		||||
		// unconditionally if the code is not already marked for deoptimization.
 | 
			
		||||
		// If there is an index by shared function info, all the better.
 | 
			
		||||
		Deoptimizer::DeoptimizeFunction(*function);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return isolate->heap()->undefined_value();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static bool IsSuitableForOnStackReplacement(
 | 
			
		||||
	Isolate* isolate,
 | 
			
		||||
	Handle<JSFunction> function
 | 
			
		||||
) {
 | 
			
		||||
	// Keep track of whether we've succeeded in optimizing.
 | 
			
		||||
	if (function->shared()->optimization_disabled()) return false;
 | 
			
		||||
	// If we are trying to do OSR when there are already optimized
 | 
			
		||||
	// activations of the function, it means (a) the function is directly or
 | 
			
		||||
	// indirectly recursive and (b) an optimized invocation has been
 | 
			
		||||
	// deoptimized so that we are currently in an unoptimized activation.
 | 
			
		||||
	// Check for optimized activations of this function.
 | 
			
		||||
	for (JavaScriptFrameIterator it(isolate); !it.done(); it.Advance()) {
 | 
			
		||||
		JavaScriptFrame* frame = it.frame();
 | 
			
		||||
		if (frame->is_optimized() && frame->function() == *function) return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_CompileForOnStackReplacement) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK(args.length() == 1);
 | 
			
		||||
	CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
 | 
			
		||||
	Handle<Code> caller_code(function->shared()->code());
 | 
			
		||||
 | 
			
		||||
	// We're not prepared to handle a function with arguments object.
 | 
			
		||||
	DCHECK(!function->shared()->uses_arguments());
 | 
			
		||||
 | 
			
		||||
	RUNTIME_ASSERT(FLAG_use_osr);
 | 
			
		||||
 | 
			
		||||
	// Passing the PC in the javascript frame from the caller directly is
 | 
			
		||||
	// not GC safe, so we walk the stack to get it.
 | 
			
		||||
	JavaScriptFrameIterator it(isolate);
 | 
			
		||||
	JavaScriptFrame* frame = it.frame();
 | 
			
		||||
	if (!caller_code->contains(frame->pc())) {
 | 
			
		||||
		// Code on the stack may not be the code object referenced by the shared
 | 
			
		||||
		// function info.	It may have been replaced to include deoptimization data.
 | 
			
		||||
		caller_code = Handle<Code>(frame->LookupCode());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	uint32_t pc_offset =
 | 
			
		||||
		static_cast<uint32_t>(frame->pc() - caller_code->instruction_start());
 | 
			
		||||
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
	DCHECK_EQ(frame->function(), *function);
 | 
			
		||||
	DCHECK_EQ(frame->LookupCode(), *caller_code);
 | 
			
		||||
	DCHECK(caller_code->contains(frame->pc()));
 | 
			
		||||
#endif	// DEBUG
 | 
			
		||||
 | 
			
		||||
	BailoutId ast_id = caller_code->TranslatePcOffsetToAstId(pc_offset);
 | 
			
		||||
	DCHECK(!ast_id.IsNone());
 | 
			
		||||
 | 
			
		||||
	MaybeHandle<Code> maybe_result;
 | 
			
		||||
	if (IsSuitableForOnStackReplacement(isolate, function)) {
 | 
			
		||||
		if (FLAG_trace_osr) {
 | 
			
		||||
			PrintF("[OSR - Compiling: ");
 | 
			
		||||
			function->PrintName();
 | 
			
		||||
			PrintF(" at -*- scheme -*- %d]\n", ast_id.ToInt());
 | 
			
		||||
		}
 | 
			
		||||
		maybe_result = Compiler::GetOptimizedCodeForOSR(function, ast_id, frame);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Revert the patched back edge table, regardless of whether OSR succeeds.
 | 
			
		||||
	BackEdgeTable::Revert(isolate, *caller_code);
 | 
			
		||||
 | 
			
		||||
	// Check whether we ended up with usable optimized code.
 | 
			
		||||
	Handle<Code> result;
 | 
			
		||||
	if (maybe_result.ToHandle(&result)
 | 
			
		||||
	&& result->kind() == Code::OPTIMIZED_FUNCTION) {
 | 
			
		||||
		DeoptimizationInputData* data =
 | 
			
		||||
			DeoptimizationInputData::cast(result->deoptimization_data());
 | 
			
		||||
		
 | 
			
		||||
		if (data->OsrPcOffset()->value() >= 0) {
 | 
			
		||||
			DCHECK(BailoutId(data->OsrAstId()->value()) == ast_id);
 | 
			
		||||
			if (FLAG_trace_osr) {
 | 
			
		||||
				PrintF("[OSR - Entry at AST id %d, offset %d in optimized code]\n",
 | 
			
		||||
					ast_id.ToInt(), data->OsrPcOffset()->value());
 | 
			
		||||
			}
 | 
			
		||||
			// TODO(titzer): this is a massive hack to make the deopt counts
 | 
			
		||||
			// match. Fix heuristics for reenabling optimizations!
 | 
			
		||||
			function->shared()->increment_deopt_count();
 | 
			
		||||
 | 
			
		||||
			if (result->is_turbofanned()) {
 | 
			
		||||
				// TurboFanned OSR code cannot be installed into the function.
 | 
			
		||||
				// But the function is obviously hot, so optimize it next time.
 | 
			
		||||
				function->ReplaceCode(
 | 
			
		||||
					isolate->builtins()->builtin(Builtins::kCompileOptimized));
 | 
			
		||||
			} else {
 | 
			
		||||
				// Crankshafted OSR code can be installed into the function.
 | 
			
		||||
				function->ReplaceCode(*result);
 | 
			
		||||
			}
 | 
			
		||||
			return *result;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Failed.
 | 
			
		||||
	if (FLAG_trace_osr) {
 | 
			
		||||
		PrintF("[OSR - Failed: ");
 | 
			
		||||
		function->PrintName();
 | 
			
		||||
		PrintF(" at AST id %d]\n", ast_id.ToInt());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (!function->IsOptimized()) {
 | 
			
		||||
		function->ReplaceCode(function->shared()->code());
 | 
			
		||||
	}
 | 
			
		||||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_TryInstallOptimizedCode) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK(args.length() == 1);
 | 
			
		||||
	CONVERT_ARG_HANDLE_CHECKED(JSFunction, function, 0);
 | 
			
		||||
 | 
			
		||||
	// First check if this is a real stack overflow.
 | 
			
		||||
	StackLimitCheck check(isolate);
 | 
			
		||||
	if (check.JsHasOverflowed()) {
 | 
			
		||||
		SealHandleScope shs(isolate);
 | 
			
		||||
		return isolate->StackOverflow();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	isolate->optimizing_compile_dispatcher()->InstallOptimizedFunctions();
 | 
			
		||||
	return (function->IsOptimized())
 | 
			
		||||
		? function->code()
 | 
			
		||||
		: function->shared()->code();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool CodeGenerationFromStringsAllowed(
 | 
			
		||||
	Isolate* isolate,
 | 
			
		||||
	Handle<Context> context
 | 
			
		||||
){
 | 
			
		||||
	DCHECK(context->allow_code_gen_from_strings()->IsFalse());
 | 
			
		||||
	// Check with callback if set.
 | 
			
		||||
	AllowCodeGenerationFromStringsCallback callback =
 | 
			
		||||
			isolate->allow_code_gen_callback();
 | 
			
		||||
	if (callback == NULL) {
 | 
			
		||||
		// No callback set and code generation disallowed.
 | 
			
		||||
		return false;
 | 
			
		||||
	} else {
 | 
			
		||||
		// Callback set. Let it decide if code generation is allowed.
 | 
			
		||||
		VMState<EXTERNAL> state(isolate);
 | 
			
		||||
		return callback(v8::Utils::ToLocal(context));
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static Object* CompileGlobalEval(
 | 
			
		||||
	Isolate* isolate,
 | 
			
		||||
	Handle<String> source,
 | 
			
		||||
	Handle<SharedFunctionInfo> outer_info,
 | 
			
		||||
	LanguageMode language_mode,
 | 
			
		||||
	int eval_scope_position,
 | 
			
		||||
	int eval_position
 | 
			
		||||
){
 | 
			
		||||
	Handle<Context> context = Handle<Context>(isolate->context());
 | 
			
		||||
	Handle<Context> native_context = Handle<Context>(context->native_context());
 | 
			
		||||
 | 
			
		||||
	// Check if native context allows code generation from
 | 
			
		||||
	// strings. Throw an exception if it doesn't.
 | 
			
		||||
	if (native_context->allow_code_gen_from_strings()->IsFalse() &&
 | 
			
		||||
	!CodeGenerationFromStringsAllowed(isolate, native_context)) {
 | 
			
		||||
		Handle<Object> error_message =
 | 
			
		||||
				native_context->ErrorMessageForCodeGenerationFromStrings();
 | 
			
		||||
		Handle<Object> error;
 | 
			
		||||
		MaybeHandle<Object> maybe_error = isolate->factory()->NewEvalError(
 | 
			
		||||
				MessageTemplate::kCodeGenFromStrings, error_message);
 | 
			
		||||
		if (maybe_error.ToHandle(&error)) isolate->Throw(*error);
 | 
			
		||||
		return isolate->heap()->exception();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Deal with a normal eval call with a string argument. Compile it
 | 
			
		||||
	// and return the compiled function bound in the local context.
 | 
			
		||||
	static const ParseRestriction restriction = NO_PARSE_RESTRICTION;
 | 
			
		||||
	Handle<JSFunction> compiled;
 | 
			
		||||
	ASSIGN_RETURN_ON_EXCEPTION_VALUE(
 | 
			
		||||
		isolate, compiled,
 | 
			
		||||
		Compiler::GetFunctionFromEval(
 | 
			
		||||
			source, outer_info, context, language_mode,
 | 
			
		||||
			restriction, eval_scope_position, eval_position
 | 
			
		||||
		),
 | 
			
		||||
		isolate->heap()->exception()
 | 
			
		||||
	);
 | 
			
		||||
	return *compiled;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
RUNTIME_FUNCTION(Runtime_ResolvePossiblyDirectEval) {
 | 
			
		||||
	HandleScope scope(isolate);
 | 
			
		||||
	DCHECK(args.length() == 6);
 | 
			
		||||
 | 
			
		||||
	Handle<Object> callee = args.at<Object>(0);
 | 
			
		||||
 | 
			
		||||
	// If "eval" didn't refer to the original GlobalEval, it's not a
 | 
			
		||||
	// direct call to eval.
 | 
			
		||||
	// (And even if it is, but the first argument isn't a string, just let
 | 
			
		||||
	// execution default to an indirect call to eval, which will also return
 | 
			
		||||
	// the first argument without doing anything).
 | 
			
		||||
	if (*callee != isolate->native_context()->global_eval_fun() || !args[1]->IsString()) {
 | 
			
		||||
		return *callee;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	DCHECK(args[3]->IsSmi());
 | 
			
		||||
	DCHECK(is_valid_language_mode(args.smi_at(3)));
 | 
			
		||||
	LanguageMode language_mode = static_cast<LanguageMode>(args.smi_at(3));
 | 
			
		||||
	DCHECK(args[4]->IsSmi());
 | 
			
		||||
	Handle<SharedFunctionInfo> outer_info(args.at<JSFunction>(2)->shared(), isolate);
 | 
			
		||||
	return CompileGlobalEval(
 | 
			
		||||
		isolate,
 | 
			
		||||
		args.at<String>(1),
 | 
			
		||||
		outer_info,
 | 
			
		||||
		language_mode,
 | 
			
		||||
		args.smi_at(4),
 | 
			
		||||
		args.smi_at(5)
 | 
			
		||||
	);
 | 
			
		||||
}
 | 
			
		||||
}	// namespace internal
 | 
			
		||||
}	// namespace v8
 | 
			
		||||
 | 
			
		||||
/* vim: set shiftwidth=4 softtabstop=0 cindent cinoptions={1s: */
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										21
									
								
								samples/Csound Document/allglass.csd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										21
									
								
								samples/Csound Document/allglass.csd
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
<CsoundSynthesizer>
 | 
			
		||||
<CsInstruments>
 | 
			
		||||
sr     = 44100
 | 
			
		||||
kr     = 44100
 | 
			
		||||
ksmps  = 1
 | 
			
		||||
nchnls = 2
 | 
			
		||||
 | 
			
		||||
; pvanal -n 512 -w 8 allglass1-L.wav allglass1-L.pvc
 | 
			
		||||
; pvanal -n 512 -w 8 allglass1-R.wav allglass1-R.pvc
 | 
			
		||||
instr 1
 | 
			
		||||
  ktime line 0, p3, 17.5018
 | 
			
		||||
  arL pvoc ktime, 1, "allglass1-L.pvc"
 | 
			
		||||
  arR pvoc ktime, 1, "allglass1-R.pvc"
 | 
			
		||||
  out arL, arR
 | 
			
		||||
endin
 | 
			
		||||
</CsInstruments>
 | 
			
		||||
<CsScore>
 | 
			
		||||
i 1 0 70.0073
 | 
			
		||||
e
 | 
			
		||||
</CsScore>
 | 
			
		||||
</CsoundSynthesizer>
 | 
			
		||||
							
								
								
									
										34
									
								
								samples/Csound Document/interp.csd
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										34
									
								
								samples/Csound Document/interp.csd
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,34 @@
 | 
			
		||||
<CsoundSynthesizer>
 | 
			
		||||
<CsInstruments>
 | 
			
		||||
sr     = 44100
 | 
			
		||||
kr     = 44100
 | 
			
		||||
ksmps  = 1
 | 
			
		||||
nchnls = 2
 | 
			
		||||
 | 
			
		||||
; pvanal -n 1024 -w 2 partA-L.wav partA-L.pvc
 | 
			
		||||
; pvanal -n 1024 -w 2 partA-R.wav partA-R.pvc
 | 
			
		||||
; pvanal -n 1024 -w 2 partB.wav partB.pvc
 | 
			
		||||
instr 1
 | 
			
		||||
  iscale = 1
 | 
			
		||||
 | 
			
		||||
  ktimpnt1     line 0, iscale*(82196/44100), 82196/44100
 | 
			
		||||
  ktimpnt2     linseg 0, iscale*1.25, 0, iscale*(103518/44100), 103518/44100
 | 
			
		||||
  kfreqscale   linseg 1, iscale*0.5, 1, iscale*1.6, 0.8
 | 
			
		||||
  kfreqinterpL linseg 0, iscale*0.25, 0, iscale*1.6, 1
 | 
			
		||||
  kampinterpL  linseg 0, iscale*0.25, 0, iscale*1.6, 1
 | 
			
		||||
  kfreqinterpR linseg 0, iscale*0.5, 0, iscale*1.2, 1
 | 
			
		||||
  kampinterpR  linseg 0, iscale*0.5, 0, iscale*1.2, 1
 | 
			
		||||
 | 
			
		||||
        pvbufread ktimpnt1, "partB.pvc"
 | 
			
		||||
  apvcL pvinterp ktimpnt2, 1, "partA-L.pvc", kfreqscale, 1, 1, 1, 1-kfreqinterpL, 1-kampinterpL
 | 
			
		||||
        pvbufread ktimpnt1, "partB.pvc"
 | 
			
		||||
  apvcR pvinterp ktimpnt2, 1, "partA-R.pvc", kfreqscale, 1, 1, 1, 1-kfreqinterpR, 1-kampinterpR
 | 
			
		||||
 | 
			
		||||
  outs apvcL*0.8, apvcR*0.8
 | 
			
		||||
endin
 | 
			
		||||
</CsInstruments>
 | 
			
		||||
<CsScore>
 | 
			
		||||
i 1 0 7
 | 
			
		||||
e
 | 
			
		||||
</CsScore>
 | 
			
		||||
</CsoundSynthesizer>
 | 
			
		||||
							
								
								
									
										253
									
								
								samples/Csound Document/test.csd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										253
									
								
								samples/Csound Document/test.csd
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,253 @@
 | 
			
		||||
<CsoundSynthesizer>
 | 
			
		||||
<CsInstruments>
 | 
			
		||||
// Csound single-line comments can be preceded by a pair of forward slashes...
 | 
			
		||||
; ...or a semicolon.
 | 
			
		||||
 | 
			
		||||
/* Block comments begin with /* and end with */
 | 
			
		||||
 | 
			
		||||
// Orchestras begin with a header of audio parameters.
 | 
			
		||||
nchnls = 1
 | 
			
		||||
nchnls_i = 1
 | 
			
		||||
sr = 44100
 | 
			
		||||
0dbfs = 1
 | 
			
		||||
ksmps = 10
 | 
			
		||||
 | 
			
		||||
// The control rate kr = sr / ksmps can be omitted when the number of audio
 | 
			
		||||
// samples in a control period (ksmps) is set, but kr may appear in older
 | 
			
		||||
// orchestras.
 | 
			
		||||
kr = 4410
 | 
			
		||||
 | 
			
		||||
// Orchestras contain instruments. These begin with the keyword instr followed
 | 
			
		||||
// by a comma-separated list of numbers or names of the instrument. Instruments
 | 
			
		||||
// end at the endin keyword and cannot be nested.
 | 
			
		||||
instr 1, N_a_M_e_, +Name
 | 
			
		||||
  // Instruments contain statements. Here is a typical statement:
 | 
			
		||||
  aSignal oscil 0dbfs, 440, 1
 | 
			
		||||
  // Statements are terminated with a newline (possibly preceded by a comment).
 | 
			
		||||
  // To write a statement on several lines, precede the newline with a
 | 
			
		||||
  // backslash.
 | 
			
		||||
  prints \
 | 
			
		||||
    "hello, world\n";comment
 | 
			
		||||
 | 
			
		||||
  // Csound 6 introduced function syntax for opcodes with one or zero outputs.
 | 
			
		||||
  // The oscil statement above is the same as
 | 
			
		||||
  aSignal = oscil(0dbfs, 440, 1)
 | 
			
		||||
 | 
			
		||||
  // Instruments can contain control structures.
 | 
			
		||||
  kNote = p3
 | 
			
		||||
  if (kNote == 0) then
 | 
			
		||||
    kFrequency = 220
 | 
			
		||||
  elseif kNote == 1 then // Parentheses around binary expressions are optional.
 | 
			
		||||
    kFrequency = 440
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  // Csound 6 introduced looping structures.
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
  while iIndex < 5 do
 | 
			
		||||
    print iIndex
 | 
			
		||||
    iIndex += 1
 | 
			
		||||
  od
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
  until iIndex >= 5 do
 | 
			
		||||
    print iIndex
 | 
			
		||||
    iIndex += 1
 | 
			
		||||
  enduntil
 | 
			
		||||
  // Both kinds of loops can be terminated by either od or enduntil.
 | 
			
		||||
 | 
			
		||||
  // Single-line strings are enclosed in double-quotes.
 | 
			
		||||
  prints "string\\\r\n\t\""
 | 
			
		||||
  // Multi-line strings are enclosed in pairs of curly braces.
 | 
			
		||||
  prints {{
 | 
			
		||||
    hello,
 | 
			
		||||
 | 
			
		||||
    world
 | 
			
		||||
  }}
 | 
			
		||||
 | 
			
		||||
  // Instruments often end with a statement containing an output opcode.
 | 
			
		||||
  outc aSignal
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Orchestras can also contain user-defined opcodes (UDOs). Here is an
 | 
			
		||||
// oscillator with one audio-rate output and two control-rate inputs:
 | 
			
		||||
opcode anOscillator, a, kk
 | 
			
		||||
  kAmplitude, kFrequency xin
 | 
			
		||||
  aSignal vco2 kAmplitude, kFrequency
 | 
			
		||||
  xout aSignal
 | 
			
		||||
endop
 | 
			
		||||
instr TestOscillator
 | 
			
		||||
  outc(anOscillator(0dbfs, 110))
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Python can be executed in Csound
 | 
			
		||||
// <https://csound.github.io/docs/manual/pyrun.html>. So can Lua
 | 
			
		||||
// <https://csound.github.io/docs/manual/lua.html>.
 | 
			
		||||
pyruni {{
 | 
			
		||||
import random
 | 
			
		||||
 | 
			
		||||
pool = [(1 + i / 10.0) ** 1.2 for i in range(100)]
 | 
			
		||||
 | 
			
		||||
def get_number_from_pool(n, p):
 | 
			
		||||
  if random.random() < p:
 | 
			
		||||
    i = int(random.random() * len(pool))
 | 
			
		||||
    pool[i] = n;
 | 
			
		||||
  return random.choice(pool)
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
// The Csound preprocessor supports conditional compilation and including files.
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
#undef DEBUG
 | 
			
		||||
#include "filename.orc"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// The preprocessor also supports object- and function-like macros. This is an
 | 
			
		||||
// object-like macro that defines a number:
 | 
			
		||||
#define A_HZ #440#
 | 
			
		||||
 | 
			
		||||
// This is a function-like macro:
 | 
			
		||||
#define OSCIL_MACRO(VOLUME'FREQUENCY'TABLE) #oscil $VOLUME, $FREQUENCY, $TABLE#
 | 
			
		||||
 | 
			
		||||
// Bodies of macros are enclosed in # and can contain newlines. The arguments of
 | 
			
		||||
// function-like macros are separated by single-quotes. Uses of macros are
 | 
			
		||||
// prefixed with a dollar sign.
 | 
			
		||||
instr TestMacro
 | 
			
		||||
  aSignal $OSCIL_MACRO(1'$A_HZ'1)
 | 
			
		||||
  // Not unlike PHP, macros expand in double-quoted strings.
 | 
			
		||||
  prints "The frequency of the oscillator is $A_HZ Hz.\n"
 | 
			
		||||
  out aSignal
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Here are other things to note about Csound.
 | 
			
		||||
 | 
			
		||||
// There are two bitwise NOT operators, ~ and ¬ (U+00AC). The latter is common
 | 
			
		||||
// on keyboards in the United Kingdom
 | 
			
		||||
// <https://en.wikipedia.org/wiki/British_and_American_keyboards>.
 | 
			
		||||
instr TestBitwiseNOT
 | 
			
		||||
  print ~42
 | 
			
		||||
  print ¬42
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Csound uses # for bitwise XOR, which the Csound manual calls bitwise
 | 
			
		||||
// non-equivalence <https://csound.github.io/docs/manual/opnonequiv.html>.
 | 
			
		||||
instr TestBitwiseXOR
 | 
			
		||||
  print 0 # 0
 | 
			
		||||
  print 0 # 1
 | 
			
		||||
  print 1 # 0
 | 
			
		||||
  print 1 # 1
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Loops and if-then statements are relatively recent additions to Csound. There
 | 
			
		||||
// are many flow-control opcodes that involve goto and labels.
 | 
			
		||||
instr TestGoto
 | 
			
		||||
  // This...
 | 
			
		||||
  if p3 > 0 goto if_label
 | 
			
		||||
  goto else_label
 | 
			
		||||
if_label:
 | 
			
		||||
  prints "if branch\n"
 | 
			
		||||
  goto endif_label
 | 
			
		||||
else_label:
 | 
			
		||||
  prints "else branch\n"
 | 
			
		||||
endif_label:
 | 
			
		||||
 | 
			
		||||
  // ...is the same as this.
 | 
			
		||||
  if p3 > 0 then
 | 
			
		||||
    prints "if branch\n"
 | 
			
		||||
  else
 | 
			
		||||
    prints "else branch\n"
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  // This...
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
loop_label:
 | 
			
		||||
  print iIndex
 | 
			
		||||
  iIndex += 1
 | 
			
		||||
  if iIndex < 10 goto loop_label
 | 
			
		||||
 | 
			
		||||
  // ...is the same as this...
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
loop_lt_label:
 | 
			
		||||
  print iIndex
 | 
			
		||||
  loop_lt iIndex, 1, 10, loop_lt_label
 | 
			
		||||
 | 
			
		||||
  // ...and this.
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
  while iIndex < 10 do
 | 
			
		||||
    print iIndex
 | 
			
		||||
    iIndex += 1
 | 
			
		||||
  od
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// The prints and printks opcodes
 | 
			
		||||
// <https://github.com/csound/csound/blob/develop/OOps/ugrw1.c#L831>, arguably
 | 
			
		||||
// the primary methods of logging output, treat certain sequences of characters
 | 
			
		||||
// different from printf in C.
 | 
			
		||||
instr TestPrints
 | 
			
		||||
  // ^ prints an ESCAPE character (U+001B), not a CIRCUMFLEX ACCENT character
 | 
			
		||||
  // (U+005E). ^^ prints a CIRCUMFLEX ACCENT.
 | 
			
		||||
  prints "^^\n"
 | 
			
		||||
  // ~ prints an ESCAPE character (U+001B) followed by a [, not a TILDE
 | 
			
		||||
  // character (U+007E). ~~ prints a TILDE.
 | 
			
		||||
  prints "~~\n"
 | 
			
		||||
  // \A, \B, \N, \R, and \T correspond to the escaped lowercase characters (that
 | 
			
		||||
  // is, BELL (U+0007), BACKSPACE (U+0008), new line (U+000A), CARRIAGE RETURN
 | 
			
		||||
  // (U+000D), and tab (U+0009)).
 | 
			
		||||
  prints "\T\R\N"
 | 
			
		||||
  // %n, %r, and %t are the same as \n, \r, and \t, as are %N, %R, and %T.
 | 
			
		||||
  prints "%t%r%n"
 | 
			
		||||
  // %! prints a semicolon. This is a hold-over from old versions of Csound that
 | 
			
		||||
  // allowed comments to begin in strings.
 | 
			
		||||
  prints "; %!\n"
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// The arguments of function-like macros can be separated by # instead of '.
 | 
			
		||||
// These two lines define the same macro.
 | 
			
		||||
#define OSCIL_MACRO(VOLUME'FREQUENCY'TABLE) #oscil $VOLUME, $FREQUENCY, $TABLE#
 | 
			
		||||
#define OSCIL_MACRO(VOLUME#FREQUENCY#TABLE) #oscil $VOLUME, $FREQUENCY, $TABLE#
 | 
			
		||||
 | 
			
		||||
// Uses of macros can optionally be suffixed with a period.
 | 
			
		||||
instr TestMacroPeriodSuffix
 | 
			
		||||
  aSignal $OSCIL_MACRO.(1'$A_HZ'1)
 | 
			
		||||
  prints "The frequency of the oscillator is $A_HZ.Hz.\n"
 | 
			
		||||
  out aSignal
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Csound has @ and @@ operator-like macros that, when followed by a literal
 | 
			
		||||
// non-negative integer, expand to the next power of 2 and the next power of 2
 | 
			
		||||
// plus 1:
 | 
			
		||||
//    @x = 2^(ceil(log2(x + 1))), x >= 0
 | 
			
		||||
//   @@0 = 2
 | 
			
		||||
//   @@x = 2^(ceil(log2(x))) + 1, x > 0
 | 
			
		||||
instr TestAt
 | 
			
		||||
  prints "%d  %2d  %2d\n", 0, @0, @@0
 | 
			
		||||
  prints "%d  %2d  %2d\n", 1, @1, @@1
 | 
			
		||||
  prints "%d  %2d  %2d\n", 2, @2, @@2
 | 
			
		||||
  prints "%d  %2d  %2d\n", 3, @3, @@3
 | 
			
		||||
  prints "%d  %2d  %2d\n", 4, @4, @@4
 | 
			
		||||
  prints "%d  %2d  %2d\n", 5, @5, @@5
 | 
			
		||||
  prints "%d  %2d  %2d\n", 6, @6, @@6
 | 
			
		||||
  prints "%d  %2d  %2d\n", 7, @7, @@7
 | 
			
		||||
  prints "%d  %2d  %2d\n", 8, @8, @@8
 | 
			
		||||
  prints "%d  %2d  %2d\n", 9, @9, @@9
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Including newlines in macros can lead to confusing code.
 | 
			
		||||
instr MacroAbuse
 | 
			
		||||
  if 1 == 1 then
 | 
			
		||||
    prints "on\n"
 | 
			
		||||
#define FOO#
 | 
			
		||||
BAR
 | 
			
		||||
#endif // This ends the if block. It is not a preprocessor directive.
 | 
			
		||||
endin
 | 
			
		||||
</CsInstruments>
 | 
			
		||||
<CsScore>
 | 
			
		||||
f 1 0 16384 10 1
 | 
			
		||||
i "N_a_M_e_" 0 2
 | 
			
		||||
i "TestOscillator" 2 2
 | 
			
		||||
i "TestBitwiseNOT" 0 1
 | 
			
		||||
i "TestBitwiseXOR" 0 1
 | 
			
		||||
i "TestGoto" 0 1
 | 
			
		||||
i "TestMacroPeriodSuffix" 4 1
 | 
			
		||||
i "TestAt" 0 1
 | 
			
		||||
i "MacroAbuse" 0 1
 | 
			
		||||
e
 | 
			
		||||
</CsScore>
 | 
			
		||||
</CsoundSynthesizer>
 | 
			
		||||
							
								
								
									
										2
									
								
								samples/Csound Score/allglass.sco
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								samples/Csound Score/allglass.sco
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
i 1 0 70.0073
 | 
			
		||||
e
 | 
			
		||||
							
								
								
									
										2
									
								
								samples/Csound Score/interp.sco
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								samples/Csound Score/interp.sco
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
i 1 0 7
 | 
			
		||||
e
 | 
			
		||||
							
								
								
									
										10
									
								
								samples/Csound Score/test.sco
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								samples/Csound Score/test.sco
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
f 1 0 16384 10 1
 | 
			
		||||
i "N_a_M_e_" 0 2
 | 
			
		||||
i "TestOscillator" 2 2
 | 
			
		||||
i "TestBitwiseNOT" 0 1
 | 
			
		||||
i "TestBitwiseXOR" 0 1
 | 
			
		||||
i "TestGoto" 0 1
 | 
			
		||||
i "TestMacroPeriodSuffix" 4 1
 | 
			
		||||
i "TestAt" 0 1
 | 
			
		||||
i "MacroAbuse" 0 1
 | 
			
		||||
e
 | 
			
		||||
							
								
								
									
										13
									
								
								samples/Csound/allglass.orc
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								samples/Csound/allglass.orc
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
sr     = 44100
 | 
			
		||||
kr     = 44100
 | 
			
		||||
ksmps  = 1
 | 
			
		||||
nchnls = 2
 | 
			
		||||
 | 
			
		||||
; pvanal -n 512 -w 8 allglass1-L.wav allglass1-L.pvc
 | 
			
		||||
; pvanal -n 512 -w 8 allglass1-R.wav allglass1-R.pvc
 | 
			
		||||
instr 1
 | 
			
		||||
  ktime line 0, p3, 17.5018
 | 
			
		||||
  arL pvoc ktime, 1, "allglass1-L.pvc"
 | 
			
		||||
  arR pvoc ktime, 1, "allglass1-R.pvc"
 | 
			
		||||
  out arL, arR
 | 
			
		||||
endin
 | 
			
		||||
							
								
								
									
										26
									
								
								samples/Csound/interp.orc
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								samples/Csound/interp.orc
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
sr     = 44100
 | 
			
		||||
kr     = 44100
 | 
			
		||||
ksmps  = 1
 | 
			
		||||
nchnls = 2
 | 
			
		||||
 | 
			
		||||
; pvanal -n 1024 -w 2 partA-L.wav partA-L.pvc
 | 
			
		||||
; pvanal -n 1024 -w 2 partA-R.wav partA-R.pvc
 | 
			
		||||
; pvanal -n 1024 -w 2 partB.wav partB.pvc
 | 
			
		||||
instr 1
 | 
			
		||||
  iscale = 1
 | 
			
		||||
 | 
			
		||||
  ktimpnt1     line 0, iscale*(82196/44100), 82196/44100
 | 
			
		||||
  ktimpnt2     linseg 0, iscale*1.25, 0, iscale*(103518/44100), 103518/44100
 | 
			
		||||
  kfreqscale   linseg 1, iscale*0.5, 1, iscale*1.6, 0.8
 | 
			
		||||
  kfreqinterpL linseg 0, iscale*0.25, 0, iscale*1.6, 1
 | 
			
		||||
  kampinterpL  linseg 0, iscale*0.25, 0, iscale*1.6, 1
 | 
			
		||||
  kfreqinterpR linseg 0, iscale*0.5, 0, iscale*1.2, 1
 | 
			
		||||
  kampinterpR  linseg 0, iscale*0.5, 0, iscale*1.2, 1
 | 
			
		||||
 | 
			
		||||
        pvbufread ktimpnt1, "partB.pvc"
 | 
			
		||||
  apvcL pvinterp ktimpnt2, 1, "partA-L.pvc", kfreqscale, 1, 1, 1, 1-kfreqinterpL, 1-kampinterpL
 | 
			
		||||
        pvbufread ktimpnt1, "partB.pvc"
 | 
			
		||||
  apvcR pvinterp ktimpnt2, 1, "partA-R.pvc", kfreqscale, 1, 1, 1, 1-kfreqinterpR, 1-kampinterpR
 | 
			
		||||
 | 
			
		||||
  outs apvcL*0.8, apvcR*0.8
 | 
			
		||||
endin
 | 
			
		||||
							
								
								
									
										250
									
								
								samples/Csound/test.orc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								samples/Csound/test.orc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,250 @@
 | 
			
		||||
// Csound single-line comments can be preceded by a pair of forward slashes...
 | 
			
		||||
; ...or a semicolon.
 | 
			
		||||
 | 
			
		||||
/* Block comments begin with /* and end with */
 | 
			
		||||
 | 
			
		||||
// Orchestras begin with a header of audio parameters.
 | 
			
		||||
nchnls = 1
 | 
			
		||||
nchnls_i = 1
 | 
			
		||||
sr = 44100
 | 
			
		||||
0dbfs = 1
 | 
			
		||||
ksmps = 10
 | 
			
		||||
 | 
			
		||||
// The control rate kr = sr / ksmps can be omitted when the number of audio
 | 
			
		||||
// samples in a control period (ksmps) is set, but kr may appear in older
 | 
			
		||||
// orchestras.
 | 
			
		||||
kr = 4410
 | 
			
		||||
 | 
			
		||||
// Orchestras contain instruments. These begin with the keyword instr followed
 | 
			
		||||
// by a comma-separated list of numbers or names of the instrument. Instruments
 | 
			
		||||
// end at the endin keyword and cannot be nested.
 | 
			
		||||
instr 1, N_a_M_e_, +Name
 | 
			
		||||
  // Instruments contain statements. Here is a typical statement:
 | 
			
		||||
  aSignal oscil 0dbfs, 440, 1
 | 
			
		||||
  // Statements are terminated with a newline (possibly preceded by a comment).
 | 
			
		||||
  // To write a statement on several lines, precede the newline with a
 | 
			
		||||
  // backslash.
 | 
			
		||||
  prints \
 | 
			
		||||
    "hello, world\n";comment
 | 
			
		||||
 | 
			
		||||
  // Csound 6 introduced function syntax for opcodes with one or zero outputs.
 | 
			
		||||
  // The oscil statement above is the same as
 | 
			
		||||
  aSignal = oscil(0dbfs, 440, 1)
 | 
			
		||||
 | 
			
		||||
  // Instruments can contain control structures.
 | 
			
		||||
  kNote = p3
 | 
			
		||||
  if (kNote == 0) then
 | 
			
		||||
    kFrequency = 220
 | 
			
		||||
  elseif kNote == 1 then // Parentheses around binary expressions are optional.
 | 
			
		||||
    kFrequency = 440
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  // Csound 6 introduced looping structures.
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
  while iIndex < 5 do
 | 
			
		||||
    print iIndex
 | 
			
		||||
    iIndex += 1
 | 
			
		||||
  od
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
  until iIndex >= 5 do
 | 
			
		||||
    print iIndex
 | 
			
		||||
    iIndex += 1
 | 
			
		||||
  enduntil
 | 
			
		||||
  // Both kinds of loops can be terminated by either od or enduntil.
 | 
			
		||||
 | 
			
		||||
  // Single-line strings are enclosed in double-quotes.
 | 
			
		||||
  prints "string\\\r\n\t\""
 | 
			
		||||
  // Multi-line strings are enclosed in pairs of curly braces.
 | 
			
		||||
  prints {{
 | 
			
		||||
    hello,
 | 
			
		||||
 | 
			
		||||
    world
 | 
			
		||||
  }}
 | 
			
		||||
 | 
			
		||||
  // Instruments often end with a statement containing an output opcode.
 | 
			
		||||
  outc aSignal
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Orchestras can also contain user-defined opcodes (UDOs). Here is an
 | 
			
		||||
// oscillator with one audio-rate output and two control-rate inputs:
 | 
			
		||||
opcode anOscillator, a, kk
 | 
			
		||||
  kAmplitude, kFrequency xin
 | 
			
		||||
  aSignal vco2 kAmplitude, kFrequency
 | 
			
		||||
  xout aSignal
 | 
			
		||||
endop
 | 
			
		||||
instr TestOscillator
 | 
			
		||||
  outc(anOscillator(0dbfs, 110))
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Python can be executed in Csound
 | 
			
		||||
// <https://csound.github.io/docs/manual/pyrun.html>. So can Lua
 | 
			
		||||
// <https://csound.github.io/docs/manual/lua.html>.
 | 
			
		||||
pyruni {{
 | 
			
		||||
import random
 | 
			
		||||
 | 
			
		||||
pool = [(1 + i / 10.0) ** 1.2 for i in range(100)]
 | 
			
		||||
 | 
			
		||||
def get_number_from_pool(n, p):
 | 
			
		||||
  if random.random() < p:
 | 
			
		||||
    i = int(random.random() * len(pool))
 | 
			
		||||
    pool[i] = n;
 | 
			
		||||
  return random.choice(pool)
 | 
			
		||||
}}
 | 
			
		||||
 | 
			
		||||
// The Csound preprocessor supports conditional compilation and including files.
 | 
			
		||||
#ifdef DEBUG
 | 
			
		||||
#undef DEBUG
 | 
			
		||||
#include "filename.orc"
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
// The preprocessor also supports object- and function-like macros. This is an
 | 
			
		||||
// object-like macro that defines a number:
 | 
			
		||||
#define A_HZ #440#
 | 
			
		||||
 | 
			
		||||
// This is a function-like macro:
 | 
			
		||||
#define OSCIL_MACRO(VOLUME'FREQUENCY'TABLE) #oscil $VOLUME, $FREQUENCY, $TABLE#
 | 
			
		||||
 | 
			
		||||
// Bodies of macros are enclosed in # and can contain newlines. The arguments of
 | 
			
		||||
// function-like macros are separated by single-quotes. Uses of macros are
 | 
			
		||||
// prefixed with a dollar sign.
 | 
			
		||||
instr TestMacro
 | 
			
		||||
  aSignal $OSCIL_MACRO(1'$A_HZ'1)
 | 
			
		||||
  // Not unlike PHP, macros expand in double-quoted strings.
 | 
			
		||||
  prints "The frequency of the oscillator is $A_HZ Hz.\n"
 | 
			
		||||
  out aSignal
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Here are other things to note about Csound.
 | 
			
		||||
 | 
			
		||||
// There are two bitwise NOT operators, ~ and ¬ (U+00AC). The latter is common
 | 
			
		||||
// on keyboards in the United Kingdom
 | 
			
		||||
// <https://en.wikipedia.org/wiki/British_and_American_keyboards>.
 | 
			
		||||
instr TestBitwiseNOT
 | 
			
		||||
  print ~42
 | 
			
		||||
  print ¬42
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Csound uses # for bitwise XOR, which the Csound manual calls bitwise
 | 
			
		||||
// non-equivalence <https://csound.github.io/docs/manual/opnonequiv.html>.
 | 
			
		||||
instr TestBitwiseXOR
 | 
			
		||||
  print 0 # 0
 | 
			
		||||
  print 0 # 1
 | 
			
		||||
  print 1 # 0
 | 
			
		||||
  print 1 # 1
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Loops and if-then statements are relatively recent additions to Csound. There
 | 
			
		||||
// are many flow-control opcodes that involve goto and labels.
 | 
			
		||||
instr TestGoto
 | 
			
		||||
  // This...
 | 
			
		||||
  if p3 > 0 goto if_label
 | 
			
		||||
  goto else_label
 | 
			
		||||
if_label:
 | 
			
		||||
  prints "if branch\n"
 | 
			
		||||
  goto endif_label
 | 
			
		||||
else_label:
 | 
			
		||||
  prints "else branch\n"
 | 
			
		||||
endif_label:
 | 
			
		||||
 | 
			
		||||
  // ...is the same as this.
 | 
			
		||||
  if p3 > 0 then
 | 
			
		||||
    prints "if branch\n"
 | 
			
		||||
  else
 | 
			
		||||
    prints "else branch\n"
 | 
			
		||||
  endif
 | 
			
		||||
 | 
			
		||||
  // This...
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
loop_label:
 | 
			
		||||
  print iIndex
 | 
			
		||||
  iIndex += 1
 | 
			
		||||
  if iIndex < 10 goto loop_label
 | 
			
		||||
 | 
			
		||||
  // ...is the same as this...
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
loop_lt_label:
 | 
			
		||||
  print iIndex
 | 
			
		||||
  loop_lt iIndex, 1, 10, loop_lt_label
 | 
			
		||||
 | 
			
		||||
  // ...and this.
 | 
			
		||||
  iIndex = 0
 | 
			
		||||
  while iIndex < 10 do
 | 
			
		||||
    print iIndex
 | 
			
		||||
    iIndex += 1
 | 
			
		||||
  od
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// The prints and printks opcodes
 | 
			
		||||
// <https://github.com/csound/csound/blob/develop/OOps/ugrw1.c#L831>, arguably
 | 
			
		||||
// the primary methods of logging output, treat certain sequences of characters
 | 
			
		||||
// different from printf in C.
 | 
			
		||||
instr TestPrints
 | 
			
		||||
  // ^ prints an ESCAPE character (U+001B), not a CIRCUMFLEX ACCENT character
 | 
			
		||||
  // (U+005E). ^^ prints a CIRCUMFLEX ACCENT.
 | 
			
		||||
  prints "^^\n"
 | 
			
		||||
  // ~ prints an ESCAPE character (U+001B) followed by a [, not a TILDE
 | 
			
		||||
  // character (U+007E). ~~ prints a TILDE.
 | 
			
		||||
  prints "~~\n"
 | 
			
		||||
  // \A, \B, \N, \R, and \T correspond to the escaped lowercase characters (that
 | 
			
		||||
  // is, BELL (U+0007), BACKSPACE (U+0008), new line (U+000A), CARRIAGE RETURN
 | 
			
		||||
  // (U+000D), and tab (U+0009)).
 | 
			
		||||
  prints "\T\R\N"
 | 
			
		||||
  // %n, %r, and %t are the same as \n, \r, and \t, as are %N, %R, and %T.
 | 
			
		||||
  prints "%t%r%n"
 | 
			
		||||
  // %! prints a semicolon. This is a hold-over from old versions of Csound that
 | 
			
		||||
  // allowed comments to begin in strings.
 | 
			
		||||
  prints "; %!\n"
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// The arguments of function-like macros can be separated by # instead of '.
 | 
			
		||||
// These two lines define the same macro.
 | 
			
		||||
#define OSCIL_MACRO(VOLUME'FREQUENCY'TABLE) #oscil $VOLUME, $FREQUENCY, $TABLE#
 | 
			
		||||
#define OSCIL_MACRO(VOLUME#FREQUENCY#TABLE) #oscil $VOLUME, $FREQUENCY, $TABLE#
 | 
			
		||||
 | 
			
		||||
// Uses of macros can optionally be suffixed with a period.
 | 
			
		||||
instr TestMacroPeriodSuffix
 | 
			
		||||
  aSignal $OSCIL_MACRO.(1'$A_HZ'1)
 | 
			
		||||
  prints "The frequency of the oscillator is $A_HZ.Hz.\n"
 | 
			
		||||
  out aSignal
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Csound has @ and @@ operator-like macros that, when followed by a literal
 | 
			
		||||
// non-negative integer, expand to the next power of 2 and the next power of 2
 | 
			
		||||
// plus 1:
 | 
			
		||||
//    @x = 2^(ceil(log2(x + 1))), x >= 0
 | 
			
		||||
//   @@0 = 2
 | 
			
		||||
//   @@x = 2^(ceil(log2(x))) + 1, x > 0
 | 
			
		||||
instr TestAt
 | 
			
		||||
  prints "%d  %2d  %2d\n", 0, @0, @@0
 | 
			
		||||
  prints "%d  %2d  %2d\n", 1, @1, @@1
 | 
			
		||||
  prints "%d  %2d  %2d\n", 2, @2, @@2
 | 
			
		||||
  prints "%d  %2d  %2d\n", 3, @3, @@3
 | 
			
		||||
  prints "%d  %2d  %2d\n", 4, @4, @@4
 | 
			
		||||
  prints "%d  %2d  %2d\n", 5, @5, @@5
 | 
			
		||||
  prints "%d  %2d  %2d\n", 6, @6, @@6
 | 
			
		||||
  prints "%d  %2d  %2d\n", 7, @7, @@7
 | 
			
		||||
  prints "%d  %2d  %2d\n", 8, @8, @@8
 | 
			
		||||
  prints "%d  %2d  %2d\n", 9, @9, @@9
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
// Including newlines in macros can lead to confusing code.
 | 
			
		||||
instr MacroAbuse
 | 
			
		||||
  if 1 == 1 then
 | 
			
		||||
    prints "on\n"
 | 
			
		||||
#define FOO#
 | 
			
		||||
BAR
 | 
			
		||||
#endif // This ends the if block. It is not a preprocessor directive.
 | 
			
		||||
endin
 | 
			
		||||
 | 
			
		||||
scoreline_i {{
 | 
			
		||||
f 1 0 16384 10 1
 | 
			
		||||
i "N_a_M_e_" 0 2
 | 
			
		||||
i "TestOscillator" 2 2
 | 
			
		||||
i "TestBitwiseNOT" 0 1
 | 
			
		||||
i "TestBitwiseXOR" 0 1
 | 
			
		||||
i "TestGoto" 0 1
 | 
			
		||||
i "TestMacroPeriodSuffix" 4 1
 | 
			
		||||
i "TestAt" 0 1
 | 
			
		||||
i "MacroAbuse" 0 1
 | 
			
		||||
e
 | 
			
		||||
}}
 | 
			
		||||
							
								
								
									
										13
									
								
								samples/EJS/dash.ejs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								samples/EJS/dash.ejs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
<% include parts/depend %>
 | 
			
		||||
 | 
			
		||||
<div class="row">
 | 
			
		||||
  <% if (user.primaryAccount == "teacher") { %>
 | 
			
		||||
    <% include teacher/sidebar %>
 | 
			
		||||
    <% include teacher/dashboard %>
 | 
			
		||||
  <% } else if (user.primaryAccount == "student") { %>
 | 
			
		||||
    <% include student/sidebar %>
 | 
			
		||||
    <% include student/dashboard %>
 | 
			
		||||
  <% } else { %>
 | 
			
		||||
    <center><h2>There seems to be a problem</h2></center>
 | 
			
		||||
  <% } %>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										102
									
								
								samples/EJS/page.ejs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								samples/EJS/page.ejs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,102 @@
 | 
			
		||||
<% include ../parts/depend %>
 | 
			
		||||
 | 
			
		||||
<div class="row">
 | 
			
		||||
  <% include sidebar %>
 | 
			
		||||
  <div class="col-lg-offset-3 col-lg-9 main-content">
 | 
			
		||||
    <div class="page-title">
 | 
			
		||||
      <h1>Pieces</h1>
 | 
			
		||||
      <% if (pieces.length == 1) { %>
 | 
			
		||||
        <p>You have
 | 
			
		||||
          <strong>1</strong>
 | 
			
		||||
          piece to practice</p>
 | 
			
		||||
      <% } else { %>
 | 
			
		||||
        <p>You have
 | 
			
		||||
          <strong><%= pieces.length %></strong>
 | 
			
		||||
          pieces to practice</p>
 | 
			
		||||
      <% } %>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="row">
 | 
			
		||||
      <% if (pieces == undefined || pieces.length == 0) { %>
 | 
			
		||||
        <div class="error-main">
 | 
			
		||||
          <h1>No Pieces</h1>
 | 
			
		||||
          <p>You have no
 | 
			
		||||
            <strong>Pieces</strong>
 | 
			
		||||
            assigned.</p>
 | 
			
		||||
        </div>
 | 
			
		||||
      <% } else { %>
 | 
			
		||||
        <div class="col-lg-12 section-title">
 | 
			
		||||
          <div style="margin-top: 10px; margin-bottom: 10px;" class="btn-group" role="group">
 | 
			
		||||
            <button id="inProgressButton" type="button" class="btn btn-md btn-super-round btn-focus-off btn-primary btn-primary-active">In Progress</button>
 | 
			
		||||
            <button id="completedButton" type="button" class="btn btn-md btn-super-round btn-focus-off btn-purple">Completed</button>
 | 
			
		||||
          </div>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div id="inProgressPieces">
 | 
			
		||||
          <% if (inProgressPieces == undefined || inProgressPieces.length == 0) { %>
 | 
			
		||||
            <center>
 | 
			
		||||
              <h2>No Pieces in Progress</h2>
 | 
			
		||||
            </center>
 | 
			
		||||
          <% } else { %>
 | 
			
		||||
            <% for (var i = 0; i < inProgressPieces.length; i++) { %>
 | 
			
		||||
              <div class="col-lg-6">
 | 
			
		||||
                <div class="box">
 | 
			
		||||
                  <div class="title">
 | 
			
		||||
                    <h1>
 | 
			
		||||
                      <a href="/pieces/practice/<%= inProgressPieces[i].id %>"><%= inProgressPieces[i].title %></a>
 | 
			
		||||
                    </h1>
 | 
			
		||||
                    <p>By
 | 
			
		||||
                      <strong><%= inProgressPieces[i].author %></strong>
 | 
			
		||||
                    </p>
 | 
			
		||||
                    <p>
 | 
			
		||||
                      Teacher:
 | 
			
		||||
                      <strong><%= inProgressPieces[i].teacherName %></strong>
 | 
			
		||||
                    </p>
 | 
			
		||||
                    <p>Average Practice Time:
 | 
			
		||||
                      <strong><%= inProgressPieces[i].averagePracticeTime %>
 | 
			
		||||
                        mins</strong>
 | 
			
		||||
                    </p>
 | 
			
		||||
                    <a href="/pieces/practice/<%= inProgressPieces[i].id %>" class="btn btn-success btn-block">Practice
 | 
			
		||||
                      <%= inProgressPieces[i].title %></a>
 | 
			
		||||
                  </div>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
            <% } %>
 | 
			
		||||
          <% } %>
 | 
			
		||||
        </div>
 | 
			
		||||
 | 
			
		||||
        <div id="completedPieces" style="display: none;">
 | 
			
		||||
          <% if (completedPieces == undefined || completedPieces.length == 0) { %>
 | 
			
		||||
            <center>
 | 
			
		||||
              <h2>No Completed Pieces</h2>
 | 
			
		||||
            </center>
 | 
			
		||||
          <% } else { %>
 | 
			
		||||
            <% for (var i = 0; i < completedPieces.length; i++) { %>
 | 
			
		||||
              <div class="col-lg-6">
 | 
			
		||||
                <div class="box">
 | 
			
		||||
                  <div class="title">
 | 
			
		||||
                    <h1>
 | 
			
		||||
                      <a href="/pieces/practice/<%= completedPieces[i].id %>"><%= completedPieces[i].title %></a>
 | 
			
		||||
                    </h1>
 | 
			
		||||
                    <p>By
 | 
			
		||||
                      <strong><%= completedPieces[i].author %></strong>
 | 
			
		||||
                    </p>
 | 
			
		||||
                    <p>
 | 
			
		||||
                      Teacher:
 | 
			
		||||
                      <strong><%= completedPieces[i].teacherName %></strong>
 | 
			
		||||
                    </p>
 | 
			
		||||
                    <p>Average Practice Time:
 | 
			
		||||
                      <strong><%= completedPieces[i].averagePracticeTime %>
 | 
			
		||||
                        mins</strong>
 | 
			
		||||
                    </p>
 | 
			
		||||
                    <a href="/pieces/practice/<%= completedPieces[i].id %>" class="btn btn-success btn-block">Practice
 | 
			
		||||
                      <%= completedPieces[i].title %></a>
 | 
			
		||||
                  </div>
 | 
			
		||||
                </div>
 | 
			
		||||
              </div>
 | 
			
		||||
            <% } %>
 | 
			
		||||
          <% } %>
 | 
			
		||||
        </div>
 | 
			
		||||
      <% } %>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</div>
 | 
			
		||||
							
								
								
									
										26
									
								
								samples/Erlang/170-os-daemons.es
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								samples/Erlang/170-os-daemons.es
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
#! /usr/bin/env escript
 | 
			
		||||
 | 
			
		||||
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
 | 
			
		||||
% use this file except in compliance with the License. You may obtain a copy of
 | 
			
		||||
% the License at
 | 
			
		||||
%
 | 
			
		||||
%   http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
%
 | 
			
		||||
% Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
% License for the specific language governing permissions and limitations under
 | 
			
		||||
% the License.
 | 
			
		||||
 | 
			
		||||
loop() ->
 | 
			
		||||
	loop(io:read("")).
 | 
			
		||||
 | 
			
		||||
loop({ok, _}) ->
 | 
			
		||||
	loop(io:read(""));
 | 
			
		||||
loop(eof) ->
 | 
			
		||||
	stop;
 | 
			
		||||
loop({error, Reason}) ->
 | 
			
		||||
	throw({error, Reason}).
 | 
			
		||||
 | 
			
		||||
main([]) ->
 | 
			
		||||
	loop().
 | 
			
		||||
							
								
								
									
										1
									
								
								samples/Erlang/release
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										1
									
								
								samples/Erlang/release
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							@@ -119,4 +119,3 @@ execute_overlay([{copy, In, Out} | Rest], Vars, BaseDir, TargetDir) ->
 | 
			
		||||
 | 
			
		||||
exit_code(ExitCode) ->
 | 
			
		||||
    erlang:halt(ExitCode, [{flush, true}]).
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										8
									
								
								samples/Erlang/sample.app.src
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								samples/Erlang/sample.app.src
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
{application, sample,
 | 
			
		||||
 [{description, "sample app"},
 | 
			
		||||
  {vsn, "1.0.0"},
 | 
			
		||||
  {registered, []},
 | 
			
		||||
  {mod, {sample_app, []}},
 | 
			
		||||
  {applications, [kernel, stdlib]},
 | 
			
		||||
  {env, []},
 | 
			
		||||
  {modules, []}]}.
 | 
			
		||||
							
								
								
									
										104
									
								
								samples/Erlang/single-context.es
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										104
									
								
								samples/Erlang/single-context.es
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
#! /usr/bin/env escript
 | 
			
		||||
% This file is part of Emonk released under the MIT license. 
 | 
			
		||||
% See the LICENSE file for more information.
 | 
			
		||||
 | 
			
		||||
main([]) ->
 | 
			
		||||
	start(64, 1000);
 | 
			
		||||
main([N]) ->
 | 
			
		||||
	start(list_to_integer(N), 1000);
 | 
			
		||||
main([N, M]) ->
 | 
			
		||||
	start(list_to_integer(N), list_to_integer(M)).
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
start(N, M) ->
 | 
			
		||||
	code:add_pathz("test"),
 | 
			
		||||
	code:add_pathz("ebin"),
 | 
			
		||||
	{ok, Ctx} = emonk:create_ctx(),
 | 
			
		||||
	{ok, undefined} = emonk:eval(Ctx, js()),
 | 
			
		||||
	run(Ctx, N, M),
 | 
			
		||||
	wait(N).
 | 
			
		||||
 | 
			
		||||
run(_, 0, _) ->
 | 
			
		||||
	ok;
 | 
			
		||||
run(Ctx, N, M) ->
 | 
			
		||||
	Self = self(),
 | 
			
		||||
	Pid = spawn(fun() -> do_js(Self, Ctx, M) end),
 | 
			
		||||
	io:format("Spawned: ~p~n", [Pid]),
 | 
			
		||||
	run(Ctx, N-1, M).
 | 
			
		||||
 | 
			
		||||
wait(0) ->
 | 
			
		||||
	ok;
 | 
			
		||||
wait(N) ->
 | 
			
		||||
	receive
 | 
			
		||||
		{finished, Pid} -> ok
 | 
			
		||||
	end,
 | 
			
		||||
	io:format("Finished: ~p~n", [Pid]),
 | 
			
		||||
	wait(N-1).
 | 
			
		||||
 | 
			
		||||
do_js(Parent, _, 0) ->
 | 
			
		||||
	Parent ! {finished, self()};
 | 
			
		||||
do_js(Parent, Ctx, M) ->
 | 
			
		||||
	io:format("Running: ~p~n", [M]),
 | 
			
		||||
	Test = random_test(),
 | 
			
		||||
	{ok, [Resp]} = emonk:call(Ctx, <<"f">>, [Test]),
 | 
			
		||||
	Sorted = sort(Resp),
 | 
			
		||||
	true = Test == Sorted,
 | 
			
		||||
	do_js(Parent, Ctx, M-1).
 | 
			
		||||
 | 
			
		||||
js() -> 
 | 
			
		||||
	<<"var f = function(x) {return [x];};">>.
 | 
			
		||||
 | 
			
		||||
random_test() ->
 | 
			
		||||
	Tests = [
 | 
			
		||||
		null,
 | 
			
		||||
		true,
 | 
			
		||||
		false,
 | 
			
		||||
		1,
 | 
			
		||||
		-1,
 | 
			
		||||
		3.1416,
 | 
			
		||||
		-3.1416,
 | 
			
		||||
		12.0e10,
 | 
			
		||||
		1.234E+10,
 | 
			
		||||
		-1.234E-10,
 | 
			
		||||
		10.0,
 | 
			
		||||
		123.456,
 | 
			
		||||
		10.0,
 | 
			
		||||
		<<"foo">>,
 | 
			
		||||
		<<"foo", 5, "bar">>,
 | 
			
		||||
		<<"">>,
 | 
			
		||||
		<<"\n\n\n">>,
 | 
			
		||||
		<<"\" \b\f\r\n\t\"">>,
 | 
			
		||||
		{[]},
 | 
			
		||||
		{[{<<"foo">>, <<"bar">>}]},
 | 
			
		||||
		{[{<<"foo">>, <<"bar">>}, {<<"baz">>, 123}]},
 | 
			
		||||
		[],
 | 
			
		||||
		[[]],
 | 
			
		||||
		[1, <<"foo">>],
 | 
			
		||||
		{[{<<"foo">>, [123]}]},
 | 
			
		||||
		{[{<<"foo">>, [1, 2, 3]}]},
 | 
			
		||||
		{[{<<"foo">>, {[{<<"bar">>, true}]}}]},
 | 
			
		||||
		{[
 | 
			
		||||
			{<<"foo">>, []},
 | 
			
		||||
			{<<"bar">>, {[{<<"baz">>, true}]}}, {<<"alice">>, <<"bob">>}
 | 
			
		||||
		]},
 | 
			
		||||
		[-123, <<"foo">>, {[{<<"bar">>, []}]}, null]
 | 
			
		||||
	],
 | 
			
		||||
	{_, [Test | _]} = lists:split(random:uniform(length(Tests)) - 1, Tests),
 | 
			
		||||
	sort(Test).
 | 
			
		||||
 | 
			
		||||
sort({Props}) ->
 | 
			
		||||
	objsort(Props, []);
 | 
			
		||||
sort(List) when is_list(List) ->
 | 
			
		||||
	lstsort(List, []);
 | 
			
		||||
sort(Other) ->
 | 
			
		||||
	Other.
 | 
			
		||||
 | 
			
		||||
objsort([], Acc) ->
 | 
			
		||||
	{lists:sort(Acc)};
 | 
			
		||||
objsort([{K,V} | Rest], Acc) ->
 | 
			
		||||
	objsort(Rest, [{K, sort(V)} | Acc]).
 | 
			
		||||
 | 
			
		||||
lstsort([], Acc) ->
 | 
			
		||||
	lists:reverse(Acc);
 | 
			
		||||
lstsort([Val | Rest], Acc) ->
 | 
			
		||||
	lstsort(Rest, [sort(Val) | Acc]).
 | 
			
		||||
							
								
								
									
										54
									
								
								samples/FLUX/gameserver.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								samples/FLUX/gameserver.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,54 @@
 | 
			
		||||
typedef engine isEngineMessage;
 | 
			
		||||
typedef turn isTurnMessage;
 | 
			
		||||
typedef connect isConnectMessage;
 | 
			
		||||
typedef disconnect isDisconnectMessage;
 | 
			
		||||
 | 
			
		||||
ClientMessage(char* data) => ();
 | 
			
		||||
ParseMessage(char* data) => (int type, int client, char* data);
 | 
			
		||||
ReadMessage(int type, int client, char* data) => ();
 | 
			
		||||
 | 
			
		||||
ParseEngine(int type, int client, char* data) => (int client, int direction);
 | 
			
		||||
DoEngine(int client, int direction) => ();
 | 
			
		||||
 | 
			
		||||
ParseTurn(int type, int client, char* data) => (int client, int direction);
 | 
			
		||||
DoTurn(int client, int direction) => ();
 | 
			
		||||
 | 
			
		||||
ParseConnect(int type, int client, char* data) 
 | 
			
		||||
	=> (int client, char* host, int port);
 | 
			
		||||
DoConnect(int client, char* host, int port) => ();
 | 
			
		||||
 | 
			
		||||
ParseDisconnect(int type, int client, char* data) => (int client);
 | 
			
		||||
DoDisconnect(int client) => ();
 | 
			
		||||
 | 
			
		||||
UpdateBoard(ClientList clients) => (ClientList clients);
 | 
			
		||||
SendData(ClientList clients) => ();
 | 
			
		||||
 | 
			
		||||
DoUpdate(ClientList clients) => ();
 | 
			
		||||
 | 
			
		||||
DataTimer() => (ClientList clients);
 | 
			
		||||
 | 
			
		||||
GetClients() => (ClientList clients);
 | 
			
		||||
 | 
			
		||||
Wait(ClientList clients) => (ClientList clients);
 | 
			
		||||
 | 
			
		||||
Listen () => (char* data);
 | 
			
		||||
 | 
			
		||||
source Listen => ClientMessage;
 | 
			
		||||
source DataTimer => DoUpdate;
 | 
			
		||||
 | 
			
		||||
DataTimer = GetClients -> Wait;
 | 
			
		||||
 | 
			
		||||
DoUpdate = UpdateBoard -> SendData;
 | 
			
		||||
 | 
			
		||||
ClientMessage=ParseMessage -> ReadMessage;
 | 
			
		||||
 | 
			
		||||
ReadMessage:[engine, _, _] = ParseEngine -> DoEngine;
 | 
			
		||||
ReadMessage:[turn, _, _] = ParseTurn -> DoTurn;
 | 
			
		||||
ReadMessage:[connect, _, _] = ParseConnect -> DoConnect;
 | 
			
		||||
ReadMessage:[disconnect, _, _] = ParseDisconnect -> DoDisconnect;
 | 
			
		||||
 | 
			
		||||
atomic GetClients:{client_lock};
 | 
			
		||||
atomic DoConnect:{client_lock};
 | 
			
		||||
atomic DoDisconnect:{client_lock};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										44
									
								
								samples/FLUX/imageserver.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								samples/FLUX/imageserver.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,44 @@
 | 
			
		||||
typedef xml TestXML;
 | 
			
		||||
typedef html TestHTML;
 | 
			
		||||
 | 
			
		||||
typedef inCache TestInCache;
 | 
			
		||||
 | 
			
		||||
Page (int socket) => ();
 | 
			
		||||
 | 
			
		||||
ReadRequest (int socket) => (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
CheckCache (int socket, bool close, image_tag *request) 
 | 
			
		||||
	=> (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
Handler (int socket, bool close, image_tag *request)
 | 
			
		||||
     => (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
Complete (int socket, bool close, image_tag *request) => ();
 | 
			
		||||
 | 
			
		||||
ReadInFromDisk (int socket, bool close, image_tag *request)
 | 
			
		||||
     => (int socket, bool close, image_tag *request, __u8 *rgb_data);
 | 
			
		||||
 | 
			
		||||
Write (int socket, bool close, image_tag *request)
 | 
			
		||||
     => (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
Compress(int socket, bool close, image_tag *request, __u8 *rgb_data)
 | 
			
		||||
	=> (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
StoreInCache(int socket, bool close, image_tag *request)
 | 
			
		||||
	=> (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
Listen () 
 | 
			
		||||
	=> (int socket);
 | 
			
		||||
 | 
			
		||||
source Listen => Page;
 | 
			
		||||
 | 
			
		||||
Handler:[_, _, inCache]=;
 | 
			
		||||
Handler:[_, _, _]=ReadInFromDisk -> Compress -> StoreInCache;
 | 
			
		||||
 | 
			
		||||
Page = ReadRequest -> CheckCache-> Handler -> Write -> Complete;
 | 
			
		||||
 | 
			
		||||
atomic CheckCache:{cache};
 | 
			
		||||
atomic StoreInCache:{cache};
 | 
			
		||||
atomic Complete:{cache};
 | 
			
		||||
 | 
			
		||||
handle error ReadInFromDisk => FourOhFor;
 | 
			
		||||
							
								
								
									
										151
									
								
								samples/FLUX/mbittorrent.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								samples/FLUX/mbittorrent.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,151 @@
 | 
			
		||||
typedef choke TestChoke;
 | 
			
		||||
typedef unchoke TestUnchoke;
 | 
			
		||||
typedef interested TestInterested;
 | 
			
		||||
typedef uninterested TestUninterested;
 | 
			
		||||
typedef request TestRequest;
 | 
			
		||||
typedef cancel TestCancel;
 | 
			
		||||
typedef piece TestPiece;
 | 
			
		||||
typedef bitfield TestBitfield;
 | 
			
		||||
typedef have TestHave;
 | 
			
		||||
typedef piececomplete TestPieceComplete;
 | 
			
		||||
 | 
			
		||||
CheckinWithTracker (torrent_data_t *tdata)
 | 
			
		||||
    => ();
 | 
			
		||||
 | 
			
		||||
SendRequestToTracker (torrent_data_t *tdata)
 | 
			
		||||
    => (torrent_data_t *tdata, int socket);
 | 
			
		||||
    
 | 
			
		||||
GetTrackerResponse (torrent_data_t *tdata, int socket)
 | 
			
		||||
    => ();
 | 
			
		||||
 | 
			
		||||
UpdateChokeList (torrent_data_t *tdata)
 | 
			
		||||
    => ();
 | 
			
		||||
 | 
			
		||||
PickChoked (torrent_data_t *tdata)
 | 
			
		||||
    => (torrent_data_t *tdata, chokelist_t clist);
 | 
			
		||||
    
 | 
			
		||||
SendChokeUnchoke (torrent_data_t *tdata, chokelist_t clist)
 | 
			
		||||
    => ();
 | 
			
		||||
    
 | 
			
		||||
SetupConnection (torrent_data_t *tdata, int socket)
 | 
			
		||||
    => ();
 | 
			
		||||
    
 | 
			
		||||
Handshake (torrent_data_t *tdata, int socket)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
    
 | 
			
		||||
SendBitfield (torrent_data_t *tdata, client_data_t *client)
 | 
			
		||||
    => ();
 | 
			
		||||
 | 
			
		||||
Message (torrent_data_t *tdata, client_data_t *client)
 | 
			
		||||
    => ();
 | 
			
		||||
    
 | 
			
		||||
ReadMessage (torrent_data_t *tdata, client_data_t *client)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload);
 | 
			
		||||
    
 | 
			
		||||
HandleMessage (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
    
 | 
			
		||||
MessageDone (client_data_t *client)
 | 
			
		||||
    => ();
 | 
			
		||||
    
 | 
			
		||||
CompletePiece (torrent_data_t *tdata, client_data_t *client, int piece)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
 | 
			
		||||
VerifyPiece (torrent_data_t *tdata, client_data_t *client, int piece)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client, int piece);
 | 
			
		||||
 | 
			
		||||
SendHave (torrent_data_t *tdata, client_data_t *client, int piece)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
 | 
			
		||||
SendUninterested (torrent_data_t *tdata, client_data_t *client)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
    
 | 
			
		||||
Choke (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
    
 | 
			
		||||
Cancel (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
 | 
			
		||||
Interested (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
 | 
			
		||||
Uninterested (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
 | 
			
		||||
Bitfield (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
 | 
			
		||||
Unchoke (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
 | 
			
		||||
SendRequest (torrent_data_t *tdata, client_data_t *client)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
 | 
			
		||||
Have (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
 | 
			
		||||
Piece (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client, int piece);
 | 
			
		||||
 | 
			
		||||
Request (torrent_data_t *tdata, client_data_t *client, int type, int length, char *payload)
 | 
			
		||||
    => (client_data_t *client);
 | 
			
		||||
    
 | 
			
		||||
SendKeepAlives (torrent_data_t *tdata)
 | 
			
		||||
    => ();
 | 
			
		||||
 | 
			
		||||
GetClients () 
 | 
			
		||||
    => (int maxfd, fd_set *fds);
 | 
			
		||||
 | 
			
		||||
SelectSockets (int maxfd, fd_set *fds)
 | 
			
		||||
    => (fd_set *fds);
 | 
			
		||||
 | 
			
		||||
CheckSockets (fd_set *fds)
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
 | 
			
		||||
TrackerTimer () 
 | 
			
		||||
    => (torrent_data_t *tdata);
 | 
			
		||||
 | 
			
		||||
ChokeTimer ()
 | 
			
		||||
    => (torrent_data_t *tdata);
 | 
			
		||||
 | 
			
		||||
Connect ()
 | 
			
		||||
    => (torrent_data_t *tdata, int socket);
 | 
			
		||||
 | 
			
		||||
KeepAliveTimer ()
 | 
			
		||||
    => (torrent_data_t *tdata);
 | 
			
		||||
 | 
			
		||||
Listen ()
 | 
			
		||||
    => (torrent_data_t *tdata, client_data_t *client);
 | 
			
		||||
 | 
			
		||||
source TrackerTimer => CheckinWithTracker;
 | 
			
		||||
source ChokeTimer => UpdateChokeList;
 | 
			
		||||
source Connect => SetupConnection;
 | 
			
		||||
source Listen => Message;
 | 
			
		||||
source KeepAliveTimer => SendKeepAlives;
 | 
			
		||||
 | 
			
		||||
Listen = GetClients -> SelectSockets -> CheckSockets;
 | 
			
		||||
CheckinWithTracker = SendRequestToTracker -> GetTrackerResponse;
 | 
			
		||||
UpdateChokeList = PickChoked -> SendChokeUnchoke;
 | 
			
		||||
SetupConnection = Handshake -> SendBitfield;
 | 
			
		||||
Message = ReadMessage -> HandleMessage -> MessageDone;
 | 
			
		||||
 | 
			
		||||
CompletePiece:[_, _, piececomplete] = VerifyPiece -> SendHave -> SendUninterested;
 | 
			
		||||
 | 
			
		||||
HandleMessage:[_, _, choke, _, _] = Choke;
 | 
			
		||||
HandleMessage:[_, _, unchoke, _, _] = Unchoke -> SendRequest;
 | 
			
		||||
HandleMessage:[_, _, interested, _, _] = Interested;
 | 
			
		||||
 | 
			
		||||
HandleMessage:[_, _, uninterested, _, _] = Uninterested;
 | 
			
		||||
HandleMessage:[_, _, request, _, _] = Request;
 | 
			
		||||
HandleMessage:[_, _, cancel, _, _] = Cancel;
 | 
			
		||||
HandleMessage:[_, _, piece, _, _] = Piece -> CompletePiece -> SendRequest;
 | 
			
		||||
HandleMessage:[_, _, bitfield, _, _] = Bitfield;
 | 
			
		||||
HandleMessage:[_, _, have, _, _] = Have -> SendRequest;
 | 
			
		||||
 | 
			
		||||
atomic GetClients:{BigLock};
 | 
			
		||||
atomic CheckSockets:{BigLock};
 | 
			
		||||
atomic Message:{BigLock};
 | 
			
		||||
atomic CheckinWithTracker:{BigLock};
 | 
			
		||||
atomic UpdateChokeList:{BigLock};
 | 
			
		||||
atomic SetupConnection:{BigLock};
 | 
			
		||||
atomic SendKeepAlives:{BigLock};
 | 
			
		||||
							
								
								
									
										38
									
								
								samples/FLUX/test.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								samples/FLUX/test.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
// concrete node signatures
 | 
			
		||||
Listen ()
 | 
			
		||||
  => (int socket);
 | 
			
		||||
 | 
			
		||||
ReadRequest (int socket)
 | 
			
		||||
  => (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
CheckCache (int socket, bool close, image_tag *request)
 | 
			
		||||
  => (int socket, bool close, image_tag *request);
 | 
			
		||||
 | 
			
		||||
// omitted for space:
 | 
			
		||||
// ReadInFromDisk, StoreInCache
 | 
			
		||||
Compress (int socket, bool close, image_tag *request, __u8 *rgb_data)
 | 
			
		||||
  => (int socket, bool close, image_tag *request);
 | 
			
		||||
Write (int socket, bool close, image_tag *request)
 | 
			
		||||
  => (int socket, bool close, image_tag *request);
 | 
			
		||||
Complete (int socket, bool close, image_tag *request) => ();
 | 
			
		||||
 | 
			
		||||
// source node
 | 
			
		||||
source Listen => Image;
 | 
			
		||||
 | 
			
		||||
// abstract node
 | 
			
		||||
Image = ReadRequest -> CheckCache -> Handler -> Write -> Complete;
 | 
			
		||||
 | 
			
		||||
// predicate type & dispatch
 | 
			
		||||
typedef hit TestInCache;
 | 
			
		||||
Handler:[_, _, hit] = ;
 | 
			
		||||
Handler:[_, _, _] =
 | 
			
		||||
ReadInFromDisk -> Compress -> StoreInCache;
 | 
			
		||||
 | 
			
		||||
// error handler
 | 
			
		||||
handle error ReadInFromDisk => FourOhFor;
 | 
			
		||||
 | 
			
		||||
// atomicity constraints
 | 
			
		||||
atomic CheckCache:{cache};
 | 
			
		||||
atomic StoreInCache:{cache};
 | 
			
		||||
atomic Complete:{cache};
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										20
									
								
								samples/GLSL/gbuffers_textured_lit.fsh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								samples/GLSL/gbuffers_textured_lit.fsh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#version 120
 | 
			
		||||
 | 
			
		||||
uniform sampler2D texture;
 | 
			
		||||
 | 
			
		||||
varying vec3 color;
 | 
			
		||||
varying vec2 texcoord;
 | 
			
		||||
 | 
			
		||||
vec4 GetDiffuse() {
 | 
			
		||||
	vec4 diffuse = vec4(color.rgb, 1.0);
 | 
			
		||||
	     diffuse *= texture2D(texture, texcoord);
 | 
			
		||||
	
 | 
			
		||||
	return diffuse;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
	vec4 diffuse = GetDiffuse();
 | 
			
		||||
	
 | 
			
		||||
	gl_FragData[0] = diffuse;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								samples/GLSL/gbuffers_textured_lit.vsh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								samples/GLSL/gbuffers_textured_lit.vsh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
#version 120
 | 
			
		||||
 | 
			
		||||
varying vec3 color;
 | 
			
		||||
varying vec2 texcoord;
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
	color    = gl_Color.rgb;
 | 
			
		||||
	texcoord = gl_MultiTexCoord0.st;
 | 
			
		||||
	
 | 
			
		||||
	gl_Position = ftransform();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										57
									
								
								samples/GraphQL/kitchen-sink.graphql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								samples/GraphQL/kitchen-sink.graphql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
			
		||||
# Copyright (c) 2015, Facebook, Inc.
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# This source code is licensed under the BSD-style license found in the
 | 
			
		||||
# LICENSE file in the root directory of this source tree. An additional grant
 | 
			
		||||
# of patent rights can be found in the PATENTS file in the same directory.
 | 
			
		||||
 | 
			
		||||
query queryName($foo: ComplexType, $site: Site = MOBILE) {
 | 
			
		||||
  whoever123is: node(id: [123, 456]) {
 | 
			
		||||
    id ,
 | 
			
		||||
    ... on User @defer {
 | 
			
		||||
      field2 {
 | 
			
		||||
        id ,
 | 
			
		||||
        alias: field1(first:10, after:$foo,) @include(if: $foo) {
 | 
			
		||||
          id,
 | 
			
		||||
          ...frag
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    ... @skip(unless: $foo) {
 | 
			
		||||
      id
 | 
			
		||||
    }
 | 
			
		||||
    ... {
 | 
			
		||||
      id
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
mutation likeStory {
 | 
			
		||||
  like(story: 123) @defer {
 | 
			
		||||
    story {
 | 
			
		||||
      id
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
subscription StoryLikeSubscription($input: StoryLikeSubscribeInput) {
 | 
			
		||||
  storyLikeSubscribe(input: $input) {
 | 
			
		||||
    story {
 | 
			
		||||
      likers {
 | 
			
		||||
        count
 | 
			
		||||
      }
 | 
			
		||||
      likeSentence {
 | 
			
		||||
        text
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fragment frag on Friend {
 | 
			
		||||
  foo(size: $size, bar: $b, obj: {key: "value"})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
{
 | 
			
		||||
  unnamed(truthy: true, falsey: false),
 | 
			
		||||
  query
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										50
									
								
								samples/GraphQL/schema-kitchen-sink.graphql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										50
									
								
								samples/GraphQL/schema-kitchen-sink.graphql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,50 @@
 | 
			
		||||
# Copyright (c) 2015, Facebook, Inc.
 | 
			
		||||
# All rights reserved.
 | 
			
		||||
#
 | 
			
		||||
# This source code is licensed under the BSD-style license found in the
 | 
			
		||||
# LICENSE file in the root directory of this source tree. An additional grant
 | 
			
		||||
# of patent rights can be found in the PATENTS file in the same directory.
 | 
			
		||||
 | 
			
		||||
schema {
 | 
			
		||||
  query: QueryType
 | 
			
		||||
  mutation: MutationType
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Foo implements Bar {
 | 
			
		||||
  one: Type
 | 
			
		||||
  two(argument: InputType!): Type
 | 
			
		||||
  three(argument: InputType, other: String): Int
 | 
			
		||||
  four(argument: String = "string"): String
 | 
			
		||||
  five(argument: [String] = ["string", "string"]): String
 | 
			
		||||
  six(argument: InputType = {key: "value"}): Type
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface Bar {
 | 
			
		||||
  one: Type
 | 
			
		||||
  four(argument: String = "string"): String
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
union Feed = Story | Article | Advert
 | 
			
		||||
 | 
			
		||||
scalar CustomScalar
 | 
			
		||||
 | 
			
		||||
enum Site {
 | 
			
		||||
  DESKTOP
 | 
			
		||||
  MOBILE
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input InputType {
 | 
			
		||||
  key: String!
 | 
			
		||||
  answer: Int = 42
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
extend type Foo {
 | 
			
		||||
  seven(argument: [String]): Type
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
directive @skip(if: Boolean!) on FIELD | FRAGMENT_SPREAD | INLINE_FRAGMENT
 | 
			
		||||
 | 
			
		||||
directive @include(if: Boolean!)
 | 
			
		||||
  on FIELD
 | 
			
		||||
   | FRAGMENT_SPREAD
 | 
			
		||||
   | INLINE_FRAGMENT
 | 
			
		||||
							
								
								
									
										46
									
								
								samples/Groovy/filenames/Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								samples/Groovy/filenames/Jenkinsfile
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
jettyUrl = 'http://localhost:8081/'
 | 
			
		||||
 | 
			
		||||
def servers
 | 
			
		||||
 | 
			
		||||
stage 'Dev'
 | 
			
		||||
node {
 | 
			
		||||
    checkout scm
 | 
			
		||||
    servers = load 'servers.groovy'
 | 
			
		||||
    mvn '-o clean package'
 | 
			
		||||
    dir('target') {stash name: 'war', includes: 'x.war'}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
stage 'QA'
 | 
			
		||||
parallel(longerTests: {
 | 
			
		||||
    runTests(servers, 30)
 | 
			
		||||
}, quickerTests: {
 | 
			
		||||
    runTests(servers, 20)
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
stage name: 'Staging', concurrency: 1
 | 
			
		||||
node {
 | 
			
		||||
    servers.deploy 'staging'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
input message: "Does ${jettyUrl}staging/ look good?"
 | 
			
		||||
 | 
			
		||||
stage name: 'Production', concurrency: 1
 | 
			
		||||
node {
 | 
			
		||||
    sh "wget -O - -S ${jettyUrl}staging/"
 | 
			
		||||
    echo 'Production server looks to be alive'
 | 
			
		||||
    servers.deploy 'production'
 | 
			
		||||
    echo "Deployed to ${jettyUrl}production/"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
def mvn(args) {
 | 
			
		||||
    sh "${tool 'Maven 3.x'}/bin/mvn ${args}"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
def runTests(servers, duration) {
 | 
			
		||||
    node {
 | 
			
		||||
        checkout scm
 | 
			
		||||
        servers.runWithServer {id ->
 | 
			
		||||
            mvn "-o -f sometests test -Durl=${jettyUrl}${id}/ -Dduration=${duration}"
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								samples/HLSL/accelerated_surface_win.hlsl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								samples/HLSL/accelerated_surface_win.hlsl
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
 | 
			
		||||
// Use of this source code is governed by a BSD-style license that can be
 | 
			
		||||
// found in the LICENSE file.
 | 
			
		||||
 | 
			
		||||
// To compile these two shaders:
 | 
			
		||||
// fxc /E pixelMain /T ps_2_0 accelerated_surface_win.hlsl
 | 
			
		||||
// fxc /E vertexMain /T vs_2_0 accelerated_surface_win.hlsl
 | 
			
		||||
//
 | 
			
		||||
// fxc is in the DirectX SDK.
 | 
			
		||||
 | 
			
		||||
struct Vertex {
 | 
			
		||||
  float4 position : POSITION;
 | 
			
		||||
  float2 texCoord : TEXCOORD0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
texture t;
 | 
			
		||||
sampler s;
 | 
			
		||||
 | 
			
		||||
// Passes a position and texture coordinate to the pixel shader.
 | 
			
		||||
Vertex vertexMain(Vertex input) {
 | 
			
		||||
  return input;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Samples a texture at the given texture coordinate and returns the result.
 | 
			
		||||
float4 pixelMain(float2 texCoord : TEXCOORD0) : COLOR0 {
 | 
			
		||||
  return tex2D(s, texCoord);
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										105
									
								
								samples/HLSL/corridor.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								samples/HLSL/corridor.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,105 @@
 | 
			
		||||
float4x4 matWorldView : WORLDVIEW;
 | 
			
		||||
float4x4 matWorldViewProjection : WORLDVIEWPROJECTION;
 | 
			
		||||
 | 
			
		||||
struct VS_INPUT {
 | 
			
		||||
	float4 Position : POSITION0;
 | 
			
		||||
	float3 Normal : NORMAL;
 | 
			
		||||
	float3 Tangent : TANGENT;
 | 
			
		||||
	float3 Binormal : BINORMAL;
 | 
			
		||||
	float2 TexCoord0 : TEXCOORD0;
 | 
			
		||||
	float2 TexCoord1 : TEXCOORD1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct VS_OUTPUT {
 | 
			
		||||
	float4 Position : POSITION0;
 | 
			
		||||
	float2 TexCoord0 : TEXCOORD0;
 | 
			
		||||
	float2 TexCoord1 : TEXCOORD1;
 | 
			
		||||
	float3x3 TangentToView : TEXCOORD2;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
VS_OUTPUT vs_main(VS_INPUT input)
 | 
			
		||||
{
 | 
			
		||||
	VS_OUTPUT output;
 | 
			
		||||
	output.Position = mul(input.Position, matWorldViewProjection);
 | 
			
		||||
	output.TexCoord0 = input.TexCoord0 * 5;
 | 
			
		||||
	output.TexCoord1 = input.TexCoord1;
 | 
			
		||||
	output.TangentToView[0] = mul(float4(input.Tangent, 0), matWorldView).xyz;
 | 
			
		||||
	output.TangentToView[1] = mul(float4(input.Binormal, 0), matWorldView).xyz;
 | 
			
		||||
	output.TangentToView[2] = mul(float4(input.Normal, 0), matWorldView).xyz;
 | 
			
		||||
	return output;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
struct PS_OUTPUT {
 | 
			
		||||
	float4 gbuffer0 : COLOR0;
 | 
			
		||||
	float4 gbuffer1 : COLOR1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
texture albedo_tex;
 | 
			
		||||
sampler albedo_samp = sampler_state {
 | 
			
		||||
	Texture = (albedo_tex);
 | 
			
		||||
	MipFilter = Linear;
 | 
			
		||||
	MinFilter = Linear;
 | 
			
		||||
	MagFilter = Linear;
 | 
			
		||||
	AddressU = Wrap;
 | 
			
		||||
	AddressV = Wrap;
 | 
			
		||||
	sRGBTexture = True;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
texture normal_tex;
 | 
			
		||||
sampler normal_samp = sampler_state {
 | 
			
		||||
	Texture = (normal_tex);
 | 
			
		||||
	MipFilter = Linear;
 | 
			
		||||
	MinFilter = Linear;
 | 
			
		||||
	MagFilter = Linear;
 | 
			
		||||
	AddressU = Wrap;
 | 
			
		||||
	AddressV = Wrap;
 | 
			
		||||
	sRGBTexture = False;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
texture specular_tex;
 | 
			
		||||
sampler specular_samp = sampler_state {
 | 
			
		||||
	Texture = (specular_tex);
 | 
			
		||||
	MipFilter = Linear;
 | 
			
		||||
	MinFilter = Linear;
 | 
			
		||||
	MagFilter = Linear;
 | 
			
		||||
	AddressU = Wrap;
 | 
			
		||||
	AddressV = Wrap;
 | 
			
		||||
	sRGBTexture = True;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
texture ao_tex;
 | 
			
		||||
sampler ao_samp = sampler_state {
 | 
			
		||||
	Texture = (ao_tex);
 | 
			
		||||
	MipFilter = Linear;
 | 
			
		||||
	MinFilter = Linear;
 | 
			
		||||
	MagFilter = Linear;
 | 
			
		||||
	AddressU = Wrap;
 | 
			
		||||
	AddressV = Wrap;
 | 
			
		||||
	sRGBTexture = True;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
PS_OUTPUT ps_main(VS_OUTPUT Input)
 | 
			
		||||
{
 | 
			
		||||
	PS_OUTPUT o;
 | 
			
		||||
 | 
			
		||||
	float3 tangentNormal = normalize(tex2D(normal_samp, Input.TexCoord0).xyz * 2 - 1);
 | 
			
		||||
	float3 eyeNormal = normalize(mul(tangentNormal, Input.TangentToView));
 | 
			
		||||
 | 
			
		||||
	float3 albedo = tex2D(albedo_samp, Input.TexCoord0).rgb;
 | 
			
		||||
	float ao = tex2D(ao_samp, Input.TexCoord1).r * 0.75;
 | 
			
		||||
	float spec = tex2D(specular_samp, Input.TexCoord0).r;
 | 
			
		||||
 | 
			
		||||
	o.gbuffer0 = float4(eyeNormal, spec * ao);
 | 
			
		||||
	o.gbuffer1 = float4(albedo, 1 - ao);
 | 
			
		||||
	return o;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
technique mesh {
 | 
			
		||||
	pass Geometry {
 | 
			
		||||
		VertexShader = compile vs_3_0 vs_main();
 | 
			
		||||
		PixelShader  = compile ps_3_0 ps_main();
 | 
			
		||||
 | 
			
		||||
		AlphaBlendEnable = False;
 | 
			
		||||
		ZWriteEnable = True;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										119
									
								
								samples/HLSL/jellyfish.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								samples/HLSL/jellyfish.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,119 @@
 | 
			
		||||
float4x4 matWorldViewProjection : WORLDVIEWPROJECTION;
 | 
			
		||||
float4x4 matWorldView : WORLDVIEW;
 | 
			
		||||
float4x4 matWorld : WORLD;
 | 
			
		||||
float4x4 matView : VIEW;
 | 
			
		||||
 | 
			
		||||
uniform float4 vViewPosition;
 | 
			
		||||
 | 
			
		||||
struct VS_INPUT 
 | 
			
		||||
{
 | 
			
		||||
	float3 Pos:      POSITION;
 | 
			
		||||
	float3 Normal:   NORMAL;
 | 
			
		||||
	float3 Tangent:  TANGENT;
 | 
			
		||||
	float3 Binormal: BINORMAL;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct VS_OUTPUT 
 | 
			
		||||
{
 | 
			
		||||
	float4 Pos        : POSITION;
 | 
			
		||||
	float3 reflection : TEXCOORD1; 
 | 
			
		||||
	float3 refraction : TEXCOORD2; 
 | 
			
		||||
	float  fresnel    : TEXCOORD3;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
uniform float3 amt;
 | 
			
		||||
uniform float3 scale;
 | 
			
		||||
uniform float3 phase;
 | 
			
		||||
 | 
			
		||||
float3 deform(float3 p)
 | 
			
		||||
{
 | 
			
		||||
	float s = 3;
 | 
			
		||||
	float3 p2 = p * scale + phase;
 | 
			
		||||
	s += sin(p2.x) * amt.x;
 | 
			
		||||
	s += sin(p2.y) * amt.y;
 | 
			
		||||
	s += sin(p2.z) * amt.z;
 | 
			
		||||
	return p * s / 3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
VS_OUTPUT vs_main( VS_INPUT In )
 | 
			
		||||
{
 | 
			
		||||
	VS_OUTPUT Out;
 | 
			
		||||
 | 
			
		||||
	float3 pos = In.Pos;
 | 
			
		||||
	float3 norm = In.Normal;
 | 
			
		||||
 | 
			
		||||
	float3 p1 = pos + In.Tangent * 0.05;
 | 
			
		||||
	float3 p2 = pos + In.Binormal * 0.05;
 | 
			
		||||
	pos = deform(pos);
 | 
			
		||||
	p1  = deform(p1);
 | 
			
		||||
	p2  = deform(p2);
 | 
			
		||||
 | 
			
		||||
	p1 -= pos;
 | 
			
		||||
	p2 -= pos;
 | 
			
		||||
	norm = normalize(cross(p1, p2));
 | 
			
		||||
 | 
			
		||||
	float3 view = normalize(pos - vViewPosition.xyz);
 | 
			
		||||
 | 
			
		||||
	Out.Pos           = mul(float4(pos,  1.0), matWorldViewProjection);
 | 
			
		||||
	Out.reflection    = reflect(view, norm);
 | 
			
		||||
	Out.refraction    = reflect(view, norm * 0.4f); /* fake, but who cares? */
 | 
			
		||||
	Out.fresnel       = dot(view, norm);
 | 
			
		||||
	norm = mul(float4(norm, 0.0), matWorldViewProjection);
 | 
			
		||||
 | 
			
		||||
	return Out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#define PS_INPUT VS_OUTPUT
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
textureCUBE reflectionMap;
 | 
			
		||||
samplerCUBE reflectionMapSampler = sampler_state
 | 
			
		||||
{
 | 
			
		||||
	Texture = (reflectionMap);
 | 
			
		||||
	MipFilter = LINEAR;
 | 
			
		||||
	MinFilter = LINEAR;
 | 
			
		||||
	MagFilter = LINEAR;
 | 
			
		||||
};
 | 
			
		||||
#else
 | 
			
		||||
// textures
 | 
			
		||||
texture reflectionMap 
 | 
			
		||||
< 
 | 
			
		||||
    string type = "CUBE";
 | 
			
		||||
    string name = "test_cube.dds";
 | 
			
		||||
>;
 | 
			
		||||
 | 
			
		||||
samplerCUBE reflectionMapSampler = sampler_state
 | 
			
		||||
{
 | 
			
		||||
	Texture = (reflectionMap);
 | 
			
		||||
	MipFilter = LINEAR;
 | 
			
		||||
	MinFilter = LINEAR;
 | 
			
		||||
	MagFilter = LINEAR;
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct PS_OUTPUT 
 | 
			
		||||
{
 | 
			
		||||
   float4 color    : COLOR0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
PS_OUTPUT ps_main( PS_INPUT In )
 | 
			
		||||
{
 | 
			
		||||
	PS_OUTPUT Out;
 | 
			
		||||
	
 | 
			
		||||
	float4 reflection = texCUBE(reflectionMapSampler, normalize(In.reflection)) * 1.5;
 | 
			
		||||
	float4 refraction = texCUBE(reflectionMapSampler, normalize(In.refraction));
 | 
			
		||||
	float fresnel = In.fresnel;
 | 
			
		||||
//	float fresnel = abs(normalize(In.normal).z);
 | 
			
		||||
	Out.color = lerp(reflection, refraction, fresnel) *  pow(1.0 - fresnel * 0.75, 1.0);
 | 
			
		||||
 | 
			
		||||
	return Out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
technique blur_ps_vs_2_0
 | 
			
		||||
{
 | 
			
		||||
	pass P0
 | 
			
		||||
	{
 | 
			
		||||
		VertexShader = compile vs_2_0 vs_main();
 | 
			
		||||
		PixelShader  = compile ps_2_0 ps_main();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										41
									
								
								samples/HLSL/noise.fx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								samples/HLSL/noise.fx
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
float alpha = 1.f;
 | 
			
		||||
 | 
			
		||||
texture tex;
 | 
			
		||||
sampler tex_sampler = sampler_state
 | 
			
		||||
{
 | 
			
		||||
	Texture = (tex);
 | 
			
		||||
	MipFilter = LINEAR;
 | 
			
		||||
	MinFilter = LINEAR;
 | 
			
		||||
	MagFilter = LINEAR;
 | 
			
		||||
	
 | 
			
		||||
	AddressU = WRAP;
 | 
			
		||||
	AddressV = WRAP;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct VS_OUTPUT
 | 
			
		||||
{
 | 
			
		||||
	float4 pos  : POSITION;
 | 
			
		||||
	float2 tex  : TEXCOORD1;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
VS_OUTPUT vertex(float4 ipos : POSITION, float2 tex  : TEXCOORD0)
 | 
			
		||||
{
 | 
			
		||||
	VS_OUTPUT Out;
 | 
			
		||||
	Out.pos = ipos;
 | 
			
		||||
	Out.tex = tex * 2;
 | 
			
		||||
	return Out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
float4 pixel(VS_OUTPUT In) : COLOR
 | 
			
		||||
{
 | 
			
		||||
	return tex2D(tex_sampler, In.tex) * alpha;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
technique blur_ps_vs_2_0
 | 
			
		||||
{
 | 
			
		||||
	pass P0
 | 
			
		||||
	{
 | 
			
		||||
		VertexShader = compile vs_2_0 vertex();
 | 
			
		||||
		PixelShader  = compile ps_2_0 pixel();
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										5
									
								
								samples/HTML+ECR/greeting.ecr
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								samples/HTML+ECR/greeting.ecr
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
<% if @name %>
 | 
			
		||||
  Greeting, <%= @name %>!
 | 
			
		||||
<% else %>
 | 
			
		||||
  Greeting!
 | 
			
		||||
<% end %>
 | 
			
		||||
							
								
								
									
										3
									
								
								samples/J/hashbang
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								samples/J/hashbang
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/jconsole
 | 
			
		||||
echo 'Hello, GitHub!'
 | 
			
		||||
exit ''
 | 
			
		||||
							
								
								
									
										123
									
								
								samples/JSON/Git Commit.JSON-tmLanguage
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								samples/JSON/Git Commit.JSON-tmLanguage
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
			
		||||
{
 | 
			
		||||
	"name": "Git Commit Message",
 | 
			
		||||
	"scopeName": "text.git-commit",
 | 
			
		||||
	"fileTypes": [
 | 
			
		||||
		"COMMIT_EDITMSG"
 | 
			
		||||
	],
 | 
			
		||||
	"patterns": [
 | 
			
		||||
		{
 | 
			
		||||
			"name": "comment.line.number-sign.git-commit-message",
 | 
			
		||||
			"begin": "^#",
 | 
			
		||||
			"beginCaptures": {
 | 
			
		||||
				"0": {
 | 
			
		||||
					"name": "punctuation.definition.comment.git-commit-message"
 | 
			
		||||
				}
 | 
			
		||||
			},
 | 
			
		||||
			"end": "$",
 | 
			
		||||
			"patterns": [
 | 
			
		||||
				{
 | 
			
		||||
					"name": "comment.line.on-branch.git-commit-message",
 | 
			
		||||
					"match": "(?:On branch )([^ ]+)",
 | 
			
		||||
					"captures": {
 | 
			
		||||
						"1": {
 | 
			
		||||
							"name": "support.function.branch.git-commit-message"
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"name": "comment.line.on-branch.git-commit-message",
 | 
			
		||||
					"match": "Your branch .* '([^ ']+)'",
 | 
			
		||||
					"captures": {
 | 
			
		||||
						"1": {
 | 
			
		||||
							"name": "support.function.branch.git-commit-message"
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"name": "comment.line.untracked.git-commit-message",
 | 
			
		||||
					"begin": " Untracked files:",
 | 
			
		||||
					"beginCaptures": {
 | 
			
		||||
						"0": {
 | 
			
		||||
							"name": "entity.definition.untracked.git-commit-message"
 | 
			
		||||
						}
 | 
			
		||||
					},
 | 
			
		||||
					"end": "^#$",
 | 
			
		||||
					"patterns": [
 | 
			
		||||
						{
 | 
			
		||||
							"name": "comment.line.untracked-file.git-commit-message",
 | 
			
		||||
							"match": "\t(.*)$",
 | 
			
		||||
							"captures": {
 | 
			
		||||
								"1": {
 | 
			
		||||
									"name": "support.function.file-status.git-commit-message"
 | 
			
		||||
								},
 | 
			
		||||
								"2": {
 | 
			
		||||
									"name": "constant.character.branch.git-commit-message"
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"name": "comment.line.discarded.git-commit-message",
 | 
			
		||||
					"begin": " Change(?:s not staged for commit|d but not updated):",
 | 
			
		||||
					"beginCaptures": {
 | 
			
		||||
						"0": {
 | 
			
		||||
							"name": "entity.definition.discarded.git-commit-message"
 | 
			
		||||
						}
 | 
			
		||||
					},
 | 
			
		||||
					"end": "^#$",
 | 
			
		||||
					"patterns": [
 | 
			
		||||
						{
 | 
			
		||||
							"name": "comment.line.discarded.git-commit-message",
 | 
			
		||||
							"match": "\t([^:]+):(.*)$",
 | 
			
		||||
							"captures": {
 | 
			
		||||
								"1": {
 | 
			
		||||
									"name": "support.function.file-status.git-commit-message"
 | 
			
		||||
								},
 | 
			
		||||
								"2": {
 | 
			
		||||
									"name": "constant.character.branch.git-commit-message"
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				},
 | 
			
		||||
				{
 | 
			
		||||
					"name": "comment.line.selected.git-commit-message",
 | 
			
		||||
					"begin": " Changes to be committed:",
 | 
			
		||||
					"beginCaptures": {
 | 
			
		||||
						"0": {
 | 
			
		||||
							"name": "entity.definition.selected.git-commit-message"
 | 
			
		||||
						}
 | 
			
		||||
					},
 | 
			
		||||
					"end": "^#$",
 | 
			
		||||
					"patterns": [
 | 
			
		||||
						{
 | 
			
		||||
							"name": "comment.line.selected.git-commit-message",
 | 
			
		||||
							"match": "\t([^:]+):(.*)$",
 | 
			
		||||
							"captures": {
 | 
			
		||||
								"1": {
 | 
			
		||||
									"name": "support.function.file-status.git-commit-message"
 | 
			
		||||
								},
 | 
			
		||||
								"2": {
 | 
			
		||||
									"name": "constant.character.branch.git-commit-message"
 | 
			
		||||
								}
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					]
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"name": "meta.diff.git-commit",
 | 
			
		||||
			"comment": "diff at the end of the commit message when using commit -v, or viewing a log. End pattern is just something to be never matched so that the meta continues untill the end of the file.",
 | 
			
		||||
			"begin": "diff\\ \\-\\-git",
 | 
			
		||||
			"end": "(?=xxxxxx)123457",
 | 
			
		||||
			"patterns": [
 | 
			
		||||
				{
 | 
			
		||||
					"include": "source.diff"
 | 
			
		||||
				}
 | 
			
		||||
			]
 | 
			
		||||
		}
 | 
			
		||||
	],
 | 
			
		||||
	"uuid": "de3fb2fc-e564-4a31-9813-5ee26967c5c8"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								samples/JSON/filenames/.arcconfig
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								samples/JSON/filenames/.arcconfig
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
{
 | 
			
		||||
	"project_id": "example",
 | 
			
		||||
	"conduit_uri": "https://ex.am.pl/",
 | 
			
		||||
	"copyright_holder": "Apache Software Foundation",
 | 
			
		||||
	"arcanist_configuration": "ArcJIRAConfiguration",
 | 
			
		||||
	"phabricator.uri": "https://phabricator.example.com/",
 | 
			
		||||
	"load": ["libs/src"]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								samples/JSON/filenames/mcmod.info
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								samples/JSON/filenames/mcmod.info
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
			
		||||
[
 | 
			
		||||
{
 | 
			
		||||
  "modid": "examplemod",
 | 
			
		||||
  "name": "Example Mod",
 | 
			
		||||
  "description": "Example placeholder mod.",
 | 
			
		||||
  "version": "${version}",
 | 
			
		||||
  "mcversion": "${mcversion}",
 | 
			
		||||
  "url": "",
 | 
			
		||||
  "updateUrl": "",
 | 
			
		||||
  "authorList": ["ExampleDude"],
 | 
			
		||||
  "credits": "The Forge and FML guys, for making this example",
 | 
			
		||||
  "logoFile": "",
 | 
			
		||||
  "screenshots": [],
 | 
			
		||||
  "dependencies": []
 | 
			
		||||
}
 | 
			
		||||
]
 | 
			
		||||
							
								
								
									
										9
									
								
								samples/Jade/hello.pug
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								samples/Jade/hello.pug
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
doctype html
 | 
			
		||||
html
 | 
			
		||||
  head
 | 
			
		||||
    meta(charset='utf-8')
 | 
			
		||||
    link(rel='stylesheet', type='text/css', href='main.css')
 | 
			
		||||
    title Hello Pug
 | 
			
		||||
  body
 | 
			
		||||
    #text
 | 
			
		||||
      include page
 | 
			
		||||
							
								
								
									
										13
									
								
								samples/JavaScript/axios.es
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								samples/JavaScript/axios.es
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
import axios from "axios";
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
	async getIndex(prefix) {
 | 
			
		||||
		const {data} = await axios.get((prefix || "") + "/index.json");
 | 
			
		||||
		return data;
 | 
			
		||||
	},
 | 
			
		||||
	
 | 
			
		||||
	async getContent(path, prefix) {
 | 
			
		||||
		const {data} = await axios.get((prefix || "") + "/" + path + ".json");
 | 
			
		||||
		return data;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								samples/JavaScript/index.es
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								samples/JavaScript/index.es
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,35 @@
 | 
			
		||||
import config from "../webpack.config";
 | 
			
		||||
import webpackDevMiddleware from "webpack-dev-middleware";
 | 
			
		||||
import webpackHot from "webpack-hot-middleware";
 | 
			
		||||
import webpack from "webpack";
 | 
			
		||||
import express from "express";
 | 
			
		||||
 | 
			
		||||
app.use(webpackDevMiddleware(compiler, {
 | 
			
		||||
	noInfo: false,
 | 
			
		||||
	quiet: false,
 | 
			
		||||
	publicPath: config.output.publicPath,
 | 
			
		||||
	hot: true,
 | 
			
		||||
	historyApiFallback: true
 | 
			
		||||
}));
 | 
			
		||||
	
 | 
			
		||||
app.get("/(:root).json", (req, resp) => {
 | 
			
		||||
	resp.send(indexer.index(req.params.root));
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default function(){
 | 
			
		||||
	const server = http.createServer(app);
 | 
			
		||||
	
 | 
			
		||||
	server.listen(3000);
 | 
			
		||||
	
 | 
			
		||||
	const wss = new WebSocketServer({server});
 | 
			
		||||
	
 | 
			
		||||
	let id = 1;
 | 
			
		||||
	wss.on("connection", (ws) => {
 | 
			
		||||
		console.log("Hello", " world");
 | 
			
		||||
		let wsId = id++;
 | 
			
		||||
		sessions[wsId] = ws;
 | 
			
		||||
		ws.on("close", () => {
 | 
			
		||||
			delete sessions[wsId]
 | 
			
		||||
		});
 | 
			
		||||
	});
 | 
			
		||||
};
 | 
			
		||||
							
								
								
									
										38
									
								
								samples/M4/htmlgen.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								samples/M4/htmlgen.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
dnl Took from https://en.wikipedia.org/wiki/M4_(computer_language)
 | 
			
		||||
divert(-1)
 | 
			
		||||
 | 
			
		||||
M4 has multiple output queues that can be manipulated with the
 | 
			
		||||
`divert' macro. Valid queues range from 0 to 10, inclusive, with
 | 
			
		||||
the default queue being 0.
 | 
			
		||||
 | 
			
		||||
Calling the `divert' macro with an invalid queue causes text to be
 | 
			
		||||
discarded until another call.  Note that even while output is being
 | 
			
		||||
discarded, quotes around `divert' and other macros are needed to
 | 
			
		||||
prevent expansion.
 | 
			
		||||
 | 
			
		||||
# Macros aren't expanded within comments, meaning that keywords such
 | 
			
		||||
# as divert and other built-ins may be used without consequence.
 | 
			
		||||
 | 
			
		||||
# HTML utility macro:
 | 
			
		||||
 | 
			
		||||
define(`H2_COUNT', 0)
 | 
			
		||||
 | 
			
		||||
# The H2_COUNT macro is redefined every time the H2 macro is used:
 | 
			
		||||
 | 
			
		||||
define(`H2',
 | 
			
		||||
	`define(`H2_COUNT', incr(H2_COUNT))<h2>H2_COUNT. $1</h2>')
 | 
			
		||||
 | 
			
		||||
divert(1)dnl
 | 
			
		||||
dnl
 | 
			
		||||
dnl The dnl macro causes m4 to discard the rest of the line, thus
 | 
			
		||||
dnl preventing unwanted blank lines from appearing in the output.
 | 
			
		||||
dnl
 | 
			
		||||
H2(First Section)
 | 
			
		||||
H2(Second Section)
 | 
			
		||||
H2(Conclusion)
 | 
			
		||||
dnl
 | 
			
		||||
divert(0)dnl
 | 
			
		||||
dnl
 | 
			
		||||
<HTML>
 | 
			
		||||
undivert(1)dnl One of the queues is being pushed to output.
 | 
			
		||||
</HTML>
 | 
			
		||||
							
								
								
									
										172
									
								
								samples/M4Sugar/ax_ruby_devel.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								samples/M4Sugar/ax_ruby_devel.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,172 @@
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#       http://www.gnu.org/software/autoconf-archive/ax_ruby_devel.html
 | 
			
		||||
# ===========================================================================
 | 
			
		||||
#
 | 
			
		||||
# SYNOPSIS
 | 
			
		||||
#
 | 
			
		||||
#   AX_RUBY_DEVEL([version])
 | 
			
		||||
#
 | 
			
		||||
# DESCRIPTION
 | 
			
		||||
#
 | 
			
		||||
#   This macro checks for Ruby and tries to get the include path to
 | 
			
		||||
#   'ruby.h'. It provides the $(RUBY_CPPFLAGS) and $(RUBY_LDFLAGS) output
 | 
			
		||||
#   variables. It also exports $(RUBY_EXTRA_LIBS) for embedding Ruby in your
 | 
			
		||||
#   code.
 | 
			
		||||
#
 | 
			
		||||
#   You can search for some particular version of Ruby by passing a
 | 
			
		||||
#   parameter to this macro, for example "1.8.6".
 | 
			
		||||
#
 | 
			
		||||
# LICENSE
 | 
			
		||||
#
 | 
			
		||||
#   Copyright (c) 2008 Rafal Rzepecki <divided.mind@gmail.com>
 | 
			
		||||
#   Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
 | 
			
		||||
#   Copyright (c) 2008 Alan W. Irwin
 | 
			
		||||
#   Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
 | 
			
		||||
#   Copyright (c) 2008 Andrew Collier
 | 
			
		||||
#   Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org>
 | 
			
		||||
#   Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org>
 | 
			
		||||
#
 | 
			
		||||
#   This program is free software: you can redistribute it and/or modify it
 | 
			
		||||
#   under the terms of the GNU General Public License as published by the
 | 
			
		||||
#   Free Software Foundation, either version 3 of the License, or (at your
 | 
			
		||||
#   option) any later version.
 | 
			
		||||
#
 | 
			
		||||
#   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 for more details.
 | 
			
		||||
#
 | 
			
		||||
#   You should have received a copy of the GNU General Public License along
 | 
			
		||||
#   with this program. If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
#
 | 
			
		||||
#   As a special exception, the respective Autoconf Macro's copyright owner
 | 
			
		||||
#   gives unlimited permission to copy, distribute and modify the configure
 | 
			
		||||
#   scripts that are the output of Autoconf when processing the Macro. You
 | 
			
		||||
#   need not follow the terms of the GNU General Public License when using
 | 
			
		||||
#   or distributing such scripts, even though portions of the text of the
 | 
			
		||||
#   Macro appear in them. The GNU General Public License (GPL) does govern
 | 
			
		||||
#   all other use of the material that constitutes the Autoconf Macro.
 | 
			
		||||
#
 | 
			
		||||
#   This special exception to the GPL applies to versions of the Autoconf
 | 
			
		||||
#   Macro released by the Autoconf Archive. When you make and distribute a
 | 
			
		||||
#   modified version of the Autoconf Macro, you may extend this special
 | 
			
		||||
#   exception to the GPL to apply to your modified version as well.
 | 
			
		||||
 | 
			
		||||
#serial 11
 | 
			
		||||
 | 
			
		||||
AC_DEFUN([AX_RUBY_DEVEL],[
 | 
			
		||||
    AC_REQUIRE([AX_WITH_RUBY])
 | 
			
		||||
    AS_IF([test -n "$1"], [AX_PROG_RUBY_VERSION([$1])])
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Check if you have mkmf, else fail
 | 
			
		||||
    #
 | 
			
		||||
    AC_MSG_CHECKING([for the mkmf Ruby package])
 | 
			
		||||
    ac_mkmf_result=`$RUBY -rmkmf -e ";" 2>&1`
 | 
			
		||||
    if test -z "$ac_mkmf_result"; then
 | 
			
		||||
        AC_MSG_RESULT([yes])
 | 
			
		||||
    else
 | 
			
		||||
        AC_MSG_RESULT([no])
 | 
			
		||||
        AC_MSG_ERROR([cannot import Ruby module "mkmf".
 | 
			
		||||
Please check your Ruby installation. The error was:
 | 
			
		||||
$ac_mkmf_result])
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Check for Ruby include path
 | 
			
		||||
    #
 | 
			
		||||
    AC_MSG_CHECKING([for Ruby include path])
 | 
			
		||||
    if test -z "$RUBY_CPPFLAGS"; then
 | 
			
		||||
        ruby_path=`$RUBY -rmkmf -e 'print Config::CONFIG[["archdir"]]'`
 | 
			
		||||
        if test -n "${ruby_path}"; then
 | 
			
		||||
                ruby_path="-I$ruby_path"
 | 
			
		||||
        fi
 | 
			
		||||
        RUBY_CPPFLAGS=$ruby_path
 | 
			
		||||
    fi
 | 
			
		||||
    AC_MSG_RESULT([$RUBY_CPPFLAGS])
 | 
			
		||||
    AC_SUBST([RUBY_CPPFLAGS])
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Check for Ruby library path
 | 
			
		||||
    #
 | 
			
		||||
    AC_MSG_CHECKING([for Ruby library path])
 | 
			
		||||
    if test -z "$RUBY_LDFLAGS"; then
 | 
			
		||||
        RUBY_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LIBRUBYARG_SHARED"]]'`
 | 
			
		||||
    fi
 | 
			
		||||
    AC_MSG_RESULT([$RUBY_LDFLAGS])
 | 
			
		||||
    AC_SUBST([RUBY_LDFLAGS])
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Check for site packages
 | 
			
		||||
    #
 | 
			
		||||
    AC_MSG_CHECKING([for Ruby site-packages path])
 | 
			
		||||
    if test -z "$RUBY_SITE_PKG"; then
 | 
			
		||||
        RUBY_SITE_PKG=`$RUBY -rmkmf -e 'print Config::CONFIG[["sitearchdir"]]'`
 | 
			
		||||
    fi
 | 
			
		||||
    AC_MSG_RESULT([$RUBY_SITE_PKG])
 | 
			
		||||
    AC_SUBST([RUBY_SITE_PKG])
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # libraries which must be linked in when embedding
 | 
			
		||||
    #
 | 
			
		||||
    AC_MSG_CHECKING(ruby extra libraries)
 | 
			
		||||
    if test -z "$RUBY_EXTRA_LIBS"; then
 | 
			
		||||
       RUBY_EXTRA_LIBS=`$RUBY -rmkmf -e 'print Config::CONFIG[["SOLIBS"]]'`
 | 
			
		||||
    fi
 | 
			
		||||
    AC_MSG_RESULT([$RUBY_EXTRA_LIBS])
 | 
			
		||||
    AC_SUBST(RUBY_EXTRA_LIBS)
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # linking flags needed when embedding
 | 
			
		||||
    # (is it even needed for Ruby?)
 | 
			
		||||
    #
 | 
			
		||||
    # AC_MSG_CHECKING(ruby extra linking flags)
 | 
			
		||||
    # if test -z "$RUBY_EXTRA_LDFLAGS"; then
 | 
			
		||||
    # RUBY_EXTRA_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LINKFORSHARED"]]'`
 | 
			
		||||
    # fi
 | 
			
		||||
    # AC_MSG_RESULT([$RUBY_EXTRA_LDFLAGS])
 | 
			
		||||
    # AC_SUBST(RUBY_EXTRA_LDFLAGS)
 | 
			
		||||
 | 
			
		||||
    # this flags breaks ruby.h, and is sometimes defined by KDE m4 macros
 | 
			
		||||
    CFLAGS="`echo "$CFLAGS" | sed -e 's/-std=iso9899:1990//g;'`"
 | 
			
		||||
    #
 | 
			
		||||
    # final check to see if everything compiles alright
 | 
			
		||||
    #
 | 
			
		||||
    AC_MSG_CHECKING([consistency of all components of ruby development environment])
 | 
			
		||||
    AC_LANG_PUSH([C])
 | 
			
		||||
    # save current global flags
 | 
			
		||||
    ac_save_LIBS="$LIBS"
 | 
			
		||||
    LIBS="$ac_save_LIBS $RUBY_LDFLAGS"
 | 
			
		||||
    ac_save_CPPFLAGS="$CPPFLAGS"
 | 
			
		||||
    CPPFLAGS="$ac_save_CPPFLAGS $RUBY_CPPFLAGS"
 | 
			
		||||
    AC_TRY_LINK([
 | 
			
		||||
        #include <ruby.h>
 | 
			
		||||
    ],[
 | 
			
		||||
        ruby_init();
 | 
			
		||||
    ],[rubyexists=yes],[rubyexists=no])
 | 
			
		||||
 | 
			
		||||
    AC_MSG_RESULT([$rubyexists])
 | 
			
		||||
 | 
			
		||||
    if test ! "$rubyexists" = "yes"; then
 | 
			
		||||
       AC_MSG_ERROR([
 | 
			
		||||
  Could not link test program to Ruby. Maybe the main Ruby library has been
 | 
			
		||||
  installed in some non-standard library path. If so, pass it to configure,
 | 
			
		||||
  via the LDFLAGS environment variable.
 | 
			
		||||
  Example: ./configure LDFLAGS="-L/usr/non-standard-path/ruby/lib"
 | 
			
		||||
  ============================================================================
 | 
			
		||||
   ERROR!
 | 
			
		||||
   You probably have to install the development version of the Ruby package
 | 
			
		||||
   for your distribution.  The exact name of this package varies among them.
 | 
			
		||||
  ============================================================================
 | 
			
		||||
       ])
 | 
			
		||||
      RUBY_VERSION=""
 | 
			
		||||
    fi
 | 
			
		||||
    AC_LANG_POP
 | 
			
		||||
    # turn back to default flags
 | 
			
		||||
    CPPFLAGS="$ac_save_CPPFLAGS"
 | 
			
		||||
    LIBS="$ac_save_LIBS"
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # all done!
 | 
			
		||||
    #
 | 
			
		||||
])
 | 
			
		||||
							
								
								
									
										143
									
								
								samples/M4Sugar/filenames/configure.ac
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										143
									
								
								samples/M4Sugar/filenames/configure.ac
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,143 @@
 | 
			
		||||
#                                               -*- Autoconf -*-
 | 
			
		||||
# Process this file with autoconf to produce a configure script.
 | 
			
		||||
 | 
			
		||||
AC_PREREQ(2.68)
 | 
			
		||||
AC_INIT([GARDEN], 
 | 
			
		||||
	[1.0.9], 
 | 
			
		||||
	[bubla@users.sourceforge.net])
 | 
			
		||||
AC_CONFIG_AUX_DIR([build-aux])
 | 
			
		||||
AM_INIT_AUTOMAKE([-Wall])
 | 
			
		||||
AC_CONFIG_SRCDIR([src/input.h])
 | 
			
		||||
AC_CONFIG_HEADERS([src/configure.h])
 | 
			
		||||
AC_CONFIG_MACRO_DIR([m4])
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE([debug],
 | 
			
		||||
	      [AS_HELP_STRING([--enable-debug],
 | 
			
		||||
			   [Builds the debug version of the library [[default = no]]]) ],
 | 
			
		||||
	      [],
 | 
			
		||||
	      [enable_debug="no"])
 | 
			
		||||
 | 
			
		||||
AS_IF([test "x$enable_debug" = "xyes"],
 | 
			
		||||
      [CFLAGS="${CFLAGS} -g -O0"])
 | 
			
		||||
 | 
			
		||||
# Checks for programs.
 | 
			
		||||
AC_PROG_CC
 | 
			
		||||
AC_PROG_LIBTOOL
 | 
			
		||||
LT_PROG_RC
 | 
			
		||||
 | 
			
		||||
AC_CANONICAL_HOST
 | 
			
		||||
 | 
			
		||||
dnl
 | 
			
		||||
dnl Check whether it makes sense to install a garden.desktop file
 | 
			
		||||
dnl
 | 
			
		||||
AC_CHECK_PROG([have_freedesktop],
 | 
			
		||||
	      [update-desktop-database],
 | 
			
		||||
	      [yes])
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL([HAVE_FREEDESKTOP],
 | 
			
		||||
	       [test "x$have_freedesktop" = "xyes"])
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL([WANT_FREEDESKTOP],
 | 
			
		||||
	       [test "x$enable_desktop_install" = "xyes"])
 | 
			
		||||
 | 
			
		||||
AC_ARG_ENABLE([desktop-install],
 | 
			
		||||
	      [AS_HELP_STRING([--enable-desktop-install],
 | 
			
		||||
			      [Whether you want to install the garden.desktop file if applicable. !!! DO NOT USE if you are a PACKAGER!!!])]
 | 
			
		||||
	      )
 | 
			
		||||
 | 
			
		||||
AS_CASE([$host],
 | 
			
		||||
        [*mingw* | *cygwin*],
 | 
			
		||||
        [AC_DEFINE([WINDOWS_VERSION],
 | 
			
		||||
 		   [1],
 | 
			
		||||
		   [Define when building for Windows])
 | 
			
		||||
         windows_version="yes"])
 | 
			
		||||
 | 
			
		||||
AM_CONDITIONAL([WINDOWS_VERSION],
 | 
			
		||||
	       [test "x$windows_version" = "xyes" ])
 | 
			
		||||
 | 
			
		||||
dnl now the datadir specification, that is useful if one does want to play without installing
 | 
			
		||||
AC_ARG_ENABLE([datadir],
 | 
			
		||||
	      [AS_HELP_STRING([--enable-datadir=path-to-your-garden-datafiles],
 | 
			
		||||
			      [Normally you dont have to use this, but it is handy when you want to play the game without installing it or if you want to use already installed data. In the first case, use for instance --enable-datadir=`pwd`/data (if it makes sense)])], 
 | 
			
		||||
	      [DATADIR_NAME="$enableval"],
 | 
			
		||||
	      [DATADIR_NAME='$(datadir)/'garden])
 | 
			
		||||
 | 
			
		||||
# Sets the data subdirectory
 | 
			
		||||
AC_SUBST([DATADIR_NAME])
 | 
			
		||||
 | 
			
		||||
# Checks for libraries.
 | 
			
		||||
AC_CHECK_HEADER([allegro.h],
 | 
			
		||||
		[],
 | 
			
		||||
		[have_allegro="no"
 | 
			
		||||
		 AC_MSG_ERROR([You don't even have Allegro headers... Get Allegro first!]) ])
 | 
			
		||||
 | 
			
		||||
AC_CHECK_LIB([m], [sin])
 | 
			
		||||
 | 
			
		||||
test "x$host_os" != "x$build_os" && CROSS_COMPILING="yes"
 | 
			
		||||
 | 
			
		||||
try_link_allegro ()
 | 
			
		||||
{
 | 
			
		||||
	LIBS_SAVE=$LIBS
 | 
			
		||||
	LIBS="$LIBS $1"
 | 
			
		||||
	AC_MSG_CHECKING([for Allegro using $1])
 | 
			
		||||
	AC_LINK_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT
 | 
			
		||||
					 [ #include <allegro.h> ]],
 | 
			
		||||
					[allegro_init();])END_OF_MAIN() ],
 | 
			
		||||
		       [have_allegro="yes"],
 | 
			
		||||
		       [have_allegro="no"])
 | 
			
		||||
	AC_MSG_RESULT([$have_allegro])
 | 
			
		||||
	LIBS=$LIBS_SAVE
 | 
			
		||||
	AS_IF([test "x$have_allegro" == "xyes"],
 | 
			
		||||
	      [return 0],
 | 
			
		||||
	      [return 1])
 | 
			
		||||
}
 | 
			
		||||
# first check for 'official allegro'
 | 
			
		||||
# The official allegro does not support cross-compiling, though...
 | 
			
		||||
AM_PATH_ALLEGRO([4.2.0]) 
 | 
			
		||||
 | 
			
		||||
try_link_allegro "$allegro_LIBS"
 | 
			
		||||
AS_IF([test "x$?" == "x0"],
 | 
			
		||||
      [[LIBS="$LIBS $allegro_LIBS"
 | 
			
		||||
       ALLEGRO_LIB=`echo $allegro_LIBS | sed -e 's/.*-l\([^[:blank:]]*\).*/\1/'`
 | 
			
		||||
       have_allegro="yes"]])
 | 
			
		||||
 | 
			
		||||
ALLEGRO_RELEASE_LIBS="alleg alleg42 alleg44"
 | 
			
		||||
ALLEGRO_DEBUG_LIBS="alld42 alleg44-debug"
 | 
			
		||||
AS_IF([test "x$enable_debug" = "xyes"],
 | 
			
		||||
      [ALLEGRO_LIBS="$ALLEGRO_DEBUG_LIBS $ALLEGRO_RELEASE_LIBS"],
 | 
			
		||||
      [ALLEGRO_LIBS="$ALLEGRO_RELEASE_LIBS $ALLEGRO_DEBUG_LIBS"])
 | 
			
		||||
 | 
			
		||||
for lib in $ALLEGRO_LIBS
 | 
			
		||||
do
 | 
			
		||||
	ldflag="-l$lib"
 | 
			
		||||
	AS_IF([test "x$have_allegro" == "xyes"],
 | 
			
		||||
	      [break])
 | 
			
		||||
	try_link_allegro $ldflag
 | 
			
		||||
	AS_IF([test "x$?" == "x0"],
 | 
			
		||||
	      [LIBS="$LIBS $ldflag"
 | 
			
		||||
	       ALLEGRO_LIB="$lib"
 | 
			
		||||
	       have_allegro="yes"])
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
AS_IF([test "x$have_allegro" != "xyes"],
 | 
			
		||||
      [AC_MSG_ERROR([Unable to find Allegro game programming library 4.2, check out www.allegro.cc (or your distro repositories if you use a unix-like system)]) ])
 | 
			
		||||
 | 
			
		||||
# Checks for header files.
 | 
			
		||||
AC_CHECK_HEADERS([string.h sys/stat.h])
 | 
			
		||||
 | 
			
		||||
# Checks for typedefs, structures, and compiler characteristics.
 | 
			
		||||
AC_C_INLINE
 | 
			
		||||
AC_HEADER_STDBOOL
 | 
			
		||||
 | 
			
		||||
# Checks for library functions.
 | 
			
		||||
 | 
			
		||||
AC_SUBST([ALLEGRO_LIB])
 | 
			
		||||
 | 
			
		||||
AC_CONFIG_FILES([Makefile
 | 
			
		||||
                 src/Makefile
 | 
			
		||||
		 data/Makefile
 | 
			
		||||
		 resources/Makefile
 | 
			
		||||
	 	 docs/garden.doxyfile
 | 
			
		||||
		 pkgs/w32/winstaller.nsi])
 | 
			
		||||
 | 
			
		||||
AC_OUTPUT
 | 
			
		||||
							
								
								
									
										46
									
								
								samples/M4Sugar/list.m4
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								samples/M4Sugar/list.m4
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,46 @@
 | 
			
		||||
m4_define([m4_list_declare], [m4_do(
 | 
			
		||||
	[m4_define([$1_GET], [m4_expand([m4_list_nth([$1], $][1)])])],
 | 
			
		||||
	[m4_define([$1_FOREACH], [m4_foreach([item], [m4_dquote_elt(m4_list_contents([$1]))], m4_quote($][1))])],
 | 
			
		||||
)])
 | 
			
		||||
 | 
			
		||||
m4_define([m4_list_add], [m4_do(
 | 
			
		||||
	[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
 | 
			
		||||
	[m4_ifndef(_LIST_NAME,
 | 
			
		||||
		[m4_define(_LIST_NAME, m4_dquote(m4_escape([$2])))],
 | 
			
		||||
		[m4_define(_LIST_NAME, m4_dquote(m4_list_contents([$1]), m4_escape([$2])))],
 | 
			
		||||
	)],
 | 
			
		||||
	[m4_popdef([_LIST_NAME])],
 | 
			
		||||
)])
 | 
			
		||||
 | 
			
		||||
m4_define([m4_list_contents], [m4_do(
 | 
			
		||||
	[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
 | 
			
		||||
	[m4_ifndef(_LIST_NAME, [], m4_quote(_LIST_NAME))],
 | 
			
		||||
	[m4_popdef([_LIST_NAME])],
 | 
			
		||||
)])
 | 
			
		||||
 | 
			
		||||
m4_define([m4_list_nth], [m4_argn([$2], m4_list_contents([$1]))])
 | 
			
		||||
 | 
			
		||||
m4_define([m4_list_pop_front], [m4_do(
 | 
			
		||||
	[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
 | 
			
		||||
	[m4_car(m4_unquote(_LIST_NAME))],
 | 
			
		||||
	[m4_define(_LIST_NAME, m4_cdr(m4_unquote(_LIST_NAME)))],
 | 
			
		||||
	[m4_popdef([_LIST_NAME])],
 | 
			
		||||
)])
 | 
			
		||||
 | 
			
		||||
m4_define([m4_list_pop_back], [m4_do(
 | 
			
		||||
	[m4_pushdef([_LIST_NAME], [[_LIST_$1]])],
 | 
			
		||||
	[m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))],
 | 
			
		||||
	[m4_list_pop_front([$1])],
 | 
			
		||||
	[m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))],
 | 
			
		||||
	[m4_popdef([_LIST_NAME])],
 | 
			
		||||
)])
 | 
			
		||||
 | 
			
		||||
dnl
 | 
			
		||||
dnl $1: List name
 | 
			
		||||
dnl $2: What
 | 
			
		||||
dnl $3: If contains
 | 
			
		||||
dnl $4: If not
 | 
			
		||||
m4_define([m4_list_contains], [m4_do(
 | 
			
		||||
	[m4_foreach([item], m4_list_contents([$1]), m4_if(item, [$2], [[$3]], [[$4]]))]
 | 
			
		||||
)])
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								samples/Makefile/filenames/BSDmakefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								samples/Makefile/filenames/BSDmakefile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
# pmake might add -J (private)
 | 
			
		||||
FLAGS=${.MAKEFLAGS:C/\-J ([0-9]+,?)+//W}
 | 
			
		||||
 | 
			
		||||
all: .DEFAULT
 | 
			
		||||
.DEFAULT:
 | 
			
		||||
	@which gmake > /dev/null 2>&1 ||\
 | 
			
		||||
		(echo "GMake is required for node.js to build.\
 | 
			
		||||
			Install and try again" && exit 1)
 | 
			
		||||
	@gmake ${.FLAGS} ${.TARGETS}
 | 
			
		||||
 | 
			
		||||
.PHONY: test
 | 
			
		||||
							
								
								
									
										77
									
								
								samples/Makefile/filenames/Makefile.frag
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								samples/Makefile/filenames/Makefile.frag
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,77 @@
 | 
			
		||||
all: link-php-objects index-php-objects $(all_targets)
 | 
			
		||||
	@echo
 | 
			
		||||
	@echo "Build complete."
 | 
			
		||||
	@echo "Don't forget to run 'make test'."
 | 
			
		||||
	@echo
 | 
			
		||||
 | 
			
		||||
generate-php-objects:
 | 
			
		||||
	@echo "Generating PHP objects in $(PHP_DIR)"
 | 
			
		||||
	@for f in `ls $(PHP_DIR)/*.php`; do \
 | 
			
		||||
		objcopy --input binary --output elf64-x86-64 --binary-architecture i386 $$f $$f.o; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
link-php-objects: generate-php-objects
 | 
			
		||||
	@echo "Linking PHP objects in $(PHP_DIR)"
 | 
			
		||||
	@for f in `ls $(PHP_DIR)/*.php`; do \
 | 
			
		||||
		ar rcs $(PHP_DIR)/lib$(PHP_LIB).a $$f.o; \
 | 
			
		||||
	done;
 | 
			
		||||
 | 
			
		||||
index-php-objects: link-php-objects
 | 
			
		||||
	@echo "Indexing PHP objects in $(PHP_DIR)"
 | 
			
		||||
	@echo "#ifndef HAVE_PHP_$(PHP_LIB)_H" 																	> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "#define HAVE_PHP_$(PHP_LIB)_H" 																	>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "/* I AM GENERATED | DO NOT EDIT | I AM GENERATED */"												>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@for f in `ls $(PHP_DIR)/*.php`; do \
 | 
			
		||||
		name=`echo $$f | sed 's/[^a-z]/_/g'`; \
 | 
			
		||||
		echo "extern char _binary_"$$name"_start;" 															>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "static inline char* php_index_$(PHP_LIB)_"$$name"() {" 										>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "	return (char*) &_binary_"$$name"_start;"													>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "}"																							>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "extern char _binary_"$$name"_end;" 															>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "static inline char* php_index_$(PHP_LIB)_"$$name"_end() {" 									>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "	return (char*) &_binary_"$$name"_end;"														>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "}"																							>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "static inline size_t php_index_$(PHP_LIB)_"$$name"_size() {" 									>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "	return (size_t) (php_index_$(PHP_LIB)_"$$name"_end() - php_index_$(PHP_LIB)_"$$name"());"	>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "}"																							>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
	done;
 | 
			
		||||
	@echo "static inline php_$(PHP_LIB)_init(HashTable *index, HashTable *includes) {"						>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zval val;"																						>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zend_hash_init(index, 8, NULL, ZVAL_PTR_DTOR, 0);"												>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zend_hash_init(includes, 8, NULL, NULL, 0);"													>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@for f in `ls $(PHP_DIR)/*.php`; do \
 | 
			
		||||
		name=`echo $$f | sed 's/[^a-z]/_/g'`; \
 | 
			
		||||
		echo "	ZVAL_NEW_STR(&val, zend_string_init(\
 | 
			
		||||
					php_index_$(PHP_LIB)_"$$name"(), \
 | 
			
		||||
						php_index_$(PHP_LIB)_"$$name"_size(), 0));"											>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
		echo "	zend_hash_str_add(index, \""$$f"\", sizeof(\""$$f"\")-1, &val);"							>> $(PHP_DIR)/$(PHP_LIB).h; \
 | 
			
		||||
	done;
 | 
			
		||||
	@echo "}"																								>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "static inline void php_$(PHP_LIB)_include(HashTable *index, HashTable *includes, \
 | 
			
		||||
					char *path, size_t len, zval *retval) {"												>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zend_string *key = zend_string_init(path, len, 0);"												>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zval *code = zend_hash_find(index, key);"														>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	if (code && !zend_hash_exists(includes, key)) {"												>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		zend_string *prepared = zend_string_alloc(Z_STRLEN_P(code) + (sizeof(\";\")-1), 0);"		>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo																									>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		memcpy(&ZSTR_VAL(prepared)[0], \";\", sizeof(\";\")-1);"									>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		if (Z_STRLEN_P(code) > (sizeof(\"<?php\") -1) && "											>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "			memcmp(Z_STRVAL_P(code), \"<?php\", sizeof(\"<?php\")-1) == SUCCESS) {"					>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "				memcpy(&ZSTR_VAL(prepared)[1], &Z_STRVAL_P(code)[5], \
 | 
			
		||||
							Z_STRLEN_P(code) - (sizeof(\"<?php\") - 1));"									>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "				ZSTR_LEN(prepared) -= (sizeof(\"<?php\") - 1);"										>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "				ZSTR_VAL(prepared)[ZSTR_LEN(prepared)] = 0;"										>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		} else {"																					>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "			memcpy(&ZSTR_VAL(prepared)[1], Z_STRVAL_P(code), Z_STRLEN_P(code));"					>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		}"																							>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		zend_eval_stringl(ZSTR_VAL(prepared), ZSTR_LEN(prepared), retval, path);"					>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		zend_hash_add_empty_element(includes, key);"												>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "		zend_string_release(prepared);"																>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	}"																								>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zend_string_release(key);"																		>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "}"																								>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "static inline void php_$(PHP_LIB)_shutdown(HashTable *index, HashTable *includes) {"				>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zend_hash_destroy(index);"																		>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "	zend_hash_destroy(includes);"																	>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "}"																								>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
	@echo "#endif"																							>> $(PHP_DIR)/$(PHP_LIB).h
 | 
			
		||||
							
								
								
									
										226
									
								
								samples/Makefile/filenames/makefile.sco
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										226
									
								
								samples/Makefile/filenames/makefile.sco
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,226 @@
 | 
			
		||||
# makefile for SCO OSr5  ELF and Unixware 7 with Native cc
 | 
			
		||||
# Contributed by Mike Hopkirk (hops@sco.com) modified from Makefile.lnx
 | 
			
		||||
#   force ELF build dynamic linking, SONAME setting in lib and RPATH in app
 | 
			
		||||
# Copyright (C) 2002, 2006, 2010-2014 Glenn Randers-Pehrson
 | 
			
		||||
# Copyright (C) 1998 Greg Roelofs
 | 
			
		||||
# Copyright (C) 1996, 1997 Andreas Dilger
 | 
			
		||||
#
 | 
			
		||||
# This code is released under the libpng license.
 | 
			
		||||
# For conditions of distribution and use, see the disclaimer
 | 
			
		||||
# and license in png.h
 | 
			
		||||
 | 
			
		||||
# Library name:
 | 
			
		||||
LIBNAME = libpng16
 | 
			
		||||
PNGMAJ = 16
 | 
			
		||||
 | 
			
		||||
# Shared library names:
 | 
			
		||||
LIBSO=$(LIBNAME).so
 | 
			
		||||
LIBSOMAJ=$(LIBNAME).so.$(PNGMAJ)
 | 
			
		||||
LIBSOREL=$(LIBSOMAJ).$(RELEASE)
 | 
			
		||||
OLDSO=libpng.so
 | 
			
		||||
 | 
			
		||||
# Utilities:
 | 
			
		||||
CC=cc
 | 
			
		||||
AR_RC=ar rc
 | 
			
		||||
MKDIR_P=mkdir
 | 
			
		||||
LN_SF=ln -f -s
 | 
			
		||||
RANLIB=echo
 | 
			
		||||
CP=cp
 | 
			
		||||
RM_F=/bin/rm -f
 | 
			
		||||
 | 
			
		||||
# where make install puts libpng.a, $(OLDSO)*, and png.h
 | 
			
		||||
prefix=/usr/local
 | 
			
		||||
exec_prefix=$(prefix)
 | 
			
		||||
 | 
			
		||||
# Where the zlib library and include files are located
 | 
			
		||||
#ZLIBLIB=/usr/local/lib
 | 
			
		||||
#ZLIBINC=/usr/local/include
 | 
			
		||||
ZLIBLIB=../zlib
 | 
			
		||||
ZLIBINC=../zlib
 | 
			
		||||
 | 
			
		||||
CPPFLAGS=-I$(ZLIBINC)
 | 
			
		||||
CFLAGS= -dy -belf -O3
 | 
			
		||||
LDFLAGS=-L. -L$(ZLIBLIB) -lpng16 -lz -lm
 | 
			
		||||
 | 
			
		||||
INCPATH=$(prefix)/include
 | 
			
		||||
LIBPATH=$(exec_prefix)/lib
 | 
			
		||||
MANPATH=$(prefix)/man
 | 
			
		||||
BINPATH=$(exec_prefix)/bin
 | 
			
		||||
 | 
			
		||||
# override DESTDIR= on the make install command line to easily support
 | 
			
		||||
# installing into a temporary location.  Example:
 | 
			
		||||
#
 | 
			
		||||
#    make install DESTDIR=/tmp/build/libpng
 | 
			
		||||
#
 | 
			
		||||
# If you're going to install into a temporary location
 | 
			
		||||
# via DESTDIR, $(DESTDIR)$(prefix) must already exist before
 | 
			
		||||
# you execute make install.
 | 
			
		||||
DESTDIR=
 | 
			
		||||
 | 
			
		||||
DB=$(DESTDIR)$(BINPATH)
 | 
			
		||||
DI=$(DESTDIR)$(INCPATH)
 | 
			
		||||
DL=$(DESTDIR)$(LIBPATH)
 | 
			
		||||
DM=$(DESTDIR)$(MANPATH)
 | 
			
		||||
 | 
			
		||||
# Pre-built configuration
 | 
			
		||||
# See scripts/pnglibconf.mak for more options
 | 
			
		||||
PNGLIBCONF_H_PREBUILT = scripts/pnglibconf.h.prebuilt
 | 
			
		||||
 | 
			
		||||
OBJS = png.o pngset.o pngget.o pngrutil.o pngtrans.o pngwutil.o \
 | 
			
		||||
	pngread.o pngrio.o pngwio.o pngwrite.o pngrtran.o \
 | 
			
		||||
	pngwtran.o pngmem.o pngerror.o pngpread.o
 | 
			
		||||
 | 
			
		||||
OBJSDLL = $(OBJS:.o=.pic.o)
 | 
			
		||||
 | 
			
		||||
.SUFFIXES:      .c .o .pic.o
 | 
			
		||||
 | 
			
		||||
.c.o:
 | 
			
		||||
	$(CC) -c $(CPPFLAGS) $(CFLAGS) -o $@ $<
 | 
			
		||||
 | 
			
		||||
.c.pic.o:
 | 
			
		||||
	$(CC) -c $(CPPFLAGS) $(CFLAGS) -KPIC -o $@ $*.c
 | 
			
		||||
 | 
			
		||||
all: libpng.a $(LIBSO) pngtest libpng.pc libpng-config
 | 
			
		||||
 | 
			
		||||
pnglibconf.h: $(PNGLIBCONF_H_PREBUILT)
 | 
			
		||||
	$(CP) $(PNGLIBCONF_H_PREBUILT) $@
 | 
			
		||||
 | 
			
		||||
libpng.a: $(OBJS)
 | 
			
		||||
	$(AR_RC) $@ $(OBJS)
 | 
			
		||||
	$(RANLIB) $@
 | 
			
		||||
 | 
			
		||||
libpng.pc:
 | 
			
		||||
	cat scripts/libpng.pc.in | sed -e s!@prefix@!$(prefix)! \
 | 
			
		||||
	-e s!@exec_prefix@!$(exec_prefix)! \
 | 
			
		||||
	-e s!@libdir@!$(LIBPATH)! \
 | 
			
		||||
	-e s!@includedir@!$(INCPATH)! \
 | 
			
		||||
	-e s!-lpng16!-lpng16\ -lz\ -lm! > libpng.pc
 | 
			
		||||
 | 
			
		||||
libpng-config:
 | 
			
		||||
	( cat scripts/libpng-config-head.in; \
 | 
			
		||||
	echo prefix=\"$(prefix)\"; \
 | 
			
		||||
	echo I_opts=\"-I$(INCPATH)/$(LIBNAME)\"; \
 | 
			
		||||
	echo ccopts=\"-belf\"; \
 | 
			
		||||
	echo L_opts=\"-L$(LIBPATH)\"; \
 | 
			
		||||
	echo libs=\"-lpng16 -lz -lm\"; \
 | 
			
		||||
	cat scripts/libpng-config-body.in ) > libpng-config
 | 
			
		||||
	chmod +x libpng-config
 | 
			
		||||
 | 
			
		||||
$(LIBSO): $(LIBSOMAJ)
 | 
			
		||||
	$(LN_SF) $(LIBSOMAJ) $(LIBSO)
 | 
			
		||||
 | 
			
		||||
$(LIBSOMAJ): $(OBJSDLL)
 | 
			
		||||
	$(CC) -G  -Wl,-h,$(LIBSOMAJ) -o $(LIBSOMAJ) \
 | 
			
		||||
	 $(OBJSDLL)
 | 
			
		||||
 | 
			
		||||
pngtest: pngtest.o $(LIBSO)
 | 
			
		||||
	LD_RUN_PATH=.:$(ZLIBLIB) $(CC) -o pngtest $(CFLAGS) pngtest.o $(LDFLAGS)
 | 
			
		||||
 | 
			
		||||
test: pngtest
 | 
			
		||||
	./pngtest
 | 
			
		||||
 | 
			
		||||
install-headers: png.h pngconf.h pnglibconf.h
 | 
			
		||||
	-@if [ ! -d $(DI) ]; then $(MKDIR_P) $(DI); fi
 | 
			
		||||
	-@if [ ! -d $(DI)/$(LIBNAME) ]; then $(MKDIR_P) $(DI)/$(LIBNAME); fi
 | 
			
		||||
	-@$(RM_F) $(DI)/png.h
 | 
			
		||||
	-@$(RM_F) $(DI)/pngconf.h
 | 
			
		||||
	-@$(RM_F) $(DI)/pnglibconf.h
 | 
			
		||||
	cp png.h pngconf.h pnglibconf.h $(DI)/$(LIBNAME)
 | 
			
		||||
	chmod 644 $(DI)/$(LIBNAME)/png.h $(DI)/$(LIBNAME)/pngconf.h $(DI)/$(LIBNAME)/pnglibconf.h
 | 
			
		||||
	-@$(RM_F) $(DI)/png.h $(DI)/pngconf.h $(DI)/pnglibconf.h
 | 
			
		||||
	-@$(RM_F) $(DI)/libpng
 | 
			
		||||
	(cd $(DI); $(LN_SF) $(LIBNAME) libpng; $(LN_SF) $(LIBNAME)/* .)
 | 
			
		||||
 | 
			
		||||
install-static: install-headers libpng.a
 | 
			
		||||
	-@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
 | 
			
		||||
	cp libpng.a $(DL)/$(LIBNAME).a
 | 
			
		||||
	chmod 644 $(DL)/$(LIBNAME).a
 | 
			
		||||
	-@$(RM_F) $(DL)/libpng.a
 | 
			
		||||
	(cd $(DL); $(LN_SF) $(LIBNAME).a libpng.a)
 | 
			
		||||
 | 
			
		||||
install-shared: install-headers $(LIBSOMAJ) libpng.pc
 | 
			
		||||
	-@if [ ! -d $(DL) ]; then $(MKDIR_P) $(DL); fi
 | 
			
		||||
	-@$(RM_F) $(DL)/$(LIBSO)
 | 
			
		||||
	-@$(RM_F) $(DL)/$(LIBSOREL)
 | 
			
		||||
	-@$(RM_F) $(DL)/$(OLDSO)
 | 
			
		||||
	cp $(LIBSOMAJ) $(DL)/$(LIBSOREL)
 | 
			
		||||
	chmod 755 $(DL)/$(LIBSOREL)
 | 
			
		||||
	(cd $(DL); \
 | 
			
		||||
	$(LN_SF) $(LIBSOREL) $(LIBSO); \
 | 
			
		||||
	$(LN_SF) $(LIBSO) $(OLDSO))
 | 
			
		||||
	-@if [ ! -d $(DL)/pkgconfig ]; then $(MKDIR_P) $(DL)/pkgconfig; fi
 | 
			
		||||
	-@$(RM_F) $(DL)/pkgconfig/$(LIBNAME).pc
 | 
			
		||||
	-@$(RM_F) $(DL)/pkgconfig/libpng.pc
 | 
			
		||||
	cp libpng.pc $(DL)/pkgconfig/$(LIBNAME).pc
 | 
			
		||||
	chmod 644 $(DL)/pkgconfig/$(LIBNAME).pc
 | 
			
		||||
	(cd $(DL)/pkgconfig; $(LN_SF) $(LIBNAME).pc libpng.pc)
 | 
			
		||||
 | 
			
		||||
install-man: libpng.3 libpngpf.3 png.5
 | 
			
		||||
	-@if [ ! -d $(DM) ]; then $(MKDIR_P) $(DM); fi
 | 
			
		||||
	-@if [ ! -d $(DM)/man3 ]; then $(MKDIR_P) $(DM)/man3; fi
 | 
			
		||||
	-@$(RM_F) $(DM)/man3/libpng.3
 | 
			
		||||
	-@$(RM_F) $(DM)/man3/libpngpf.3
 | 
			
		||||
	cp libpng.3 $(DM)/man3
 | 
			
		||||
	cp libpngpf.3 $(DM)/man3
 | 
			
		||||
	-@if [ ! -d $(DM)/man5 ]; then $(MKDIR_P) $(DM)/man5; fi
 | 
			
		||||
	-@$(RM_F) $(DM)/man5/png.5
 | 
			
		||||
	cp png.5 $(DM)/man5
 | 
			
		||||
 | 
			
		||||
install-config: libpng-config
 | 
			
		||||
	-@if [ ! -d $(DB) ]; then $(MKDIR_P) $(DB); fi
 | 
			
		||||
	-@$(RM_F) $(DB)/libpng-config
 | 
			
		||||
	-@$(RM_F) $(DB)/$(LIBNAME)-config
 | 
			
		||||
	cp libpng-config $(DB)/$(LIBNAME)-config
 | 
			
		||||
	chmod 755 $(DB)/$(LIBNAME)-config
 | 
			
		||||
	(cd $(DB); $(LN_SF) $(LIBNAME)-config libpng-config)
 | 
			
		||||
 | 
			
		||||
install: install-static install-shared install-man install-config
 | 
			
		||||
 | 
			
		||||
# If you installed in $(DESTDIR), test-installed won't work until you
 | 
			
		||||
# move the library to its final location.  Use test-dd to test it
 | 
			
		||||
# before then.
 | 
			
		||||
 | 
			
		||||
test-dd:
 | 
			
		||||
	echo
 | 
			
		||||
	echo Testing installed dynamic shared library in $(DL).
 | 
			
		||||
	$(CC) -I$(DI) $(CPPFLAGS) \
 | 
			
		||||
	   `$(BINPATH)/$(LIBNAME)-config --cflags` pngtest.c \
 | 
			
		||||
	   -L$(DL) -L$(ZLIBLIB) \
 | 
			
		||||
	   -o pngtestd `$(BINPATH)/$(LIBNAME)-config --ldflags`
 | 
			
		||||
	./pngtestd pngtest.png
 | 
			
		||||
 | 
			
		||||
test-installed:
 | 
			
		||||
	$(CC) $(CPPFLAGS) $(CFLAGS) \
 | 
			
		||||
	   `$(BINPATH)/$(LIBNAME)-config --cflags` pngtest.c \
 | 
			
		||||
	   -L$(ZLIBLIB) \
 | 
			
		||||
	   -o pngtesti `$(BINPATH)/$(LIBNAME)-config --ldflags`
 | 
			
		||||
	./pngtesti pngtest.png
 | 
			
		||||
 | 
			
		||||
clean:
 | 
			
		||||
	$(RM_F) *.o libpng.a pngtest pngout.png libpng-config \
 | 
			
		||||
	$(LIBSO) $(LIBSOMAJ)* pngtest-static pngtesti \
 | 
			
		||||
	pnglibconf.h libpng.pc
 | 
			
		||||
 | 
			
		||||
DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
 | 
			
		||||
writelock:
 | 
			
		||||
	chmod a-w *.[ch35] $(DOCS) scripts/*
 | 
			
		||||
 | 
			
		||||
# DO NOT DELETE THIS LINE -- make depend depends on it.
 | 
			
		||||
 | 
			
		||||
png.o png.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngerror.o pngerror.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngrio.o pngrio.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngwio.o pngwio.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngmem.o pngmem.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngset.o pngset.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngget.o pngget.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngread.o pngread.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngrtran.o pngrtran.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngrutil.o pngrutil.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngtrans.o pngtrans.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngwrite.o pngwrite.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngwtran.o pngwtran.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngwutil.o pngwutil.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
pngpread.o pngpread.pic.o: png.h pngconf.h pnglibconf.h pngpriv.h pngstruct.h pnginfo.h pngdebug.h
 | 
			
		||||
 | 
			
		||||
pngtest.o: png.h pngconf.h pnglibconf.h
 | 
			
		||||
							
								
								
									
										9
									
								
								samples/Makefile/filenames/mkfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								samples/Makefile/filenames/mkfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
GREETINGS=hello gday bonjour hola ola kaixo tag hoi konnichiwa nihao dobredan namaste salaam
 | 
			
		||||
 | 
			
		||||
all:V:
 | 
			
		||||
	mk greet.^($GREETINGS)
 | 
			
		||||
	for(i in $GREETINGS)
 | 
			
		||||
		mk $i
 | 
			
		||||
 | 
			
		||||
greet.%: text-folder
 | 
			
		||||
	/n/$printer $stem >[2=1]
 | 
			
		||||
							
								
								
									
										19
									
								
								samples/OpenRC runscript/acpid
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								samples/OpenRC runscript/acpid
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
#!/sbin/openrc-run
 | 
			
		||||
 | 
			
		||||
description="Daemon for Advanced Configuration and Power Interface"
 | 
			
		||||
 | 
			
		||||
extra_started_commands="reload"
 | 
			
		||||
command="/usr/sbin/acpid"
 | 
			
		||||
command_args="$ACPID_ARGS"
 | 
			
		||||
start_stop_daemon_args="--quiet"
 | 
			
		||||
 | 
			
		||||
depend() {
 | 
			
		||||
	need localmount
 | 
			
		||||
	use logger
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
reload() {
 | 
			
		||||
	ebegin "Reloading acpid configuration"
 | 
			
		||||
	start-stop-daemon --exec $command --signal HUP
 | 
			
		||||
	eend $?
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8399
									
								
								samples/PAWN/fixes.inc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8399
									
								
								samples/PAWN/fixes.inc
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -1,520 +0,0 @@
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
//
 | 
			
		||||
// GRAND LARCENY 1.0
 | 
			
		||||
// A freeroam gamemode for SA-MP 0.3
 | 
			
		||||
//
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#include <a_samp>
 | 
			
		||||
#include <core>
 | 
			
		||||
#include <float>
 | 
			
		||||
#include "../include/gl_common.inc"
 | 
			
		||||
#include "../include/gl_spawns.inc"
 | 
			
		||||
 | 
			
		||||
#pragma tabsize 0
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
#define COLOR_WHITE                 0xFFFFFFFF
 | 
			
		||||
#define COLOR_NORMAL_PLAYER 0xFFBB7777
 | 
			
		||||
 | 
			
		||||
#define CITY_LOS_SANTOS         0
 | 
			
		||||
#define CITY_SAN_FIERRO         1
 | 
			
		||||
#define CITY_LAS_VENTURAS         2
 | 
			
		||||
 | 
			
		||||
new total_vehicles_from_files=0;
 | 
			
		||||
 | 
			
		||||
// Class selection globals
 | 
			
		||||
new gPlayerCitySelection[MAX_PLAYERS];
 | 
			
		||||
new gPlayerHasCitySelected[MAX_PLAYERS];
 | 
			
		||||
new gPlayerLastCitySelectionTick[MAX_PLAYERS];
 | 
			
		||||
 | 
			
		||||
new Text:txtClassSelHelper;
 | 
			
		||||
new Text:txtLosSantos;
 | 
			
		||||
new Text:txtSanFierro;
 | 
			
		||||
new Text:txtLasVenturas;
 | 
			
		||||
 | 
			
		||||
new thisanimid=0;
 | 
			
		||||
new lastanimid=0;
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
{
 | 
			
		||||
        print("\n---------------------------------------");
 | 
			
		||||
        print("Running Grand Larceny - by the SA-MP team\n");
 | 
			
		||||
        print("---------------------------------------\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
public OnPlayerConnect(playerid)
 | 
			
		||||
{
 | 
			
		||||
        GameTextForPlayer(playerid,"~w~Grand Larceny",3000,4);
 | 
			
		||||
          SendClientMessage(playerid,COLOR_WHITE,"Welcome to {88AA88}G{FFFFFF}rand {88AA88}L{FFFFFF}arceny");
 | 
			
		||||
          
 | 
			
		||||
          // class selection init vars
 | 
			
		||||
          gPlayerCitySelection[playerid] = -1;
 | 
			
		||||
        gPlayerHasCitySelected[playerid] = 0;
 | 
			
		||||
        gPlayerLastCitySelectionTick[playerid] = GetTickCount();
 | 
			
		||||
 | 
			
		||||
        //SetPlayerColor(playerid,COLOR_NORMAL_PLAYER);
 | 
			
		||||
 | 
			
		||||
        //Kick(playerid);
 | 
			
		||||
        
 | 
			
		||||
        /*
 | 
			
		||||
        Removes vending machines
 | 
			
		||||
        RemoveBuildingForPlayer(playerid, 1302, 0.0, 0.0, 0.0, 6000.0);
 | 
			
		||||
        RemoveBuildingForPlayer(playerid, 1209, 0.0, 0.0, 0.0, 6000.0);
 | 
			
		||||
        RemoveBuildingForPlayer(playerid, 955, 0.0, 0.0, 0.0, 6000.0);
 | 
			
		||||
        RemoveBuildingForPlayer(playerid, 1775, 0.0, 0.0, 0.0, 6000.0);
 | 
			
		||||
        RemoveBuildingForPlayer(playerid, 1776, 0.0, 0.0, 0.0, 6000.0);
 | 
			
		||||
        */
 | 
			
		||||
        
 | 
			
		||||
        /*
 | 
			
		||||
        new ClientVersion[32];
 | 
			
		||||
        GetPlayerVersion(playerid, ClientVersion, 32);
 | 
			
		||||
        printf("Player %d reports client version: %s", playerid, ClientVersion);*/
 | 
			
		||||
 | 
			
		||||
         return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
public OnPlayerSpawn(playerid)
 | 
			
		||||
{
 | 
			
		||||
        if(IsPlayerNPC(playerid)) return 1;
 | 
			
		||||
        
 | 
			
		||||
        new randSpawn = 0;
 | 
			
		||||
        
 | 
			
		||||
        SetPlayerInterior(playerid,0);
 | 
			
		||||
        TogglePlayerClock(playerid,0);
 | 
			
		||||
         ResetPlayerMoney(playerid);
 | 
			
		||||
        GivePlayerMoney(playerid, 30000);
 | 
			
		||||
 | 
			
		||||
        if(CITY_LOS_SANTOS == gPlayerCitySelection[playerid]) {
 | 
			
		||||
          randSpawn = random(sizeof(gRandomSpawns_LosSantos));
 | 
			
		||||
          SetPlayerPos(playerid,
 | 
			
		||||
                 gRandomSpawns_LosSantos[randSpawn][0],
 | 
			
		||||
                 gRandomSpawns_LosSantos[randSpawn][1],
 | 
			
		||||
                 gRandomSpawns_LosSantos[randSpawn][2]);
 | 
			
		||||
                SetPlayerFacingAngle(playerid,gRandomSpawns_LosSantos[randSpawn][3]);
 | 
			
		||||
        }
 | 
			
		||||
        else if(CITY_SAN_FIERRO == gPlayerCitySelection[playerid]) {
 | 
			
		||||
          randSpawn = random(sizeof(gRandomSpawns_SanFierro));
 | 
			
		||||
          SetPlayerPos(playerid,
 | 
			
		||||
                 gRandomSpawns_SanFierro[randSpawn][0],
 | 
			
		||||
                 gRandomSpawns_SanFierro[randSpawn][1],
 | 
			
		||||
                 gRandomSpawns_SanFierro[randSpawn][2]);
 | 
			
		||||
                SetPlayerFacingAngle(playerid,gRandomSpawns_SanFierro[randSpawn][3]);
 | 
			
		||||
        }
 | 
			
		||||
        else if(CITY_LAS_VENTURAS == gPlayerCitySelection[playerid]) {
 | 
			
		||||
          randSpawn = random(sizeof(gRandomSpawns_LasVenturas));
 | 
			
		||||
          SetPlayerPos(playerid,
 | 
			
		||||
                 gRandomSpawns_LasVenturas[randSpawn][0],
 | 
			
		||||
                 gRandomSpawns_LasVenturas[randSpawn][1],
 | 
			
		||||
                 gRandomSpawns_LasVenturas[randSpawn][2]);
 | 
			
		||||
                SetPlayerFacingAngle(playerid,gRandomSpawns_LasVenturas[randSpawn][3]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //SetPlayerColor(playerid,COLOR_NORMAL_PLAYER);
 | 
			
		||||
        
 | 
			
		||||
        SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL_SILENCED,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_DESERT_EAGLE,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_SHOTGUN,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_SAWNOFF_SHOTGUN,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_SPAS12_SHOTGUN,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_MICRO_UZI,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_MP5,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_AK47,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_M4,200);
 | 
			
		||||
    SetPlayerSkillLevel(playerid,WEAPONSKILL_SNIPERRIFLE,200);
 | 
			
		||||
    
 | 
			
		||||
    GivePlayerWeapon(playerid,WEAPON_COLT45,100);
 | 
			
		||||
        //GivePlayerWeapon(playerid,WEAPON_MP5,100);
 | 
			
		||||
        TogglePlayerClock(playerid, 0);
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
public OnPlayerDeath(playerid, killerid, reason)
 | 
			
		||||
{
 | 
			
		||||
    new playercash;
 | 
			
		||||
    
 | 
			
		||||
    // if they ever return to class selection make them city
 | 
			
		||||
        // select again first
 | 
			
		||||
        gPlayerHasCitySelected[playerid] = 0;
 | 
			
		||||
    
 | 
			
		||||
        if(killerid == INVALID_PLAYER_ID) {
 | 
			
		||||
        ResetPlayerMoney(playerid);
 | 
			
		||||
        } else {
 | 
			
		||||
                playercash = GetPlayerMoney(playerid);
 | 
			
		||||
                if(playercash > 0) {
 | 
			
		||||
                        GivePlayerMoney(killerid, playercash);
 | 
			
		||||
                        ResetPlayerMoney(playerid);
 | 
			
		||||
                }
 | 
			
		||||
        }
 | 
			
		||||
           return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ClassSel_SetupCharSelection(playerid)
 | 
			
		||||
{
 | 
			
		||||
           if(gPlayerCitySelection[playerid] == CITY_LOS_SANTOS) {
 | 
			
		||||
                SetPlayerInterior(playerid,11);
 | 
			
		||||
                SetPlayerPos(playerid,508.7362,-87.4335,998.9609);
 | 
			
		||||
                SetPlayerFacingAngle(playerid,0.0);
 | 
			
		||||
            SetPlayerCameraPos(playerid,508.7362,-83.4335,998.9609);
 | 
			
		||||
                SetPlayerCameraLookAt(playerid,508.7362,-87.4335,998.9609);
 | 
			
		||||
        }
 | 
			
		||||
        else if(gPlayerCitySelection[playerid] == CITY_SAN_FIERRO) {
 | 
			
		||||
                SetPlayerInterior(playerid,3);
 | 
			
		||||
                SetPlayerPos(playerid,-2673.8381,1399.7424,918.3516);
 | 
			
		||||
                SetPlayerFacingAngle(playerid,181.0);
 | 
			
		||||
            SetPlayerCameraPos(playerid,-2673.2776,1394.3859,918.3516);
 | 
			
		||||
                SetPlayerCameraLookAt(playerid,-2673.8381,1399.7424,918.3516);
 | 
			
		||||
        }
 | 
			
		||||
        else if(gPlayerCitySelection[playerid] == CITY_LAS_VENTURAS) {
 | 
			
		||||
                SetPlayerInterior(playerid,3);
 | 
			
		||||
                SetPlayerPos(playerid,349.0453,193.2271,1014.1797);
 | 
			
		||||
                SetPlayerFacingAngle(playerid,286.25);
 | 
			
		||||
            SetPlayerCameraPos(playerid,352.9164,194.5702,1014.1875);
 | 
			
		||||
                SetPlayerCameraLookAt(playerid,349.0453,193.2271,1014.1797);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
// Used to init textdraws of city names
 | 
			
		||||
 | 
			
		||||
ClassSel_InitCityNameText(Text:txtInit)
 | 
			
		||||
{
 | 
			
		||||
          TextDrawUseBox(txtInit, 0);
 | 
			
		||||
        TextDrawLetterSize(txtInit,1.25,3.0);
 | 
			
		||||
        TextDrawFont(txtInit, 0);
 | 
			
		||||
        TextDrawSetShadow(txtInit,0);
 | 
			
		||||
    TextDrawSetOutline(txtInit,1);
 | 
			
		||||
    TextDrawColor(txtInit,0xEEEEEEFF);
 | 
			
		||||
    TextDrawBackgroundColor(txtClassSelHelper,0x000000FF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ClassSel_InitTextDraws()
 | 
			
		||||
{
 | 
			
		||||
    // Init our observer helper text display
 | 
			
		||||
        txtLosSantos = TextDrawCreate(10.0, 380.0, "Los Santos");
 | 
			
		||||
        ClassSel_InitCityNameText(txtLosSantos);
 | 
			
		||||
        txtSanFierro = TextDrawCreate(10.0, 380.0, "San Fierro");
 | 
			
		||||
        ClassSel_InitCityNameText(txtSanFierro);
 | 
			
		||||
        txtLasVenturas = TextDrawCreate(10.0, 380.0, "Las Venturas");
 | 
			
		||||
        ClassSel_InitCityNameText(txtLasVenturas);
 | 
			
		||||
 | 
			
		||||
    // Init our observer helper text display
 | 
			
		||||
        txtClassSelHelper = TextDrawCreate(10.0, 415.0,
 | 
			
		||||
         " Press ~b~~k~~GO_LEFT~ ~w~or ~b~~k~~GO_RIGHT~ ~w~to switch cities.~n~ Press ~r~~k~~PED_FIREWEAPON~ ~w~to select.");
 | 
			
		||||
        TextDrawUseBox(txtClassSelHelper, 1);
 | 
			
		||||
        TextDrawBoxColor(txtClassSelHelper,0x222222BB);
 | 
			
		||||
        TextDrawLetterSize(txtClassSelHelper,0.3,1.0);
 | 
			
		||||
        TextDrawTextSize(txtClassSelHelper,400.0,40.0);
 | 
			
		||||
        TextDrawFont(txtClassSelHelper, 2);
 | 
			
		||||
        TextDrawSetShadow(txtClassSelHelper,0);
 | 
			
		||||
    TextDrawSetOutline(txtClassSelHelper,1);
 | 
			
		||||
    TextDrawBackgroundColor(txtClassSelHelper,0x000000FF);
 | 
			
		||||
    TextDrawColor(txtClassSelHelper,0xFFFFFFFF);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ClassSel_SetupSelectedCity(playerid)
 | 
			
		||||
{
 | 
			
		||||
        if(gPlayerCitySelection[playerid] == -1) {
 | 
			
		||||
                gPlayerCitySelection[playerid] = CITY_LOS_SANTOS;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if(gPlayerCitySelection[playerid] == CITY_LOS_SANTOS) {
 | 
			
		||||
                SetPlayerInterior(playerid,0);
 | 
			
		||||
                   SetPlayerCameraPos(playerid,1630.6136,-2286.0298,110.0);
 | 
			
		||||
                SetPlayerCameraLookAt(playerid,1887.6034,-1682.1442,47.6167);
 | 
			
		||||
                
 | 
			
		||||
                TextDrawShowForPlayer(playerid,txtLosSantos);
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtSanFierro);
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtLasVenturas);
 | 
			
		||||
        }
 | 
			
		||||
        else if(gPlayerCitySelection[playerid] == CITY_SAN_FIERRO) {
 | 
			
		||||
                SetPlayerInterior(playerid,0);
 | 
			
		||||
                   SetPlayerCameraPos(playerid,-1300.8754,68.0546,129.4823);
 | 
			
		||||
                SetPlayerCameraLookAt(playerid,-1817.9412,769.3878,132.6589);
 | 
			
		||||
                
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtLosSantos);
 | 
			
		||||
                TextDrawShowForPlayer(playerid,txtSanFierro);
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtLasVenturas);
 | 
			
		||||
        }
 | 
			
		||||
        else if(gPlayerCitySelection[playerid] == CITY_LAS_VENTURAS) {
 | 
			
		||||
                SetPlayerInterior(playerid,0);
 | 
			
		||||
                   SetPlayerCameraPos(playerid,1310.6155,1675.9182,110.7390);
 | 
			
		||||
                SetPlayerCameraLookAt(playerid,2285.2944,1919.3756,68.2275);
 | 
			
		||||
                
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtLosSantos);
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtSanFierro);
 | 
			
		||||
                TextDrawShowForPlayer(playerid,txtLasVenturas);
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ClassSel_SwitchToNextCity(playerid)
 | 
			
		||||
{
 | 
			
		||||
    gPlayerCitySelection[playerid]++;
 | 
			
		||||
        if(gPlayerCitySelection[playerid] > CITY_LAS_VENTURAS) {
 | 
			
		||||
         gPlayerCitySelection[playerid] = CITY_LOS_SANTOS;
 | 
			
		||||
        }
 | 
			
		||||
        PlayerPlaySound(playerid,1052,0.0,0.0,0.0);
 | 
			
		||||
        gPlayerLastCitySelectionTick[playerid] = GetTickCount();
 | 
			
		||||
        ClassSel_SetupSelectedCity(playerid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ClassSel_SwitchToPreviousCity(playerid)
 | 
			
		||||
{
 | 
			
		||||
    gPlayerCitySelection[playerid]--;
 | 
			
		||||
        if(gPlayerCitySelection[playerid] < CITY_LOS_SANTOS) {
 | 
			
		||||
         gPlayerCitySelection[playerid] = CITY_LAS_VENTURAS;
 | 
			
		||||
        }
 | 
			
		||||
        PlayerPlaySound(playerid,1053,0.0,0.0,0.0);
 | 
			
		||||
        gPlayerLastCitySelectionTick[playerid] = GetTickCount();
 | 
			
		||||
        ClassSel_SetupSelectedCity(playerid);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
ClassSel_HandleCitySelection(playerid)
 | 
			
		||||
{
 | 
			
		||||
        new Keys,ud,lr;
 | 
			
		||||
    GetPlayerKeys(playerid,Keys,ud,lr);
 | 
			
		||||
    
 | 
			
		||||
    if(gPlayerCitySelection[playerid] == -1) {
 | 
			
		||||
                ClassSel_SwitchToNextCity(playerid);
 | 
			
		||||
                return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // only allow new selection every ~500 ms
 | 
			
		||||
        if( (GetTickCount() - gPlayerLastCitySelectionTick[playerid]) < 500 ) return;
 | 
			
		||||
        
 | 
			
		||||
        if(Keys & KEY_FIRE) {
 | 
			
		||||
         gPlayerHasCitySelected[playerid] = 1;
 | 
			
		||||
         TextDrawHideForPlayer(playerid,txtClassSelHelper);
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtLosSantos);
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtSanFierro);
 | 
			
		||||
                TextDrawHideForPlayer(playerid,txtLasVenturas);
 | 
			
		||||
         TogglePlayerSpectating(playerid,0);
 | 
			
		||||
         return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        if(lr > 0) {
 | 
			
		||||
         ClassSel_SwitchToNextCity(playerid);
 | 
			
		||||
        }
 | 
			
		||||
        else if(lr < 0) {
 | 
			
		||||
         ClassSel_SwitchToPreviousCity(playerid);
 | 
			
		||||
        }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
public OnPlayerRequestClass(playerid, classid)
 | 
			
		||||
{
 | 
			
		||||
        if(IsPlayerNPC(playerid)) return 1;
 | 
			
		||||
 | 
			
		||||
        if(gPlayerHasCitySelected[playerid]) {
 | 
			
		||||
                ClassSel_SetupCharSelection(playerid);
 | 
			
		||||
                return 1;
 | 
			
		||||
        } else {
 | 
			
		||||
                if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING) {
 | 
			
		||||
                        TogglePlayerSpectating(playerid,1);
 | 
			
		||||
                    TextDrawShowForPlayer(playerid, txtClassSelHelper);
 | 
			
		||||
                    gPlayerCitySelection[playerid] = -1;
 | 
			
		||||
                }
 | 
			
		||||
          }
 | 
			
		||||
    
 | 
			
		||||
        return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
public OnGameModeInit()
 | 
			
		||||
{
 | 
			
		||||
        SetGameModeText("Grand Larceny");
 | 
			
		||||
        ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL);
 | 
			
		||||
        ShowNameTags(1);
 | 
			
		||||
        SetNameTagDrawDistance(40.0);
 | 
			
		||||
        EnableStuntBonusForAll(0);
 | 
			
		||||
        DisableInteriorEnterExits();
 | 
			
		||||
        SetWeather(2);
 | 
			
		||||
        SetWorldTime(11);
 | 
			
		||||
 | 
			
		||||
        //UsePlayerPedAnims();
 | 
			
		||||
        //ManualVehicleEngineAndLights();
 | 
			
		||||
        //LimitGlobalChatRadius(300.0);
 | 
			
		||||
        
 | 
			
		||||
        ClassSel_InitTextDraws();
 | 
			
		||||
 | 
			
		||||
        // Player Class
 | 
			
		||||
        AddPlayerClass(281,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(282,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(283,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(284,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(285,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(286,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(287,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(288,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(289,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(265,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(266,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(267,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(268,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(269,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(270,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(1,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(2,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(3,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(4,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(5,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(6,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(8,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(42,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(65,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        //AddPlayerClass(74,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(86,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(119,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
         AddPlayerClass(149,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(208,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(273,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(289,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        
 | 
			
		||||
        AddPlayerClass(47,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(48,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(49,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(50,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(51,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(52,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(53,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(54,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(55,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(56,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(57,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(58,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
           AddPlayerClass(68,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(69,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(70,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(71,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(72,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(73,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(75,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(76,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(78,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(79,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(80,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(81,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(82,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(83,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(84,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(85,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(87,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(88,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(89,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(91,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(92,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(93,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(95,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(96,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(97,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(98,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
        AddPlayerClass(99,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
 | 
			
		||||
 | 
			
		||||
        // SPECIAL
 | 
			
		||||
        total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/trains.txt");
 | 
			
		||||
        total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/pilots.txt");
 | 
			
		||||
 | 
			
		||||
           // LAS VENTURAS
 | 
			
		||||
     total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/lv_law.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/lv_airport.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/lv_gen.txt");
 | 
			
		||||
    
 | 
			
		||||
    // SAN FIERRO
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/sf_law.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/sf_airport.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/sf_gen.txt");
 | 
			
		||||
    
 | 
			
		||||
    // LOS SANTOS
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_law.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_airport.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_gen_inner.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_gen_outer.txt");
 | 
			
		||||
    
 | 
			
		||||
    // OTHER AREAS
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/whetstone.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/bone.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/flint.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/tierra.txt");
 | 
			
		||||
    total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/red_county.txt");
 | 
			
		||||
 | 
			
		||||
    printf("Total vehicles from files: %d",total_vehicles_from_files);
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
public OnPlayerUpdate(playerid)
 | 
			
		||||
{
 | 
			
		||||
        if(!IsPlayerConnected(playerid)) return 0;
 | 
			
		||||
        if(IsPlayerNPC(playerid)) return 1;
 | 
			
		||||
 | 
			
		||||
        // changing cities by inputs
 | 
			
		||||
        if( !gPlayerHasCitySelected[playerid] &&
 | 
			
		||||
         GetPlayerState(playerid) == PLAYER_STATE_SPECTATING ) {
 | 
			
		||||
         ClassSel_HandleCitySelection(playerid);
 | 
			
		||||
         return 1;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // No weapons in interiors
 | 
			
		||||
        if(GetPlayerInterior(playerid) != 0 && GetPlayerWeapon(playerid) != 0) {
 | 
			
		||||
         SetPlayerArmedWeapon(playerid,0); // fists
 | 
			
		||||
         return 0; // no syncing until they change their weapon
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        // Don't allow minigun
 | 
			
		||||
        if(GetPlayerWeapon(playerid) == WEAPON_MINIGUN) {
 | 
			
		||||
         Kick(playerid);
 | 
			
		||||
         return 0;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        /* No jetpacks allowed
 | 
			
		||||
        if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK) {
 | 
			
		||||
         Kick(playerid);
 | 
			
		||||
         return 0;
 | 
			
		||||
        }*/
 | 
			
		||||
 | 
			
		||||
        /* For testing animations
 | 
			
		||||
    new msg[128+1];
 | 
			
		||||
        new animlib[32+1];
 | 
			
		||||
        new animname[32+1];
 | 
			
		||||
 | 
			
		||||
        thisanimid = GetPlayerAnimationIndex(playerid);
 | 
			
		||||
        if(lastanimid != thisanimid)
 | 
			
		||||
        {
 | 
			
		||||
                GetAnimationName(thisanimid,animlib,32,animname,32);
 | 
			
		||||
                format(msg, 128, "anim(%d,%d): %s %s", lastanimid, thisanimid, animlib, animname);
 | 
			
		||||
                lastanimid = thisanimid;
 | 
			
		||||
                SendClientMessage(playerid, 0xFFFFFFFF, msg);
 | 
			
		||||
        }*/
 | 
			
		||||
 | 
			
		||||
        return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//----------------------------------------------------------
 | 
			
		||||
							
								
								
									
										36
									
								
								samples/PAWN/timertest.pwn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								samples/PAWN/timertest.pwn
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
#include <a_samp>
 | 
			
		||||
 | 
			
		||||
forward OneSecTimer();
 | 
			
		||||
 | 
			
		||||
new lasttick = 0;
 | 
			
		||||
 | 
			
		||||
main()
 | 
			
		||||
{
 | 
			
		||||
	print("\n----------------------------------");
 | 
			
		||||
	print("  This is a blank GameModeScript");
 | 
			
		||||
	print("----------------------------------\n");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public OnGameModeInit()
 | 
			
		||||
{
 | 
			
		||||
	// Set timer of 1 second.
 | 
			
		||||
	SetTimer("OneSecTimer", 1000, 1);
 | 
			
		||||
	print("GameModeInit()");
 | 
			
		||||
	SetGameModeText("Timer Test");
 | 
			
		||||
	AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
 | 
			
		||||
	return 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
public OneSecTimer() {
 | 
			
		||||
 | 
			
		||||
	if(lasttick == 0) {
 | 
			
		||||
     	lasttick = GetTickCount();
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	new sText[256];
 | 
			
		||||
	format(sText,sizeof(sText),"GetTickCountOffset = %d",GetTickCount() - lasttick);
 | 
			
		||||
	print(sText);
 | 
			
		||||
	SendClientMessageToAll(0xFF0000, sText);
 | 
			
		||||
	lasttick = GetTickCount();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										31
									
								
								samples/PLpgSQL/procedures.sql
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								samples/PLpgSQL/procedures.sql
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
load 'plpgsql';
 | 
			
		||||
load 'plpgsql_lint';
 | 
			
		||||
 | 
			
		||||
DROP FUNCTION IF EXISTS list_sites();
 | 
			
		||||
CREATE OR REPLACE FUNCTION list_sites() RETURNS TABLE (fc json) AS
 | 
			
		||||
$func$
 | 
			
		||||
BEGIN
 | 
			
		||||
RETURN QUERY SELECT row_to_json(feat_col) FROM (
 | 
			
		||||
    SELECT 'FeatureCollection' AS type, array_to_json(array_agg(feat)) AS features FROM (
 | 
			
		||||
            SELECT DISTINCT ON (new_id) 'Feature' AS type, ST_ASGeoJSON(loc.geom)::json AS geometry, row_to_json(
 | 
			
		||||
                (SELECT prop FROM (SELECT new_id) AS prop)) AS properties FROM location loc) AS feat) AS feat_col;
 | 
			
		||||
END;
 | 
			
		||||
$func$ LANGUAGE plpgsql;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
DROP FUNCTION IF EXISTS get_observations(character varying, integer);
 | 
			
		||||
CREATE OR REPLACE FUNCTION get_observations(kind varchar, site_id integer) RETURNS TABLE (fc json) AS
 | 
			
		||||
$func$
 | 
			
		||||
BEGIN
 | 
			
		||||
    IF kind = 'o2_abs' THEN
 | 
			
		||||
        RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM (
 | 
			
		||||
            SELECT observation_date AS date, o2_abs AS value FROM oxygen WHERE new_id = site_id) AS obs;
 | 
			
		||||
    ELSIF kind = 'o2_rel' THEN
 | 
			
		||||
        RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM (
 | 
			
		||||
            SELECT observation_date AS date, o2_rel AS value FROM oxygen WHERE new_id = site_id) AS obs;
 | 
			
		||||
    ELSIF kind = 'temp' THEN
 | 
			
		||||
        RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM (
 | 
			
		||||
            SELECT observation_date AS date, temp AS value FROM oxygen WHERE new_id = site_id) AS obs;
 | 
			
		||||
    END IF;
 | 
			
		||||
END;
 | 
			
		||||
$func$ LANGUAGE plpgsql;
 | 
			
		||||
							
								
								
									
										31
									
								
								samples/Python/filenames/BUCK
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								samples/Python/filenames/BUCK
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
include_defs('//tools/build.defs')
 | 
			
		||||
 | 
			
		||||
gerrit_war(name = 'gerrit')
 | 
			
		||||
gerrit_war(name = 'gwtgerrit',   ui = 'ui_dbg')
 | 
			
		||||
gerrit_war(name = 'headless',    ui = None)
 | 
			
		||||
gerrit_war(name = 'chrome',      ui = 'ui_chrome')
 | 
			
		||||
gerrit_war(name = 'firefox',     ui = 'ui_firefox')
 | 
			
		||||
gerrit_war(name = 'safari',      ui = 'ui_safari')
 | 
			
		||||
gerrit_war(name = 'polygerrit',  ui = 'polygerrit')
 | 
			
		||||
gerrit_war(name = 'withdocs', docs = True)
 | 
			
		||||
gerrit_war(name = 'release',  ui = 'ui_optdbg_r', docs = True, context = ['//plugins:core'],  visibility = ['//tools/maven:'])
 | 
			
		||||
 | 
			
		||||
API_DEPS = [
 | 
			
		||||
  '//gerrit-acceptance-framework:acceptance-framework',
 | 
			
		||||
  '//gerrit-acceptance-framework:acceptance-framework-src',
 | 
			
		||||
  '//gerrit-acceptance-framework:acceptance-framework-javadoc',
 | 
			
		||||
  '//gerrit-extension-api:extension-api',
 | 
			
		||||
  '//gerrit-extension-api:extension-api-src',
 | 
			
		||||
  '//gerrit-extension-api:extension-api-javadoc',
 | 
			
		||||
  '//gerrit-plugin-api:plugin-api',
 | 
			
		||||
  '//gerrit-plugin-api:plugin-api-src',
 | 
			
		||||
  '//gerrit-plugin-api:plugin-api-javadoc',
 | 
			
		||||
  '//gerrit-plugin-gwtui:gwtui-api',
 | 
			
		||||
  '//gerrit-plugin-gwtui:gwtui-api-src',
 | 
			
		||||
  '//gerrit-plugin-gwtui:gwtui-api-javadoc',
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
zip_file(
 | 
			
		||||
  name = 'api',
 | 
			
		||||
  srcs = API_DEPS,
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										45
									
								
								samples/Python/filenames/BUILD
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								samples/Python/filenames/BUILD
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
package(default_visibility = ["//scripts/release:__pkg__"])
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "git",
 | 
			
		||||
    srcs = glob([".git/**"]),
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "dummy",
 | 
			
		||||
    visibility = ["//visibility:public"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
filegroup(
 | 
			
		||||
    name = "srcs",
 | 
			
		||||
    srcs = glob(
 | 
			
		||||
        ["**"],
 | 
			
		||||
        exclude = [
 | 
			
		||||
            "bazel-*/**",
 | 
			
		||||
            "output/**",
 | 
			
		||||
            ".*/**",
 | 
			
		||||
        ],
 | 
			
		||||
    ) + [
 | 
			
		||||
        "//examples:srcs",
 | 
			
		||||
        "//scripts:srcs",
 | 
			
		||||
        "//site:srcs",
 | 
			
		||||
        "//src:srcs",
 | 
			
		||||
        "//tools:srcs",
 | 
			
		||||
        "//third_party:srcs",
 | 
			
		||||
    ],
 | 
			
		||||
    visibility = ["//visibility:private"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
load("//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
 | 
			
		||||
 | 
			
		||||
pkg_tar(
 | 
			
		||||
    name = "bazel-srcs",
 | 
			
		||||
    files = [":srcs"],
 | 
			
		||||
    strip_prefix = ".",
 | 
			
		||||
    # Public but bazel-only visibility.
 | 
			
		||||
    visibility = ["//:__subpackages__"],
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
load("//tools/build_rules/go:def.bzl", "go_prefix")
 | 
			
		||||
 | 
			
		||||
go_prefix("github.com/bazelbuild/bazel")
 | 
			
		||||
							
								
								
									
										49
									
								
								samples/Python/simpleclient.rpy
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								samples/Python/simpleclient.rpy
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,49 @@
 | 
			
		||||
 | 
			
		||||
# Copyright (c) Twisted Matrix Laboratories.
 | 
			
		||||
# See LICENSE for details.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
"""
 | 
			
		||||
An example client. Run simpleserv.py first before running this.
 | 
			
		||||
"""
 | 
			
		||||
 | 
			
		||||
from twisted.internet import reactor, protocol
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# a client protocol
 | 
			
		||||
 | 
			
		||||
class EchoClient(protocol.Protocol):
 | 
			
		||||
    """Once connected, send a message, then print the result."""
 | 
			
		||||
 | 
			
		||||
    def connectionMade(self):
 | 
			
		||||
        self.transport.write("hello, world!")
 | 
			
		||||
 | 
			
		||||
    def dataReceived(self, data):
 | 
			
		||||
        "As soon as any data is received, write it back."
 | 
			
		||||
        print "Server said:", data
 | 
			
		||||
        self.transport.loseConnection()
 | 
			
		||||
 | 
			
		||||
    def connectionLost(self, reason):
 | 
			
		||||
        print "connection lost"
 | 
			
		||||
 | 
			
		||||
class EchoFactory(protocol.ClientFactory):
 | 
			
		||||
    protocol = EchoClient
 | 
			
		||||
 | 
			
		||||
    def clientConnectionFailed(self, connector, reason):
 | 
			
		||||
        print "Connection failed - goodbye!"
 | 
			
		||||
        reactor.stop()
 | 
			
		||||
 | 
			
		||||
    def clientConnectionLost(self, connector, reason):
 | 
			
		||||
        print "Connection lost - goodbye!"
 | 
			
		||||
        reactor.stop()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# this connects the protocol to a server running on port 8000
 | 
			
		||||
def main():
 | 
			
		||||
    f = EchoFactory()
 | 
			
		||||
    reactor.connectTCP("localhost", 8000, f)
 | 
			
		||||
    reactor.run()
 | 
			
		||||
 | 
			
		||||
# this only runs if the module was *not* imported
 | 
			
		||||
if __name__ == '__main__':
 | 
			
		||||
    main()
 | 
			
		||||
@@ -1421,7 +1421,4 @@ init:
 | 
			
		||||
#     $ renpy.pause(1.0)
 | 
			
		||||
#     hide text with dissolve
 | 
			
		||||
#
 | 
			
		||||
#     return
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Return to the tutorial.
 | 
			
		||||
#     return
 | 
			
		||||
							
								
								
									
										45
									
								
								samples/SRecode Template/linguist.srt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								samples/SRecode Template/linguist.srt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
;;; linguist.srt --- Template for linguist-example-mode
 | 
			
		||||
 | 
			
		||||
;; Not copyrighted whatsoever.
 | 
			
		||||
;;
 | 
			
		||||
;; GPL can bite my shiny metal ass.
 | 
			
		||||
;;
 | 
			
		||||
;; GitHub:   1
 | 
			
		||||
;; Stallman: 0
 | 
			
		||||
 | 
			
		||||
set mode "default"
 | 
			
		||||
 | 
			
		||||
set comment_start ";"
 | 
			
		||||
 | 
			
		||||
set LICENSE "It's public domain, baby. This was written for the sole
 | 
			
		||||
purpose of the format's inclusion and recognition by GitHub Linguist.
 | 
			
		||||
This block of multiline text was added because every other .srt file
 | 
			
		||||
I could find was GPL-licensed and had long-winded copyright blobs in
 | 
			
		||||
the file's header. Also, check out my sick line-wrapping abilities."
 | 
			
		||||
 | 
			
		||||
set DOLLAR "$"
 | 
			
		||||
 | 
			
		||||
context file
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template license
 | 
			
		||||
----
 | 
			
		||||
{{LICENSE:srecode-comment-prefix}}
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
template filecomment :file :user :time
 | 
			
		||||
----
 | 
			
		||||
{{comment_start}} {{FILENAME}} --- {{^}}
 | 
			
		||||
{{comment_prefix}} YUO WAN GPL?
 | 
			
		||||
{{comment_prefix}} 
 | 
			
		||||
{{comment_prefix}} Copyright (C) {{YEAR}} {{?AUTHOR}}
 | 
			
		||||
{{comment_prefix}}
 | 
			
		||||
{{comment_prefix}} TUO BAD
 | 
			
		||||
{{comment_prefix}} WE EXPAT PEOPLE
 | 
			
		||||
{{comment_prefix}} {{EXPLETIVE}} YOU!
 | 
			
		||||
{{>:copyright}}
 | 
			
		||||
{{comment_end}}
 | 
			
		||||
----
 | 
			
		||||
 | 
			
		||||
;; end
 | 
			
		||||
							
								
								
									
										161
									
								
								samples/Shell/filenames/gradlew
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										161
									
								
								samples/Shell/filenames/gradlew
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,161 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
 | 
			
		||||
##############################################################################
 | 
			
		||||
##
 | 
			
		||||
##  Gradle start up script for UN*X
 | 
			
		||||
##
 | 
			
		||||
##############################################################################
 | 
			
		||||
 | 
			
		||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
 | 
			
		||||
DEFAULT_JVM_OPTS=""
 | 
			
		||||
 | 
			
		||||
APP_NAME="Gradle"
 | 
			
		||||
APP_BASE_NAME=`basename "$0"`
 | 
			
		||||
 | 
			
		||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
 | 
			
		||||
MAX_FD="maximum"
 | 
			
		||||
 | 
			
		||||
warn ( ) {
 | 
			
		||||
    echo "$*"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
die ( ) {
 | 
			
		||||
    echo
 | 
			
		||||
    echo "$*"
 | 
			
		||||
    echo
 | 
			
		||||
    exit 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# OS specific support (must be 'true' or 'false').
 | 
			
		||||
cygwin=false
 | 
			
		||||
msys=false
 | 
			
		||||
darwin=false
 | 
			
		||||
case "`uname`" in
 | 
			
		||||
  CYGWIN* )
 | 
			
		||||
    cygwin=true
 | 
			
		||||
    ;;
 | 
			
		||||
  Darwin* )
 | 
			
		||||
    darwin=true
 | 
			
		||||
    ;;
 | 
			
		||||
  MINGW* )
 | 
			
		||||
    msys=true
 | 
			
		||||
    ;;
 | 
			
		||||
esac
 | 
			
		||||
 | 
			
		||||
# Attempt to set APP_HOME
 | 
			
		||||
# Resolve links: $0 may be a link
 | 
			
		||||
PRG="$0"
 | 
			
		||||
# Need this for relative symlinks.
 | 
			
		||||
while [ -h "$PRG" ] ; do
 | 
			
		||||
    ls=`ls -ld "$PRG"`
 | 
			
		||||
    link=`expr "$ls" : '.*-> \(.*\)$'`
 | 
			
		||||
    if expr "$link" : '/.*' > /dev/null; then
 | 
			
		||||
        PRG="$link"
 | 
			
		||||
    else
 | 
			
		||||
        PRG=`dirname "$PRG"`"/$link"
 | 
			
		||||
    fi
 | 
			
		||||
done
 | 
			
		||||
SAVED="`pwd`"
 | 
			
		||||
cd "`dirname \"$PRG\"`/" >/dev/null
 | 
			
		||||
APP_HOME="`pwd -P`"
 | 
			
		||||
cd "$SAVED" >/dev/null
 | 
			
		||||
 | 
			
		||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
 | 
			
		||||
 | 
			
		||||
# Determine the Java command to use to start the JVM.
 | 
			
		||||
if [ -n "$JAVA_HOME" ] ; then
 | 
			
		||||
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
 | 
			
		||||
        # IBM's JDK on AIX uses strange locations for the executables
 | 
			
		||||
        JAVACMD="$JAVA_HOME/jre/sh/java"
 | 
			
		||||
    else
 | 
			
		||||
        JAVACMD="$JAVA_HOME/bin/java"
 | 
			
		||||
    fi
 | 
			
		||||
    if [ ! -x "$JAVACMD" ] ; then
 | 
			
		||||
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
 | 
			
		||||
 | 
			
		||||
Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
location of your Java installation."
 | 
			
		||||
    fi
 | 
			
		||||
else
 | 
			
		||||
    JAVACMD="java"
 | 
			
		||||
    which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
 | 
			
		||||
 | 
			
		||||
Please set the JAVA_HOME variable in your environment to match the
 | 
			
		||||
location of your Java installation."
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Increase the maximum file descriptors if we can.
 | 
			
		||||
if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
 | 
			
		||||
    MAX_FD_LIMIT=`ulimit -H -n`
 | 
			
		||||
    if [ $? -eq 0 ] ; then
 | 
			
		||||
        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
 | 
			
		||||
            MAX_FD="$MAX_FD_LIMIT"
 | 
			
		||||
        fi
 | 
			
		||||
        ulimit -n $MAX_FD
 | 
			
		||||
        if [ $? -ne 0 ] ; then
 | 
			
		||||
            warn "Could not set maximum file descriptor limit: $MAX_FD"
 | 
			
		||||
        fi
 | 
			
		||||
    else
 | 
			
		||||
        warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
 | 
			
		||||
    fi
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Darwin, add options to specify how the application appears in the dock
 | 
			
		||||
if $darwin; then
 | 
			
		||||
    GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# For Cygwin, switch paths to Windows format before running java
 | 
			
		||||
if $cygwin ; then
 | 
			
		||||
    APP_HOME=`cygpath --path --mixed "$APP_HOME"`
 | 
			
		||||
    CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
 | 
			
		||||
    JAVACMD=`cygpath --unix "$JAVACMD"`
 | 
			
		||||
 | 
			
		||||
    # We build the pattern for arguments to be converted via cygpath
 | 
			
		||||
    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
 | 
			
		||||
    SEP=""
 | 
			
		||||
    for dir in $ROOTDIRSRAW ; do
 | 
			
		||||
        ROOTDIRS="$ROOTDIRS$SEP$dir"
 | 
			
		||||
        SEP="|"
 | 
			
		||||
    done
 | 
			
		||||
    OURCYGPATTERN="(^($ROOTDIRS))"
 | 
			
		||||
    # Add a user-defined pattern to the cygpath arguments
 | 
			
		||||
    if [ "$GRADLE_CYGPATTERN" != "" ] ; then
 | 
			
		||||
        OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
 | 
			
		||||
    fi
 | 
			
		||||
    # Now convert the arguments - kludge to limit ourselves to /bin/sh
 | 
			
		||||
    i=0
 | 
			
		||||
    for arg in "$@" ; do
 | 
			
		||||
        CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
 | 
			
		||||
        CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option
 | 
			
		||||
 | 
			
		||||
        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition
 | 
			
		||||
            eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
 | 
			
		||||
        else
 | 
			
		||||
            eval `echo args$i`="\"$arg\""
 | 
			
		||||
        fi
 | 
			
		||||
        i=$((i+1))
 | 
			
		||||
    done
 | 
			
		||||
    case $i in
 | 
			
		||||
        (0) set -- ;;
 | 
			
		||||
        (1) set -- "$args0" ;;
 | 
			
		||||
        (2) set -- "$args0" "$args1" ;;
 | 
			
		||||
        (3) set -- "$args0" "$args1" "$args2" ;;
 | 
			
		||||
        (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
 | 
			
		||||
        (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
 | 
			
		||||
        (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
 | 
			
		||||
        (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
 | 
			
		||||
        (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
 | 
			
		||||
        (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
 | 
			
		||||
    esac
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
 | 
			
		||||
function splitJvmOpts() {
 | 
			
		||||
    JVM_OPTS=("$@")
 | 
			
		||||
}
 | 
			
		||||
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
 | 
			
		||||
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
 | 
			
		||||
 | 
			
		||||
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
 | 
			
		||||
 | 
			
		||||
@@ -0,0 +1,240 @@
 | 
			
		||||
1
 | 
			
		||||
00:00:01,250 --> 00:00:03,740
 | 
			
		||||
Adding NCL language.
 | 
			
		||||
 | 
			
		||||
2
 | 
			
		||||
00:00:04,600 --> 00:00:08,730
 | 
			
		||||
Thanks for the pull request! Do you know if these files are NCL too?
 | 
			
		||||
 | 
			
		||||
3
 | 
			
		||||
00:00:09,800 --> 00:00:13,700
 | 
			
		||||
Those are poorly-named documentation files for NCL functions.
 | 
			
		||||
 | 
			
		||||
4
 | 
			
		||||
00:00:14,560 --> 00:00:17,200
 | 
			
		||||
- What's better?
 | 
			
		||||
- This is better.
 | 
			
		||||
 | 
			
		||||
5
 | 
			
		||||
00:00:18,500 --> 00:00:23,000
 | 
			
		||||
- Would it be correct to recognise these files as text?
 | 
			
		||||
- Yes.
 | 
			
		||||
 | 
			
		||||
6
 | 
			
		||||
00:00:23,890 --> 00:00:30,000
 | 
			
		||||
In that case, could you add "NCL" to the text entry in languages.yml too?
 | 
			
		||||
 | 
			
		||||
7
 | 
			
		||||
00:00:30,540 --> 00:00:35,250
 | 
			
		||||
I added the example to "Text" and updated the license in the grammar submodule.
 | 
			
		||||
 | 
			
		||||
8
 | 
			
		||||
00:00:38,500 --> 00:00:42,360
 | 
			
		||||
Cloning the submodule fails for me in local with this URL.
 | 
			
		||||
 | 
			
		||||
9
 | 
			
		||||
00:00:42,360 --> 00:00:45,250
 | 
			
		||||
Could you use Git or HTTPS...?
 | 
			
		||||
 | 
			
		||||
10
 | 
			
		||||
00:00:46,810 --> 00:00:50,000
 | 
			
		||||
I updated the grammar submodule link to HTTPS.
 | 
			
		||||
 | 
			
		||||
11
 | 
			
		||||
00:00:51,100 --> 00:00:57,000
 | 
			
		||||
It's still failing locally. I don't think you can just update the .gitmodules file.
 | 
			
		||||
 | 
			
		||||
12
 | 
			
		||||
00:00:57,750 --> 00:01:03,000
 | 
			
		||||
You'll probably have to remove the submodule and add it again to be sure.
 | 
			
		||||
 | 
			
		||||
13
 | 
			
		||||
00:01:04,336 --> 00:01:11,800
 | 
			
		||||
- I'll see first if it's not an issue on my side...
 | 
			
		||||
- I removed the submodule and added it back with HTTPS.
 | 
			
		||||
 | 
			
		||||
14
 | 
			
		||||
00:01:13,670 --> 00:01:18,000
 | 
			
		||||
I tested the detection of NCL files with 2000 samples.
 | 
			
		||||
 | 
			
		||||
15
 | 
			
		||||
00:01:18,000 --> 00:01:25,000
 | 
			
		||||
The Bayesian classifier doesn't seem to be very good at distinguishing text from NCL.
 | 
			
		||||
 | 
			
		||||
16
 | 
			
		||||
00:01:25,000 --> 00:01:30,740
 | 
			
		||||
We could try to improve it by adding more samples, or we can define a new heuristic rule.
 | 
			
		||||
 | 
			
		||||
17
 | 
			
		||||
00:01:31,300 --> 00:01:36,200
 | 
			
		||||
- Do you want me to send you the sample files?
 | 
			
		||||
- Yes, please do.
 | 
			
		||||
 | 
			
		||||
18
 | 
			
		||||
00:01:37,500 --> 00:01:39,500
 | 
			
		||||
In your inbox.
 | 
			
		||||
 | 
			
		||||
19
 | 
			
		||||
00:01:41,285 --> 00:01:48,216
 | 
			
		||||
- So if I manually go through these and sort out the errors, would that help?
 | 
			
		||||
- Not really.
 | 
			
		||||
 | 
			
		||||
20
 | 
			
		||||
00:01:48,540 --> 00:01:55,145
 | 
			
		||||
It's a matter of keywords so there's not much to do there except for adding new samples.
 | 
			
		||||
 | 
			
		||||
21
 | 
			
		||||
00:01:55,447 --> 00:02:02,000
 | 
			
		||||
If adding a few more samples doesn't improve things, we'll see how to define a new heuristic rule.
 | 
			
		||||
 | 
			
		||||
22
 | 
			
		||||
00:02:04,740 --> 00:02:09,600
 | 
			
		||||
- I added quite a few NCL samples.
 | 
			
		||||
- That's a bit over the top, isn't it?
 | 
			
		||||
 | 
			
		||||
23
 | 
			
		||||
00:02:10,250 --> 00:02:16,000
 | 
			
		||||
We currently can't add too many samples because of #2117.
 | 
			
		||||
 | 
			
		||||
24
 | 
			
		||||
00:02:18,000 --> 00:02:20,830
 | 
			
		||||
(sigh) I decreased the number of added samples.
 | 
			
		||||
 | 
			
		||||
25
 | 
			
		||||
00:02:21,630 --> 00:02:25,300
 | 
			
		||||
Could you test the detection results in local with the samples I gave you?
 | 
			
		||||
 | 
			
		||||
26
 | 
			
		||||
00:02:26,000 --> 00:02:28,670
 | 
			
		||||
- What is the command to run that test?
 | 
			
		||||
- Here...
 | 
			
		||||
 | 
			
		||||
27
 | 
			
		||||
00:02:28,716 --> 00:02:38,650
 | 
			
		||||
[Coding intensifies]
 | 
			
		||||
 | 
			
		||||
28
 | 
			
		||||
00:02:38,650 --> 00:02:43,330
 | 
			
		||||
It is getting hung up on a false detection of Frege in one of the Text samples.
 | 
			
		||||
 | 
			
		||||
29
 | 
			
		||||
00:02:43,540 --> 00:02:46,115
 | 
			
		||||
Do you have any suggestions for implementing a heuristic?
 | 
			
		||||
 | 
			
		||||
30
 | 
			
		||||
00:02:47,640 --> 00:02:55,200
 | 
			
		||||
#2441 should fix this. In the meantime, you can change this in "test_heuristics.rb"
 | 
			
		||||
 | 
			
		||||
31
 | 
			
		||||
00:02:55,165 --> 00:02:57,240
 | 
			
		||||
Why did you have to change this?
 | 
			
		||||
 | 
			
		||||
32
 | 
			
		||||
00:02:57,777 --> 00:03:04,480
 | 
			
		||||
- It doesn't work for me unless I do that.
 | 
			
		||||
- Hum, same for me. Arfon, does it work for you?
 | 
			
		||||
 | 
			
		||||
33
 | 
			
		||||
00:03:04,920 --> 00:03:08,830
 | 
			
		||||
Requiring linguist/language doesn't work for me either.
 | 
			
		||||
 | 
			
		||||
34
 | 
			
		||||
00:03:09,300 --> 00:03:13,885
 | 
			
		||||
We restructured some of the requires a while ago and I think this is just out-of-date code.
 | 
			
		||||
 | 
			
		||||
35
 | 
			
		||||
00:03:14,065 --> 00:03:20,950
 | 
			
		||||
From a large sample of known NCL files taken from Github, it's now predicting with about 98% accuracy.
 | 
			
		||||
 | 
			
		||||
36
 | 
			
		||||
00:03:21,183 --> 00:03:28,000
 | 
			
		||||
For a large sample of other files with the NCL extension, it is around 92%.
 | 
			
		||||
 | 
			
		||||
37
 | 
			
		||||
00:03:27,880 --> 00:03:30,950
 | 
			
		||||
From those, nearly all of the errors come from one GitHub repository,
 | 
			
		||||
 | 
			
		||||
38
 | 
			
		||||
00:03:30,950 --> 00:03:34,160
 | 
			
		||||
and they all contain the text strings, "The URL" and "The Title".
 | 
			
		||||
 | 
			
		||||
39
 | 
			
		||||
00:03:35,660 --> 00:03:43,260
 | 
			
		||||
- Do you mean 92% files correctly identified as text?
 | 
			
		||||
- Yes, it correctly identifies 92% as text.
 | 
			
		||||
 | 
			
		||||
40
 | 
			
		||||
00:03:44,000 --> 00:03:46,150
 | 
			
		||||
I'd really like to see this dramatically reduced.
 | 
			
		||||
 | 
			
		||||
41
 | 
			
		||||
00:03:46,150 --> 00:03:51,150
 | 
			
		||||
What happens if we reduce to around 5 NCL sample files?
 | 
			
		||||
 | 
			
		||||
42
 | 
			
		||||
00:03:51,150 --> 00:03:52,600
 | 
			
		||||
Does Linguist still do a reasonable job?
 | 
			
		||||
 | 
			
		||||
43
 | 
			
		||||
00:03:53,470 --> 00:03:58,190
 | 
			
		||||
I reduced it to 16 NCL samples and 8 text samples.
 | 
			
		||||
 | 
			
		||||
44
 | 
			
		||||
00:03:58,190 --> 00:04:01,720
 | 
			
		||||
It correctly classifies my whole set of known NCL files.
 | 
			
		||||
 | 
			
		||||
45
 | 
			
		||||
00:04:01,870 --> 00:04:05,730
 | 
			
		||||
I tried with 5 samples but could not get the same level of accuracy.
 | 
			
		||||
 | 
			
		||||
46
 | 
			
		||||
00:04:06,670 --> 00:04:10,400
 | 
			
		||||
It incorrectly classifies all of the NCL files in this GitHub repository.
 | 
			
		||||
 | 
			
		||||
47
 | 
			
		||||
00:04:11,130 --> 00:04:14,660
 | 
			
		||||
All of these files contain the text strings, "THE_URL:" and "THE_TITLE:".
 | 
			
		||||
 | 
			
		||||
48
 | 
			
		||||
00:04:14,660 --> 00:04:19,500
 | 
			
		||||
It did not misclassify any other text-files with the extension NCL.
 | 
			
		||||
 | 
			
		||||
49
 | 
			
		||||
00:04:19,970 --> 00:04:25,188
 | 
			
		||||
With 100% accuracy? Does that mean it that the results are better with less samples??
 | 
			
		||||
 | 
			
		||||
50
 | 
			
		||||
00:04:25,610 --> 00:04:31,190
 | 
			
		||||
I also removed a sample text-file which should have been classified as an NCL file.
 | 
			
		||||
 | 
			
		||||
51
 | 
			
		||||
00:04:31,000 --> 00:04:35,895
 | 
			
		||||
I think that probably made most of the difference, although I didn't test it atomically.
 | 
			
		||||
 | 
			
		||||
52
 | 
			
		||||
00:04:35,895 --> 00:04:38,370
 | 
			
		||||
Okay, that makes more sense.
 | 
			
		||||
 | 
			
		||||
53
 | 
			
		||||
00:04:39,515 --> 00:04:43,450
 | 
			
		||||
I don't get the same results for the text files. Full results here.
 | 
			
		||||
 | 
			
		||||
54
 | 
			
		||||
00:04:44,650 --> 00:04:50,000
 | 
			
		||||
They all look correctly classified to me, except for the ones in Fanghuan's repository.
 | 
			
		||||
 | 
			
		||||
55
 | 
			
		||||
00:04:50,000 --> 00:04:55,920
 | 
			
		||||
I manually went through all of the ones where I didn't already know based on the filename or the repository owner.
 | 
			
		||||
 | 
			
		||||
56
 | 
			
		||||
00:04:56,526 --> 00:05:00,000
 | 
			
		||||
[Presses button] It now correctly classifies all of my test files.
 | 
			
		||||
 | 
			
		||||
57
 | 
			
		||||
00:05:00,000 --> 00:05:05,970
 | 
			
		||||
R. Pavlick, thanks for this. These changes will be live in the next release of Linguist. In the next couple of weeks.
 | 
			
		||||
 | 
			
		||||
58
 | 
			
		||||
00:05:05,970 --> 00:05:07,450
 | 
			
		||||
Great! Thanks.
 | 
			
		||||
							
								
								
									
										26
									
								
								samples/TLA/AsyncInterface.tla
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								samples/TLA/AsyncInterface.tla
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
--------------------------- MODULE AsyncInterface ---------------------------
 | 
			
		||||
EXTENDS Naturals
 | 
			
		||||
 | 
			
		||||
CONSTANT Data
 | 
			
		||||
VARIABLE chan
 | 
			
		||||
 | 
			
		||||
Values == <<"foo", "bar", "baz">>
 | 
			
		||||
 | 
			
		||||
TypeInvariant == chan \in [val: Data, rdy: {0,1}, ack: {0,1}]
 | 
			
		||||
                 
 | 
			
		||||
Init == /\ TypeInvariant
 | 
			
		||||
        /\ chan.ack = chan.rdy
 | 
			
		||||
        
 | 
			
		||||
Send(d) == /\ chan.rdy = chan.ack
 | 
			
		||||
           /\ chan' = [chan EXCEPT !.val = d, !.rdy = 1 - @]
 | 
			
		||||
        
 | 
			
		||||
Rcv == /\ chan.rdy # chan.ack
 | 
			
		||||
       /\ chan' = [chan EXCEPT !.ack = 1 - @]
 | 
			
		||||
       
 | 
			
		||||
Next == (\E d \in Data : Send(d)) \/ Rcv
 | 
			
		||||
 | 
			
		||||
Spec == Init /\ [][Next]_chan
 | 
			
		||||
 | 
			
		||||
THEOREM Spec => []TypeInvariant
 | 
			
		||||
 | 
			
		||||
=============================================================================
 | 
			
		||||
							
								
								
									
										47
									
								
								samples/TLA/fifo.tla
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								samples/TLA/fifo.tla
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
-------------------------------- MODULE fifo --------------------------------
 | 
			
		||||
EXTENDS Naturals, Sequences
 | 
			
		||||
CONSTANT Message
 | 
			
		||||
VARIABLES in, out, q
 | 
			
		||||
 | 
			
		||||
InChan == INSTANCE AsyncInterface WITH Data <- Message, chan <- in
 | 
			
		||||
OutChan == INSTANCE AsyncInterface WITH Data <- Message, chan <- out
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
Init == /\ InChan!Init
 | 
			
		||||
        /\ OutChan!Init
 | 
			
		||||
        /\ q = <<>>
 | 
			
		||||
        
 | 
			
		||||
TypeInvariant == /\ InChan!TypeInvariant
 | 
			
		||||
                 /\ OutChan!TypeInvariant
 | 
			
		||||
                 /\ q \in Seq(Message)
 | 
			
		||||
                 /\ Len(q) <= 10
 | 
			
		||||
 | 
			
		||||
SSend(msg) == /\ InChan!Send(msg) \* Send msg on channel in
 | 
			
		||||
              /\ UNCHANGED <<out, q>>
 | 
			
		||||
              
 | 
			
		||||
BufRcv == /\ InChan!Rcv
 | 
			
		||||
          /\ Len(q) < 10
 | 
			
		||||
          /\ q' = Append(q, in.val)
 | 
			
		||||
          /\ UNCHANGED out
 | 
			
		||||
 | 
			
		||||
BufSend == /\ q # <<>>
 | 
			
		||||
           /\ OutChan!Send(Head(q))
 | 
			
		||||
           /\ q' = Tail(q)
 | 
			
		||||
           /\ UNCHANGED in
 | 
			
		||||
           
 | 
			
		||||
RRcv == /\ OutChan!Rcv
 | 
			
		||||
        /\ UNCHANGED <<in, q>>
 | 
			
		||||
        
 | 
			
		||||
Next == \/ \E msg \in Message : SSend(msg)
 | 
			
		||||
        \/ BufRcv
 | 
			
		||||
        \/ BufSend
 | 
			
		||||
        \/ RRcv
 | 
			
		||||
        
 | 
			
		||||
Spec == Init /\ [][Next]_<<in, out, q>>
 | 
			
		||||
 | 
			
		||||
-----------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
THEOREM Spec => []TypeInvariant
 | 
			
		||||
 | 
			
		||||
=============================================================================
 | 
			
		||||
							
								
								
									
										9
									
								
								samples/TeX/beispiel.toc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								samples/TeX/beispiel.toc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
\beamer@endinputifotherversion {3.07pt}
 | 
			
		||||
\select@language {german}
 | 
			
		||||
\beamer@sectionintoc {1}{Geschichte}{3}{0}{1}
 | 
			
		||||
\beamer@sectionintoc {2}{Merkmale}{4}{0}{2}
 | 
			
		||||
\beamer@sectionintoc {3}{Kritikpunkte}{5}{0}{3}
 | 
			
		||||
\beamer@sectionintoc {4}{Perl-Kultur und Spa{\ss}}{6}{0}{4}
 | 
			
		||||
\beamer@sectionintoc {5}{Siehe auch}{7}{0}{5}
 | 
			
		||||
\beamer@sectionintoc {6}{Einzelnachweise}{8}{0}{6}
 | 
			
		||||
\beamer@sectionintoc {7}{Bedingte Ausf\"{u}hrung}{12}{0}{7}
 | 
			
		||||
							
								
								
									
										19
									
								
								samples/TeX/perl.toc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								samples/TeX/perl.toc
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
\contentsline {section}{\numberline {1}History}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {1.1}Early versions}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {1.2}Early Perl 5}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {1.3}2000-present}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {1.4}Name}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {1.5}Camel symbol}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {1.6}Onion symbol}{3}
 | 
			
		||||
\contentsline {section}{\numberline {2}Overview}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {2.1}Features}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {2.2}Design}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {2.3}Applications}{3}
 | 
			
		||||
\contentsline {subsection}{\numberline {2.4}Implementation}{3}
 | 
			
		||||
\contentsline {section}{\numberline {3}Database interfaces}{3}
 | 
			
		||||
\contentsline {section}{\numberline {4}Distribution}{4}
 | 
			
		||||
\contentsline {subsection}{\numberline {4.1}Availability}{4}
 | 
			
		||||
\contentsline {subsubsection}{\numberline {4.3.1}Windows}{5}
 | 
			
		||||
\contentsline {subsubsection}{\numberline {4.3.2}Mac OS X}{6}
 | 
			
		||||
\contentsline {subsubsection}{\numberline {4.3.3}OpenBSD}{6}
 | 
			
		||||
\contentsline {subsubsection}{\numberline {4.3.4}FreeBSD}{6}
 | 
			
		||||
							
								
								
									
										114
									
								
								samples/Terra/arith.t
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								samples/Terra/arith.t
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
			
		||||
--[[
 | 
			
		||||
 | 
			
		||||
-
 | 
			
		||||
+
 | 
			
		||||
 | 
			
		||||
*
 | 
			
		||||
/
 | 
			
		||||
%
 | 
			
		||||
 | 
			
		||||
^
 | 
			
		||||
and
 | 
			
		||||
or
 | 
			
		||||
~= == < > >= <=
 | 
			
		||||
<< >>
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
terra test0()
 | 
			
		||||
    var a = 1 + 3
 | 
			
		||||
    var b = 1LL + 2LL
 | 
			
		||||
    var c = 1ULL + 2ULL
 | 
			
		||||
    var d = 1.f + 2.f
 | 
			
		||||
    var e = 1.0 + 2.0
 | 
			
		||||
    return a + b + c + d + e
 | 
			
		||||
end
 | 
			
		||||
terra test1()
 | 
			
		||||
    var a = 1 - 3
 | 
			
		||||
    var b = 1LL - 2LL
 | 
			
		||||
    var c = 1ULL - 2ULL
 | 
			
		||||
    var d = 1.f - 2.f
 | 
			
		||||
    var e = 1.0 - 2.0
 | 
			
		||||
    return a - b - c - d - e
 | 
			
		||||
end
 | 
			
		||||
terra test2()
 | 
			
		||||
    var a = 2 * 3
 | 
			
		||||
    var b = 3LL * 2LL
 | 
			
		||||
    var c = 3ULL * 2ULL
 | 
			
		||||
    var d = 1.f * 2.f
 | 
			
		||||
    var e = 3.0 * 2.0
 | 
			
		||||
    return a * b * c * d * e
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra test3()
 | 
			
		||||
    var a = 2 / 3 + 1
 | 
			
		||||
    var b = 3LL / 2LL + 1
 | 
			
		||||
    var c = 3ULL / 2ULL
 | 
			
		||||
    var d = 1.f / 2.f
 | 
			
		||||
    var e = 3.0 / 2.0
 | 
			
		||||
    return a * b * c * d * e
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra test4()
 | 
			
		||||
    var a = 2 % 3
 | 
			
		||||
    var b = 3LL % 4LL
 | 
			
		||||
    var c = 3ULL % 2ULL
 | 
			
		||||
    var d = 1.f % 2.f
 | 
			
		||||
    var e = 3.75 % 2.0
 | 
			
		||||
    return (a == 2) and (b == 3LL) and (d == 1.f) and (e == 1.75)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra test5()
 | 
			
		||||
    var a = 2 ^ 3
 | 
			
		||||
    var b = 3LL ^ 4LL
 | 
			
		||||
    var c = 3ULL ^ 2ULL
 | 
			
		||||
    return (a == 1) and (b == 7LL) and (c == 1ULL)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra test6()
 | 
			
		||||
    var a = 2 and 3
 | 
			
		||||
    var b = 3LL and 4LL
 | 
			
		||||
    var c = 3ULL and 2ULL
 | 
			
		||||
    return (a == 2) and (b == 0LL) and (c == 2ULL)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra test7()
 | 
			
		||||
    var a = 2 or 3
 | 
			
		||||
    var b = 3LL or 4LL
 | 
			
		||||
    var c = 3ULL or 2ULL
 | 
			
		||||
    return (a == 3) and (b == 7LL) and (c == 3ULL)
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
terra test8()
 | 
			
		||||
    var a0,a1 = 2 ~= 3, 2 == 3
 | 
			
		||||
    var b0,b1 = 2 < 3, 2 >= 3
 | 
			
		||||
    var c0,c1 = 2 > 3, 2 <= 3
 | 
			
		||||
    
 | 
			
		||||
    return a0 and not a1 and b0 and not b1 and not c0 and c1
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra test9()
 | 
			
		||||
    var a0, a1 = 8 >> 1, 8 << 1
 | 
			
		||||
    var b0, b1 = -8 >> 1, -8 << 1
 | 
			
		||||
    return a0 == 4 and a1 == 16 and b0 == -4 and b1 == -16
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
local test = require("test")
 | 
			
		||||
 | 
			
		||||
test.eq(test0(),16)
 | 
			
		||||
test.eq(test1(),2)
 | 
			
		||||
test.eq(test2(),2592)
 | 
			
		||||
test.eq(test3(),1.5)
 | 
			
		||||
 | 
			
		||||
test.eq(test4(),true)
 | 
			
		||||
 | 
			
		||||
test.eq(test5(),true)
 | 
			
		||||
test.eq(test6(),true)
 | 
			
		||||
test.eq(test7(),true)
 | 
			
		||||
test.eq(test8(),true)
 | 
			
		||||
test.eq(test9(),true)
 | 
			
		||||
							
								
								
									
										75
									
								
								samples/Terra/arrayt.t
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								samples/Terra/arrayt.t
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,75 @@
 | 
			
		||||
C = terralib.includecstring [[
 | 
			
		||||
	#include <stdio.h>
 | 
			
		||||
	#include <stdlib.h>
 | 
			
		||||
]]
 | 
			
		||||
local arraytypes = {}
 | 
			
		||||
function Array(T)
 | 
			
		||||
	local struct ArrayImpl {
 | 
			
		||||
		data : &T;
 | 
			
		||||
		N : int;
 | 
			
		||||
	}
 | 
			
		||||
	function ArrayImpl.metamethods.__typename(self)
 | 
			
		||||
	    return "Array("..tostring(T)..")"
 | 
			
		||||
	end
 | 
			
		||||
	arraytypes[ArrayImpl] = true
 | 
			
		||||
	terra ArrayImpl:init(N : int)
 | 
			
		||||
		self.data = [&T](C.malloc(N*sizeof(T)))
 | 
			
		||||
		self.N = N
 | 
			
		||||
	end
 | 
			
		||||
	terra ArrayImpl:free()
 | 
			
		||||
		C.free(self.data)
 | 
			
		||||
	end
 | 
			
		||||
	ArrayImpl.metamethods.__apply = macro(function(self,idx)
 | 
			
		||||
		return `self.data[idx]
 | 
			
		||||
	end)
 | 
			
		||||
	ArrayImpl.metamethods.__methodmissing = macro(function(methodname,selfexp,...)
 | 
			
		||||
		local args = terralib.newlist {...}
 | 
			
		||||
		local i = symbol(int)
 | 
			
		||||
		local promotedargs = args:map(function(a)
 | 
			
		||||
			if arraytypes[a:gettype()] then
 | 
			
		||||
				return `a(i)
 | 
			
		||||
			else
 | 
			
		||||
				return a
 | 
			
		||||
			end
 | 
			
		||||
		end)
 | 
			
		||||
		return quote
 | 
			
		||||
			var self = selfexp
 | 
			
		||||
			var r : ArrayImpl
 | 
			
		||||
			r:init(self.N)
 | 
			
		||||
			for [i] = 0,r.N do
 | 
			
		||||
				r.data[i] = self.data[i]:[methodname](promotedargs)
 | 
			
		||||
			end
 | 
			
		||||
		in
 | 
			
		||||
			r
 | 
			
		||||
		end
 | 
			
		||||
	end)
 | 
			
		||||
	return ArrayImpl
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
struct Complex {
 | 
			
		||||
	real : float;
 | 
			
		||||
	imag : float;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
terra Complex:add(c : Complex) 
 | 
			
		||||
	return Complex { self.real + c.real, self.imag + c.imag }
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
ComplexArray = Array(Complex)
 | 
			
		||||
N = 10
 | 
			
		||||
terra testit()
 | 
			
		||||
	var ca : ComplexArray
 | 
			
		||||
	ca:init(N)
 | 
			
		||||
	for i = 0,N do
 | 
			
		||||
		ca(i) = Complex { i, i + 1 }
 | 
			
		||||
	end
 | 
			
		||||
	var ra = ca:add(ca)
 | 
			
		||||
	return ra
 | 
			
		||||
end
 | 
			
		||||
local r = testit()
 | 
			
		||||
assert(r.N == N)
 | 
			
		||||
for i = 0,N-1 do
 | 
			
		||||
	assert(r.data[i].real == 2*i)
 | 
			
		||||
	assert(r.data[i].imag == 2*(i+1))
 | 
			
		||||
end
 | 
			
		||||
assert(tostring(Array(int)) == "Array(int32)")
 | 
			
		||||
							
								
								
									
										150
									
								
								samples/Terra/benchmark_nbody.t
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										150
									
								
								samples/Terra/benchmark_nbody.t
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,150 @@
 | 
			
		||||
local C = terralib.includecstring[[
 | 
			
		||||
 | 
			
		||||
#include <math.h>
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <stdlib.h>
 | 
			
		||||
 | 
			
		||||
]]
 | 
			
		||||
 | 
			
		||||
pi = 3.141592653589793
 | 
			
		||||
solar_mass = (4 * pi * pi)
 | 
			
		||||
days_per_year = 365.24
 | 
			
		||||
 | 
			
		||||
struct planet {
 | 
			
		||||
  x : double;
 | 
			
		||||
  y : double;
 | 
			
		||||
  z : double;
 | 
			
		||||
  vx : double;
 | 
			
		||||
  vy : double;
 | 
			
		||||
  vz : double;
 | 
			
		||||
  mass : double;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
terra advance(nbodies : int, bodies : &planet, dt : double)
 | 
			
		||||
  
 | 
			
		||||
  for i = 0, nbodies do
 | 
			
		||||
    var b = &bodies[i]
 | 
			
		||||
    for j = i + 1, nbodies do
 | 
			
		||||
      var b2 = &bodies[j]
 | 
			
		||||
      
 | 
			
		||||
      var dx = b.x - b2.x;
 | 
			
		||||
      var dy = b.y - b2.y;
 | 
			
		||||
      var dz = b.z - b2.z;
 | 
			
		||||
      var distance = C.sqrt(dx * dx + dy * dy + dz * dz);
 | 
			
		||||
      var mag = dt / (distance * distance * distance);
 | 
			
		||||
      --C.printf("%f %f %f %f %f\n",dx,dy,dz,distance,mag);
 | 
			
		||||
      b.vx = b.vx - dx * b2.mass * mag;
 | 
			
		||||
      b.vy = b.vy - dy * b2.mass * mag;
 | 
			
		||||
      b.vz = b.vz - dz * b2.mass * mag;
 | 
			
		||||
      b2.vx = b2.vx + dx * b.mass * mag;
 | 
			
		||||
      b2.vy = b2.vy + dy * b.mass * mag;
 | 
			
		||||
      b2.vz = b2.vz + dz * b.mass * mag;
 | 
			
		||||
      --C.printf("%f %f %f %f %f %f\n",b.vx,b.vy,b.vz,b2.vx,b2.vy,b2.vz)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  for i = 0,nbodies do
 | 
			
		||||
    var b = &bodies[i]
 | 
			
		||||
    b.x = b.x + dt * b.vx;
 | 
			
		||||
    b.y = b.y + dt * b.vy;
 | 
			
		||||
    b.z = b.z + dt * b.vz;
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra energy(nbodies : int, bodies : &planet)
 | 
			
		||||
  var e = 0.0
 | 
			
		||||
  for i = 0, nbodies do
 | 
			
		||||
    var b = &bodies[i]
 | 
			
		||||
    e = e + 0.5 * b.mass * (b.vx * b.vx + b.vy * b.vy + b.vz * b.vz);
 | 
			
		||||
    for j = i + 1, nbodies do
 | 
			
		||||
      var b2 = &bodies[j]
 | 
			
		||||
      var dx = b.x - b2.x
 | 
			
		||||
      var dy = b.y - b2.y
 | 
			
		||||
      var dz = b.z - b2.z
 | 
			
		||||
      var distance = C.sqrt(dx * dx + dy * dy + dz * dz)
 | 
			
		||||
      e = e - (b.mass * b2.mass) / distance
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  return e
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra offset_momentum(nbodies : int, bodies : &planet)
 | 
			
		||||
  var px,py,pz = 0.0,0.0,0.0
 | 
			
		||||
  
 | 
			
		||||
  for i = 0,nbodies do
 | 
			
		||||
    px = px + bodies[i].vx * bodies[i].mass
 | 
			
		||||
    py = py + bodies[i].vy * bodies[i].mass
 | 
			
		||||
    pz = pz + bodies[i].vz * bodies[i].mass
 | 
			
		||||
  end
 | 
			
		||||
  bodies[0].vx = - px / solar_mass
 | 
			
		||||
  bodies[0].vy = - py / solar_mass
 | 
			
		||||
  bodies[0].vz = - pz / solar_mass
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
NBODIES = 5
 | 
			
		||||
 | 
			
		||||
terra main(argc : int, argv : &&int8)
 | 
			
		||||
    var bodies = array(
 | 
			
		||||
      planet {                               -- sun */
 | 
			
		||||
        0, 0, 0, 0, 0, 0, solar_mass
 | 
			
		||||
      },
 | 
			
		||||
      planet {                               -- jupiter */
 | 
			
		||||
        4.84143144246472090e+00,
 | 
			
		||||
        -1.16032004402742839e+00,
 | 
			
		||||
        -1.03622044471123109e-01,
 | 
			
		||||
        1.66007664274403694e-03 * days_per_year,
 | 
			
		||||
        7.69901118419740425e-03 * days_per_year,
 | 
			
		||||
        -6.90460016972063023e-05 * days_per_year,
 | 
			
		||||
        9.54791938424326609e-04 * solar_mass
 | 
			
		||||
      },
 | 
			
		||||
      planet {                               -- saturn */
 | 
			
		||||
        8.34336671824457987e+00,
 | 
			
		||||
        4.12479856412430479e+00,
 | 
			
		||||
        -4.03523417114321381e-01,
 | 
			
		||||
        -2.76742510726862411e-03 * days_per_year,
 | 
			
		||||
        4.99852801234917238e-03 * days_per_year,
 | 
			
		||||
        2.30417297573763929e-05 * days_per_year,
 | 
			
		||||
        2.85885980666130812e-04 * solar_mass
 | 
			
		||||
      },
 | 
			
		||||
      planet {                               -- uranus */
 | 
			
		||||
        1.28943695621391310e+01,
 | 
			
		||||
        -1.51111514016986312e+01,
 | 
			
		||||
        -2.23307578892655734e-01,
 | 
			
		||||
        2.96460137564761618e-03 * days_per_year,
 | 
			
		||||
        2.37847173959480950e-03 * days_per_year,
 | 
			
		||||
        -2.96589568540237556e-05 * days_per_year,
 | 
			
		||||
        4.36624404335156298e-05 * solar_mass
 | 
			
		||||
      },
 | 
			
		||||
      planet {                               -- neptune */
 | 
			
		||||
        1.53796971148509165e+01,
 | 
			
		||||
        -2.59193146099879641e+01,
 | 
			
		||||
        1.79258772950371181e-01,
 | 
			
		||||
        2.68067772490389322e-03 * days_per_year,
 | 
			
		||||
        1.62824170038242295e-03 * days_per_year,
 | 
			
		||||
        -9.51592254519715870e-05 * days_per_year,
 | 
			
		||||
        5.15138902046611451e-05 * solar_mass
 | 
			
		||||
      }
 | 
			
		||||
    )
 | 
			
		||||
    var n = C.atoi(argv[1])    
 | 
			
		||||
    offset_momentum(NBODIES, bodies)
 | 
			
		||||
    C.printf ("%.9f\n", energy(NBODIES, bodies))
 | 
			
		||||
    for i = 0,n do
 | 
			
		||||
        advance(NBODIES, bodies, 0.01)
 | 
			
		||||
    end
 | 
			
		||||
    C.printf ("%.9f\n", energy(NBODIES, bodies));
 | 
			
		||||
  return 0
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
terra run()
 | 
			
		||||
    main(2,array("what","1000000"))
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
--run:compile()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
--local test = require("test")
 | 
			
		||||
 | 
			
		||||
--print(test.time(run))
 | 
			
		||||
 | 
			
		||||
terralib.saveobj("benchmark_nbody",{ main = main } )
 | 
			
		||||
energy:disas()
 | 
			
		||||
energy:printpretty()
 | 
			
		||||
							
								
								
									
										41
									
								
								samples/Text/aptitude-defaults.nb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								samples/Text/aptitude-defaults.nb
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
Pakker uten en bestemt bolk\n Disse pakkene tilhører ingen bestemt bolk. Kanskje det er noe feil ved dem?
 | 
			
		||||
Virtuelle pakker\n Disse pakkene finnes ikke, de er navn som andre pakker bruker for å oppnå en eller annen egenskap.
 | 
			
		||||
Pakker som setter opp systemet ditt til å utføre en bestemt oppgave\n Pakkene i bolken «oppgaver» inneholder ingen filer, det kan hende de bare er avhengige av andre pakker. Disse pakkene gjør det mulig å installere pakker for en bestemt oppgave på en lett måte.
 | 
			
		||||
Administrative verktøy\n Pakkene i bolken «admin» gjør det mulig å utføre administrative oppgaver, som å installere programmer, opprette eller slette brukere, vise informasjon om systemet eller nettverkstrafikken osv.
 | 
			
		||||
Pakker som er laget av pakker i et annet format (rpm, tgz mm)\n Pakkene i bolken «alien» ble laget av programmet «alien» fra et annet format enn Debians eget pakkeformat, f.eks fra RPM-pakker
 | 
			
		||||
Debians grunnsystem\n Pakkene i bolken «grunnsystem» hører med til første del av Debian-installasjonen.
 | 
			
		||||
Programmer for faksmodem og andre kommunikasjonsenheter\n Pakkene i bolken «Kommunikasjon» brukes til å styre modemer og andre enheter på maskinen, deriblant programvare for styring av faksmodemer (for eksempel, PPP for oppringt internettforbindelse og programmer som opprinnelig er skrevet for dette, slik som zmodem og kermit),  og  programmer for å styre mobiltelefoner, snakke med FidoNet og kjøre et BBS.
 | 
			
		||||
Verktøy og programmer for programvareutvikling\n Pakker i seksjonen «utvikling» blir brukt til å skrive nye programmer og for å jobbe med videre med programmer som allerede er laget. Vanlige brukere som ikke kompilerer (setter sammen) sine egne programmer trenger neppe så mange programmer herfra.\n .\n Her finner du kompilatorer, avlusingsverktøy, skriveprogrammer som hjelper til med programmeringen, verktøy for håndtering av kildekode og andre ting som har med utvikling av programmer å gjøre.
 | 
			
		||||
Dokumentasjon og spesialiserte program for visning av dokumentasjon\n Pakker i «dok»-seksjonen dokumenterer deler av Debian-systemet eller viser fram dokumenter i forskjellige format.
 | 
			
		||||
Skriveprogram og tekstbehandlere\n Pakker i bolken «skriveprogram» lar deg redigere ren ASCII-tekst. Dette er nødvendigvis ikke tekstbehandlere, selv om du kan finne noen av dem her i denne bolken.
 | 
			
		||||
Program for å jobba med elektronikk og elektriske kretser\n Pakker i «elektronikk»-seksjonen inneholder verktøy for design av elektriske kretser, simulatorer og assemblere for mikrokontrollere og andre liknende programmer.
 | 
			
		||||
Programmer for innebygde systemer\nPakker i bolken «innebygd» er ment til å kjøre på innebygde systemer. Dette er spesialisert maskinvare med mye mindre datakraft enn en typisk skrivebordssystem, for eksempel en PDA, en mobiltelefon eller en Tivo.
 | 
			
		||||
Skrivebordssystemet GNOME\n GNOME er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux.  Pakker i «gnome»-bolken er enten deler av GNOME-miljøet eller tett sammenvevd med det.
 | 
			
		||||
Spill, leketøy og andre programmer som bare er for gøy\n Pakker i «spill»-bolken er stort sett bare til for underholdningens skyld.
 | 
			
		||||
Verktøy for å lage, vise og redigere grafikkfiler\n Pakker i «grafikk»-bolken er programmer for visning av bildefiler, bildebehandlingsprogrammer, støtteprogrammer for forskjellig utstyr (som videokort, skanner og digitalt kamera) og programmeringsverktøy for å håndtere grafikk.
 | 
			
		||||
Programvare for radioamatører\n Pakker i «hamradio»-bolken er stort sett ment for radioamatører.
 | 
			
		||||
Programmer som kjører skriptspråk\n Pakker i «tolkeprogram»-bolken er programmer som kompilerer og kjører språk som Python, Perl og Ruby, og som sørger for standardbibliotek for disse språkene.
 | 
			
		||||
Skrivebordssystemet KDE\n KDE er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux.  Pakker i «kde»-bolken er enten deler av KDE-miljøet eller tett sammenvevd med det.
 | 
			
		||||
Utviklingsfiler for biblioteker\n Pakker i «libdevel»-bolken inneholder filer som trengs for å lage programmer som bruker biblioteker i «libs»-bolken.  Du trenger ikke pakker fra denne bolken hvis du ikke har tenkt å lage programmer selv.
 | 
			
		||||
Samling av programvarerutiner\n Pakker i «libs»-seksjonen sørger for nødvendige funksjoner som er felles for andre programmer på maskinen. Med svært få unntak skal det ikke værenødvendig å be om at slike pakker blir installert. Pakkesystemet sørger for å installere dem når de andre programmene trenger dem.
 | 
			
		||||
Perl-tolker og biblioteker\n Pakker i «perl»-bolken sørger for programmeringsspråket Perl og mange tredjeparts-biblioteker til Perl. Hvis du ikke er Perl-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig.
 | 
			
		||||
Python-tolker og biblioteker\n Pakker i «python»-bolken sørger for programmeringsspråket Python og mange tredjeparts-biblioteker til det. Hvis du ikke er Python-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig.
 | 
			
		||||
Program for å skrive, sende og omdirigere epostmeldinger\n Pakker i «epost»-bolken inneholder epostlesere, nisser som flytter eposten dit den skal, programvare for epostlister og filter for søppelpost. Det fins også diverse andre programmer som gjør noe med elektronisk post, men som ikke er så lette å plassere i grupper.
 | 
			
		||||
Numerisk analyse og andre matematikkrelaterte programmer\n Blant pakker i «matte»-bolken fins kalkulatorer, språk for matematiske utregninger, symbolsk algebra og programmer for å tegne ut matematiske objekter.
 | 
			
		||||
Ymse programvare\n Pakker i «ymse»-bolken er ofte vanskelige å klassifisere, men det betyr ikke at de ikke finnes.
 | 
			
		||||
Programmer for å koble til og tilby ulike tjenester i et nettverk\n Blant pakker i «nett»-bolken finner du  klienter og tjenere for mange protokoller, verktøy for å manipulere og avluse lavnivå nettverksprotokoller, system for direkte meldingstjeneste og andre nettverksrelaterte programmer.
 | 
			
		||||
Klienter og tjenere for Usenet\n Pakker i bolken «nyheter» henger sammen med til det distribuerte nyhetssystemet Usenet. Seksjonen tjenere og leseprogrammer (klienter) for dette systemet.
 | 
			
		||||
Foreldede programbibliotek\n Pakker i bolken «gamle bibliotek» er foreldede og bør ikke brukes i ny programvare. De er tilgjengelige for at eldre programmer som er avhengige av programmene  her fortsatt skal kunne virke.\n .\n Du skal normalt ikke behøve å be om å få installert pakker herfra. Pakkesystemet vil ta med disse pakkene når andre pakker krever det.
 | 
			
		||||
Programmer som etterlikner andre datasystemer og  og programmer som hjelper deg med å lese fremmede filsystem\n Pakker i bolken «andreosfs» etterlikner maskinvare og operativsystem og tilbyr verktøy for å overføre data mellom ulike operativsystem og maskinvareplattformer. (For eksempel verktøy for å lese DOS-disketter, og verktøy til å kommunisere med håndholdte maskiner som Palm Pilot)\n .\n Programmer for å brenne CD-plater er også med i denne seksjonen.
 | 
			
		||||
Programvare for vitenskaplig arbeid\n Pakker i «vitenskap»-bolken er verktøy for astronomi, biologi og kjemi, pluss andre programmer man bruker i vitenskapelig arbeide.
 | 
			
		||||
Kommandoskall og alternative konsollmiljø\n Pakker i «skall» er programmer som tilbyr grensesnitt med kommandolinje.
 | 
			
		||||
Verktøy for å spille av og ta opp lyd\nI «lyd»-bolken finner du lydavspillere, opptakere, lydkomprimeringsprogram for mange format, miksere og lydstyring, program for MIDI-sekvenser og program for å lage noter. Her finner du også drivere for lydkort og programmer for lydprosessering.
 | 
			
		||||
TeX typografi-systemet\n Pakker i bolken «tex» er deler i et system for å produsere utskrifter og andre slags utdata med høy typografisk kvalitet. Det omfatter selve TeX, TeX-pakker, skriveprogrammer som hjelper deg med å lage dokumenter i TeX, verktøy for å gjøre om TeX og TeX utdatafiler til ulike andre format, TeX-skrifttyper og annen programvare knyttet TeX.
 | 
			
		||||
Tekstverktøy\n I bolken «tekst» finner du skriveprogrammer og tekstfiltere, stavekontroll, ordbøker og verktøy for å oversette mellom tegnkoding og tekst-filformater (for eksempel Unix og DOS) og programmer for å formatere, skrive ut og redigere som ren tekst.
 | 
			
		||||
Forskjellige systemverktøy\n Pakkene i bolken «verktøy» har oppgaver som faller utenfor de andre kategoriene.
 | 
			
		||||
Nettlesere, tjenere, mellomtjenere og andre verktøy\n I bolken «nett» finner du blant annet nettlesere, tjenere og mellomtjenere, programmer for å skrive CGI-skript eller nettbaserte programmer og andre programmer som har med verdensveven å gjøre.
 | 
			
		||||
Vindussystemet «X» og beslektede programmer\n Pakkene i bolken «X11» inneholder også grunnpakka for vindussystemet «X», vindusbehandlere, verktøy for X og andre programmer med en X-grensesnitt som ble plassert her fordi de ikke passet inn noen andre steder.
 | 
			
		||||
Debians hovedarkiv\n Selve Debian-distribusjonen består av pakker fra hovedbolken. Alle pakkene her er fri programvare.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines
 | 
			
		||||
 Programmer som avhenger av programvare utenfor Debian.\n Pakker i bolken«bidrag» er ikke med i Debian.\n\n Disse pakkene er fri programvare, men de avhenger av programmer som ikke er en del av Debian.  Dette kan skyldes at de ikke er fri programvare og ligger i bolken «ufri» i pakkearkivet, og disse kan Debian slett ikke distribuere, eller - i noen sjeldne tilfeller - at ingen har laget en pakke av dette ennå.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines
 | 
			
		||||
Programmer som ikke er fri programvare \n Pakkene i bolken «ufri» er ikke en del av Debian\n .\n Disse pakkene passet ikke med en eller flere av betingelsene i Debians retningslinjer for fri programvare (Debian Free Software Guidelines; se nedenfor). Du bør lese lisensen for programmene i denne bolken for å være sikker på at du har rett til å bruke dem slik du har tenkt.\n .\n For mer informasjon om hva Debian mener med «Fri programvare», se http://www.debian.org/social_contract#guidelines
 | 
			
		||||
Programmer som er lagret utenfor USA på grunn av eksportforbud.\n Det er stor sjanse for at pakkene i «utenfor USA» inneholder kryptografi, og noen få av dem inneholder patenterte algoritmer. På grunn av dette kan de ikke eksporteres ut av USA, og lagres derfor på en tjener i «den frie verden».\n .\n Merk: Debian-prosjektet er, etter samtale med eksperter på rettsvesenet om nye endringer i eksporteringsreglene, i ferd med å flette kryptografiske programmer inn i de USA-baserte arkivene. De fleste pakkene som før lå i denne bolken er derfor flyttet til «hoved».
 | 
			
		||||
							
								
								
									
										1
									
								
								samples/Text/filenames/README.me
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/Text/filenames/README.me
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
Please read me.
 | 
			
		||||
							
								
								
									
										9
									
								
								samples/Text/filenames/click.me
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								samples/Text/filenames/click.me
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,9 @@
 | 
			
		||||
 | 
			
		||||
To run the "Conway's game of life" macros:
 | 
			
		||||
 | 
			
		||||
  1.  Type ":so life.vim".  This loads the macros.
 | 
			
		||||
  2.  Type "g" to run the macros.
 | 
			
		||||
  3.  Type CTRL-C to interrupt.
 | 
			
		||||
  4.  Type ":q!" to get out.
 | 
			
		||||
 | 
			
		||||
See life.vim for more advanced usage.
 | 
			
		||||
							
								
								
									
										1
									
								
								samples/Text/filenames/delete.me
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/Text/filenames/delete.me
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
Delete me.
 | 
			
		||||
							
								
								
									
										1
									
								
								samples/Text/filenames/keep.me
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/Text/filenames/keep.me
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
Keep me.
 | 
			
		||||
							
								
								
									
										1
									
								
								samples/Text/filenames/read.me
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								samples/Text/filenames/read.me
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
Read me now!
 | 
			
		||||
							
								
								
									
										42
									
								
								samples/Text/filenames/readme.1st
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								samples/Text/filenames/readme.1st
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tincidunt
 | 
			
		||||
volutpat metus, non accumsan tortor convallis id. Headline un oreiller.
 | 
			
		||||
Il est recommandé que la boîte en carton. Micro-ondes et sollicitudin bien.
 | 
			
		||||
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
Pellentesque sodales lectus ac lorem tempus, non placerat blandit de nisi.
 | 
			
		||||
Phasellus Cursus, eros, et parfois, il est arcu diam mollis felis, ac tempor
 | 
			
		||||
nisl elit quis felis. Morbi nca nisi vel ligula interdum pas l'auteur de, ni
 | 
			
		||||
peur. Mécène voix améliorée. Besoin de tirer gratuitement. Suspendisse
 | 
			
		||||
fermentum convallis metus non blandit. Ac turpis quis de molestie de Mécène.
 | 
			
		||||
Gluten. Donec urna leo, aliquet quis urna et, congue est plein. Pellentesque
 | 
			
		||||
ut pretium erat, rutrum neque tincidunt. Donec hendrerit massa sed sapien
 | 
			
		||||
dapibus ultrices.
 | 
			
		||||
 | 
			
		||||
==============================================
 | 
			
		||||
Et le porche des Mécène, le prix de la société n'a pas, lacinia justo.
 | 
			
		||||
Pellentesque habitant morbi tristique senectus et Netus et Malesuada fames
 | 
			
		||||
egestas ac turpis. Ut leo mi, feugiat sagittis un ac id Mauris, posuere
 | 
			
		||||
lobortis neque. Non, il n'y avait pas de varius tincidunt pretium.
 | 
			
		||||
 | 
			
		||||
En effet, nca pur hendrerit pellentesque sapien enim sagittis ipsum, aliquam
 | 
			
		||||
tempor est récolté dans le jeu. Ut sempre egestas ultrices lorem à risus.
 | 
			
		||||
Même arcu dolor, ipsum, ma vie, il a été dit fringilla odio.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	- Lorem ipsum eu commodo imperdiet sem
 | 
			
		||||
	- ligula arcu placerat turpis, une
 | 
			
		||||
	- importante lorem nisi eget urna.
 | 
			
		||||
 | 
			
		||||
Curabitur aliquam accumsan nulla blandit mollis. Celtics à la succession!
 | 
			
		||||
Id ou pas d'alcool. A iaculis Duis consectetur vitae enim. Et magnis dis
 | 
			
		||||
parturiente montes Cras iaculis justo eu libero. Thermal non sapien quis
 | 
			
		||||
nisi Pellentesque placerat. Praesent fringilla diam nisl, nca dignissim
 | 
			
		||||
sem lobortis feugiat. Vivre beaucoup de pauvreté.
 | 
			
		||||
 | 
			
		||||
Morbi non justo eleifend!
 | 
			
		||||
 | 
			
		||||
Lacinia lacus fringilla, il fut un temps. Sed dans nunc à une chanson des
 | 
			
		||||
Beatles ou pour décorer. Aeneas de basket-ball de diamètre. Fusce felis à
 | 
			
		||||
partir, pas de pellentesque eget, le stress thermique pulvinar. Etiam
 | 
			
		||||
porta odio sed nibh accumsan tristique. Mécène tincidunt quis justo eget
 | 
			
		||||
porttitor. Jusqu'à ce que l'élément de temps ciblé.
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user