mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Compare commits
478 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0c071990cb | ||
|
|
77dfb19a50 | ||
|
|
49254f1f74 | ||
|
|
9dd952c175 | ||
|
|
0b9897db1f | ||
|
|
470bd34349 | ||
|
|
65087dd7b8 | ||
|
|
89c5361f25 | ||
|
|
f82cc26e4f | ||
|
|
1b2f574af2 | ||
|
|
ca4bc6110f | ||
|
|
a944769d61 | ||
|
|
98a31515ef | ||
|
|
3e665099ac | ||
|
|
5400b534e4 | ||
|
|
6f2d4dc195 | ||
|
|
4f7fac3ba1 | ||
|
|
fd6569830a | ||
|
|
5d4cad6394 | ||
|
|
b790a49282 | ||
|
|
537b83c759 | ||
|
|
c0b9e2c3f4 | ||
|
|
f488b9b9f7 | ||
|
|
7060b116f4 | ||
|
|
0f4cf11294 | ||
|
|
048496723b | ||
|
|
70068f74f1 | ||
|
|
6f197bacc7 | ||
|
|
24a89d2d75 | ||
|
|
1ac16cbec7 | ||
|
|
8144438f39 | ||
|
|
f141abbc73 | ||
|
|
5329b96793 | ||
|
|
7a70931066 | ||
|
|
9a070d7bb3 | ||
|
|
189b2d684b | ||
|
|
71dfac26fe | ||
|
|
efdc790374 | ||
|
|
a3613dc438 | ||
|
|
97afedd861 | ||
|
|
00a436f175 | ||
|
|
aa2e3000cd | ||
|
|
10e0fa4360 | ||
|
|
0473af368f | ||
|
|
b82f563c38 | ||
|
|
344297895b | ||
|
|
d3c525645b | ||
|
|
59d02e5138 | ||
|
|
8522dc1d33 | ||
|
|
53d238f310 | ||
|
|
92ed2d189e | ||
|
|
7133c3b11a | ||
|
|
d72114083b | ||
|
|
683925fcd5 | ||
|
|
1c8bf32d35 | ||
|
|
28913833f4 | ||
|
|
c6752be546 | ||
|
|
395e474cad | ||
|
|
16ea189aa6 | ||
|
|
ac81fc5da9 | ||
|
|
58191c10b3 | ||
|
|
c2ca23d580 | ||
|
|
b5dfb40c7d | ||
|
|
7e647fd915 | ||
|
|
5b9f9bc0e6 | ||
|
|
b1c057fa30 | ||
|
|
ca348dd373 | ||
|
|
b802045c5c | ||
|
|
3c244a9501 | ||
|
|
832a7b9b06 | ||
|
|
e7d856345f | ||
|
|
ac559effaa | ||
|
|
95d0daba80 | ||
|
|
a0ad1523a1 | ||
|
|
06c049b8c0 | ||
|
|
24c7380765 | ||
|
|
73ef1bf156 | ||
|
|
c8b30a62f9 | ||
|
|
48dfdd2dfe | ||
|
|
68727f724a | ||
|
|
f46e053633 | ||
|
|
d2e739ba8c | ||
|
|
37174e1d2c | ||
|
|
cdb5206def | ||
|
|
d636eaf1e3 | ||
|
|
49f3eb1286 | ||
|
|
8ab94a8643 | ||
|
|
f72c337c5b | ||
|
|
d22321de07 | ||
|
|
473e5db51f | ||
|
|
8b9fc4683a | ||
|
|
3b4415cc3c | ||
|
|
2afce1754a | ||
|
|
f232b93214 | ||
|
|
db64f192fa | ||
|
|
ca96ecdc55 | ||
|
|
2a06d1aa19 | ||
|
|
b2fa2a1f46 | ||
|
|
6839516b5c | ||
|
|
7247c80fac | ||
|
|
01d05d1d4e | ||
|
|
8db4cc482e | ||
|
|
074f17ed98 | ||
|
|
68b553ea55 | ||
|
|
fd5da9cb15 | ||
|
|
d081f687b0 | ||
|
|
34abe5b983 | ||
|
|
5765f1faf1 | ||
|
|
550b67215c | ||
|
|
d7b2826113 | ||
|
|
b4f94c7c25 | ||
|
|
d24677adbb | ||
|
|
04f981eeac | ||
|
|
b53d84d8ff | ||
|
|
fea8bb21a0 | ||
|
|
996ed8a8b1 | ||
|
|
daef164163 | ||
|
|
61a5cab1f2 | ||
|
|
2fddaaf3d7 | ||
|
|
741d246581 | ||
|
|
1b23e81541 | ||
|
|
362d300cb0 | ||
|
|
7b185cc2f3 | ||
|
|
932726863f | ||
|
|
a35a3e98ce | ||
|
|
7c404e72d2 | ||
|
|
8736e2305d | ||
|
|
a13664698f | ||
|
|
6e934067a8 | ||
|
|
3040642f97 | ||
|
|
dd7e44f957 | ||
|
|
6b56a243e7 | ||
|
|
5d08605aef | ||
|
|
bf705cbaf2 | ||
|
|
fe827896e0 | ||
|
|
317219e479 | ||
|
|
64e7df7596 | ||
|
|
b3ff84872b | ||
|
|
5d176a781c | ||
|
|
e0c97f97ba | ||
|
|
83f358976e | ||
|
|
9ee6153891 | ||
|
|
825e640061 | ||
|
|
e5ae213839 | ||
|
|
74e034c689 | ||
|
|
a55a60a161 | ||
|
|
9d865ec018 | ||
|
|
8b01e3dead | ||
|
|
9e3cc01715 | ||
|
|
0f204767a9 | ||
|
|
11e3251efd | ||
|
|
1f1416a5f7 | ||
|
|
b3786f3825 | ||
|
|
09c2eee91e | ||
|
|
dc78b14902 | ||
|
|
500ce0959a | ||
|
|
aa0c9e3572 | ||
|
|
e6de75d48a | ||
|
|
a5ad0a34f8 | ||
|
|
6e609cc4e3 | ||
|
|
27727a927f | ||
|
|
5ff580df0a | ||
|
|
b34acac722 | ||
|
|
37840856ed | ||
|
|
acfad4371f | ||
|
|
ae42cc0307 | ||
|
|
d06860df37 | ||
|
|
7d5d162f6b | ||
|
|
d39a75b68b | ||
|
|
d72f7311f6 | ||
|
|
3f81b7c179 | ||
|
|
33d1255a5a | ||
|
|
0ebea6a0ff | ||
|
|
c28da3a4a9 | ||
|
|
538f479b60 | ||
|
|
88cc73fa49 | ||
|
|
d6d368a65d | ||
|
|
c5be9cc3e9 | ||
|
|
c462c2bd31 | ||
|
|
3426165621 | ||
|
|
98b99e38bb | ||
|
|
d8e3bec499 | ||
|
|
7c759d4d29 | ||
|
|
41d438b47e | ||
|
|
41911d6921 | ||
|
|
dca18d77cb | ||
|
|
040af5dad2 | ||
|
|
01bb6c37ab | ||
|
|
c624d68628 | ||
|
|
4867c49bd9 | ||
|
|
a354eddf4b | ||
|
|
9b78c533a5 | ||
|
|
090ea576b9 | ||
|
|
6a2d33a4b3 | ||
|
|
b54a9c7412 | ||
|
|
2c62da7834 | ||
|
|
0145a0adb2 | ||
|
|
473282d64c | ||
|
|
c2c068e9db | ||
|
|
13d1f662d1 | ||
|
|
bdd57f58a0 | ||
|
|
b1bcabd6e6 | ||
|
|
e128c3fa82 | ||
|
|
efac9fe750 | ||
|
|
2b8545a8fa | ||
|
|
b275b5d728 | ||
|
|
1f46cfafa7 | ||
|
|
b1dcdf3418 | ||
|
|
4bfd65deb8 | ||
|
|
213cf322f5 | ||
|
|
61102812a0 | ||
|
|
580cfce7fb | ||
|
|
f1383d7a45 | ||
|
|
e4ce5bfe39 | ||
|
|
6ed64f25a2 | ||
|
|
114a331106 | ||
|
|
9aa24a216a | ||
|
|
13702451ab | ||
|
|
f0242f6f97 | ||
|
|
9775820398 | ||
|
|
7daf26bcd0 | ||
|
|
231f705098 | ||
|
|
893ab8fd8d | ||
|
|
5afdd2c533 | ||
|
|
e4f5c0066a | ||
|
|
a167f852dd | ||
|
|
b428bce126 | ||
|
|
e62d0e19a5 | ||
|
|
9b8bf9068f | ||
|
|
6e05edc350 | ||
|
|
dd8eaf2893 | ||
|
|
ecc750f445 | ||
|
|
cf5268a7d4 | ||
|
|
e24efad5ff | ||
|
|
58a34cdb7d | ||
|
|
b1c6b330e9 | ||
|
|
7c3e265033 | ||
|
|
13695a716c | ||
|
|
c9e43804d6 | ||
|
|
1535e3553e | ||
|
|
0ac05bbbeb | ||
|
|
d3f979d640 | ||
|
|
0e9ded45dc | ||
|
|
a2ca886510 | ||
|
|
25a1af3775 | ||
|
|
0d8e0a2970 | ||
|
|
c0fff6c8a8 | ||
|
|
e6b4428614 | ||
|
|
4e6e69833d | ||
|
|
1d9faff4c6 | ||
|
|
7025cbe760 | ||
|
|
e922b7c2ca | ||
|
|
96518d2d0f | ||
|
|
1241b20ba1 | ||
|
|
f03f5c1628 | ||
|
|
cb550a3662 | ||
|
|
d1f90d61c5 | ||
|
|
16e65fe189 | ||
|
|
62a0faa729 | ||
|
|
fbb3ab2292 | ||
|
|
b3b75e5ef8 | ||
|
|
8b36210db5 | ||
|
|
a74f3b3e46 | ||
|
|
e214a52de5 | ||
|
|
0624a9395c | ||
|
|
b2e7f7ffa6 | ||
|
|
b312b39a10 | ||
|
|
80e2d112b2 | ||
|
|
519b169df0 | ||
|
|
5c2cfbc334 | ||
|
|
7d91e4959a | ||
|
|
0c5aa2a7eb | ||
|
|
0d7a264981 | ||
|
|
52ff2d2e74 | ||
|
|
8a7ceaa845 | ||
|
|
fd9ce2d1cf | ||
|
|
2c2b37bec3 | ||
|
|
c777f2d388 | ||
|
|
eca10056a8 | ||
|
|
c7bab11ebe | ||
|
|
6995fc28b6 | ||
|
|
102f14d0e9 | ||
|
|
aac168402b | ||
|
|
152d49513f | ||
|
|
d5564c808d | ||
|
|
82410e07b2 | ||
|
|
94d90b30b5 | ||
|
|
06997f0da2 | ||
|
|
55aafa416d | ||
|
|
6226a46988 | ||
|
|
8d216f0c43 | ||
|
|
7f5bb25542 | ||
|
|
5fcdf6adc2 | ||
|
|
6a565a849b | ||
|
|
66fc67e34c | ||
|
|
7cf140940e | ||
|
|
60e90bab23 | ||
|
|
4f58258186 | ||
|
|
03e2904ebf | ||
|
|
bea90b256e | ||
|
|
8eb37ba956 | ||
|
|
8d20c1fb59 | ||
|
|
9a1abf0c49 | ||
|
|
5aae7a4000 | ||
|
|
d9509a1750 | ||
|
|
978c448fb8 | ||
|
|
997c0fca10 | ||
|
|
3ae6e68492 | ||
|
|
851c93a1f7 | ||
|
|
a5f7355e16 | ||
|
|
18ffdbaa65 | ||
|
|
c089222bc6 | ||
|
|
37f9535d27 | ||
|
|
4650368bc2 | ||
|
|
88b14ed455 | ||
|
|
54a2a47bc0 | ||
|
|
ffcc970140 | ||
|
|
7a811e39e0 | ||
|
|
11f158cbb3 | ||
|
|
5d5550c48b | ||
|
|
fd570d906a | ||
|
|
deab0662f9 | ||
|
|
7238f50a6b | ||
|
|
499fcd1f3f | ||
|
|
dc0ddc82d6 | ||
|
|
436fc34cb9 | ||
|
|
f072cd96e3 | ||
|
|
3441a001c7 | ||
|
|
bc747844ea | ||
|
|
a887f58bcc | ||
|
|
f42afef6e0 | ||
|
|
18eaf22cb9 | ||
|
|
d94f427e12 | ||
|
|
b94eb42db6 | ||
|
|
d2297f5516 | ||
|
|
ef6f58b828 | ||
|
|
eb0bf16cce | ||
|
|
ca51415540 | ||
|
|
8ae32e1d47 | ||
|
|
0a6165c4d9 | ||
|
|
cf8521a629 | ||
|
|
b11c7f3dc0 | ||
|
|
01151aad5c | ||
|
|
6b283068a9 | ||
|
|
ccd7d4d89d | ||
|
|
208ec3906f | ||
|
|
84d4fccb4d | ||
|
|
8d8ea959ee | ||
|
|
1c73db499f | ||
|
|
16a4b4947f | ||
|
|
4b2abb2064 | ||
|
|
c581b6a5a7 | ||
|
|
4c66582f87 | ||
|
|
11388a5355 | ||
|
|
24ca98b1a3 | ||
|
|
90a293727d | ||
|
|
e869f6c173 | ||
|
|
5b187d1f20 | ||
|
|
7b5d1c075d | ||
|
|
07173d2238 | ||
|
|
6b747f7d65 | ||
|
|
aef19d72f9 | ||
|
|
e1a661bffc | ||
|
|
560f9b15d7 | ||
|
|
452fc59d4f | ||
|
|
682cc2d82d | ||
|
|
29197736c7 | ||
|
|
e1dbd68713 | ||
|
|
0ecb865797 | ||
|
|
1ced06483e | ||
|
|
861cee33d5 | ||
|
|
6b882438b0 | ||
|
|
c570646c2d | ||
|
|
75f72578ad | ||
|
|
4dc566e13f | ||
|
|
bcfdbe3616 | ||
|
|
314b7f134d | ||
|
|
87eb4577ea | ||
|
|
7563bf43e9 | ||
|
|
ce8cfed7ff | ||
|
|
8742de9a88 | ||
|
|
9c0af2ea5b | ||
|
|
4c81c0d904 | ||
|
|
4dcdb0c79c | ||
|
|
5a646384f6 | ||
|
|
8917f1a91a | ||
|
|
d459f7289e | ||
|
|
d2c4104d30 | ||
|
|
89fabd9a89 | ||
|
|
3f7ce832ab | ||
|
|
3fdc904b18 | ||
|
|
cf471af677 | ||
|
|
2d392581e2 | ||
|
|
79a428ab8d | ||
|
|
7ed1b9b0b1 | ||
|
|
58fd8a5d87 | ||
|
|
9f8c15ed6c | ||
|
|
b94eda18ab | ||
|
|
849eb28b01 | ||
|
|
b0073d461c | ||
|
|
25d160e850 | ||
|
|
e688c865bc | ||
|
|
21e97cc65c | ||
|
|
06c1033952 | ||
|
|
8c54f68040 | ||
|
|
4c1f5c490f | ||
|
|
117735ffb9 | ||
|
|
f98e6bdac7 | ||
|
|
19d76306d3 | ||
|
|
a63a609ce1 | ||
|
|
95fce2024d | ||
|
|
f3b65015f4 | ||
|
|
5431298b0d | ||
|
|
8f651bca03 | ||
|
|
6c45e5ec19 | ||
|
|
95d394642c | ||
|
|
6a185a3d3a | ||
|
|
6ae353706d | ||
|
|
77bc72be14 | ||
|
|
0585c880de | ||
|
|
da5189e7fb | ||
|
|
5f456d8b22 | ||
|
|
a351cdd486 | ||
|
|
6e71663fd6 | ||
|
|
0b2e43cdee | ||
|
|
9cbd280f79 | ||
|
|
947be9db0f | ||
|
|
dd55f929d4 | ||
|
|
8b5399d568 | ||
|
|
1b8b0c6229 | ||
|
|
ee3081fb4c | ||
|
|
119770a038 | ||
|
|
9d61487403 | ||
|
|
56dec47561 | ||
|
|
3e793ab5b7 | ||
|
|
f6b50a67f9 | ||
|
|
cd47798d13 | ||
|
|
3b54df2cde | ||
|
|
8bf1defdc1 | ||
|
|
8845b266de | ||
|
|
786d1e4cfc | ||
|
|
bc8d65e7d3 | ||
|
|
3180c5d554 | ||
|
|
be122ca1a5 | ||
|
|
b05f6f0018 | ||
|
|
e811021806 | ||
|
|
656f4f440d | ||
|
|
7fb62de4d7 | ||
|
|
26a5325dc3 | ||
|
|
4881e0aa51 | ||
|
|
743f7c76de | ||
|
|
f8ef01f557 | ||
|
|
402fa5c2cd | ||
|
|
5ac1e847a5 | ||
|
|
0737a21e38 | ||
|
|
0c2aeae00d | ||
|
|
b6ee02f313 | ||
|
|
03369b8a6c | ||
|
|
3b2ddb1a18 | ||
|
|
1e20b12241 | ||
|
|
81c41df15c | ||
|
|
8b736189e0 | ||
|
|
188d2367df | ||
|
|
5aeac500da | ||
|
|
5730ab28ab | ||
|
|
1c56b03a28 | ||
|
|
fc1f8083ad | ||
|
|
af5e799a45 | ||
|
|
e073e91d62 | ||
|
|
da9bda0e27 | ||
|
|
0e996e4bb7 | ||
|
|
63fbbd6e0a | ||
|
|
730be65514 | ||
|
|
885b5aab41 | ||
|
|
f18ae4f99f | ||
|
|
5217f19faa | ||
|
|
296d170ba9 | ||
|
|
a97fd74399 |
84
.gitmodules
vendored
84
.gitmodules
vendored
@@ -25,9 +25,6 @@
|
||||
[submodule "vendor/grammars/Sublime-REBOL"]
|
||||
path = vendor/grammars/Sublime-REBOL
|
||||
url = https://github.com/Oldes/Sublime-REBOL
|
||||
[submodule "vendor/grammars/Sublime-Inform"]
|
||||
path = vendor/grammars/Sublime-Inform
|
||||
url = https://github.com/PogiNate/Sublime-Inform
|
||||
[submodule "vendor/grammars/autoitv3-tmbundle"]
|
||||
path = vendor/grammars/autoitv3-tmbundle
|
||||
url = https://github.com/Red-Nova-Technologies/autoitv3-tmbundle
|
||||
@@ -85,6 +82,9 @@
|
||||
[submodule "vendor/grammars/language-shellscript"]
|
||||
path = vendor/grammars/language-shellscript
|
||||
url = https://github.com/atom/language-shellscript
|
||||
[submodule "vendor/grammars/language-supercollider"]
|
||||
path = vendor/grammars/language-supercollider
|
||||
url = https://github.com/supercollider/language-supercollider
|
||||
[submodule "vendor/grammars/language-yaml"]
|
||||
path = vendor/grammars/language-yaml
|
||||
url = https://github.com/atom/language-yaml
|
||||
@@ -169,9 +169,6 @@
|
||||
[submodule "vendor/grammars/sublime-idris"]
|
||||
path = vendor/grammars/sublime-idris
|
||||
url = https://github.com/laughedelic/sublime-idris
|
||||
[submodule "vendor/grammars/sublime-better-typescript"]
|
||||
path = vendor/grammars/sublime-better-typescript
|
||||
url = https://github.com/lavrton/sublime-better-typescript
|
||||
[submodule "vendor/grammars/moonscript-tmbundle"]
|
||||
path = vendor/grammars/moonscript-tmbundle
|
||||
url = https://github.com/leafo/moonscript-tmbundle
|
||||
@@ -256,9 +253,6 @@
|
||||
[submodule "vendor/grammars/SublimeXtend"]
|
||||
path = vendor/grammars/SublimeXtend
|
||||
url = https://github.com/staltz/SublimeXtend
|
||||
[submodule "vendor/grammars/Stata.tmbundle"]
|
||||
path = vendor/grammars/Stata.tmbundle
|
||||
url = https://github.com/statatmbundle/Stata.tmbundle
|
||||
[submodule "vendor/grammars/Vala-TMBundle"]
|
||||
path = vendor/grammars/Vala-TMBundle
|
||||
url = https://github.com/technosophos/Vala-TMBundle
|
||||
@@ -397,9 +391,6 @@
|
||||
[submodule "vendor/grammars/processing.tmbundle"]
|
||||
path = vendor/grammars/processing.tmbundle
|
||||
url = https://github.com/textmate/processing.tmbundle
|
||||
[submodule "vendor/grammars/prolog.tmbundle"]
|
||||
path = vendor/grammars/prolog.tmbundle
|
||||
url = https://github.com/textmate/prolog.tmbundle
|
||||
[submodule "vendor/grammars/python-django.tmbundle"]
|
||||
path = vendor/grammars/python-django.tmbundle
|
||||
url = https://github.com/textmate/python-django.tmbundle
|
||||
@@ -629,6 +620,9 @@
|
||||
[submodule "vendor/grammars/jflex.tmbundle"]
|
||||
path = vendor/grammars/jflex.tmbundle
|
||||
url = https://github.com/jflex-de/jflex.tmbundle.git
|
||||
[submodule "vendor/grammars/Sublime-Modula-2"]
|
||||
path = vendor/grammars/Sublime-Modula-2
|
||||
url = https://github.com/harogaston/Sublime-Modula-2
|
||||
[submodule "vendor/grammars/ada.tmbundle"]
|
||||
path = vendor/grammars/ada.tmbundle
|
||||
url = https://github.com/textmate/ada.tmbundle
|
||||
@@ -647,3 +641,69 @@
|
||||
[submodule "vendor/grammars/atom-fsharp"]
|
||||
path = vendor/grammars/atom-fsharp
|
||||
url = https://github.com/fsprojects/atom-fsharp
|
||||
[submodule "vendor/grammars/SMT.tmbundle"]
|
||||
path = vendor/grammars/SMT.tmbundle
|
||||
url = https://github.com/SRI-CSL/SMT.tmbundle.git
|
||||
[submodule "vendor/grammars/language-crystal"]
|
||||
path = vendor/grammars/language-crystal
|
||||
url = https://github.com/atom-crystal/language-crystal
|
||||
[submodule "vendor/grammars/language-xbase"]
|
||||
path = vendor/grammars/language-xbase
|
||||
url = https://github.com/hernad/atom-language-harbour
|
||||
[submodule "vendor/grammars/language-ncl"]
|
||||
path = vendor/grammars/language-ncl
|
||||
url = https://github.com/rpavlick/language-ncl.git
|
||||
[submodule "vendor/grammars/atom-language-purescript"]
|
||||
path = vendor/grammars/atom-language-purescript
|
||||
url = https://github.com/purescript-contrib/atom-language-purescript
|
||||
[submodule "vendor/grammars/vue-syntax-highlight"]
|
||||
path = vendor/grammars/vue-syntax-highlight
|
||||
url = https://github.com/vuejs/vue-syntax-highlight
|
||||
[submodule "vendor/grammars/st2-zonefile"]
|
||||
path = vendor/grammars/st2-zonefile
|
||||
url = https://github.com/sixty4k/st2-zonefile
|
||||
[submodule "vendor/grammars/sublimeprolog"]
|
||||
path = vendor/grammars/sublimeprolog
|
||||
url = https://github.com/alnkpa/sublimeprolog
|
||||
[submodule "vendor/grammars/sublime-aspectj"]
|
||||
path = vendor/grammars/sublime-aspectj
|
||||
url = https://github.com/pchaigno/sublime-aspectj
|
||||
[submodule "vendor/grammars/sublime-typescript"]
|
||||
path = vendor/grammars/sublime-typescript
|
||||
url = https://github.com/Microsoft/TypeScript-Sublime-Plugin
|
||||
[submodule "vendor/grammars/sublime-pony"]
|
||||
path = vendor/grammars/sublime-pony
|
||||
url = https://github.com/CausalityLtd/sublime-pony
|
||||
[submodule "vendor/grammars/X10"]
|
||||
path = vendor/grammars/X10
|
||||
url = git@github.com:x10-lang/x10-highlighting.git
|
||||
[submodule "vendor/grammars/language-babel"]
|
||||
path = vendor/grammars/language-babel
|
||||
url = https://github.com/gandm/language-babel
|
||||
[submodule "vendor/grammars/UrWeb-Language-Definition"]
|
||||
path = vendor/grammars/UrWeb-Language-Definition
|
||||
url = https://github.com/gwalborn/UrWeb-Language-Definition.git
|
||||
[submodule "vendor/grammars/Stata.tmbundle"]
|
||||
path = vendor/grammars/Stata.tmbundle
|
||||
url = https://github.com/pschumm/Stata.tmbundle
|
||||
[submodule "vendor/grammars/FreeMarker.tmbundle"]
|
||||
path = vendor/grammars/FreeMarker.tmbundle
|
||||
url = https://github.com/freemarker/FreeMarker.tmbundle
|
||||
[submodule "vendor/grammars/MagicPython"]
|
||||
path = vendor/grammars/MagicPython
|
||||
url = git@github.com:MagicStack/MagicPython.git
|
||||
[submodule "vendor/grammars/language-click"]
|
||||
path = vendor/grammars/language-click
|
||||
url = https://github.com/stenverbois/language-click.git
|
||||
[submodule "vendor/grammars/language-maxscript"]
|
||||
path = vendor/grammars/language-maxscript
|
||||
url = https://github.com/Alhadis/language-maxscript
|
||||
[submodule "vendor/grammars/language-renpy"]
|
||||
path = vendor/grammars/language-renpy
|
||||
url = https://github.com/williamd1k0/language-renpy.git
|
||||
[submodule "vendor/grammars/language-inform7"]
|
||||
path = vendor/grammars/language-inform7
|
||||
url = https://github.com/erkyrath/language-inform7
|
||||
[submodule "vendor/grammars/atom-language-stan"]
|
||||
path = vendor/grammars/atom-language-stan
|
||||
url = git@github.com:jrnold/atom-language-stan.git
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
language: ruby
|
||||
sudo: false
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- libicu-dev
|
||||
- libicu48
|
||||
before_install: script/travis/before_install
|
||||
rvm:
|
||||
- 1.9.3
|
||||
- 2.0.0
|
||||
- 2.1
|
||||
- 2.2
|
||||
|
||||
@@ -1,10 +1,31 @@
|
||||
# Contributing
|
||||
|
||||
Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. The majority of contributions won't need to touch any Ruby code at all.
|
||||
[code-of-conduct]: http://todogroup.org/opencodeofconduct/#Linguist/opensource@github.com
|
||||
|
||||
Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to uphold this code.
|
||||
|
||||
The majority of contributions won't need to touch any Ruby code at all.
|
||||
|
||||
## Adding an extension to a language
|
||||
|
||||
We try only to add new extensions once they have some usage on GitHub. In most cases we prefer that extensions be in use in hundreds of repositories before supporting them in Linguist.
|
||||
|
||||
To add support for a new extension:
|
||||
|
||||
0. Add your extension to the language entry in [`languages.yml`][languages], keeping the extensions in alphabetical order.
|
||||
0. Add at least one sample for your extension 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.
|
||||
|
||||
In addition, if this extension is already listed in [`languages.yml`][languages] then sometimes a few more steps will need to be taken:
|
||||
|
||||
0. Make sure that example `.yourextension` files are present in the [samples directory][samples] for each language that uses `.yourextension`.
|
||||
0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files.
|
||||
0. If the Bayesian classifier does a bad job with the sample `.yourextension` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help.
|
||||
|
||||
|
||||
## Adding a language
|
||||
|
||||
We try only to add languages once they have some usage on GitHub. In most cases we prefer that languages be in use in hundreds of repositories before supporting them in Linguist.
|
||||
We try only to add languages once they have some usage on GitHub. In most cases we prefer that each new file extension be in use in hundreds of repositories before supporting them in Linguist.
|
||||
|
||||
To add support for a new language:
|
||||
|
||||
@@ -23,19 +44,21 @@ In addition, if your new language defines an extension that's already listed in
|
||||
|
||||
Remember, the goal here is to try and avoid false positives!
|
||||
|
||||
|
||||
## Fixing a misclassified language
|
||||
|
||||
Most languages are detected by their file extension defined in [languages.yml][languages]. For disambiguating between files with common extensions, linguist applies some [heuristics](/lib/linguist/heuristics.rb) and a [statistical classifier](lib/linguist/classifier.rb). This process can help differentiate between, for example, `.h` files which could be either C, C++, or Obj-C.
|
||||
|
||||
Misclassifications can often be solved by either adding a new filename or extension for the language or adding more [samples][samples] to make the classifier smarter.
|
||||
|
||||
|
||||
## Fixing syntax highlighting
|
||||
|
||||
Syntax highlighting in GitHub is performed using TextMate-compatible grammars. These are the same grammars that TextMate, Sublime Text and Atom use. Every language in [languages.yml][languages] is mapped to its corresponding TM `scope`. This scope will be used when picking up a grammar for highlighting.
|
||||
|
||||
Assuming your code is being detected as the right language, in most cases this is due to a bug in the language grammar rather than a bug in Linguist. [`grammars.yml`][grammars] lists all the grammars we use for syntax highlighting on github.com. Find the one corresponding to your code's programming language and submit a bug report upstream. If you can, try to reproduce the highlighting problem in the text editor that the grammar is designed for (TextMate, Sublime Text, or Atom) and include that information in your bug report.
|
||||
|
||||
You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](http://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com).
|
||||
You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](https://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com).
|
||||
|
||||
Once the bug has been fixed upstream, we'll pick it up for GitHub in the next release of Linguist.
|
||||
|
||||
@@ -51,9 +74,10 @@ To run the tests:
|
||||
|
||||
bundle exec rake test
|
||||
|
||||
Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away.
|
||||
Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](https://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away.
|
||||
|
||||
Here's our current build status: [](https://travis-ci.org/github/linguist)
|
||||
|
||||
Here's our current build status: [](http://travis-ci.org/github/linguist)
|
||||
|
||||
## Releasing
|
||||
|
||||
|
||||
329
HACKING.rst.txt
Normal file
329
HACKING.rst.txt
Normal file
@@ -0,0 +1,329 @@
|
||||
Contributing to SciPy
|
||||
=====================
|
||||
|
||||
This document aims to give an overview of how to contribute to SciPy. It
|
||||
tries to answer commonly asked questions, and provide some insight into how the
|
||||
community process works in practice. Readers who are familiar with the SciPy
|
||||
community and are experienced Python coders may want to jump straight to the
|
||||
`git workflow`_ documentation.
|
||||
|
||||
|
||||
Contributing new code
|
||||
---------------------
|
||||
|
||||
If you have been working with the scientific Python toolstack for a while, you
|
||||
probably have some code lying around of which you think "this could be useful
|
||||
for others too". Perhaps it's a good idea then to contribute it to SciPy or
|
||||
another open source project. The first question to ask is then, where does
|
||||
this code belong? That question is hard to answer here, so we start with a
|
||||
more specific one: *what code is suitable for putting into SciPy?*
|
||||
Almost all of the new code added to scipy has in common that it's potentially
|
||||
useful in multiple scientific domains and it fits in the scope of existing
|
||||
scipy submodules. In principle new submodules can be added too, but this is
|
||||
far less common. For code that is specific to a single application, there may
|
||||
be an existing project that can use the code. Some scikits (`scikit-learn`_,
|
||||
`scikits-image`_, `statsmodels`_, etc.) are good examples here; they have a
|
||||
narrower focus and because of that more domain-specific code than SciPy.
|
||||
|
||||
Now if you have code that you would like to see included in SciPy, how do you
|
||||
go about it? After checking that your code can be distributed in SciPy under a
|
||||
compatible license (see FAQ for details), the first step is to discuss on the
|
||||
scipy-dev mailing list. All new features, as well as changes to existing code,
|
||||
are discussed and decided on there. You can, and probably should, already
|
||||
start this discussion before your code is finished.
|
||||
|
||||
Assuming the outcome of the discussion on the mailing list is positive and you
|
||||
have a function or piece of code that does what you need it to do, what next?
|
||||
Before code is added to SciPy, it at least has to have good documentation, unit
|
||||
tests and correct code style.
|
||||
|
||||
1. Unit tests
|
||||
In principle you should aim to create unit tests that exercise all the code
|
||||
that you are adding. This gives some degree of confidence that your code
|
||||
runs correctly, also on Python versions and hardware or OSes that you don't
|
||||
have available yourself. An extensive description of how to write unit
|
||||
tests is given in the NumPy `testing guidelines`_.
|
||||
|
||||
2. Documentation
|
||||
Clear and complete documentation is essential in order for users to be able
|
||||
to find and understand the code. Documentation for individual functions
|
||||
and classes -- which includes at least a basic description, type and
|
||||
meaning of all parameters and returns values, and usage examples in
|
||||
`doctest`_ format -- is put in docstrings. Those docstrings can be read
|
||||
within the interpreter, and are compiled into a reference guide in html and
|
||||
pdf format. Higher-level documentation for key (areas of) functionality is
|
||||
provided in tutorial format and/or in module docstrings. A guide on how to
|
||||
write documentation is given in `how to document`_.
|
||||
|
||||
3. Code style
|
||||
Uniformity of style in which code is written is important to others trying
|
||||
to understand the code. SciPy follows the standard Python guidelines for
|
||||
code style, `PEP8`_. In order to check that your code conforms to PEP8,
|
||||
you can use the `pep8 package`_ style checker. Most IDEs and text editors
|
||||
have settings that can help you follow PEP8, for example by translating
|
||||
tabs by four spaces. Using `pyflakes`_ to check your code is also a good
|
||||
idea.
|
||||
|
||||
At the end of this document a checklist is given that may help to check if your
|
||||
code fulfills all requirements for inclusion in SciPy.
|
||||
|
||||
Another question you may have is: *where exactly do I put my code*? To answer
|
||||
this, it is useful to understand how the SciPy public API (application
|
||||
programming interface) is defined. For most modules the API is two levels
|
||||
deep, which means your new function should appear as
|
||||
``scipy.submodule.my_new_func``. ``my_new_func`` can be put in an existing or
|
||||
new file under ``/scipy/<submodule>/``, its name is added to the ``__all__``
|
||||
dict in that file (which lists all public functions in the file), and those
|
||||
public functions are then imported in ``/scipy/<submodule>/__init__.py``. Any
|
||||
private functions/classes should have a leading underscore (``_``) in their
|
||||
name. A more detailed description of what the public API of SciPy is, is given
|
||||
in `SciPy API`_.
|
||||
|
||||
Once you think your code is ready for inclusion in SciPy, you can send a pull
|
||||
request (PR) on Github. We won't go into the details of how to work with git
|
||||
here, this is described well in the `git workflow`_ section of the NumPy
|
||||
documentation and in the Github help pages. When you send the PR for a new
|
||||
feature, be sure to also mention this on the scipy-dev mailing list. This can
|
||||
prompt interested people to help review your PR. Assuming that you already got
|
||||
positive feedback before on the general idea of your code/feature, the purpose
|
||||
of the code review is to ensure that the code is correct, efficient and meets
|
||||
the requirements outlined above. In many cases the code review happens
|
||||
relatively quickly, but it's possible that it stalls. If you have addressed
|
||||
all feedback already given, it's perfectly fine to ask on the mailing list
|
||||
again for review (after a reasonable amount of time, say a couple of weeks, has
|
||||
passed). Once the review is completed, the PR is merged into the "master"
|
||||
branch of SciPy.
|
||||
|
||||
The above describes the requirements and process for adding code to SciPy. It
|
||||
doesn't yet answer the question though how decisions are made exactly. The
|
||||
basic answer is: decisions are made by consensus, by everyone who chooses to
|
||||
participate in the discussion on the mailing list. This includes developers,
|
||||
other users and yourself. Aiming for consensus in the discussion is important
|
||||
-- SciPy is a project by and for the scientific Python community. In those
|
||||
rare cases that agreement cannot be reached, the `maintainers`_ of the module
|
||||
in question can decide the issue.
|
||||
|
||||
|
||||
Contributing by helping maintain existing code
|
||||
----------------------------------------------
|
||||
|
||||
The previous section talked specifically about adding new functionality to
|
||||
SciPy. A large part of that discussion also applies to maintenance of existing
|
||||
code. Maintenance means fixing bugs, improving code quality or style,
|
||||
documenting existing functionality better, adding missing unit tests, keeping
|
||||
build scripts up-to-date, etc. The SciPy `Trac`_ bug tracker contains all
|
||||
reported bugs, build/documentation issues, etc. Fixing issues described in
|
||||
Trac tickets helps improve the overall quality of SciPy, and is also a good way
|
||||
of getting familiar with the project. You may also want to fix a bug because
|
||||
you ran into it and need the function in question to work correctly.
|
||||
|
||||
The discussion on code style and unit testing above applies equally to bug
|
||||
fixes. It is usually best to start by writing a unit test that shows the
|
||||
problem, i.e. it should pass but doesn't. Once you have that, you can fix the
|
||||
code so that the test does pass. That should be enough to send a PR for this
|
||||
issue. Unlike when adding new code, discussing this on the mailing list may
|
||||
not be necessary - if the old behavior of the code is clearly incorrect, no one
|
||||
will object to having it fixed. It may be necessary to add some warning or
|
||||
deprecation message for the changed behavior. This should be part of the
|
||||
review process.
|
||||
|
||||
|
||||
Other ways to contribute
|
||||
------------------------
|
||||
|
||||
There are many ways to contribute other than contributing code. Participating
|
||||
in discussions on the scipy-user and scipy-dev *mailing lists* is a contribution
|
||||
in itself. The `scipy.org`_ *website* contains a lot of information on the
|
||||
SciPy community and can always use a new pair of hands. A redesign of this
|
||||
website is ongoing, see `scipy.github.com`_. The redesigned website is a
|
||||
static site based on Sphinx, the sources for it are
|
||||
also on Github at `scipy.org-new`_.
|
||||
|
||||
The SciPy *documentation* is constantly being improved by many developers and
|
||||
users. You can contribute by sending a PR on Github that improves the
|
||||
documentation, but there's also a `documentation wiki`_ that is very convenient
|
||||
for making edits to docstrings (and doesn't require git knowledge). Anyone can
|
||||
register a username on that wiki, ask on the scipy-dev mailing list for edit
|
||||
rights and make edits. The documentation there is updated every day with the
|
||||
latest changes in the SciPy master branch, and wiki edits are regularly
|
||||
reviewed and merged into master. Another advantage of the documentation wiki
|
||||
is that you can immediately see how the reStructuredText (reST) of docstrings
|
||||
and other docs is rendered as html, so you can easily catch formatting errors.
|
||||
|
||||
Code that doesn't belong in SciPy itself or in another package but helps users
|
||||
accomplish a certain task is valuable. `SciPy Central`_ is the place to share
|
||||
this type of code (snippets, examples, plotting code, etc.).
|
||||
|
||||
|
||||
Useful links, FAQ, checklist
|
||||
----------------------------
|
||||
|
||||
Checklist before submitting a PR
|
||||
````````````````````````````````
|
||||
|
||||
- Are there unit tests with good code coverage?
|
||||
- Do all public function have docstrings including examples?
|
||||
- Is the code style correct (PEP8, pyflakes)
|
||||
- Is the new functionality tagged with ``.. versionadded:: X.Y.Z`` (with
|
||||
X.Y.Z the version number of the next release - can be found in setup.py)?
|
||||
- Is the new functionality mentioned in the release notes of the next
|
||||
release?
|
||||
- Is the new functionality added to the reference guide?
|
||||
- In case of larger additions, is there a tutorial or more extensive
|
||||
module-level description?
|
||||
- In case compiled code is added, is it integrated correctly via setup.py
|
||||
(and preferably also Bento/Numscons configuration files)?
|
||||
- If you are a first-time contributor, did you add yourself to THANKS.txt?
|
||||
Please note that this is perfectly normal and desirable - the aim is to
|
||||
give every single contributor credit, and if you don't add yourself it's
|
||||
simply extra work for the reviewer (or worse, the reviewer may forget).
|
||||
- Did you check that the code can be distributed under a BSD license?
|
||||
|
||||
|
||||
Useful SciPy documents
|
||||
``````````````````````
|
||||
|
||||
- The `how to document`_ guidelines
|
||||
- NumPy/SciPy `testing guidelines`_
|
||||
- `SciPy API`_
|
||||
- SciPy `maintainers`_
|
||||
- NumPy/SciPy `git workflow`_
|
||||
|
||||
|
||||
FAQ
|
||||
```
|
||||
|
||||
*I based my code on existing Matlab/R/... code I found online, is this OK?*
|
||||
|
||||
It depends. SciPy is distributed under a BSD license, so if the code that you
|
||||
based your code on is also BSD licensed or has a BSD-compatible license (MIT,
|
||||
Apache, ...) then it's OK. Code which is GPL-licensed, has no clear license,
|
||||
requires citation or is free for academic use only can't be included in SciPy.
|
||||
Therefore if you copied existing code with such a license or made a direct
|
||||
translation to Python of it, your code can't be included. See also `license
|
||||
compatibility`_.
|
||||
|
||||
|
||||
*How do I set up SciPy so I can edit files, run the tests and make commits?*
|
||||
|
||||
The simplest method is setting up an in-place build. To create your local git
|
||||
repo and do the in-place build::
|
||||
|
||||
$ git clone https://github.com/scipy/scipy.git scipy
|
||||
$ cd scipy
|
||||
$ python setup.py build_ext -i
|
||||
|
||||
Then you need to either set up a symlink in your site-packages or add this
|
||||
directory to your PYTHONPATH environment variable, so Python can find it. Some
|
||||
IDEs (Spyder for example) have utilities to manage PYTHONPATH. On Linux and OS
|
||||
X, you can for example edit your .bash_login file to automatically add this dir
|
||||
on startup of your terminal. Add the line::
|
||||
|
||||
export PYTHONPATH="$HOME/scipy:${PYTHONPATH}"
|
||||
|
||||
Alternatively, to set up the symlink, use (prefix only necessary if you want to
|
||||
use your local instead of global site-packages dir)::
|
||||
|
||||
$ python setupegg.py develop --prefix=${HOME}
|
||||
|
||||
To test that everything works, start the interpreter (not inside the scipy/
|
||||
source dir) and run the tests::
|
||||
|
||||
$ python
|
||||
>>> import scipy as sp
|
||||
>>> sp.test()
|
||||
|
||||
Now editing a Python source file in SciPy allows you to immediately test and
|
||||
use your changes, by simply restarting the interpreter.
|
||||
|
||||
Note that while the above procedure is the most straightforward way to get
|
||||
started, you may want to look into using Bento or numscons for faster and more
|
||||
flexible building, or virtualenv to maintain development environments for
|
||||
multiple Python versions.
|
||||
|
||||
|
||||
*How do I set up a development version of SciPy in parallel to a released
|
||||
version that I use to do my job/research?*
|
||||
|
||||
One simple way to achieve this is to install the released version in
|
||||
site-packages, by using a binary installer or pip for example, and set up the
|
||||
development version with an in-place build in a virtualenv. First install
|
||||
`virtualenv`_ and `virtualenvwrapper`_, then create your virtualenv (named
|
||||
scipy-dev here) with::
|
||||
|
||||
$ mkvirtualenv scipy-dev
|
||||
|
||||
Now, whenever you want to switch to the virtual environment, you can use the
|
||||
command ``workon scipy-dev``, while the command ``deactivate`` exits from the
|
||||
virtual environment and brings back your previous shell. With scipy-dev
|
||||
activated, follow the in-place build with the symlink install above to actually
|
||||
install your development version of SciPy.
|
||||
|
||||
|
||||
*Can I use a programming language other than Python to speed up my code?*
|
||||
|
||||
Yes. The languages used in SciPy are Python, Cython, C, C++ and Fortran. All
|
||||
of these have their pros and cons. If Python really doesn't offer enough
|
||||
performance, one of those languages can be used. Important concerns when
|
||||
using compiled languages are maintainability and portability. For
|
||||
maintainability, Cython is clearly preferred over C/C++/Fortran. Cython and C
|
||||
are more portable than C++/Fortran. A lot of the existing C and Fortran code
|
||||
in SciPy is older, battle-tested code that was only wrapped in (but not
|
||||
specifically written for) Python/SciPy. Therefore the basic advice is: use
|
||||
Cython. If there's specific reasons why C/C++/Fortran should be preferred,
|
||||
please discuss those reasons first.
|
||||
|
||||
|
||||
*There's overlap between Trac and Github, which do I use for what?*
|
||||
|
||||
Trac_ is the bug tracker, Github_ the code repository. Before the SciPy code
|
||||
repository moved to Github, the preferred way to contribute code was to create
|
||||
a patch and attach it to a Trac ticket. The overhead of this approach is much
|
||||
larger than sending a PR on Github, so please don't do this anymore. Use Trac
|
||||
for bug reports, Github for patches.
|
||||
|
||||
|
||||
.. _scikit-learn: http://scikit-learn.org
|
||||
|
||||
.. _scikits-image: http://scikits-image.org/
|
||||
|
||||
.. _statsmodels: http://statsmodels.sourceforge.net/
|
||||
|
||||
.. _testing guidelines: https://github.com/numpy/numpy/blob/master/doc/TESTS.rst.txt
|
||||
|
||||
.. _how to document: https://github.com/numpy/numpy/blob/master/doc/HOWTO_DOCUMENT.rst.txt
|
||||
|
||||
.. _PEP8: http://www.python.org/dev/peps/pep-0008/
|
||||
|
||||
.. _pep8 package: http://pypi.python.org/pypi/pep8
|
||||
|
||||
.. _pyflakes: http://pypi.python.org/pypi/pyflakes
|
||||
|
||||
.. _SciPy API: http://docs.scipy.org/doc/scipy/reference/api.html
|
||||
|
||||
.. _git workflow: http://docs.scipy.org/doc/numpy/dev/gitwash/index.html
|
||||
|
||||
.. _maintainers: https://github.com/scipy/scipy/blob/master/doc/MAINTAINERS.rst.txt
|
||||
|
||||
.. _Trac: http://projects.scipy.org/scipy/timeline
|
||||
|
||||
.. _Github: https://github.com/scipy/scipy
|
||||
|
||||
.. _scipy.org: http://scipy.org/
|
||||
|
||||
.. _scipy.github.com: http://scipy.github.com/
|
||||
|
||||
.. _scipy.org-new: https://github.com/scipy/scipy.org-new
|
||||
|
||||
.. _documentation wiki: http://docs.scipy.org/scipy/Front%20Page/
|
||||
|
||||
.. _SciPy Central: http://scipy-central.org/
|
||||
|
||||
.. _license compatibility: http://www.scipy.org/License_Compatibility
|
||||
|
||||
.. _doctest: http://www.doughellmann.com/PyMOTW/doctest/
|
||||
|
||||
.. _virtualenv: http://www.virtualenv.org/
|
||||
|
||||
.. _virtualenvwrapper: http://www.doughellmann.com/projects/virtualenvwrapper/
|
||||
|
||||
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2011-2015 GitHub, Inc.
|
||||
Copyright (c) 2011-2016 GitHub, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
|
||||
10
README.md
10
README.md
@@ -13,11 +13,11 @@ See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md
|
||||
|
||||

|
||||
|
||||
The Language stats bar is built by aggregating the languages of each file in that repository. If it is reporting a language that you don't expect:
|
||||
The Language stats bar displays languages percentages for the files in the repository. The percentages are calculated based on the bytes of code for each language as reported by the [List Languages](https://developer.github.com/v3/repos/#list-languages) API. If the bar is reporting a language that you don't expect:
|
||||
|
||||
0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language.
|
||||
0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
|
||||
0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you an add, especially links to public repositories, is helpful.
|
||||
0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them.
|
||||
0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you can add, especially links to public repositories, is helpful.
|
||||
0. If there are no reported issues of this misclassification, [open an issue][new-issue] and include a link to the repository or a sample of the code that is being misclassified.
|
||||
|
||||
## Overrides
|
||||
@@ -33,9 +33,9 @@ $ cat .gitattributes
|
||||
*.rb linguist-language=Java
|
||||
```
|
||||
|
||||
Checking code you didn't write, such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language. By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. Vendored files are also hidden by default in diffs on github.com.
|
||||
Checking code you didn't write, such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language. By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository.
|
||||
|
||||
Use the `linguist-vendored` attribute to vendor or un-vendor paths. Please note, overriding the vendored (or un-vendored) status of a file only affects the language statistics for the repository and not the behavior in diffs on github.com.
|
||||
Use the `linguist-vendored` attribute to vendor or un-vendor paths.
|
||||
|
||||
```
|
||||
$ cat .gitattributes
|
||||
|
||||
2
Rakefile
2
Rakefile
@@ -62,7 +62,7 @@ namespace :benchmark do
|
||||
|
||||
corpus = File.expand_path(ENV["CORPUS"] || "samples")
|
||||
|
||||
require 'linguist/language'
|
||||
require 'linguist'
|
||||
|
||||
results = Hash.new
|
||||
Dir.glob("#{corpus}/**/*").each do |file|
|
||||
|
||||
138
bin/git-linguist
Executable file
138
bin/git-linguist
Executable file
@@ -0,0 +1,138 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'linguist'
|
||||
require 'rugged'
|
||||
require 'optparse'
|
||||
require 'json'
|
||||
require 'tmpdir'
|
||||
require 'zlib'
|
||||
|
||||
class GitLinguist
|
||||
def initialize(path, commit_oid, incremental = true)
|
||||
@repo_path = path
|
||||
@commit_oid = commit_oid
|
||||
@incremental = incremental
|
||||
end
|
||||
|
||||
def linguist
|
||||
if @commit_oid.nil?
|
||||
raise "git-linguist must be called with a specific commit OID to perform language computation"
|
||||
end
|
||||
repo = Linguist::Repository.new(rugged, @commit_oid)
|
||||
|
||||
if @incremental && stats = load_language_stats
|
||||
old_commit_oid, old_stats = stats
|
||||
|
||||
# A cache with NULL oid means that we want to froze
|
||||
# these language stats in place and stop computing
|
||||
# them (for performance reasons)
|
||||
return old_stats if old_commit_oid == NULL_OID
|
||||
repo.load_existing_stats(old_commit_oid, old_stats)
|
||||
end
|
||||
|
||||
result = yield repo
|
||||
|
||||
save_language_stats(@commit_oid, repo.cache)
|
||||
result
|
||||
end
|
||||
|
||||
def load_language_stats
|
||||
version, oid, stats = load_cache
|
||||
if version == LANGUAGE_STATS_CACHE_VERSION && oid && stats
|
||||
[oid, stats]
|
||||
end
|
||||
end
|
||||
|
||||
def save_language_stats(oid, stats)
|
||||
cache = [LANGUAGE_STATS_CACHE_VERSION, oid, stats]
|
||||
write_cache(cache)
|
||||
end
|
||||
|
||||
def clear_language_stats
|
||||
File.unlink(cache_file)
|
||||
rescue Errno::ENOENT
|
||||
end
|
||||
|
||||
def disable_language_stats
|
||||
save_language_stats(NULL_OID, {})
|
||||
end
|
||||
|
||||
protected
|
||||
NULL_OID = ("0" * 40).freeze
|
||||
|
||||
LANGUAGE_STATS_CACHE = 'language-stats.cache'
|
||||
LANGUAGE_STATS_CACHE_VERSION = "v3:#{Linguist::VERSION}"
|
||||
|
||||
def rugged
|
||||
@rugged ||= Rugged::Repository.bare(@repo_path)
|
||||
end
|
||||
|
||||
def cache_file
|
||||
File.join(@repo_path, LANGUAGE_STATS_CACHE)
|
||||
end
|
||||
|
||||
def write_cache(object)
|
||||
return unless File.directory? @repo_path
|
||||
|
||||
begin
|
||||
tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil)
|
||||
File.open(tmp_path, "wb") do |f|
|
||||
marshal = Marshal.dump(object)
|
||||
f.write(Zlib::Deflate.deflate(marshal))
|
||||
end
|
||||
|
||||
File.rename(tmp_path, cache_file)
|
||||
rescue => e
|
||||
(File.unlink(tmp_path) rescue nil)
|
||||
raise e
|
||||
end
|
||||
end
|
||||
|
||||
def load_cache
|
||||
marshal = File.open(cache_file, "rb") { |f| Zlib::Inflate.inflate(f.read) }
|
||||
Marshal.load(marshal)
|
||||
rescue SystemCallError, ::Zlib::DataError, ::Zlib::BufError, TypeError
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
def git_linguist(args)
|
||||
incremental = true
|
||||
commit = nil
|
||||
|
||||
parser = OptionParser.new do |opts|
|
||||
opts.banner = "Usage: git-linguist [OPTIONS] stats|breakdown|dump-cache|clear|disable"
|
||||
|
||||
opts.on("-f", "--force", "Force a full rescan") { incremental = false }
|
||||
opts.on("--commit=COMMIT", "Commit to index") { |v| commit = v}
|
||||
end
|
||||
|
||||
parser.parse!(args)
|
||||
|
||||
git_dir = `git rev-parse --git-dir`.strip
|
||||
raise "git-linguist must be ran in a Git repository" unless $?.success?
|
||||
wrapper = GitLinguist.new(git_dir, commit, incremental)
|
||||
|
||||
case args.pop
|
||||
when "stats"
|
||||
wrapper.linguist do |linguist|
|
||||
puts JSON.dump(linguist.languages)
|
||||
end
|
||||
when "breakdown"
|
||||
wrapper.linguist do |linguist|
|
||||
puts JSON.dump(linguist.breakdown_by_file)
|
||||
end
|
||||
when "dump-cache"
|
||||
puts JSON.dump(wrapper.load_language_stats)
|
||||
when "clear"
|
||||
wrapper.clear_language_stats
|
||||
when "disable"
|
||||
wrapper.disable_language_stats
|
||||
else
|
||||
$stderr.print(parser.help)
|
||||
exit 1
|
||||
end
|
||||
end
|
||||
|
||||
git_linguist(ARGV)
|
||||
@@ -10,13 +10,13 @@ Gem::Specification.new do |s|
|
||||
s.homepage = "https://github.com/github/linguist"
|
||||
s.license = "MIT"
|
||||
|
||||
s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb']
|
||||
s.executables << 'linguist'
|
||||
s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + ['LICENSE']
|
||||
s.executables = ['linguist', 'git-linguist']
|
||||
|
||||
s.add_dependency 'charlock_holmes', '~> 0.7.3'
|
||||
s.add_dependency 'escape_utils', '~> 1.1.0'
|
||||
s.add_dependency 'mime-types', '>= 1.19'
|
||||
s.add_dependency 'rugged', '~> 0.23.0b1'
|
||||
s.add_dependency 'rugged', '>= 0.23.0b'
|
||||
|
||||
s.add_development_dependency 'minitest', '>= 5.0'
|
||||
s.add_development_dependency 'mocha'
|
||||
@@ -24,4 +24,6 @@ Gem::Specification.new do |s|
|
||||
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'
|
||||
|
||||
end
|
||||
|
||||
68
grammars.yml
68
grammars.yml
@@ -42,6 +42,8 @@ vendor/grammars/Docker.tmbundle:
|
||||
- source.dockerfile
|
||||
vendor/grammars/Elm.tmLanguage:
|
||||
- source.elm
|
||||
vendor/grammars/FreeMarker.tmbundle:
|
||||
- text.html.ftl
|
||||
vendor/grammars/G-Code/:
|
||||
- source.LS
|
||||
- source.MCPOST
|
||||
@@ -67,6 +69,9 @@ vendor/grammars/Lean.tmbundle:
|
||||
- source.lean
|
||||
vendor/grammars/LiveScript.tmbundle:
|
||||
- source.livescript
|
||||
vendor/grammars/MagicPython:
|
||||
- source.python
|
||||
- source.regexp.python
|
||||
vendor/grammars/Modelica/:
|
||||
- source.modelica
|
||||
vendor/grammars/NSIS:
|
||||
@@ -85,12 +90,14 @@ vendor/grammars/Racket:
|
||||
- source.racket
|
||||
vendor/grammars/SCSS.tmbundle:
|
||||
- source.scss
|
||||
vendor/grammars/SMT.tmbundle:
|
||||
- source.smt
|
||||
vendor/grammars/Scalate.tmbundle:
|
||||
- source.scaml
|
||||
- text.html.ssp
|
||||
vendor/grammars/Slash.tmbundle:
|
||||
- text.html.slash
|
||||
vendor/grammars/Stata.tmbundle:
|
||||
vendor/grammars/Stata.tmbundle/:
|
||||
- source.mata
|
||||
- source.stata
|
||||
vendor/grammars/Stylus/:
|
||||
@@ -99,14 +106,14 @@ vendor/grammars/Sublime-Coq:
|
||||
- source.coq
|
||||
vendor/grammars/Sublime-HTTP:
|
||||
- source.httpspec
|
||||
vendor/grammars/Sublime-Inform:
|
||||
- source.Inform7
|
||||
vendor/grammars/Sublime-Lasso:
|
||||
- file.lasso
|
||||
vendor/grammars/Sublime-Logos:
|
||||
- source.logos
|
||||
vendor/grammars/Sublime-Loom:
|
||||
- source.loomscript
|
||||
vendor/grammars/Sublime-Modula-2/:
|
||||
- source.modula2
|
||||
vendor/grammars/Sublime-Nit:
|
||||
- source.nit
|
||||
vendor/grammars/Sublime-QML:
|
||||
@@ -119,6 +126,7 @@ vendor/grammars/Sublime-SQF-Language:
|
||||
- source.sqf
|
||||
vendor/grammars/Sublime-Text-2-OpenEdge-ABL:
|
||||
- source.abl
|
||||
- text.html.abl
|
||||
vendor/grammars/Sublime-VimL:
|
||||
- source.viml
|
||||
vendor/grammars/SublimeBrainfuck:
|
||||
@@ -135,10 +143,14 @@ vendor/grammars/TXL/:
|
||||
- source.txl
|
||||
vendor/grammars/Textmate-Gosu-Bundle:
|
||||
- source.gosu.2
|
||||
vendor/grammars/UrWeb-Language-Definition:
|
||||
- source.ur
|
||||
vendor/grammars/VBDotNetSyntax:
|
||||
- source.vbnet
|
||||
vendor/grammars/Vala-TMBundle:
|
||||
- source.vala
|
||||
vendor/grammars/X10:
|
||||
- source.x10
|
||||
vendor/grammars/abap.tmbundle:
|
||||
- source.abap
|
||||
vendor/grammars/actionscript3-tmbundle:
|
||||
@@ -171,6 +183,13 @@ vendor/grammars/assembly.tmbundle:
|
||||
- source.x86asm
|
||||
vendor/grammars/atom-fsharp/:
|
||||
- source.fsharp
|
||||
- source.fsharp.fsi
|
||||
- source.fsharp.fsl
|
||||
- source.fsharp.fsx
|
||||
vendor/grammars/atom-language-purescript/:
|
||||
- source.purescript
|
||||
vendor/grammars/atom-language-stan/:
|
||||
- source.stan
|
||||
vendor/grammars/atom-salt:
|
||||
- source.python.salt
|
||||
- source.yaml.salt
|
||||
@@ -288,8 +307,8 @@ vendor/grammars/io.tmbundle:
|
||||
vendor/grammars/ioke-outdated:
|
||||
- source.ioke
|
||||
vendor/grammars/jade-tmbundle:
|
||||
- source.jade
|
||||
- source.pyjade
|
||||
- text.jade
|
||||
vendor/grammars/jasmin-sublime:
|
||||
- source.jasmin
|
||||
vendor/grammars/java.tmbundle:
|
||||
@@ -305,12 +324,20 @@ vendor/grammars/json.tmbundle:
|
||||
- source.json
|
||||
vendor/grammars/kotlin-sublime-package:
|
||||
- source.Kotlin
|
||||
vendor/grammars/language-babel/:
|
||||
- source.js.jsx
|
||||
- source.regexp.babel
|
||||
vendor/grammars/language-click/:
|
||||
- source.click
|
||||
vendor/grammars/language-clojure:
|
||||
- source.clojure
|
||||
vendor/grammars/language-coffee-script:
|
||||
- source.coffee
|
||||
- source.litcoffee
|
||||
vendor/grammars/language-crystal:
|
||||
- source.crystal
|
||||
vendor/grammars/language-csharp:
|
||||
- source.cake
|
||||
- source.cs
|
||||
- source.csx
|
||||
- source.nant-build
|
||||
@@ -318,20 +345,31 @@ vendor/grammars/language-gfm:
|
||||
- source.gfm
|
||||
vendor/grammars/language-hy:
|
||||
- source.hy
|
||||
vendor/grammars/language-inform7:
|
||||
- source.inform7
|
||||
vendor/grammars/language-javascript:
|
||||
- source.js
|
||||
- source.js.regexp
|
||||
- source.js.regexp.replacement
|
||||
vendor/grammars/language-jsoniq/:
|
||||
- source.jq
|
||||
- source.xq
|
||||
vendor/grammars/language-maxscript:
|
||||
- source.maxscript
|
||||
vendor/grammars/language-ncl:
|
||||
- source.ncl
|
||||
vendor/grammars/language-python:
|
||||
- source.python
|
||||
- source.regexp.python
|
||||
- text.python.console
|
||||
- text.python.traceback
|
||||
vendor/grammars/language-renpy:
|
||||
- source.renpy
|
||||
vendor/grammars/language-shellscript:
|
||||
- source.shell
|
||||
- text.shell-session
|
||||
vendor/grammars/language-supercollider:
|
||||
- source.supercollider
|
||||
vendor/grammars/language-xbase:
|
||||
- source.harbour
|
||||
vendor/grammars/language-yaml:
|
||||
- source.yaml
|
||||
vendor/grammars/latex.tmbundle:
|
||||
@@ -417,8 +455,6 @@ vendor/grammars/powershell:
|
||||
- source.powershell
|
||||
vendor/grammars/processing.tmbundle:
|
||||
- source.processing
|
||||
vendor/grammars/prolog.tmbundle:
|
||||
- source.prolog
|
||||
vendor/grammars/protobuf-tmbundle:
|
||||
- source.protobuf
|
||||
vendor/grammars/puppet-textmate-bundle:
|
||||
@@ -456,6 +492,8 @@ vendor/grammars/smalltalk-tmbundle:
|
||||
- source.smalltalk
|
||||
vendor/grammars/sql.tmbundle:
|
||||
- source.sql
|
||||
vendor/grammars/st2-zonefile:
|
||||
- text.zone_file
|
||||
vendor/grammars/standard-ml.tmbundle:
|
||||
- source.cm
|
||||
- source.ml
|
||||
@@ -463,10 +501,10 @@ vendor/grammars/sublime-MuPAD:
|
||||
- source.mupad
|
||||
vendor/grammars/sublime-apl/:
|
||||
- source.apl
|
||||
vendor/grammars/sublime-aspectj/:
|
||||
- source.aspectj
|
||||
vendor/grammars/sublime-befunge:
|
||||
- source.befunge
|
||||
vendor/grammars/sublime-better-typescript:
|
||||
- source.ts
|
||||
vendor/grammars/sublime-bsv:
|
||||
- source.bsv
|
||||
vendor/grammars/sublime-cirru:
|
||||
@@ -490,6 +528,8 @@ vendor/grammars/sublime-nix:
|
||||
vendor/grammars/sublime-opal/:
|
||||
- source.opal
|
||||
- source.opalsysdefs
|
||||
vendor/grammars/sublime-pony:
|
||||
- source.pony
|
||||
vendor/grammars/sublime-robot-plugin:
|
||||
- text.robot
|
||||
vendor/grammars/sublime-rust:
|
||||
@@ -505,6 +545,9 @@ vendor/grammars/sublime-text-ox/:
|
||||
- source.ox
|
||||
vendor/grammars/sublime-text-pig-latin/:
|
||||
- source.pig_latin
|
||||
vendor/grammars/sublime-typescript/:
|
||||
- source.ts
|
||||
- source.tsx
|
||||
vendor/grammars/sublime-varnish:
|
||||
- source.varnish.vcl
|
||||
vendor/grammars/sublime_cobol:
|
||||
@@ -515,6 +558,9 @@ vendor/grammars/sublime_cobol:
|
||||
vendor/grammars/sublime_man_page_support:
|
||||
- source.man
|
||||
- text.groff
|
||||
vendor/grammars/sublimeprolog/:
|
||||
- source.prolog
|
||||
- source.prolog.eclipse
|
||||
vendor/grammars/sublimetext-cuda-cpp:
|
||||
- source.cuda-c++
|
||||
vendor/grammars/swift.tmbundle:
|
||||
@@ -531,6 +577,8 @@ vendor/grammars/turtle.tmbundle:
|
||||
- source.turtle
|
||||
vendor/grammars/verilog.tmbundle:
|
||||
- source.verilog
|
||||
vendor/grammars/vue-syntax-highlight:
|
||||
- text.html.vue
|
||||
vendor/grammars/x86-assembly-textmate-bundle:
|
||||
- source.asm.x86
|
||||
vendor/grammars/xc.tmbundle/:
|
||||
|
||||
@@ -13,8 +13,8 @@ class << Linguist
|
||||
def instrument(*args, &bk)
|
||||
if instrumenter
|
||||
instrumenter.instrument(*args, &bk)
|
||||
else
|
||||
yield if block_given?
|
||||
elsif block_given?
|
||||
yield
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
73
lib/linguist/blob.rb
Normal file
73
lib/linguist/blob.rb
Normal file
@@ -0,0 +1,73 @@
|
||||
require 'linguist/blob_helper'
|
||||
|
||||
module Linguist
|
||||
# A Blob is a wrapper around the content of a file to make it quack
|
||||
# like a Grit::Blob. It provides the basic interface: `name`,
|
||||
# `data`, `path` and `size`.
|
||||
class Blob
|
||||
include BlobHelper
|
||||
|
||||
# Public: Initialize a new Blob.
|
||||
#
|
||||
# path - A path String (does not necessarily exists on the file system).
|
||||
# content - Content of the file.
|
||||
#
|
||||
# Returns a Blob.
|
||||
def initialize(path, content)
|
||||
@path = path
|
||||
@content = content
|
||||
end
|
||||
|
||||
# Public: Filename
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# Blob.new("/path/to/linguist/lib/linguist.rb", "").path
|
||||
# # => "/path/to/linguist/lib/linguist.rb"
|
||||
#
|
||||
# Returns a String
|
||||
attr_reader :path
|
||||
|
||||
# Public: File name
|
||||
#
|
||||
# Returns a String
|
||||
def name
|
||||
File.basename(@path)
|
||||
end
|
||||
|
||||
# Public: File contents.
|
||||
#
|
||||
# Returns a String.
|
||||
def data
|
||||
@content
|
||||
end
|
||||
|
||||
# Public: Get byte size
|
||||
#
|
||||
# Returns an Integer.
|
||||
def size
|
||||
@content.bytesize
|
||||
end
|
||||
|
||||
# Public: Get file extension.
|
||||
#
|
||||
# Returns a String.
|
||||
def extension
|
||||
extensions.last || ""
|
||||
end
|
||||
|
||||
# Public: Return an array of the file extensions
|
||||
#
|
||||
# >> Linguist::Blob.new("app/views/things/index.html.erb").extensions
|
||||
# => [".html.erb", ".erb"]
|
||||
#
|
||||
# Returns an Array
|
||||
def extensions
|
||||
basename, *segments = name.downcase.split(".")
|
||||
|
||||
segments.map.with_index do |segment, index|
|
||||
"." + segments[index..-1].join(".")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -13,11 +13,18 @@
|
||||
- (^|/)[Dd]ocumentation/
|
||||
- (^|/)javadoc/
|
||||
- ^man/
|
||||
- ^[Ee]xamples/
|
||||
|
||||
## Documentation files ##
|
||||
|
||||
- (^|/)CHANGE(S|LOG)?(\.|$)
|
||||
- (^|/)CONTRIBUTING(\.|$)
|
||||
- (^|/)COPYING(\.|$)
|
||||
- (^|/)INSTALL(\.|$)
|
||||
- (^|/)LICEN[CS]E(\.|$)
|
||||
- (^|/)[Ll]icen[cs]e(\.|$)
|
||||
- (^|/)README(\.|$)
|
||||
- (^|/)[Rr]eadme(\.|$)
|
||||
|
||||
# Samples folders
|
||||
- ^[Ss]amples/
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
require 'linguist/blob_helper'
|
||||
require 'linguist/blob'
|
||||
|
||||
module Linguist
|
||||
# A FileBlob is a wrapper around a File object to make it quack
|
||||
# like a Grit::Blob. It provides the basic interface: `name`,
|
||||
# `data`, `path` and `size`.
|
||||
class FileBlob
|
||||
class FileBlob < Blob
|
||||
include BlobHelper
|
||||
|
||||
# Public: Initialize a new FileBlob from a path
|
||||
@@ -18,20 +19,6 @@ module Linguist
|
||||
@path = base_path ? path.sub("#{base_path}/", '') : path
|
||||
end
|
||||
|
||||
# Public: Filename
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# FileBlob.new("/path/to/linguist/lib/linguist.rb").path
|
||||
# # => "/path/to/linguist/lib/linguist.rb"
|
||||
#
|
||||
# FileBlob.new("/path/to/linguist/lib/linguist.rb",
|
||||
# "/path/to/linguist").path
|
||||
# # => "lib/linguist.rb"
|
||||
#
|
||||
# Returns a String
|
||||
attr_reader :path
|
||||
|
||||
# Public: Read file permissions
|
||||
#
|
||||
# Returns a String like '100644'
|
||||
@@ -39,13 +26,6 @@ module Linguist
|
||||
File.stat(@fullpath).mode.to_s(8)
|
||||
end
|
||||
|
||||
# Public: File name
|
||||
#
|
||||
# Returns a String
|
||||
def name
|
||||
File.basename(@fullpath)
|
||||
end
|
||||
|
||||
# Public: Read file contents.
|
||||
#
|
||||
# Returns a String.
|
||||
@@ -59,26 +39,5 @@ module Linguist
|
||||
def size
|
||||
File.size(@fullpath)
|
||||
end
|
||||
|
||||
# Public: Get file extension.
|
||||
#
|
||||
# Returns a String.
|
||||
def extension
|
||||
extensions.last || ""
|
||||
end
|
||||
|
||||
# Public: Return an array of the file extensions
|
||||
#
|
||||
# >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions
|
||||
# => [".html.erb", ".erb"]
|
||||
#
|
||||
# Returns an Array
|
||||
def extensions
|
||||
basename, *segments = name.downcase.split(".")
|
||||
|
||||
segments.map.with_index do |segment, index|
|
||||
"." + segments[index..-1].join(".")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -69,8 +69,10 @@ module Linguist
|
||||
generated_protocol_buffer? ||
|
||||
generated_apache_thrift? ||
|
||||
generated_jni_header? ||
|
||||
vcr_cassette? ||
|
||||
generated_module? ||
|
||||
generated_unity3d_meta? ||
|
||||
vcr_cassette?
|
||||
generated_racc?
|
||||
end
|
||||
|
||||
# Internal: Is the blob an Xcode file?
|
||||
@@ -240,22 +242,26 @@ module Linguist
|
||||
return lines[0].include?("Code generated by")
|
||||
end
|
||||
|
||||
PROTOBUF_EXTENSIONS = ['.py', '.java', '.h', '.cc', '.cpp']
|
||||
|
||||
# Internal: Is the blob a C++, Java or Python source file generated by the
|
||||
# Protocol Buffer compiler?
|
||||
#
|
||||
# Returns true of false.
|
||||
def generated_protocol_buffer?
|
||||
return false unless ['.py', '.java', '.h', '.cc', '.cpp'].include?(extname)
|
||||
return false unless PROTOBUF_EXTENSIONS.include?(extname)
|
||||
return false unless lines.count > 1
|
||||
|
||||
return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!")
|
||||
end
|
||||
|
||||
APACHE_THRIFT_EXTENSIONS = ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp']
|
||||
|
||||
# Internal: Is the blob generated by Apache Thrift compiler?
|
||||
#
|
||||
# Returns true or false
|
||||
def generated_apache_thrift?
|
||||
return false unless ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'].include?(extname)
|
||||
return false unless APACHE_THRIFT_EXTENSIONS.include?(extname)
|
||||
return false unless lines.count > 1
|
||||
|
||||
return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler")
|
||||
@@ -324,6 +330,24 @@ module Linguist
|
||||
return lines[0].include?("Generated by Cython")
|
||||
end
|
||||
|
||||
# Internal: Is it a KiCAD or GFortran module file?
|
||||
#
|
||||
# KiCAD module files contain:
|
||||
# PCBNEW-LibModule-V1 yyyy-mm-dd h:mm:ss XM
|
||||
# on the first line.
|
||||
#
|
||||
# GFortran module files contain:
|
||||
# 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") ||
|
||||
lines[0].include?("GFORTRAN module version '")
|
||||
end
|
||||
|
||||
# Internal: Is this a metadata file from Unity3D?
|
||||
#
|
||||
# Unity3D Meta files start with:
|
||||
@@ -336,5 +360,18 @@ module Linguist
|
||||
return false unless lines.count > 1
|
||||
return lines[0].include?("fileFormatVersion: ")
|
||||
end
|
||||
|
||||
# Internal: Is this a Racc-generated file?
|
||||
#
|
||||
# A Racc-generated file contains:
|
||||
# # This file is automatically generated by Racc x.y.z
|
||||
# on the third line.
|
||||
#
|
||||
# Return true or false
|
||||
def generated_racc?
|
||||
return false unless extname == '.rb'
|
||||
return false unless lines.count > 2
|
||||
return lines[2].start_with?("# This file is automatically generated by Racc")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,11 +13,14 @@ module Linguist
|
||||
# ])
|
||||
#
|
||||
# Returns an Array of languages, or empty if none matched or were inconclusive.
|
||||
def self.call(blob, languages)
|
||||
def self.call(blob, candidates)
|
||||
data = blob.data
|
||||
|
||||
@heuristics.each do |heuristic|
|
||||
return Array(heuristic.call(data)) if heuristic.matches?(languages)
|
||||
if heuristic.matches?(blob.name)
|
||||
languages = Array(heuristic.call(data))
|
||||
return languages if languages.any? || languages.all? { |l| candidates.include?(l) }
|
||||
end
|
||||
end
|
||||
|
||||
[] # No heuristics matched
|
||||
@@ -30,7 +33,7 @@ module Linguist
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# disambiguate "Perl", "Prolog" do |data|
|
||||
# disambiguate ".pm" do |data|
|
||||
# if data.include?("use strict")
|
||||
# Language["Perl"]
|
||||
# elsif /^[^#]+:-/.match(data)
|
||||
@@ -38,22 +41,23 @@ module Linguist
|
||||
# end
|
||||
# end
|
||||
#
|
||||
def self.disambiguate(*languages, &heuristic)
|
||||
@heuristics << new(languages, &heuristic)
|
||||
def self.disambiguate(*extensions, &heuristic)
|
||||
@heuristics << new(extensions, &heuristic)
|
||||
end
|
||||
|
||||
# Internal: Array of defined heuristics
|
||||
@heuristics = []
|
||||
|
||||
# Internal
|
||||
def initialize(languages, &heuristic)
|
||||
@languages = languages
|
||||
def initialize(extensions, &heuristic)
|
||||
@extensions = extensions
|
||||
@heuristic = heuristic
|
||||
end
|
||||
|
||||
# Internal: Check if this heuristic matches the candidate languages.
|
||||
def matches?(candidates)
|
||||
candidates.any? && candidates.all? { |l| @languages.include?(l.name) }
|
||||
def matches?(filename)
|
||||
filename = filename.downcase
|
||||
@extensions.any? { |ext| filename.end_with?(ext) }
|
||||
end
|
||||
|
||||
# Internal: Perform the heuristic
|
||||
@@ -62,99 +66,9 @@ module Linguist
|
||||
end
|
||||
|
||||
# Common heuristics
|
||||
ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronised|selector|implementation)\b/
|
||||
ObjectiveCRegex = /^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])/
|
||||
|
||||
disambiguate "BitBake", "BlitzBasic" do |data|
|
||||
if /^\s*; /.match(data) || data.include?("End Function")
|
||||
Language["BlitzBasic"]
|
||||
elsif /^\s*(# |include|require)\b/.match(data)
|
||||
Language["BitBake"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "C#", "Smalltalk" do |data|
|
||||
if /![\w\s]+methodsFor: /.match(data)
|
||||
Language["Smalltalk"]
|
||||
elsif /^\s*namespace\s*[\w\.]+\s*{/.match(data) || /^\s*\/\//.match(data)
|
||||
Language["C#"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Objective-C", "C++", "C" do |data|
|
||||
if ObjectiveCRegex.match(data)
|
||||
Language["Objective-C"]
|
||||
elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) ||
|
||||
/^\s*template\s*</.match(data) || /^[ \t]*try/.match(data) || /^[ \t]*catch\s*\(/.match(data) || /^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+/.match(data) || /^[ \t]*(private|public|protected):$/.match(data) || /std::\w+/.match(data))
|
||||
Language["C++"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Perl", "Perl6", "Prolog" do |data|
|
||||
if data.include?("use v6")
|
||||
Language["Perl6"]
|
||||
elsif data.match(/use strict|use\s+v?5\./)
|
||||
Language["Perl"]
|
||||
elsif /^[^#]+:-/.match(data)
|
||||
Language["Prolog"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "ECL", "Prolog" do |data|
|
||||
if /^[^#]+:-/.match(data)
|
||||
Language["Prolog"]
|
||||
elsif data.include?(":=")
|
||||
Language["ECL"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "IDL", "Prolog", "INI", "QMake" do |data|
|
||||
if /^[^#]+:-/.match(data)
|
||||
Language["Prolog"]
|
||||
elsif data.include?("last_client=")
|
||||
Language["INI"]
|
||||
elsif data.include?("HEADERS") && data.include?("SOURCES")
|
||||
Language["QMake"]
|
||||
elsif /^\s*function[ \w,]+$/.match(data)
|
||||
Language["IDL"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "GAP", "Scilab" do |data|
|
||||
if (data.include?("gap> "))
|
||||
Language["GAP"]
|
||||
# Heads up - we don't usually write heuristics like this (with no regex match)
|
||||
else
|
||||
Language["Scilab"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Common Lisp", "OpenCL", "Cool" do |data|
|
||||
if /^\s*\((defun|in-package|defpackage) /i.match(data)
|
||||
Language["Common Lisp"]
|
||||
elsif /^class/x.match(data)
|
||||
Language["Cool"]
|
||||
elsif /\/\* |\/\/ |^\}/.match(data)
|
||||
Language["OpenCL"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Hack", "PHP" do |data|
|
||||
if data.include?("<?hh")
|
||||
Language["Hack"]
|
||||
elsif /<?[^h]/.match(data)
|
||||
Language["PHP"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Scala", "SuperCollider" do |data|
|
||||
if /\^(this|super)\./.match(data) || /^\s*(\+|\*)\s*\w+\s*{/.match(data) || /^\s*~\w+\s*=\./.match(data)
|
||||
Language["SuperCollider"]
|
||||
elsif /^\s*import (scala|java)\./.match(data) || /^\s*val\s+\w+\s*=/.match(data) || /^\s*class\b/.match(data)
|
||||
Language["Scala"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "AsciiDoc", "AGS Script", "Public Key" do |data|
|
||||
disambiguate ".asc" do |data|
|
||||
if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data)
|
||||
Language["Public Key"]
|
||||
elsif /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data)
|
||||
@@ -164,15 +78,75 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "FORTRAN", "Forth", "Formatted" do |data|
|
||||
disambiguate ".bb" do |data|
|
||||
if /^\s*; /.match(data) || data.include?("End Function")
|
||||
Language["BlitzBasic"]
|
||||
elsif /^\s*(# |include|require)\b/.match(data)
|
||||
Language["BitBake"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".ch" do |data|
|
||||
if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data)
|
||||
Language["xBase"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".cl" do |data|
|
||||
if /^\s*\((defun|in-package|defpackage) /i.match(data)
|
||||
Language["Common Lisp"]
|
||||
elsif /^class/x.match(data)
|
||||
Language["Cool"]
|
||||
elsif /\/\* |\/\/ |^\}/.match(data)
|
||||
Language["OpenCL"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".cs" do |data|
|
||||
if /![\w\s]+methodsFor: /.match(data)
|
||||
Language["Smalltalk"]
|
||||
elsif /^\s*namespace\s*[\w\.]+\s*{/.match(data) || /^\s*\/\//.match(data)
|
||||
Language["C#"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".d" do |data|
|
||||
if /^module /.match(data)
|
||||
Language["D"]
|
||||
elsif /^((dtrace:::)?BEGIN|provider |#pragma (D (option|attributes)|ident)\s)/.match(data)
|
||||
Language["DTrace"]
|
||||
elsif /(\/.*:( .* \\)$| : \\$|^ : |: \\$)/.match(data)
|
||||
Language["Makefile"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".ecl" do |data|
|
||||
if /^[^#]+:-/.match(data)
|
||||
Language["ECLiPSe"]
|
||||
elsif data.include?(":=")
|
||||
Language["ECL"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".for", ".f" do |data|
|
||||
if /^: /.match(data)
|
||||
Language["Forth"]
|
||||
elsif /^([c*][^a-z]| (subroutine|program)\s|\s*!)/i.match(data)
|
||||
elsif /^([c*][^abd-z]| (subroutine|program|end)\s|\s*!)/i.match(data)
|
||||
Language["FORTRAN"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "F#", "Forth", "GLSL", "Filterscript" do |data|
|
||||
disambiguate ".fr" do |data|
|
||||
if /^(: |also |new-device|previous )/.match(data)
|
||||
Language["Forth"]
|
||||
elsif /^\s*(import|module|package|data|type) /.match(data)
|
||||
Language["Frege"]
|
||||
else
|
||||
Language["Text"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".fs" do |data|
|
||||
if /^(: |new-device)/.match(data)
|
||||
Language["Forth"]
|
||||
elsif /^\s*(#light|import|let|module|namespace|open|type)/.match(data)
|
||||
@@ -184,7 +158,48 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Limbo", "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data|
|
||||
disambiguate ".gs" do |data|
|
||||
Language["Gosu"] if /^uses java\./.match(data)
|
||||
end
|
||||
|
||||
disambiguate ".h" do |data|
|
||||
if ObjectiveCRegex.match(data)
|
||||
Language["Objective-C"]
|
||||
elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) ||
|
||||
/^\s*template\s*</.match(data) || /^[ \t]*try/.match(data) || /^[ \t]*catch\s*\(/.match(data) || /^[ \t]*(class|(using[ \t]+)?namespace)\s+\w+/.match(data) || /^[ \t]*(private|public|protected):$/.match(data) || /std::\w+/.match(data))
|
||||
Language["C++"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".l" do |data|
|
||||
if /\(def(un|macro)\s/.match(data)
|
||||
Language["Common Lisp"]
|
||||
elsif /^(%[%{}]xs|<.*>)/.match(data)
|
||||
Language["Lex"]
|
||||
elsif /^\.[a-z][a-z](\s|$)/i.match(data)
|
||||
Language["Groff"]
|
||||
elsif /^\((de|class|rel|code|data|must)\s/.match(data)
|
||||
Language["PicoLisp"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".ls" do |data|
|
||||
if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data)
|
||||
Language["LoomScript"]
|
||||
else
|
||||
Language["LiveScript"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".lsp", ".lisp" do |data|
|
||||
if /^\s*\((defun|in-package|defpackage) /i.match(data)
|
||||
Language["Common Lisp"]
|
||||
elsif /^\s*\(define /.match(data)
|
||||
Language["NewLisp"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".m" do |data|
|
||||
if ObjectiveCRegex.match(data)
|
||||
Language["Objective-C"]
|
||||
elsif data.include?(":- module")
|
||||
@@ -202,45 +217,119 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Gosu", "JavaScript" do |data|
|
||||
Language["Gosu"] if /^uses java\./.match(data)
|
||||
end
|
||||
|
||||
disambiguate "LoomScript", "LiveScript" do |data|
|
||||
if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data)
|
||||
Language["LoomScript"]
|
||||
else
|
||||
Language["LiveScript"]
|
||||
disambiguate ".ml" do |data|
|
||||
if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data)
|
||||
Language["OCaml"]
|
||||
elsif /=> |case\s+(\S+\s)+of/.match(data)
|
||||
Language["Standard ML"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Common Lisp", "NewLisp" do |data|
|
||||
if /^\s*\((defun|in-package|defpackage) /i.match(data)
|
||||
Language["Common Lisp"]
|
||||
elsif /^\s*\(define /.match(data)
|
||||
Language["NewLisp"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "TypeScript", "XML" do |data|
|
||||
if data.include?("<TS ")
|
||||
disambiguate ".mod" do |data|
|
||||
if data.include?('<!ENTITY ')
|
||||
Language["XML"]
|
||||
elsif /MODULE\s\w+\s*;/i.match(data) || /^\s*END \w+;$/i.match(data)
|
||||
Language["Modula-2"]
|
||||
else
|
||||
Language["TypeScript"]
|
||||
[Language["Linux Kernel Module"], Language["AMPL"]]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Frege", "Forth", "Text" do |data|
|
||||
if /^(: |also |new-device|previous )/.match(data)
|
||||
Language["Forth"]
|
||||
elsif /^\s*(import|module|package|data|type) /.match(data)
|
||||
Language["Frege"]
|
||||
disambiguate ".ms" do |data|
|
||||
if /^[.'][a-z][a-z](\s|$)/i.match(data)
|
||||
Language["Groff"]
|
||||
elsif /(?<!\S)\.(include|globa?l)\s/.match(data) || /(?<!\/\*)(\A|\n)\s*\.[A-Za-z]/.match(data.gsub(/"([^\\"]|\\.)*"|'([^\\']|\\.)*'|\\\s*(?:--.*)?\n/, ""))
|
||||
Language["GAS"]
|
||||
else
|
||||
Language["MAXScript"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".n" do |data|
|
||||
if /^[.']/.match(data)
|
||||
Language["Groff"]
|
||||
elsif /^(module|namespace|using)\s/.match(data)
|
||||
Language["Nemerle"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".ncl" do |data|
|
||||
if data.include?("THE_TITLE")
|
||||
Language["Text"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "PLSQL", "SQLPL", "PLpgSQL", "SQL" do |data|
|
||||
disambiguate ".nl" do |data|
|
||||
if /^(b|g)[0-9]+ /.match(data)
|
||||
Language["NL"]
|
||||
else
|
||||
Language["NewLisp"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".php" do |data|
|
||||
if data.include?("<?hh")
|
||||
Language["Hack"]
|
||||
elsif /<?[^h]/.match(data)
|
||||
Language["PHP"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".pl" do |data|
|
||||
if /^[^#]+:-/.match(data)
|
||||
Language["Prolog"]
|
||||
elsif /use strict|use\s+v?5\./.match(data)
|
||||
Language["Perl"]
|
||||
elsif /^(use v6|(my )?class|module)/.match(data)
|
||||
Language["Perl6"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".pm", ".t" do |data|
|
||||
if /use strict|use\s+v?5\./.match(data)
|
||||
Language["Perl"]
|
||||
elsif /^(use v6|(my )?class|module)/.match(data)
|
||||
Language["Perl6"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".pro" do |data|
|
||||
if /^[^#]+:-/.match(data)
|
||||
Language["Prolog"]
|
||||
elsif data.include?("last_client=")
|
||||
Language["INI"]
|
||||
elsif data.include?("HEADERS") && data.include?("SOURCES")
|
||||
Language["QMake"]
|
||||
elsif /^\s*function[ \w,]+$/.match(data)
|
||||
Language["IDL"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".r" do |data|
|
||||
if /\bRebol\b/i.match(data)
|
||||
Language["Rebol"]
|
||||
elsif data.include?("<-")
|
||||
Language["R"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".rs" do |data|
|
||||
if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data)
|
||||
Language["Rust"]
|
||||
elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data)
|
||||
Language["RenderScript"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate ".sc" do |data|
|
||||
if /\^(this|super)\./.match(data) || /^\s*(\+|\*)\s*\w+\s*{/.match(data) || /^\s*~\w+\s*=\./.match(data)
|
||||
Language["SuperCollider"]
|
||||
elsif /^\s*import (scala|java)\./.match(data) || /^\s*val\s+\w+\s*=/.match(data) || /^\s*class\b/.match(data)
|
||||
Language["Scala"]
|
||||
end
|
||||
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)
|
||||
#Postgres
|
||||
Language["PLpgSQL"]
|
||||
@@ -256,65 +345,20 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "D", "DTrace", "Makefile" do |data|
|
||||
if /^module /.match(data)
|
||||
Language["D"]
|
||||
elsif /^((dtrace:::)?BEGIN|provider |#pragma (D (option|attributes)|ident)\s)/.match(data)
|
||||
Language["DTrace"]
|
||||
elsif /(\/.*:( .* \\)$| : \\$|^ : |: \\$)/.match(data)
|
||||
Language["Makefile"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "OCaml", "Standard ML" do |data|
|
||||
if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data)
|
||||
Language["OCaml"]
|
||||
elsif /=> |case\s+(\S+\s)+of/.match(data)
|
||||
Language["Standard ML"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "NL", "NewLisp" do |data|
|
||||
if /^(b|g)[0-9]+ /.match(data)
|
||||
Language["NL"]
|
||||
disambiguate ".ts" do |data|
|
||||
if data.include?("<TS ")
|
||||
Language["XML"]
|
||||
else
|
||||
Language["NewLisp"]
|
||||
Language["TypeScript"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Rust", "RenderScript" do |data|
|
||||
if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data)
|
||||
Language["Rust"]
|
||||
elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data)
|
||||
Language["RenderScript"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Common Lisp", "Lex", "Groff", "PicoLisp" do |data|
|
||||
if /\(def(un|macro)\s/.match(data)
|
||||
Language["Common Lisp"]
|
||||
elsif /^(%[%{}]xs|<.*>)/.match(data)
|
||||
Language["Lex"]
|
||||
elsif /^\.[a-z][a-z](\s|$)/i.match(data)
|
||||
Language["Groff"]
|
||||
elsif /^\((de|class|rel|code|data|must)\s/.match(data)
|
||||
Language["PicoLisp"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "Groff", "Nemerle" do |data|
|
||||
if /^[.']/.match(data)
|
||||
Language["Groff"]
|
||||
elsif /^(module|namespace|using)\s/.match(data)
|
||||
Language["Nemerle"]
|
||||
end
|
||||
end
|
||||
|
||||
disambiguate "GAS", "Groff" do |data|
|
||||
if /^[.'][a-z][a-z](\s|$)/i.match(data)
|
||||
Language["Groff"]
|
||||
elsif /((^|\s)move?[. ])|\.(include|globa?l)\s/.match(data)
|
||||
Language["GAS"]
|
||||
disambiguate ".tst" do |data|
|
||||
if (data.include?("gap> "))
|
||||
Language["GAP"]
|
||||
# Heads up - we don't usually write heuristics like this (with no regex match)
|
||||
else
|
||||
Language["Scilab"]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -150,7 +150,8 @@ module Linguist
|
||||
#
|
||||
# Returns the Language or nil if none was found.
|
||||
def self.find_by_name(name)
|
||||
name && @name_index[name.downcase]
|
||||
return nil if name.to_s.empty?
|
||||
name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase])
|
||||
end
|
||||
|
||||
# Public: Look up Language by one of its aliases.
|
||||
@@ -164,7 +165,8 @@ module Linguist
|
||||
#
|
||||
# Returns the Language or nil if none was found.
|
||||
def self.find_by_alias(name)
|
||||
name && @alias_index[name.downcase]
|
||||
return nil if name.to_s.empty?
|
||||
name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase])
|
||||
end
|
||||
|
||||
# Public: Look up Languages by filename.
|
||||
@@ -240,7 +242,8 @@ module Linguist
|
||||
#
|
||||
# Returns the Language or nil if none was found.
|
||||
def self.[](name)
|
||||
name && @index[name.downcase]
|
||||
return nil if name.to_s.empty?
|
||||
name && (@index[name.downcase] || @index[name.split(',').first.downcase])
|
||||
end
|
||||
|
||||
# Public: A List of popular languages
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
# Use "text" if a mode does not exist.
|
||||
# wrap - Boolean wrap to enable line wrapping (default: false)
|
||||
# extensions - An Array of associated extensions (the first one is
|
||||
# considered the primary extension)
|
||||
# considered the primary extension, the others should be
|
||||
# listed alphabetically)
|
||||
# interpreters - An Array of associated interpreters
|
||||
# searchable - Boolean flag to enable searching (defaults to true)
|
||||
# search_term - Deprecated: Some languages maybe indexed under a
|
||||
@@ -49,6 +50,7 @@ AMPL:
|
||||
color: "#E6EFBB"
|
||||
extensions:
|
||||
- .ampl
|
||||
- .mod
|
||||
tm_scope: source.ampl
|
||||
ace_mode: text
|
||||
|
||||
@@ -140,7 +142,7 @@ Agda:
|
||||
|
||||
Alloy:
|
||||
type: programming # 'modeling' would be more appropiate
|
||||
color: "#cc5c24"
|
||||
color: "#64C800"
|
||||
extensions:
|
||||
- .als
|
||||
ace_mode: text
|
||||
@@ -213,7 +215,7 @@ AspectJ:
|
||||
color: "#a957b0"
|
||||
extensions:
|
||||
- .aj
|
||||
tm_scope: none
|
||||
tm_scope: source.aspectj
|
||||
ace_mode: text
|
||||
|
||||
Assembly:
|
||||
@@ -225,6 +227,7 @@ Assembly:
|
||||
extensions:
|
||||
- .asm
|
||||
- .a51
|
||||
- .inc
|
||||
- .nasm
|
||||
tm_scope: source.asm.x86
|
||||
ace_mode: assembly_x86
|
||||
@@ -390,6 +393,7 @@ C#:
|
||||
- csharp
|
||||
extensions:
|
||||
- .cs
|
||||
- .cake
|
||||
- .cshtml
|
||||
- .csx
|
||||
|
||||
@@ -411,6 +415,7 @@ C++:
|
||||
- .hh
|
||||
- .hpp
|
||||
- .hxx
|
||||
- .inc
|
||||
- .inl
|
||||
- .ipp
|
||||
- .tcc
|
||||
@@ -498,6 +503,13 @@ Chapel:
|
||||
- .chpl
|
||||
ace_mode: text
|
||||
|
||||
Charity:
|
||||
type: programming
|
||||
extensions:
|
||||
- .ch
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
ChucK:
|
||||
type: programming
|
||||
extensions:
|
||||
@@ -529,6 +541,14 @@ Clean:
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
Click:
|
||||
type: programming
|
||||
color: "#E4E6F3"
|
||||
extensions:
|
||||
- .click
|
||||
tm_scope: source.click
|
||||
ace_mode: text
|
||||
|
||||
Clojure:
|
||||
type: programming
|
||||
ace_mode: clojure
|
||||
@@ -557,6 +577,7 @@ CoffeeScript:
|
||||
extensions:
|
||||
- .coffee
|
||||
- ._coffee
|
||||
- .cake
|
||||
- .cjsx
|
||||
- .cson
|
||||
- .iced
|
||||
@@ -606,6 +627,7 @@ Common Lisp:
|
||||
- .lsp
|
||||
- .ny
|
||||
- .podsl
|
||||
- .sexp
|
||||
interpreters:
|
||||
- lisp
|
||||
- sbcl
|
||||
@@ -667,7 +689,7 @@ Crystal:
|
||||
extensions:
|
||||
- .cr
|
||||
ace_mode: ruby
|
||||
tm_scope: source.ruby
|
||||
tm_scope: source.crystal
|
||||
interpreters:
|
||||
- crystal
|
||||
|
||||
@@ -708,7 +730,7 @@ Cython:
|
||||
|
||||
D:
|
||||
type: programming
|
||||
color: "#fcd46d"
|
||||
color: "#ba595e"
|
||||
extensions:
|
||||
- .d
|
||||
- .di
|
||||
@@ -740,6 +762,14 @@ DM:
|
||||
tm_scope: source.c++
|
||||
ace_mode: c_cpp
|
||||
|
||||
DNS Zone:
|
||||
type: data
|
||||
extensions:
|
||||
- .zone
|
||||
- .arpa
|
||||
tm_scope: text.zone_file
|
||||
ace_mode: text
|
||||
|
||||
DTrace:
|
||||
type: programming
|
||||
aliases:
|
||||
@@ -824,6 +854,14 @@ ECL:
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
ECLiPSe:
|
||||
type: programming
|
||||
group: prolog
|
||||
extensions:
|
||||
- .ecl
|
||||
tm_scope: source.prolog.eclipse
|
||||
ace_mode: prolog
|
||||
|
||||
Eagle:
|
||||
type: markup
|
||||
color: "#814C05"
|
||||
@@ -857,6 +895,8 @@ Elixir:
|
||||
ace_mode: elixir
|
||||
filenames:
|
||||
- mix.lock
|
||||
interpreters:
|
||||
- elixir
|
||||
|
||||
Elm:
|
||||
type: programming
|
||||
@@ -984,6 +1024,7 @@ Formatted:
|
||||
type: data
|
||||
extensions:
|
||||
- .for
|
||||
- .eam.fs
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
@@ -1001,6 +1042,16 @@ Forth:
|
||||
- .fs
|
||||
ace_mode: forth
|
||||
|
||||
FreeMarker:
|
||||
type: programming
|
||||
color: "#0050b2"
|
||||
aliases:
|
||||
- ftl
|
||||
extensions:
|
||||
- .ftl
|
||||
tm_scope: text.html.ftl
|
||||
ace_mode: ftl
|
||||
|
||||
Frege:
|
||||
type: programming
|
||||
color: "#00cafe"
|
||||
@@ -1258,6 +1309,14 @@ Groovy Server Pages:
|
||||
tm_scope: text.html.jsp
|
||||
ace_mode: jsp
|
||||
|
||||
HCL:
|
||||
type: programming
|
||||
extensions:
|
||||
- .hcl
|
||||
- .tf
|
||||
ace_mode: ruby
|
||||
tm_scope: source.ruby
|
||||
|
||||
HTML:
|
||||
type: markup
|
||||
tm_scope: text.html.basic
|
||||
@@ -1269,6 +1328,7 @@ HTML:
|
||||
- .html
|
||||
- .htm
|
||||
- .html.hl
|
||||
- .inc
|
||||
- .st
|
||||
- .xht
|
||||
- .xhtml
|
||||
@@ -1281,11 +1341,22 @@ HTML+Django:
|
||||
- .mustache
|
||||
- .jinja
|
||||
aliases:
|
||||
- django
|
||||
- html+django/jinja
|
||||
- html+jinja
|
||||
- htmldjango
|
||||
ace_mode: django
|
||||
|
||||
HTML+EEX:
|
||||
type: markup
|
||||
tm_scope: text.html.elixir
|
||||
group: HTML
|
||||
aliases:
|
||||
- eex
|
||||
extensions:
|
||||
- .eex
|
||||
ace_mode: text
|
||||
|
||||
HTML+ERB:
|
||||
type: markup
|
||||
tm_scope: text.html.erb
|
||||
@@ -1295,7 +1366,7 @@ HTML+ERB:
|
||||
extensions:
|
||||
- .erb
|
||||
- .erb.deface
|
||||
ace_mode: html_ruby
|
||||
ace_mode: text
|
||||
|
||||
HTML+PHP:
|
||||
type: markup
|
||||
@@ -1331,6 +1402,7 @@ Haml:
|
||||
Handlebars:
|
||||
type: markup
|
||||
color: "#01a9d6"
|
||||
group: HTML
|
||||
aliases:
|
||||
- hbs
|
||||
- htmlbars
|
||||
@@ -1345,7 +1417,7 @@ Harbour:
|
||||
color: "#0e60e3"
|
||||
extensions:
|
||||
- .hb
|
||||
tm_scope: none
|
||||
tm_scope: source.harbour
|
||||
ace_mode: text
|
||||
|
||||
Haskell:
|
||||
@@ -1359,7 +1431,7 @@ Haskell:
|
||||
Haxe:
|
||||
type: programming
|
||||
ace_mode: haxe
|
||||
color: "#f7941e"
|
||||
color: "#df7900"
|
||||
extensions:
|
||||
- .hx
|
||||
- .hxsl
|
||||
@@ -1438,7 +1510,7 @@ Inform 7:
|
||||
extensions:
|
||||
- .ni
|
||||
- .i7x
|
||||
tm_scope: source.Inform7
|
||||
tm_scope: source.inform7
|
||||
aliases:
|
||||
- i7
|
||||
- inform7
|
||||
@@ -1475,6 +1547,14 @@ Isabelle:
|
||||
tm_scope: source.isabelle.theory
|
||||
ace_mode: text
|
||||
|
||||
Isabelle ROOT:
|
||||
type: programming
|
||||
group: Isabelle
|
||||
filenames:
|
||||
- ROOT
|
||||
tm_scope: source.isabelle.root
|
||||
ace_mode: text
|
||||
|
||||
J:
|
||||
type: programming
|
||||
color: "#9EEDFF"
|
||||
@@ -1501,7 +1581,9 @@ JSON:
|
||||
searchable: false
|
||||
extensions:
|
||||
- .json
|
||||
- .geojson
|
||||
- .lock
|
||||
- .topojson
|
||||
filenames:
|
||||
- .jshintrc
|
||||
- composer.lock
|
||||
@@ -1529,12 +1611,20 @@ JSONiq:
|
||||
- .jq
|
||||
tm_scope: source.jq
|
||||
|
||||
JSX:
|
||||
type: programming
|
||||
group: JavaScript
|
||||
extensions:
|
||||
- .jsx
|
||||
tm_scope: source.js.jsx
|
||||
ace_mode: javascript
|
||||
|
||||
Jade:
|
||||
group: HTML
|
||||
type: markup
|
||||
extensions:
|
||||
- .jade
|
||||
tm_scope: source.jade
|
||||
tm_scope: text.jade
|
||||
ace_mode: jade
|
||||
|
||||
Jasmin:
|
||||
@@ -1579,10 +1669,10 @@ JavaScript:
|
||||
- .gs
|
||||
- .jake
|
||||
- .jsb
|
||||
- .jscad
|
||||
- .jsfl
|
||||
- .jsm
|
||||
- .jss
|
||||
- .jsx
|
||||
- .njs
|
||||
- .pac
|
||||
- .sjs
|
||||
@@ -1614,6 +1704,18 @@ Julia:
|
||||
color: "#a270ba"
|
||||
ace_mode: julia
|
||||
|
||||
Jupyter Notebook:
|
||||
type: markup
|
||||
ace_mode: json
|
||||
tm_scope: source.json
|
||||
color: "#DA5B0B"
|
||||
extensions:
|
||||
- .ipynb
|
||||
filenames:
|
||||
- Notebook
|
||||
aliases:
|
||||
- IPython Notebook
|
||||
|
||||
KRL:
|
||||
type: programming
|
||||
color: "#28431f"
|
||||
@@ -1626,6 +1728,8 @@ KiCad:
|
||||
type: programming
|
||||
extensions:
|
||||
- .sch
|
||||
- .brd
|
||||
- .kicad_pcb
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
@@ -1638,7 +1742,7 @@ Kit:
|
||||
|
||||
Kotlin:
|
||||
type: programming
|
||||
color: "#EA4DFA"
|
||||
color: "#F18E33"
|
||||
extensions:
|
||||
- .kt
|
||||
- .ktm
|
||||
@@ -1674,6 +1778,7 @@ LSL:
|
||||
ace_mode: lsl
|
||||
extensions:
|
||||
- .lsl
|
||||
- .lslp
|
||||
interpreters:
|
||||
- lsl
|
||||
color: '#3d9970'
|
||||
@@ -1682,8 +1787,8 @@ LabVIEW:
|
||||
type: programming
|
||||
extensions:
|
||||
- .lvproj
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
tm_scope: text.xml
|
||||
ace_mode: xml
|
||||
|
||||
Lasso:
|
||||
type: programming
|
||||
@@ -1759,6 +1864,13 @@ Linker Script:
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
Linux Kernel Module:
|
||||
type: data
|
||||
extensions:
|
||||
- .mod
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
Liquid:
|
||||
type: markup
|
||||
extensions:
|
||||
@@ -1866,6 +1978,15 @@ M:
|
||||
tm_scope: source.lisp
|
||||
ace_mode: lisp
|
||||
|
||||
MAXScript:
|
||||
type: programming
|
||||
color: "#00a6a6"
|
||||
extensions:
|
||||
- .ms
|
||||
- .mcr
|
||||
tm_scope: source.maxscript
|
||||
ace_mode: text
|
||||
|
||||
MTML:
|
||||
type: markup
|
||||
color: "#b7e1f4"
|
||||
@@ -1898,6 +2019,7 @@ Makefile:
|
||||
- GNUmakefile
|
||||
- Kbuild
|
||||
- Makefile
|
||||
- Makefile.inc
|
||||
- makefile
|
||||
interpreters:
|
||||
- make
|
||||
@@ -1939,6 +2061,7 @@ Mathematica:
|
||||
- .cdf
|
||||
- .m
|
||||
- .ma
|
||||
- .mt
|
||||
- .nb
|
||||
- .nbp
|
||||
- .wl
|
||||
@@ -1950,6 +2073,8 @@ Mathematica:
|
||||
Matlab:
|
||||
type: programming
|
||||
color: "#bb92ac"
|
||||
aliases:
|
||||
- octave
|
||||
extensions:
|
||||
- .matlab
|
||||
- .m
|
||||
@@ -1983,6 +2108,7 @@ MediaWiki:
|
||||
wrap: true
|
||||
extensions:
|
||||
- .mediawiki
|
||||
- .wiki
|
||||
tm_scope: text.html.mediawiki
|
||||
ace_mode: text
|
||||
|
||||
@@ -1998,6 +2124,14 @@ Mercury:
|
||||
tm_scope: source.mercury
|
||||
ace_mode: prolog
|
||||
|
||||
Metal:
|
||||
type: programming
|
||||
color: "#8f14e9"
|
||||
extensions:
|
||||
- .metal
|
||||
tm_scope: source.c++
|
||||
ace_mode: c_cpp
|
||||
|
||||
MiniD: # Legacy
|
||||
type: programming
|
||||
searchable: false
|
||||
@@ -2025,6 +2159,13 @@ Modelica:
|
||||
tm_scope: source.modelica
|
||||
ace_mode: text
|
||||
|
||||
Modula-2:
|
||||
type: programming
|
||||
extensions:
|
||||
- .mod
|
||||
tm_scope: source.modula2
|
||||
ace_mode: text
|
||||
|
||||
Module Management System:
|
||||
type: programming
|
||||
extensions:
|
||||
@@ -2064,6 +2205,14 @@ Myghty:
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
NCL:
|
||||
type: programming
|
||||
color: "#28431f"
|
||||
extensions:
|
||||
- .ncl
|
||||
tm_scope: source.ncl
|
||||
ace_mode: text
|
||||
|
||||
NL:
|
||||
type: data
|
||||
extensions:
|
||||
@@ -2357,9 +2506,11 @@ PHP:
|
||||
- .aw
|
||||
- .ctp
|
||||
- .fcgi
|
||||
- .inc
|
||||
- .php3
|
||||
- .php4
|
||||
- .php5
|
||||
- .phps
|
||||
- .phpt
|
||||
filenames:
|
||||
- Phakefile
|
||||
@@ -2373,8 +2524,10 @@ PLSQL:
|
||||
type: programming
|
||||
ace_mode: sql
|
||||
tm_scope: source.plsql.oracle
|
||||
color: "#dad8d8"
|
||||
extensions:
|
||||
- .pls
|
||||
- .pck
|
||||
- .pkb
|
||||
- .pks
|
||||
- .plb
|
||||
@@ -2444,6 +2597,7 @@ Pascal:
|
||||
- .pas
|
||||
- .dfm
|
||||
- .dpr
|
||||
- .inc
|
||||
- .lpr
|
||||
- .pp
|
||||
ace_mode: pascal
|
||||
@@ -2490,6 +2644,13 @@ Perl6:
|
||||
tm_scope: source.perl.6
|
||||
ace_mode: perl
|
||||
|
||||
Pickle:
|
||||
type: data
|
||||
extensions:
|
||||
- .pkl
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
PicoLisp:
|
||||
type: programming
|
||||
extensions:
|
||||
@@ -2534,6 +2695,13 @@ PogoScript:
|
||||
tm_scope: source.pogoscript
|
||||
ace_mode: text
|
||||
|
||||
Pony:
|
||||
type: programming
|
||||
extensions:
|
||||
- .pony
|
||||
tm_scope: source.pony
|
||||
ace_mode: text
|
||||
|
||||
PostScript:
|
||||
type: markup
|
||||
extensions:
|
||||
@@ -2566,11 +2734,11 @@ Prolog:
|
||||
color: "#74283c"
|
||||
extensions:
|
||||
- .pl
|
||||
- .ecl
|
||||
- .pro
|
||||
- .prolog
|
||||
interpreters:
|
||||
- swipl
|
||||
tm_scope: source.prolog
|
||||
ace_mode: prolog
|
||||
|
||||
Propeller Spin:
|
||||
@@ -2601,7 +2769,7 @@ Public Key:
|
||||
|
||||
Puppet:
|
||||
type: programming
|
||||
color: "#332A77"
|
||||
color: "#302B6D"
|
||||
extensions:
|
||||
- .pp
|
||||
filenames:
|
||||
@@ -2630,7 +2798,7 @@ PureScript:
|
||||
color: "#1D222D"
|
||||
extensions:
|
||||
- .purs
|
||||
tm_scope: source.haskell
|
||||
tm_scope: source.purescript
|
||||
ace_mode: haskell
|
||||
|
||||
Python:
|
||||
@@ -2708,7 +2876,7 @@ R:
|
||||
ace_mode: r
|
||||
|
||||
RAML:
|
||||
type: data
|
||||
type: markup
|
||||
ace_mode: yaml
|
||||
tm_scope: source.yaml
|
||||
color: "#77d9fb"
|
||||
@@ -2751,7 +2919,7 @@ RMarkdown:
|
||||
ace_mode: markdown
|
||||
extensions:
|
||||
- .rmd
|
||||
tm_scope: none
|
||||
tm_scope: source.gfm
|
||||
|
||||
Racket:
|
||||
type: programming
|
||||
@@ -2768,7 +2936,7 @@ Racket:
|
||||
|
||||
Ragel in Ruby Host:
|
||||
type: programming
|
||||
color: "#e17600"
|
||||
color: "#9d5200"
|
||||
extensions:
|
||||
- .rl
|
||||
aliases:
|
||||
@@ -2817,6 +2985,17 @@ Redcode:
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
Ren'Py:
|
||||
type: programming
|
||||
group: Python
|
||||
aliases:
|
||||
- renpy
|
||||
color: "#ff7f7f"
|
||||
extensions:
|
||||
- .rpy
|
||||
tm_scope: source.renpy
|
||||
ace_mode: python
|
||||
|
||||
RenderScript:
|
||||
type: programming
|
||||
extensions:
|
||||
@@ -2881,6 +3060,7 @@ Ruby:
|
||||
- .pryrc
|
||||
- Appraisals
|
||||
- Berksfile
|
||||
- Brewfile
|
||||
- Buildfile
|
||||
- Deliverfile
|
||||
- Fastfile
|
||||
@@ -2901,6 +3081,7 @@ Rust:
|
||||
color: "#dea584"
|
||||
extensions:
|
||||
- .rs
|
||||
- .rs.in
|
||||
ace_mode: rust
|
||||
|
||||
SAS:
|
||||
@@ -2919,6 +3100,25 @@ SCSS:
|
||||
extensions:
|
||||
- .scss
|
||||
|
||||
SMT:
|
||||
type: programming
|
||||
extensions:
|
||||
- .smt2
|
||||
- .smt
|
||||
interpreters:
|
||||
- boolector
|
||||
- cvc4
|
||||
- mathsat5
|
||||
- opensmt
|
||||
- smtinterpol
|
||||
- smt-rat
|
||||
- stp
|
||||
- verit
|
||||
- yices2
|
||||
- z3
|
||||
tm_scope: source.smt
|
||||
ace_mode: text
|
||||
|
||||
SPARQL:
|
||||
type: data
|
||||
tm_scope: source.sparql
|
||||
@@ -2944,6 +3144,7 @@ SQL:
|
||||
- .sql
|
||||
- .cql
|
||||
- .ddl
|
||||
- .inc
|
||||
- .prc
|
||||
- .tab
|
||||
- .udf
|
||||
@@ -3004,7 +3205,7 @@ Sass:
|
||||
Scala:
|
||||
type: programming
|
||||
ace_mode: scala
|
||||
color: "#7dd3b0"
|
||||
color: "#DC322F"
|
||||
extensions:
|
||||
- .scala
|
||||
- .sbt
|
||||
@@ -3109,6 +3310,7 @@ Slim:
|
||||
color: "#ff8f77"
|
||||
extensions:
|
||||
- .slim
|
||||
tm_scope: text.slim
|
||||
ace_mode: text
|
||||
|
||||
Smali:
|
||||
@@ -3142,6 +3344,7 @@ SourcePawn:
|
||||
- sourcemod
|
||||
extensions:
|
||||
- .sp
|
||||
- .inc
|
||||
- .sma
|
||||
tm_scope: source.sp
|
||||
ace_mode: text
|
||||
@@ -3154,6 +3357,14 @@ Squirrel:
|
||||
tm_scope: source.c++
|
||||
ace_mode: c_cpp
|
||||
|
||||
Stan:
|
||||
type: programming
|
||||
color: "#b2011d"
|
||||
extensions:
|
||||
- .stan
|
||||
ace_mode: text
|
||||
tm_scope: source.stan
|
||||
|
||||
Standard ML:
|
||||
type: programming
|
||||
color: "#dc566d"
|
||||
@@ -3191,9 +3402,12 @@ SuperCollider:
|
||||
type: programming
|
||||
color: "#46390b"
|
||||
extensions:
|
||||
- .scd
|
||||
- .sc
|
||||
tm_scope: none
|
||||
- .scd
|
||||
interpreters:
|
||||
- sclang
|
||||
- scsynth
|
||||
tm_scope: source.supercollider
|
||||
ace_mode: text
|
||||
|
||||
Swift:
|
||||
@@ -3286,6 +3500,7 @@ Text:
|
||||
extensions:
|
||||
- .txt
|
||||
- .fr
|
||||
- .ncl
|
||||
tm_scope: none
|
||||
ace_mode: text
|
||||
|
||||
@@ -3335,6 +3550,7 @@ TypeScript:
|
||||
- ts
|
||||
extensions:
|
||||
- .ts
|
||||
- .tsx
|
||||
tm_scope: source.ts
|
||||
ace_mode: typescript
|
||||
|
||||
@@ -3368,6 +3584,17 @@ UnrealScript:
|
||||
tm_scope: source.java
|
||||
ace_mode: java
|
||||
|
||||
UrWeb:
|
||||
type: programming
|
||||
aliases:
|
||||
- Ur/Web
|
||||
- Ur
|
||||
extensions:
|
||||
- .ur
|
||||
- .urs
|
||||
tm_scope: source.ur
|
||||
ace_mode: text
|
||||
|
||||
VCL:
|
||||
group: Perl
|
||||
type: programming
|
||||
@@ -3450,6 +3677,14 @@ Volt:
|
||||
tm_scope: source.d
|
||||
ace_mode: d
|
||||
|
||||
Vue:
|
||||
type: markup
|
||||
color: "#2c3e50"
|
||||
extensions:
|
||||
- .vue
|
||||
tm_scope: text.html.vue
|
||||
ace_mode: html
|
||||
|
||||
Web Ontology Language:
|
||||
type: markup
|
||||
color: "#9cc9dd"
|
||||
@@ -3465,6 +3700,16 @@ WebIDL:
|
||||
tm_scope: source.webidl
|
||||
ace_mode: text
|
||||
|
||||
X10:
|
||||
type: programming
|
||||
aliases:
|
||||
- xten
|
||||
ace_mode: text
|
||||
extensions:
|
||||
- .x10
|
||||
color: "#4B6BEF"
|
||||
tm_scope: source.x10
|
||||
|
||||
XC:
|
||||
type: programming
|
||||
color: "#99DA07"
|
||||
@@ -3487,6 +3732,7 @@ XML:
|
||||
- .ccxml
|
||||
- .clixml
|
||||
- .cproject
|
||||
- .csl
|
||||
- .csproj
|
||||
- .ct
|
||||
- .dita
|
||||
@@ -3502,10 +3748,12 @@ XML:
|
||||
- .iml
|
||||
- .ivy
|
||||
- .jelly
|
||||
- .jsproj
|
||||
- .kml
|
||||
- .launch
|
||||
- .mdpolicy
|
||||
- .mm
|
||||
- .mod
|
||||
- .mxml
|
||||
- .nproj
|
||||
- .nuspec
|
||||
@@ -3531,6 +3779,7 @@ XML:
|
||||
- .tmSnippet
|
||||
- .tmTheme
|
||||
- .ts
|
||||
- .tsx
|
||||
- .ui
|
||||
- .urdf
|
||||
- .vbproj
|
||||
@@ -3561,6 +3810,14 @@ XML:
|
||||
- Web.config
|
||||
- packages.config
|
||||
|
||||
XPages:
|
||||
type: programming
|
||||
extensions:
|
||||
- .xsp-config
|
||||
- .xsp.metadata
|
||||
tm_scope: none
|
||||
ace_mode: xml
|
||||
|
||||
XProc:
|
||||
type: programming
|
||||
extensions:
|
||||
@@ -3625,7 +3882,9 @@ YAML:
|
||||
- .yml
|
||||
- .reek
|
||||
- .rviz
|
||||
- .syntax
|
||||
- .yaml
|
||||
- .yaml-tmlanguage
|
||||
ace_mode: yaml
|
||||
|
||||
Yacc:
|
||||
@@ -3717,6 +3976,8 @@ reStructuredText:
|
||||
extensions:
|
||||
- .rst
|
||||
- .rest
|
||||
- .rest.txt
|
||||
- .rst.txt
|
||||
ace_mode: text
|
||||
|
||||
wisp:
|
||||
@@ -3730,7 +3991,13 @@ wisp:
|
||||
xBase:
|
||||
type: programming
|
||||
color: "#403a40"
|
||||
aliases:
|
||||
- advpl
|
||||
- clipper
|
||||
- foxpro
|
||||
extensions:
|
||||
- .prg
|
||||
tm_scope: none
|
||||
- .ch
|
||||
- .prw
|
||||
tm_scope: source.harbour
|
||||
ace_mode: text
|
||||
|
||||
@@ -4,7 +4,11 @@ require 'rugged'
|
||||
|
||||
module Linguist
|
||||
class LazyBlob
|
||||
GIT_ATTR = ['linguist-documentation', 'linguist-language', 'linguist-vendored']
|
||||
GIT_ATTR = ['linguist-documentation',
|
||||
'linguist-language',
|
||||
'linguist-vendored',
|
||||
'linguist-generated']
|
||||
|
||||
GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true }
|
||||
GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS)
|
||||
|
||||
@@ -31,14 +35,6 @@ module Linguist
|
||||
name, GIT_ATTR, GIT_ATTR_FLAGS)
|
||||
end
|
||||
|
||||
def vendored?
|
||||
if attr = git_attributes['linguist-vendored']
|
||||
return boolean_attribute(attr)
|
||||
else
|
||||
return super
|
||||
end
|
||||
end
|
||||
|
||||
def documentation?
|
||||
if attr = git_attributes['linguist-documentation']
|
||||
boolean_attribute(attr)
|
||||
@@ -47,6 +43,22 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
def generated?
|
||||
if attr = git_attributes['linguist-generated']
|
||||
boolean_attribute(attr)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def vendored?
|
||||
if attr = git_attributes['linguist-vendored']
|
||||
return boolean_attribute(attr)
|
||||
else
|
||||
super
|
||||
end
|
||||
end
|
||||
|
||||
def language
|
||||
return @language if defined?(@language)
|
||||
|
||||
@@ -67,11 +79,15 @@ module Linguist
|
||||
@size
|
||||
end
|
||||
|
||||
def cleanup!
|
||||
@data.clear if @data
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
# Returns true if the attribute is present and not the string "false".
|
||||
def boolean_attribute(attr)
|
||||
attr != "false"
|
||||
def boolean_attribute(attribute)
|
||||
attribute != "false"
|
||||
end
|
||||
|
||||
def load_blob!
|
||||
|
||||
@@ -126,12 +126,13 @@ module Linguist
|
||||
end
|
||||
|
||||
protected
|
||||
MAX_TREE_SIZE = 100_000
|
||||
|
||||
def compute_stats(old_commit_oid, cache = nil)
|
||||
return {} if current_tree.count_recursive(MAX_TREE_SIZE) >= MAX_TREE_SIZE
|
||||
|
||||
old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
|
||||
|
||||
read_index
|
||||
|
||||
diff = Rugged::Tree.diff(repository, old_tree, current_tree)
|
||||
|
||||
# Clear file map and fetch full diff if any .gitattributes files are changed
|
||||
@@ -150,14 +151,18 @@ module Linguist
|
||||
next if delta.binary
|
||||
|
||||
if [:added, :modified].include? delta.status
|
||||
# Skip submodules
|
||||
# Skip submodules and symlinks
|
||||
mode = delta.new_file[:mode]
|
||||
next if (mode & 040000) != 0
|
||||
mode_format = (mode & 0170000)
|
||||
next if mode_format == 0120000 || mode_format == 040000 || mode_format == 0160000
|
||||
|
||||
blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8))
|
||||
|
||||
next unless blob.include_in_language_stats?
|
||||
file_map[new] = [blob.language.group.name, blob.size]
|
||||
if blob.include_in_language_stats?
|
||||
file_map[new] = [blob.language.group.name, blob.size]
|
||||
end
|
||||
|
||||
blob.cleanup!
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ module Linguist
|
||||
module Strategy
|
||||
class Modeline
|
||||
EmacsModeline = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i
|
||||
VimModeline = /vim:\s*set\s*(?:ft|filetype)=(\w+):/i
|
||||
VimModeline = /vim:\s*set.*\s(?:ft|filetype)=(\w+)\s?.*:/i
|
||||
|
||||
# Public: Detects language based on Vim and Emacs modelines
|
||||
#
|
||||
|
||||
@@ -86,17 +86,17 @@ module Linguist
|
||||
if s.peek(1) == "\""
|
||||
s.getch
|
||||
else
|
||||
s.skip_until(/[^\\]"/)
|
||||
s.skip_until(/(?<!\\)"/)
|
||||
end
|
||||
elsif s.scan(/'/)
|
||||
if s.peek(1) == "'"
|
||||
s.getch
|
||||
else
|
||||
s.skip_until(/[^\\]'/)
|
||||
s.skip_until(/(?<!\\)'/)
|
||||
end
|
||||
|
||||
# Skip number literals
|
||||
elsif s.scan(/(0x)?\d(\d|\.)*/)
|
||||
elsif s.scan(/(0x\h(\h|\.)*|\d(\d|\.)*)([uU][lL]{0,2}|([eE][-+]\d*)?[fFlL]*)/)
|
||||
|
||||
# SGML style brackets
|
||||
elsif token = s.scan(/<[^\s<>][^<>]*>/)
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
- 3rd[-_]?party/
|
||||
- vendors?/
|
||||
- extern(al)?/
|
||||
- (^|/)[Vv]+endor/
|
||||
|
||||
# Debian packaging
|
||||
- ^debian/
|
||||
@@ -77,6 +78,9 @@
|
||||
# Haxelib projects often contain a neko bytecode file named run.n
|
||||
- run.n$
|
||||
|
||||
# Bootstrap Datepicker
|
||||
- bootstrap-datepicker/
|
||||
|
||||
## Commonly Bundled JavaScript frameworks ##
|
||||
|
||||
# jQuery
|
||||
@@ -87,6 +91,34 @@
|
||||
- (^|/)jquery\-ui(\-\d\.\d+(\.\d+)?)?(\.\w+)?\.(js|css)$
|
||||
- (^|/)jquery\.(ui|effects)\.([^.]*)\.(js|css)$
|
||||
|
||||
# jQuery Gantt
|
||||
- jquery.fn.gantt.js
|
||||
|
||||
# jQuery fancyBox
|
||||
- jquery.fancybox.(js|css)
|
||||
|
||||
# Fuel UX
|
||||
- fuelux.js
|
||||
|
||||
# jQuery File Upload
|
||||
- (^|/)jquery\.fileupload(-\w+)?\.js$
|
||||
|
||||
# Slick
|
||||
- (^|/)slick\.\w+.js$
|
||||
|
||||
# Leaflet plugins
|
||||
- (^|/)Leaflet\.Coordinates-\d+\.\d+\.\d+\.src\.js$
|
||||
- leaflet.draw-src.js
|
||||
- leaflet.draw.css
|
||||
- Control.FullScreen.css
|
||||
- Control.FullScreen.js
|
||||
- leaflet.spin.js
|
||||
- wicket-leaflet.js
|
||||
|
||||
# Sublime Text workspace files
|
||||
- .sublime-project
|
||||
- .sublime-workspace
|
||||
|
||||
# Prototype
|
||||
- (^|/)prototype(.*)\.js$
|
||||
- (^|/)effects\.js$
|
||||
@@ -121,7 +153,7 @@
|
||||
- (^|/)Chart\.js$
|
||||
|
||||
# Codemirror
|
||||
- (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap)
|
||||
- (^|/)[Cc]ode[Mm]irror/(\d+\.\d+/)?(lib|mode|theme|addon|keymap|demo)
|
||||
|
||||
# SyntaxHighlighter - http://alexgorbatchev.com/
|
||||
- (^|/)shBrush([^.]*)\.js$
|
||||
@@ -163,6 +195,11 @@
|
||||
|
||||
## Obj-C ##
|
||||
|
||||
# Xcode
|
||||
|
||||
- \.xctemplate/
|
||||
- \.imageset/
|
||||
|
||||
# Carthage
|
||||
- ^Carthage/
|
||||
|
||||
@@ -172,6 +209,17 @@
|
||||
# Sparkle
|
||||
- (^|/)Sparkle/
|
||||
|
||||
# Crashlytics
|
||||
- Crashlytics.framework/
|
||||
|
||||
# Fabric
|
||||
- Fabric.framework/
|
||||
|
||||
# git config files
|
||||
- gitattributes$
|
||||
- gitignore$
|
||||
- gitmodules$
|
||||
|
||||
## Groovy ##
|
||||
|
||||
# Gradle
|
||||
@@ -216,21 +264,9 @@
|
||||
# Html5shiv
|
||||
- (^|/)html5shiv\.js$
|
||||
|
||||
# Samples folders
|
||||
- ^[Ss]amples/
|
||||
|
||||
# LICENSE, README, git config files
|
||||
- ^COPYING$
|
||||
- LICENSE$
|
||||
- License$
|
||||
- gitattributes$
|
||||
- gitignore$
|
||||
- gitmodules$
|
||||
- ^README$
|
||||
- ^readme$
|
||||
|
||||
# Test fixtures
|
||||
- ^[Tt]ests?/fixtures/
|
||||
- ^[Ss]pecs?/fixtures/
|
||||
|
||||
# PhoneGap/Cordova
|
||||
- (^|/)cordova([^.]*)\.js$
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
module Linguist
|
||||
VERSION = "4.5.6"
|
||||
VERSION = "4.7.4"
|
||||
end
|
||||
|
||||
58
samples/AMPL/CT2.mod
Normal file
58
samples/AMPL/CT2.mod
Normal file
@@ -0,0 +1,58 @@
|
||||
param num_beams; # number of beams
|
||||
|
||||
param num_rows >= 1, integer; # number of rows
|
||||
param num_cols >= 1, integer; # number of columns
|
||||
|
||||
set BEAMS := 1 .. num_beams; # set of beams
|
||||
|
||||
set ROWS := 1 .. num_rows; # set of rows
|
||||
set COLUMNS := 1 .. num_cols; # set of columns
|
||||
|
||||
# values for entries of each beam
|
||||
param beam_values {BEAMS, ROWS, COLUMNS} >= 0;
|
||||
|
||||
# values of tumor
|
||||
param tumor_values {ROWS, COLUMNS} >= 0;
|
||||
|
||||
# values of critical area
|
||||
param critical_values {ROWS, COLUMNS} >= 0;
|
||||
|
||||
# critical maximum dosage requirement
|
||||
param critical_max;
|
||||
|
||||
# tumor minimum dosage requirement
|
||||
param tumor_min;
|
||||
|
||||
# dosage scalar of each beam
|
||||
var X {i in BEAMS} >= 0;
|
||||
|
||||
|
||||
# define the tumor area which includes the locations where tumor exists
|
||||
set tumor_area := {k in ROWS, h in COLUMNS: tumor_values[k,h] > 0};
|
||||
|
||||
# define critical area
|
||||
set critical_area := {k in ROWS, h in COLUMNS: critical_values[k,h] > 0};
|
||||
|
||||
var S {(k,h) in tumor_area} >= 0;
|
||||
var T {(k,h) in critical_area} >= 0;
|
||||
|
||||
# maximize total dosage in tumor area
|
||||
maximize total_tumor_dosage: sum {i in BEAMS} sum {(k,h) in tumor_area} X[i] * beam_values[i,k,h];
|
||||
|
||||
# minimize total dosage in critical area
|
||||
minimize total_critical_dosage: sum {i in BEAMS} sum {(k,h) in critical_area} X[i] * beam_values[i,k,h];
|
||||
|
||||
# minimize total tumor slack
|
||||
minimize total_tumor_slack: sum {(k,h) in tumor_area} S[k,h];
|
||||
|
||||
# minimize total critical area slack
|
||||
minimize total_critical_slack: sum {(k,h) in critical_area} T[k,h];
|
||||
|
||||
# total dosage at each tumor location [k,h] should be >= min tumor dosage with slack variable
|
||||
subject to tumor_limit {(k,h) in tumor_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == tumor_min - S[k,h];
|
||||
|
||||
# total dosage at each critical location [k,h] should be = max critical dosage with slack variable
|
||||
subject to critical_limit {(k,h) in critical_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == critical_max + T[k,h];
|
||||
|
||||
|
||||
|
||||
245
samples/Assembly/fp_sqr32_160_comba.inc
Normal file
245
samples/Assembly/fp_sqr32_160_comba.inc
Normal file
@@ -0,0 +1,245 @@
|
||||
|
||||
push r2
|
||||
dint
|
||||
nop
|
||||
bis #MPYDLYWRTEN,&MPY32CTL0
|
||||
bic #MPYDLY32,&MPY32CTL0
|
||||
mov #SUMEXT,r13
|
||||
clr r12
|
||||
|
||||
mov @r15+,r4
|
||||
mov @r15+,r5
|
||||
|
||||
mov @r15+,r6
|
||||
mov @r15+,r7
|
||||
|
||||
mov @r15+,r8
|
||||
mov @r15+,r9
|
||||
|
||||
mov @r15+,r10
|
||||
mov @r15+,r11
|
||||
|
||||
sub #2*8,r15
|
||||
|
||||
/* SELF_STEP_FIRST */
|
||||
mov r4,&MPY32L
|
||||
mov r5,&MPY32H
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*0(r14)
|
||||
mov &RES1,2*(0+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
|
||||
/* STEP_1 */
|
||||
mov r4,&MAC32L
|
||||
mov r5,&MAC32H
|
||||
mov r6,&OP2L
|
||||
mov r7,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r6,&OP2L
|
||||
mov r7,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*2(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(2+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
/* STEP_1 */
|
||||
mov r4,&MAC32L
|
||||
mov r5,&MAC32H
|
||||
mov r8,&OP2L
|
||||
mov r9,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r8,&OP2L
|
||||
mov r9,&OP2H
|
||||
|
||||
/* SELF_STEP */
|
||||
mov r6,&MAC32L
|
||||
mov r7,&MAC32H
|
||||
add @r13,r12
|
||||
mov r6,&OP2L
|
||||
mov r7,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*4(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(4+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
/* STEP_1 */
|
||||
mov r4,&MAC32L
|
||||
mov r5,&MAC32H
|
||||
mov r10,&OP2L
|
||||
mov r11,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r10,&OP2L
|
||||
mov r11,&OP2H
|
||||
|
||||
/* STEP_2MORE */
|
||||
mov r6,&MAC32L
|
||||
mov r7,&MAC32H
|
||||
add @r13,r12
|
||||
mov r8,&OP2L
|
||||
mov r9,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r8,&OP2L
|
||||
mov r9,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*6(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(6+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
/* STEP_1 */
|
||||
mov r4,&MAC32L
|
||||
mov r5,&MAC32H
|
||||
mov 2*8(r15),&OP2L
|
||||
mov 2*9(r15),&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov 2*8(r15),&OP2L
|
||||
mov 2*9(r15),&OP2H
|
||||
|
||||
/* STEP_2MORE */
|
||||
mov r6,&MAC32L
|
||||
mov r7,&MAC32H
|
||||
add @r13,r12
|
||||
mov r10,&OP2L
|
||||
mov r11,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r10,&OP2L
|
||||
mov r11,&OP2H
|
||||
|
||||
/* SELF_STEP */
|
||||
mov r8,&MAC32L
|
||||
mov r9,&MAC32H
|
||||
add @r13,r12
|
||||
mov r8,&OP2L
|
||||
mov r9,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*8(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(8+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
mov 2*8(r15),r4
|
||||
mov 2*(8+1)(r15),r5
|
||||
|
||||
/* STEP_1 */
|
||||
mov r6,&MAC32L
|
||||
mov r7,&MAC32H
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
|
||||
/* STEP_2MORE */
|
||||
mov r8,&MAC32L
|
||||
mov r9,&MAC32H
|
||||
add @r13,r12
|
||||
mov r10,&OP2L
|
||||
mov r11,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r10,&OP2L
|
||||
mov r11,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*10(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(10+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
/* STEP_1 */
|
||||
mov r8,&MAC32L
|
||||
mov r9,&MAC32H
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
|
||||
/* SELF_STEP */
|
||||
mov r10,&MAC32L
|
||||
mov r11,&MAC32H
|
||||
add @r13,r12
|
||||
mov r10,&OP2L
|
||||
mov r11,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*12(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(12+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
/* STEP_1 */
|
||||
mov r10,&MAC32L
|
||||
mov r11,&MAC32H
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
add &SUMEXT,r12
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*14(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(14+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
/* SELF_STEP_1 */
|
||||
mov r4,&MAC32L
|
||||
mov r5,&MAC32H
|
||||
mov r4,&OP2L
|
||||
mov r5,&OP2H
|
||||
|
||||
/* COLUMN_END */
|
||||
mov &RES0,2*16(r14)
|
||||
add @r13,r12
|
||||
mov &RES1,2*(16+1)(r14)
|
||||
mov &RES2,&RES0
|
||||
mov &RES3,&RES1
|
||||
mov r12,&RES2
|
||||
clr &RES3
|
||||
clr r12
|
||||
|
||||
/* END */
|
||||
mov &RES0,2*18(r14)
|
||||
mov &RES1,2*(18+1)(r14)
|
||||
pop r2
|
||||
eint
|
||||
170
samples/Assembly/lib.inc
Normal file
170
samples/Assembly/lib.inc
Normal file
@@ -0,0 +1,170 @@
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; 显示 AL 中的数字
|
||||
; ------------------------------------------------------------------------
|
||||
DispAL:
|
||||
push ecx
|
||||
push edx
|
||||
push edi
|
||||
|
||||
mov edi, [dwDispPos]
|
||||
|
||||
mov ah, 0Fh ; 0000b: 黑底 1111b: 白字
|
||||
mov dl, al
|
||||
shr al, 4
|
||||
mov ecx, 2
|
||||
.begin:
|
||||
and al, 01111b
|
||||
cmp al, 9
|
||||
ja .1
|
||||
add al, '0'
|
||||
jmp .2
|
||||
.1:
|
||||
sub al, 0Ah
|
||||
add al, 'A'
|
||||
.2:
|
||||
mov [gs:edi], ax
|
||||
add edi, 2
|
||||
|
||||
mov al, dl
|
||||
loop .begin
|
||||
;add edi, 2
|
||||
|
||||
mov [dwDispPos], edi
|
||||
|
||||
pop edi
|
||||
pop edx
|
||||
pop ecx
|
||||
|
||||
ret
|
||||
; DispAL 结束-------------------------------------------------------------
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; 显示一个整形数
|
||||
; ------------------------------------------------------------------------
|
||||
DispInt:
|
||||
mov eax, [esp + 4]
|
||||
shr eax, 24
|
||||
call DispAL
|
||||
|
||||
mov eax, [esp + 4]
|
||||
shr eax, 16
|
||||
call DispAL
|
||||
|
||||
mov eax, [esp + 4]
|
||||
shr eax, 8
|
||||
call DispAL
|
||||
|
||||
mov eax, [esp + 4]
|
||||
call DispAL
|
||||
|
||||
mov ah, 07h ; 0000b: 黑底 0111b: 灰字
|
||||
mov al, 'h'
|
||||
push edi
|
||||
mov edi, [dwDispPos]
|
||||
mov [gs:edi], ax
|
||||
add edi, 4
|
||||
mov [dwDispPos], edi
|
||||
pop edi
|
||||
|
||||
ret
|
||||
; DispInt 结束------------------------------------------------------------
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; 显示一个字符串
|
||||
; ------------------------------------------------------------------------
|
||||
DispStr:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push ebx
|
||||
push esi
|
||||
push edi
|
||||
|
||||
mov esi, [ebp + 8] ; pszInfo
|
||||
mov edi, [dwDispPos]
|
||||
mov ah, 0Fh
|
||||
.1:
|
||||
lodsb
|
||||
test al, al
|
||||
jz .2
|
||||
cmp al, 0Ah ; 是回车吗?
|
||||
jnz .3
|
||||
push eax
|
||||
mov eax, edi
|
||||
mov bl, 160
|
||||
div bl
|
||||
and eax, 0FFh
|
||||
inc eax
|
||||
mov bl, 160
|
||||
mul bl
|
||||
mov edi, eax
|
||||
pop eax
|
||||
jmp .1
|
||||
.3:
|
||||
mov [gs:edi], ax
|
||||
add edi, 2
|
||||
jmp .1
|
||||
|
||||
.2:
|
||||
mov [dwDispPos], edi
|
||||
|
||||
pop edi
|
||||
pop esi
|
||||
pop ebx
|
||||
pop ebp
|
||||
ret
|
||||
; DispStr 结束------------------------------------------------------------
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; 换行
|
||||
; ------------------------------------------------------------------------
|
||||
DispReturn:
|
||||
push szReturn
|
||||
call DispStr ;printf("\n");
|
||||
add esp, 4
|
||||
|
||||
ret
|
||||
; DispReturn 结束---------------------------------------------------------
|
||||
|
||||
|
||||
; ------------------------------------------------------------------------
|
||||
; 内存拷贝,仿 memcpy
|
||||
; ------------------------------------------------------------------------
|
||||
; void* MemCpy(void* es:pDest, void* ds:pSrc, int iSize);
|
||||
; ------------------------------------------------------------------------
|
||||
MemCpy:
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
|
||||
push esi
|
||||
push edi
|
||||
push ecx
|
||||
|
||||
mov edi, [ebp + 8] ; Destination
|
||||
mov esi, [ebp + 12] ; Source
|
||||
mov ecx, [ebp + 16] ; Counter
|
||||
.1:
|
||||
cmp ecx, 0 ; 判断计数器
|
||||
jz .2 ; 计数器为零时跳出
|
||||
|
||||
mov al, [ds:esi] ; ┓
|
||||
inc esi ; ┃
|
||||
; ┣ 逐字节移动
|
||||
mov byte [es:edi], al ; ┃
|
||||
inc edi ; ┛
|
||||
|
||||
dec ecx ; 计数器减一
|
||||
jmp .1 ; 循环
|
||||
.2:
|
||||
mov eax, [ebp + 8] ; 返回值
|
||||
|
||||
pop ecx
|
||||
pop edi
|
||||
pop esi
|
||||
mov esp, ebp
|
||||
pop ebp
|
||||
|
||||
ret ; 函数结束,返回
|
||||
; MemCpy 结束-------------------------------------------------------------
|
||||
|
||||
321
samples/Assembly/macros.inc
Normal file
321
samples/Assembly/macros.inc
Normal file
@@ -0,0 +1,321 @@
|
||||
BLARGG_MACROS_INCLUDED = 1
|
||||
|
||||
; Allows extra error checking with modified version
|
||||
; of ca65. Otherwise acts like a constant of 0.
|
||||
ADDR = 0
|
||||
|
||||
; Switches to Segment and places Line there.
|
||||
; Line can be an .align directive, .res, .byte, etc.
|
||||
; Examples:
|
||||
; seg_data BSS, .align 256
|
||||
; seg_data RODATA, {message: .byte "Test",0}
|
||||
.macro seg_data Segment, Line
|
||||
.pushseg
|
||||
.segment .string(Segment)
|
||||
Line
|
||||
.popseg
|
||||
.endmacro
|
||||
|
||||
; Reserves Size bytes in Segment for Name.
|
||||
; If Size is omitted, reserves one byte.
|
||||
.macro seg_res Segment, Name, Size
|
||||
.ifblank Size
|
||||
seg_data Segment, Name: .res 1
|
||||
.else
|
||||
seg_data Segment, Name: .res Size
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
; Shortcuts for zeropage, bss, and stack
|
||||
.define zp_res seg_res ZEROPAGE,
|
||||
.define nv_res seg_res NVRAM,
|
||||
.define bss_res seg_res BSS,
|
||||
.define sp_res seg_res STACK,
|
||||
.define zp_byte zp_res
|
||||
|
||||
; Copies byte from Src to Addr. If Src begins with #,
|
||||
; it sets Addr to the immediate value.
|
||||
; Out: A = byte copied
|
||||
; Preserved: X, Y
|
||||
.macro mov Addr, Src
|
||||
lda Src
|
||||
sta Addr
|
||||
.endmacro
|
||||
|
||||
; Copies word from Src to Addr. If Src begins with #,
|
||||
; it sets Addr the immediate value.
|
||||
; Out: A = high byte of word
|
||||
; Preserved: X, Y
|
||||
.macro movw Addr, Src
|
||||
.if .match( .left( 1, {Src} ), # )
|
||||
lda #<(.right( .tcount( {Src} )-1, {Src} ))
|
||||
sta Addr
|
||||
lda #>(.right( .tcount( {Src} )-1, {Src} ))
|
||||
sta 1+(Addr)
|
||||
.else
|
||||
lda Src
|
||||
sta Addr
|
||||
lda 1+(Src)
|
||||
sta 1+(Addr)
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
; Increments 16-bit value at Addr.
|
||||
; Out: EQ/NE based on resulting 16-bit value
|
||||
; Preserved: A, X, Y
|
||||
.macro incw Addr
|
||||
.local @Skip
|
||||
inc Addr
|
||||
bne @Skip
|
||||
inc 1+(Addr)
|
||||
@Skip:
|
||||
.endmacro
|
||||
|
||||
; Adds Src to word at Addr.
|
||||
; Out: A = high byte of result, carry set appropriately
|
||||
; Preserved: X, Y
|
||||
.macro addw Addr, Src
|
||||
.if .match( .left( 1, {Src} ), # )
|
||||
addw_ Addr,(.right( .tcount( {Src} )-1, {Src} ))
|
||||
.else
|
||||
lda Addr
|
||||
clc
|
||||
adc Src
|
||||
sta Addr
|
||||
|
||||
lda 1+(Addr)
|
||||
adc 1+(Src)
|
||||
sta 1+(Addr)
|
||||
.endif
|
||||
.endmacro
|
||||
.macro addw_ Addr, Imm
|
||||
lda Addr
|
||||
clc
|
||||
adc #<Imm
|
||||
sta Addr
|
||||
|
||||
;.if (Imm >> 8) <> 0
|
||||
lda 1+(Addr)
|
||||
adc #>Imm
|
||||
sta 1+(Addr)
|
||||
;.else
|
||||
; .local @Skip
|
||||
; bcc @Skip
|
||||
; inc 1+(Addr)
|
||||
;@Skip:
|
||||
;.endif
|
||||
.endmacro
|
||||
|
||||
; Splits list of words into tables of low and high bytes
|
||||
; Example: split_words foo, {$1234, $5678}
|
||||
; expands to:
|
||||
; foo_l: $34, $78
|
||||
; foo_h: $12, $56
|
||||
; foo_count = 2
|
||||
.macro split_words Label, Words
|
||||
.ident (.concat (.string(Label), "_l")): .lobytes Words
|
||||
.ident (.concat (.string(Label), "_h")): .hibytes Words
|
||||
.ident (.concat (.string(Label), "_count")) = * - .ident (.concat (.string(Label), "_h"))
|
||||
.endmacro
|
||||
|
||||
.macro SELECT Bool, True, False, Extra
|
||||
.ifndef Bool
|
||||
False Extra
|
||||
.elseif Bool <> 0
|
||||
True Extra
|
||||
.else
|
||||
False Extra
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
.macro DEFAULT Name, Value
|
||||
.ifndef Name
|
||||
Name = Value
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
.ifp02
|
||||
; 6502 doesn't define these alternate names
|
||||
.define blt bcc
|
||||
.define bge bcs
|
||||
.endif
|
||||
.define jlt jcc
|
||||
.define jge jcs
|
||||
|
||||
; Jxx Target = Bxx Target, except it can go farther than
|
||||
; 128 bytes. Implemented via branch around a JMP.
|
||||
|
||||
; Don't use ca65's longbranch, because they fail for @labels
|
||||
;.macpack longbranch
|
||||
|
||||
.macro jeq Target
|
||||
bne *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
.macro jne Target
|
||||
beq *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
.macro jmi Target
|
||||
bpl *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
.macro jpl Target
|
||||
bmi *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
.macro jcs Target
|
||||
bcc *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
.macro jcc Target
|
||||
bcs *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
.macro jvs Target
|
||||
bvc *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
.macro jvc Target
|
||||
bvs *+5
|
||||
jmp Target
|
||||
.endmacro
|
||||
|
||||
|
||||
; Passes constant data to routine in addr
|
||||
; Preserved: A, X, Y
|
||||
.macro jsr_with_addr routine,data
|
||||
.local Addr
|
||||
pha
|
||||
lda #<Addr
|
||||
sta addr
|
||||
lda #>Addr
|
||||
sta addr+1
|
||||
pla
|
||||
jsr routine
|
||||
seg_data RODATA,{Addr: data}
|
||||
.endmacro
|
||||
|
||||
; Calls routine multiple times, with A having the
|
||||
; value 'start' the first time, 'start+step' the
|
||||
; second time, up to 'end' for the last time.
|
||||
.macro for_loop routine,start,end,step
|
||||
.local @for_loop
|
||||
lda #start
|
||||
@for_loop:
|
||||
pha
|
||||
jsr routine
|
||||
pla
|
||||
clc
|
||||
adc #step
|
||||
cmp #<((end)+(step))
|
||||
bne @for_loop
|
||||
.endmacro
|
||||
|
||||
; Calls routine n times. The value of A in the routine
|
||||
; counts from 0 to n-1.
|
||||
.macro loop_n_times routine,n
|
||||
for_loop routine,0,n-1,+1
|
||||
.endmacro
|
||||
|
||||
; Same as for_loop, except uses 16-bit value in YX.
|
||||
; -256 <= step <= 255
|
||||
.macro for_loop16 routine,start,end,step
|
||||
.if (step) < -256 || (step) > 255
|
||||
.error "Step must be within -256 to 255"
|
||||
.endif
|
||||
.local @for_loop_skip
|
||||
.local @for_loop
|
||||
ldy #>(start)
|
||||
lda #<(start)
|
||||
@for_loop:
|
||||
tax
|
||||
pha
|
||||
tya
|
||||
pha
|
||||
jsr routine
|
||||
pla
|
||||
tay
|
||||
pla
|
||||
clc
|
||||
adc #step
|
||||
.if (step) > 0
|
||||
bcc @for_loop_skip
|
||||
iny
|
||||
.else
|
||||
bcs @for_loop_skip
|
||||
dey
|
||||
.endif
|
||||
@for_loop_skip:
|
||||
cmp #<((end)+(step))
|
||||
bne @for_loop
|
||||
cpy #>((end)+(step))
|
||||
bne @for_loop
|
||||
.endmacro
|
||||
|
||||
; Stores byte at addr
|
||||
; Preserved: X, Y
|
||||
.macro setb addr, byte
|
||||
lda #byte
|
||||
sta addr
|
||||
.endmacro
|
||||
|
||||
; Stores word at addr
|
||||
; Preserved: X, Y
|
||||
.macro setw addr, word
|
||||
lda #<(word)
|
||||
sta addr
|
||||
lda #>(word)
|
||||
sta addr+1
|
||||
.endmacro
|
||||
|
||||
; Loads XY with 16-bit immediate or value at address
|
||||
.macro ldxy Arg
|
||||
.if .match( .left( 1, {Arg} ), # )
|
||||
ldy #<(.right( .tcount( {Arg} )-1, {Arg} ))
|
||||
ldx #>(.right( .tcount( {Arg} )-1, {Arg} ))
|
||||
.else
|
||||
ldy (Arg)
|
||||
ldx (Arg)+1
|
||||
.endif
|
||||
.endmacro
|
||||
|
||||
; Increments XY as 16-bit register, in CONSTANT time.
|
||||
; Z flag set based on entire result.
|
||||
; Preserved: A
|
||||
; Time: 7 clocks
|
||||
.macro inxy
|
||||
iny ; 2
|
||||
beq *+4 ; 3
|
||||
; -1
|
||||
bne *+3 ; 3
|
||||
; -1
|
||||
inx ; 2
|
||||
.endmacro
|
||||
|
||||
; Negates A and adds it to operand
|
||||
.macro subaf Operand
|
||||
eor #$FF
|
||||
sec
|
||||
adc Operand
|
||||
.endmacro
|
||||
|
||||
; Initializes CPU registers to reasonable values
|
||||
; Preserved: A, Y
|
||||
.macro init_cpu_regs
|
||||
sei
|
||||
cld ; unnecessary on NES, but might help on clone
|
||||
ldx #$FF
|
||||
txs
|
||||
.ifndef BUILD_NSF
|
||||
inx
|
||||
stx PPUCTRL
|
||||
.endif
|
||||
.endmacro
|
||||
86
samples/C#/build.cake
Normal file
86
samples/C#/build.cake
Normal file
@@ -0,0 +1,86 @@
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// ARGUMENTS
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
var target = Argument<string>("target", "Default");
|
||||
var configuration = Argument<string>("configuration", "Release");
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// GLOBAL VARIABLES
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
var solutions = GetFiles("./**/*.sln");
|
||||
var solutionPaths = solutions.Select(solution => solution.GetDirectory());
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// SETUP / TEARDOWN
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Setup(() =>
|
||||
{
|
||||
// Executed BEFORE the first task.
|
||||
Information("Running tasks...");
|
||||
});
|
||||
|
||||
Teardown(() =>
|
||||
{
|
||||
// Executed AFTER the last task.
|
||||
Information("Finished running tasks.");
|
||||
});
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// TASK DEFINITIONS
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Task("Clean")
|
||||
.Does(() =>
|
||||
{
|
||||
// Clean solution directories.
|
||||
foreach(var path in solutionPaths)
|
||||
{
|
||||
Information("Cleaning {0}", path);
|
||||
CleanDirectories(path + "/**/bin/" + configuration);
|
||||
CleanDirectories(path + "/**/obj/" + configuration);
|
||||
}
|
||||
});
|
||||
|
||||
Task("Restore")
|
||||
.Does(() =>
|
||||
{
|
||||
// Restore all NuGet packages.
|
||||
foreach(var solution in solutions)
|
||||
{
|
||||
Information("Restoring {0}...", solution);
|
||||
NuGetRestore(solution);
|
||||
}
|
||||
});
|
||||
|
||||
Task("Build")
|
||||
.IsDependentOn("Clean")
|
||||
.IsDependentOn("Restore")
|
||||
.Does(() =>
|
||||
{
|
||||
// Build all solutions.
|
||||
foreach(var solution in solutions)
|
||||
{
|
||||
Information("Building {0}", solution);
|
||||
MSBuild(solution, settings =>
|
||||
settings.SetPlatformTarget(PlatformTarget.MSIL)
|
||||
.WithProperty("TreatWarningsAsErrors","true")
|
||||
.WithTarget("Build")
|
||||
.SetConfiguration(configuration));
|
||||
}
|
||||
});
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// TARGETS
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
Task("Default")
|
||||
.IsDependentOn("Build");
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// EXECUTION
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
RunTarget(target);
|
||||
57
samples/C++/ClasspathVMSystemProperties.inc
Normal file
57
samples/C++/ClasspathVMSystemProperties.inc
Normal file
@@ -0,0 +1,57 @@
|
||||
//===- ClasspathVMSystem/Properties.cpp -----------------------------------===//
|
||||
//===--------------------- GNU classpath gnu/classpath/VMSystemProperties -===//
|
||||
//
|
||||
// The VMKit project
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include <sys/utsname.h>
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#include "Classpath.h"
|
||||
#include "JavaArray.h"
|
||||
#include "JavaClass.h"
|
||||
#include "JavaObject.h"
|
||||
#include "JavaThread.h"
|
||||
#include "JavaUpcalls.h"
|
||||
#include "Jnjvm.h"
|
||||
|
||||
#include "SetProperties.inc"
|
||||
|
||||
using namespace j3;
|
||||
|
||||
extern "C" {
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_gnu_classpath_VMSystemProperties_preInit(
|
||||
#ifdef NATIVE_JNI
|
||||
JNIEnv *env,
|
||||
jclass clazz,
|
||||
#endif
|
||||
JavaObject* prop) {
|
||||
|
||||
llvm_gcroot(prop, 0);
|
||||
|
||||
BEGIN_NATIVE_EXCEPTION(0)
|
||||
|
||||
setProperties(prop);
|
||||
|
||||
END_NATIVE_EXCEPTION
|
||||
}
|
||||
|
||||
extern "C" void Java_gnu_classpath_VMSystemProperties_postInit__Ljava_util_Properties_2(JavaObject* prop) {
|
||||
|
||||
llvm_gcroot(prop, 0);
|
||||
|
||||
BEGIN_NATIVE_EXCEPTION(0)
|
||||
|
||||
setCommandLineProperties(prop);
|
||||
|
||||
END_NATIVE_EXCEPTION
|
||||
}
|
||||
|
||||
}
|
||||
2764
samples/C++/initClasses.inc
Normal file
2764
samples/C++/initClasses.inc
Normal file
File diff suppressed because it is too large
Load Diff
34
samples/C++/instances.inc
Normal file
34
samples/C++/instances.inc
Normal file
@@ -0,0 +1,34 @@
|
||||
#include "QPBO.h"
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(disable: 4661)
|
||||
#endif
|
||||
|
||||
// Instantiations
|
||||
|
||||
template class QPBO<int>;
|
||||
template class QPBO<float>;
|
||||
template class QPBO<double>;
|
||||
|
||||
template <>
|
||||
inline void QPBO<int>::get_type_information(char*& type_name, char*& type_format)
|
||||
{
|
||||
type_name = "int";
|
||||
type_format = "d";
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void QPBO<float>::get_type_information(char*& type_name, char*& type_format)
|
||||
{
|
||||
type_name = "float";
|
||||
type_format = "f";
|
||||
}
|
||||
|
||||
template <>
|
||||
inline void QPBO<double>::get_type_information(char*& type_name, char*& type_format)
|
||||
{
|
||||
type_name = "double";
|
||||
type_format = "Lf";
|
||||
}
|
||||
|
||||
|
||||
6
samples/Charity/example.ch
Normal file
6
samples/Charity/example.ch
Normal file
@@ -0,0 +1,6 @@
|
||||
%
|
||||
% Some very badly written Charity
|
||||
%
|
||||
|
||||
data LA(A) -> D = ss: A -> D
|
||||
| ff: -> D.
|
||||
133
samples/Click/sr2.click
Normal file
133
samples/Click/sr2.click
Normal file
@@ -0,0 +1,133 @@
|
||||
rates :: AvailableRates
|
||||
elementclass sr2 {
|
||||
$sr2_ip, $sr2_nm, $wireless_mac, $gateway, $probes|
|
||||
|
||||
|
||||
arp :: ARPTable();
|
||||
lt :: LinkTable(IP $sr2_ip);
|
||||
|
||||
|
||||
gw :: SR2GatewaySelector(ETHTYPE 0x062c,
|
||||
IP $sr2_ip,
|
||||
ETH $wireless_mac,
|
||||
LT lt,
|
||||
ARP arp,
|
||||
PERIOD 15,
|
||||
GW $gateway);
|
||||
|
||||
|
||||
gw -> SR2SetChecksum -> [0] output;
|
||||
|
||||
set_gw :: SR2SetGateway(SEL gw);
|
||||
|
||||
|
||||
es :: SR2ETTStat(ETHTYPE 0x0641,
|
||||
ETH $wireless_mac,
|
||||
IP $sr2_ip,
|
||||
PERIOD 30000,
|
||||
TAU 300000,
|
||||
ARP arp,
|
||||
PROBES $probes,
|
||||
ETT metric,
|
||||
RT rates);
|
||||
|
||||
|
||||
metric :: SR2ETTMetric(LT lt);
|
||||
|
||||
|
||||
forwarder :: SR2Forwarder(ETHTYPE 0x0643,
|
||||
IP $sr2_ip,
|
||||
ETH $wireless_mac,
|
||||
ARP arp,
|
||||
LT lt);
|
||||
|
||||
|
||||
querier :: SR2Querier(ETH $wireless_mac,
|
||||
SR forwarder,
|
||||
LT lt,
|
||||
ROUTE_DAMPENING true,
|
||||
TIME_BEFORE_SWITCH 5,
|
||||
DEBUG true);
|
||||
|
||||
|
||||
query_forwarder :: SR2MetricFlood(ETHTYPE 0x0644,
|
||||
IP $sr2_ip,
|
||||
ETH $wireless_mac,
|
||||
LT lt,
|
||||
ARP arp,
|
||||
DEBUG false);
|
||||
|
||||
query_responder :: SR2QueryResponder(ETHTYPE 0x0645,
|
||||
IP $sr2_ip,
|
||||
ETH $wireless_mac,
|
||||
LT lt,
|
||||
ARP arp,
|
||||
DEBUG true);
|
||||
|
||||
|
||||
query_responder -> SR2SetChecksum -> [0] output;
|
||||
query_forwarder -> SR2SetChecksum -> SR2Print(forwarding) -> [0] output;
|
||||
query_forwarder [1] -> query_responder;
|
||||
|
||||
data_ck :: SR2SetChecksum()
|
||||
|
||||
input [1]
|
||||
-> host_cl :: IPClassifier(dst net $sr2_ip mask $sr2_nm,
|
||||
-)
|
||||
-> querier
|
||||
-> data_ck;
|
||||
|
||||
|
||||
host_cl [1] -> [0] set_gw [0] -> querier;
|
||||
|
||||
forwarder[0]
|
||||
-> dt ::DecIPTTL
|
||||
-> data_ck
|
||||
-> [2] output;
|
||||
|
||||
|
||||
dt[1]
|
||||
-> Print(ttl-error)
|
||||
-> ICMPError($sr2_ip, timeexceeded, 0)
|
||||
-> querier;
|
||||
|
||||
|
||||
// queries
|
||||
querier [1] -> [1] query_forwarder;
|
||||
es -> SetTimestamp() -> [1] output;
|
||||
|
||||
|
||||
forwarder[1] //ip packets to me
|
||||
-> SR2StripHeader()
|
||||
-> CheckIPHeader()
|
||||
-> from_gw_cl :: IPClassifier(src net $sr2_ip mask $sr2_nm,
|
||||
-)
|
||||
-> [3] output;
|
||||
|
||||
from_gw_cl [1] -> [1] set_gw [1] -> [3] output;
|
||||
|
||||
input [0]
|
||||
-> ncl :: Classifier(
|
||||
12/0643 , //sr2_forwarder
|
||||
12/0644 , //sr2
|
||||
12/0645 , //replies
|
||||
12/0641 , //sr2_es
|
||||
12/062c , //sr2_gw
|
||||
);
|
||||
|
||||
|
||||
ncl[0] -> SR2CheckHeader() -> [0] forwarder;
|
||||
ncl[1] -> SR2CheckHeader() -> PrintSR(query) -> query_forwarder
|
||||
ncl[2] -> SR2CheckHeader() -> query_responder;
|
||||
ncl[3] -> es;
|
||||
ncl[4] -> SR2CheckHeader() -> gw;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Idle -> s :: sr2(2.0.0.1, 255.0.0.0, 00:00:00:00:00:01, false, "12 60 12 1500") -> Discard;
|
||||
Idle -> [1] s;
|
||||
s[1] -> Discard;
|
||||
s[2] -> Discard;
|
||||
s[3] -> Discard;
|
||||
142
samples/Click/thomer-nat.click
Normal file
142
samples/Click/thomer-nat.click
Normal file
@@ -0,0 +1,142 @@
|
||||
// This Click configuration implements a firewall and NAT, roughly based on the
|
||||
// mazu-nat.click example.
|
||||
//
|
||||
// This example assumes there is one interface that is IP-aliased. In this
|
||||
// example, eth0 and eth0:0 have IP addresses 66.68.65.90 and 192.168.1.1,
|
||||
// respectively. There is a local network, 192.168.1.0/24, and an upstream
|
||||
// gateway, 66.58.65.89. Traffic from the local network is NATed.
|
||||
//
|
||||
// Connections can be initiated from the NAT box itself, also.
|
||||
//
|
||||
// For bugs, suggestions, and, corrections, please email me.
|
||||
//
|
||||
// Author: Thomer M. Gil (click@thomer.com)
|
||||
|
||||
AddressInfo(
|
||||
eth0-in 192.168.1.1 192.168.1.0/24 00:0d:87:9d:1c:e9,
|
||||
eth0-ex 66.58.65.90 00:0d:87:9d:1c:e9,
|
||||
gw-addr 66.58.65.89 00:20:6f:14:54:c2
|
||||
);
|
||||
|
||||
|
||||
elementclass SniffGatewayDevice {
|
||||
$device |
|
||||
from :: FromDevice($device)
|
||||
-> t1 :: Tee
|
||||
-> output;
|
||||
input -> q :: Queue(1024)
|
||||
-> t2 :: PullTee
|
||||
-> to :: ToDevice($device);
|
||||
t1[1] -> ToHostSniffers;
|
||||
t2[1] -> ToHostSniffers($device);
|
||||
ScheduleInfo(from .1, to 1);
|
||||
}
|
||||
|
||||
|
||||
device :: SniffGatewayDevice(eth0);
|
||||
arpq_in :: ARPQuerier(eth0-in) -> device;
|
||||
ip_to_extern :: GetIPAddress(16)
|
||||
-> CheckIPHeader
|
||||
-> EtherEncap(0x800, eth0-ex, gw-addr)
|
||||
-> device;
|
||||
ip_to_host :: EtherEncap(0x800, gw-addr, eth0-ex)
|
||||
-> ToHost;
|
||||
ip_to_intern :: GetIPAddress(16)
|
||||
-> CheckIPHeader
|
||||
-> arpq_in;
|
||||
|
||||
|
||||
arp_class :: Classifier(
|
||||
12/0806 20/0001, // [0] ARP requests
|
||||
12/0806 20/0002, // [1] ARP replies to host
|
||||
12/0800); // [2] IP packets
|
||||
|
||||
device -> arp_class;
|
||||
|
||||
// ARP crap
|
||||
arp_class[0] -> ARPResponder(eth0-in, eth0-ex) -> device;
|
||||
arp_class[1] -> arp_t :: Tee;
|
||||
arp_t[0] -> ToHost;
|
||||
arp_t[1] -> [1]arpq_in;
|
||||
|
||||
|
||||
// IP packets
|
||||
arp_class[2] -> Strip(14)
|
||||
-> CheckIPHeader
|
||||
-> ipclass :: IPClassifier(dst host eth0-ex,
|
||||
dst host eth0-in,
|
||||
src net eth0-in);
|
||||
|
||||
// Define pattern NAT
|
||||
iprw :: IPRewriterPatterns(NAT eth0-ex 50000-65535 - -);
|
||||
|
||||
// Rewriting rules for UDP/TCP packets
|
||||
// output[0] rewritten to go into the wild
|
||||
// output[1] rewritten to come back from the wild or no match
|
||||
rw :: IPRewriter(pattern NAT 0 1,
|
||||
pass 1);
|
||||
|
||||
// Rewriting rules for ICMP packets
|
||||
irw :: ICMPPingRewriter(eth0-ex, -);
|
||||
irw[0] -> ip_to_extern;
|
||||
irw[1] -> icmp_me_or_intern :: IPClassifier(dst host eth0-ex, -);
|
||||
icmp_me_or_intern[0] -> ip_to_host;
|
||||
icmp_me_or_intern[1] -> ip_to_intern;
|
||||
|
||||
// Rewriting rules for ICMP error packets
|
||||
ierw :: ICMPRewriter(rw irw);
|
||||
ierw[0] -> icmp_me_or_intern;
|
||||
ierw[1] -> icmp_me_or_intern;
|
||||
|
||||
|
||||
// Packets directed at eth0-ex.
|
||||
// Send it through IPRewriter(pass). If there was a mapping, it will be
|
||||
// rewritten such that dst is eth0-in:net, otherwise dst will still be for
|
||||
// eth0-ex.
|
||||
ipclass[0] -> [1]rw;
|
||||
|
||||
// packets that were rewritten, heading into the wild world.
|
||||
rw[0] -> ip_to_extern;
|
||||
|
||||
// packets that come back from the wild or are not part of an established
|
||||
// connection.
|
||||
rw[1] -> established_class :: IPClassifier(dst host eth0-ex,
|
||||
dst net eth0-in);
|
||||
|
||||
// not established yet or returning packets for a connection that was
|
||||
// established from this host itself.
|
||||
established_class[0] ->
|
||||
firewall :: IPClassifier(dst tcp port ssh,
|
||||
dst tcp port smtp,
|
||||
dst tcp port domain,
|
||||
dst udp port domain,
|
||||
icmp type echo-reply,
|
||||
proto icmp,
|
||||
port > 4095,
|
||||
-);
|
||||
|
||||
firewall[0] -> ip_to_host; // ssh
|
||||
firewall[1] -> ip_to_host; // smtp
|
||||
firewall[2] -> ip_to_host; // domain (t)
|
||||
firewall[3] -> ip_to_host; // domain (u)
|
||||
firewall[4] -> [0]irw; // icmp reply
|
||||
firewall[5] -> [0]ierw; // other icmp
|
||||
firewall[6] -> ip_to_host; // port > 4095, probably for connection
|
||||
// originating from host itself
|
||||
firewall[7] -> Discard; // don't allow incoming for port <= 4095
|
||||
|
||||
// established connection
|
||||
established_class[1] -> ip_to_intern;
|
||||
|
||||
// To eth0-in. Only accept from inside network.
|
||||
ipclass[1] -> IPClassifier(src net eth0-in) -> ip_to_host;
|
||||
|
||||
// Packets from eth0-in:net either stay on local network or go to the wild.
|
||||
// Those that go into the wild need to go through the appropriate rewriting
|
||||
// element. (Either UDP/TCP rewriter or ICMP rewriter.)
|
||||
ipclass[2] -> inter_class :: IPClassifier(dst net eth0-in, -);
|
||||
inter_class[0] -> ip_to_intern;
|
||||
inter_class[1] -> ip_udp_class :: IPClassifier(tcp or udp,
|
||||
icmp type echo);
|
||||
ip_udp_class[0] -> [0]rw;
|
||||
ip_udp_class[1] -> [0]irw;
|
||||
17
samples/CoffeeScript/build.cake
Normal file
17
samples/CoffeeScript/build.cake
Normal file
@@ -0,0 +1,17 @@
|
||||
fs = require 'fs'
|
||||
|
||||
{print} = require 'sys'
|
||||
{spawn} = require 'child_process'
|
||||
|
||||
build = (callback) ->
|
||||
coffee = spawn 'coffee', ['-c', '-o', '.', '.']
|
||||
coffee.stderr.on 'data', (data) ->
|
||||
process.stderr.write data.toString()
|
||||
coffee.stdout.on 'data', (data) ->
|
||||
print data.toString()
|
||||
coffee.on 'exit', (code) ->
|
||||
callback?() if code is 0
|
||||
|
||||
task 'build', 'Build from source', ->
|
||||
build()
|
||||
|
||||
2
samples/Common Lisp/config.sexp
Normal file
2
samples/Common Lisp/config.sexp
Normal file
@@ -0,0 +1,2 @@
|
||||
((exe_name hello)
|
||||
(link_order (world hello)))
|
||||
103
samples/Common Lisp/rss.sexp
Normal file
103
samples/Common Lisp/rss.sexp
Normal file
@@ -0,0 +1,103 @@
|
||||
|
||||
(:TURTLE
|
||||
|
||||
(:@PREFIX "rdf:" "<http://www.w3.org/1999/02/22-rdf-syntax-ns#>")
|
||||
(:@PREFIX "owl:" "<http://www.w3.org/2002/07/owl#>")
|
||||
(:@PREFIX "dc:" "<http://purl.org/dc/elements/1.1/>")
|
||||
(:@PREFIX "xsd:" "<http://www.w3.org/2001/XMLSchema#>")
|
||||
(:@PREFIX "rdfs:" "<http://www.w3.org/2000/01/rdf-schema#>")
|
||||
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/channel>")
|
||||
|
||||
(:PREDICATE-OBJECT-LIST
|
||||
(:URIREF #1="<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>")
|
||||
(:OBJECTS
|
||||
(:QNAME "rdfs:Class")))
|
||||
|
||||
(:PREDICATE-OBJECT-LIST
|
||||
(:QNAME "rdfs:comment")
|
||||
(:OBJECTS
|
||||
(:STRING "An RSS information channel.")))
|
||||
|
||||
(:PREDICATE-OBJECT-LIST
|
||||
(:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS
|
||||
(:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
|
||||
(:PREDICATE-OBJECT-LIST
|
||||
(:QNAME "rdfs:label")
|
||||
(:OBJECTS
|
||||
(:STRING "Channel"))))
|
||||
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/description>")
|
||||
|
||||
(:PREDICATE-OBJECT-LIST
|
||||
(:URIREF #1#)
|
||||
(:OBJECTS
|
||||
(:QNAME "rdf:Property")))
|
||||
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
|
||||
(:OBJECTS (:STRING "A short text description of the subject.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Description")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:description"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/image>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS image.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Image"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/item>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS item.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Item"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/items>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
|
||||
(:OBJECTS
|
||||
(:STRING "Points to a list of rss:item elements that are members of the subject channel.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Items"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/link>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
|
||||
(:OBJECTS (:STRING "The URL to which an HTML rendering of the subject will link.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Link")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/name>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
|
||||
(:OBJECTS (:STRING "The text input field's (variable) name.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Name"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/textinput>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS text input.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Text Input"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/title>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
|
||||
(:OBJECTS (:STRING "A descriptive title for the channel.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Title")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:title"))))
|
||||
(:TRIPLES (:URIREF "<http://purl.org/rss/1.0/url>")
|
||||
(:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment")
|
||||
(:OBJECTS
|
||||
(:STRING
|
||||
"The URL of the image to used in the 'src' attribute of the channel's image tag when rendered as HTML.")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy")
|
||||
(:OBJECTS (:URIREF "<http://purl.org/rss/1.0/>")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "URL")))
|
||||
(:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier")))))
|
||||
13
samples/DNS Zone/sample.arpa
Normal file
13
samples/DNS Zone/sample.arpa
Normal file
@@ -0,0 +1,13 @@
|
||||
$ORIGIN 0.0.0.c.2.1.0.3.0.0.2.1.e.f.f.3.ip6.arpa.
|
||||
$TTL 60
|
||||
@ IN SOA ns root (
|
||||
2002042901 ; SERIAL
|
||||
7200 ; REFRESH
|
||||
600 ; RETRY
|
||||
36000000 ; EXPIRE
|
||||
120 ; MINIMUM
|
||||
)
|
||||
|
||||
NS ns.example.com.
|
||||
|
||||
c.a.7.e.d.7.e.f.f.f.0.2.8.0.a.0 PTR sip01.example.com.
|
||||
12
samples/DNS Zone/sneaky.net.zone
Normal file
12
samples/DNS Zone/sneaky.net.zone
Normal file
@@ -0,0 +1,12 @@
|
||||
$TTL 3d
|
||||
@ IN SOA root.localhost. root.sneaky.net. (
|
||||
2015042907 ; serial
|
||||
3d ; refresh
|
||||
1h ; retry
|
||||
12d ; expire
|
||||
2h ; negative response TTL
|
||||
)
|
||||
IN NS root.localhost.
|
||||
IN NS localhost. ; secondary name server is preferably externally maintained
|
||||
|
||||
www IN A 3.141.59.26
|
||||
3608
samples/Formatted/NiAlH_jea.eam.fs
Normal file
3608
samples/Formatted/NiAlH_jea.eam.fs
Normal file
File diff suppressed because it is too large
Load Diff
31
samples/FreeMarker/example.ftl
Normal file
31
samples/FreeMarker/example.ftl
Normal file
@@ -0,0 +1,31 @@
|
||||
<#import "layout.ftl" as layout>
|
||||
|
||||
<#assign results = [
|
||||
{
|
||||
"title": "Example Result",
|
||||
"description": "Lorem ipsum dolor sit amet, pede id pellentesque, sollicitudin turpis sed in sed sed, libero dictum."
|
||||
}
|
||||
] />
|
||||
|
||||
<@layout.page title="FreeMarker Example">
|
||||
<#if results?size == 0>
|
||||
There were no results.
|
||||
<#else>
|
||||
<ul>
|
||||
<#list results as result>
|
||||
<li>
|
||||
<strong>${result.title}</strong>
|
||||
<p>${result.description}</p>
|
||||
</li>
|
||||
</#list>
|
||||
</ul>
|
||||
</#if>
|
||||
|
||||
<#-- This is a FreeMarker comment -->
|
||||
<@currentTime />
|
||||
</@layout.page>
|
||||
|
||||
|
||||
<#macro currentTime>
|
||||
${.now?string.full}
|
||||
</#macro>
|
||||
32
samples/FreeMarker/layout.ftl
Normal file
32
samples/FreeMarker/layout.ftl
Normal file
@@ -0,0 +1,32 @@
|
||||
<#ftl strip_text=true />
|
||||
|
||||
<#macro page title>
|
||||
<!doctype html>
|
||||
<html lang="${.lang}">
|
||||
<head>
|
||||
<title>${title}</title>
|
||||
<@metaTags />
|
||||
</head>
|
||||
<body>
|
||||
<#nested />
|
||||
<@footer />
|
||||
</body>
|
||||
</html>
|
||||
</#macro>
|
||||
|
||||
|
||||
<#---
|
||||
Default meta tags
|
||||
-->
|
||||
<#macro metaTags>
|
||||
<#compress>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<meta name="format-detection" content="telephone=no">
|
||||
</#compress>
|
||||
</#macro>
|
||||
|
||||
<#macro footer>
|
||||
<p>This page is using FreeMarker v${.version}</p>
|
||||
</#macro>
|
||||
25912
samples/G-code/lm.g
25912
samples/G-code/lm.g
File diff suppressed because it is too large
Load Diff
29735
samples/G-code/rm.g
29735
samples/G-code/rm.g
File diff suppressed because it is too large
Load Diff
6
samples/HCL/example.hcl
Normal file
6
samples/HCL/example.hcl
Normal file
@@ -0,0 +1,6 @@
|
||||
consul = "1.2.3.4"
|
||||
|
||||
// This is a comment
|
||||
template "foo" {
|
||||
bar = "zip"
|
||||
}
|
||||
13
samples/HCL/example.tf
Normal file
13
samples/HCL/example.tf
Normal file
@@ -0,0 +1,13 @@
|
||||
resource "aws_instance" "web" {
|
||||
// Copies the myapp.conf file to /etc/myapp.conf
|
||||
provisioner "file" {
|
||||
source = "conf/myapp.conf"
|
||||
destination = "/etc/myapp.conf"
|
||||
}
|
||||
|
||||
// Copies the configs.d folder to /etc/configs.d
|
||||
provisioner "file" {
|
||||
source = "conf/configs.d"
|
||||
destination = "/etc"
|
||||
}
|
||||
}
|
||||
26
samples/HTML+EEX/index.html.eex
Normal file
26
samples/HTML+EEX/index.html.eex
Normal file
@@ -0,0 +1,26 @@
|
||||
<h1>Listing Books</h1>
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<th>Title</th>
|
||||
<th>Summary</th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
|
||||
<%= for book <- @books do %>
|
||||
<tr>
|
||||
<%# comment %>
|
||||
<td><%= book.title %></td>
|
||||
<td><%= book.content %></td>
|
||||
<td><%= link "Show", to: book_path(@conn, :show, book) %></td>
|
||||
<td><%= link "Edit", to: book_path(@conn, :edit, book) %></td>
|
||||
<td><%= link "Delete", to: book_path(@conn, :delete, book), method: :delete, data: [confirm: "Are you sure?"] %></td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
|
||||
<br />
|
||||
|
||||
<%= link "New book", to: book_path(@conn, :new) %>
|
||||
31
samples/HTML/rpanel.inc
Normal file
31
samples/HTML/rpanel.inc
Normal file
@@ -0,0 +1,31 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<link rel="stylesheet" charset="UTF-8" type="text/css" href="main.css">
|
||||
<meta charset="UTF-8">
|
||||
</head>
|
||||
<body>
|
||||
<div id="panel_header_main_form">
|
||||
<p id="panel_header_main_form_title">Поддержка:</p>
|
||||
</div>
|
||||
<table>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<p>Москва:</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>+7-902-7-800-807</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<p>Регионы:</p>
|
||||
</td>
|
||||
<td>
|
||||
<p>+7-902-7-800-807</p>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</body>
|
||||
5
samples/HTML/tailDel.inc
Normal file
5
samples/HTML/tailDel.inc
Normal file
@@ -0,0 +1,5 @@
|
||||
</UL>
|
||||
<P><A HREF="devices.html">Supported Targets</A></P>
|
||||
</BODY>
|
||||
</HEAD>
|
||||
|
||||
@@ -1,6 +1,74 @@
|
||||
Version 1 of Trivial Extension by Andrew Plotkin begins here.
|
||||
Version 2 of Trivial Extension by Andrew Plotkin begins here.
|
||||
|
||||
"This is the rubric of the extension."
|
||||
|
||||
"provided for the Linguist package by Andrew Plotkin"
|
||||
|
||||
[Note the two special quoted lines above.]
|
||||
|
||||
A cow is a kind of animal. A cow can be purple.
|
||||
|
||||
Understand "cow" as a cow.
|
||||
Understand "purple" as a purple cow.
|
||||
|
||||
Check pushing a cow:
|
||||
instead say "Cow-tipping, at your age?[paragraph break]Inconceivable."
|
||||
|
||||
[Here are the possible levels of heading:]
|
||||
|
||||
Volume One
|
||||
|
||||
Text-line is always "A line of text."
|
||||
|
||||
Book 2
|
||||
|
||||
Part the third - indented headings still count
|
||||
|
||||
Chapter IV - not for release
|
||||
|
||||
[Heading labels are case-insensitive.]
|
||||
|
||||
section foobar
|
||||
|
||||
[A line beginning "Volume" that does not have blank lines before and after it is *not* a header line. So the following should all be part of section foobar. Sadly, the "Volume is..." line gets colored as a header, because Atom's regexp model can't recognize "thing with blank lines before and after"!]
|
||||
|
||||
Measure is a kind of value.
|
||||
Volume is a measure. Length is a measure.
|
||||
Area is a measure.
|
||||
|
||||
[And now some Inform 6 inclusions.]
|
||||
|
||||
To say em -- running on:
|
||||
(- style underline; -).
|
||||
To say /em -- running on:
|
||||
(- style roman; -).
|
||||
|
||||
Include (-
|
||||
|
||||
! Inform 6 comments start with a ! mark and run to the end of the line.
|
||||
Global cowcount;
|
||||
|
||||
[ inform6func arg;
|
||||
print "Here is some text; ", (address) 'dictword', ".^";
|
||||
cowcount++; ! increment this variable
|
||||
];
|
||||
|
||||
Object i6cow
|
||||
with name 'cow' 'animal',
|
||||
with description "It looks like a cow.",
|
||||
has animate scenery;
|
||||
|
||||
-) after "Global Variables" in "Output.i6t".
|
||||
|
||||
Trivial Extension ends here.
|
||||
|
||||
---- DOCUMENTATION ----
|
||||
|
||||
Everything after the "---- DOCUMENTATION ----" line is documentation, so it should have the comment style.
|
||||
|
||||
However, tab-indented lines are sample Inform code within the documentation:
|
||||
|
||||
Horns are a kind of thing. Every cow has horns.
|
||||
say "Moo[if the noun is purple] indigo[end if]."
|
||||
|
||||
So we need to allow for that.
|
||||
|
||||
@@ -2,11 +2,61 @@
|
||||
|
||||
Include Trivial Extension by Andrew Plotkin.
|
||||
|
||||
Volume 1 - overview
|
||||
|
||||
Chapter - setting the scene
|
||||
|
||||
The Kitchen is a room.
|
||||
|
||||
[This kitchen is modelled after the one in Zork, although it lacks the detail to establish this to the player.]
|
||||
[Comment: this kitchen is modelled after the one in Zork, although it lacks the detail to establish this to the player.]
|
||||
|
||||
Section - the kitchen table
|
||||
|
||||
The spicerack is a container in the Kitchen.
|
||||
|
||||
Table of Spices
|
||||
Name Flavor
|
||||
"cinnamon" 5
|
||||
"nutmeg" 4
|
||||
"szechuan pepper" 8
|
||||
|
||||
The description of the spicerack is "It's mostly empty."
|
||||
|
||||
Chapter - a character
|
||||
|
||||
A purple cow called Gelett is in the Kitchen.
|
||||
|
||||
[This comment spans multiple lines..
|
||||
|
||||
...and this line contains [nested square[] brackets]...
|
||||
|
||||
...which is legal in Inform 7.]
|
||||
|
||||
Instead of examining Gelett:
|
||||
say "You'd rather see than be one."
|
||||
|
||||
Instead of examining Gelett:
|
||||
say "You'd rather see than be one."
|
||||
|
||||
Check smelling Gelett:
|
||||
say "This text contains several lines.
|
||||
|
||||
A blank line is displayed as a paragraph break,
|
||||
but a simple line break is not.";
|
||||
stop the action.
|
||||
|
||||
Section - cow catching
|
||||
|
||||
Gelett has a number called the mooness.
|
||||
|
||||
Instead of taking Gelett:
|
||||
increment the mooness of Gelett;
|
||||
if the mooness of Gelett is one:
|
||||
say "Gelett moos once.";
|
||||
else:
|
||||
say "Gelett moos [mooness of Gelett in words] times.";
|
||||
|
||||
Volume 2 - the turn cycle
|
||||
|
||||
Every turn:
|
||||
say "A turn passes[one of][or] placidly[or] idly[or] tediously[at random]."
|
||||
|
||||
1104
samples/Isabelle ROOT/filenames/ROOT
Normal file
1104
samples/Isabelle ROOT/filenames/ROOT
Normal file
File diff suppressed because it is too large
Load Diff
82
samples/JSON/geo.geojson
Normal file
82
samples/JSON/geo.geojson
Normal file
@@ -0,0 +1,82 @@
|
||||
{
|
||||
"type": "FeatureCollection",
|
||||
"features": [
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"name": "Australia Post - North Ryde BC",
|
||||
"geo": [-33.787792, 151.13288],
|
||||
"streetAddress": "11 Waterloo Road",
|
||||
"addressLocality": "Macquarie Park",
|
||||
"addressRegion": "New South Wales",
|
||||
"addressCountry": "Australia",
|
||||
"postalCode": "2113"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Point",
|
||||
"coordinates": [151.13288, -33.787792, 0]
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"name": "George Weston Foods Limited",
|
||||
"geo": [-37.8263884, 144.9105381],
|
||||
"streetAddress": "Level 3, 187 Todd Road",
|
||||
"addressLocality": "Port Melbourne",
|
||||
"addressRegion": "Victoria",
|
||||
"addressCountry": "Australia",
|
||||
"postalCode": "3207"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[144.9097088901841, -37.82622654171794, 0],
|
||||
[144.9099724266943, -37.82679388891783, 0],
|
||||
[144.9110127325916, -37.82651526396403, 0],
|
||||
[144.9112227645738, -37.82655667152123, 0],
|
||||
[144.9113739439796, -37.82618552508767, 0],
|
||||
[144.9112740633105, -37.82615750100924, 0],
|
||||
[144.9111355846674, -37.82584493693527, 0],
|
||||
[144.9097088901841, -37.82622654171794, 0]
|
||||
]
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"type": "Feature",
|
||||
"properties": {
|
||||
"name": "George Weston Foods Limited",
|
||||
"geo": [-37.05202791502396, 144.2085614999388],
|
||||
"streetAddress": "67 Richards Road",
|
||||
"addressLocality": "Castlemaine",
|
||||
"addressRegion": "Victoria",
|
||||
"addressCountry": "Australia",
|
||||
"postalCode": "3450"
|
||||
},
|
||||
"geometry": {
|
||||
"type": "Polygon",
|
||||
"coordinates": [
|
||||
[
|
||||
[144.2052428913937, -37.04906391287216, 0],
|
||||
[144.205540392692, -37.05049727485623, 0],
|
||||
[144.2059800881858, -37.05066835966983, 0],
|
||||
[144.206490656024, -37.05279538900776, 0],
|
||||
[144.2064525845008, -37.05366195881602, 0],
|
||||
[144.2084322301922, -37.0538920493147, 0],
|
||||
[144.2084811895712, -37.05266519735124, 0],
|
||||
[144.2079784002005, -37.05041270555773, 0],
|
||||
[144.2074017905817, -37.04817406993293, 0],
|
||||
[144.2061363939852, -37.04834972871226, 0],
|
||||
[144.2052428913937, -37.04906391287216, 0]
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
1
samples/JSON/switzerland.topojson
Normal file
1
samples/JSON/switzerland.topojson
Normal file
File diff suppressed because one or more lines are too long
23
samples/JSX/sample.jsx
Normal file
23
samples/JSX/sample.jsx
Normal file
@@ -0,0 +1,23 @@
|
||||
'use strict';
|
||||
|
||||
const React = require('react')
|
||||
|
||||
module.exports = React.createClass({
|
||||
render: function() {
|
||||
let {feeds, log} = this.props;
|
||||
|
||||
log.info(feeds);
|
||||
return <div className="feed-list">
|
||||
<h3>News Feed's</h3>
|
||||
<ul>
|
||||
{feeds.map(function(feed) {
|
||||
return <li key={feed.name} className={feed.fetched ? 'loaded' : 'loading'}>
|
||||
{feed.data && feed.data.length > 0 ?
|
||||
<span>{feed.name} <span className='light'>({feed.data.length})</span></span>
|
||||
: 'feed.name' }
|
||||
</li>
|
||||
})}
|
||||
</ul>
|
||||
</div>;
|
||||
}
|
||||
});
|
||||
19
samples/JavaScript/logo.jscad
Normal file
19
samples/JavaScript/logo.jscad
Normal file
@@ -0,0 +1,19 @@
|
||||
// title : OpenJSCAD.org Logo
|
||||
// author : Rene K. Mueller
|
||||
// license : MIT License
|
||||
// revision : 0.003
|
||||
// tags : Logo,Intersection,Sphere,Cube
|
||||
// file : logo.jscad
|
||||
|
||||
function main() {
|
||||
return union(
|
||||
difference(
|
||||
cube({size: 3, center: true}),
|
||||
sphere({r:2, center: true})
|
||||
),
|
||||
intersection(
|
||||
sphere({r: 1.3, center: true}),
|
||||
cube({size: 2.1, center: true})
|
||||
)
|
||||
).translate([0,0,1.5]).scale(10);
|
||||
}
|
||||
210
samples/Jupyter Notebook/JupyterNotebook.ipynb
Normal file
210
samples/Jupyter Notebook/JupyterNotebook.ipynb
Normal file
File diff suppressed because one or more lines are too long
928
samples/KiCad/nrf-bga.kicad_pcb
Normal file
928
samples/KiCad/nrf-bga.kicad_pcb
Normal file
@@ -0,0 +1,928 @@
|
||||
(kicad_pcb (version 4) (host pcbnew "(2014-08-05 BZR 5054)-product")
|
||||
|
||||
(general
|
||||
(links 36)
|
||||
(no_connects 0)
|
||||
(area 146.9984 92.8984 164.465656 112.3572)
|
||||
(thickness 1.6)
|
||||
(drawings 0)
|
||||
(tracks 108)
|
||||
(zones 0)
|
||||
(modules 12)
|
||||
(nets 54)
|
||||
)
|
||||
|
||||
(page A4)
|
||||
(layers
|
||||
(0 F.Cu signal)
|
||||
(31 B.Cu signal)
|
||||
(32 B.Adhes user)
|
||||
(33 F.Adhes user)
|
||||
(34 B.Paste user)
|
||||
(35 F.Paste user)
|
||||
(36 B.SilkS user)
|
||||
(37 F.SilkS user)
|
||||
(38 B.Mask user)
|
||||
(39 F.Mask user)
|
||||
(40 Dwgs.User user)
|
||||
(41 Cmts.User user)
|
||||
(42 Eco1.User user)
|
||||
(43 Eco2.User user)
|
||||
(44 Edge.Cuts user)
|
||||
(45 Margin user)
|
||||
(46 B.CrtYd user)
|
||||
(47 F.CrtYd user)
|
||||
(48 B.Fab user)
|
||||
(49 F.Fab user)
|
||||
)
|
||||
|
||||
(setup
|
||||
(last_trace_width 0.1016)
|
||||
(trace_clearance 0.1016)
|
||||
(zone_clearance 0.2032)
|
||||
(zone_45_only no)
|
||||
(trace_min 0.1016)
|
||||
(segment_width 0.2)
|
||||
(edge_width 0.1)
|
||||
(via_size 0.889)
|
||||
(via_drill 0.635)
|
||||
(via_min_size 0.889)
|
||||
(via_min_drill 0.508)
|
||||
(uvia_size 0.508)
|
||||
(uvia_drill 0.127)
|
||||
(uvias_allowed no)
|
||||
(uvia_min_size 0.508)
|
||||
(uvia_min_drill 0.127)
|
||||
(pcb_text_width 0.3)
|
||||
(pcb_text_size 1.5 1.5)
|
||||
(mod_edge_width 0.15)
|
||||
(mod_text_size 1 1)
|
||||
(mod_text_width 0.15)
|
||||
(pad_size 0.2 0.2)
|
||||
(pad_drill 0)
|
||||
(pad_to_mask_clearance 0)
|
||||
(aux_axis_origin 0 0)
|
||||
(visible_elements FFFCFF7F)
|
||||
(pcbplotparams
|
||||
(layerselection 0x00000_00000001)
|
||||
(usegerberextensions false)
|
||||
(excludeedgelayer true)
|
||||
(linewidth 0.100000)
|
||||
(plotframeref false)
|
||||
(viasonmask false)
|
||||
(mode 1)
|
||||
(useauxorigin false)
|
||||
(hpglpennumber 1)
|
||||
(hpglpenspeed 20)
|
||||
(hpglpendiameter 15)
|
||||
(hpglpenoverlay 2)
|
||||
(psnegative false)
|
||||
(psa4output false)
|
||||
(plotreference true)
|
||||
(plotvalue true)
|
||||
(plotinvisibletext false)
|
||||
(padsonsilk false)
|
||||
(subtractmaskfromsilk false)
|
||||
(outputformat 5)
|
||||
(mirror true)
|
||||
(drillshape 0)
|
||||
(scaleselection 1)
|
||||
(outputdirectory pdfs/))
|
||||
)
|
||||
|
||||
(net 0 "")
|
||||
(net 1 "Net-(C1-Pad1)")
|
||||
(net 2 GND)
|
||||
(net 3 "Net-(C2-Pad1)")
|
||||
(net 4 "Net-(C3-Pad1)")
|
||||
(net 5 "Net-(C4-Pad2)")
|
||||
(net 6 "Net-(D1-Pad1)")
|
||||
(net 7 +BATT)
|
||||
(net 8 SWDIO)
|
||||
(net 9 SWCLK)
|
||||
(net 10 LED)
|
||||
(net 11 "Net-(U1-PadC1)")
|
||||
(net 12 "Net-(U1-PadD1)")
|
||||
(net 13 "Net-(U1-PadG1)")
|
||||
(net 14 "Net-(U1-PadE2)")
|
||||
(net 15 "Net-(U1-PadF2)")
|
||||
(net 16 "Net-(U1-PadG2)")
|
||||
(net 17 "Net-(U1-PadE3)")
|
||||
(net 18 "Net-(U1-PadF3)")
|
||||
(net 19 "Net-(U1-PadG3)")
|
||||
(net 20 "Net-(U1-PadH4)")
|
||||
(net 21 "Net-(U1-PadA5)")
|
||||
(net 22 "Net-(U1-PadB5)")
|
||||
(net 23 "Net-(U1-PadC5)")
|
||||
(net 24 "Net-(U1-PadH5)")
|
||||
(net 25 "Net-(U1-PadA6)")
|
||||
(net 26 "Net-(U1-PadB6)")
|
||||
(net 27 "Net-(U1-PadC6)")
|
||||
(net 28 "Net-(U1-PadH6)")
|
||||
(net 29 "Net-(U1-PadA7)")
|
||||
(net 30 "Net-(U1-PadB7)")
|
||||
(net 31 "Net-(U1-PadC7)")
|
||||
(net 32 "Net-(U1-PadE7)")
|
||||
(net 33 "Net-(U1-PadF7)")
|
||||
(net 34 "Net-(U1-PadG7)")
|
||||
(net 35 "Net-(U1-PadH7)")
|
||||
(net 36 "Net-(U1-PadA8)")
|
||||
(net 37 "Net-(U1-PadD8)")
|
||||
(net 38 "Net-(U1-PadE8)")
|
||||
(net 39 "Net-(U1-PadF8)")
|
||||
(net 40 "Net-(U1-PadG8)")
|
||||
(net 41 "Net-(U1-PadH8)")
|
||||
(net 42 "Net-(U1-PadE9)")
|
||||
(net 43 "Net-(U1-PadF9)")
|
||||
(net 44 "Net-(U1-PadH1)")
|
||||
(net 45 "Net-(U1-PadJ3)")
|
||||
(net 46 "Net-(U1-PadJ4)")
|
||||
(net 47 "Net-(U1-PadJ5)")
|
||||
(net 48 "Net-(U1-PadJ6)")
|
||||
(net 49 "Net-(U1-PadJ7)")
|
||||
(net 50 "Net-(U1-PadJ8)")
|
||||
(net 51 "Net-(U1-PadH9)")
|
||||
(net 52 "Net-(C5-Pad1)")
|
||||
(net 53 "Net-(ANT1-Pad2)")
|
||||
|
||||
(net_class Default "This is the default net class."
|
||||
(clearance 0.1016)
|
||||
(trace_width 0.1016)
|
||||
(via_dia 0.889)
|
||||
(via_drill 0.635)
|
||||
(uvia_dia 0.508)
|
||||
(uvia_drill 0.127)
|
||||
(add_net +BATT)
|
||||
(add_net LED)
|
||||
(add_net "Net-(C1-Pad1)")
|
||||
(add_net "Net-(C2-Pad1)")
|
||||
(add_net "Net-(C3-Pad1)")
|
||||
(add_net "Net-(C4-Pad2)")
|
||||
(add_net "Net-(C5-Pad1)")
|
||||
(add_net "Net-(D1-Pad1)")
|
||||
(add_net "Net-(U1-PadA5)")
|
||||
(add_net "Net-(U1-PadA6)")
|
||||
(add_net "Net-(U1-PadA7)")
|
||||
(add_net "Net-(U1-PadA8)")
|
||||
(add_net "Net-(U1-PadB5)")
|
||||
(add_net "Net-(U1-PadB6)")
|
||||
(add_net "Net-(U1-PadB7)")
|
||||
(add_net "Net-(U1-PadC1)")
|
||||
(add_net "Net-(U1-PadC5)")
|
||||
(add_net "Net-(U1-PadC6)")
|
||||
(add_net "Net-(U1-PadC7)")
|
||||
(add_net "Net-(U1-PadD1)")
|
||||
(add_net "Net-(U1-PadD8)")
|
||||
(add_net "Net-(U1-PadE2)")
|
||||
(add_net "Net-(U1-PadE3)")
|
||||
(add_net "Net-(U1-PadE7)")
|
||||
(add_net "Net-(U1-PadE8)")
|
||||
(add_net "Net-(U1-PadE9)")
|
||||
(add_net "Net-(U1-PadF2)")
|
||||
(add_net "Net-(U1-PadF3)")
|
||||
(add_net "Net-(U1-PadF7)")
|
||||
(add_net "Net-(U1-PadF8)")
|
||||
(add_net "Net-(U1-PadF9)")
|
||||
(add_net "Net-(U1-PadG1)")
|
||||
(add_net "Net-(U1-PadG2)")
|
||||
(add_net "Net-(U1-PadG3)")
|
||||
(add_net "Net-(U1-PadG7)")
|
||||
(add_net "Net-(U1-PadG8)")
|
||||
(add_net "Net-(U1-PadH1)")
|
||||
(add_net "Net-(U1-PadH4)")
|
||||
(add_net "Net-(U1-PadH5)")
|
||||
(add_net "Net-(U1-PadH6)")
|
||||
(add_net "Net-(U1-PadH7)")
|
||||
(add_net "Net-(U1-PadH8)")
|
||||
(add_net "Net-(U1-PadH9)")
|
||||
(add_net "Net-(U1-PadJ3)")
|
||||
(add_net "Net-(U1-PadJ4)")
|
||||
(add_net "Net-(U1-PadJ5)")
|
||||
(add_net "Net-(U1-PadJ6)")
|
||||
(add_net "Net-(U1-PadJ7)")
|
||||
(add_net "Net-(U1-PadJ8)")
|
||||
(add_net SWCLK)
|
||||
(add_net SWDIO)
|
||||
)
|
||||
|
||||
(net_class ANT ""
|
||||
(clearance 0.1016)
|
||||
(trace_width 0.254)
|
||||
(via_dia 0.889)
|
||||
(via_drill 0.635)
|
||||
(uvia_dia 0.508)
|
||||
(uvia_drill 0.127)
|
||||
(add_net GND)
|
||||
(add_net "Net-(ANT1-Pad2)")
|
||||
)
|
||||
|
||||
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59067)
|
||||
(at 153.75 102.5 270)
|
||||
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
|
||||
(tags "capacitor 0402")
|
||||
(path /54B59137)
|
||||
(attr smd)
|
||||
(fp_text reference C1 (at 0 -1.7 270) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value 12p (at 0 1.7 270) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 1 "Net-(C1-Pad1)"))
|
||||
(pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(model Capacitors_SMD/C_0402.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E0D)
|
||||
(at 159.004 100.711)
|
||||
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
|
||||
(tags "capacitor 0402")
|
||||
(path /54B591B6)
|
||||
(attr smd)
|
||||
(fp_text reference C2 (at 0 -1.7) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value 12p (at 0 1.7) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 3 "Net-(C2-Pad1)"))
|
||||
(pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(model Capacitors_SMD/C_0402.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59E9D)
|
||||
(at 159.004 102.1588)
|
||||
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
|
||||
(tags "capacitor 0402")
|
||||
(path /54B58D67)
|
||||
(attr smd)
|
||||
(fp_text reference C3 (at 0 -1.7) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value 100n (at 0 1.7) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 4 "Net-(C3-Pad1)"))
|
||||
(pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(model Capacitors_SMD/C_0402.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E25)
|
||||
(at 154.15 106.55 90)
|
||||
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
|
||||
(tags "capacitor 0402")
|
||||
(path /54B58DD5)
|
||||
(attr smd)
|
||||
(fp_text reference C4 (at 0 -1.7 90) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value 100n (at 0 1.7 90) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad 2 smd rect (at 0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 5 "Net-(C4-Pad2)"))
|
||||
(model Capacitors_SMD/C_0402.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module SMD_Packages:SMD-0805 (layer F.Cu) (tedit 54B58D88) (tstamp 54B58E32)
|
||||
(at 162.0266 104.9782 90)
|
||||
(path /54B599BA)
|
||||
(attr smd)
|
||||
(fp_text reference D1 (at 0 -0.3175 90) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value LED (at 0 0.381 90) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask)
|
||||
(net 6 "Net-(D1-Pad1)"))
|
||||
(pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(model SMD_Packages/SMD-0805.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 54B58D8A) (tstamp 54B58E41)
|
||||
(at 156.7942 109.1946 180)
|
||||
(descr "Through hole pin header")
|
||||
(tags "pin header")
|
||||
(path /54B593BB)
|
||||
(fp_text reference P1 (at 0 -2.286 180) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value CONN_01X04 (at 0 0 180) (layer F.SilkS) hide
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -2.54 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -2.54 -1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -5.08 -1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 5.08 1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -2.54 -1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -5.08 -1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -5.08 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 thru_hole rect (at -3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
|
||||
(net 2 GND))
|
||||
(pad 2 thru_hole oval (at -1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
|
||||
(net 7 +BATT))
|
||||
(pad 3 thru_hole oval (at 1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
|
||||
(net 8 SWDIO))
|
||||
(pad 4 thru_hole oval (at 3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS)
|
||||
(net 9 SWCLK))
|
||||
(model Pin_Headers/Pin_Header_Straight_1x04.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 54B59E20)
|
||||
(at 160.0454 105.0544 270)
|
||||
(descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)")
|
||||
(tags "resistor 0603")
|
||||
(path /54B59A45)
|
||||
(attr smd)
|
||||
(fp_text reference R1 (at 0 -1.9 270) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value R (at 0 1.9 270) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask)
|
||||
(net 10 LED))
|
||||
(pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask)
|
||||
(net 6 "Net-(D1-Pad1)"))
|
||||
(model Resistors_SMD/R_0603.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module Crystals_Oscillators_SMD:CX2520DB (layer F.Cu) (tedit 544FEDED) (tstamp 54B58E9A)
|
||||
(at 156.1084 101.3714)
|
||||
(path /54B5903E)
|
||||
(fp_text reference X1 (at 0 -2.25) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value CRYSTAL (at 0 2.5) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.25 1) (end 1.25 1) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 1.25 1) (end 1.25 -1) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start 1.25 -1) (end -1.25 -1) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -1.25 -1) (end -1.25 1) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)
|
||||
(net 1 "Net-(C1-Pad1)"))
|
||||
(pad 2 smd rect (at 0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)
|
||||
(net 3 "Net-(C2-Pad1)"))
|
||||
(pad 3 smd rect (at 0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 4 smd rect (at -0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask))
|
||||
)
|
||||
|
||||
(module NRF51:WLCSP62 (layer F.Cu) (tedit 54B59368) (tstamp 54B59DAD)
|
||||
(at 156.9212 105.1306)
|
||||
(path /54B58C30)
|
||||
(fp_text reference U1 (at 0 3.2) (layer F.SilkS)
|
||||
(effects (font (size 1.2 1.2) (thickness 0.2)))
|
||||
)
|
||||
(fp_text value nRF51x22-CEAA (at 0 -3.2) (layer F.SilkS)
|
||||
(effects (font (size 1.2 1.2) (thickness 0.2)))
|
||||
)
|
||||
(fp_line (start -1.6 -2) (end -2 -1.6) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start -2 -1.6) (end -2 2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start -2 2) (end 2 2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 2 2) (end 2 -2) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 2 -2) (end -1.6 -2) (layer F.SilkS) (width 0.2))
|
||||
(pad A1 smd circle (at -1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 7 +BATT))
|
||||
(pad B1 smd circle (at -1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad C1 smd circle (at -1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 11 "Net-(U1-PadC1)"))
|
||||
(pad D1 smd circle (at -1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 12 "Net-(U1-PadD1)"))
|
||||
(pad E1 smd circle (at -1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 52 "Net-(C5-Pad1)"))
|
||||
(pad F1 smd circle (at -1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 5 "Net-(C4-Pad2)"))
|
||||
(pad G1 smd circle (at -1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 13 "Net-(U1-PadG1)"))
|
||||
(pad H1 smd circle (at -1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 44 "Net-(U1-PadH1)"))
|
||||
(pad A2 smd circle (at -1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 1 "Net-(C1-Pad1)"))
|
||||
(pad E2 smd circle (at -1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 14 "Net-(U1-PadE2)"))
|
||||
(pad F2 smd circle (at -1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 15 "Net-(U1-PadF2)"))
|
||||
(pad G2 smd circle (at -1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 16 "Net-(U1-PadG2)"))
|
||||
(pad H2 smd circle (at -1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 9 SWCLK))
|
||||
(pad J2 smd circle (at -1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 8 SWDIO))
|
||||
(pad A3 smd circle (at -0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 3 "Net-(C2-Pad1)"))
|
||||
(pad E3 smd circle (at -0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 17 "Net-(U1-PadE3)"))
|
||||
(pad F3 smd circle (at -0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 18 "Net-(U1-PadF3)"))
|
||||
(pad G3 smd circle (at -0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 19 "Net-(U1-PadG3)"))
|
||||
(pad H3 smd circle (at -0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad J3 smd circle (at -0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 45 "Net-(U1-PadJ3)"))
|
||||
(pad A4 smd circle (at -0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 4 "Net-(C3-Pad1)"))
|
||||
(pad B4 smd circle (at -0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad G4 smd circle (at -0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad H4 smd circle (at -0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 20 "Net-(U1-PadH4)"))
|
||||
(pad J4 smd circle (at -0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 46 "Net-(U1-PadJ4)"))
|
||||
(pad A5 smd circle (at 0 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 21 "Net-(U1-PadA5)"))
|
||||
(pad B5 smd circle (at 0 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 22 "Net-(U1-PadB5)"))
|
||||
(pad C5 smd circle (at 0 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 23 "Net-(U1-PadC5)"))
|
||||
(pad G5 smd circle (at 0 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad H5 smd circle (at 0 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 24 "Net-(U1-PadH5)"))
|
||||
(pad J5 smd circle (at 0 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 47 "Net-(U1-PadJ5)"))
|
||||
(pad A6 smd circle (at 0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 25 "Net-(U1-PadA6)"))
|
||||
(pad B6 smd circle (at 0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 26 "Net-(U1-PadB6)"))
|
||||
(pad C6 smd circle (at 0.4 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 27 "Net-(U1-PadC6)"))
|
||||
(pad G6 smd circle (at 0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad H6 smd circle (at 0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 28 "Net-(U1-PadH6)"))
|
||||
(pad J6 smd circle (at 0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 48 "Net-(U1-PadJ6)"))
|
||||
(pad A7 smd circle (at 0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 29 "Net-(U1-PadA7)"))
|
||||
(pad B7 smd circle (at 0.8 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 30 "Net-(U1-PadB7)"))
|
||||
(pad C7 smd circle (at 0.8 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 31 "Net-(U1-PadC7)"))
|
||||
(pad D7 smd circle (at 0.8 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad E7 smd circle (at 0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 32 "Net-(U1-PadE7)"))
|
||||
(pad F7 smd circle (at 0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 33 "Net-(U1-PadF7)"))
|
||||
(pad G7 smd circle (at 0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 34 "Net-(U1-PadG7)"))
|
||||
(pad H7 smd circle (at 0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 35 "Net-(U1-PadH7)"))
|
||||
(pad J7 smd circle (at 0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 49 "Net-(U1-PadJ7)"))
|
||||
(pad A8 smd circle (at 1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 36 "Net-(U1-PadA8)"))
|
||||
(pad B8 smd circle (at 1.2 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 7 +BATT))
|
||||
(pad C8 smd circle (at 1.2 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad D8 smd circle (at 1.2 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 37 "Net-(U1-PadD8)"))
|
||||
(pad E8 smd circle (at 1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 38 "Net-(U1-PadE8)"))
|
||||
(pad F8 smd circle (at 1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 39 "Net-(U1-PadF8)"))
|
||||
(pad G8 smd circle (at 1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 40 "Net-(U1-PadG8)"))
|
||||
(pad H8 smd circle (at 1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 41 "Net-(U1-PadH8)"))
|
||||
(pad J8 smd circle (at 1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 50 "Net-(U1-PadJ8)"))
|
||||
(pad A9 smd circle (at 1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask))
|
||||
(pad B9 smd circle (at 1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 7 +BATT))
|
||||
(pad C9 smd circle (at 1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad D9 smd circle (at 1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 10 LED))
|
||||
(pad E9 smd circle (at 1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 42 "Net-(U1-PadE9)"))
|
||||
(pad F9 smd circle (at 1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 43 "Net-(U1-PadF9)"))
|
||||
(pad G9 smd circle (at 1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(pad H9 smd circle (at 1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 51 "Net-(U1-PadH9)"))
|
||||
)
|
||||
|
||||
(module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 55048D3E)
|
||||
(at 153 106.55 270)
|
||||
(descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)")
|
||||
(tags "capacitor 0402")
|
||||
(path /550483E1)
|
||||
(attr smd)
|
||||
(fp_text reference C5 (at 0 -1.7 270) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value 2n2 (at 0 1.7 270) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15))
|
||||
(pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 52 "Net-(C5-Pad1)"))
|
||||
(pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
(model Capacitors_SMD.3dshapes/C_0402.wrl
|
||||
(at (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
|
||||
(module ANT:ANT-2.4GHz (layer F.Cu) (tedit 54517711) (tstamp 55049531)
|
||||
(at 149.35 106.95 90)
|
||||
(path /55047C3D)
|
||||
(fp_text reference ANT1 (at -2.5 1.5 90) (layer F.SilkS)
|
||||
(effects (font (size 0.4 0.4) (thickness 0.04)))
|
||||
)
|
||||
(fp_text value ANT-2.4GHz (at -2 2 90) (layer F.SilkS)
|
||||
(effects (font (size 0.4 0.4) (thickness 0.04)))
|
||||
)
|
||||
(pad 1 smd rect (at 0 0 90) (size 0.9 4.9) (layers F.Cu)
|
||||
(net 2 GND))
|
||||
(pad 3 smd rect (at 2.05 -2.7 90) (size 5 0.5) (layers F.Cu))
|
||||
(pad 2 smd rect (at 2.1 0 90) (size 0.5 4.9) (layers F.Cu)
|
||||
(net 53 "Net-(ANT1-Pad2)"))
|
||||
(pad 3 smd rect (at 4.3 -1.13 90) (size 0.5 2.64) (layers F.Cu))
|
||||
(pad 3 smd rect (at 6.8 -1.13 90) (size 0.5 2.64) (layers F.Cu))
|
||||
(pad 3 smd rect (at 5.55 -0.06 90) (size 2 0.5) (layers F.Cu))
|
||||
(pad 3 smd rect (at 7.9 -2.7 90) (size 2.7 0.5) (layers F.Cu))
|
||||
(pad 3 smd rect (at 12.6 -2.7 90) (size 2.7 0.5) (layers F.Cu))
|
||||
(pad 3 smd rect (at 9 -1.13 90) (size 0.5 2.64) (layers F.Cu))
|
||||
(pad 3 smd rect (at 11.5 -1.13 90) (size 0.5 2.64) (layers F.Cu))
|
||||
(pad 3 smd rect (at 10.25 -0.06 90) (size 2 0.5) (layers F.Cu))
|
||||
(pad 3 smd rect (at 13.7 -0.48 90) (size 0.5 3.94) (layers F.Cu))
|
||||
)
|
||||
|
||||
(module NRF51:BAL-NRF02D3 (layer F.Cu) (tedit 550C7CF1) (tstamp 55048D47)
|
||||
(at 153.65 104.55 180)
|
||||
(path /550480A2)
|
||||
(fp_text reference U2 (at 0 1.95 180) (layer F.SilkS)
|
||||
(effects (font (size 1.2 1.2) (thickness 0.2)))
|
||||
)
|
||||
(fp_text value BAL-NRF02D3 (at 0 -1.95 180) (layer F.SilkS)
|
||||
(effects (font (size 1.2 1.2) (thickness 0.2)))
|
||||
)
|
||||
(fp_circle (center 0.75 -1.25) (end 1 -1.25) (layer F.SilkS) (width 0.15))
|
||||
(fp_line (start -1 -0.75) (end -1 0.75) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start -1 0.75) (end 1 0.75) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 1 0.75) (end 1 -0.75) (layer F.SilkS) (width 0.2))
|
||||
(fp_line (start 1 -0.75) (end -1 -0.75) (layer F.SilkS) (width 0.2))
|
||||
(pad A3 smd circle (at -0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 12 "Net-(U1-PadD1)"))
|
||||
(pad B3 smd circle (at -0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 11 "Net-(U1-PadC1)"))
|
||||
(pad A2 smd circle (at 0 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 52 "Net-(C5-Pad1)"))
|
||||
(pad A1 smd circle (at 0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 53 "Net-(ANT1-Pad2)"))
|
||||
(pad B1 smd circle (at 0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)
|
||||
(net 2 GND))
|
||||
)
|
||||
|
||||
(segment (start 155.7212 102.5342) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1))
|
||||
(segment (start 155.7212 103.5306) (end 155.7212 102.5342) (width 0.1016) (layer F.Cu) (net 1))
|
||||
(segment (start 155.137 101.95) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1) (tstamp 55048FFD))
|
||||
(segment (start 153.75 101.95) (end 155.137 101.95) (width 0.1016) (layer F.Cu) (net 1))
|
||||
(segment (start 156.947646 104.7306) (end 156.7306 104.7306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.7306 104.7306) (end 156.5212 104.5212) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.5212 104.5212) (end 156.5212 104.072021) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.5212 104.072021) (end 156.5212 103.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.1212 106.3306) (end 156.5212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.5212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 157.3212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 157.7212 104.7306) (end 156.947646 104.7306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.5212 103.9306) (end 155.3212 103.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.9212 104.757046) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 156.947646 104.7306) (end 156.9212 104.757046) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 157.7212 104.7306) (end 158.1212 104.3306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 158.1212 104.3306) (end 158.5212 104.3306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 161.2265 103.4796) (end 161.7726 104.0257) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 159.3722 103.4796) (end 161.2265 103.4796) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 161.7726 104.0257) (end 162.0266 104.0257) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 159.554 101.0626) (end 159.554 102.1588) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 159.554 100.711) (end 159.554 101.0626) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 159.3722 102.6922) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 159.554 102.5104) (end 159.3722 102.6922) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 159.554 102.1588) (end 159.554 102.5104) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 159.3722 103.621021) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 158.5212 104.3306) (end 158.662621 104.3306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 158.662621 104.3306) (end 159.3722 103.621021) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 155.0306 103.9306) (end 154.15 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FDD))
|
||||
(segment (start 154.15 103.05) (end 153.75 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FEF))
|
||||
(segment (start 155.3212 103.9306) (end 155.0306 103.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 154.15 107.1) (end 153 107.1) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 160.6042 108.3542) (end 160.6042 109.1946) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504935E))
|
||||
(segment (start 158.5212 105.9306) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 160.85 105.05) (end 159.4 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049373))
|
||||
(segment (start 159.4 105.05) (end 159.05 105.4) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049377))
|
||||
(segment (start 159.05 105.4) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049378))
|
||||
(segment (start 161.8743 104.0257) (end 160.85 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049366))
|
||||
(segment (start 162.0266 104.0257) (end 161.8743 104.0257) (width 0.1016) (layer F.Cu) (net 2))
|
||||
(segment (start 149.5 107.1) (end 149.35 106.95) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504964A) (status 30))
|
||||
(segment (start 149.5 107.1) (end 149.35 106.95) (width 0.254) (layer F.Cu) (net 2) (tstamp 5504967F) (status 30))
|
||||
(segment (start 153 107.1) (end 149.5 107.1) (width 0.254) (layer F.Cu) (net 2) (status 20))
|
||||
(segment (start 158.4436 100.7214) (end 158.454 100.711) (width 0.1016) (layer F.Cu) (net 3))
|
||||
(segment (start 157.0084 100.7214) (end 158.4436 100.7214) (width 0.1016) (layer F.Cu) (net 3))
|
||||
(segment (start 156.6786 100.7214) (end 157.0084 100.7214) (width 0.1016) (layer F.Cu) (net 3))
|
||||
(segment (start 156.1084 101.2916) (end 156.6786 100.7214) (width 0.1016) (layer F.Cu) (net 3))
|
||||
(segment (start 156.1084 103.5178) (end 156.1084 101.2916) (width 0.1016) (layer F.Cu) (net 3))
|
||||
(segment (start 156.1212 103.5306) (end 156.1084 103.5178) (width 0.1016) (layer F.Cu) (net 3))
|
||||
(segment (start 156.5212 103.389179) (end 157.014979 102.8954) (width 0.1016) (layer F.Cu) (net 4))
|
||||
(segment (start 156.5212 103.5306) (end 156.5212 103.389179) (width 0.1016) (layer F.Cu) (net 4))
|
||||
(segment (start 157.6674 102.8954) (end 158.404 102.1588) (width 0.1016) (layer F.Cu) (net 4))
|
||||
(segment (start 158.404 102.1588) (end 158.454 102.1588) (width 0.1016) (layer F.Cu) (net 4))
|
||||
(segment (start 157.014979 102.8954) (end 157.6674 102.8954) (width 0.1016) (layer F.Cu) (net 4))
|
||||
(segment (start 154.45 106) (end 154.9194 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 5504901F))
|
||||
(segment (start 154.9194 105.5306) (end 155.3212 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 55049021))
|
||||
(segment (start 154.15 106) (end 154.45 106) (width 0.1016) (layer F.Cu) (net 5))
|
||||
(segment (start 160.1717 105.9307) (end 160.0454 105.8044) (width 0.1016) (layer F.Cu) (net 6))
|
||||
(segment (start 162.0266 105.9307) (end 160.1717 105.9307) (width 0.1016) (layer F.Cu) (net 6))
|
||||
(segment (start 159 99.9) (end 159.05 99.9) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 159.35 99.6) (end 161.2 99.6) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 158.25 111.15) (end 158.0642 110.9642) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 159.05 99.9) (end 159.35 99.6) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 161.2 99.6) (end 163.35 101.75) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 163.35 101.75) (end 163.35 110.35) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 163.35 110.35) (end 162.55 111.15) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 158.0642 110.9642) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 162.55 111.15) (end 158.25 111.15) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 158.5212 103.9306) (end 158.1212 103.9306) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 158.0642 109.347) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 159 99.9) (end 159 103.593221) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 158.662621 103.9306) (end 158.5212 103.9306) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 154.1 99.6) (end 158.7 99.6) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 153 102.3) (end 153 100.7) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 153.2 102.5) (end 153 102.3) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 158.7 99.6) (end 159 99.9) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 154.2906 102.5) (end 153.2 102.5) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 159 103.593221) (end 158.662621 103.9306) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 153 100.7) (end 154.1 99.6) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 155.3212 103.5306) (end 154.2906 102.5) (width 0.1016) (layer F.Cu) (net 7))
|
||||
(segment (start 155.7212 108.9976) (end 155.5242 109.1946) (width 0.1016) (layer F.Cu) (net 8))
|
||||
(segment (start 155.7212 106.7306) (end 155.7212 108.9976) (width 0.1016) (layer F.Cu) (net 8))
|
||||
(segment (start 152.9842 109.0676) (end 152.9842 109.1946) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 152.9842 109.1946) (end 152.9842 109.0422) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 155.2018 106.85) (end 155.7212 106.3306) (width 0.1016) (layer F.Cu) (net 9) (tstamp 55049280))
|
||||
(segment (start 155.1 106.95) (end 155.2 106.85) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 155.1 107.35) (end 155.1 106.95) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 154.55 107.9) (end 155.1 107.35) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 154.1264 107.9) (end 154.55 107.9) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 152.9842 109.0422) (end 154.1264 107.9) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 155.2 106.85) (end 155.2018 106.85) (width 0.1016) (layer F.Cu) (net 9))
|
||||
(segment (start 160.0454 104.3044) (end 159.4938 104.3044) (width 0.1016) (layer F.Cu) (net 10))
|
||||
(segment (start 158.662621 104.7306) (end 158.5212 104.7306) (width 0.1016) (layer F.Cu) (net 10))
|
||||
(segment (start 159.0676 104.7306) (end 158.662621 104.7306) (width 0.1016) (layer F.Cu) (net 10))
|
||||
(segment (start 159.4938 104.3044) (end 159.0676 104.7306) (width 0.1016) (layer F.Cu) (net 10))
|
||||
(segment (start 154.1806 104.3306) (end 154.15 104.3) (width 0.1016) (layer F.Cu) (net 11) (tstamp 5504938B))
|
||||
(segment (start 155.3212 104.3306) (end 154.1806 104.3306) (width 0.1016) (layer F.Cu) (net 11))
|
||||
(segment (start 154.2194 104.7306) (end 154.15 104.8) (width 0.1016) (layer F.Cu) (net 12) (tstamp 55049388))
|
||||
(segment (start 155.3212 104.7306) (end 154.2194 104.7306) (width 0.1016) (layer F.Cu) (net 12))
|
||||
(segment (start 155.3212 105.1306) (end 154.7194 105.1306) (width 0.1016) (layer F.Cu) (net 52))
|
||||
(segment (start 154.7194 105.1306) (end 154.6 105.25) (width 0.1016) (layer F.Cu) (net 52))
|
||||
(segment (start 154.6 105.25) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52))
|
||||
(segment (start 153.65 105.25) (end 153.65 104.8) (width 0.1016) (layer F.Cu) (net 52) (tstamp 5504901A))
|
||||
(segment (start 153.6 105.3) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049386))
|
||||
(segment (start 153 105.9) (end 153.6 105.3) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049018))
|
||||
(segment (start 153 106) (end 153 105.9) (width 0.1016) (layer F.Cu) (net 52))
|
||||
(segment (start 149.4 104.8) (end 149.35 104.85) (width 0.1016) (layer F.Cu) (net 53) (tstamp 55049543) (status 30))
|
||||
(segment (start 153.1 104.85) (end 153.15 104.8) (width 0.254) (layer F.Cu) (net 53) (tstamp 550495A4))
|
||||
(segment (start 149.35 104.85) (end 153.1 104.85) (width 0.254) (layer F.Cu) (net 53) (status 10))
|
||||
|
||||
(zone (net 2) (net_name GND) (layer F.Cu) (tstamp 550C7F83) (hatch edge 0.508)
|
||||
(connect_pads (clearance 0.2032))
|
||||
(min_thickness 0.1524)
|
||||
(fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5))
|
||||
(polygon
|
||||
(pts
|
||||
(xy 164 111.85) (xy 151.5 111.85) (xy 151.5 97.15) (xy 164 97.15)
|
||||
)
|
||||
)
|
||||
(filled_polygon
|
||||
(pts
|
||||
(xy 163.9238 111.318437) (xy 163.468437 111.7738) (xy 152.031563 111.7738) (xy 151.5762 111.318437) (xy 151.5762 107.6794)
|
||||
(xy 151.744424 107.6794) (xy 151.855576 107.6794) (xy 151.958267 107.636864) (xy 152.036864 107.558267) (xy 152.0794 107.455576)
|
||||
(xy 152.0794 107.02112) (xy 152.00955 106.95127) (xy 151.5762 106.95127) (xy 151.5762 106.94873) (xy 152.00955 106.94873)
|
||||
(xy 152.0794 106.87888) (xy 152.0794 106.444424) (xy 152.036864 106.341733) (xy 151.958267 106.263136) (xy 151.855576 106.2206)
|
||||
(xy 151.744424 106.2206) (xy 151.5762 106.2206) (xy 151.5762 105.3794) (xy 151.855576 105.3794) (xy 151.958267 105.336864)
|
||||
(xy 152.036864 105.258267) (xy 152.037637 105.2564) (xy 153.1 105.2564) (xy 153.195652 105.237373) (xy 153.012426 105.4206)
|
||||
(xy 152.694424 105.4206) (xy 152.591733 105.463136) (xy 152.513136 105.541733) (xy 152.4706 105.644424) (xy 152.4706 105.755576)
|
||||
(xy 152.4706 106.355576) (xy 152.513136 106.458267) (xy 152.591733 106.536864) (xy 152.623446 106.55) (xy 152.591733 106.563136)
|
||||
(xy 152.513136 106.641733) (xy 152.4706 106.744424) (xy 152.4706 107.02888) (xy 152.54045 107.09873) (xy 152.99873 107.09873)
|
||||
(xy 152.99873 107.07873) (xy 153.00127 107.07873) (xy 153.00127 107.09873) (xy 153.45955 107.09873) (xy 153.5294 107.02888)
|
||||
(xy 153.5294 106.744424) (xy 153.486864 106.641733) (xy 153.408267 106.563136) (xy 153.376553 106.55) (xy 153.408267 106.536864)
|
||||
(xy 153.486864 106.458267) (xy 153.5294 106.355576) (xy 153.5294 106.244424) (xy 153.5294 105.837574) (xy 153.6206 105.746374)
|
||||
(xy 153.6206 105.755576) (xy 153.6206 106.355576) (xy 153.663136 106.458267) (xy 153.741733 106.536864) (xy 153.773446 106.55)
|
||||
(xy 153.741733 106.563136) (xy 153.663136 106.641733) (xy 153.6206 106.744424) (xy 153.6206 107.02888) (xy 153.69045 107.09873)
|
||||
(xy 154.14873 107.09873) (xy 154.14873 107.07873) (xy 154.15127 107.07873) (xy 154.15127 107.09873) (xy 154.60955 107.09873)
|
||||
(xy 154.6794 107.02888) (xy 154.6794 106.744424) (xy 154.636864 106.641733) (xy 154.558267 106.563136) (xy 154.526553 106.55)
|
||||
(xy 154.558267 106.536864) (xy 154.636864 106.458267) (xy 154.6794 106.355576) (xy 154.6794 106.244424) (xy 154.6794 106.236217)
|
||||
(xy 154.683487 106.233487) (xy 154.7968 106.120174) (xy 154.7968 106.634168) (xy 154.872829 106.710197) (xy 154.866513 106.716513)
|
||||
(xy 154.794935 106.823638) (xy 154.7698 106.95) (xy 154.7698 107.213226) (xy 154.6794 107.303626) (xy 154.6794 107.17112)
|
||||
(xy 154.60955 107.10127) (xy 154.15127 107.10127) (xy 154.15127 107.12127) (xy 154.14873 107.12127) (xy 154.14873 107.10127)
|
||||
(xy 153.69045 107.10127) (xy 153.6206 107.17112) (xy 153.6206 107.455576) (xy 153.663136 107.558267) (xy 153.741733 107.636864)
|
||||
(xy 153.844424 107.6794) (xy 153.880026 107.6794) (xy 153.5294 108.030025) (xy 153.5294 107.455576) (xy 153.5294 107.17112)
|
||||
(xy 153.45955 107.10127) (xy 153.00127 107.10127) (xy 153.00127 107.60955) (xy 153.07112 107.6794) (xy 153.194424 107.6794)
|
||||
(xy 153.305576 107.6794) (xy 153.408267 107.636864) (xy 153.486864 107.558267) (xy 153.5294 107.455576) (xy 153.5294 108.030025)
|
||||
(xy 153.527705 108.03172) (xy 153.421607 107.960828) (xy 152.99873 107.876712) (xy 152.99873 107.60955) (xy 152.99873 107.10127)
|
||||
(xy 152.54045 107.10127) (xy 152.4706 107.17112) (xy 152.4706 107.455576) (xy 152.513136 107.558267) (xy 152.591733 107.636864)
|
||||
(xy 152.694424 107.6794) (xy 152.805576 107.6794) (xy 152.92888 107.6794) (xy 152.99873 107.60955) (xy 152.99873 107.876712)
|
||||
(xy 152.9842 107.873822) (xy 152.546793 107.960828) (xy 152.175977 108.208599) (xy 151.928206 108.579415) (xy 151.8412 109.016822)
|
||||
(xy 151.8412 109.372378) (xy 151.928206 109.809785) (xy 152.175977 110.180601) (xy 152.546793 110.428372) (xy 152.9842 110.515378)
|
||||
(xy 153.421607 110.428372) (xy 153.792423 110.180601) (xy 154.040194 109.809785) (xy 154.1272 109.372378) (xy 154.1272 109.016822)
|
||||
(xy 154.040194 108.579415) (xy 153.989631 108.503742) (xy 154.263173 108.2302) (xy 154.55 108.2302) (xy 154.676362 108.205065)
|
||||
(xy 154.783487 108.133487) (xy 155.333483 107.583489) (xy 155.333486 107.583487) (xy 155.333487 107.583487) (xy 155.391 107.497411)
|
||||
(xy 155.391 107.900317) (xy 155.086793 107.960828) (xy 154.715977 108.208599) (xy 154.468206 108.579415) (xy 154.3812 109.016822)
|
||||
(xy 154.3812 109.372378) (xy 154.468206 109.809785) (xy 154.715977 110.180601) (xy 155.086793 110.428372) (xy 155.5242 110.515378)
|
||||
(xy 155.961607 110.428372) (xy 156.332423 110.180601) (xy 156.580194 109.809785) (xy 156.6672 109.372378) (xy 156.6672 109.016822)
|
||||
(xy 156.580194 108.579415) (xy 156.332423 108.208599) (xy 156.0514 108.020825) (xy 156.0514 107.2532) (xy 158.434168 107.2532)
|
||||
(xy 159.0532 106.634168) (xy 159.0532 105.0608) (xy 159.0676 105.0608) (xy 159.193962 105.035665) (xy 159.301087 104.964087)
|
||||
(xy 159.463138 104.802035) (xy 159.539824 104.8338) (xy 159.650976 104.8338) (xy 160.550976 104.8338) (xy 160.653667 104.791264)
|
||||
(xy 160.732264 104.712667) (xy 160.7748 104.609976) (xy 160.7748 104.498824) (xy 160.7748 103.998824) (xy 160.732264 103.896133)
|
||||
(xy 160.653667 103.817536) (xy 160.550976 103.775) (xy 160.439824 103.775) (xy 160.1334 103.775) (xy 160.1334 102.464376)
|
||||
(xy 160.1334 102.353224) (xy 160.1334 102.22992) (xy 160.1334 102.08768) (xy 160.1334 101.964376) (xy 160.1334 101.853224)
|
||||
(xy 160.1334 101.016576) (xy 160.1334 100.905424) (xy 160.1334 100.78212) (xy 160.1334 100.63988) (xy 160.1334 100.516576)
|
||||
(xy 160.1334 100.405424) (xy 160.090864 100.302733) (xy 160.012267 100.224136) (xy 159.909576 100.1816) (xy 159.62512 100.1816)
|
||||
(xy 159.55527 100.25145) (xy 159.55527 100.70973) (xy 160.06355 100.70973) (xy 160.1334 100.63988) (xy 160.1334 100.78212)
|
||||
(xy 160.06355 100.71227) (xy 159.55527 100.71227) (xy 159.55527 101.17055) (xy 159.62512 101.2404) (xy 159.909576 101.2404)
|
||||
(xy 160.012267 101.197864) (xy 160.090864 101.119267) (xy 160.1334 101.016576) (xy 160.1334 101.853224) (xy 160.090864 101.750533)
|
||||
(xy 160.012267 101.671936) (xy 159.909576 101.6294) (xy 159.62512 101.6294) (xy 159.55527 101.69925) (xy 159.55527 102.15753)
|
||||
(xy 160.06355 102.15753) (xy 160.1334 102.08768) (xy 160.1334 102.22992) (xy 160.06355 102.16007) (xy 159.55527 102.16007)
|
||||
(xy 159.55527 102.61835) (xy 159.62512 102.6882) (xy 159.909576 102.6882) (xy 160.012267 102.645664) (xy 160.090864 102.567067)
|
||||
(xy 160.1334 102.464376) (xy 160.1334 103.775) (xy 159.539824 103.775) (xy 159.437133 103.817536) (xy 159.358536 103.896133)
|
||||
(xy 159.316 103.998824) (xy 159.316 104.033704) (xy 159.260313 104.070913) (xy 159.0532 104.278026) (xy 159.0532 104.006995)
|
||||
(xy 159.233487 103.826708) (xy 159.305065 103.719583) (xy 159.3302 103.593221) (xy 159.330201 103.593221) (xy 159.3302 103.593215)
|
||||
(xy 159.3302 102.6882) (xy 159.48288 102.6882) (xy 159.55273 102.61835) (xy 159.55273 102.16007) (xy 159.53273 102.16007)
|
||||
(xy 159.53273 102.15753) (xy 159.55273 102.15753) (xy 159.55273 101.69925) (xy 159.48288 101.6294) (xy 159.3302 101.6294)
|
||||
(xy 159.3302 101.2404) (xy 159.48288 101.2404) (xy 159.55273 101.17055) (xy 159.55273 100.71227) (xy 159.53273 100.71227)
|
||||
(xy 159.53273 100.70973) (xy 159.55273 100.70973) (xy 159.55273 100.25145) (xy 159.48288 100.1816) (xy 159.3302 100.1816)
|
||||
(xy 159.3302 100.086774) (xy 159.486774 99.9302) (xy 161.063226 99.9302) (xy 163.0198 101.886774) (xy 163.0198 110.213226)
|
||||
(xy 163.0045 110.228526) (xy 163.0045 106.430776) (xy 163.0045 106.319624) (xy 163.0045 105.430624) (xy 163.0045 104.525776)
|
||||
(xy 163.0045 104.09682) (xy 163.0045 103.95458) (xy 163.0045 103.525624) (xy 162.961964 103.422933) (xy 162.883367 103.344336)
|
||||
(xy 162.780676 103.3018) (xy 162.669524 103.3018) (xy 162.09772 103.3018) (xy 162.02787 103.37165) (xy 162.02787 104.02443)
|
||||
(xy 162.93465 104.02443) (xy 163.0045 103.95458) (xy 163.0045 104.09682) (xy 162.93465 104.02697) (xy 162.02787 104.02697)
|
||||
(xy 162.02787 104.67975) (xy 162.09772 104.7496) (xy 162.669524 104.7496) (xy 162.780676 104.7496) (xy 162.883367 104.707064)
|
||||
(xy 162.961964 104.628467) (xy 163.0045 104.525776) (xy 163.0045 105.430624) (xy 162.961964 105.327933) (xy 162.883367 105.249336)
|
||||
(xy 162.780676 105.2068) (xy 162.669524 105.2068) (xy 162.02533 105.2068) (xy 162.02533 104.67975) (xy 162.02533 104.02697)
|
||||
(xy 162.02533 104.02443) (xy 162.02533 103.37165) (xy 161.95548 103.3018) (xy 161.383676 103.3018) (xy 161.272524 103.3018)
|
||||
(xy 161.169833 103.344336) (xy 161.091236 103.422933) (xy 161.0487 103.525624) (xy 161.0487 103.95458) (xy 161.11855 104.02443)
|
||||
(xy 162.02533 104.02443) (xy 162.02533 104.02697) (xy 161.11855 104.02697) (xy 161.0487 104.09682) (xy 161.0487 104.525776)
|
||||
(xy 161.091236 104.628467) (xy 161.169833 104.707064) (xy 161.272524 104.7496) (xy 161.383676 104.7496) (xy 161.95548 104.7496)
|
||||
(xy 162.02533 104.67975) (xy 162.02533 105.2068) (xy 161.272524 105.2068) (xy 161.169833 105.249336) (xy 161.091236 105.327933)
|
||||
(xy 161.0487 105.430624) (xy 161.0487 105.541776) (xy 161.0487 105.6005) (xy 160.7748 105.6005) (xy 160.7748 105.498824)
|
||||
(xy 160.732264 105.396133) (xy 160.653667 105.317536) (xy 160.550976 105.275) (xy 160.439824 105.275) (xy 159.539824 105.275)
|
||||
(xy 159.437133 105.317536) (xy 159.358536 105.396133) (xy 159.316 105.498824) (xy 159.316 105.609976) (xy 159.316 106.109976)
|
||||
(xy 159.358536 106.212667) (xy 159.437133 106.291264) (xy 159.539824 106.3338) (xy 159.650976 106.3338) (xy 160.550976 106.3338)
|
||||
(xy 160.653667 106.291264) (xy 160.684031 106.2609) (xy 161.0487 106.2609) (xy 161.0487 106.430776) (xy 161.091236 106.533467)
|
||||
(xy 161.169833 106.612064) (xy 161.272524 106.6546) (xy 161.383676 106.6546) (xy 162.780676 106.6546) (xy 162.883367 106.612064)
|
||||
(xy 162.961964 106.533467) (xy 163.0045 106.430776) (xy 163.0045 110.228526) (xy 162.413226 110.8198) (xy 161.7472 110.8198)
|
||||
(xy 161.7472 110.266176) (xy 161.7472 110.155024) (xy 161.7472 109.26572) (xy 161.7472 109.12348) (xy 161.7472 108.234176)
|
||||
(xy 161.7472 108.123024) (xy 161.704664 108.020333) (xy 161.626067 107.941736) (xy 161.523376 107.8992) (xy 160.67532 107.8992)
|
||||
(xy 160.60547 107.96905) (xy 160.60547 109.19333) (xy 161.67735 109.19333) (xy 161.7472 109.12348) (xy 161.7472 109.26572)
|
||||
(xy 161.67735 109.19587) (xy 160.60547 109.19587) (xy 160.60547 110.42015) (xy 160.67532 110.49) (xy 161.523376 110.49)
|
||||
(xy 161.626067 110.447464) (xy 161.704664 110.368867) (xy 161.7472 110.266176) (xy 161.7472 110.8198) (xy 160.60293 110.8198)
|
||||
(xy 160.60293 110.42015) (xy 160.60293 109.19587) (xy 160.60293 109.19333) (xy 160.60293 107.96905) (xy 160.53308 107.8992)
|
||||
(xy 159.685024 107.8992) (xy 159.582333 107.941736) (xy 159.503736 108.020333) (xy 159.4612 108.123024) (xy 159.4612 108.234176)
|
||||
(xy 159.4612 109.12348) (xy 159.53105 109.19333) (xy 160.60293 109.19333) (xy 160.60293 109.19587) (xy 159.53105 109.19587)
|
||||
(xy 159.4612 109.26572) (xy 159.4612 110.155024) (xy 159.4612 110.266176) (xy 159.503736 110.368867) (xy 159.582333 110.447464)
|
||||
(xy 159.685024 110.49) (xy 160.53308 110.49) (xy 160.60293 110.42015) (xy 160.60293 110.8198) (xy 158.3944 110.8198)
|
||||
(xy 158.3944 110.449696) (xy 158.501607 110.428372) (xy 158.872423 110.180601) (xy 159.120194 109.809785) (xy 159.2072 109.372378)
|
||||
(xy 159.2072 109.016822) (xy 159.120194 108.579415) (xy 158.872423 108.208599) (xy 158.501607 107.960828) (xy 158.0642 107.873822)
|
||||
(xy 157.626793 107.960828) (xy 157.255977 108.208599) (xy 157.008206 108.579415) (xy 156.9212 109.016822) (xy 156.9212 109.372378)
|
||||
(xy 157.008206 109.809785) (xy 157.255977 110.180601) (xy 157.626793 110.428372) (xy 157.734 110.449696) (xy 157.734 110.9642)
|
||||
(xy 157.759135 111.090562) (xy 157.830713 111.197687) (xy 158.016513 111.383487) (xy 158.123638 111.455065) (xy 158.25 111.480201)
|
||||
(xy 158.25 111.4802) (xy 158.250005 111.4802) (xy 162.55 111.4802) (xy 162.676362 111.455065) (xy 162.783487 111.383487)
|
||||
(xy 163.583487 110.583487) (xy 163.655065 110.476362) (xy 163.6802 110.35) (xy 163.680201 110.35) (xy 163.6802 110.349994)
|
||||
(xy 163.6802 101.75) (xy 163.655065 101.623638) (xy 163.583487 101.516513) (xy 161.433487 99.366513) (xy 161.326362 99.294935)
|
||||
(xy 161.2 99.2698) (xy 159.35 99.2698) (xy 159.223638 99.294935) (xy 159.116513 99.366513) (xy 159.025 99.458026)
|
||||
(xy 158.933487 99.366513) (xy 158.826362 99.294935) (xy 158.7 99.2698) (xy 154.100005 99.2698) (xy 154.1 99.269799)
|
||||
(xy 153.973638 99.294935) (xy 153.866513 99.366513) (xy 152.766513 100.466513) (xy 152.694935 100.573638) (xy 152.6698 100.7)
|
||||
(xy 152.6698 102.3) (xy 152.694935 102.426362) (xy 152.766513 102.533487) (xy 152.96651 102.733483) (xy 152.966513 102.733487)
|
||||
(xy 152.966514 102.733487) (xy 153.073638 102.805065) (xy 153.2 102.830201) (xy 153.2 102.8302) (xy 153.200005 102.8302)
|
||||
(xy 153.2206 102.8302) (xy 153.2206 102.97888) (xy 153.29045 103.04873) (xy 153.74873 103.04873) (xy 153.74873 103.02873)
|
||||
(xy 153.75127 103.02873) (xy 153.75127 103.04873) (xy 154.20955 103.04873) (xy 154.2794 102.97888) (xy 154.2794 102.955773)
|
||||
(xy 154.868129 103.544502) (xy 154.7968 103.615832) (xy 154.7968 104.0004) (xy 154.387007 104.0004) (xy 154.365194 103.978548)
|
||||
(xy 154.2794 103.942923) (xy 154.2794 103.405576) (xy 154.2794 103.12112) (xy 154.20955 103.05127) (xy 153.75127 103.05127)
|
||||
(xy 153.75127 103.55955) (xy 153.82112 103.6294) (xy 153.944424 103.6294) (xy 154.055576 103.6294) (xy 154.158267 103.586864)
|
||||
(xy 154.236864 103.508267) (xy 154.2794 103.405576) (xy 154.2794 103.942923) (xy 154.225798 103.920666) (xy 154.074864 103.920534)
|
||||
(xy 153.935368 103.978173) (xy 153.887912 104.025544) (xy 153.74873 103.886362) (xy 153.74873 103.55955) (xy 153.74873 103.05127)
|
||||
(xy 153.29045 103.05127) (xy 153.2206 103.12112) (xy 153.2206 103.405576) (xy 153.263136 103.508267) (xy 153.341733 103.586864)
|
||||
(xy 153.444424 103.6294) (xy 153.555576 103.6294) (xy 153.67888 103.6294) (xy 153.74873 103.55955) (xy 153.74873 103.886362)
|
||||
(xy 153.675 103.812632) (xy 153.412173 104.075458) (xy 153.376346 104.076713) (xy 153.376346 103.986301) (xy 153.239069 103.92356)
|
||||
(xy 153.088231 103.91813) (xy 152.946798 103.970835) (xy 152.923654 103.986301) (xy 152.926759 104.074963) (xy 153.15 104.298204)
|
||||
(xy 153.373241 104.074963) (xy 153.376346 103.986301) (xy 153.376346 104.076713) (xy 153.375037 104.076759) (xy 153.151796 104.3)
|
||||
(xy 153.165938 104.314142) (xy 153.164142 104.315938) (xy 153.15 104.301796) (xy 153.135857 104.315938) (xy 153.134061 104.314142)
|
||||
(xy 153.148204 104.3) (xy 152.924963 104.076759) (xy 152.836301 104.073654) (xy 152.77356 104.210931) (xy 152.76813 104.361769)
|
||||
(xy 152.798624 104.4436) (xy 152.037637 104.4436) (xy 152.036864 104.441733) (xy 151.958267 104.363136) (xy 151.855576 104.3206)
|
||||
(xy 151.744424 104.3206) (xy 151.5762 104.3206) (xy 151.5762 97.681563) (xy 152.031563 97.2262) (xy 163.468437 97.2262)
|
||||
(xy 163.9238 97.681563) (xy 163.9238 111.318437)
|
||||
)
|
||||
)
|
||||
)
|
||||
(zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E3B) (hatch edge 0.508)
|
||||
(connect_pads (clearance 0.2032))
|
||||
(min_thickness 0.1524)
|
||||
(keepout (tracks allowed) (vias allowed) (copperpour not_allowed))
|
||||
(fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5))
|
||||
(polygon
|
||||
(pts
|
||||
(xy 153.9 104.55) (xy 153.45 104.55) (xy 153.45 104.1) (xy 153.9 104.1)
|
||||
)
|
||||
)
|
||||
)
|
||||
(zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E43) (hatch edge 0.508)
|
||||
(connect_pads (clearance 0.2032))
|
||||
(min_thickness 0.1524)
|
||||
(keepout (tracks allowed) (vias allowed) (copperpour not_allowed))
|
||||
(fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5))
|
||||
(polygon
|
||||
(pts
|
||||
(xy 158.85 107.05) (xy 155 107.05) (xy 155 103.2) (xy 158.85 103.2)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
14069
samples/KiCad/tc14badge.brd
Normal file
14069
samples/KiCad/tc14badge.brd
Normal file
File diff suppressed because it is too large
Load Diff
74
samples/LSL/LSL.lslp
Normal file
74
samples/LSL/LSL.lslp
Normal file
@@ -0,0 +1,74 @@
|
||||
/*
|
||||
Testing syntax highlighting
|
||||
for the Linden Scripting Language
|
||||
*/
|
||||
|
||||
integer someIntNormal = 3672;
|
||||
integer someIntHex = 0x00000000;
|
||||
integer someIntMath = PI_BY_TWO;
|
||||
|
||||
integer event = 5673;// 'event' is invalid.illegal
|
||||
|
||||
key someKeyTexture = TEXTURE_DEFAULT;
|
||||
string someStringSpecial = EOF;
|
||||
|
||||
some_user_defined_function_without_return_type(string inputAsString)
|
||||
{
|
||||
llSay(PUBLIC_CHANNEL, inputAsString);
|
||||
}
|
||||
|
||||
string user_defined_function_returning_a_string(key inputAsKey)
|
||||
{
|
||||
return (string)inputAsKey;
|
||||
}
|
||||
|
||||
default
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
key someKey = NULL_KEY;
|
||||
someKey = llGetOwner();
|
||||
|
||||
string someString = user_defined_function_returning_a_string(someKey);
|
||||
|
||||
some_user_defined_function_without_return_type(someString);
|
||||
}
|
||||
|
||||
touch_start(integer num_detected)
|
||||
{
|
||||
list agentsInRegion = llGetAgentList(AGENT_LIST_REGION, []);
|
||||
integer numOfAgents = llGetListLength(agentsInRegion);
|
||||
|
||||
integer index; // defaults to 0
|
||||
for (; index <= numOfAgents - 1; index++) // for each agent in region
|
||||
{
|
||||
llRegionSayTo(llList2Key(agentsInRegion, index), PUBLIC_CHANNEL, "Hello, Avatar!");
|
||||
}
|
||||
}
|
||||
|
||||
touch_end(integer num_detected)
|
||||
{
|
||||
someIntNormal = 3672;
|
||||
someIntHex = 0x00000000;
|
||||
someIntMath = PI_BY_TWO;
|
||||
|
||||
event = 5673;// 'event' is invalid.illegal
|
||||
|
||||
someKeyTexture = TEXTURE_DEFAULT;
|
||||
someStringSpecial = EOF;
|
||||
|
||||
llSetInventoryPermMask("some item", MASK_NEXT, PERM_ALL);// 'llSetInventoryPermMask' is reserved.godmode
|
||||
|
||||
llWhisper(PUBLIC_CHANNEL, "Leaving \"default\" now...");
|
||||
state other;
|
||||
}
|
||||
}
|
||||
|
||||
state other
|
||||
{
|
||||
state_entry()
|
||||
{
|
||||
llWhisper(PUBLIC_CHANNEL, "Entered \"state other\", returning to \"default\" again...");
|
||||
state default;
|
||||
}
|
||||
}
|
||||
2
samples/Linux Kernel Module/bcm4334x.mod
Normal file
2
samples/Linux Kernel Module/bcm4334x.mod
Normal file
@@ -0,0 +1,2 @@
|
||||
/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcm4334x.ko
|
||||
/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_pno.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_ip.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_custom_gpio.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_sched.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_wq.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/aiutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmevent.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmwifi_channels.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/hndpmu.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/linux_osl.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/sbutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/siutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_android.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfgp2p.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg_btcoex.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wldev_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_linux_mon.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_platdev.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cdc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_wlfc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_sdio.o
|
||||
2
samples/Linux Kernel Module/mbcache.mod
Normal file
2
samples/Linux Kernel Module/mbcache.mod
Normal file
@@ -0,0 +1,2 @@
|
||||
fs/mbcache.ko
|
||||
fs/mbcache.o
|
||||
2
samples/Linux Kernel Module/md5.mod
Normal file
2
samples/Linux Kernel Module/md5.mod
Normal file
@@ -0,0 +1,2 @@
|
||||
crypto/md5.ko
|
||||
crypto/md5.o
|
||||
29
samples/MAXScript/macro-1.mcr
Normal file
29
samples/MAXScript/macro-1.mcr
Normal file
@@ -0,0 +1,29 @@
|
||||
-- Taken from an example from Autodesk's MAXScript reference:
|
||||
-- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_84E24969_C175_4389_B9A6_3B2699B66785_htm
|
||||
|
||||
macroscript MoveToSurface
|
||||
category: "HowTo"
|
||||
(
|
||||
fn g_filter o = superclassof o == Geometryclass
|
||||
fn find_intersection z_node node_to_z = (
|
||||
local testRay = ray node_to_z.pos [0,0,-1]
|
||||
local nodeMaxZ = z_node.max.z
|
||||
testRay.pos.z = nodeMaxZ + 0.0001 * abs nodeMaxZ
|
||||
intersectRay z_node testRay
|
||||
)
|
||||
|
||||
on isEnabled return selection.count > 0
|
||||
|
||||
on Execute do (
|
||||
target_mesh = pickObject message:"Pick Target Surface:" filter:g_filter
|
||||
|
||||
if isValidNode target_mesh then (
|
||||
undo "MoveToSurface" on (
|
||||
for i in selection do (
|
||||
int_point = find_intersection target_mesh i
|
||||
if int_point != undefined then i.pos = int_point.pos
|
||||
)--end i loop
|
||||
)--end undo
|
||||
)--end if
|
||||
)--end execute
|
||||
)--end script
|
||||
53
samples/MAXScript/macro-2.mcr
Normal file
53
samples/MAXScript/macro-2.mcr
Normal file
@@ -0,0 +1,53 @@
|
||||
-- Taken from an example from Autodesk's MAXScript reference:
|
||||
-- http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_0876DF46_FAA3_4131_838D_5739A67FF2C1_htm
|
||||
|
||||
macroscript FreeSpline category:"HowTo" tooltip:"FreeSpline" (
|
||||
local old_pos
|
||||
local new_spline
|
||||
local second_knot_set
|
||||
|
||||
fn get_mouse_pos pen_pos old_pen_pos = (
|
||||
if old_pos == undefined then old_pos = old_pen_pos
|
||||
if distance pen_pos old_pos > 10 then
|
||||
(
|
||||
if second_knot_set then
|
||||
addKnot new_spline 1 #smooth #curve pen_pos
|
||||
else
|
||||
(
|
||||
setKnotPoint new_spline 1 2 pen_pos
|
||||
second_knot_set = true
|
||||
)
|
||||
old_pos = pen_pos
|
||||
updateShape new_spline
|
||||
)-- end if
|
||||
)-- end fn
|
||||
|
||||
fn draw_new_line old_pen_pos = (
|
||||
pickPoint mouseMoveCallback:#(get_mouse_pos,old_pen_pos)
|
||||
)
|
||||
|
||||
undo"Free Spline"on(
|
||||
new_spline = splineShape ()
|
||||
old_pen_pos = pickPoint ()
|
||||
|
||||
if old_pen_pos == #RightClick then
|
||||
delete new_spline
|
||||
else
|
||||
(
|
||||
select new_spline
|
||||
new_spline.pos = old_pen_pos
|
||||
addNewSpline new_spline
|
||||
addKnot new_spline 1 #smooth #curve old_pen_pos
|
||||
addKnot new_spline 1 #smooth #curve old_pen_pos
|
||||
second_knot_set = false
|
||||
draw_new_line old_pen_pos
|
||||
q = querybox "Close Spline?" title:"Free Spline"
|
||||
if q then
|
||||
(
|
||||
close new_spline 1
|
||||
updateshape new_spline
|
||||
)
|
||||
select new_spline
|
||||
)--end else
|
||||
)--end undo
|
||||
)--end script
|
||||
64
samples/MAXScript/svg-renderer.ms
Normal file
64
samples/MAXScript/svg-renderer.ms
Normal file
@@ -0,0 +1,64 @@
|
||||
-- Taken from a 3-part tutorial from Autodesk's MAXScript reference
|
||||
-- Source: http://help.autodesk.com/view/3DSMAX/2016/ENU/?guid=__files_GUID_6B5EDC11_A154_4AA7_A972_A11AC36949E9_htm
|
||||
|
||||
fn ColourToHex col = (
|
||||
local theComponents = #(bit.intAsHex col.r, bit.intAsHex col.g, bit.intAsHex col.b)
|
||||
local theValue = "#"
|
||||
for i in theComponents do
|
||||
theValue += (if i.count == 1 then "0" else "") + i
|
||||
theValue
|
||||
)
|
||||
|
||||
local st = timestamp()
|
||||
local theFileName = (getDir #userscripts + "\\PolygonRendering3.svg")
|
||||
local theSVGfile = createFile theFileName
|
||||
format "<svg xmlns=\"http://www.w3.org/2000/svg\"\n" to:theSVGfile
|
||||
format "\t\txmlns:xlink=\"http://www.w3.org/1999/xlink\">\n" to:theSVGfile
|
||||
|
||||
local theViewTM = viewport.getTM()
|
||||
theViewTM.row4 = [0,0,0]
|
||||
|
||||
local theViewTM2 = viewport.getTM()
|
||||
local theViewSize = getViewSize()
|
||||
local theViewScale = getViewSize()
|
||||
theViewScale.x /= 1024.0
|
||||
theViewScale.y /= 1024.0
|
||||
|
||||
local theStrokeThickness = 3
|
||||
|
||||
gw.setTransform (matrix3 1)
|
||||
for o in Geometry where not o.isHiddenInVpt and classof o != TargetObject do (
|
||||
local theStrokeColour = white
|
||||
local theFillColour = o.wirecolor
|
||||
|
||||
local theMesh = snapshotAsMesh o
|
||||
for f = 1 to theMesh.numfaces do (
|
||||
local theNormal = normalize (getFaceNormal theMesh f)
|
||||
|
||||
if (theNormal*theViewTM).z > 0 do
|
||||
(
|
||||
local theFace = getFace theMesh f
|
||||
local v1 = gw.transPoint (getVert theMesh theFace.x)
|
||||
local v2 = gw.transPoint (getVert theMesh theFace.y)
|
||||
local v3 = gw.transPoint (getVert theMesh theFace.z)
|
||||
|
||||
v1.x /= theViewScale.x
|
||||
v1.y /= theViewScale.y
|
||||
v2.x /= theViewScale.x
|
||||
v2.y /= theViewScale.y
|
||||
v3.x /= theViewScale.x
|
||||
v3.y /= theViewScale.y
|
||||
|
||||
format "\t<polygon points='%,% %,% %,%' \n" v1.x v1.y v2.x v2.y v3.x v3.y to:theSVGfile
|
||||
format "\tstyle='stroke:%; fill:%; stroke-width:%'/>\n" (ColourToHex theStrokeColour) (ColourToHex theFillColour) theStrokeThickness to:theSVGfile
|
||||
)--end if normal positive
|
||||
)--end f loop
|
||||
)--end o loop
|
||||
|
||||
format "</svg>\n" to:theSVGfile
|
||||
close theSVGfile
|
||||
local theSVGMap = VectorMap vectorFile:theFileName alphasource:0
|
||||
local theBitmap = bitmap theViewSize.x theViewSize.y
|
||||
renderMap theSVGMap into:theBitmap filter:true
|
||||
display theBitmap
|
||||
format "Render Time: % sec.\n" ((timestamp()-st)/1000.0)
|
||||
22
samples/MAXScript/volume-calc.ms
Normal file
22
samples/MAXScript/volume-calc.ms
Normal file
@@ -0,0 +1,22 @@
|
||||
fn CalculateVolumeAndCentreOfMass obj =
|
||||
(
|
||||
local Volume= 0.0
|
||||
local Centre= [0.0, 0.0, 0.0]
|
||||
local theMesh = snapshotasmesh obj
|
||||
local numFaces = theMesh.numfaces
|
||||
for i = 1 to numFaces do
|
||||
(
|
||||
local Face= getFace theMesh i
|
||||
local vert2 = getVert theMesh Face.z
|
||||
local vert1 = getVert theMesh Face.y
|
||||
local vert0 = getVert theMesh Face.x
|
||||
local dV = Dot (Cross (vert1 - vert0) (vert2 - vert0)) vert0
|
||||
Volume+= dV
|
||||
Centre+= (vert0 + vert1 + vert2) * dV
|
||||
)
|
||||
delete theMesh
|
||||
Volume /= 6
|
||||
Centre /= 24
|
||||
Centre /= Volume
|
||||
#(Volume,Centre)
|
||||
)
|
||||
31
samples/Makefile/filenames/Makefile.inc
Normal file
31
samples/Makefile/filenames/Makefile.inc
Normal file
@@ -0,0 +1,31 @@
|
||||
# $OpenBSD: Makefile.inc,v 1.2 2003/11/14 20:09:20 drahn Exp $
|
||||
# $NetBSD: Makefile.inc,v 1.1 1996/09/30 16:34:59 ws Exp $
|
||||
|
||||
.if !defined(__stand_makefile_inc)
|
||||
__stand_makefile_inc=1
|
||||
|
||||
KERN_AS= library
|
||||
|
||||
S=$(.CURDIR)/../../../$(R)
|
||||
|
||||
.if !make(libdep) && !make(sadep) && !make(salibdir) && !make(kernlibdir) && !make(obj) && !defined(NOMACHINE)
|
||||
.BEGIN:
|
||||
@([ -h machine ] || ln -s $(S)/arch/$(MACHINE)/include machine)
|
||||
.endif
|
||||
|
||||
#
|
||||
EXTRACFLAGS= -msoft-float
|
||||
REAL_VIRT?= -v
|
||||
ENTRY?= _start
|
||||
|
||||
INCLUDES+= -I. -I$(.OBJDIR) -I$(.CURDIR)/.. -I$(S)/arch -I$(S)
|
||||
INCLUDES+= -I$(S)/lib/libsa
|
||||
DEFS+= -DSTANDALONE
|
||||
CFLAGS+= $(INCLUDES) $(DEFS) $(EXTRACFLAGS)
|
||||
CFLAGS+= -fno-stack-protector
|
||||
LDFLAGS?= -X -N -Ttext $(RELOC) -e $(ENTRY)
|
||||
|
||||
cleandir:
|
||||
rm -rf lib machine
|
||||
|
||||
.endif
|
||||
1
samples/Mathematica/TestArithmetic.mt
Normal file
1
samples/Mathematica/TestArithmetic.mt
Normal file
@@ -0,0 +1 @@
|
||||
Test[1 + 2, 3, TestID -> "One plus two"]
|
||||
1
samples/Mathematica/TestString.mt
Normal file
1
samples/Mathematica/TestString.mt
Normal file
@@ -0,0 +1 @@
|
||||
Test["a" <> "b", "ab", TestID -> "Concat \"a\" and \"b\""]
|
||||
5
samples/Mathematica/TestSuite.mt
Normal file
5
samples/Mathematica/TestSuite.mt
Normal file
@@ -0,0 +1,5 @@
|
||||
TestSuite[
|
||||
{ "TestArithmetic.mt"
|
||||
, "TestString.mt"
|
||||
}
|
||||
]
|
||||
694
samples/MediaWiki/README.wiki
Normal file
694
samples/MediaWiki/README.wiki
Normal file
@@ -0,0 +1,694 @@
|
||||
= Name =
|
||||
|
||||
'''nginx_tcp_proxy_module''' - support TCP proxy with Nginx
|
||||
|
||||
= Installation =
|
||||
|
||||
Download the latest stable version of the release tarball of this module from [http://github.com/yaoweibin/nginx_tcp_proxy_module github]
|
||||
|
||||
Grab the nginx source code from [http://nginx.org/ nginx.org], for example, the version 1.2.1 (see nginx compatibility), and then build the source with this module:
|
||||
|
||||
<geshi lang="bash">
|
||||
$ wget 'http://nginx.org/download/nginx-1.2.1.tar.gz'
|
||||
$ tar -xzvf nginx-1.2.1.tar.gz
|
||||
$ cd nginx-1.2.1/
|
||||
$ patch -p1 < /path/to/nginx_tcp_proxy_module/tcp.patch
|
||||
|
||||
$ ./configure --add-module=/path/to/nginx_tcp_proxy_module
|
||||
|
||||
$ make
|
||||
$ make install
|
||||
</geshi>
|
||||
|
||||
|
||||
= Synopsis =
|
||||
|
||||
<geshi lang="nginx">
|
||||
http {
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
|
||||
location /status {
|
||||
tcp_check_status;
|
||||
}
|
||||
}
|
||||
}
|
||||
</geshi>
|
||||
|
||||
<geshi lang="nginx">
|
||||
|
||||
#You can also include tcp_proxy.conf file individually
|
||||
|
||||
#include /path/to/tcp_proxy.conf;
|
||||
|
||||
tcp {
|
||||
|
||||
upstream cluster {
|
||||
# simple round-robin
|
||||
server 192.168.0.1:80;
|
||||
server 192.168.0.2:80;
|
||||
|
||||
check interval=3000 rise=2 fall=5 timeout=1000;
|
||||
|
||||
#check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;
|
||||
|
||||
#check interval=3000 rise=2 fall=5 timeout=1000 type=http;
|
||||
#check_http_send "GET / HTTP/1.0\r\n\r\n";
|
||||
#check_http_expect_alive http_2xx http_3xx;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 8888;
|
||||
|
||||
proxy_pass cluster;
|
||||
}
|
||||
}
|
||||
</geshi>
|
||||
|
||||
= Description =
|
||||
|
||||
This module actually include many modules: ngx_tcp_module, ngx_tcp_core_module, ngx_tcp_upstream_module, ngx_tcp_proxy_module, ngx_tcp_websocket_module, ngx_tcp_ssl_module, ngx_tcp_upstream_ip_hash_module. All these modules work together to support TCP proxy with Nginx. I also added other features: ip_hash, upstream server health check, status monitor.
|
||||
|
||||
The motivation of writing these modules is Nginx's high performance and robustness. At first, I developed this module just for general TCP proxy. And now, this module is frequently used in websocket reverse proxying.
|
||||
|
||||
Note, You can't use the same listening port with HTTP modules.
|
||||
|
||||
= Directives =
|
||||
|
||||
== ngx_tcp_moodule ==
|
||||
|
||||
=== tcp ===
|
||||
|
||||
'''syntax:''' ''tcp {...}''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''main''
|
||||
|
||||
'''description:''' All the tcp related directives are contained in the tcp block.
|
||||
|
||||
|
||||
'''ngx_tcp_core_moodule'''
|
||||
|
||||
=== server ===
|
||||
|
||||
'''syntax:''' ''server {...}''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''tcp''
|
||||
|
||||
'''description:''' All the specific server directives are contained in the server block.
|
||||
|
||||
=== listen ===
|
||||
|
||||
'''syntax:''' ''listen address:port [ bind | ssl | default]''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''server''
|
||||
|
||||
'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#listen listen]. The parameter of default means the default server if you have several server blocks with the same port.
|
||||
|
||||
=== access_log ===
|
||||
|
||||
'''syntax:''' ''access_log path [buffer=size] | off''
|
||||
|
||||
'''default:''' ''access_log logs/tcp_access.log''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' Set the access.log. Each record's format is like this:
|
||||
|
||||
<pre>
|
||||
|
||||
log_time worker_process_pid client_ip host_ip accept_time upstream_ip bytes_read bytes_write
|
||||
|
||||
2011/08/02 06:19:07 [5972] 127.0.0.1 0.0.0.0:1982 2011/08/02 06:18:19 172.19.0.129:80 80 236305
|
||||
|
||||
</pre>
|
||||
|
||||
* ''log_time'': The current time when writing this log. The log action is called when the proxy session is closed.
|
||||
* ''worker_process_pid'': the pid of worker process
|
||||
* ''client_ip'': the client ip
|
||||
* ''host_ip'': the server ip and port
|
||||
* ''accept_time'': the time when the server accepts client's connection
|
||||
* ''upstream_ip'': the upstream server's ip
|
||||
* ''bytes_read'': the bytes read from client
|
||||
* ''bytes_write'': the bytes written to client
|
||||
|
||||
=== allow ===
|
||||
|
||||
'''syntax:''' ''allow [ address | CIDR | all ]''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''server''
|
||||
|
||||
'''description:''' Directive grants access for the network or addresses indicated.
|
||||
|
||||
=== deny ===
|
||||
|
||||
'''syntax:''' ''deny [ address | CIDR | all ]''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''server''
|
||||
|
||||
'''description:''' Directive grants access for the network or addresses indicated.
|
||||
|
||||
=== so_keepalive ===
|
||||
|
||||
'''syntax:''' ''so_keepalive on|off''
|
||||
|
||||
'''default:''' ''off''
|
||||
|
||||
'''context:''' ''main, server''
|
||||
|
||||
'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#so_keepalive so_keepalive].
|
||||
|
||||
=== tcp_nodelay ===
|
||||
|
||||
'''syntax:''' ''tcp_nodelay on|off''
|
||||
|
||||
'''default:''' ''on''
|
||||
|
||||
'''context:''' ''main, server''
|
||||
|
||||
'''description:''' The same as [http://wiki.nginx.org/NginxHttpCoreModule#tcp_nodelay tcp_nodelay].
|
||||
|
||||
=== timeout ===
|
||||
|
||||
'''syntax:''' ''timeout milliseconds''
|
||||
|
||||
'''default:''' ''60000''
|
||||
|
||||
'''context:''' ''main, server''
|
||||
|
||||
'''description:''' set the timeout value with clients.
|
||||
|
||||
=== server_name ===
|
||||
|
||||
'''syntax:''' ''server_name name''
|
||||
|
||||
'''default:''' ''The name of the host, obtained through gethostname()''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' The same as [http://wiki.nginx.org/NginxMailCoreModule#server_name server_name]. You can specify several server name in different server block with the same port. They can be used in websocket module.
|
||||
|
||||
=== resolver ===
|
||||
|
||||
'''syntax:''' ''resolver address''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' DNS server
|
||||
|
||||
=== resolver_timeout ===
|
||||
|
||||
'''syntax:''' ''resolver_timeout time''
|
||||
|
||||
'''default:''' ''30s''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' Resolver timeout in seconds.
|
||||
|
||||
|
||||
== ngx_tcp_upstream_module ==
|
||||
|
||||
=== upstream ===
|
||||
|
||||
'''syntax:''' ''upstream {...}''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''tcp''
|
||||
|
||||
'''description:''' All the upstream directives are contained in this block. The upstream server will be dispatched with round robin by default.
|
||||
|
||||
=== server ===
|
||||
|
||||
'''syntax:''' ''server name [parameters]''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' Most of the parameters are the same as [http://wiki.nginx.org/NginxHttpUpstreamModule#server server]. Default port is 80.
|
||||
|
||||
=== check ===
|
||||
|
||||
'''syntax:''' ''check interval=milliseconds [fall=count] [rise=count] [timeout=milliseconds] [type=tcp|ssl_hello|smtp|mysql|pop3|imap]''
|
||||
|
||||
'''default:''' ''none, if parameters omitted, default parameters are interval=30000 fall=5 rise=2 timeout=1000''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' Add the health check for the upstream servers. At present, the check method is a simple tcp connect.
|
||||
|
||||
The parameters' meanings are:
|
||||
|
||||
* ''interval'': the check request's interval time.
|
||||
* ''fall''(fall_count): After fall_count check failures, the server is marked down.
|
||||
* ''rise''(rise_count): After rise_count check success, the server is marked up.
|
||||
* ''timeout'': the check request's timeout.
|
||||
* ''type'': the check protocol type:
|
||||
# ''tcp'' is a simple tcp socket connect and peek one byte.
|
||||
# ''ssl_hello'' sends a client ssl hello packet and receives the server ssl hello packet.
|
||||
# ''http'' sends a http request packet, receives and parses the http response to diagnose if the upstream server is alive.
|
||||
# ''smtp'' sends a smtp request packet, receives and parses the smtp response to diagnose if the upstream server is alive. The response begins with '2' should be an OK response.
|
||||
# ''mysql'' connects to the mysql server, receives the greeting response to diagnose if the upstream server is alive.
|
||||
# ''pop3'' receives and parses the pop3 response to diagnose if the upstream server is alive. The response begins with '+' should be an OK response.
|
||||
# ''imap'' connects to the imap server, receives the greeting response to diagnose if the upstream server is alive.
|
||||
|
||||
=== check_http_send ===
|
||||
|
||||
'''syntax:''' ''check_http_send http_packet''
|
||||
|
||||
'''default:''' ''"GET / HTTP/1.0\r\n\r\n"''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' If you set the check type is http, then the check function will sends this http packet to check the upstream server.
|
||||
|
||||
=== check_http_expect_alive ===
|
||||
|
||||
'''syntax:''' ''check_http_expect_alive [ http_2xx | http_3xx | http_4xx | http_5xx ]''
|
||||
|
||||
'''default:''' ''http_2xx | http_3xx''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' These status codes indicate the upstream server's http response is OK, the backend is alive.
|
||||
|
||||
=== check_smtp_send ===
|
||||
|
||||
'''syntax:''' ''check_smtp_send smtp_packet''
|
||||
|
||||
'''default:''' ''"HELO smtp.localdomain\r\n"''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' If you set the check type is smtp, then the check function will sends this smtp packet to check the upstream server.
|
||||
|
||||
=== check_smtp_expect_alive ===
|
||||
|
||||
'''syntax:''' ''check_smtp_expect_alive [smtp_2xx | smtp_3xx | smtp_4xx | smtp_5xx]''
|
||||
|
||||
'''default:''' ''smtp_2xx''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' These status codes indicate the upstream server's smtp response is OK, the backend is alive.
|
||||
|
||||
=== check_shm_size ===
|
||||
|
||||
'''syntax:''' ''check_shm_size size''
|
||||
|
||||
'''default:''' ''(number_of_checked_upstream_blocks + 1) * pagesize''
|
||||
|
||||
'''context:''' ''tcp''
|
||||
|
||||
'''description:''' If you store hundreds of servers in one upstream block, the shared memory for health check may be not enough, you can enlarged it by this directive.
|
||||
|
||||
=== tcp_check_status ===
|
||||
|
||||
'''syntax:''' ''tcp_check_status''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''location''
|
||||
|
||||
'''description:''' Display the health checking servers' status by HTTP. This directive is set in the http block.
|
||||
|
||||
The table field meanings are:
|
||||
|
||||
* ''Index'': The server index in the check table
|
||||
* ''Name'' : The upstream server name
|
||||
* ''Status'': The marked status of the server.
|
||||
* ''Busyness'': The number of connections which are connecting to the server.
|
||||
* ''Rise counts'': Count the successful checking
|
||||
* ''Fall counts'': Count the unsuccessful checking
|
||||
* ''Access counts'': Count the times accessing to this server
|
||||
* ''Check type'': The type of the check packet
|
||||
|
||||
|
||||
'''ngx_tcp_upstream_busyness_module'''
|
||||
|
||||
=== busyness ===
|
||||
|
||||
'''syntax:''' ''busyness''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' the upstream server will be dispatched by backend servers' busyness.
|
||||
|
||||
|
||||
'''ngx_tcp_upstream_ip_hash_module'''
|
||||
|
||||
=== ip_hash ===
|
||||
|
||||
'''syntax:''' ''ip_hash''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''upstream''
|
||||
|
||||
'''description:''' the upstream server will be dispatched by ip_hash.
|
||||
|
||||
|
||||
== ngx_tcp_proxy_module ==
|
||||
|
||||
=== proxy_pass ===
|
||||
|
||||
'''syntax:''' ''proxy_pass host:port''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''server''
|
||||
|
||||
'''description:''' proxy the request to the backend server. Default port is 80.
|
||||
|
||||
=== proxy_buffer ===
|
||||
|
||||
'''syntax:''' ''proxy_buffer size''
|
||||
|
||||
'''default:''' ''4k''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the size of proxy buffer.
|
||||
|
||||
=== proxy_connect_timeout ===
|
||||
|
||||
'''syntax:''' ''proxy_connect_timeout miliseconds''
|
||||
|
||||
'''default:''' ''60000''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the timeout value of connection to backends.
|
||||
|
||||
=== proxy_read_timeout ===
|
||||
|
||||
'''syntax:''' ''proxy_read_timeout miliseconds''
|
||||
|
||||
'''default:''' ''60000''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the timeout value of reading from backends.
|
||||
|
||||
=== proxy_send_timeout ===
|
||||
|
||||
'''syntax:''' ''proxy_send_timeout miliseconds''
|
||||
|
||||
'''default:''' ''60000''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the timeout value of sending to backends.
|
||||
|
||||
|
||||
== ngx_tcp_websocket_module ==
|
||||
|
||||
=== websocket_pass ===
|
||||
|
||||
'''syntax:''' ''websocket_pass [path] host:port''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''server''
|
||||
|
||||
'''description:''' proxy the websocket request to the backend server. Default port is 80. You can specify several different paths in the same server block.
|
||||
|
||||
=== websocket_buffer ===
|
||||
|
||||
'''syntax:''' ''websocket_buffer size''
|
||||
|
||||
'''default:''' ''4k''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the size of proxy buffer.
|
||||
|
||||
=== websocket_connect_timeout ===
|
||||
|
||||
'''syntax:''' ''websocket_connect_timeout miliseconds''
|
||||
|
||||
'''default:''' ''60000''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the timeout value of connection to backends.
|
||||
|
||||
=== websocket_read_timeout ===
|
||||
|
||||
'''syntax:''' ''websocket_read_timeout miliseconds''
|
||||
|
||||
'''default:''' ''60000''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the timeout value of reading from backends. Your timeout will be the minimum of this and the *timeout* parameter, so if you want a long timeout for your websockets, make sure to set both paramaters.
|
||||
|
||||
=== websocket_send_timeout ===
|
||||
|
||||
'''syntax:''' ''websocket_send_timeout miliseconds''
|
||||
|
||||
'''default:''' ''60000''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
'''description:''' set the timeout value of sending to backends.
|
||||
|
||||
|
||||
== ngx_tcp_ssl_module ==
|
||||
|
||||
The default config file includes this ngx_tcp_ssl_module. If you want to just compile nginx without ngx_tcp_ssl_module, copy the ngx_tcp_proxy_module/config_without_ssl to ngx_tcp_proxy_module/config, reconfigrure and compile nginx.
|
||||
|
||||
=== ssl ===
|
||||
|
||||
'''syntax:''' ''ssl [on|off] ''
|
||||
|
||||
'''default:''' ''ssl off''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
Enables SSL for a server.
|
||||
|
||||
=== ssl_certificate ===
|
||||
|
||||
'''syntax:''' ''ssl_certificate file''
|
||||
|
||||
'''default:''' ''ssl_certificate cert.pem''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive specifies the file containing the certificate, in PEM format. This file can contain also other certificates and the server private key.
|
||||
|
||||
=== ssl_certificate_key ===
|
||||
|
||||
'''syntax:''' ''ssl_certificate_key file''
|
||||
|
||||
'''default:''' ''ssl_certificate_key cert.pem''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive specifies the file containing the private key, in PEM format.
|
||||
|
||||
=== ssl_client_certificate ===
|
||||
|
||||
'''syntax:''' ''ssl_client_certificate file''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive specifies the file containing the CA (root) certificate, in PEM format, that is used for validating client certificates.
|
||||
|
||||
=== ssl_dhparam ===
|
||||
|
||||
'''syntax:''' ''ssl_dhparam file''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive specifies a file containing Diffie-Hellman key agreement protocol cryptographic parameters, in PEM format, utilized for exchanging session keys between server and client.
|
||||
|
||||
=== ssl_ciphers ===
|
||||
|
||||
'''syntax:''' ''ssl_ciphers openssl_cipherlist_spec''
|
||||
|
||||
'''default:''' ''ssl_ciphers HIGH:!aNULL:!MD5''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive describes the list of cipher suites the server supports for establishing a secure connection. Cipher suites are specified in the [http://openssl.org/docs/apps/ciphers.html OpenSSL] cipherlist format, for example:
|
||||
|
||||
<geshi lang="nginx">
|
||||
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
|
||||
</geshi>
|
||||
|
||||
The complete cipherlist supported by the currently installed version of OpenSSL in your platform can be obtained by issuing the command:
|
||||
<pre>
|
||||
openssl ciphers
|
||||
</pre>
|
||||
|
||||
=== ssl_crl ===
|
||||
|
||||
'''syntax:''' ''ssl_crl file''
|
||||
|
||||
'''default:''' ''none''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive specifies the filename of a Certificate Revocation List, in PEM format, which is used to check the revocation status of certificates.
|
||||
|
||||
=== ssl_prefer_server_ciphers ===
|
||||
|
||||
'''syntax:''' ''ssl_prefer_server_ciphers [on|off] ''
|
||||
|
||||
'''default:''' ''ssl_prefer_server_ciphers off''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
The server requires that the cipher suite list for protocols SSLv3 and TLSv1 are to be preferred over the client supported cipher suite list.
|
||||
|
||||
=== ssl_protocols ===
|
||||
|
||||
'''syntax:''' ''ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2]''
|
||||
|
||||
'''default:''' ''ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive enables the protocol versions specified.
|
||||
|
||||
=== ssl_verify_client ===
|
||||
|
||||
'''syntax:''' ''ssl_verify_client on|off|optional''
|
||||
|
||||
'''default:''' ''ssl_verify_client off''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive enables the verification of the client identity. Parameter 'optional' checks the client identity using its certificate in case it was made available to the server.
|
||||
|
||||
=== ssl_verify_depth ===
|
||||
|
||||
'''syntax:''' ''ssl_verify_depth number''
|
||||
|
||||
'''default:''' ''ssl_verify_depth 1''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive sets how deep the server should go in the client provided certificate chain in order to verify the client identity.
|
||||
|
||||
=== ssl_session_cache ===
|
||||
|
||||
'''syntax:''' ''ssl_session_cache off|none|builtin:size and/or shared:name:size''
|
||||
|
||||
'''default:''' ''ssl_session_cache off''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
The directive sets the types and sizes of caches to store the SSL sessions.
|
||||
|
||||
The cache types are:
|
||||
|
||||
* off -- Hard off: nginx says explicitly to a client that sessions can not reused.
|
||||
* none -- Soft off: nginx says to a client that session can be resued, but nginx actually never reuses them. This is workaround for some mail clients as ssl_session_cache may be used in mail proxy as well as in HTTP server.
|
||||
* builtin -- the OpenSSL builtin cache, is used inside one worker process only. The cache size is assigned in the number of the sessions. Note: there appears to be a memory fragmentation issue using this method, please take that into consideration when using this. See "References" below.
|
||||
* shared -- the cache is shared between all worker processes. The size of the cache is assigned in bytes: 1 MB cache can contain roughly 4000 sessions. Each shared cache must be given an arbitrary name. A shared cache with a given name can be used in several virtual hosts.
|
||||
It's possible to use both types of cache — builtin and shared — simultaneously, for example:
|
||||
|
||||
<geshi lang="nginx">
|
||||
ssl_session_cache builtin:1000 shared:SSL:10m;
|
||||
</geshi>
|
||||
|
||||
Bear in mind however, that using only shared cache, i.e., without builtin, should be more effective.
|
||||
|
||||
=== ssl_session_timeout ===
|
||||
|
||||
'''syntax:''' ''ssl_session_timeout time''
|
||||
|
||||
'''default:''' ''ssl_session_timeout 5m''
|
||||
|
||||
'''context:''' ''tcp, server''
|
||||
|
||||
This directive defines the maximum time during which the client can re-use the previously negotiated cryptographic parameters of the secure session that is stored in the SSL cache.
|
||||
|
||||
= Compatibility =
|
||||
|
||||
* My test bed is 0.7.65+
|
||||
|
||||
= Notes =
|
||||
|
||||
The http_response_parse.rl and smtp_response_parse.rl are [http://www.complang.org/ragel/ ragel] scripts , you can edit the script and compile it like this:
|
||||
|
||||
<geshi lang="bash">
|
||||
$ ragel -G2 http_response_parse.rl
|
||||
$ ragel -G2 smtp_response_parse.rl
|
||||
</geshi>
|
||||
|
||||
= TODO =
|
||||
|
||||
* refact this module, make it more extendable for adding third-party modules
|
||||
* manipulate header like http module's proxy_set_header
|
||||
* built-in variable support
|
||||
* custom log format
|
||||
* syslog support
|
||||
* FTP/IRC proxying
|
||||
|
||||
= Known Issues =
|
||||
|
||||
* This module can't use the same listening port with the HTTP module.
|
||||
|
||||
= Changelogs =
|
||||
|
||||
== v0.2.0 ==
|
||||
|
||||
* add ssl proxy module
|
||||
* add websocket proxy module
|
||||
* add upstream busyness module
|
||||
* add tcp access log module
|
||||
|
||||
== v0.19 ==
|
||||
|
||||
* add many check methods
|
||||
|
||||
== v0.1 ==
|
||||
|
||||
* first release
|
||||
|
||||
= Authors =
|
||||
|
||||
Weibin Yao(姚伟斌) ''yaoweibin at gmail dot com''
|
||||
|
||||
= Copyright & License =
|
||||
|
||||
This README template copy from [http://github.com/agentzh agentzh].
|
||||
|
||||
I borrowed a lot of code from upstream and mail module from the nginx 0.7.* core. This part of code is copyrighted by Igor Sysoev. And the health check part is borrowed the design of Jack Lindamood's healthcheck module [http://github.com/cep21/healthcheck_nginx_upstreams healthcheck_nginx_upstreams];
|
||||
|
||||
This module is licensed under the BSD license.
|
||||
|
||||
Copyright (C) 2013 by Weibin Yao <yaoweibin@gmail.com>.
|
||||
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
99
samples/Metal/ITMVisualisationEngine.metal
Normal file
99
samples/Metal/ITMVisualisationEngine.metal
Normal file
@@ -0,0 +1,99 @@
|
||||
// Copyright 2014 Isis Innovation Limited and the authors of InfiniTAM
|
||||
|
||||
#include <metal_stdlib>
|
||||
|
||||
#include "../../DeviceAgnostic/ITMSceneReconstructionEngine.h"
|
||||
#include "../../DeviceAgnostic/ITMVisualisationEngine.h"
|
||||
#include "ITMVisualisationEngine_Metal.h"
|
||||
|
||||
using namespace metal;
|
||||
|
||||
kernel void genericRaycastVH_device(DEVICEPTR(Vector4f) *pointsRay [[ buffer(0) ]],
|
||||
const CONSTPTR(ITMVoxel) *voxelData [[ buffer(1) ]],
|
||||
const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex [[ buffer(2) ]],
|
||||
const CONSTPTR(Vector2f) *minmaxdata [[ buffer(3) ]],
|
||||
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(4) ]],
|
||||
uint2 threadIdx [[ thread_position_in_threadgroup ]],
|
||||
uint2 blockIdx [[ threadgroup_position_in_grid ]],
|
||||
uint2 blockDim [[ threads_per_threadgroup ]])
|
||||
{
|
||||
int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
|
||||
|
||||
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
|
||||
|
||||
int locId = x + y * params->imgSize.x;
|
||||
int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x;
|
||||
|
||||
castRay<ITMVoxel, ITMVoxelIndex>(pointsRay[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams,
|
||||
params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]);
|
||||
}
|
||||
|
||||
kernel void genericRaycastVGMissingPoints_device(DEVICEPTR(Vector4f) *forwardProjection [[ buffer(0) ]],
|
||||
const CONSTPTR(int) *fwdProjMissingPoints [[ buffer(1) ]],
|
||||
const CONSTPTR(ITMVoxel) *voxelData [[ buffer(2) ]],
|
||||
const CONSTPTR(typename ITMVoxelIndex::IndexData) *voxelIndex [[ buffer(3) ]],
|
||||
const CONSTPTR(Vector2f) *minmaxdata [[ buffer(4) ]],
|
||||
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(5) ]],
|
||||
uint2 threadIdx [[ thread_position_in_threadgroup ]],
|
||||
uint2 blockIdx [[ threadgroup_position_in_grid ]],
|
||||
uint2 blockDim [[ threads_per_threadgroup ]])
|
||||
{
|
||||
int pointId = threadIdx.x + blockIdx.x * blockDim.x;
|
||||
|
||||
if (pointId >= params->imgSize.z) return;
|
||||
|
||||
int locId = fwdProjMissingPoints[pointId];
|
||||
int y = locId / params->imgSize.x, x = locId - y * params->imgSize.x;
|
||||
int locId2 = (int)floor((float)x / minmaximg_subsample) + (int)floor((float)y / minmaximg_subsample) * params->imgSize.x;
|
||||
|
||||
castRay<ITMVoxel, ITMVoxelIndex>(forwardProjection[locId], x, y, voxelData, voxelIndex, params->invM, params->invProjParams,
|
||||
params->voxelSizes.y, params->lightSource.w, minmaxdata[locId2]);
|
||||
}
|
||||
|
||||
kernel void renderICP_device(const CONSTPTR(Vector4f) *pointsRay [[ buffer(0) ]],
|
||||
DEVICEPTR(Vector4f) *pointsMap [[ buffer(1) ]],
|
||||
DEVICEPTR(Vector4f) *normalsMap [[ buffer(2) ]],
|
||||
DEVICEPTR(Vector4u) *outRendering [[ buffer(3) ]],
|
||||
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(4) ]],
|
||||
uint2 threadIdx [[ thread_position_in_threadgroup ]],
|
||||
uint2 blockIdx [[ threadgroup_position_in_grid ]],
|
||||
uint2 blockDim [[ threads_per_threadgroup ]])
|
||||
{
|
||||
int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
|
||||
|
||||
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
|
||||
|
||||
processPixelICP<false>(outRendering, pointsMap, normalsMap, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource));
|
||||
}
|
||||
|
||||
kernel void renderForward_device(DEVICEPTR(Vector4u) *outRendering [[ buffer(0) ]],
|
||||
const CONSTPTR(Vector4f) *pointsRay [[ buffer(1) ]],
|
||||
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(2) ]],
|
||||
uint2 threadIdx [[ thread_position_in_threadgroup ]],
|
||||
uint2 blockIdx [[ threadgroup_position_in_grid ]],
|
||||
uint2 blockDim [[ threads_per_threadgroup ]])
|
||||
{
|
||||
int x = threadIdx.x + blockIdx.x * blockDim.x, y = threadIdx.y + blockIdx.y * blockDim.y;
|
||||
|
||||
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
|
||||
|
||||
processPixelForwardRender<false>(outRendering, pointsRay, params->imgSize.xy, x, y, params->voxelSizes.x, TO_VECTOR3(params->lightSource));
|
||||
}
|
||||
|
||||
kernel void forwardProject_device(DEVICEPTR(Vector4f) *forwardProjection [[ buffer(0) ]],
|
||||
const CONSTPTR(Vector4f) *pointsRay [[ buffer(1) ]],
|
||||
const CONSTPTR(CreateICPMaps_Params) *params [[ buffer(2) ]],
|
||||
uint2 threadIdx [[ thread_position_in_threadgroup ]],
|
||||
uint2 blockIdx [[ threadgroup_position_in_grid ]],
|
||||
uint2 blockDim [[ threads_per_threadgroup ]])
|
||||
{
|
||||
int x = (threadIdx.x + blockIdx.x * blockDim.x), y = (threadIdx.y + blockIdx.y * blockDim.y);
|
||||
|
||||
if (x >= params->imgSize.x || y >= params->imgSize.y) return;
|
||||
|
||||
int locId = x + y * params->imgSize.x;
|
||||
Vector4f pixel = pointsRay[locId];
|
||||
|
||||
int locId_new = forwardProjectPixel(pixel * params->voxelSizes.x, params->M, params->projParams, params->imgSize.xy);
|
||||
if (locId_new >= 0) forwardProjection[locId_new] = pixel;
|
||||
}
|
||||
26
samples/Modelica/NestedPackages.mo
Normal file
26
samples/Modelica/NestedPackages.mo
Normal file
@@ -0,0 +1,26 @@
|
||||
within ModelicaByExample.PackageExamples;
|
||||
package NestedPackages
|
||||
"An example of how packages can be used to organize things"
|
||||
package Types
|
||||
type Rabbits = Real(quantity="Rabbits", min=0);
|
||||
type Wolves = Real(quantity="Wolves", min=0);
|
||||
type RabbitReproduction = Real(quantity="Rabbit Reproduction", min=0);
|
||||
type RabbitFatalities = Real(quantity="Rabbit Fatalities", min=0);
|
||||
type WolfReproduction = Real(quantity="Wolf Reproduction", min=0);
|
||||
type WolfFatalities = Real(quantity="Wolf Fatalities", min=0);
|
||||
end Types;
|
||||
|
||||
model LotkaVolterra "Lotka-Volterra with types"
|
||||
parameter Types.RabbitReproduction alpha=0.1;
|
||||
parameter Types.RabbitFatalities beta=0.02;
|
||||
parameter Types.WolfReproduction gamma=0.4;
|
||||
parameter Types.WolfFatalities delta=0.02;
|
||||
parameter Types.Rabbits x0=10;
|
||||
parameter Types.Wolves y0=10;
|
||||
Types.Rabbits x(start=x0);
|
||||
Types.Wolves y(start=y0);
|
||||
equation
|
||||
der(x) = x*(alpha-beta*y);
|
||||
der(y) = -y*(gamma-delta*x);
|
||||
end LotkaVolterra;
|
||||
end NestedPackages;
|
||||
24
samples/Modelica/NewtonCooling.mo
Normal file
24
samples/Modelica/NewtonCooling.mo
Normal file
@@ -0,0 +1,24 @@
|
||||
within ModelicaByExample.PackageExamples;
|
||||
model NewtonCooling
|
||||
"Cooling example importing physical types from the Modelica Standard Library"
|
||||
import Modelica.SIunits.Temperature;
|
||||
import Modelica.SIunits.Mass;
|
||||
import Modelica.SIunits.Area;
|
||||
import ConvectionCoefficient = Modelica.SIunits.CoefficientOfHeatTransfer;
|
||||
import SpecificHeat = Modelica.SIunits.SpecificHeatCapacity;
|
||||
|
||||
// Parameters
|
||||
parameter Temperature T_inf=300.0 "Ambient temperature";
|
||||
parameter Temperature T0=280.0 "Initial temperature";
|
||||
parameter ConvectionCoefficient h=0.7 "Convective cooling coefficient";
|
||||
parameter Area A=1.0 "Surface area";
|
||||
parameter Mass m=0.1 "Mass of thermal capacitance";
|
||||
parameter SpecificHeat c_p=1.2 "Specific heat";
|
||||
|
||||
// Variables
|
||||
Temperature T "Temperature";
|
||||
initial equation
|
||||
T = T0 "Specify initial value for T";
|
||||
equation
|
||||
m*c_p*der(T) = h*A*(T_inf-T) "Newton's law of cooling";
|
||||
end NewtonCooling;
|
||||
47
samples/Modelica/Pendulum.mo
Normal file
47
samples/Modelica/Pendulum.mo
Normal file
@@ -0,0 +1,47 @@
|
||||
within ModelicaByExample.Subsystems.Pendula;
|
||||
model Pendulum "A single individual pendulum"
|
||||
import Modelica.Mechanics.MultiBody.Parts;
|
||||
import Modelica.Mechanics.MultiBody.Joints;
|
||||
|
||||
parameter Modelica.SIunits.Position x;
|
||||
parameter Modelica.SIunits.Mass m "Mass of mass point";
|
||||
parameter Modelica.SIunits.Angle phi "Initial angle";
|
||||
parameter Modelica.SIunits.Length L "String length";
|
||||
parameter Modelica.SIunits.Diameter d=0.01;
|
||||
|
||||
Parts.Fixed ground(r={0,0,x}, animation=false)
|
||||
annotation (Placement(
|
||||
transformation(
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=270, origin={0,60})));
|
||||
Parts.PointMass ball(m=m, sphereDiameter=5*d)
|
||||
annotation (Placement(transformation(extent={{-10,-90},{10,-70}})));
|
||||
Parts.BodyCylinder string(density=0, r={0,L,0}, diameter=d)
|
||||
annotation (Placement(transformation(
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90,
|
||||
origin={0,-30})));
|
||||
Joints.Revolute revolute(phi(fixed=true, start=phi),
|
||||
cylinderDiameter=d/2, animation=false)
|
||||
annotation (Placement(
|
||||
transformation(
|
||||
extent={{-10,-10},{10,10}},
|
||||
rotation=90,
|
||||
origin={0,20})));
|
||||
equation
|
||||
connect(string.frame_a, ball.frame_a) annotation (Line(
|
||||
points={{0,-40},{0,-40},{0,-80}},
|
||||
color={95,95,95},
|
||||
thickness=0.5,
|
||||
smooth=Smooth.None));
|
||||
connect(revolute.frame_b, ground.frame_b) annotation (Line(
|
||||
points={{0,30},{0,40},{0,40},{0,50}},
|
||||
color={95,95,95},
|
||||
thickness=0.5,
|
||||
smooth=Smooth.None));
|
||||
connect(revolute.frame_a, string.frame_b) annotation (Line(
|
||||
points={{0,10},{0,10},{0,-20},{0,-20}},
|
||||
color={95,95,95},
|
||||
thickness=0.5,
|
||||
smooth=Smooth.None));
|
||||
end Pendulum;
|
||||
16
samples/Modelica/RLC.mo
Normal file
16
samples/Modelica/RLC.mo
Normal file
@@ -0,0 +1,16 @@
|
||||
within ModelicaByExample.PackageExamples;
|
||||
model RLC "An RLC circuit referencing types from the Modelica Standard Library"
|
||||
parameter Modelica.SIunits.Voltage Vb=24 "Battery voltage";
|
||||
parameter Modelica.SIunits.Inductance L = 1;
|
||||
parameter Modelica.SIunits.Resistance R = 100;
|
||||
parameter Modelica.SIunits.Capacitance C = 1e-3;
|
||||
Modelica.SIunits.Voltage V;
|
||||
Modelica.SIunits.Current i_L;
|
||||
Modelica.SIunits.Current i_R;
|
||||
Modelica.SIunits.Current i_C;
|
||||
equation
|
||||
i_R = V/R;
|
||||
i_C = C*der(V);
|
||||
i_L=i_R+i_C;
|
||||
L*der(i_L) = (Vb-V);
|
||||
end RLC;
|
||||
29
samples/Modelica/SecondOrderSystem.mo
Normal file
29
samples/Modelica/SecondOrderSystem.mo
Normal file
@@ -0,0 +1,29 @@
|
||||
within ModelicaByExample.PackageExamples;
|
||||
model SecondOrderSystem
|
||||
"A second order rotational system importing types from Modelica Standard Library"
|
||||
import Modelica.SIunits.*;
|
||||
parameter Angle phi1_init = 0;
|
||||
parameter Angle phi2_init = 1;
|
||||
parameter AngularVelocity omega1_init = 0;
|
||||
parameter AngularVelocity omega2_init = 0;
|
||||
parameter Inertia J1=0.4;
|
||||
parameter Inertia J2=1.0;
|
||||
parameter RotationalSpringConstant k1=11;
|
||||
parameter RotationalSpringConstant k2=5;
|
||||
parameter RotationalDampingConstant d1=0.2;
|
||||
parameter RotationalDampingConstant d2=1.0;
|
||||
Angle phi1;
|
||||
Angle phi2;
|
||||
AngularVelocity omega1;
|
||||
AngularVelocity omega2;
|
||||
initial equation
|
||||
phi1 = phi1_init;
|
||||
phi2 = phi2_init;
|
||||
omega1 = omega1_init;
|
||||
omega2 = omega2_init;
|
||||
equation
|
||||
omega1 = der(phi1);
|
||||
omega2 = der(phi2);
|
||||
J1*der(omega1) = k1*(phi2-phi1)+d1*der(phi2-phi1);
|
||||
J2*der(omega2) = k1*(phi1-phi2)+d1*der(phi1-phi2)-k2*phi2-d2*der(phi2);
|
||||
end SecondOrderSystem;
|
||||
19
samples/Modelica/System.mo
Normal file
19
samples/Modelica/System.mo
Normal file
@@ -0,0 +1,19 @@
|
||||
within ModelicaByExample.Subsystems.Pendula;
|
||||
model System "A system of pendula"
|
||||
import Modelica.Constants.g_n;
|
||||
import Modelica.Constants.pi;
|
||||
|
||||
parameter Integer n=15 "Number of pendula";
|
||||
parameter Modelica.SIunits.Position x[n] = linspace(0,(n-1)*0.05,n);
|
||||
parameter Modelica.SIunits.Time T = 54;
|
||||
parameter Modelica.SIunits.Time X = 30;
|
||||
parameter Modelica.SIunits.Length lengths[n] = { g_n*(T/(2*pi*(X+(n-i))))^2 for i in 1:n};
|
||||
parameter Modelica.SIunits.Angle phi0 = 0.5;
|
||||
|
||||
Pendulum pendulum[n](x=x, each m=1, each phi=phi0, L=lengths)
|
||||
annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
|
||||
inner Modelica.Mechanics.MultiBody.World world
|
||||
annotation (Placement(transformation(extent={{-80,-60},{-60,-40}})));
|
||||
annotation (experiment(StopTime=54,
|
||||
Interval=9e-3, Tolerance=1e-008));
|
||||
end System;
|
||||
4
samples/Modelica/package.mo
Normal file
4
samples/Modelica/package.mo
Normal file
@@ -0,0 +1,4 @@
|
||||
within ;
|
||||
package ModelicaByExample
|
||||
annotation (uses(Modelica(version="3.2.1")));
|
||||
end ModelicaByExample;
|
||||
3
samples/Modelica/package2.mo
Normal file
3
samples/Modelica/package2.mo
Normal file
@@ -0,0 +1,3 @@
|
||||
within ModelicaByExample;
|
||||
package PackageExamples "Examples of using packages"
|
||||
end PackageExamples;
|
||||
3
samples/Modelica/package3.mo
Normal file
3
samples/Modelica/package3.mo
Normal file
@@ -0,0 +1,3 @@
|
||||
within ModelicaByExample.Subsystems;
|
||||
package GearSubsystemModel "Build a subsystem model representing a gear with backlash"
|
||||
end GearSubsystemModel;
|
||||
3
samples/Modelica/package4.mo
Normal file
3
samples/Modelica/package4.mo
Normal file
@@ -0,0 +1,3 @@
|
||||
within ModelicaByExample.Subsystems;
|
||||
package Pendula "Example of using arrays of subsystems to build complete systems"
|
||||
end Pendula;
|
||||
329
samples/Modula-2/HuffChan.mod
Normal file
329
samples/Modula-2/HuffChan.mod
Normal file
@@ -0,0 +1,329 @@
|
||||
IMPLEMENTATION MODULE HuffChan;
|
||||
|
||||
(*
|
||||
This module shows how to redefine standard IO file functions. It provides
|
||||
functions for reading and writing packed files opened in Raw mode.
|
||||
*)
|
||||
|
||||
IMPORT IOChan, IOLink, ChanConsts, IOConsts, SYSTEM, Strings;
|
||||
FROM Storage IMPORT ALLOCATE, DEALLOCATE;
|
||||
|
||||
CONST
|
||||
rbldFrq = 512; (* means: every 512 bytes rebuild table *)
|
||||
|
||||
TYPE
|
||||
charTap = POINTER TO ARRAY [0..MAX(INTEGER)-1] OF CHAR;
|
||||
smbTp = POINTER TO smbT;
|
||||
|
||||
smbT = RECORD (* Huffman's tree *)
|
||||
ch : CHAR;
|
||||
n : CARDINAL; (* frequncy of char ch *)
|
||||
left,right,next : smbTp;
|
||||
END;
|
||||
|
||||
tblT = RECORD (* bit sequence for code *)
|
||||
vl : CARDINAL; (* bit sequence *)
|
||||
cnt : INTEGER; (* it length *)
|
||||
END;
|
||||
|
||||
lclDataT = RECORD (* channel's local data *)
|
||||
tRoot : smbTp;
|
||||
htbl : ARRAY [0..255] OF tblT; (* code -> bit sequence table *)
|
||||
ftbl : ARRAY [0..255] OF CARDINAL; (* frequncey table *)
|
||||
wBf,rb1,rb2 : CARDINAL;
|
||||
wbc,rbc,smc : INTEGER;
|
||||
chid : IOChan.ChanId;
|
||||
END;
|
||||
lclDataTp = POINTER TO lclDataT;
|
||||
charp = POINTER TO CHAR;
|
||||
|
||||
VAR
|
||||
did : IOLink.DeviceId;
|
||||
ldt : lclDataTp;
|
||||
|
||||
|
||||
PROCEDURE Shf(a:CARDINAL; b : INTEGER) : CARDINAL; (* shl a,b (or shr) *)
|
||||
BEGIN
|
||||
RETURN SYSTEM.CAST(CARDINAL,SYSTEM.SHIFT(SYSTEM.CAST(BITSET,a),b));
|
||||
END Shf;
|
||||
|
||||
PROCEDURE wrDword(a:CARDINAL); (* write 4 bytes to file *)
|
||||
BEGIN
|
||||
IOChan.RawWrite(ldt^.chid,SYSTEM.ADR(a),4);
|
||||
END wrDword;
|
||||
|
||||
PROCEDURE rdDword() : CARDINAL; (* read 4 bytes from file *)
|
||||
VAR
|
||||
a,z : CARDINAL;
|
||||
BEGIN
|
||||
a:=0;
|
||||
IOChan.RawRead(ldt^.chid,SYSTEM.ADR(a),4,z);
|
||||
RETURN a;
|
||||
END rdDword;
|
||||
|
||||
PROCEDURE wrSmb(ch : CHAR); (* write bit sequence for code ch *)
|
||||
VAR
|
||||
v,h : CARDINAL;
|
||||
b,c : INTEGER;
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
v:=htbl[ORD(ch)].vl;
|
||||
c:=htbl[ORD(ch)].cnt;
|
||||
IF c+wbc<=32 THEN
|
||||
wBf:=Shf(wBf,c);
|
||||
wBf:=wBf+v;
|
||||
wbc:=wbc+c;
|
||||
IF wbc=32 THEN
|
||||
wrDword(wBf);
|
||||
wBf:=0; wbc:=0;
|
||||
END;
|
||||
RETURN;
|
||||
END;
|
||||
b:=c+wbc-32;
|
||||
h:=Shf(v,-b);
|
||||
wBf:=Shf(wBf,32-wbc)+h;
|
||||
wrDword(wBf);
|
||||
wBf:=v-Shf(h,b);
|
||||
wbc:=b;
|
||||
END;
|
||||
END wrSmb;
|
||||
|
||||
PROCEDURE flush(); (* write data in buffer *)
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
wBf:=Shf(wBf,32-wbc);
|
||||
wrDword(wBf);
|
||||
END;
|
||||
END flush;
|
||||
|
||||
PROCEDURE getSym() : CHAR; (* find code for first bit sequence in buffer *)
|
||||
VAR
|
||||
t,i : CARDINAL;
|
||||
b : INTEGER;
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
IF rbc<=32 THEN
|
||||
rb2:=rdDword();
|
||||
t:=Shf(rb2,-rbc);
|
||||
IF rbc=32 THEN t:=0; END;
|
||||
rb1:=rb1+t;
|
||||
rb2:=Shf(rb2,32-rbc);
|
||||
IF rbc=0 THEN rb2:=0; END;
|
||||
rbc:=rbc+32;
|
||||
END;
|
||||
FOR i:=0 TO 255 DO
|
||||
t:=Shf(rb1,htbl[i].cnt-32);
|
||||
IF t=htbl[i].vl THEN
|
||||
rb1:=Shf(rb1,htbl[i].cnt);
|
||||
b:=32-htbl[i].cnt;
|
||||
t:=Shf(rb2,-b);
|
||||
rb1:=rb1+t;
|
||||
rb2:=Shf(rb2,32-b);
|
||||
rbc:=rbc+b-32;
|
||||
RETURN CHR(i);
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
END getSym;
|
||||
|
||||
PROCEDURE Insert(s : smbTp); (* insert new character in Huffman's tree *)
|
||||
VAR
|
||||
cr : smbTp;
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
IF tRoot=NIL THEN
|
||||
cr:=tRoot;
|
||||
tRoot:=s;
|
||||
s^.next:=cr;
|
||||
RETURN;
|
||||
ELSIF tRoot^.n<=s^.n THEN
|
||||
cr:=tRoot;
|
||||
tRoot:=s;
|
||||
s^.next:=cr;
|
||||
RETURN;
|
||||
END;
|
||||
cr:=tRoot;
|
||||
WHILE (cr^.next<>NIL) & (cr^.next^.n>s^.n) DO
|
||||
cr:=cr^.next;
|
||||
END;
|
||||
s^.next:=cr^.next;
|
||||
cr^.next:=s;
|
||||
END;
|
||||
END Insert;
|
||||
|
||||
PROCEDURE BuildTree(); (* build Huffman's tree *)
|
||||
VAR
|
||||
cr,ocr,ncr : smbTp;
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
LOOP
|
||||
ocr:=NIL; cr:=tRoot;
|
||||
WHILE cr^.next^.next<>NIL DO
|
||||
ocr:=cr; cr:=cr^.next;
|
||||
END;
|
||||
NEW(ncr);
|
||||
ncr^.n:=cr^.n+cr^.next^.n;
|
||||
ncr^.left:=cr;
|
||||
ncr^.right:=cr^.next;
|
||||
IF ocr<>NIL THEN
|
||||
ocr^.next:=NIL;
|
||||
Insert(ncr);
|
||||
ELSE
|
||||
tRoot:=NIL;
|
||||
Insert(ncr);
|
||||
EXIT;
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
END BuildTree;
|
||||
|
||||
PROCEDURE BuildTable(cr: smbTp; vl,n: CARDINAL); (* build table: code -> bit sequence *)
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
IF cr^.left=NIL THEN
|
||||
htbl[ORD(cr^.ch)].vl:=vl;
|
||||
htbl[ORD(cr^.ch)].cnt:=n;
|
||||
DISPOSE(cr);
|
||||
RETURN;
|
||||
END;
|
||||
vl:=vl*2;
|
||||
BuildTable(cr^.left,vl,n+1);
|
||||
BuildTable(cr^.right,vl+1,n+1);
|
||||
DISPOSE(cr);
|
||||
END;
|
||||
END BuildTable;
|
||||
|
||||
PROCEDURE clcTab(); (* build code/bitseq. table from frequency table *)
|
||||
VAR
|
||||
i : CARDINAL;
|
||||
s : smbTp;
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
tRoot:=NIL;
|
||||
FOR i:=0 TO 255 DO
|
||||
NEW(s);
|
||||
s^.ch:=CHR(i);
|
||||
s^.n:=ftbl[i];
|
||||
s^.left:=NIL; s^.right:=NIL; s^.next:=NIL;
|
||||
Insert(s);
|
||||
END;
|
||||
BuildTree();
|
||||
BuildTable(tRoot,0,0);
|
||||
END;
|
||||
END clcTab;
|
||||
|
||||
PROCEDURE iniHuf();
|
||||
VAR
|
||||
i : CARDINAL;
|
||||
BEGIN
|
||||
WITH ldt^ DO
|
||||
FOR i:=0 TO 255 DO
|
||||
ftbl[i]:=1;
|
||||
END;
|
||||
wBf:=0; wbc:=0; rb1:=0; rb2:=0; rbc:=0;
|
||||
smc:=0;
|
||||
clcTab();
|
||||
END;
|
||||
END iniHuf;
|
||||
|
||||
|
||||
PROCEDURE RawWrite(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS;
|
||||
len: CARDINAL);
|
||||
VAR
|
||||
i : CARDINAL;
|
||||
ch : CHAR;
|
||||
cht : charTap;
|
||||
BEGIN
|
||||
IF len = 0 THEN RETURN; END;
|
||||
ldt:=SYSTEM.CAST(lclDataTp,x^.cd);
|
||||
cht:=SYSTEM.CAST(charTap,buf);
|
||||
WITH ldt^ DO
|
||||
FOR i:=0 TO len-1 DO
|
||||
ch:=cht^[i];
|
||||
wrSmb(ch);
|
||||
IF ch = 377C THEN wrSmb(ch); END;
|
||||
ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1;
|
||||
IF smc=rbldFrq THEN
|
||||
clcTab();
|
||||
smc:=0;
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
x^.result:=IOChan.ReadResult(ldt^.chid);
|
||||
END RawWrite;
|
||||
|
||||
PROCEDURE RawRead(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS;
|
||||
blen: CARDINAL; VAR len: CARDINAL);
|
||||
VAR
|
||||
i : CARDINAL;
|
||||
cht : charTap;
|
||||
ch : CHAR;
|
||||
BEGIN
|
||||
ldt:=SYSTEM.CAST(lclDataTp,x^.cd);
|
||||
cht:=SYSTEM.CAST(charTap,buf);
|
||||
IF (blen=0) OR (x^.result<>IOConsts.allRight) THEN len:=0; RETURN; END;
|
||||
WITH ldt^ DO
|
||||
FOR i:=0 TO blen-1 DO
|
||||
ch:=getSym();
|
||||
IF ch = 377C THEN
|
||||
ch:=getSym();
|
||||
IF ch = 0C THEN
|
||||
x^.result:=IOConsts.endOfInput;
|
||||
len:=i; cht^[i]:=0C;
|
||||
RETURN;
|
||||
END;
|
||||
END;
|
||||
cht^[i]:=ch;
|
||||
ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1;
|
||||
IF smc=rbldFrq THEN
|
||||
clcTab();
|
||||
smc:=0;
|
||||
END;
|
||||
END;
|
||||
len:=blen;
|
||||
END;
|
||||
END RawRead;
|
||||
|
||||
PROCEDURE CreateAlias(VAR cid: ChanId; io: ChanId; VAR res: OpenResults);
|
||||
VAR
|
||||
x : IOLink.DeviceTablePtr;
|
||||
BEGIN
|
||||
IOLink.MakeChan(did,cid);
|
||||
IF cid = IOChan.InvalidChan() THEN
|
||||
res:=ChanConsts.outOfChans
|
||||
ELSE
|
||||
NEW(ldt);
|
||||
IF ldt=NIL THEN
|
||||
IOLink.UnMakeChan(did,cid);
|
||||
res:=ChanConsts.outOfChans;
|
||||
RETURN;
|
||||
END;
|
||||
x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,"");
|
||||
ldt^.chid:=io;
|
||||
x^.cd:=ldt;
|
||||
x^.doRawWrite:=RawWrite;
|
||||
x^.doRawRead:=RawRead;
|
||||
res:=ChanConsts.opened;
|
||||
iniHuf();
|
||||
x^.result:=IOConsts.allRight;
|
||||
END;
|
||||
END CreateAlias;
|
||||
|
||||
PROCEDURE DeleteAlias(VAR cid: ChanId);
|
||||
VAR
|
||||
x : IOLink.DeviceTablePtr;
|
||||
BEGIN
|
||||
x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,"");
|
||||
ldt:=x^.cd;
|
||||
IF ldt^.rbc=0 THEN
|
||||
wrSmb(377C);
|
||||
wrSmb(0C);
|
||||
flush();
|
||||
END;
|
||||
DISPOSE(ldt);
|
||||
IOLink.UnMakeChan(did,cid);
|
||||
END DeleteAlias;
|
||||
|
||||
BEGIN
|
||||
IOLink.AllocateDeviceId(did);
|
||||
END HuffChan.
|
||||
109
samples/NCL/PrnOscPat_driver.ncl
Normal file
109
samples/NCL/PrnOscPat_driver.ncl
Normal file
@@ -0,0 +1,109 @@
|
||||
undef("PrnOscPat_driver")
|
||||
function PrnOscPat_driver(eof[*][*][*]:numeric, eof_ts[*][*]:numeric, kPOP[1]:integer)
|
||||
; =================================================================
|
||||
; compute Principal Oscillation Patterns (POPs)
|
||||
; =================================================================
|
||||
local dim_ts, dim_eof, neof, ntim, nlat, mlon, dnam_ts, dnam_eof, neof, j \
|
||||
, cov0, cov1, cov0_inverse, A, z, Z, pr, pi, zr, zi, mean, stdev \
|
||||
, evlr, eigi, eigr
|
||||
begin
|
||||
|
||||
dim_ts = dimsizes(eof_ts) ; (neof,ntim)
|
||||
dim_eof = dimsizes(eof) ; (neof,nlat,mlon)
|
||||
|
||||
ntim = dim_ts(1)
|
||||
neof = dim_eof(0)
|
||||
nlat = dim_eof(1)
|
||||
mlon = dim_eof(2)
|
||||
|
||||
dnam_ts = getvardims(eof_ts) ; dimension names
|
||||
dnam_eof= getvardims(eof) ; used at end for meta data
|
||||
|
||||
; =================================================================
|
||||
; lag-0 and lag-1 matrices
|
||||
; =================================================================
|
||||
|
||||
if (get_ncl_version().eq."6.1.2") then ; bug in 6.1.2
|
||||
cov0 = covcorm(eof_ts,(/1,0/)) ; lag-0 covariance matrix
|
||||
else
|
||||
cov0 = covcorm(eof_ts,(/0,1/)) ; lag-0 covariance matrix (n x n)
|
||||
end if
|
||||
; either
|
||||
cov1 = covcorm_xy(eof_ts, eof_ts, (/0,1,0/)) ; lag-1
|
||||
;cov1 = covcorm_xy(eof_ts(:,0:ntim-2) \ ; alternative, brute force
|
||||
; ,eof_ts(:,1:ntim-1), (/0,0,0/))
|
||||
;printVarSummary(cov1)
|
||||
|
||||
; =================================================================
|
||||
; matrix A contains information for evolution of the POP system.
|
||||
; POPs are eigenvectors of A.
|
||||
; =================================================================
|
||||
|
||||
cov0_inverse = inverse_matrix(cov0)
|
||||
A = cov1#inverse_matrix(cov0) ; [*][*] => neof x neof
|
||||
|
||||
; =================================================================
|
||||
; NCL 6.1.1 of dgeevx: evlr(2,2,N,N) ; (left(0)/right(1), real(0)/imag(1),:,:)
|
||||
; Eigenvalues are returned as attributes: eigi = evlr@eigi ; eigr = evlr@eigr
|
||||
; =================================================================
|
||||
|
||||
evlr = dgeevx_lapack(A, "B", "V", "V", "B", False)
|
||||
|
||||
; =================================================================
|
||||
; POP time series from eigenvalues and right eigenvectors
|
||||
; =================================================================
|
||||
;PR = (/ evlr(1,0,:,:) /) ; right ev (1), real part (0)
|
||||
;PI = (/ evlr(1,1,:,:) /) ; right ev (1), imag part (1)
|
||||
; kPOP is what we want; use righteigenvector
|
||||
pr = (/ evlr(1,0,kPOP-1,:) /) ; right ev (1), real part (0), row 'kPOP-1'
|
||||
pi = (/ evlr(1,1,kPOP-1,:) /) ; right ev (1), imag part (1), row 'kPOP-1'
|
||||
|
||||
z = inverse_matrix( (/ (/sum(pr*pr), sum(pr*pi)/) \
|
||||
, (/sum(pr*pi), sum(pi*pi)/) /))#(/pr,pi/)#eof_ts
|
||||
|
||||
; complex conjugate
|
||||
z = (/z(0,:), -z(1,:)/) ; real & imag series
|
||||
z = dim_rmvmean_n(z,1)
|
||||
mean = dim_avg_n(z,1) ; calculate mean
|
||||
stdev= dim_stddev_n(z,1) ; calculate stdev
|
||||
z = dim_standardize_n(z,1,1) ; standardize time series
|
||||
|
||||
z!0 = "nPOP" ; add meta data
|
||||
z!1 = dnam_ts(1)
|
||||
z&nPOP = (/0,1/)
|
||||
z&$dnam_ts(1)$ = eof_ts&$dnam_ts(1)$
|
||||
z@stdev = stdev
|
||||
z@mean = mean
|
||||
z@long_name = "POP timeseries"
|
||||
;printVarSummary(z)
|
||||
|
||||
; =================================================================
|
||||
; POP spatial patterns
|
||||
; =================================================================
|
||||
|
||||
zr = pr(0)*eof(0,:,:) ; construct POP spatial domain
|
||||
zi = pi(0)*eof(0,:,:)
|
||||
do j=1,neof-1
|
||||
zr = zr + pr(j)*eof(j,:,:)
|
||||
zi = zi + pi(j)*eof(j,:,:)
|
||||
end do
|
||||
|
||||
Z = (/zr*stdev(0), -zi*stdev(1)/) ; scale patterns by time series stdev
|
||||
|
||||
Z!0 = "nPOP" ; add meta data
|
||||
Z!1 = dnam_eof(1)
|
||||
Z!2 = dnam_eof(2)
|
||||
|
||||
Z&nPOP = (/0,1/)
|
||||
Z&$dnam_eof(1)$ = eof&$dnam_eof(1)$
|
||||
Z&$dnam_eof(2)$ = eof&$dnam_eof(2)$
|
||||
Z@long_name = "POP pattern"
|
||||
;printVarSummary(Z)
|
||||
|
||||
; =================================================================
|
||||
; return POP time series and POP spatial patterns as a
|
||||
; variable of type 'list' which contains 2 variables
|
||||
; =================================================================
|
||||
|
||||
return( [/z, Z/] ) ; this is type "list"
|
||||
end
|
||||
115
samples/NCL/WRF_static_2.ncl
Normal file
115
samples/NCL/WRF_static_2.ncl
Normal file
@@ -0,0 +1,115 @@
|
||||
;*************************************************
|
||||
; WRF static: panel different variables
|
||||
;************************************************
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl"
|
||||
begin
|
||||
;************************************************
|
||||
; open file and read in data
|
||||
;************************************************
|
||||
f = addfile("static.wrfsi.nc", "r")
|
||||
;************************************************
|
||||
; Read variables
|
||||
;************************************************
|
||||
use = f->use(0,0,:,:) ; land use dominant category
|
||||
stl = f->stl(0,0,:,:) ; top layer (0-30cm) dom cat soiltype
|
||||
sbl = f->sbl(0,0,:,:) ; bottom layer (30-90cm) dom cat soiltype
|
||||
lat2d = f->lat(0,0,:,:)
|
||||
lon2d = f->lon(0,0,:,:)
|
||||
lsMask= f->lnd(0,0,:,:) ; land (1) water (0) mas
|
||||
|
||||
;************************************************
|
||||
; Use mask function to set all ocean areas to _FillValue
|
||||
;************************************************
|
||||
use = mask(use,lsMask,1)
|
||||
stl = mask(stl,lsMask,1)
|
||||
sbl = mask(sbl,lsMask,1)
|
||||
|
||||
;************************************************
|
||||
; Associate 2D coordinates with variables for plotting
|
||||
;************************************************
|
||||
use@lat2d = lat2d
|
||||
use@lon2d = lon2d
|
||||
stl@lat2d = lat2d
|
||||
stl@lon2d = lon2d
|
||||
sbl@lat2d = lat2d
|
||||
sbl@lon2d = lon2d
|
||||
|
||||
;************************************************
|
||||
; The file should be examined via: ncdump -v grid_type static.wrsi
|
||||
; This will print the print type. then enter below.
|
||||
;************************************************
|
||||
projection = "mercator"
|
||||
|
||||
;************************************************
|
||||
; create plots
|
||||
;************************************************
|
||||
wks = gsn_open_wks("ps" ,"WRF_static") ; ps,pdf,x11,ncgm,eps
|
||||
gsn_define_colormap(wks ,"BlAqGrYeOrReVi200"); choose colormap
|
||||
|
||||
res = True ; plot mods desired
|
||||
res@gsnSpreadColors = True ; use full range of colormap
|
||||
res@cnFillOn = True ; color plot desired
|
||||
res@cnLinesOn = False ; turn off contour lines
|
||||
res@cnLineLabelsOn = False ; turn off contour labels
|
||||
res@cnLevelSpacingF = 1 ; manually specify interval
|
||||
res@cnFillMode = "RasterFill" ; activate raster mode
|
||||
res@lbLabelAutoStride = True ; let NCL figure lb stride
|
||||
|
||||
;************************************************
|
||||
; Turn on lat / lon labeling
|
||||
;************************************************
|
||||
;;res@pmTickMarkDisplayMode = "Always" ; turn on tickmarks
|
||||
|
||||
dimll = dimsizes(lat2d)
|
||||
nlat = dimll(0)
|
||||
mlon = dimll(1)
|
||||
|
||||
res@mpProjection = projection
|
||||
res@mpLimitMode = "Corners"
|
||||
res@mpLeftCornerLatF = lat2d(0,0)
|
||||
res@mpLeftCornerLonF = lon2d(0,0)
|
||||
res@mpRightCornerLatF = lat2d(nlat-1,mlon-1)
|
||||
res@mpRightCornerLonF = lon2d(nlat-1,mlon-1)
|
||||
|
||||
res@mpCenterLonF = f->LoV ; set center logitude
|
||||
|
||||
if (projection.eq."LambertConformal") then
|
||||
res@mpLambertParallel1F = f->Latin1
|
||||
res@mpLambertParallel2F = f->Latin2
|
||||
res@mpLambertMeridianF = f->LoV
|
||||
end if
|
||||
|
||||
res@mpFillOn = False ; turn off map fill
|
||||
res@mpOutlineDrawOrder = "PostDraw" ; draw continental outline last
|
||||
res@mpOutlineBoundarySets = "GeophysicalAndUSStates" ; state boundaries
|
||||
|
||||
;;res@tfDoNDCOverlay = True ; True only for 'native' grid
|
||||
res@gsnAddCyclic = False ; data are not cyclic
|
||||
|
||||
;************************************************
|
||||
; allocate array for 3 plots
|
||||
;************************************************
|
||||
plts = new (3,"graphic")
|
||||
|
||||
;************************************************
|
||||
; Tell NCL not to draw or advance frame for individual plots
|
||||
;************************************************
|
||||
res@gsnDraw = False ; (a) do not draw
|
||||
res@gsnFrame = False ; (b) do not advance 'frame'
|
||||
|
||||
plts(0) = gsn_csm_contour_map(wks,use,res)
|
||||
plts(1) = gsn_csm_contour_map(wks,stl,res)
|
||||
plts(2) = gsn_csm_contour_map(wks,sbl,res)
|
||||
;************************************************
|
||||
; create panel: panel plots have their own set of resources
|
||||
;************************************************
|
||||
resP = True ; modify the panel plot
|
||||
resP@txString = "Land Use and Soil Type"
|
||||
resP@gsnMaximize = True ; maximize panel area
|
||||
resP@gsnPanelRowSpec = True ; specify 1 top, 2 lower level
|
||||
gsn_panel(wks,plts,(/1,2/),resP) ; now draw as one plot
|
||||
|
||||
end
|
||||
|
||||
160
samples/NCL/WRF_track_1.ncl
Normal file
160
samples/NCL/WRF_track_1.ncl
Normal file
@@ -0,0 +1,160 @@
|
||||
;********************************************************
|
||||
; Plot storm stracks from wrfout files.
|
||||
;********************************************************
|
||||
;
|
||||
; JUN-18-2005
|
||||
; So-Young Ha (MMM/NCAR)
|
||||
; SEP-01-2006
|
||||
; Slightly modified by Mary Haley to add some extra comments.
|
||||
; ===========================================
|
||||
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
|
||||
|
||||
|
||||
begin
|
||||
|
||||
; DATES
|
||||
date = (/1512,1600,1612,1700,1712,1800,1812,1900/)
|
||||
ndate = dimsizes(date)
|
||||
|
||||
sdate = sprinti("%4.0i",date)
|
||||
|
||||
; Experiment name (for legend)
|
||||
EXP = (/"EXP_I"/) ; (/"EXP_I","EXP_II","EXP_III"/)
|
||||
nexp = dimsizes(EXP)
|
||||
|
||||
; To get lat/lon info.
|
||||
|
||||
a = addfile("wrfout_d01_2003-07-15_00:00:00.nc","r")
|
||||
|
||||
lat2d = a->XLAT(0,:,:)
|
||||
lon2d = a->XLONG(0,:,:)
|
||||
dimll = dimsizes(lat2d)
|
||||
nlat = dimll(0)
|
||||
mlon = dimll(1)
|
||||
|
||||
; Sea Level Pressure
|
||||
slp = wrf_user_getvar(a,"slp",0)
|
||||
dims = dimsizes(slp)
|
||||
|
||||
; Array for track
|
||||
time = new(ndate,string)
|
||||
imin = new(ndate,integer)
|
||||
jmin = new(ndate,integer)
|
||||
smin = new(ndate,integer)
|
||||
|
||||
; =======
|
||||
; ndate
|
||||
; =======
|
||||
fs = systemfunc("ls wrfout*00")
|
||||
nfs= dimsizes(fs)
|
||||
if(nfs .ne. ndate) then
|
||||
print("Check input data:"+nfs+" .ne. "+ndate)
|
||||
end if
|
||||
|
||||
do ifs=0,nfs-1
|
||||
f = addfile(fs(ifs)+".nc","r")
|
||||
time(ifs) = wrf_user_list_times(f)
|
||||
; print(time(ifs))
|
||||
slp2d = wrf_user_getvar(f,"slp",0)
|
||||
|
||||
; We need to convert 2-D array to 1-D array to find the minima.
|
||||
slp1d = ndtooned(slp2d)
|
||||
smin(ifs) = minind(slp1d)
|
||||
|
||||
; Convert the index for 1-D array back to the indeces for 2-D array.
|
||||
minij = ind_resolve(ind(slp1d.eq.min(slp2d)),dims)
|
||||
imin(ifs) = minij(0,0)
|
||||
jmin(ifs) = minij(0,1)
|
||||
|
||||
; print(time(ifs)+" : "+min(slp2d)+" ("+imin(ifs)+","+jmin(ifs)+")")
|
||||
end do
|
||||
;
|
||||
|
||||
; Graphics section
|
||||
|
||||
wks=gsn_open_wks("ps","track") ; Open PS file.
|
||||
gsn_define_colormap(wks,"BlGrYeOrReVi200") ; Change color map.
|
||||
|
||||
res = True
|
||||
res@gsnDraw = False ; Turn off draw.
|
||||
res@gsnFrame = False ; Turn off frame advance.
|
||||
res@gsnMaximize = True ; Maximize plot in frame.
|
||||
|
||||
res@tiMainString = "Hurricane Isabel" ; Main title
|
||||
|
||||
WRF_map_c(a,res,0) ; Set up map resources
|
||||
; (plot options)
|
||||
plot = gsn_csm_map(wks,res) ; Create a map.
|
||||
|
||||
; Set up resources for polymarkers.
|
||||
gsres = True
|
||||
gsres@gsMarkerIndex = 16 ; filled dot
|
||||
;gsres@gsMarkerSizeF = 0.005 ; default - 0.007
|
||||
cols = (/5,160,40/)
|
||||
|
||||
; Set up resources for polylines.
|
||||
res_lines = True
|
||||
res_lines@gsLineThicknessF = 3. ; 3x as thick
|
||||
|
||||
dot = new(ndate,graphic) ; Make sure each gsn_add_polyxxx call
|
||||
line = new(ndate,graphic) ; is assigned to a unique variable.
|
||||
|
||||
; Loop through each date and add polylines to the plot.
|
||||
do i = 0,ndate-2
|
||||
res_lines@gsLineColor = cols(0)
|
||||
xx=(/lon2d(imin(i),jmin(i)),lon2d(imin(i+1),jmin(i+1))/)
|
||||
yy=(/lat2d(imin(i),jmin(i)),lat2d(imin(i+1),jmin(i+1))/)
|
||||
line(i) = gsn_add_polyline(wks,plot,xx,yy,res_lines)
|
||||
end do
|
||||
|
||||
lon1d = ndtooned(lon2d)
|
||||
lat1d = ndtooned(lat2d)
|
||||
|
||||
; Loop through each date and add polymarkers to the plot.
|
||||
do i = 0,ndate-1
|
||||
print("dot:"+lon1d(smin(i))+","+lat1d(smin(i)))
|
||||
gsres@gsMarkerColor = cols(0)
|
||||
dot(i)=gsn_add_polymarker(wks,plot,lon1d(smin(i)),lat1d(smin(i)),gsres)
|
||||
end do
|
||||
|
||||
; Date (Legend)
|
||||
txres = True
|
||||
txres@txFontHeightF = 0.015
|
||||
txres@txFontColor = cols(0)
|
||||
|
||||
txid1 = new(ndate,graphic)
|
||||
; Loop through each date and draw a text string on the plot.
|
||||
do i = 0, ndate-1
|
||||
txres@txJust = "CenterRight"
|
||||
ix = smin(i) - 4
|
||||
print("Eye:"+ix)
|
||||
if(i.eq.1) then
|
||||
txres@txJust = "CenterLeft"
|
||||
ix = ix + 8
|
||||
end if
|
||||
txid1(i) = gsn_add_text(wks,plot,sdate(i),lon1d(ix),lat1d(ix),txres)
|
||||
end do
|
||||
|
||||
; Add marker and text for legend. (Or you can just use "pmLegend" instead.)
|
||||
txres@txJust = "CenterLeft"
|
||||
|
||||
txid2 = new(nexp,graphic)
|
||||
pmid2 = new(nexp,graphic)
|
||||
do i = 0,nexp-1
|
||||
gsres@gsMarkerColor = cols(i)
|
||||
txres@txFontColor = cols(i)
|
||||
ii = ((/129,119,109/)) ; ilat
|
||||
jj = ((/110,110,110/)) ; jlon
|
||||
ji = ii*mlon+jj ; col x row
|
||||
pmid2(i) = gsn_add_polymarker(wks,plot,lon1d(ji(i)),lat1d(ji(i)),gsres)
|
||||
txid2(i) = gsn_add_text(wks,plot,EXP(i),lon1d(ji(i)+5),lat1d(ji(i)),txres)
|
||||
end do
|
||||
|
||||
draw(plot)
|
||||
frame(wks)
|
||||
end
|
||||
129
samples/NCL/cru_8.ncl
Normal file
129
samples/NCL/cru_8.ncl
Normal file
@@ -0,0 +1,129 @@
|
||||
;*****************************************************
|
||||
; cru_8.ncl
|
||||
;
|
||||
; Concepts illustrated:
|
||||
; - Plotting CRU (Climate Research Unit)/ BADC data
|
||||
; - Selecting a sub-period
|
||||
; - calculating a climatology
|
||||
; - Drawing raster contours; very basic graphics
|
||||
;
|
||||
;*****************************************************
|
||||
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; not needed 6.20 onward
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
|
||||
|
||||
; create references (pointers) to the files
|
||||
|
||||
diri = "./"
|
||||
fcld = addfile(diri+"cru_ts3.21.1901.2012.cld.dat.nc", "r")
|
||||
fdtr = addfile(diri+"cru_ts3.21.1901.2012.dtr.dat.nc", "r")
|
||||
ffrs = addfile(diri+"cru_ts3.21.1901.2012.frs.dat.nc", "r")
|
||||
fpet = addfile(diri+"cru_ts3.21.1901.2012.pet.dat.nc", "r")
|
||||
fpre = addfile(diri+"cru_ts3.21.1901.2012.pre.dat.nc", "r")
|
||||
ftmn = addfile(diri+"cru_ts3.21.1901.2012.tmn.dat.nc", "r")
|
||||
ftmp = addfile(diri+"cru_ts3.21.1901.2012.tmp.dat.nc", "r")
|
||||
ftmx = addfile(diri+"cru_ts3.21.1901.2012.tmx.dat.nc", "r")
|
||||
fvap = addfile(diri+"cru_ts3.21.1901.2012.vap.dat.nc", "r")
|
||||
fwet = addfile(diri+"cru_ts3.21.1901.2012.wet.dat.nc", "r")
|
||||
|
||||
; specify start & last dates (arbitrary)
|
||||
|
||||
ymStrt = 199101
|
||||
ymLast = 200012
|
||||
|
||||
; get index values of start/lat dates
|
||||
|
||||
time = fcld->time
|
||||
yyyymm = cd_calendar(time, -1)
|
||||
|
||||
ntStrt = ind(yyyymm.eq.ymStrt) ; index values
|
||||
ntLast = ind(yyyymm.eq.ymLast)
|
||||
|
||||
; read time segment
|
||||
|
||||
cld = fcld->cld(ntStrt:ntLast,:,:)
|
||||
dtr = fdtr->dtr(ntStrt:ntLast,:,:)
|
||||
frs = ffrs->frs(ntStrt:ntLast,:,:)
|
||||
pet = fpet->pet(ntStrt:ntLast,:,:)
|
||||
pre = fpre->pre(ntStrt:ntLast,:,:)
|
||||
tmn = ftmn->tmn(ntStrt:ntLast,:,:)
|
||||
tmp = ftmp->tmp(ntStrt:ntLast,:,:)
|
||||
tmx = ftmx->tmx(ntStrt:ntLast,:,:)
|
||||
vap = fvap->vap(ntStrt:ntLast,:,:)
|
||||
wet = fwet->wet(ntStrt:ntLast,:,:)
|
||||
|
||||
printVarSummary(cld) ; [time | 120] x [lat | 360] x [lon | 720]
|
||||
|
||||
; calculate monthly climatologies
|
||||
|
||||
cldclm = clmMonTLL(cld)
|
||||
dtrclm = clmMonTLL(dtr)
|
||||
frsclm = clmMonTLL(frs)
|
||||
petclm = clmMonTLL(pet)
|
||||
preclm = clmMonTLL(pre)
|
||||
tmnclm = clmMonTLL(tmn)
|
||||
tmpclm = clmMonTLL(tmp)
|
||||
tmxclm = clmMonTLL(tmx)
|
||||
vapclm = clmMonTLL(vap)
|
||||
wetclm = clmMonTLL(wet)
|
||||
|
||||
|
||||
printVarSummary(cldclm) ; [month | 12] x [lat | 360] x [lon | 720]
|
||||
|
||||
;************************************
|
||||
; create plots ... very simple
|
||||
;************************************
|
||||
|
||||
nt = 6
|
||||
month = "July"
|
||||
yrStrt = ymStrt/100
|
||||
yrLast = ymLast/100
|
||||
title = month+": "+yrStrt+"-"+yrLast
|
||||
|
||||
wks = gsn_open_wks("ps","cru") ; open a ps file
|
||||
gsn_define_colormap(wks,"ncl_default") ; choose colormap; not needed 6.20 onward
|
||||
plot = new(2,graphic) ; create graphic array
|
||||
|
||||
res = True
|
||||
res@cnFillOn = True ; turn on color fill; not needed 6.20 onward
|
||||
res@cnFillMode = "RasterFill" ; Raster Mode
|
||||
res@cnLinesOn = False ; Turn off contour lines
|
||||
|
||||
res@gsnDraw = False ; do not draw picture
|
||||
res@gsnFrame = False ; do not advance frame
|
||||
res@lbOrientation = "Vertical" ; vertical label bar
|
||||
|
||||
resp = True
|
||||
resp@gsnMaximize = True ; make ps, eps, pdf large
|
||||
|
||||
resp@txString = title+": CLD, FRS"
|
||||
plot(0)=gsn_csm_contour_map_ce(wks,cldclm(nt,:,:),res)
|
||||
plot(1)=gsn_csm_contour_map_ce(wks,frsclm(nt,:,:),res)
|
||||
gsn_panel(wks,plot,(/2,1/),resp)
|
||||
|
||||
resp@txString = title+": PET, VAP"
|
||||
plot(0)=gsn_csm_contour_map_ce(wks,petclm(nt,:,:),res)
|
||||
plot(1)=gsn_csm_contour_map_ce(wks,vapclm(nt,:,:),res)
|
||||
gsn_panel(wks,plot,(/2,1/),resp)
|
||||
|
||||
resp@txString = title+": TMN, TMX"
|
||||
plot(0)=gsn_csm_contour_map_ce(wks,tmnclm(nt,:,:),res)
|
||||
plot(1)=gsn_csm_contour_map_ce(wks,tmxclm(nt,:,:),res)
|
||||
gsn_panel(wks,plot,(/2,1/),resp)
|
||||
|
||||
resp@txString = title+": TMP, DTR"
|
||||
plot(0)=gsn_csm_contour_map_ce(wks,tmpclm(nt,:,:),res)
|
||||
plot(1)=gsn_csm_contour_map_ce(wks,dtrclm(nt,:,:),res)
|
||||
gsn_panel(wks,plot,(/2,1/),resp)
|
||||
|
||||
resp@txString = title+": WET, PRE"
|
||||
plot(0)=gsn_csm_contour_map_ce(wks,wetclm(nt,:,:),res)
|
||||
|
||||
;colors = (/ ... /)
|
||||
;res@cnFillPalette = colors ; optional: distinct colors for categories
|
||||
res@cnLevelSelectionMode = "ExplicitLevels" ; use unequal spacing
|
||||
res@cnLevels = (/2.0,10,25,37.5,50,75,100,125,150,175,200,300,400,500,750/)
|
||||
|
||||
plot(1)=gsn_csm_contour_map_ce(wks,preclm(nt,:,:),res)
|
||||
gsn_panel(wks,plot,(/2,1/),resp)
|
||||
20
samples/NCL/gsn_csm_xy2_time_series_inputs.ncl
Normal file
20
samples/NCL/gsn_csm_xy2_time_series_inputs.ncl
Normal file
@@ -0,0 +1,20 @@
|
||||
;******************** Inputs Regarding Input and Output Data *************************************
|
||||
|
||||
;netCDFFilePath = "NULL-MYD04_L2.051-MIL2ASAE.0022-AERONET_AOD_L2.2-20112106165049.nc"
|
||||
;outputFilePath = "plot-output"
|
||||
|
||||
;******************* Inputs Regarding Data Structure ***********************************************
|
||||
|
||||
;lPlotVariablesList = "mean_AERONET_AOD_L2_2_AOD0558intrp_Ames,mean_MIL2ASAE_0022_AOD0866b_Ames"
|
||||
;rPlotVariablesList = "medn_MYD04_L2_051_AOD0550dpbl_l_Ames"
|
||||
|
||||
;xDimName = "time"
|
||||
;xDimSize = 365
|
||||
|
||||
;******************* Inputs Regarding the View Annotations ****************************************
|
||||
|
||||
;title = "MAPSS Time Series"
|
||||
;yLAxisLabel = "Mean AOD"
|
||||
;yRAxisLabel = "Median AOD"
|
||||
|
||||
;*******************END INPUTS ********************************************************************
|
||||
128
samples/NCL/hdf4sds_7.ncl
Normal file
128
samples/NCL/hdf4sds_7.ncl
Normal file
@@ -0,0 +1,128 @@
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
|
||||
;**************************************************************
|
||||
; User Input
|
||||
;***************************************************************
|
||||
; INPUT
|
||||
diri = "./" ; input directory
|
||||
fili = "wv_LV3_MET08_20050102_12345678_L00013712E00013712.hdf"
|
||||
|
||||
pltDir = "./" ; directory for plot output
|
||||
sfx = get_file_suffix(fili,1)
|
||||
;pltName = sfx@fBase ; output graphic name
|
||||
pltName = "hdf4sds"
|
||||
pltType = "ps"
|
||||
|
||||
;***************************************************************
|
||||
; End User Input
|
||||
;***************************************************************
|
||||
|
||||
;***************************************************************
|
||||
; Open SEVIRI L3 'wv' HDF file
|
||||
;***************************************************************
|
||||
; Note the rather unusual data format: flag *prepended* to data value
|
||||
;***************************************************************
|
||||
; integer twc_lv3 ( fakeDim0, fakeDim1 )
|
||||
; long_name : total water vapour column + flag
|
||||
; units : fmmmm
|
||||
; format : I4
|
||||
; valid_range : ( 10000, 38000 )
|
||||
; _FillValue : -99
|
||||
; legend_01 : f = flag
|
||||
; legend_02 : f = 1 averaged level 2 values
|
||||
; legend_03 : f = 2 interpolated from averaged level 2 values
|
||||
; legend_04 : f = 3 gaps filled with NVAP climatology
|
||||
; legend_05 : mmmm = water vapour column in mm * 100. as integer
|
||||
; legend_06 : Example: 11025 means: flag = 1, 10.25 mm water vapour column
|
||||
; min_lat : -74.75
|
||||
; max_lat : 61.75
|
||||
; min_lon : -75.25
|
||||
; max_lon : 75.25
|
||||
; dlat : 0.5
|
||||
; dlon : 0.5
|
||||
;---------------------------------------------------------------
|
||||
|
||||
f = addfile (diri+fili, "r")
|
||||
ifx = f->twc_lv3 ; fmmmm (integer)
|
||||
printVarSummary(ifx)
|
||||
|
||||
flag = ifx/10000 ; extract flag
|
||||
ix = ifx - flag*10000 ; extract mmmm
|
||||
x = ix*0.01 ; scale
|
||||
|
||||
; create meta data for 'x'
|
||||
|
||||
dimx = dimsizes(x)
|
||||
nlat = dimx(0) ; grid size x(nlat,mlon)
|
||||
mlon = dimx(1)
|
||||
|
||||
lat = fspan(ifx@min_lat, ifx@max_lat, nlat)
|
||||
lat@units = "degrees_north"
|
||||
lon = fspan(ifx@min_lon, ifx@max_lon, mlon)
|
||||
lon@units = "degrees_east"
|
||||
|
||||
x!0 = "lat"
|
||||
x!1 = "lon"
|
||||
x&lat = lat
|
||||
x&lon = lon
|
||||
x@long_name = "SEVIRI: Total Water Vapor"
|
||||
x@units = "mm"
|
||||
|
||||
delete( [/ifx, ix/] ) ; no longer needed
|
||||
|
||||
;***************************************************************
|
||||
; Create plot
|
||||
;***************************************************************
|
||||
wks = gsn_open_wks(pltType, pltDir+pltName)
|
||||
|
||||
plot = new (2, "graphic")
|
||||
|
||||
res = True ; plot mods desired
|
||||
res@gsnAddCyclic = False ; data noty global
|
||||
res@gsnDraw = False
|
||||
res@gsnFrame = False
|
||||
|
||||
res@cnFillOn = True ; turn on color fill
|
||||
res@cnLinesOn = False ; turn of contour lines
|
||||
res@cnFillMode = "RasterFill" ; Raster Mode
|
||||
res@cnLinesOn = False ; Turn off contour lines
|
||||
res@cnLineLabelsOn = False ; Turn off contour lines
|
||||
res@cnMissingValFillColor= "background" ; "foreground"
|
||||
|
||||
res@mpCenterLonF = 0.5*(min(x&lon) + max(x&lon))
|
||||
res@mpMinLatF = min(x&lat)
|
||||
res@mpMaxLatF = max(x&lat)
|
||||
res@mpMinLonF = min(x&lon)
|
||||
res@mpMaxLonF = max(x&lon)
|
||||
|
||||
;res@lbOrientation = "Vertical"
|
||||
|
||||
plot(0) = gsn_csm_contour_map_ce(wks,x, res)
|
||||
|
||||
; plot flag
|
||||
|
||||
copy_VarCoords(x, flag)
|
||||
flag@long_name = "Flag"
|
||||
flag@units = "1=avg(L2), 2=int(L2), 3=NVAP"
|
||||
print(flag&lat+" "+flag(:,{30}))
|
||||
|
||||
res@cnLevelSelectionMode = "ManualLevels" ; set manual contour levels
|
||||
res@cnMinLevelValF = 2 ; set min contour level
|
||||
res@cnMaxLevelValF = 3 ; one less than max
|
||||
res@cnLevelSpacingF = 1 ; set contour spacing
|
||||
|
||||
res@lbLabelStrings = ispan(1,3,1) ; 1, 2, 3
|
||||
res@lbLabelPosition = "Center" ; label position
|
||||
res@lbLabelAlignment = "BoxCenters"
|
||||
|
||||
res@gsnLeftString = ""
|
||||
res@gsnRightString = ""
|
||||
res@gsnCenterString = "flag: 1=avg(L2), 2=int(L2), 3=NVAP"
|
||||
|
||||
plot(1) = gsn_csm_contour_map_ce(wks,flag, res)
|
||||
|
||||
resP = True ; modify the panel plot
|
||||
resP@txString = fili
|
||||
resP@gsnMaximize = True
|
||||
gsn_panel(wks,plot,(/1,2/),resP) ; now draw as one plot
|
||||
125
samples/NCL/mask_12.ncl
Normal file
125
samples/NCL/mask_12.ncl
Normal file
@@ -0,0 +1,125 @@
|
||||
;----------------------------------------------------------------------
|
||||
; mask_12.ncl
|
||||
;
|
||||
; Concepts illustrated:
|
||||
; - Using a worldwide shapefile to create a land/ocean mask
|
||||
; - Masking a data array based on a geographical area
|
||||
; - Attaching shapefile polylines to a map plot
|
||||
; - Attaching lat/lon points to a map using gsn_coordinates
|
||||
;----------------------------------------------------------------------
|
||||
; Downloaded GSHHS shapefiles from:
|
||||
;
|
||||
; http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhg/latest/
|
||||
;
|
||||
; Used the "coarsest" one: "GSHHS_shp/c/GSHHS_c_L1.shp".
|
||||
;----------------------------------------------------------------------
|
||||
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
|
||||
load "./shapefile_mask_data.ncl"
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; Main code
|
||||
;----------------------------------------------------------------------
|
||||
begin
|
||||
WRITE_MASK = True
|
||||
DEBUG = False
|
||||
|
||||
;---Read data to plot and mask
|
||||
dir = "$NCARG_ROOT/lib/ncarg/data/cdf/"
|
||||
cdf_prefix = "uv300"
|
||||
cdf_file = dir + cdf_prefix + ".nc"
|
||||
fin = addfile(cdf_file,"r")
|
||||
u = fin->U(1,:,:)
|
||||
;
|
||||
; Create a mask array the same size as "u", using
|
||||
; lat/lon data read off a shapefile.
|
||||
;
|
||||
shpfile = "GSHHS_shp/c/GSHHS_c_L1.shp"
|
||||
opt = True
|
||||
opt@return_mask = True
|
||||
|
||||
land_mask = shapefile_mask_data(u,shpfile,opt)
|
||||
|
||||
;---Mask "u" against land and ocean.
|
||||
u_land_mask = where(land_mask.eq.1,u,u@_FillValue)
|
||||
u_ocean_mask = where(land_mask.eq.0,u,u@_FillValue)
|
||||
copy_VarMeta(u,u_land_mask)
|
||||
copy_VarMeta(u,u_ocean_mask)
|
||||
|
||||
;---Start the graphics
|
||||
wks = gsn_open_wks("ps","mask")
|
||||
|
||||
res = True
|
||||
|
||||
res@gsnMaximize = True ; maximize plot in frame
|
||||
res@gsnDraw = False ; don't draw plot yet
|
||||
res@gsnFrame = False ; don't advance frame yet
|
||||
|
||||
res@cnFillOn = True
|
||||
res@cnLineLabelsOn = False
|
||||
res@cnLinesOn = False
|
||||
|
||||
;---Make sure both plots have same contour levels
|
||||
mnmxint = nice_mnmxintvl(min(u),max(u),25,False)
|
||||
res@cnLevelSelectionMode = "ManualLevels"
|
||||
res@cnMinLevelValF = mnmxint(0)
|
||||
res@cnMaxLevelValF = mnmxint(1)
|
||||
res@cnLevelSpacingF = mnmxint(2)
|
||||
|
||||
res@lbLabelBarOn = False
|
||||
res@gsnAddCyclic = False
|
||||
|
||||
res@mpFillOn = False
|
||||
res@mpOutlineOn = False
|
||||
|
||||
res@gsnRightString = ""
|
||||
res@gsnLeftString = ""
|
||||
|
||||
;---Create plot of original data and attach shapefile outlines
|
||||
res@tiMainString = "Original data with shapefile outlines"
|
||||
map_data = gsn_csm_contour_map(wks,u,res)
|
||||
dum1 = gsn_add_shapefile_polylines(wks,map_data,shpfile,False)
|
||||
|
||||
;---Create plots of masked data
|
||||
res@tiMainString = "Original data masked against land"
|
||||
map_land_mask = gsn_csm_contour_map(wks,u_land_mask,res)
|
||||
res@tiMainString = "Original data masked against ocean"
|
||||
map_ocean_mask = gsn_csm_contour_map(wks,u_ocean_mask,res)
|
||||
|
||||
if(DEBUG) then
|
||||
mkres = True
|
||||
; mkres@gsMarkerSizeF = 0.007
|
||||
mkres@gsnCoordsAttach = True
|
||||
gsn_coordinates(wks,map_data,u,mkres)
|
||||
mkres@gsnCoordsNonMissingColor = "yellow"
|
||||
mkres@gsnCoordsMissingColor = "black"
|
||||
gsn_coordinates(wks,map_land_mask,u_land_mask,mkres)
|
||||
gsn_coordinates(wks,map_ocean_mask,u_ocean_mask,mkres)
|
||||
end if
|
||||
|
||||
;---Add shapefile outlines
|
||||
dum2 = gsn_add_shapefile_polylines(wks,map_land_mask,shpfile,False)
|
||||
dum3 = gsn_add_shapefile_polylines(wks,map_ocean_mask,shpfile,False)
|
||||
|
||||
;---Draw all three plots on one page
|
||||
pres = True
|
||||
pres@gsnMaximize = True
|
||||
pres@gsnPanelLabelBar = True
|
||||
gsn_panel(wks,(/map_data,map_land_mask,map_ocean_mask/),(/3,1/),pres)
|
||||
|
||||
if(WRITE_MASK) then
|
||||
delete(fin) ; Close file before we open again.
|
||||
;
|
||||
; Make copy of file so we don't overwrite original.
|
||||
; This is not necessary, but it's safer.
|
||||
;
|
||||
new_cdf_file = cdf_prefix + "_with_mask.nc"
|
||||
system("/bin/cp " + cdf_file + " " + new_cdf_file)
|
||||
finout = addfile(new_cdf_file,"w")
|
||||
filevardef(finout, "land_mask", typeof(land_mask), (/ "lat", "lon" /) )
|
||||
finout->land_mask = (/land_mask/)
|
||||
end if
|
||||
end
|
||||
|
||||
115
samples/NCL/mcsst_1.ncl
Normal file
115
samples/NCL/mcsst_1.ncl
Normal file
@@ -0,0 +1,115 @@
|
||||
;*****************************************************
|
||||
; mcsst_1.ncl
|
||||
;
|
||||
; Concepts illustrated:
|
||||
; - Plotting NAVO MCSST data
|
||||
; - Using fbindirread to read in fortran binary data
|
||||
; - Converting "byte" data to "float"
|
||||
; - Adding meta data (attributes and coordinates) to a variable
|
||||
; - Adding gray to an existing color map
|
||||
; - Spanning all but the last two colors in a color map for contour fill
|
||||
; - Drawing raster contours
|
||||
;
|
||||
;*****************************************************
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
;***************************************
|
||||
; type of data available on file
|
||||
;***************************************
|
||||
; ipar=0 Weekly Binned Sea Surface Temperature
|
||||
; ipar=1 Number of Points in Bin
|
||||
; ipar=2 Weekly Binned Sea Surface Temperature Anomaly
|
||||
; ipar=3 Interpolated Sea Surface Temperature
|
||||
; ipar=4 Interpolated Sea Surface Temperature Anomaly
|
||||
;***************************************
|
||||
begin
|
||||
ipar = 3
|
||||
fname = "2001311d18N16.dat"
|
||||
tmp = fbindirread(fname,ipar,(/1024,2048/),"byte")
|
||||
;***************************************
|
||||
; convert to float and then change to true SST
|
||||
;***************************************
|
||||
xslope = 0.15
|
||||
if(ipar.eq.4.or.ipar.eq.2)then ; anom has different intercept
|
||||
yint = -20.0
|
||||
end if
|
||||
if(ipar.eq.3.or.ipar.eq.0)then
|
||||
yint = -3.0
|
||||
end if
|
||||
sst = new((/1024,2048/),"float") ; create float var
|
||||
sst = tmp*xslope+yint ; convert to float
|
||||
delete(tmp) ; delete unecessary array
|
||||
;***************************************
|
||||
; assign missing values. The original missing value was zero, but since it was
|
||||
; not assigned in NCL, it was not recognized. The new missing values are
|
||||
; listed below. These will be changed later.
|
||||
;***************************************
|
||||
if(ipar.eq.4)then
|
||||
sst@_FillValue = -20
|
||||
end if
|
||||
if(ipar.eq.3.or.ipar.eq.0)then
|
||||
sst@_FillValue = -3
|
||||
end if
|
||||
;***************************************
|
||||
; create coordinate variables
|
||||
;***************************************
|
||||
nlat = 1024
|
||||
dy = 180./nlat
|
||||
lat = (90. -(ispan(0,1023,1)*dy))-dy/2
|
||||
lat!0 = "lat"
|
||||
lat&lat = lat
|
||||
lat@units = "degrees_north"
|
||||
|
||||
nlon = 2048
|
||||
dx = 360./nlon
|
||||
lon = (ispan(0,2047,1)*dx)+dx/2-180. ; note -180. added by sjm to align
|
||||
lon!0 = "lon"
|
||||
lon&lon = lon
|
||||
lon@units = "degrees_east"
|
||||
;***************************************
|
||||
; fill out the netCDF data model
|
||||
;***************************************
|
||||
sst!0 = "lat" ; name dimensions
|
||||
sst!1 = "lon" ; ditto
|
||||
sst = sst(::-1,:) ; reverse lat orientation
|
||||
sst@long_name = "NAVO MCSST" ; assign long_name
|
||||
sst@units = "deg C" ; assign units
|
||||
sst&lat = lat ; assign lat cv
|
||||
sst&lon = lon ; assign lon cv
|
||||
sst@_FillValue = -999. ; assign missing value
|
||||
;***************************************
|
||||
; get year and day from filename
|
||||
;***************************************
|
||||
res = True ; plot mods desired
|
||||
title = stringtochar(fname) ; parse file name to get date
|
||||
year = title(0:3)
|
||||
jday = title(4:6)
|
||||
res@gsnCenterString = year+" "+jday ; create center string
|
||||
;***************************************
|
||||
; create plot
|
||||
;***************************************
|
||||
wks = gsn_open_wks("ps","mcsst") ; open workstation (plot destination)
|
||||
gsn_define_colormap(wks,"BlGrYeOrReVi200") ; choose colormap
|
||||
;
|
||||
; This will not be necessary in V6.1.0 and later. Named colors can
|
||||
; be used without having to first add them to the color map.
|
||||
;
|
||||
d = NhlNewColor(wks,0.8,0.8,0.8) ; add gray to colormap
|
||||
|
||||
|
||||
res@cnFillOn = True ; turn on color
|
||||
res@gsnSpreadColors = True ; use full range of colormap
|
||||
res@gsnSpreadColorStart = 2 ; start at color 2
|
||||
res@gsnSpreadColorEnd = -3 ; don't use added gray
|
||||
res@cnLinesOn = False ; no contour lines
|
||||
res@cnFillDrawOrder = "PreDraw" ; draw contours before continents
|
||||
res@gsnMaximize = True ; maximize plot
|
||||
|
||||
|
||||
; For a grid this size, it is better to use raster mode. It will be
|
||||
; significantly faster, and will not go over NCL's 16mb default plot size.
|
||||
res@cnFillMode = "RasterFill" ; turn on raster mode
|
||||
|
||||
plot = gsn_csm_contour_map_ce(wks,sst,res) ; contour the variable
|
||||
|
||||
end
|
||||
3
samples/NCL/primero.ncl
Normal file
3
samples/NCL/primero.ncl
Normal file
@@ -0,0 +1,3 @@
|
||||
val=102
|
||||
a=val/4.
|
||||
print(a)
|
||||
172
samples/NCL/topo_9.ncl
Normal file
172
samples/NCL/topo_9.ncl
Normal file
@@ -0,0 +1,172 @@
|
||||
;----------------------------------------------------------------------
|
||||
; topo_9.ncl
|
||||
;
|
||||
; Concepts illustrated:
|
||||
; - Recreating a jpeg topographic image as an NCL map object
|
||||
; - Zooming in on a jpeg image
|
||||
; - Drawing a box around an area of interest on a map
|
||||
; - Attaching polylines to a map
|
||||
; - Using "overlay" to overlay multiple contour plots
|
||||
; - Using more than 256 colors per frame
|
||||
; - Using functions for cleaner code
|
||||
;----------------------------------------------------------------------
|
||||
; NOTE: This example will only work with NCL V6.1.0 and later.
|
||||
;
|
||||
; This script recreates a JPEG image that was converted to a NetCDF
|
||||
; file with color separated bands using the open source tool
|
||||
; "gdal_translate":
|
||||
;
|
||||
; gdal_translate -ot Int16 -of netCDF EarthMap_2500x1250.jpg \
|
||||
; EarthMap_2500x1250.nc
|
||||
;----------------------------------------------------------------------
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; This function imports a JPEG image that's on the whole globe,
|
||||
; and recreates it as an NCL map object that is zoomed in on the
|
||||
; southern tip of Africa.
|
||||
;----------------------------------------------------------------------
|
||||
undef("recreate_jpeg_image")
|
||||
function recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon)
|
||||
begin
|
||||
orig_jpg_filename = "EarthMap_2500x1250.jpg"
|
||||
nc_filename = "EarthMap_2500x1250.nc"
|
||||
|
||||
;--You could use a system call to do the NetCDF conversion
|
||||
; cmd = "gdal_translate -ot Int16 -of netCDF " + jpeg_filename + \
|
||||
; " " + nc_filename)
|
||||
; system(cmd)
|
||||
|
||||
;---Read the three bands of data
|
||||
f = addfile(nc_filename,"r")
|
||||
Band1 = where(f->Band1.gt.255, 255, f->Band1) ; red channel
|
||||
Band2 = where(f->Band2.gt.255, 255, f->Band2) ; green channel
|
||||
Band3 = where(f->Band3.gt.255, 255, f->Band3) ; blue channel
|
||||
|
||||
band_dims = dimsizes(Band3)
|
||||
nlat = band_dims(0)
|
||||
nlon = band_dims(1)
|
||||
print("dimensions of image = " + nlat + " x " + nlon)
|
||||
|
||||
;
|
||||
; Add lat/lon data so we can overlay on a map, and/or
|
||||
; overlay contours. We know the image is global,
|
||||
; cylindrical equidistant, and centered about lon=0.
|
||||
;
|
||||
lat = fspan( -90, 90,nlat)
|
||||
lon = fspan(-180,180,nlon)
|
||||
lat@units = "degrees_north"
|
||||
lon@units = "degrees_east"
|
||||
|
||||
Band1!0 = "lat"
|
||||
Band1!1 = "lon"
|
||||
Band2!0 = "lat"
|
||||
Band2!1 = "lon"
|
||||
Band3!0 = "lat"
|
||||
Band3!1 = "lon"
|
||||
Band1&lat = lat
|
||||
Band1&lon = lon
|
||||
Band2&lat = lat
|
||||
Band2&lon = lon
|
||||
Band3&lat = lat
|
||||
Band3&lon = lon
|
||||
|
||||
res = True
|
||||
|
||||
res@gsnMaximize = True
|
||||
|
||||
res@gsnFrame = False ; Don't draw or advance
|
||||
res@gsnDraw = False ; frame yet.
|
||||
|
||||
res@cnFillOn = True
|
||||
res@cnFillMode = "RasterFill" ; Raster fill can be faster
|
||||
|
||||
res@cnLevelSelectionMode = "EqualSpacedLevels"
|
||||
res@cnMaxLevelCount = 254
|
||||
res@cnFillBackgroundColor = (/ 1., 1., 1., 1./)
|
||||
|
||||
res@cnLinesOn = False ; Turn off contour lines .
|
||||
res@cnLineLabelsOn = False ; Turn off contour labels
|
||||
res@cnInfoLabelOn = False ; Turn off info label
|
||||
res@lbLabelBarOn = False ; Turn off labelbar
|
||||
res@gsnRightString = "" ; Turn off subtitles
|
||||
res@gsnLeftString = ""
|
||||
res@pmTickMarkDisplayMode = "Always"
|
||||
|
||||
;---Construct RGBA colormaps...
|
||||
ramp = fspan(0., 1., 255)
|
||||
reds = new((/255, 4/), float)
|
||||
greens = new((/255, 4/), float)
|
||||
blues = new((/255, 4/), float)
|
||||
|
||||
reds = 0
|
||||
greens = 0
|
||||
blues = 0
|
||||
|
||||
reds(:,0) = ramp
|
||||
greens(:,1) = ramp
|
||||
blues(:,2) = ramp
|
||||
|
||||
; The red contour map is plotted fully opaque; the green and blue
|
||||
; are plotted completely transparent. When overlain, the colors
|
||||
; combine (rather magically).
|
||||
reds(:,3) = 1.
|
||||
greens(:,3) = 0
|
||||
blues(:,3) = 0
|
||||
|
||||
res@cnFillColors = greens
|
||||
greenMap = gsn_csm_contour(wks, Band2, res)
|
||||
|
||||
res@cnFillColors = blues
|
||||
blueMap = gsn_csm_contour(wks, Band3, res)
|
||||
|
||||
;---This will be our base, so make it a map plot.
|
||||
res@cnFillColors = reds
|
||||
res@gsnAddCyclic = False
|
||||
|
||||
res@mpFillOn = False
|
||||
|
||||
;---Zoom in on area of interest
|
||||
res@mpMinLatF = minlat
|
||||
res@mpMaxLatF = maxlat
|
||||
res@mpMinLonF = minlon
|
||||
res@mpMaxLonF = maxlon
|
||||
|
||||
redMap = gsn_csm_contour_map(wks, Band1, res)
|
||||
|
||||
;---Overlay everything to create the topo map
|
||||
overlay(redMap, greenMap)
|
||||
overlay(redMap, blueMap)
|
||||
|
||||
return(redMap)
|
||||
end
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
; Main code
|
||||
;----------------------------------------------------------------------
|
||||
begin
|
||||
;---Recreating jpeg images only works for X11 and PNG.
|
||||
wks = gsn_open_wks("png","topo")
|
||||
|
||||
;---Southern part of Africa
|
||||
minlat = -40
|
||||
maxlat = 5
|
||||
minlon = 10
|
||||
maxlon = 40
|
||||
|
||||
map = recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon)
|
||||
|
||||
;---Overlay a red box
|
||||
lonbox = (/ 15, 35, 35, 15, 15/)
|
||||
latbox = (/-30,-30,-10,-10,-30/)
|
||||
|
||||
lnres = True
|
||||
lnres@gsLineColor = "red" ; red box
|
||||
lnres@gsLineThicknessF = 4.0 ; make box thicker
|
||||
box = gsn_add_polyline(wks,map,lonbox,latbox,lnres)
|
||||
|
||||
draw(map) ; Drawing the map will draw the red box
|
||||
frame(wks)
|
||||
|
||||
end
|
||||
120
samples/NCL/traj_3.ncl
Normal file
120
samples/NCL/traj_3.ncl
Normal file
@@ -0,0 +1,120 @@
|
||||
;*************************************************
|
||||
; traj_3.ncl
|
||||
;*************************************************
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
external TRAJ "./particle.so"
|
||||
;*************************************************
|
||||
begin
|
||||
|
||||
path = "./data.asc"
|
||||
data = asciiread(path,(/500,6/),"float")
|
||||
;*************************************************
|
||||
; some parameters
|
||||
;*************************************************
|
||||
np = 1
|
||||
nq = 500
|
||||
ncor= 8
|
||||
xrot = new((/np,nq/),float)
|
||||
yrot = new((/np,nq/),float)
|
||||
xaxis = new(ncor,float)
|
||||
yaxis = new(ncor,float)
|
||||
;**************************************************
|
||||
; convert data into rotated format
|
||||
;**************************************************
|
||||
TRAJ::particle(path,xrot,yrot,nq,np,xaxis,yaxis,ncor)
|
||||
;**************************************************
|
||||
; create plot
|
||||
;**************************************************
|
||||
wks = gsn_open_wks("ps","traj") ; Open an ps file
|
||||
|
||||
xyres = True
|
||||
xyres@gsnFrame = False ; don't advance the frame
|
||||
xyres@gsnDraw = False ; don't draw indivdual plots
|
||||
xyres@tmXTBorderOn = False ; don't draw top axis
|
||||
xyres@tmXBBorderOn = False ; don't draw bottom axis
|
||||
xyres@tmYRBorderOn = False ; don't draw right axis
|
||||
xyres@tmYLBorderOn = False ; don't draw left axis
|
||||
xyres@tmXTOn = False ; don't draw top-axis tick marks
|
||||
xyres@tmXBOn = False ; don't draw bottom-axis tick marks
|
||||
xyres@tmYROn = False ; don't draw right-axis tick marks
|
||||
xyres@tmYLOn = False ; don't draw left-axis tick marks
|
||||
|
||||
xyres@xyLineColors = (/"red"/) ; set the line color to red
|
||||
xyres@xyLineThicknessF = 4.0 ; 4 times the line thickness
|
||||
|
||||
xyres@trXMaxF = 15000 ; choose range of axis even though
|
||||
xyres@trXMinF = -10000 ; we don't see them
|
||||
xyres@trYMaxF = 1000
|
||||
xyres@trYMinF = -1000
|
||||
|
||||
plot = gsn_xy(wks,xrot,yrot,xyres) ; Draw trajectory
|
||||
;**********************************************
|
||||
; create arrays needed for the bounding box
|
||||
;**********************************************
|
||||
a1 = new(5,float)
|
||||
b1 = new(5,float)
|
||||
a2 = new(5,float)
|
||||
b2 = new(5,float)
|
||||
a3 = new(2,float)
|
||||
b3 = new(2,float)
|
||||
a4 = new(2,float)
|
||||
b4 = new(2,float)
|
||||
a5 = new(2,float)
|
||||
b5 = new(2,float)
|
||||
a6 = new(2,float)
|
||||
b6 = new(2,float)
|
||||
a0 = new(2,float)
|
||||
b0 = new(2,float)
|
||||
;**********************************************
|
||||
; determine values of each bounding line from information
|
||||
; returned from particle.f
|
||||
;**********************************************
|
||||
a1(0:3) = xaxis(:3)
|
||||
b1(0:3) = yaxis(:3)
|
||||
a1(4) = xaxis(0)
|
||||
b1(4) = yaxis(0)
|
||||
|
||||
a2(0:3) = xaxis(4:)
|
||||
b2(0:3) = yaxis(4:)
|
||||
a2(4) = xaxis(4)
|
||||
b2(4) = yaxis(4)
|
||||
|
||||
a3 = xaxis(0:4:4)
|
||||
b3 = yaxis(0:4:4)
|
||||
a4 = xaxis(1:5:4)
|
||||
b4 = yaxis(1:5:4)
|
||||
|
||||
a5 = xaxis(2:6:4)
|
||||
b5 = yaxis(2:6:4)
|
||||
a6 = xaxis(3:7:4)
|
||||
b6 = yaxis(3:7:4)
|
||||
|
||||
a0(0) = xaxis(3)
|
||||
b0(0) = yaxis(3)
|
||||
a0(1) = xrot(0,0)
|
||||
b0(1) = yrot(0,0)
|
||||
;***************************************************************
|
||||
; create bounding box by drawing multiple xy plots on top of
|
||||
; each other. each with their individual axis turned off.
|
||||
;***************************************************************
|
||||
xyres@xyLineColors = (/"black"/) ; line color
|
||||
xyres@xyLineThicknessF = 1.0 ; regular line thickness
|
||||
|
||||
bottom = gsn_xy(wks,a1,b1,xyres) ; Draw the bottom bounding box.
|
||||
top = gsn_xy(wks,a2,b2,xyres) ; Draw the top bounding box.
|
||||
side1 = gsn_xy(wks,a3,b3,xyres) ; Draw a side line.
|
||||
side2 = gsn_xy(wks,a4,b4,xyres) ; Draw a side line.
|
||||
side3 = gsn_xy(wks,a5,b5,xyres) ; Draw a side line.
|
||||
side4 = gsn_xy(wks,a6,b6,xyres) ; Draw a side line.
|
||||
;***************************************************************
|
||||
; now draw a large brown line to represent the chimney
|
||||
;***************************************************************
|
||||
xyres@xyLineColors = (/"brown"/) ; chimney color
|
||||
xyres@xyLineThicknessF = 9.0 ; thick line
|
||||
xyres@tiMainString = "Pollutant Trajectory in a 3D Volume"
|
||||
chimney = gsn_xy(wks,a0,b0,xyres) ; Draw the chimney.
|
||||
|
||||
draw(wks)
|
||||
frame(wks)
|
||||
|
||||
end
|
||||
167
samples/NCL/tsdiagram_1.ncl
Normal file
167
samples/NCL/tsdiagram_1.ncl
Normal file
@@ -0,0 +1,167 @@
|
||||
; Read potential temp (TEMP), salinity (SALT)
|
||||
; Compute potential density (PD) for specified range PD(t,s)
|
||||
; (use ncl function based on Yeager's algorithm for rho computation)
|
||||
; Assumes annual and zonally avgeraged input data set (i.e, one time slice)
|
||||
; Used K.Lindsay's "za" for zonal avg -- already binned into basins
|
||||
; Plots temp vs salt (scatter plot), pd overlay
|
||||
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
|
||||
|
||||
begin
|
||||
; ================================> ; PARAMETERS
|
||||
case = "PHC2_gx1v3"
|
||||
ocnfile = "za_PHC2_T_S_gx1v3.nc"
|
||||
|
||||
depth_min = 14895.82 ; in cm, depth of first layer to be included
|
||||
depth_max = 537499.9
|
||||
;
|
||||
; plot limits
|
||||
;
|
||||
smincn = 32.5
|
||||
smaxcn = 37.0
|
||||
tmincn = -2.
|
||||
tmaxcn = 22.
|
||||
;
|
||||
; Choose basin index
|
||||
;
|
||||
; 0 = global 1 = southern ocean 2 = pacific 3 = indian 6 = atlantic
|
||||
; 8 = labrador 9 = GIN 10 = arctic
|
||||
;
|
||||
bi = 2
|
||||
|
||||
;=====> basin check
|
||||
|
||||
if(bi.lt.0.or.bi.gt.10) then
|
||||
print("basin index "+ bi + " not supported")
|
||||
exit
|
||||
end if
|
||||
|
||||
if(bi.eq.0) then
|
||||
basin = "Global"
|
||||
blab = "global"
|
||||
end if
|
||||
if(bi.eq.1) then
|
||||
basin = "Southern Ocean"
|
||||
blab = "so"
|
||||
end if
|
||||
if(bi.eq.2) then
|
||||
basin = "Pacific Ocean"
|
||||
blab = "pacific"
|
||||
end if
|
||||
if(bi.eq.3) then
|
||||
basin = "Indian Ocean"
|
||||
blab = "indian"
|
||||
end if
|
||||
if(bi.eq.6) then
|
||||
basin = "Atlantic Ocean"
|
||||
blab = "atlanticn"
|
||||
end if
|
||||
if(bi.eq.8) then
|
||||
basin = "Labrador Sea"
|
||||
blab = "lab"
|
||||
end if
|
||||
if(bi.eq.9) then
|
||||
basin = "GIN Sea"
|
||||
blab = "gin"
|
||||
end if
|
||||
if(bi.eq.10) then
|
||||
basin = "Arctic Ocean"
|
||||
blab = "arctic"
|
||||
end if
|
||||
|
||||
;=====> initial resource settings
|
||||
|
||||
wks = gsn_open_wks("ps","tsdiagram") ; Open a Postscript file
|
||||
|
||||
;===== data
|
||||
focn = addfile(ocnfile, "r")
|
||||
salt = focn->SALT(0,:,{depth_min:depth_max},:) ;(basins, z_t, lat_t)
|
||||
temp = focn->TEMP(0,:,{depth_min:depth_max},:)
|
||||
|
||||
;====section out choice basin
|
||||
temp_ba = temp(bi,:,:)
|
||||
salt_ba = salt(bi,:,:)
|
||||
|
||||
;===== put into scatter array format
|
||||
tdata_ba = ndtooned(temp_ba)
|
||||
sdata_ba = ndtooned(salt_ba)
|
||||
|
||||
ydata = tdata_ba
|
||||
xdata = sdata_ba
|
||||
|
||||
;============== compute potenial density (PD), using rho_mwjf
|
||||
;
|
||||
; for potential density, depth = 0. (i.e. density as if brought to surface)
|
||||
;
|
||||
;===========================================================================
|
||||
; WARNING: T-S diagrams use POTENTIAL DENSITY... if set depth to something
|
||||
; other then 0, then you will be plotting density contours computed for the
|
||||
; specified depth layer.
|
||||
;===========================================================================
|
||||
|
||||
depth = 0. ;in meters
|
||||
tspan = fspan(tmincn,tmaxcn,51)
|
||||
sspan = fspan(smincn,smaxcn,51)
|
||||
|
||||
; the more points the better... using Yeager's numbers
|
||||
|
||||
t_range = conform_dims((/51,51/),tspan,0)
|
||||
s_range = conform_dims((/51,51/),sspan,1)
|
||||
|
||||
pd = rho_mwjf(t_range,s_range,depth)
|
||||
|
||||
pd!0 = "temp"
|
||||
pd!1 = "salt"
|
||||
pd&temp = tspan
|
||||
pd&salt = sspan
|
||||
pd = 1000.*(pd-1.) ; Put into kg/m3 pot den units
|
||||
|
||||
; printVarSummary(pd)
|
||||
; printVarInfo(pd,"rho_mwjf")
|
||||
|
||||
;=================Graphics
|
||||
|
||||
;--- scatter plot
|
||||
res = True
|
||||
res@gsnMaximize = True
|
||||
res@gsnDraw = False
|
||||
res@gsnFrame = False
|
||||
|
||||
res@xyMarkLineModes = "Markers"
|
||||
res@xyMarkers = 16
|
||||
res@xyMarkerColors = "black"
|
||||
res@pmLegendDisplayMode = "Never"
|
||||
res@txFontHeightF = 0.01
|
||||
res@tiMainString = case + " ANN AVG: T-S Diagram"
|
||||
res@tiXAxisString = salt@units
|
||||
res@tiXAxisFontHeightF = 0.02
|
||||
res@tiYAxisString = temp@units
|
||||
res@tiYAxisFontHeightF = 0.02
|
||||
res@trXMinF = smincn
|
||||
res@trXMaxF = smaxcn
|
||||
res@trYMinF = tmincn
|
||||
res@trYMaxF = tmaxcn
|
||||
res@gsnRightString = depth_min/100. + "-"+depth_max/100. +"m"
|
||||
res@gsnLeftString = basin
|
||||
|
||||
plot = gsn_csm_xy(wks,xdata,ydata,res)
|
||||
|
||||
;----- pd overlay
|
||||
resov = True
|
||||
resov@gsnDraw = False
|
||||
resov@gsnFrame = False
|
||||
resov@cnLevelSelectionMode = "AutomaticLevels"
|
||||
resov@cnInfoLabelOn = "False"
|
||||
resov@cnLineLabelPlacementMode = "Constant"
|
||||
resov@cnLineLabelFontHeightF = ".02"
|
||||
|
||||
plotpd = gsn_csm_contour(wks,pd,resov)
|
||||
overlay(plot,plotpd)
|
||||
|
||||
draw(plot)
|
||||
frame(wks)
|
||||
|
||||
end
|
||||
141
samples/NCL/unique_9.ncl
Normal file
141
samples/NCL/unique_9.ncl
Normal file
@@ -0,0 +1,141 @@
|
||||
;************************************
|
||||
; unique_9.ncl
|
||||
;
|
||||
; Concepts illustrated:
|
||||
; - Drawing raster contours over a map
|
||||
; - Creating a topography plot using raster contours
|
||||
; - Reading data from binary files
|
||||
; - Manually creating lat/lon coordinate arrays
|
||||
; - Customizing a labelbar for a contour plot
|
||||
;************************************
|
||||
; This example generates a topo map over
|
||||
; the area of Trinidad, Colorado.
|
||||
;************************************
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
|
||||
begin
|
||||
|
||||
wks = gsn_open_wks("ps","unique")
|
||||
|
||||
;----------------- read the west binary data -------------------------
|
||||
binfile = "trinidad-w.bin"
|
||||
|
||||
quad_name = fbinrecread(binfile,0,60,"character")
|
||||
|
||||
map_cornersW = fbinrecread(binfile,1,4,"double")
|
||||
|
||||
lonW = fbinrecread(binfile,2,(/1201/),"double")
|
||||
|
||||
latW = fbinrecread(binfile,3,(/1201/),"double")
|
||||
|
||||
minmax_elevW = fbinrecread(binfile,4,2,"double")
|
||||
|
||||
tmpW = fbinrecread(binfile,5,(/1201,1201/),"integer")
|
||||
|
||||
;----------------- read the east binary data -------------------------
|
||||
binfile = "trinidad-e.bin"
|
||||
|
||||
quad_name = fbinrecread(binfile,0,60,"character")
|
||||
|
||||
map_cornersE = fbinrecread(binfile,1,4,"double")
|
||||
|
||||
lonE = fbinrecread(binfile,2,(/1201/),"double")
|
||||
|
||||
latE = fbinrecread(binfile,3,(/1201/),"double")
|
||||
|
||||
minmax_elevE = fbinrecread(binfile,4,2,"double")
|
||||
|
||||
tmpE = fbinrecread(binfile,5,(/1201,1201/),"integer")
|
||||
|
||||
;----------------------------------------------------------------------
|
||||
min_elev = min((/minmax_elevW(0),minmax_elevE(0)/))*3.28
|
||||
max_elev = max((/minmax_elevW(1),minmax_elevE(1)/))*3.28
|
||||
|
||||
lat = new(1201,"double")
|
||||
lat = latW
|
||||
lat!0 = "lat"
|
||||
lat&lat = latW ; same as latE
|
||||
lat@long_name = "latitude"
|
||||
lat@units = "degrees_north"
|
||||
|
||||
lon = new(2401,"double")
|
||||
lon(0:1200) = lonW
|
||||
lon(1201:2400) = lonE(1:1200)
|
||||
lon!0 = "lon"
|
||||
lon&lon = lon
|
||||
lon@long_name = "longitude"
|
||||
lon@units = "degrees_east"
|
||||
|
||||
data = new((/1201,2401/),"float") ; (lat,lon)
|
||||
data!0 = "lat"
|
||||
data&lat = lat
|
||||
data!1 = "lon"
|
||||
data&lon = lon
|
||||
data(:,0:1200) = (/tmpW*3.28/) ; convert to feet
|
||||
data(:,1201:2400) = (/tmpE(:,1:1200)*3.28/) ; convert to feet
|
||||
;-------------------------------------------------------------
|
||||
|
||||
;
|
||||
; Define colormap.
|
||||
;
|
||||
cmap = (/(/1.00, 1.00, 1.00/),(/0.00, 0.00, 0.00/), \
|
||||
(/0.51, 0.13, 0.94/),(/0.00, 0.00, 0.59/), \
|
||||
(/0.00, 0.00, 0.80/),(/0.25, 0.41, 0.88/), \
|
||||
(/0.12, 0.56, 1.00/),(/0.00, 0.75, 1.00/), \
|
||||
(/0.63, 0.82, 1.00/),(/0.82, 0.96, 1.00/), \
|
||||
(/1.00, 1.00, 0.78/),(/1.00, 0.88, 0.20/), \
|
||||
(/1.00, 0.67, 0.00/),(/1.00, 0.43, 0.00/), \
|
||||
(/1.00, 0.00, 0.00/),(/0.78, 0.00, 0.00/), \
|
||||
(/0.63, 0.14, 0.14/),(/1.00, 0.41, 0.70/)/)
|
||||
|
||||
gsn_define_colormap(wks,cmap)
|
||||
|
||||
res = True
|
||||
res@gsnMaximize = True
|
||||
res@gsnAddCyclic = False
|
||||
|
||||
; map plot resources
|
||||
res@mpFillOn = False
|
||||
res@mpLimitMode = "Corners"
|
||||
res@mpDataBaseVersion = "Ncarg4_1"
|
||||
res@mpOutlineBoundarySets = "AllBoundaries"
|
||||
res@mpLeftCornerLonF = map_cornersW(0)
|
||||
res@mpLeftCornerLatF = map_cornersW(1)
|
||||
res@mpRightCornerLonF = map_cornersE(2)
|
||||
res@mpRightCornerLatF = map_cornersE(3)
|
||||
|
||||
; contour resources
|
||||
res@cnFillOn = True
|
||||
res@cnLinesOn = False
|
||||
res@cnFillMode = "RasterFill"
|
||||
res@cnLevelSelectionMode = "ExplicitLevels"
|
||||
res@cnLevels = (/ 5000., 6000., 7000., 8000., 8500., 9000., \
|
||||
9500.,10000.,10500.,11000.,11500.,12000., \
|
||||
12500.,13000.,13500./)
|
||||
|
||||
; tickmark resources
|
||||
res@pmTickMarkDisplayMode = "Always"
|
||||
res@tmXBLabelFontHeightF = 0.010
|
||||
|
||||
; labelbar resources
|
||||
res@pmLabelBarWidthF = 0.60
|
||||
res@txFontHeightF = 0.012
|
||||
res@lbTitleString = "elevation above mean sea level (feet)"
|
||||
res@lbTitleFontHeightF = 0.012
|
||||
res@lbLabelFontHeightF = 0.008
|
||||
res@lbTitleOffsetF = -0.27
|
||||
res@lbBoxMinorExtentF = 0.15
|
||||
res@pmLabelBarOrthogonalPosF = -.05
|
||||
|
||||
; title resources
|
||||
res@tiMainString = "USGS DEM TRINIDAD (1 x 2 degrees)"
|
||||
res@tiMainOffsetYF = -0.02 ; Move title down towards graphic.
|
||||
res@tiMainFontHeightF = 0.015
|
||||
res@gsnLeftString = "Min Elevation: "+min_elev
|
||||
res@gsnRightString = "Max Elevation: "+max_elev
|
||||
res@gsnCenterString = "Scale 1:250,000"
|
||||
|
||||
plot = gsn_csm_contour_map(wks,data,res)
|
||||
|
||||
end
|
||||
131
samples/NCL/viewport_4.ncl
Normal file
131
samples/NCL/viewport_4.ncl
Normal file
@@ -0,0 +1,131 @@
|
||||
; ***********************************************
|
||||
; viewport_4.ncl
|
||||
;
|
||||
; Concepts illustrated:
|
||||
; - Drawing an XY plot with multiple curves
|
||||
; - Using drawNDCGrid to draw a nicely labeled NDC grid
|
||||
; - Changing the size/shape of an XY plot using viewport resources
|
||||
; - Drawing two XY plots on the same page using viewport resources
|
||||
; - Drawing polylines, polymarkers, and text in NDC space
|
||||
; - Using "getvalues" to retrieve resource values
|
||||
; - Maximizing plots after they've been created
|
||||
; ***********************************************
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"
|
||||
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
|
||||
|
||||
;********************************************************************
|
||||
; Draw a box around the viewport of the given object..
|
||||
;********************************************************************
|
||||
procedure draw_vp_box(wks,plot)
|
||||
local vpx, vpy, vpw, vph, xbox, ybox, lnres, mkres, txres
|
||||
begin
|
||||
|
||||
; Retrieve the viewport values of the drawable object.
|
||||
getvalues plot
|
||||
"vpXF" : vpx
|
||||
"vpYF" : vpy
|
||||
"vpWidthF" : vpw
|
||||
"vpHeightF" : vph
|
||||
end getvalues
|
||||
|
||||
; Set up some marker resources.
|
||||
mkres = True
|
||||
mkres@gsMarkerIndex = 16 ; filled dot
|
||||
mkres@gsMarkerSizeF = 0.02 ; larger than default
|
||||
mkres@gsMarkerColor = "Red"
|
||||
|
||||
; Draw a single marker at the vpXF/vpYF location.
|
||||
gsn_polymarker_ndc(wks,vpx,vpy,mkres)
|
||||
|
||||
|
||||
; Set up some text resources.
|
||||
txres = True
|
||||
txres@txJust = "BottomLeft"
|
||||
txres@txFontHeightF = 0.018
|
||||
txres@txFontColor = "Blue"
|
||||
txres@txBackgroundFillColor = "white"
|
||||
|
||||
gsn_text_ndc(wks,"(vpXF="+vpx+", vpYF="+vpy+")",vpx,vpy+0.02,txres)
|
||||
; Set up some line resources.
|
||||
lnres = True
|
||||
lnres@gsLineColor = "Red" ; line color
|
||||
lnres@gsLineThicknessF = 2.0 ; 3.5 times as thick
|
||||
|
||||
; Draw lines indicating the width and height
|
||||
xline = (/vpx, vpx+vpw/)
|
||||
yline = (/vpy-0.05,vpy-0.05/)
|
||||
gsn_polyline_ndc(wks,xline,yline,lnres)
|
||||
|
||||
xline = (/vpx+0.05,vpx+0.05/)
|
||||
yline = (/vpy,vpy-vph/)
|
||||
gsn_polyline_ndc(wks,xline,yline,lnres)
|
||||
|
||||
txres@txJust = "CenterCenter"
|
||||
gsn_text_ndc(wks,"vpWidthF = " + vpw,vpx+vpw/2.,vpy-0.05,txres)
|
||||
|
||||
txres@txAngleF = 90.
|
||||
gsn_text_ndc(wks,"vpHeightF = " + vph,vpx+0.05,vpy-vph/2.,txres)
|
||||
end
|
||||
|
||||
;********************************************************************
|
||||
; Main code
|
||||
;********************************************************************
|
||||
begin
|
||||
;************************************************
|
||||
; read in data
|
||||
;************************************************
|
||||
f = addfile ("$NCARG_ROOT/lib/ncarg/data/cdf/uv300.nc","r")
|
||||
u = f->U ; get u data
|
||||
;************************************************
|
||||
; plotting parameters
|
||||
;************************************************
|
||||
wks = gsn_open_wks ("ps","viewport") ; open workstation
|
||||
|
||||
res = True ; plot mods desired
|
||||
|
||||
res@gsnFrame = False ; don't advance frame yet
|
||||
|
||||
res@vpWidthF = 0.8 ; set width and height
|
||||
res@vpHeightF = 0.3
|
||||
|
||||
; First plot
|
||||
res@tiMainString = "Plot 1"
|
||||
|
||||
res@vpXF = 0.15
|
||||
res@vpYF = 0.9 ; Higher on the page
|
||||
|
||||
plot1 = gsn_csm_xy (wks,u&lat,u(0,:,{82}),res) ; create plot
|
||||
|
||||
; Second plot
|
||||
res@tiMainString = "Plot 2"
|
||||
|
||||
res@vpXF = 0.15 ; Same X location as first plot
|
||||
res@vpYF = 0.4 ; Lower on the page
|
||||
|
||||
plot2 = gsn_csm_xy (wks,u&lat,u(0,:,{3}),res) ; create plot
|
||||
|
||||
; Advance the frame
|
||||
frame(wks)
|
||||
|
||||
; Now draw the two plots with illustrations.
|
||||
|
||||
drawNDCGrid(wks) ; Draw helpful grid lines showing NDC square.
|
||||
|
||||
draw(plot1) ; Draw the two plots
|
||||
draw(plot2)
|
||||
|
||||
draw_vp_box(wks,plot1) ; Draw boxes around the two viewports.
|
||||
draw_vp_box(wks,plot2)
|
||||
|
||||
frame(wks) ; Advance the frame.
|
||||
|
||||
|
||||
;
|
||||
; Uncomment the next two lines if you want to maximize these plots for
|
||||
; PS or PDF output.
|
||||
;
|
||||
; psres = True
|
||||
; maximize_output(wks,psres) ; calls draw and frame for you
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user