mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Compare commits
426 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b666123f8e | ||
|
|
8e36ddbafe | ||
|
|
abd0c47838 | ||
|
|
8625f91b1b | ||
|
|
6c6b07fc68 | ||
|
|
f5a6f20af0 | ||
|
|
76ee294c29 | ||
|
|
77bff8fd6a | ||
|
|
40b2e19310 | ||
|
|
aaf281ec0e | ||
|
|
82bc320843 | ||
|
|
1f38db61df | ||
|
|
db20462481 | ||
|
|
79be60bf8f | ||
|
|
d57ff3abd6 | ||
|
|
cd6c315fc8 | ||
|
|
60bc772d48 | ||
|
|
7ad99baf32 | ||
|
|
252ae63854 | ||
|
|
7e3a9434ef | ||
|
|
f388daab39 | ||
|
|
89f4885b62 | ||
|
|
23a1ae5085 | ||
|
|
9cd6d6f001 | ||
|
|
a15ed48377 | ||
|
|
f5e8671481 | ||
|
|
614f4f31ed | ||
|
|
95c8405e0c | ||
|
|
e6baa1d690 | ||
|
|
928409a355 | ||
|
|
86c9c9f6f3 | ||
|
|
49f29a53c0 | ||
|
|
40c04c8f6f | ||
|
|
800d26cdad | ||
|
|
016f9852d6 | ||
|
|
fbcad41813 | ||
|
|
cdf6fb4a22 | ||
|
|
9dc7329601 | ||
|
|
bd4204b89e | ||
|
|
bbf0e65c74 | ||
|
|
b7e2f7cff9 | ||
|
|
f9e50f4826 | ||
|
|
184095cc02 | ||
|
|
6a78ac61a7 | ||
|
|
b498d51889 | ||
|
|
7fb16b7abe | ||
|
|
7bfdd4086e | ||
|
|
dd27ddda17 | ||
|
|
b5181488a0 | ||
|
|
001068ec75 | ||
|
|
e660442e2e | ||
|
|
f7b7a89709 | ||
|
|
f46a895ae3 | ||
|
|
da396d4c28 | ||
|
|
93556449c9 | ||
|
|
813c150918 | ||
|
|
3ced5ec784 | ||
|
|
cdde9096da | ||
|
|
2cb2194686 | ||
|
|
6ae12cd0be | ||
|
|
a3e1420476 | ||
|
|
66a2d5fa2e | ||
|
|
582daf273a | ||
|
|
310a804507 | ||
|
|
5e4b860fb7 | ||
|
|
86f78792c4 | ||
|
|
064c62b587 | ||
|
|
7f34de90c6 | ||
|
|
7fb389fda3 | ||
|
|
85e4c58aeb | ||
|
|
de47a28ca0 | ||
|
|
0f42d35f29 | ||
|
|
d51df2aef3 | ||
|
|
0c02bd18db | ||
|
|
75276c8380 | ||
|
|
442aa4ed33 | ||
|
|
1ab8c8da53 | ||
|
|
f03201209f | ||
|
|
d79d535182 | ||
|
|
01dc7e2294 | ||
|
|
b2d1917fa0 | ||
|
|
ca9ca29cc9 | ||
|
|
1ea21fbb8d | ||
|
|
46274496d6 | ||
|
|
16f1f87a8e | ||
|
|
7847e17735 | ||
|
|
8cacd10210 | ||
|
|
9a6446bae3 | ||
|
|
f6034b85fb | ||
|
|
55c24a30df | ||
|
|
88afdac5d2 | ||
|
|
c5e9023762 | ||
|
|
b7d23efc1b | ||
|
|
300d47b36b | ||
|
|
e4d381d81c | ||
|
|
3ece15b398 | ||
|
|
c8761d39d7 | ||
|
|
51195290b8 | ||
|
|
11be3f3f08 | ||
|
|
91dd8d4950 | ||
|
|
9c26488f29 | ||
|
|
b2a5c30a44 | ||
|
|
e3d520dba8 | ||
|
|
715680bc36 | ||
|
|
b5df71950d | ||
|
|
ed6bcfddef | ||
|
|
a633dd8c79 | ||
|
|
0974586d5c | ||
|
|
774f658f67 | ||
|
|
37ef402a1f | ||
|
|
99ad32511e | ||
|
|
a282b56f46 | ||
|
|
9845eba9df | ||
|
|
a49303c93f | ||
|
|
4adbbc3fcc | ||
|
|
03cadf22fa | ||
|
|
89c8d1e64c | ||
|
|
56ebfae598 | ||
|
|
b1bb1a7345 | ||
|
|
4510bf1007 | ||
|
|
dd8b368f76 | ||
|
|
17d0b1e02f | ||
|
|
0626def699 | ||
|
|
b3c6c85387 | ||
|
|
455266f27d | ||
|
|
567408bc5e | ||
|
|
0c668ee179 | ||
|
|
8c9ba2214a | ||
|
|
8ba773127c | ||
|
|
c598c9717d | ||
|
|
ef41a1ac67 | ||
|
|
3bc17e822d | ||
|
|
6bd97c7fc7 | ||
|
|
f6c4e39dbc | ||
|
|
7c636c4f65 | ||
|
|
6a8de63d2d | ||
|
|
107fee8859 | ||
|
|
1cb1705f8e | ||
|
|
e0c1a84821 | ||
|
|
b7249b671f | ||
|
|
f5e86bc691 | ||
|
|
109841ceb1 | ||
|
|
1b96f87888 | ||
|
|
4d40cab954 | ||
|
|
4533b9baaa | ||
|
|
5b35f92bfe | ||
|
|
17d54d61b4 | ||
|
|
2a867c9c7f | ||
|
|
5a4bbf42c1 | ||
|
|
087ce10f12 | ||
|
|
27092191a8 | ||
|
|
bc93a99864 | ||
|
|
2e4fbe3430 | ||
|
|
64f77293e8 | ||
|
|
9a42628577 | ||
|
|
fc9bc8b9e1 | ||
|
|
2180c11dc6 | ||
|
|
11207283c8 | ||
|
|
8552ec35b3 | ||
|
|
5fdc2e12bf | ||
|
|
37c8a94369 | ||
|
|
7d17d69c1b | ||
|
|
ee519aeb4b | ||
|
|
a825a013d6 | ||
|
|
b4906fc3b8 | ||
|
|
fafeead5dc | ||
|
|
5c602d0a4e | ||
|
|
96084fa59a | ||
|
|
c8eeda6c8a | ||
|
|
2315cdb993 | ||
|
|
2245174d28 | ||
|
|
c089b3f28f | ||
|
|
7e178cc416 | ||
|
|
8603760ebe | ||
|
|
5bbffb00f5 | ||
|
|
4476a23f5a | ||
|
|
834f37810b | ||
|
|
7e9bc26796 | ||
|
|
f83f226edc | ||
|
|
a04b9dd7cd | ||
|
|
f1ffc9e581 | ||
|
|
de636f1c0b | ||
|
|
ec6ef033a1 | ||
|
|
a375a063d5 | ||
|
|
d66147a277 | ||
|
|
283cc3a975 | ||
|
|
23af754194 | ||
|
|
50f4050444 | ||
|
|
bf11900bc9 | ||
|
|
61b8a8969f | ||
|
|
0fb7017add | ||
|
|
86329a0758 | ||
|
|
4a5165ad7f | ||
|
|
017c6fd3f2 | ||
|
|
3887acd915 | ||
|
|
a80bf9e024 | ||
|
|
27c9774d1b | ||
|
|
10cadb8725 | ||
|
|
9a5d52e460 | ||
|
|
a8ae3d3ae5 | ||
|
|
9bf1b5867a | ||
|
|
f64a589e98 | ||
|
|
72026d3a3d | ||
|
|
53f29344f8 | ||
|
|
0436973fb7 | ||
|
|
3a8651e31f | ||
|
|
953768641c | ||
|
|
b59d80b00c | ||
|
|
56dec42c70 | ||
|
|
c88585cffb | ||
|
|
46779da3b5 | ||
|
|
654050a459 | ||
|
|
c2ca9f40ac | ||
|
|
fe9f186b13 | ||
|
|
01616ef54e | ||
|
|
9fd802a208 | ||
|
|
86e0b94700 | ||
|
|
6e4e5e78ad | ||
|
|
183c280263 | ||
|
|
cb0b3a688f | ||
|
|
4f656c200b | ||
|
|
791d9eed41 | ||
|
|
74775b2e0a | ||
|
|
04c78c8c33 | ||
|
|
762b389721 | ||
|
|
32e10d2c37 | ||
|
|
d7baf4ed7b | ||
|
|
5bef198e6d | ||
|
|
c03e310422 | ||
|
|
43723ba5ef | ||
|
|
25954c8992 | ||
|
|
12f01e9e94 | ||
|
|
41f7589d4e | ||
|
|
d93edf0897 | ||
|
|
7a6202a8c3 | ||
|
|
240f6a63f4 | ||
|
|
f0558769f2 | ||
|
|
12086b69ac | ||
|
|
e47b312866 | ||
|
|
eb5f1468d2 | ||
|
|
77c7ee6d2e | ||
|
|
4f547d79a9 | ||
|
|
8a5b26536e | ||
|
|
355ac3d81a | ||
|
|
8b8123a3c1 | ||
|
|
fc44af9343 | ||
|
|
4654553d07 | ||
|
|
940df300e8 | ||
|
|
72b8e1c76f | ||
|
|
92282e3677 | ||
|
|
9e9cbb144e | ||
|
|
8c5f1e201e | ||
|
|
ab20c033fe | ||
|
|
fd9c657ed4 | ||
|
|
fea07d025d | ||
|
|
41a570818d | ||
|
|
c1e38425d0 | ||
|
|
6fb4e6836c | ||
|
|
a2f9150f50 | ||
|
|
2dcee1e43c | ||
|
|
867a4d96fe | ||
|
|
b8c7b71ca5 | ||
|
|
70396ab636 | ||
|
|
67b5b51c47 | ||
|
|
7b443fcdde | ||
|
|
d86f8ba12f | ||
|
|
856ee4724c | ||
|
|
e635af4ef9 | ||
|
|
b30163444f | ||
|
|
051bedefab | ||
|
|
1d7f63e38b | ||
|
|
d96657a48b | ||
|
|
8bdd6ea510 | ||
|
|
9f65e702fc | ||
|
|
a500dee94e | ||
|
|
1a11a6ab48 | ||
|
|
c5f1317b47 | ||
|
|
5e03ff961b | ||
|
|
a0c06eb6b9 | ||
|
|
94b3ea3df5 | ||
|
|
6d7eae5011 | ||
|
|
3bbeea3682 | ||
|
|
562ec13696 | ||
|
|
a5c3bd7c13 | ||
|
|
6ae6882e1a | ||
|
|
c4ad830931 | ||
|
|
5d417b4669 | ||
|
|
02a264fad8 | ||
|
|
31c3c43f64 | ||
|
|
5197ea2488 | ||
|
|
66167de1f9 | ||
|
|
9482c2b822 | ||
|
|
012a9c0e05 | ||
|
|
881201a2c6 | ||
|
|
d656988258 | ||
|
|
89f7f8a00b | ||
|
|
e4ec48fe8d | ||
|
|
1a4f890d04 | ||
|
|
71633871f3 | ||
|
|
f523561e66 | ||
|
|
f3007215b1 | ||
|
|
1847b237c9 | ||
|
|
07169db217 | ||
|
|
4b4b368356 | ||
|
|
09ef0cd3e1 | ||
|
|
0f6bca7a3d | ||
|
|
5e3d811902 | ||
|
|
12c655a48a | ||
|
|
fdddffe041 | ||
|
|
c3aab69b11 | ||
|
|
3f1161d713 | ||
|
|
cf14c5fa4f | ||
|
|
8aac009b00 | ||
|
|
05bb8b10fd | ||
|
|
ecacbc937b | ||
|
|
86d0f0a84a | ||
|
|
34218d9a5c | ||
|
|
de7ca0d954 | ||
|
|
81176f8dfa | ||
|
|
6ee999617e | ||
|
|
88442094f9 | ||
|
|
5037dd5add | ||
|
|
aa41c87158 | ||
|
|
569eac2222 | ||
|
|
2de23046cc | ||
|
|
ca8b27ff15 | ||
|
|
0f17ba0fcf | ||
|
|
d5002ef06a | ||
|
|
ce443e73f1 | ||
|
|
89b5e9f5e6 | ||
|
|
c6c5e79ccf | ||
|
|
2bac3af299 | ||
|
|
5411c5457d | ||
|
|
92595cffa3 | ||
|
|
ad77279bbf | ||
|
|
e7d8b99ca2 | ||
|
|
971d848eec | ||
|
|
f353fa3890 | ||
|
|
64ce62a804 | ||
|
|
bb9537c5b4 | ||
|
|
9f00b5478d | ||
|
|
086b565488 | ||
|
|
27566d93e2 | ||
|
|
7b1c78b848 | ||
|
|
4ec9145700 | ||
|
|
922fe46f56 | ||
|
|
d4628cf5db | ||
|
|
cb9c3732f2 | ||
|
|
ce6a8aa671 | ||
|
|
bda61ec3d2 | ||
|
|
3ea0d479fc | ||
|
|
9ff1a9a54c | ||
|
|
024005d912 | ||
|
|
4d7cd834be | ||
|
|
281e7456d5 | ||
|
|
f41c79066b | ||
|
|
063ba50952 | ||
|
|
70bc0b3b77 | ||
|
|
057ea80582 | ||
|
|
a046e1c380 | ||
|
|
e3c2a5e510 | ||
|
|
74eb60a354 | ||
|
|
85e54e9af2 | ||
|
|
245521db22 | ||
|
|
5b8ad31d75 | ||
|
|
921ceaa221 | ||
|
|
fdf000ec62 | ||
|
|
1b90dfedf9 | ||
|
|
b0b7d75bcd | ||
|
|
74ba0f9c39 | ||
|
|
6182b0fbc2 | ||
|
|
4e4f3c6e17 | ||
|
|
800f445b22 | ||
|
|
b5e1bda3e4 | ||
|
|
d9358d8af3 | ||
|
|
fb3e59c6f5 | ||
|
|
c0c0252bab | ||
|
|
02953ac3ef | ||
|
|
7e251d7345 | ||
|
|
e33e76a1a7 | ||
|
|
9064369517 | ||
|
|
a9c86d5453 | ||
|
|
4b0c975426 | ||
|
|
71b48eaf55 | ||
|
|
777f1d27d1 | ||
|
|
64ec42cf4a | ||
|
|
c4b24d9ae1 | ||
|
|
090216df2a | ||
|
|
486af800b5 | ||
|
|
f0b9b3a35a | ||
|
|
8c42e61271 | ||
|
|
394fb528cc | ||
|
|
d2f4eec397 | ||
|
|
5f29bf3bb4 | ||
|
|
0029183078 | ||
|
|
0978258f57 | ||
|
|
a75d918b93 | ||
|
|
23289d8901 | ||
|
|
d351d6091d | ||
|
|
fae8f83f64 | ||
|
|
d3d62726ae | ||
|
|
cf15832504 | ||
|
|
764df07450 | ||
|
|
1af71c8945 | ||
|
|
acc1a56da4 | ||
|
|
fab34da3e7 | ||
|
|
a9a28ce58d | ||
|
|
89bc82d9df | ||
|
|
30aa3fd5d6 | ||
|
|
22cdb9ee90 | ||
|
|
df448c0761 | ||
|
|
1e93e98d30 | ||
|
|
d0034b4fb9 | ||
|
|
3b79cf3cf2 | ||
|
|
5b06a46451 | ||
|
|
15a746650c | ||
|
|
e408b5fbaa | ||
|
|
e26bf5a0d2 | ||
|
|
465d60ba86 | ||
|
|
d5c3978a6e | ||
|
|
d4312c05bf | ||
|
|
7efad57176 | ||
|
|
14d363b942 | ||
|
|
f8c6277946 | ||
|
|
8254bcc3ac | ||
|
|
a8b2b0a86b |
@@ -1,8 +1,12 @@
|
||||
before_install: sudo apt-get install libicu-dev -y
|
||||
before_install:
|
||||
- sudo apt-get install libicu-dev -y
|
||||
# Short-term fix addressing https://github.com/bundler/bundler/issues/2784
|
||||
- gem update --system 2.1.11
|
||||
rvm:
|
||||
- 1.8.7
|
||||
- 1.9.2
|
||||
- 1.9.3
|
||||
- 2.0.0
|
||||
- ree
|
||||
notifications:
|
||||
disabled: true
|
||||
|
||||
5
Gemfile
5
Gemfile
@@ -1,2 +1,7 @@
|
||||
source 'https://rubygems.org'
|
||||
gemspec
|
||||
|
||||
if RUBY_VERSION < "1.9.3"
|
||||
# escape_utils 1.0.0 requires 1.9.3 and above
|
||||
gem "escape_utils", "0.3.2"
|
||||
end
|
||||
|
||||
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2011-2013 GitHub, Inc.
|
||||
Copyright (c) 2011-2014 GitHub, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
|
||||
49
README.md
49
README.md
@@ -1,18 +1,20 @@
|
||||
# Linguist
|
||||
|
||||
We use this library at GitHub to detect blob languages, highlight code, ignore binary files, suppress generated files in diffs and generate language breakdown graphs.
|
||||
We use this library at GitHub to detect blob languages, highlight code, ignore binary files, suppress generated files in diffs, and generate language breakdown graphs.
|
||||
|
||||
## Features
|
||||
|
||||
### Language detection
|
||||
|
||||
Linguist defines the list of all languages known to GitHub in a [yaml file](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml). In order for a file to be highlighted, a language and lexer must be defined there.
|
||||
Linguist defines a list of all languages known to GitHub in a [yaml file](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml). In order for a file to be highlighted, a language and lexer must be defined there.
|
||||
|
||||
Most languages are detected by their file extension. This is the fastest and most common situation.
|
||||
|
||||
For disambiguating between files with common extensions, we use a [Bayesian classifier](https://github.com/github/linguist/blob/master/lib/linguist/classifier.rb). For an example, this helps us tell the difference between `.h` files which could be either C, C++, or Obj-C.
|
||||
|
||||
In the actual GitHub app we deal with `Grit::Blob` objects. For testing, there is a simple `FileBlob` API.
|
||||
For disambiguating between files with common extensions, we first apply
|
||||
some common-sense heuristics to pick out obvious languages. After that, we use a
|
||||
[statistical
|
||||
classifier](https://github.com/github/linguist/blob/master/lib/linguist/classifier.rb).
|
||||
This process can help us tell the difference between, for example, `.h` files which could be either C, C++, or Obj-C.
|
||||
|
||||
```ruby
|
||||
|
||||
@@ -27,13 +29,11 @@ See [lib/linguist/language.rb](https://github.com/github/linguist/blob/master/li
|
||||
|
||||
The actual syntax highlighting is handled by our Pygments wrapper, [pygments.rb](https://github.com/tmm1/pygments.rb). It also provides a [Lexer abstraction](https://github.com/tmm1/pygments.rb/blob/master/lib/pygments/lexer.rb) that determines which highlighter should be used on a file.
|
||||
|
||||
We typically run on a pre-release version of Pygments, [pygments.rb](https://github.com/tmm1/pygments.rb), to get early access to new lexers. The [languages.yml](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) file is a dump of the lexers we have available on our server.
|
||||
|
||||
### Stats
|
||||
|
||||
The Language Graph you see on every repository is built by aggregating the languages of all repo's blobs. The top language in the graph determines the project's primary language. Collectively, these stats make up the [Top Languages](https://github.com/languages) page.
|
||||
The Language stats bar that you see on every repository is built by aggregating the languages of each file in that repository. The top language in the graph determines the project's primary language. Collectively, these stats make up the [Top Languages](https://github.com/languages) page.
|
||||
|
||||
The repository stats API can be used on a directory:
|
||||
The repository stats API, accessed through `#languages`, can be used on a directory:
|
||||
|
||||
```ruby
|
||||
project = Linguist::Repository.from_directory(".")
|
||||
@@ -41,10 +41,27 @@ project.language.name #=> "Ruby"
|
||||
project.languages #=> { "Ruby" => 0.98, "Shell" => 0.02 }
|
||||
```
|
||||
|
||||
These stats are also printed out by the binary. Try running `linguist` on itself:
|
||||
These stats are also printed out by the `linguist` binary. You can use the
|
||||
`--breakdown` flag, and the binary will also output the breakdown of files by language.
|
||||
|
||||
$ bundle exec linguist lib/
|
||||
100% Ruby
|
||||
You can try running `linguist` on the `lib/` directory in this repository itself:
|
||||
|
||||
$ bundle exec linguist lib/ --breakdown
|
||||
|
||||
100.00% Ruby
|
||||
|
||||
Ruby:
|
||||
linguist/blob_helper.rb
|
||||
linguist/classifier.rb
|
||||
linguist/file_blob.rb
|
||||
linguist/generated.rb
|
||||
linguist/heuristics.rb
|
||||
linguist/language.rb
|
||||
linguist/md5.rb
|
||||
linguist/repository.rb
|
||||
linguist/samples.rb
|
||||
linguist/tokenizer.rb
|
||||
linguist.rb
|
||||
|
||||
#### Ignore vendored files
|
||||
|
||||
@@ -82,14 +99,18 @@ To run the tests:
|
||||
|
||||
## Contributing
|
||||
|
||||
The majority of patches won't need to touch any Ruby code at all. The [master language list](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) is just a configuration file.
|
||||
The majority of contributions won't need to touch any Ruby code at all. The [master language list](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) is just a YAML configuration file.
|
||||
|
||||
We try to only add languages once they have some usage on GitHub, so please note in-the-wild usage examples in your pull request.
|
||||
|
||||
Almost all bug fixes or new language additions should come with some additional code samples. Just drop them under [`samples/`](https://github.com/github/linguist/tree/master/samples) in the correct subdirectory and our test suite will automatically test them. In most cases you shouldn't need to add any new assertions.
|
||||
|
||||
To update the `samples.json` after adding new files to [`samples/`](https://github.com/github/linguist/tree/master/samples):
|
||||
|
||||
bundle exec rake samples
|
||||
|
||||
### Testing
|
||||
|
||||
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](http://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, which is hopefully green: [](http://travis-ci.org/github/linguist)
|
||||
|
||||
9
Rakefile
9
Rakefile
@@ -1,5 +1,7 @@
|
||||
require 'json'
|
||||
require 'rake/clean'
|
||||
require 'rake/testtask'
|
||||
require 'yaml'
|
||||
|
||||
task :default => :test
|
||||
|
||||
@@ -13,6 +15,13 @@ task :samples do
|
||||
File.open('lib/linguist/samples.json', 'w') { |io| io.write json }
|
||||
end
|
||||
|
||||
task :build_gem do
|
||||
languages = YAML.load_file("lib/linguist/languages.yml")
|
||||
File.write("lib/linguist/languages.json", JSON.dump(languages))
|
||||
`gem build github-linguist.gemspec`
|
||||
File.delete("lib/linguist/languages.json")
|
||||
end
|
||||
|
||||
namespace :classifier do
|
||||
LIMIT = 1_000
|
||||
|
||||
|
||||
28
bin/linguist
28
bin/linguist
@@ -1,19 +1,39 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# linguist — detect language type for a file, or, given a directory, determine language breakdown
|
||||
#
|
||||
# usage: linguist <path>
|
||||
# usage: linguist <path> [<--breakdown>]
|
||||
|
||||
require 'linguist/file_blob'
|
||||
require 'linguist/repository'
|
||||
|
||||
path = ARGV[0] || Dir.pwd
|
||||
|
||||
# special case if not given a directory but still given the --breakdown option
|
||||
if path == "--breakdown"
|
||||
path = Dir.pwd
|
||||
breakdown = true
|
||||
end
|
||||
|
||||
ARGV.shift
|
||||
breakdown = true if ARGV[0] == "--breakdown"
|
||||
|
||||
if File.directory?(path)
|
||||
repo = Linguist::Repository.from_directory(path)
|
||||
repo.languages.sort_by { |_, size| size }.reverse.each do |language, size|
|
||||
percentage = ((size / repo.size.to_f) * 100).round
|
||||
puts "%-4s %s" % ["#{percentage}%", language]
|
||||
percentage = ((size / repo.size.to_f) * 100)
|
||||
percentage = sprintf '%.2f' % percentage
|
||||
puts "%-7s %s" % ["#{percentage}%", language]
|
||||
end
|
||||
if breakdown
|
||||
puts
|
||||
file_breakdown = repo.breakdown_by_file
|
||||
file_breakdown.each do |lang, files|
|
||||
puts "#{lang}:"
|
||||
files.each do |file|
|
||||
puts file
|
||||
end
|
||||
puts
|
||||
end
|
||||
end
|
||||
elsif File.file?(path)
|
||||
blob = Linguist::FileBlob.new(path, Dir.pwd)
|
||||
|
||||
@@ -1,20 +1,23 @@
|
||||
Gem::Specification.new do |s|
|
||||
s.name = 'github-linguist'
|
||||
s.version = '2.9.5'
|
||||
s.version = '2.10.10'
|
||||
s.summary = "GitHub Language detection"
|
||||
s.description = 'We use this library at GitHub to detect blob languages, highlight code, ignore binary files, suppress generated files in diffs, and generate language breakdown graphs.'
|
||||
|
||||
s.authors = "GitHub"
|
||||
s.homepage = "https://github.com/github/linguist"
|
||||
s.license = "MIT"
|
||||
|
||||
s.files = Dir['lib/**/*']
|
||||
s.executables << 'linguist'
|
||||
|
||||
s.add_dependency 'charlock_holmes', '~> 0.6.6'
|
||||
s.add_dependency 'escape_utils', '~> 0.3.1'
|
||||
s.add_dependency 'escape_utils', '>= 0.3.1'
|
||||
s.add_dependency 'mime-types', '~> 1.19'
|
||||
s.add_dependency 'pygments.rb', '~> 0.5.2'
|
||||
s.add_development_dependency 'mocha'
|
||||
s.add_dependency 'pygments.rb', '~> 0.5.4'
|
||||
|
||||
s.add_development_dependency 'json'
|
||||
s.add_development_dependency 'mocha'
|
||||
s.add_development_dependency 'rake'
|
||||
s.add_development_dependency 'yajl-ruby'
|
||||
end
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
require 'linguist/blob_helper'
|
||||
require 'linguist/generated'
|
||||
require 'linguist/heuristics'
|
||||
require 'linguist/language'
|
||||
require 'linguist/repository'
|
||||
require 'linguist/samples'
|
||||
|
||||
@@ -190,9 +190,9 @@ module Linguist
|
||||
# Public: Is the blob safe to colorize?
|
||||
#
|
||||
# We use Pygments for syntax highlighting blobs. Pygments
|
||||
# can be too slow for very large blobs or for certain
|
||||
# can be too slow for very large blobs or for certain
|
||||
# corner-case blobs.
|
||||
#
|
||||
#
|
||||
# Return true or false
|
||||
def safe_to_colorize?
|
||||
!large? && text? && !high_ratio_of_long_lines?
|
||||
|
||||
@@ -15,8 +15,8 @@ module Linguist
|
||||
#
|
||||
# Returns nothing.
|
||||
#
|
||||
# Set LINGUIST_DEBUG=1 or =2 to see probabilities per-token,
|
||||
# per-language. See also dump_all_tokens, below.
|
||||
# Set LINGUIST_DEBUG=1 or =2 to see probabilities per-token or
|
||||
# per-language. See also #dump_all_tokens, below.
|
||||
def self.train!(db, language, data)
|
||||
tokens = Tokenizer.tokenize(data)
|
||||
|
||||
@@ -78,18 +78,13 @@ module Linguist
|
||||
def classify(tokens, languages)
|
||||
return [] if tokens.nil?
|
||||
tokens = Tokenizer.tokenize(tokens) if tokens.is_a?(String)
|
||||
|
||||
scores = {}
|
||||
if verbosity >= 2
|
||||
dump_all_tokens(tokens, languages)
|
||||
end
|
||||
|
||||
debug_dump_all_tokens(tokens, languages) if verbosity >= 2
|
||||
|
||||
languages.each do |language|
|
||||
scores[language] = tokens_probability(tokens, language) +
|
||||
language_probability(language)
|
||||
if verbosity >= 1
|
||||
printf "%10s = %10.3f + %7.3f = %10.3f\n",
|
||||
language, tokens_probability(tokens, language), language_probability(language), scores[language]
|
||||
end
|
||||
scores[language] = tokens_probability(tokens, language) + language_probability(language)
|
||||
debug_dump_probabilities(tokens, language, scores[language]) if verbosity >= 1
|
||||
end
|
||||
|
||||
scores.sort { |a, b| b[1] <=> a[1] }.map { |score| [score[0], score[1]] }
|
||||
@@ -135,6 +130,11 @@ module Linguist
|
||||
@verbosity ||= (ENV['LINGUIST_DEBUG'] || 0).to_i
|
||||
end
|
||||
|
||||
def debug_dump_probabilities(tokens, language, score)
|
||||
printf("%10s = %10.3f + %7.3f = %10.3f\n",
|
||||
language, tokens_probability(tokens, language), language_probability(language), score)
|
||||
end
|
||||
|
||||
# Internal: show a table of probabilities for each <token,language> pair.
|
||||
#
|
||||
# The number in each table entry is the number of "points" that each
|
||||
@@ -145,22 +145,22 @@ module Linguist
|
||||
# how much more likely (log of probability ratio) that token is to
|
||||
# appear in one language vs. the least-likely language. Dashes
|
||||
# indicate the least-likely language (and zero points) for each token.
|
||||
def dump_all_tokens(tokens, languages)
|
||||
def debug_dump_all_tokens(tokens, languages)
|
||||
maxlen = tokens.map { |tok| tok.size }.max
|
||||
|
||||
|
||||
printf "%#{maxlen}s", ""
|
||||
puts " #" + languages.map { |lang| sprintf("%10s", lang) }.join
|
||||
|
||||
tokmap = Hash.new(0)
|
||||
tokens.each { |tok| tokmap[tok] += 1 }
|
||||
|
||||
tokmap.sort.each { |tok, count|
|
||||
|
||||
token_map = Hash.new(0)
|
||||
tokens.each { |tok| token_map[tok] += 1 }
|
||||
|
||||
token_map.sort.each { |tok, count|
|
||||
arr = languages.map { |lang| [lang, token_probability(tok, lang)] }
|
||||
min = arr.map { |a,b| b }.min
|
||||
minlog = Math.log(min)
|
||||
if !arr.inject(true) { |result, n| result && n[1] == arr[0][1] }
|
||||
printf "%#{maxlen}s%5d", tok, count
|
||||
|
||||
|
||||
puts arr.map { |ent|
|
||||
ent[1] == min ? " -" : sprintf("%10.3f", count * (Math.log(ent[1]) - minlog))
|
||||
}.join
|
||||
|
||||
@@ -58,7 +58,11 @@ module Linguist
|
||||
generated_parser? ||
|
||||
generated_net_docfile? ||
|
||||
generated_net_designer_file? ||
|
||||
generated_protocol_buffer?
|
||||
generated_postscript? ||
|
||||
generated_protocol_buffer? ||
|
||||
generated_jni_header? ||
|
||||
composer_lock? ||
|
||||
node_modules?
|
||||
end
|
||||
|
||||
# Internal: Is the blob an XCode project file?
|
||||
@@ -73,14 +77,16 @@ module Linguist
|
||||
|
||||
# Internal: Is the blob minified files?
|
||||
#
|
||||
# Consider a file minified if it contains more than 5% spaces.
|
||||
# Consider a file minified if the average line length is
|
||||
# greater then 110c.
|
||||
#
|
||||
# Currently, only JS and CSS files are detected by this method.
|
||||
#
|
||||
# Returns true or false.
|
||||
def minified_files?
|
||||
return unless ['.js', '.css'].include? extname
|
||||
if data && data.length > 200
|
||||
(data.each_char.count{ |c| c <= ' ' } / data.length.to_f) < 0.05
|
||||
if lines.any?
|
||||
(lines.inject(0) { |n, l| n += l.length } / lines.length) > 110
|
||||
else
|
||||
false
|
||||
end
|
||||
@@ -171,6 +177,29 @@ module Linguist
|
||||
false
|
||||
end
|
||||
|
||||
# Internal: Is the blob of PostScript generated?
|
||||
#
|
||||
# PostScript files are often generated by other programs. If they tell us so,
|
||||
# we can detect them.
|
||||
#
|
||||
# Returns true or false.
|
||||
def generated_postscript?
|
||||
return false unless ['.ps', '.eps'].include? extname
|
||||
|
||||
# We analyze the "%%Creator:" comment, which contains the author/generator
|
||||
# of the file. If there is one, it should be in one of the first few lines.
|
||||
creator = lines[0..9].find {|line| line =~ /^%%Creator: /}
|
||||
return false if creator.nil?
|
||||
|
||||
# Most generators write their version number, while human authors' or companies'
|
||||
# names don't contain numbers. So look if the line contains digits. Also
|
||||
# look for some special cases without version numbers.
|
||||
return creator =~ /[0-9]/ ||
|
||||
creator.include?("mpage") ||
|
||||
creator.include?("draw") ||
|
||||
creator.include?("ImageMagick")
|
||||
end
|
||||
|
||||
# Internal: Is the blob a C++, Java or Python source file generated by the
|
||||
# Protocol Buffer compiler?
|
||||
#
|
||||
@@ -181,5 +210,32 @@ module Linguist
|
||||
|
||||
return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!")
|
||||
end
|
||||
|
||||
# Internal: Is the blob a C/C++ header generated by the Java JNI tool javah?
|
||||
#
|
||||
# Returns true of false.
|
||||
def generated_jni_header?
|
||||
return false unless extname == '.h'
|
||||
return false unless lines.count > 2
|
||||
|
||||
return lines[0].include?("/* DO NOT EDIT THIS FILE - it is machine generated */") &&
|
||||
lines[1].include?("#include <jni.h>")
|
||||
end
|
||||
|
||||
# node_modules/ can contain large amounts of files, in general not meant
|
||||
# for humans in pull requests.
|
||||
#
|
||||
# Returns true or false.
|
||||
def node_modules?
|
||||
!!name.match(/node_modules\//)
|
||||
end
|
||||
|
||||
# the php composer tool generates a lock file to represent a specific dependency state.
|
||||
# In general not meant for humans in pull requests.
|
||||
#
|
||||
# Returns true or false.
|
||||
def composer_lock?
|
||||
!!name.match(/composer.lock/)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
60
lib/linguist/heuristics.rb
Normal file
60
lib/linguist/heuristics.rb
Normal file
@@ -0,0 +1,60 @@
|
||||
module Linguist
|
||||
# A collection of simple heuristics that can be used to better analyze languages.
|
||||
class Heuristics
|
||||
ACTIVE = false
|
||||
|
||||
# Public: Given an array of String language names,
|
||||
# apply heuristics against the given data and return an array
|
||||
# of matching languages, or nil.
|
||||
#
|
||||
# data - Array of tokens or String data to analyze.
|
||||
# languages - Array of language name Strings to restrict to.
|
||||
#
|
||||
# Returns an array of Languages or []
|
||||
def self.find_by_heuristics(data, languages)
|
||||
if active?
|
||||
if languages.all? { |l| ["Objective-C", "C++"].include?(l) }
|
||||
disambiguate_c(data, languages)
|
||||
end
|
||||
if languages.all? { |l| ["Perl", "Prolog"].include?(l) }
|
||||
disambiguate_pl(data, languages)
|
||||
end
|
||||
if languages.all? { |l| ["TypeScript", "XML"].include?(l) }
|
||||
disambiguate_ts(data, languages)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# .h extensions are ambigious between C, C++, and Objective-C.
|
||||
# We want to shortcut look for Objective-C _and_ now C++ too!
|
||||
#
|
||||
# Returns an array of Languages or []
|
||||
def self.disambiguate_c(data, languages)
|
||||
matches = []
|
||||
matches << Language["Objective-C"] if data.include?("@interface")
|
||||
matches << Language["C++"] if data.include?("#include <cstdint>")
|
||||
matches
|
||||
end
|
||||
|
||||
def self.disambiguate_pl(data, languages)
|
||||
matches = []
|
||||
matches << Language["Prolog"] if data.include?(":-")
|
||||
matches << Language["Perl"] if data.include?("use strict")
|
||||
matches
|
||||
end
|
||||
|
||||
def self.disambiguate_ts(data, languages)
|
||||
matches = []
|
||||
if (data.include?("</translation>"))
|
||||
matches << Language["XML"]
|
||||
else
|
||||
matches << Language["TypeScript"]
|
||||
end
|
||||
matches
|
||||
end
|
||||
|
||||
def self.active?
|
||||
!!ACTIVE
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,8 +1,13 @@
|
||||
require 'escape_utils'
|
||||
require 'pygments'
|
||||
require 'yaml'
|
||||
begin
|
||||
require 'json'
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
require 'linguist/classifier'
|
||||
require 'linguist/heuristics'
|
||||
require 'linguist/samples'
|
||||
|
||||
module Linguist
|
||||
@@ -17,17 +22,27 @@ module Linguist
|
||||
@alias_index = {}
|
||||
|
||||
@extension_index = Hash.new { |h,k| h[k] = [] }
|
||||
@interpreter_index = Hash.new { |h,k| h[k] = [] }
|
||||
@filename_index = Hash.new { |h,k| h[k] = [] }
|
||||
@primary_extension_index = {}
|
||||
|
||||
# Valid Languages types
|
||||
TYPES = [:data, :markup, :programming]
|
||||
TYPES = [:data, :markup, :programming, :prose]
|
||||
|
||||
# Names of non-programming languages that we will still detect
|
||||
#
|
||||
# Returns an array
|
||||
def self.detectable_markup
|
||||
["AsciiDoc", "CSS", "Creole", "Less", "Markdown", "MediaWiki", "Org", "RDoc", "Sass", "Textile", "reStructuredText"]
|
||||
["CSS", "Less", "Sass", "SCSS", "Stylus", "TeX"]
|
||||
end
|
||||
|
||||
# Detect languages by a specific type
|
||||
#
|
||||
# type - A symbol that exists within TYPES
|
||||
#
|
||||
# Returns an array
|
||||
def self.by_type(type)
|
||||
all.select { |h| h.type == type }
|
||||
end
|
||||
|
||||
# Internal: Create a new Language object
|
||||
@@ -71,6 +86,10 @@ module Linguist
|
||||
|
||||
@primary_extension_index[language.primary_extension] = language
|
||||
|
||||
language.interpreters.each do |interpreter|
|
||||
@interpreter_index[interpreter] << language
|
||||
end
|
||||
|
||||
language.filenames.each do |filename|
|
||||
@filename_index[filename] << language
|
||||
end
|
||||
@@ -95,16 +114,32 @@ module Linguist
|
||||
name += ".script!"
|
||||
end
|
||||
|
||||
# First try to find languages that match based on filename.
|
||||
possible_languages = find_by_filename(name)
|
||||
|
||||
# If there is more than one possible language with that extension (or no
|
||||
# extension at all, in the case of extensionless scripts), we need to continue
|
||||
# our detection work
|
||||
if possible_languages.length > 1
|
||||
data = data.call() if data.respond_to?(:call)
|
||||
possible_language_names = possible_languages.map(&:name)
|
||||
|
||||
# Don't bother with emptiness
|
||||
if data.nil? || data == ""
|
||||
nil
|
||||
elsif result = Classifier.classify(Samples::DATA, data, possible_languages.map(&:name)).first
|
||||
Language[result[0]]
|
||||
# Check if there's a shebang line and use that as authoritative
|
||||
elsif (result = find_by_shebang(data)) && !result.empty?
|
||||
result.first
|
||||
# No shebang. Still more work to do. Try to find it with our heuristics.
|
||||
elsif (determined = Heuristics.find_by_heuristics(data, possible_language_names)) && !determined.empty?
|
||||
determined.first
|
||||
# Lastly, fall back to the probablistic classifier.
|
||||
elsif classified = Classifier.classify(Samples::DATA, data, possible_language_names ).first
|
||||
# Return the actual Language object based of the string language name (i.e., first element of `#classify`)
|
||||
Language[classified[0]]
|
||||
end
|
||||
else
|
||||
# Simplest and most common case, we can just return the one match based on extension
|
||||
possible_languages.first
|
||||
end
|
||||
end
|
||||
@@ -162,6 +197,20 @@ module Linguist
|
||||
langs.compact.uniq
|
||||
end
|
||||
|
||||
# Public: Look up Languages by shebang line.
|
||||
#
|
||||
# data - Array of tokens or String data to analyze.
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# Language.find_by_shebang("#!/bin/bash\ndate;")
|
||||
# # => [#<Language name="Bash">]
|
||||
#
|
||||
# Returns the matching Language
|
||||
def self.find_by_shebang(data)
|
||||
@interpreter_index[Linguist.interpreter_from_shebang(data)]
|
||||
end
|
||||
|
||||
# Public: Look up Language by its name or lexer.
|
||||
#
|
||||
# name - The String name of the Language
|
||||
@@ -247,6 +296,7 @@ module Linguist
|
||||
|
||||
# Set extensions or default to [].
|
||||
@extensions = attributes[:extensions] || []
|
||||
@interpreters = attributes[:interpreters] || []
|
||||
@filenames = attributes[:filenames] || []
|
||||
|
||||
unless @primary_extension = attributes[:primary_extension]
|
||||
@@ -359,6 +409,15 @@ module Linguist
|
||||
# Returns the extension String.
|
||||
attr_reader :primary_extension
|
||||
|
||||
# Public: Get interpreters
|
||||
#
|
||||
# Examples
|
||||
#
|
||||
# # => ['awk', 'gawk', 'mawk' ...]
|
||||
#
|
||||
# Returns the interpreters Array
|
||||
attr_reader :interpreters
|
||||
|
||||
# Public: Get filenames
|
||||
#
|
||||
# Examples
|
||||
@@ -452,11 +511,22 @@ module Linguist
|
||||
end
|
||||
|
||||
extensions = Samples::DATA['extnames']
|
||||
interpreters = Samples::DATA['interpreters']
|
||||
filenames = Samples::DATA['filenames']
|
||||
popular = YAML.load_file(File.expand_path("../popular.yml", __FILE__))
|
||||
|
||||
YAML.load_file(File.expand_path("../languages.yml", __FILE__)).each do |name, options|
|
||||
languages_yml = File.expand_path("../languages.yml", __FILE__)
|
||||
languages_json = File.expand_path("../languages.json", __FILE__)
|
||||
|
||||
if File.exist?(languages_json) && defined?(JSON)
|
||||
languages = JSON.load(File.read(languages_json))
|
||||
else
|
||||
languages = YAML.load_file(languages_yml)
|
||||
end
|
||||
|
||||
languages.each do |name, options|
|
||||
options['extensions'] ||= []
|
||||
options['interpreters'] ||= []
|
||||
options['filenames'] ||= []
|
||||
|
||||
if extnames = extensions[name]
|
||||
@@ -467,6 +537,18 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
if interpreters == nil
|
||||
interpreters = {}
|
||||
end
|
||||
|
||||
if interpreter_names = interpreters[name]
|
||||
interpreter_names.each do |interpreter|
|
||||
if !options['interpreters'].include?(interpreter)
|
||||
options['interpreters'] << interpreter
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if fns = filenames[name]
|
||||
fns.each do |filename|
|
||||
if !options['filenames'].include?(filename)
|
||||
@@ -487,6 +569,7 @@ module Linguist
|
||||
:searchable => options.key?('searchable') ? options['searchable'] : true,
|
||||
:search_term => options['search_term'],
|
||||
:extensions => options['extensions'].sort,
|
||||
:interpreters => options['interpreters'].sort,
|
||||
:primary_extension => options['primary_extension'],
|
||||
:filenames => options['filenames'],
|
||||
:popular => popular.include?(name)
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
# ace_mode - A String name of Ace Mode (if available)
|
||||
# wrap - Boolean wrap to enable line wrapping (default: false)
|
||||
# extension - An Array of associated extensions
|
||||
# interpreter - An Array of associated interpreters
|
||||
# primary_extension - A String for the main extension associated with
|
||||
# the language. Must be unique. Used when a Language is picked
|
||||
# from a dropdown and we need to automatically choose an
|
||||
@@ -29,6 +30,12 @@ ABAP:
|
||||
lexer: ABAP
|
||||
primary_extension: .abap
|
||||
|
||||
ANTLR:
|
||||
type: programming
|
||||
color: "#9DC3FF"
|
||||
lexer: ANTLR
|
||||
primary_extension: .g4
|
||||
|
||||
ASP:
|
||||
type: programming
|
||||
color: "#6a40fd"
|
||||
@@ -62,6 +69,11 @@ Ada:
|
||||
extensions:
|
||||
- .ads
|
||||
|
||||
Agda:
|
||||
type: programming
|
||||
color: "#467C91"
|
||||
primary_extension: .agda
|
||||
|
||||
ApacheConf:
|
||||
type: markup
|
||||
aliases:
|
||||
@@ -78,6 +90,8 @@ AppleScript:
|
||||
aliases:
|
||||
- osascript
|
||||
primary_extension: .applescript
|
||||
extensions:
|
||||
- .scpt
|
||||
|
||||
Arc:
|
||||
type: programming
|
||||
@@ -92,7 +106,7 @@ Arduino:
|
||||
primary_extension: .ino
|
||||
|
||||
AsciiDoc:
|
||||
type: markup
|
||||
type: prose
|
||||
lexer: Text only
|
||||
ace_mode: asciidoc
|
||||
wrap: true
|
||||
@@ -122,14 +136,29 @@ AutoHotkey:
|
||||
- ahk
|
||||
primary_extension: .ahk
|
||||
|
||||
AutoIt:
|
||||
type: programming
|
||||
color: "#36699B"
|
||||
aliases:
|
||||
- au3
|
||||
- AutoIt3
|
||||
- AutoItScript
|
||||
primary_extension: .au3
|
||||
|
||||
Awk:
|
||||
type: programming
|
||||
lexer: Awk
|
||||
primary_extension: .awk
|
||||
extensions:
|
||||
- .auk
|
||||
- .gawk
|
||||
- .mawk
|
||||
- .nawk
|
||||
interpreters:
|
||||
- awk
|
||||
- gawk
|
||||
- mawk
|
||||
- nawk
|
||||
|
||||
Batchfile:
|
||||
type: programming
|
||||
@@ -144,9 +173,23 @@ Batchfile:
|
||||
Befunge:
|
||||
primary_extension: .befunge
|
||||
|
||||
BlitzBasic:
|
||||
type: programming
|
||||
aliases:
|
||||
- blitzplus
|
||||
- blitz3d
|
||||
primary_extension: .bb
|
||||
extensions:
|
||||
- .decls
|
||||
|
||||
BlitzMax:
|
||||
primary_extension: .bmx
|
||||
|
||||
Bluespec:
|
||||
type: programming
|
||||
lexer: verilog
|
||||
primary_extension: .bsv
|
||||
|
||||
Boo:
|
||||
type: programming
|
||||
color: "#d4bec1"
|
||||
@@ -157,6 +200,11 @@ Brainfuck:
|
||||
extensions:
|
||||
- .bf
|
||||
|
||||
Brightscript:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
primary_extension: .brs
|
||||
|
||||
Bro:
|
||||
type: programming
|
||||
primary_extension: .bro
|
||||
@@ -177,6 +225,7 @@ C#:
|
||||
- csharp
|
||||
primary_extension: .cs
|
||||
extensions:
|
||||
- .cshtml
|
||||
- .csx
|
||||
|
||||
C++:
|
||||
@@ -194,8 +243,10 @@ C++:
|
||||
- .H
|
||||
- .h++
|
||||
- .hh
|
||||
- .hpp
|
||||
- .hxx
|
||||
- .tcc
|
||||
- .tpp
|
||||
|
||||
C-ObjDump:
|
||||
type: data
|
||||
@@ -245,14 +296,26 @@ ChucK:
|
||||
lexer: Java
|
||||
primary_extension: .ck
|
||||
|
||||
Clean:
|
||||
type: programming
|
||||
color: "#3a81ad"
|
||||
lexer: Text only
|
||||
primary_extension: .icl
|
||||
extensions:
|
||||
- .dcl
|
||||
|
||||
Clojure:
|
||||
type: programming
|
||||
ace_mode: clojure
|
||||
color: "#db5855"
|
||||
primary_extension: .clj
|
||||
extensions:
|
||||
- .cl2
|
||||
- .cljc
|
||||
- .cljs
|
||||
- .cljscm
|
||||
- .cljx
|
||||
- .hic
|
||||
filenames:
|
||||
- riemann.config
|
||||
|
||||
@@ -291,9 +354,16 @@ Common Lisp:
|
||||
primary_extension: .lisp
|
||||
extensions:
|
||||
- .asd
|
||||
- .cl
|
||||
- .lsp
|
||||
- .ny
|
||||
- .podsl
|
||||
interpreters:
|
||||
- lisp
|
||||
- sbcl
|
||||
- ccl
|
||||
- clisp
|
||||
- ecl
|
||||
|
||||
Coq:
|
||||
type: programming
|
||||
@@ -308,15 +378,27 @@ Cpp-ObjDump:
|
||||
- .cxx-objdump
|
||||
|
||||
Creole:
|
||||
type: markup
|
||||
type: prose
|
||||
lexer: Text only
|
||||
wrap: true
|
||||
primary_extension: .creole
|
||||
|
||||
Crystal:
|
||||
type: programming
|
||||
lexer: Ruby
|
||||
primary_extension: .cr
|
||||
ace_mode: ruby
|
||||
|
||||
Cucumber:
|
||||
lexer: Gherkin
|
||||
primary_extension: .feature
|
||||
|
||||
Cuda:
|
||||
lexer: CUDA
|
||||
primary_extension: .cu
|
||||
extensions:
|
||||
- .cuh
|
||||
|
||||
Cython:
|
||||
type: programming
|
||||
group: Python
|
||||
@@ -337,6 +419,14 @@ D-ObjDump:
|
||||
lexer: d-objdump
|
||||
primary_extension: .d-objdump
|
||||
|
||||
DM:
|
||||
type: programming
|
||||
color: "#075ff1"
|
||||
lexer: C++
|
||||
primary_extension: .dm
|
||||
aliases:
|
||||
- byond
|
||||
|
||||
DOT:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
@@ -354,6 +444,7 @@ Darcs Patch:
|
||||
|
||||
Dart:
|
||||
type: programming
|
||||
color: "#98BAD6"
|
||||
primary_extension: .dart
|
||||
|
||||
DCPU-16 ASM:
|
||||
@@ -379,7 +470,7 @@ Ecere Projects:
|
||||
lexer: JSON
|
||||
primary_extension: .epj
|
||||
|
||||
Ecl:
|
||||
ECL:
|
||||
type: programming
|
||||
color: "#8a1267"
|
||||
primary_extension: .ecl
|
||||
@@ -403,7 +494,6 @@ Elixir:
|
||||
Elm:
|
||||
type: programming
|
||||
lexer: Haskell
|
||||
group: Haskell
|
||||
primary_extension: .elm
|
||||
|
||||
Emacs Lisp:
|
||||
@@ -414,6 +504,8 @@ Emacs Lisp:
|
||||
- elisp
|
||||
- emacs
|
||||
primary_extension: .el
|
||||
filenames:
|
||||
- .emacs
|
||||
extensions:
|
||||
- .emacs
|
||||
|
||||
@@ -529,6 +621,12 @@ Gettext Catalog:
|
||||
extensions:
|
||||
- .pot
|
||||
|
||||
Glyph:
|
||||
type: programming
|
||||
color: "#e4cc98"
|
||||
lexer: Tcl
|
||||
primary_extension: .glf
|
||||
|
||||
Go:
|
||||
type: programming
|
||||
color: "#a89b4d"
|
||||
@@ -615,6 +713,10 @@ Handlebars:
|
||||
type: markup
|
||||
lexer: Text only
|
||||
primary_extension: .handlebars
|
||||
extensions:
|
||||
- .hbs
|
||||
- .html.handlebars
|
||||
- .html.hbs
|
||||
|
||||
Haskell:
|
||||
type: programming
|
||||
@@ -625,13 +727,25 @@ Haskell:
|
||||
|
||||
Haxe:
|
||||
type: programming
|
||||
lexer: haXe
|
||||
ace_mode: haxe
|
||||
color: "#346d51"
|
||||
primary_extension: .hx
|
||||
extensions:
|
||||
- .hxsl
|
||||
|
||||
Hy:
|
||||
type: programming
|
||||
lexer: Clojure
|
||||
ace_mode: clojure
|
||||
color: "#7891b1"
|
||||
primary_extension: .hy
|
||||
|
||||
IDL:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
color: "#e3592c"
|
||||
primary_extension: .pro
|
||||
|
||||
INI:
|
||||
type: data
|
||||
extensions:
|
||||
@@ -640,6 +754,17 @@ INI:
|
||||
- .properties
|
||||
primary_extension: .ini
|
||||
|
||||
Idris:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
primary_extension: .idr
|
||||
extensions:
|
||||
- .lidr
|
||||
|
||||
Inno Setup:
|
||||
primary_extension: .iss
|
||||
lexer: Text only
|
||||
|
||||
IRC log:
|
||||
lexer: IRC logs
|
||||
search_term: irc
|
||||
@@ -670,6 +795,27 @@ JSON:
|
||||
ace_mode: json
|
||||
searchable: false
|
||||
primary_extension: .json
|
||||
extensions:
|
||||
- .sublime-keymap
|
||||
- .sublime_metrics
|
||||
- .sublime-mousemap
|
||||
- .sublime-project
|
||||
- .sublime_session
|
||||
- .sublime-settings
|
||||
- .sublime-workspace
|
||||
filenames:
|
||||
- .jshintrc
|
||||
- composer.lock
|
||||
|
||||
JSON5:
|
||||
type: data
|
||||
lexer: JavaScript
|
||||
primary_extension: .json5
|
||||
|
||||
Jade:
|
||||
group: HTML
|
||||
type: markup
|
||||
primary_extension: .jade
|
||||
|
||||
Java:
|
||||
type: programming
|
||||
@@ -701,6 +847,7 @@ JavaScript:
|
||||
- .jsm
|
||||
- .jss
|
||||
- .jsx
|
||||
- .njs
|
||||
- .pac
|
||||
- .sjs
|
||||
- .ssjs
|
||||
@@ -710,6 +857,13 @@ JavaScript:
|
||||
Julia:
|
||||
type: programming
|
||||
primary_extension: .jl
|
||||
color: "#a270ba"
|
||||
|
||||
KRL:
|
||||
lexer: Text only
|
||||
type: programming
|
||||
color: "#f5c800"
|
||||
primary_extension: .krl
|
||||
|
||||
Kotlin:
|
||||
type: programming
|
||||
@@ -731,7 +885,6 @@ LLVM:
|
||||
Lasso:
|
||||
type: programming
|
||||
lexer: Lasso
|
||||
ace_mode: lasso
|
||||
color: "#2584c3"
|
||||
primary_extension: .lasso
|
||||
|
||||
@@ -739,7 +892,6 @@ Less:
|
||||
type: markup
|
||||
group: CSS
|
||||
lexer: CSS
|
||||
ace_mode: less
|
||||
primary_extension: .less
|
||||
|
||||
LilyPond:
|
||||
@@ -748,6 +900,13 @@ LilyPond:
|
||||
extensions:
|
||||
- .ily
|
||||
|
||||
Literate Agda:
|
||||
type: programming
|
||||
group: Agda
|
||||
primary_extension: .lagda
|
||||
extensions:
|
||||
- .lagda
|
||||
|
||||
Literate CoffeeScript:
|
||||
type: programming
|
||||
group: CoffeeScript
|
||||
@@ -782,10 +941,6 @@ LiveScript:
|
||||
Logos:
|
||||
type: programming
|
||||
primary_extension: .xm
|
||||
extensions:
|
||||
- .x
|
||||
- .xi
|
||||
- .xmi
|
||||
|
||||
Logtalk:
|
||||
type: programming
|
||||
@@ -801,6 +956,8 @@ Lua:
|
||||
extensions:
|
||||
- .nse
|
||||
- .rbxs
|
||||
interpreters:
|
||||
- lua
|
||||
|
||||
M:
|
||||
type: programming
|
||||
@@ -822,6 +979,8 @@ Makefile:
|
||||
- makefile
|
||||
- Makefile
|
||||
- GNUmakefile
|
||||
interpreters:
|
||||
- make
|
||||
|
||||
Mako:
|
||||
primary_extension: .mako
|
||||
@@ -829,7 +988,7 @@ Mako:
|
||||
- .mao
|
||||
|
||||
Markdown:
|
||||
type: markup
|
||||
type: prose
|
||||
lexer: Text only
|
||||
ace_mode: markdown
|
||||
wrap: true
|
||||
@@ -848,18 +1007,20 @@ Matlab:
|
||||
Max:
|
||||
type: programming
|
||||
color: "#ce279c"
|
||||
lexer: Text only
|
||||
lexer: JSON
|
||||
aliases:
|
||||
- max/msp
|
||||
- maxmsp
|
||||
search_term: max/msp
|
||||
primary_extension: .mxt
|
||||
primary_extension: .maxpat
|
||||
extensions:
|
||||
- .maxhelp
|
||||
- .maxpat
|
||||
- .maxproj
|
||||
- .mxt
|
||||
- .pat
|
||||
|
||||
MediaWiki:
|
||||
type: markup
|
||||
type: prose
|
||||
lexer: Text only
|
||||
wrap: true
|
||||
primary_extension: .mediawiki
|
||||
@@ -903,6 +1064,12 @@ Nemerle:
|
||||
color: "#0d3c6e"
|
||||
primary_extension: .n
|
||||
|
||||
NetLogo:
|
||||
type: programming
|
||||
lexer: Common Lisp
|
||||
color: "#ff2b2b"
|
||||
primary_extension: .nlogo
|
||||
|
||||
Nginx:
|
||||
type: markup
|
||||
lexer: Nginx configuration file
|
||||
@@ -994,11 +1161,23 @@ OpenEdge ABL:
|
||||
primary_extension: .p
|
||||
|
||||
Org:
|
||||
type: markup
|
||||
type: prose
|
||||
lexer: Text only
|
||||
wrap: true
|
||||
primary_extension: .org
|
||||
|
||||
Oxygene:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
color: "#5a63a3"
|
||||
primary_extension: .oxygene
|
||||
|
||||
PAWN:
|
||||
type: programming
|
||||
lexer: C++
|
||||
color: "#dbb284"
|
||||
primary_extension: .pwn
|
||||
|
||||
PHP:
|
||||
type: programming
|
||||
ace_mode: php
|
||||
@@ -1052,13 +1231,27 @@ Perl:
|
||||
primary_extension: .pl
|
||||
extensions:
|
||||
- .PL
|
||||
- .nqp
|
||||
- .perl
|
||||
- .ph
|
||||
- .plx
|
||||
- .pm6
|
||||
- .pm
|
||||
- .pod
|
||||
- .psgi
|
||||
interpreters:
|
||||
- perl
|
||||
|
||||
Perl6:
|
||||
type: programming
|
||||
color: "#0298c3"
|
||||
primary_extension: .p6
|
||||
extensions:
|
||||
- .6pl
|
||||
- .6pm
|
||||
- .nqp
|
||||
- .p6l
|
||||
- .p6m
|
||||
- .pl6
|
||||
- .pm6
|
||||
|
||||
Pike:
|
||||
type: programming
|
||||
@@ -1068,18 +1261,34 @@ Pike:
|
||||
extensions:
|
||||
- .pmod
|
||||
|
||||
Pod:
|
||||
type: prose
|
||||
lexer: Text only
|
||||
ace_mode: perl
|
||||
wrap: true
|
||||
primary_extension: .pod
|
||||
|
||||
PogoScript:
|
||||
type: programming
|
||||
color: "#d80074"
|
||||
lexer: Text only
|
||||
primary_extension: .pogo
|
||||
|
||||
PostScript:
|
||||
type: markup
|
||||
primary_extension: .ps
|
||||
extensions:
|
||||
- .eps
|
||||
|
||||
PowerShell:
|
||||
type: programming
|
||||
ace_mode: powershell
|
||||
aliases:
|
||||
- posh
|
||||
primary_extension: .ps1
|
||||
extensions:
|
||||
- .psd1
|
||||
- .psm1
|
||||
|
||||
Processing:
|
||||
type: programming
|
||||
@@ -1091,8 +1300,13 @@ Prolog:
|
||||
type: programming
|
||||
color: "#74283c"
|
||||
primary_extension: .prolog
|
||||
extensions:
|
||||
- .pro
|
||||
|
||||
Protocol Buffer:
|
||||
type: markup
|
||||
aliases:
|
||||
- protobuf
|
||||
- Protocol Buffers
|
||||
primary_extension: .proto
|
||||
|
||||
Puppet:
|
||||
type: programming
|
||||
@@ -1116,12 +1330,17 @@ Python:
|
||||
primary_extension: .py
|
||||
extensions:
|
||||
- .gyp
|
||||
- .lmi
|
||||
- .pyt
|
||||
- .pyw
|
||||
- .wsgi
|
||||
- .xpy
|
||||
filenames:
|
||||
- wscript
|
||||
- SConstruct
|
||||
- SConscript
|
||||
interpreters:
|
||||
- python
|
||||
|
||||
Python traceback:
|
||||
type: data
|
||||
@@ -1130,26 +1349,57 @@ Python traceback:
|
||||
searchable: false
|
||||
primary_extension: .pytb
|
||||
|
||||
QML:
|
||||
type: markup
|
||||
color: "#44a51c"
|
||||
primary_extension: .qml
|
||||
|
||||
R:
|
||||
type: programming
|
||||
color: "#198ce7"
|
||||
lexer: S
|
||||
aliases:
|
||||
- R
|
||||
primary_extension: .r
|
||||
extensions:
|
||||
- .R
|
||||
filenames:
|
||||
- .Rprofile
|
||||
interpreters:
|
||||
- Rscript
|
||||
|
||||
RDoc:
|
||||
type: markup
|
||||
type: prose
|
||||
lexer: Text only
|
||||
ace_mode: rdoc
|
||||
wrap: true
|
||||
primary_extension: .rdoc
|
||||
|
||||
REALbasic:
|
||||
type: programming
|
||||
lexer: VB.net
|
||||
primary_extension: .rbbas
|
||||
extensions:
|
||||
- .rbfrm
|
||||
- .rbmnu
|
||||
- .rbres
|
||||
- .rbtbar
|
||||
- .rbuistate
|
||||
|
||||
RHTML:
|
||||
type: markup
|
||||
group: HTML
|
||||
primary_extension: .rhtml
|
||||
|
||||
RMarkdown:
|
||||
type: prose
|
||||
lexer: Text only
|
||||
wrap: true
|
||||
ace_mode: markdown
|
||||
primary_extension: .rmd
|
||||
extensions:
|
||||
- .Rmd
|
||||
|
||||
Racket:
|
||||
type: programming
|
||||
lexer: Racket
|
||||
@@ -1183,6 +1433,12 @@ Rebol:
|
||||
Redcode:
|
||||
primary_extension: .cw
|
||||
|
||||
RobotFramework:
|
||||
type: programming
|
||||
primary_extension: .robot
|
||||
# extensions:
|
||||
# - .txt
|
||||
|
||||
Rouge:
|
||||
type: programming
|
||||
lexer: Clojure
|
||||
@@ -1206,6 +1462,7 @@ Ruby:
|
||||
- .gemspec
|
||||
- .god
|
||||
- .irbrc
|
||||
- .mspec
|
||||
- .podspec
|
||||
- .rbuild
|
||||
- .rbw
|
||||
@@ -1213,7 +1470,10 @@ Ruby:
|
||||
- .ru
|
||||
- .thor
|
||||
- .watchr
|
||||
interpreters:
|
||||
- ruby
|
||||
filenames:
|
||||
- Appraisals
|
||||
- Berksfile
|
||||
- Gemfile
|
||||
- Guardfile
|
||||
@@ -1254,6 +1514,13 @@ Scala:
|
||||
ace_mode: scala
|
||||
color: "#7dd3b0"
|
||||
primary_extension: .scala
|
||||
extensions:
|
||||
- .sc
|
||||
|
||||
Scaml:
|
||||
group: HTML
|
||||
type: markup
|
||||
primary_extension: .scaml
|
||||
|
||||
Scheme:
|
||||
type: programming
|
||||
@@ -1262,6 +1529,11 @@ Scheme:
|
||||
extensions:
|
||||
- .sls
|
||||
- .ss
|
||||
interpreters:
|
||||
- guile
|
||||
- racket
|
||||
- bigloo
|
||||
- chicken
|
||||
|
||||
Scilab:
|
||||
type: programming
|
||||
@@ -1284,7 +1556,12 @@ Shell:
|
||||
- zsh
|
||||
primary_extension: .sh
|
||||
extensions:
|
||||
- .bats
|
||||
- .tmux
|
||||
interpreters:
|
||||
- bash
|
||||
- sh
|
||||
- zsh
|
||||
filenames:
|
||||
- Dockerfile
|
||||
|
||||
@@ -1312,12 +1589,20 @@ Standard ML:
|
||||
aliases:
|
||||
- sml
|
||||
primary_extension: .sml
|
||||
extensions:
|
||||
- .fun
|
||||
|
||||
Stylus:
|
||||
type: markup
|
||||
group: CSS
|
||||
lexer: Text only
|
||||
primary_extension: .styl
|
||||
|
||||
SuperCollider:
|
||||
type: programming
|
||||
color: "#46390b"
|
||||
lexer: Text only
|
||||
primary_extension: .sc
|
||||
primary_extension: .scd
|
||||
|
||||
TOML:
|
||||
type: data
|
||||
@@ -1332,6 +1617,8 @@ Tcl:
|
||||
type: programming
|
||||
color: "#e4cc98"
|
||||
primary_extension: .tcl
|
||||
extensions:
|
||||
- .adp
|
||||
|
||||
Tcsh:
|
||||
type: programming
|
||||
@@ -1342,15 +1629,22 @@ Tcsh:
|
||||
|
||||
TeX:
|
||||
type: markup
|
||||
color: "#3D6117"
|
||||
ace_mode: latex
|
||||
wrap: true
|
||||
aliases:
|
||||
- latex
|
||||
primary_extension: .tex
|
||||
extensions:
|
||||
- .aux
|
||||
- .bib
|
||||
- .cls
|
||||
- .dtx
|
||||
- .ins
|
||||
- .ltx
|
||||
- .mkii
|
||||
- .mkiv
|
||||
- .mkvi
|
||||
- .sty
|
||||
- .toc
|
||||
|
||||
@@ -1359,7 +1653,7 @@ Tea:
|
||||
primary_extension: .tea
|
||||
|
||||
Textile:
|
||||
type: markup
|
||||
type: prose
|
||||
lexer: Text only
|
||||
ace_mode: textile
|
||||
wrap: true
|
||||
@@ -1394,11 +1688,25 @@ Unified Parallel C:
|
||||
color: "#755223"
|
||||
primary_extension: .upc
|
||||
|
||||
UnrealScript:
|
||||
type: programming
|
||||
color: "#a54c4d"
|
||||
lexer: Java
|
||||
primary_extension: .uc
|
||||
|
||||
VHDL:
|
||||
type: programming
|
||||
lexer: vhdl
|
||||
color: "#543978"
|
||||
primary_extension: .vhdl
|
||||
extensions:
|
||||
- .vhd
|
||||
- .vhf
|
||||
- .vhi
|
||||
- .vho
|
||||
- .vhs
|
||||
- .vht
|
||||
- .vhw
|
||||
|
||||
Vala:
|
||||
type: programming
|
||||
@@ -1413,9 +1721,7 @@ Verilog:
|
||||
color: "#848bf3"
|
||||
primary_extension: .v
|
||||
extensions:
|
||||
- .sv
|
||||
- .svh
|
||||
- .vh
|
||||
- .veo
|
||||
|
||||
VimL:
|
||||
type: programming
|
||||
@@ -1425,6 +1731,7 @@ VimL:
|
||||
- vim
|
||||
primary_extension: .vim
|
||||
filenames:
|
||||
- .vimrc
|
||||
- vimrc
|
||||
- gvimrc
|
||||
|
||||
@@ -1435,8 +1742,10 @@ Visual Basic:
|
||||
primary_extension: .vb
|
||||
extensions:
|
||||
- .bas
|
||||
- .frm
|
||||
- .frx
|
||||
- .vba
|
||||
- .vbhtml
|
||||
- .vbs
|
||||
|
||||
Volt:
|
||||
@@ -1461,18 +1770,26 @@ XML:
|
||||
extensions:
|
||||
- .axml
|
||||
- .ccxml
|
||||
- .clixml
|
||||
- .cproject
|
||||
- .dita
|
||||
- .ditamap
|
||||
- .ditaval
|
||||
- .glade
|
||||
- .grxml
|
||||
- .jelly
|
||||
- .kml
|
||||
- .launch
|
||||
- .mxml
|
||||
- .plist
|
||||
- .pluginspec
|
||||
- .ps1xml
|
||||
- .psc1
|
||||
- .pt
|
||||
- .rdf
|
||||
- .rss
|
||||
- .scxml
|
||||
- .srdf
|
||||
- .svg
|
||||
- .tmCommand
|
||||
- .tmLanguage
|
||||
@@ -1481,12 +1798,14 @@ XML:
|
||||
- .tmTheme
|
||||
- .tml
|
||||
- .ui
|
||||
- .urdf
|
||||
- .vxml
|
||||
- .wsdl
|
||||
- .wxi
|
||||
- .wxl
|
||||
- .wxs
|
||||
- .x3d
|
||||
- .xacro
|
||||
- .xaml
|
||||
- .xlf
|
||||
- .xliff
|
||||
@@ -1497,6 +1816,7 @@ XML:
|
||||
filenames:
|
||||
- .classpath
|
||||
- .project
|
||||
- phpunit.xml.dist
|
||||
|
||||
XProc:
|
||||
type: programming
|
||||
@@ -1511,6 +1831,8 @@ XQuery:
|
||||
primary_extension: .xquery
|
||||
extensions:
|
||||
- .xq
|
||||
- .xql
|
||||
- .xqm
|
||||
- .xqy
|
||||
|
||||
XS:
|
||||
@@ -1536,6 +1858,7 @@ YAML:
|
||||
primary_extension: .yml
|
||||
extensions:
|
||||
- .reek
|
||||
- .rviz
|
||||
- .yaml
|
||||
|
||||
eC:
|
||||
@@ -1562,6 +1885,11 @@ mupad:
|
||||
lexer: MuPAD
|
||||
primary_extension: .mu
|
||||
|
||||
nesC:
|
||||
type: programming
|
||||
color: "#ffce3b"
|
||||
primary_extension: .nc
|
||||
|
||||
ooc:
|
||||
type: programming
|
||||
lexer: Ooc
|
||||
@@ -1569,7 +1897,7 @@ ooc:
|
||||
primary_extension: .ooc
|
||||
|
||||
reStructuredText:
|
||||
type: markup
|
||||
type: prose
|
||||
wrap: true
|
||||
search_term: rst
|
||||
aliases:
|
||||
@@ -1584,3 +1912,9 @@ wisp:
|
||||
ace_mode: clojure
|
||||
color: "#7582D1"
|
||||
primary_extension: .wisp
|
||||
|
||||
xBase:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
color: "#3a4040"
|
||||
primary_extension: .prg
|
||||
|
||||
@@ -29,6 +29,7 @@ module Linguist
|
||||
@computed_stats = false
|
||||
@language = @size = nil
|
||||
@sizes = Hash.new { 0 }
|
||||
@file_breakdown = Hash.new { |h,k| h[k] = Array.new }
|
||||
end
|
||||
|
||||
# Public: Returns a breakdown of language stats.
|
||||
@@ -60,6 +61,12 @@ module Linguist
|
||||
@size
|
||||
end
|
||||
|
||||
# Public: Return the language breakdown of this repository by file
|
||||
def breakdown_by_file
|
||||
compute_stats
|
||||
@file_breakdown
|
||||
end
|
||||
|
||||
# Internal: Compute language breakdown for each blob in the Repository.
|
||||
#
|
||||
# Returns nothing
|
||||
@@ -75,6 +82,10 @@ module Linguist
|
||||
|
||||
# Only include programming languages and acceptable markup languages
|
||||
if blob.language.type == :programming || Language.detectable_markup.include?(blob.language.name)
|
||||
|
||||
# Build up the per-file breakdown stats
|
||||
@file_breakdown[blob.language.group.name] << blob.name
|
||||
|
||||
@sizes[blob.language.group] += blob.size
|
||||
end
|
||||
end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,8 @@
|
||||
require 'yaml'
|
||||
begin
|
||||
require 'json'
|
||||
rescue LoadError
|
||||
require 'yaml'
|
||||
end
|
||||
|
||||
require 'linguist/md5'
|
||||
require 'linguist/classifier'
|
||||
@@ -14,7 +18,8 @@ module Linguist
|
||||
|
||||
# Hash of serialized samples object
|
||||
if File.exist?(PATH)
|
||||
DATA = YAML.load_file(PATH)
|
||||
serializer = defined?(JSON) ? JSON : YAML
|
||||
DATA = serializer.load(File.read(PATH))
|
||||
end
|
||||
|
||||
# Public: Iterate over each sample.
|
||||
@@ -52,6 +57,7 @@ module Linguist
|
||||
yield({
|
||||
:path => File.join(dirname, filename),
|
||||
:language => category,
|
||||
:interpreter => File.exist?(filename) ? Linguist.interpreter_from_shebang(File.read(filename)) : nil,
|
||||
:extname => File.extname(filename)
|
||||
})
|
||||
end
|
||||
@@ -67,6 +73,7 @@ module Linguist
|
||||
def self.data
|
||||
db = {}
|
||||
db['extnames'] = {}
|
||||
db['interpreters'] = {}
|
||||
db['filenames'] = {}
|
||||
|
||||
each do |sample|
|
||||
@@ -80,6 +87,14 @@ module Linguist
|
||||
end
|
||||
end
|
||||
|
||||
if sample[:interpreter]
|
||||
db['interpreters'][language_name] ||= []
|
||||
if !db['interpreters'][language_name].include?(sample[:interpreter])
|
||||
db['interpreters'][language_name] << sample[:interpreter]
|
||||
db['interpreters'][language_name].sort!
|
||||
end
|
||||
end
|
||||
|
||||
if sample[:filename]
|
||||
db['filenames'][language_name] ||= []
|
||||
db['filenames'][language_name] << sample[:filename]
|
||||
@@ -95,4 +110,40 @@ module Linguist
|
||||
db
|
||||
end
|
||||
end
|
||||
|
||||
# Used to retrieve the interpreter from the shebang line of a file's
|
||||
# data.
|
||||
def self.interpreter_from_shebang(data)
|
||||
lines = data.lines.to_a
|
||||
|
||||
if lines.any? && (match = lines[0].match(/(.+)\n?/)) && (bang = match[0]) =~ /^#!/
|
||||
bang.sub!(/^#! /, '#!')
|
||||
tokens = bang.split(' ')
|
||||
pieces = tokens.first.split('/')
|
||||
|
||||
if pieces.size > 1
|
||||
script = pieces.last
|
||||
else
|
||||
script = pieces.first.sub('#!', '')
|
||||
end
|
||||
|
||||
script = script == 'env' ? tokens[1] : script
|
||||
|
||||
# "python2.6" -> "python"
|
||||
if script =~ /((?:\d+\.?)+)/
|
||||
script.sub! $1, ''
|
||||
end
|
||||
|
||||
# Check for multiline shebang hacks that call `exec`
|
||||
if script == 'sh' &&
|
||||
lines[0...5].any? { |l| l.match(/exec (\w+).+\$0.+\$@/) }
|
||||
script = $1
|
||||
end
|
||||
|
||||
script
|
||||
else
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -12,6 +12,9 @@
|
||||
# Caches
|
||||
- cache/
|
||||
|
||||
# Dependencies
|
||||
- ^[Dd]ependencies/
|
||||
|
||||
# C deps
|
||||
# https://github.com/joyent/node
|
||||
- ^deps/
|
||||
@@ -24,11 +27,18 @@
|
||||
# Node dependencies
|
||||
- node_modules/
|
||||
|
||||
# Bower Components
|
||||
- bower_components/
|
||||
|
||||
# Erlang bundles
|
||||
- ^rebar$
|
||||
|
||||
# Bootstrap minified css and js
|
||||
- (^|/)bootstrap([^.]*)(\.min)?\.(js|css)$
|
||||
|
||||
# Vendored dependencies
|
||||
- vendor/
|
||||
- thirdparty/
|
||||
- vendors?/
|
||||
|
||||
# Debian packaging
|
||||
- ^debian/
|
||||
@@ -75,6 +85,9 @@
|
||||
- (^|/)shCore\.js$
|
||||
- (^|/)shLegacy\.js$
|
||||
|
||||
# AngularJS
|
||||
- (^|/)angular([^.]*)(\.min)?\.js$
|
||||
|
||||
## Python ##
|
||||
|
||||
# django
|
||||
@@ -86,6 +99,8 @@
|
||||
# WAF
|
||||
- ^waf$
|
||||
|
||||
# .osx
|
||||
- ^.osx$
|
||||
|
||||
## Obj-C ##
|
||||
|
||||
@@ -108,14 +123,30 @@
|
||||
- ^[Pp]ackages/
|
||||
|
||||
# ExtJS
|
||||
- (^|/)extjs/
|
||||
- (^|/)extjs/.*?\.js$
|
||||
- (^|/)extjs/.*?\.xml$
|
||||
- (^|/)extjs/.*?\.txt$
|
||||
- (^|/)extjs/.*?\.html$
|
||||
- (^|/)extjs/.*?\.properties$
|
||||
- (^|/)extjs/.sencha/
|
||||
- (^|/)extjs/docs/
|
||||
- (^|/)extjs/builds/
|
||||
- (^|/)extjs/cmd/
|
||||
- (^|/)extjs/examples/
|
||||
- (^|/)extjs/locale/
|
||||
- (^|/)extjs/packages/
|
||||
- (^|/)extjs/plugins/
|
||||
- (^|/)extjs/resources/
|
||||
- (^|/)extjs/src/
|
||||
- (^|/)extjs/welcome/
|
||||
|
||||
# Samples folders
|
||||
- ^[Ss]amples/
|
||||
|
||||
# LICENSE, README, git config files
|
||||
- ^COPYING$
|
||||
- ^LICENSE$
|
||||
- LICENSE$
|
||||
- License$
|
||||
- gitattributes$
|
||||
- gitignore$
|
||||
- gitmodules$
|
||||
@@ -125,5 +156,12 @@
|
||||
# Test fixtures
|
||||
- ^[Tt]est/fixtures/
|
||||
|
||||
# PhoneGap/Cordova
|
||||
- (^|/)cordova([^.]*)(\.min)?\.js$
|
||||
- (^|/)cordova\-\d\.\d(\.\d)?(\.min)?\.js$
|
||||
|
||||
# Vagrant
|
||||
- ^Vagrantfile$
|
||||
|
||||
# .DS_Store's
|
||||
- .[Dd][Ss]_[Ss]tore$
|
||||
|
||||
39
samples/Agda/NatCat.agda
Normal file
39
samples/Agda/NatCat.agda
Normal file
@@ -0,0 +1,39 @@
|
||||
module NatCat where
|
||||
|
||||
open import Relation.Binary.PropositionalEquality
|
||||
|
||||
-- If you can show that a relation only ever has one inhabitant
|
||||
-- you get the category laws for free
|
||||
module
|
||||
EasyCategory
|
||||
(obj : Set)
|
||||
(_⟶_ : obj → obj → Set)
|
||||
(_∘_ : ∀ {x y z} → x ⟶ y → y ⟶ z → x ⟶ z)
|
||||
(id : ∀ x → x ⟶ x)
|
||||
(single-inhabitant : (x y : obj) (r s : x ⟶ y) → r ≡ s)
|
||||
where
|
||||
|
||||
idʳ : ∀ x y (r : x ⟶ y) → r ∘ id y ≡ r
|
||||
idʳ x y r = single-inhabitant x y (r ∘ id y) r
|
||||
|
||||
idˡ : ∀ x y (r : x ⟶ y) → id x ∘ r ≡ r
|
||||
idˡ x y r = single-inhabitant x y (id x ∘ r) r
|
||||
|
||||
∘-assoc : ∀ w x y z (r : w ⟶ x) (s : x ⟶ y) (t : y ⟶ z) → (r ∘ s) ∘ t ≡ r ∘ (s ∘ t)
|
||||
∘-assoc w x y z r s t = single-inhabitant w z ((r ∘ s) ∘ t) (r ∘ (s ∘ t))
|
||||
|
||||
open import Data.Nat
|
||||
|
||||
same : (x y : ℕ) (r s : x ≤ y) → r ≡ s
|
||||
same .0 y z≤n z≤n = refl
|
||||
same .(suc m) .(suc n) (s≤s {m} {n} r) (s≤s s) = cong s≤s (same m n r s)
|
||||
|
||||
≤-trans : ∀ x y z → x ≤ y → y ≤ z → x ≤ z
|
||||
≤-trans .0 y z z≤n s = z≤n
|
||||
≤-trans .(suc m) .(suc n) .(suc n₁) (s≤s {m} {n} r) (s≤s {.n} {n₁} s) = s≤s (≤-trans m n n₁ r s)
|
||||
|
||||
≤-refl : ∀ x → x ≤ x
|
||||
≤-refl zero = z≤n
|
||||
≤-refl (suc x) = s≤s (≤-refl x)
|
||||
|
||||
module Nat-EasyCategory = EasyCategory ℕ _≤_ (λ {x}{y}{z} → ≤-trans x y z) ≤-refl same
|
||||
147
samples/BlitzBasic/HalfAndDouble.bb
Normal file
147
samples/BlitzBasic/HalfAndDouble.bb
Normal file
@@ -0,0 +1,147 @@
|
||||
|
||||
Local bk = CreateBank(8)
|
||||
PokeFloat bk, 0, -1
|
||||
Print Bin(PeekInt(bk, 0))
|
||||
Print %1000000000000000
|
||||
Print Bin(1 Shl 31)
|
||||
Print $1f
|
||||
Print $ff
|
||||
Print $1f + (127 - 15)
|
||||
Print Hex(%01111111100000000000000000000000)
|
||||
Print Hex(~%11111111100000000000000000000000)
|
||||
|
||||
Print Bin(FloatToHalf(-2.5))
|
||||
Print HalfToFloat(FloatToHalf(-200000000000.0))
|
||||
|
||||
Print Bin(FToI(-2.5))
|
||||
|
||||
WaitKey
|
||||
End
|
||||
|
||||
|
||||
; Half-precision (16-bit) arithmetic library
|
||||
;============================================
|
||||
|
||||
Global Half_CBank_
|
||||
|
||||
Function FToI(f#)
|
||||
If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
|
||||
PokeFloat Half_CBank_, 0, f
|
||||
Return PeekInt(Half_CBank_, 0)
|
||||
End Function
|
||||
|
||||
Function HalfToFloat#(h)
|
||||
Local signBit, exponent, fraction, fBits
|
||||
|
||||
signBit = (h And 32768) <> 0
|
||||
exponent = (h And %0111110000000000) Shr 10
|
||||
fraction = (h And %0000001111111111)
|
||||
|
||||
If exponent = $1F Then exponent = $FF : ElseIf exponent Then exponent = (exponent - 15) + 127
|
||||
fBits = (signBit Shl 31) Or (exponent Shl 23) Or (fraction Shl 13)
|
||||
|
||||
If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
|
||||
PokeInt Half_CBank_, 0, fBits
|
||||
Return PeekFloat(Half_CBank_, 0)
|
||||
End Function
|
||||
|
||||
Function FloatToHalf(f#)
|
||||
Local signBit, exponent, fraction, fBits
|
||||
|
||||
If Half_CBank_ = 0 Then Half_CBank_ = CreateBank(4)
|
||||
PokeFloat Half_CBank_, 0, f
|
||||
fBits = PeekInt(Half_CBank_, 0)
|
||||
|
||||
signBit = (fBits And (1 Shl 31)) <> 0
|
||||
exponent = (fBits And $7F800000) Shr 23
|
||||
fraction = fBits And $007FFFFF
|
||||
|
||||
If exponent
|
||||
exponent = exponent - 127
|
||||
If Abs(exponent) > $1F
|
||||
If exponent <> ($FF - 127) Then fraction = 0
|
||||
exponent = $1F * Sgn(exponent)
|
||||
Else
|
||||
exponent = exponent + 15
|
||||
EndIf
|
||||
exponent = exponent And %11111
|
||||
EndIf
|
||||
fraction = fraction Shr 13
|
||||
|
||||
Return (signBit Shl 15) Or (exponent Shl 10) Or fraction
|
||||
End Function
|
||||
|
||||
Function HalfAdd(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function HalfSub(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function HalfMul(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function HalfDiv(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function HalfLT(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function HalfGT(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
; Double-precision (64-bit) arithmetic library)
|
||||
;===============================================
|
||||
|
||||
Global DoubleOut[1], Double_CBank_
|
||||
|
||||
Function DoubleToFloat#(d[1])
|
||||
|
||||
End Function
|
||||
|
||||
Function FloatToDouble(f#)
|
||||
|
||||
End Function
|
||||
|
||||
Function IntToDouble(i)
|
||||
|
||||
End Function
|
||||
|
||||
Function SefToDouble(s, e, f)
|
||||
|
||||
End Function
|
||||
|
||||
Function DoubleAdd(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function DoubleSub(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function DoubleMul(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function DoubleDiv(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function DoubleLT(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
Function DoubleGT(l, r)
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
;~IDEal Editor Parameters:
|
||||
;~F#1A#20#2F
|
||||
;~C#Blitz3D
|
||||
369
samples/BlitzBasic/LList.bb
Normal file
369
samples/BlitzBasic/LList.bb
Normal file
@@ -0,0 +1,369 @@
|
||||
|
||||
; Double-linked list container class
|
||||
;====================================
|
||||
|
||||
; with thanks to MusicianKool, for concept and issue fixes
|
||||
|
||||
|
||||
Type LList
|
||||
Field head_.ListNode
|
||||
Field tail_.ListNode
|
||||
End Type
|
||||
|
||||
Type ListNode
|
||||
Field pv_.ListNode
|
||||
Field nx_.ListNode
|
||||
Field Value
|
||||
End Type
|
||||
|
||||
Type Iterator
|
||||
Field Value
|
||||
Field l_.LList
|
||||
Field cn_.ListNode, cni_
|
||||
End Type
|
||||
|
||||
|
||||
;Create a new LList object
|
||||
Function CreateList.LList()
|
||||
Local l.LList = New LList
|
||||
|
||||
l\head_ = New ListNode
|
||||
l\tail_ = New ListNode
|
||||
|
||||
l\head_\nx_ = l\tail_ ;End caps
|
||||
l\head_\pv_ = l\head_ ;These make it more or less safe to iterate freely
|
||||
l\head_\Value = 0
|
||||
|
||||
l\tail_\nx_ = l\tail_
|
||||
l\tail_\pv_ = l\head_
|
||||
l\tail_\Value = 0
|
||||
|
||||
Return l
|
||||
End Function
|
||||
|
||||
;Free a list and all elements (not any values)
|
||||
Function FreeList(l.LList)
|
||||
ClearList l
|
||||
Delete l\head_
|
||||
Delete l\tail_
|
||||
Delete l
|
||||
End Function
|
||||
|
||||
;Remove all the elements from a list (does not free values)
|
||||
Function ClearList(l.LList)
|
||||
Local n.ListNode = l\head_\nx_
|
||||
While n <> l\tail_
|
||||
Local nx.ListNode = n\nx_
|
||||
Delete n
|
||||
n = nx
|
||||
Wend
|
||||
l\head_\nx_ = l\tail_
|
||||
l\tail_\pv_ = l\head_
|
||||
End Function
|
||||
|
||||
;Count the number of elements in a list (slow)
|
||||
Function ListLength(l.LList)
|
||||
Local i.Iterator = GetIterator(l), elems
|
||||
While EachIn(i)
|
||||
elems = elems + 1
|
||||
Wend
|
||||
Return elems
|
||||
End Function
|
||||
|
||||
;Return True if a list contains a given value
|
||||
Function ListContains(l.LList, Value)
|
||||
Return (ListFindNode(l, Value) <> Null)
|
||||
End Function
|
||||
|
||||
;Create a linked list from the intvalues in a bank (slow)
|
||||
Function ListFromBank.LList(bank)
|
||||
Local l.LList = CreateList()
|
||||
Local size = BankSize(bank), p
|
||||
|
||||
For p = 0 To size - 4 Step 4
|
||||
ListAddLast l, PeekInt(bank, p)
|
||||
Next
|
||||
|
||||
Return l
|
||||
End Function
|
||||
|
||||
;Create a bank containing all the values in a list (slow)
|
||||
Function ListToBank(l.LList)
|
||||
Local size = ListLength(l) * 4
|
||||
Local bank = CreateBank(size)
|
||||
|
||||
Local i.Iterator = GetIterator(l), p = 0
|
||||
While EachIn(i)
|
||||
PokeInt bank, p, i\Value
|
||||
p = p + 4
|
||||
Wend
|
||||
|
||||
Return bank
|
||||
End Function
|
||||
|
||||
;Swap the contents of two list objects
|
||||
Function SwapLists(l1.LList, l2.LList)
|
||||
Local tempH.ListNode = l1\head_, tempT.ListNode = l1\tail_
|
||||
l1\head_ = l2\head_
|
||||
l1\tail_ = l2\tail_
|
||||
l2\head_ = tempH
|
||||
l2\tail_ = tempT
|
||||
End Function
|
||||
|
||||
;Create a new list containing the same values as the first
|
||||
Function CopyList.LList(lo.LList)
|
||||
Local ln.LList = CreateList()
|
||||
Local i.Iterator = GetIterator(lo) : While EachIn(i)
|
||||
ListAddLast ln, i\Value
|
||||
Wend
|
||||
Return ln
|
||||
End Function
|
||||
|
||||
;Reverse the order of elements of a list
|
||||
Function ReverseList(l.LList)
|
||||
Local n1.ListNode, n2.ListNode, tmp.ListNode
|
||||
|
||||
n1 = l\head_
|
||||
n2 = l\head_\nx_
|
||||
|
||||
While n1 <> l\tail_
|
||||
n1\pv_ = n2
|
||||
tmp = n2\nx_
|
||||
n2\nx_ = n1
|
||||
n1 = n2
|
||||
n2 = tmp
|
||||
Wend
|
||||
|
||||
tmp = l\head_
|
||||
l\head_ = l\tail_
|
||||
l\tail_ = tmp
|
||||
|
||||
l\head_\pv_ = l\head_
|
||||
l\tail_\nx_ = l\tail_
|
||||
End Function
|
||||
|
||||
;Search a list to retrieve the first node with the given value
|
||||
Function ListFindNode.ListNode(l.LList, Value)
|
||||
Local n.ListNode = l\head_\nx_
|
||||
|
||||
While n <> l\tail_
|
||||
If n\Value = Value Then Return n
|
||||
n = n\nx_
|
||||
Wend
|
||||
|
||||
Return Null
|
||||
End Function
|
||||
|
||||
;Append a value to the end of a list (fast) and return the node
|
||||
Function ListAddLast.ListNode(l.LList, Value)
|
||||
Local n.ListNode = New ListNode
|
||||
|
||||
n\pv_ = l\tail_\pv_
|
||||
n\nx_ = l\tail_
|
||||
n\Value = Value
|
||||
|
||||
l\tail_\pv_ = n
|
||||
n\pv_\nx_ = n
|
||||
|
||||
Return n
|
||||
End Function
|
||||
|
||||
;Attach a value to the start of a list (fast) and return the node
|
||||
Function ListAddFirst.ListNode(l.LList, Value)
|
||||
Local n.ListNode = New ListNode
|
||||
|
||||
n\pv_ = l\head_
|
||||
n\nx_ = l\head_\nx_
|
||||
n\Value = Value
|
||||
|
||||
l\head_\nx_ = n
|
||||
n\nx_\pv_ = n
|
||||
|
||||
Return n
|
||||
End Function
|
||||
|
||||
;Remove the first occurence of the given value from a list
|
||||
Function ListRemove(l.LList, Value)
|
||||
Local n.ListNode = ListFindNode(l, Value)
|
||||
If n <> Null Then RemoveListNode n
|
||||
End Function
|
||||
|
||||
;Remove a node from a list
|
||||
Function RemoveListNode(n.ListNode)
|
||||
n\pv_\nx_ = n\nx_
|
||||
n\nx_\pv_ = n\pv_
|
||||
Delete n
|
||||
End Function
|
||||
|
||||
;Return the value of the element at the given position from the start of the list,
|
||||
;or backwards from the end of the list for a negative index
|
||||
Function ValueAtIndex(l.LList, index)
|
||||
Local n.ListNode = ListNodeAtIndex(l, index)
|
||||
If n <> Null Then Return n\Value : Else Return 0
|
||||
End Function
|
||||
|
||||
;Return the ListNode at the given position from the start of the list, or backwards
|
||||
;from the end of the list for a negative index, or Null if invalid
|
||||
Function ListNodeAtIndex.ListNode(l.LList, index)
|
||||
Local e, n.ListNode
|
||||
|
||||
If index >= 0
|
||||
n = l\head_
|
||||
For e = 0 To index
|
||||
n = n\nx_
|
||||
Next
|
||||
If n = l\tail_ Then n = Null ;Beyond the end of the list - not valid
|
||||
|
||||
Else ;Negative index - count backward
|
||||
n = l\tail_
|
||||
For e = 0 To index Step -1
|
||||
n = n\pv_
|
||||
Next
|
||||
If n = l\head_ Then n = Null ;Before the start of the list - not valid
|
||||
|
||||
EndIf
|
||||
|
||||
Return n
|
||||
End Function
|
||||
|
||||
;Replace a value at the given position (added by MusicianKool)
|
||||
Function ReplaceValueAtIndex(l.LList,index,value)
|
||||
Local n.ListNode = ListNodeAtIndex(l,index)
|
||||
If n <> Null Then n\Value = value:Else Return 0
|
||||
End Function
|
||||
|
||||
;Remove and return a value at the given position (added by MusicianKool)
|
||||
Function RemoveNodeAtIndex(l.LList,index)
|
||||
Local n.ListNode = ListNodeAtIndex(l,index),tval
|
||||
If n <> Null Then tval = n\Value:RemoveListNode(n):Return tval:Else Return 0
|
||||
End Function
|
||||
|
||||
;Retrieve the first value from a list
|
||||
Function ListFirst(l.LList)
|
||||
If l\head_\nx_ <> l\tail_ Then Return l\head_\nx_\Value
|
||||
End Function
|
||||
|
||||
;Retrieve the last value from a list
|
||||
Function ListLast(l.LList)
|
||||
If l\tail_\pv_ <> l\head_ Then Return l\tail_\pv_\Value
|
||||
End Function
|
||||
|
||||
;Remove the first element from a list, and return its value
|
||||
Function ListRemoveFirst(l.LList)
|
||||
Local val
|
||||
If l\head_\nx_ <> l\tail_
|
||||
val = l\head_\nx_\Value
|
||||
RemoveListNode l\head_\nx_
|
||||
EndIf
|
||||
Return val
|
||||
End Function
|
||||
|
||||
;Remove the last element from a list, and return its value
|
||||
Function ListRemoveLast(l.LList)
|
||||
Local val
|
||||
If l\tail_\pv_ <> l\head_
|
||||
val = l\tail_\pv_\Value
|
||||
RemoveListNode l\tail_\pv_
|
||||
EndIf
|
||||
Return val
|
||||
End Function
|
||||
|
||||
;Insert a value into a list before the specified node, and return the new node
|
||||
Function InsertBeforeNode.ListNode(Value, n.ListNode)
|
||||
Local bef.ListNode = New ListNode
|
||||
|
||||
bef\pv_ = n\pv_
|
||||
bef\nx_ = n
|
||||
bef\Value = Value
|
||||
|
||||
n\pv_ = bef
|
||||
bef\pv_\nx_ = bef
|
||||
|
||||
Return bef
|
||||
End Function
|
||||
|
||||
;Insert a value into a list after the specified node, and return then new node
|
||||
Function InsertAfterNode.ListNode(Value, n.ListNode)
|
||||
Local aft.ListNode = New ListNode
|
||||
|
||||
aft\nx_ = n\nx_
|
||||
aft\pv_ = n
|
||||
aft\Value = Value
|
||||
|
||||
n\nx_ = aft
|
||||
aft\nx_\pv_ = aft
|
||||
|
||||
Return aft
|
||||
End Function
|
||||
|
||||
;Get an iterator object to use with a loop
|
||||
;This function means that most programs won't have to think about deleting iterators manually
|
||||
;(in general only a small, constant number will be created)
|
||||
Function GetIterator.Iterator(l.LList)
|
||||
Local i.Iterator
|
||||
|
||||
If l = Null Then RuntimeError "Cannot create Iterator for Null"
|
||||
|
||||
For i = Each Iterator ;See if there's an available iterator at the moment
|
||||
If i\l_ = Null Then Exit
|
||||
Next
|
||||
|
||||
If i = Null Then i = New Iterator ;If there wasn't, create one
|
||||
|
||||
i\l_ = l
|
||||
i\cn_ = l\head_
|
||||
i\cni_ = -1
|
||||
i\Value = 0 ;No especial reason why this has to be anything, but meh
|
||||
|
||||
Return i
|
||||
End Function
|
||||
|
||||
;Use as the argument to While to iterate over the members of a list
|
||||
Function EachIn(i.Iterator)
|
||||
|
||||
i\cn_ = i\cn_\nx_
|
||||
|
||||
If i\cn_ <> i\l_\tail_ ;Still items in the list
|
||||
i\Value = i\cn_\Value
|
||||
i\cni_ = i\cni_ + 1
|
||||
Return True
|
||||
|
||||
Else
|
||||
i\l_ = Null ;Disconnect from the list, having reached the end
|
||||
i\cn_ = Null
|
||||
i\cni_ = -1
|
||||
Return False
|
||||
|
||||
EndIf
|
||||
End Function
|
||||
|
||||
;Remove from the containing list the element currently pointed to by an iterator
|
||||
Function IteratorRemove(i.Iterator)
|
||||
If (i\cn_ <> i\l_\head_) And (i\cn_ <> i\l_\tail_)
|
||||
Local temp.ListNode = i\cn_
|
||||
|
||||
i\cn_ = i\cn_\pv_
|
||||
i\cni_ = i\cni_ - 1
|
||||
i\Value = 0
|
||||
|
||||
RemoveListNode temp
|
||||
|
||||
Return True
|
||||
Else
|
||||
Return False
|
||||
EndIf
|
||||
End Function
|
||||
|
||||
;Call this before breaking out of an EachIn loop, to disconnect the iterator from the list
|
||||
Function IteratorBreak(i.Iterator)
|
||||
i\l_ = Null
|
||||
i\cn_ = Null
|
||||
i\cni_ = -1
|
||||
i\Value = 0
|
||||
End Function
|
||||
|
||||
|
||||
;~IDEal Editor Parameters:
|
||||
;~F#5#A#10#18#2A#32#3E#47#4C#58#66#6F#78#8F#9B#A9#B7#BD#C5#CC
|
||||
;~F#E3#E9#EF#F4#F9#103#10D#11B#12B#13F#152#163
|
||||
;~C#Blitz3D
|
||||
66
samples/BlitzBasic/PObj.bb
Normal file
66
samples/BlitzBasic/PObj.bb
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
Local i, start, result
|
||||
|
||||
Local s.Sum3Obj = New Sum3Obj
|
||||
|
||||
For i = 1 To 100000
|
||||
s = New Sum3Obj
|
||||
result = Handle Before s
|
||||
Delete s
|
||||
Next
|
||||
|
||||
start = MilliSecs()
|
||||
For i = 1 To 1000000
|
||||
result = Sum3_(MakeSum3Obj(i, i, i))
|
||||
Next
|
||||
start = MilliSecs() - start
|
||||
Print start
|
||||
|
||||
start = MilliSecs()
|
||||
For i = 1 To 1000000
|
||||
result = Sum3(i, i, i)
|
||||
Next
|
||||
start = MilliSecs() - start
|
||||
Print start
|
||||
|
||||
WaitKey
|
||||
End
|
||||
|
||||
|
||||
Function Sum3(a, b, c)
|
||||
Return a + b + c
|
||||
End Function
|
||||
|
||||
|
||||
Type Sum3Obj
|
||||
Field isActive
|
||||
Field a, b, c
|
||||
End Type
|
||||
|
||||
Function MakeSum3Obj(a, b, c)
|
||||
Local s.Sum3Obj = Last Sum3Obj
|
||||
If s\isActive Then s = New Sum3Obj
|
||||
s\isActive = True
|
||||
s\a = a
|
||||
s\b = b
|
||||
s\c = c
|
||||
|
||||
Restore label
|
||||
Read foo
|
||||
|
||||
Return Handle(s)
|
||||
End Function
|
||||
|
||||
.label
|
||||
Data (10 + 2), 12, 14
|
||||
:
|
||||
Function Sum3_(a_)
|
||||
Local a.Sum3Obj = Object.Sum3Obj a_
|
||||
Local return_ = a\a + a\b + a\c
|
||||
Insert a Before First Sum3Obj :: a\isActive = False
|
||||
Return return_
|
||||
End Function
|
||||
|
||||
|
||||
;~IDEal Editor Parameters:
|
||||
;~C#Blitz3D
|
||||
167
samples/Bluespec/TL.bsv
Normal file
167
samples/Bluespec/TL.bsv
Normal file
@@ -0,0 +1,167 @@
|
||||
package TL;
|
||||
|
||||
interface TL;
|
||||
method Action ped_button_push();
|
||||
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_N(Bool x);
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_S(Bool x);
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_E(Bool x);
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_W(Bool x);
|
||||
|
||||
method Bool lampRedNS();
|
||||
method Bool lampAmberNS();
|
||||
method Bool lampGreenNS();
|
||||
|
||||
method Bool lampRedE();
|
||||
method Bool lampAmberE();
|
||||
method Bool lampGreenE();
|
||||
|
||||
method Bool lampRedW();
|
||||
method Bool lampAmberW();
|
||||
method Bool lampGreenW();
|
||||
|
||||
method Bool lampRedPed();
|
||||
method Bool lampAmberPed();
|
||||
method Bool lampGreenPed();
|
||||
endinterface: TL
|
||||
|
||||
typedef enum {
|
||||
AllRed,
|
||||
GreenNS, AmberNS,
|
||||
GreenE, AmberE,
|
||||
GreenW, AmberW,
|
||||
GreenPed, AmberPed} TLstates deriving (Eq, Bits);
|
||||
|
||||
typedef UInt#(5) Time32;
|
||||
typedef UInt#(20) CtrSize;
|
||||
|
||||
(* synthesize *)
|
||||
module sysTL(TL);
|
||||
Time32 allRedDelay = 2;
|
||||
Time32 amberDelay = 4;
|
||||
Time32 nsGreenDelay = 20;
|
||||
Time32 ewGreenDelay = 10;
|
||||
Time32 pedGreenDelay = 10;
|
||||
Time32 pedAmberDelay = 6;
|
||||
|
||||
CtrSize clocks_per_sec = 100;
|
||||
|
||||
Reg#(TLstates) state <- mkReg(AllRed);
|
||||
Reg#(TLstates) next_green <- mkReg(GreenNS);
|
||||
Reg#(Time32) secs <- mkReg(0);
|
||||
Reg#(Bool) ped_button_pushed <- mkReg(False);
|
||||
Reg#(Bool) car_present_N <- mkReg(True);
|
||||
Reg#(Bool) car_present_S <- mkReg(True);
|
||||
Reg#(Bool) car_present_E <- mkReg(True);
|
||||
Reg#(Bool) car_present_W <- mkReg(True);
|
||||
Bool car_present_NS = car_present_N || car_present_S;
|
||||
Reg#(CtrSize) cycle_ctr <- mkReg(0);
|
||||
|
||||
rule dec_cycle_ctr (cycle_ctr != 0);
|
||||
cycle_ctr <= cycle_ctr - 1;
|
||||
endrule
|
||||
|
||||
Rules low_priority_rule = (rules
|
||||
rule inc_sec (cycle_ctr == 0);
|
||||
secs <= secs + 1;
|
||||
cycle_ctr <= clocks_per_sec;
|
||||
endrule endrules);
|
||||
|
||||
function Action next_state(TLstates ns);
|
||||
action
|
||||
state <= ns;
|
||||
secs <= 0;
|
||||
endaction
|
||||
endfunction: next_state
|
||||
|
||||
function TLstates green_seq(TLstates x);
|
||||
case (x)
|
||||
GreenNS: return (GreenE);
|
||||
GreenE: return (GreenW);
|
||||
GreenW: return (GreenNS);
|
||||
endcase
|
||||
endfunction
|
||||
|
||||
function Bool car_present(TLstates x);
|
||||
case (x)
|
||||
GreenNS: return (car_present_NS);
|
||||
GreenE: return (car_present_E);
|
||||
GreenW: return (car_present_W);
|
||||
endcase
|
||||
endfunction
|
||||
|
||||
function Rules make_from_green_rule(TLstates green_state, Time32 delay, Bool car_is_present, TLstates ns);
|
||||
return (rules
|
||||
rule from_green (state == green_state && (secs >= delay || !car_is_present));
|
||||
next_state(ns);
|
||||
endrule endrules);
|
||||
endfunction: make_from_green_rule
|
||||
|
||||
function Rules make_from_amber_rule(TLstates amber_state, TLstates ng);
|
||||
return (rules
|
||||
rule from_amber (state == amber_state && secs >= amberDelay);
|
||||
next_state(AllRed);
|
||||
next_green <= ng;
|
||||
endrule endrules);
|
||||
endfunction: make_from_amber_rule
|
||||
|
||||
Rules hprs[7];
|
||||
|
||||
hprs[1] = make_from_green_rule(GreenNS, nsGreenDelay, car_present_NS, AmberNS);
|
||||
hprs[2] = make_from_amber_rule(AmberNS, GreenE);
|
||||
hprs[3] = make_from_green_rule(GreenE, ewGreenDelay, car_present_E, AmberE);
|
||||
hprs[4] = make_from_amber_rule(AmberE, GreenW);
|
||||
hprs[5] = make_from_green_rule(GreenW, ewGreenDelay, car_present_W, AmberW);
|
||||
hprs[6] = make_from_amber_rule(AmberW, GreenNS);
|
||||
|
||||
hprs[0] = (rules
|
||||
rule fromAllRed (state == AllRed && secs >= allRedDelay);
|
||||
if (ped_button_pushed) action
|
||||
ped_button_pushed <= False;
|
||||
next_state(GreenPed);
|
||||
endaction else if (car_present(next_green))
|
||||
next_state(next_green);
|
||||
else if (car_present(green_seq(next_green)))
|
||||
next_state(green_seq(next_green));
|
||||
else if (car_present(green_seq(green_seq(next_green))))
|
||||
next_state(green_seq(green_seq(next_green)));
|
||||
else
|
||||
noAction;
|
||||
endrule: fromAllRed endrules);
|
||||
|
||||
Rules high_priority_rules = hprs[0];
|
||||
for (Integer i = 1; i<7; i=i+1)
|
||||
high_priority_rules = rJoin(hprs[i], high_priority_rules);
|
||||
|
||||
addRules(preempts(high_priority_rules, low_priority_rule));
|
||||
|
||||
method Action ped_button_push();
|
||||
ped_button_pushed <= True;
|
||||
endmethod: ped_button_push
|
||||
|
||||
method Action set_car_state_N(b) ; car_present_N <= b; endmethod
|
||||
method Action set_car_state_S(b) ; car_present_S <= b; endmethod
|
||||
method Action set_car_state_E(b) ; car_present_E <= b; endmethod
|
||||
method Action set_car_state_W(b) ; car_present_W <= b; endmethod
|
||||
|
||||
method lampRedNS() = (!(state == GreenNS || state == AmberNS));
|
||||
method lampAmberNS() = (state == AmberNS);
|
||||
method lampGreenNS() = (state == GreenNS);
|
||||
method lampRedE() = (!(state == GreenE || state == AmberE));
|
||||
method lampAmberE() = (state == AmberE);
|
||||
method lampGreenE() = (state == GreenE);
|
||||
method lampRedW() = (!(state == GreenW || state == AmberW));
|
||||
method lampAmberW() = (state == AmberW);
|
||||
method lampGreenW() = (state == GreenW);
|
||||
|
||||
method lampRedPed() = (!(state == GreenPed || state == AmberPed));
|
||||
method lampAmberPed() = (state == AmberPed);
|
||||
method lampGreenPed() = (state == GreenPed);
|
||||
|
||||
endmodule: sysTL
|
||||
|
||||
endpackage: TL
|
||||
109
samples/Bluespec/TbTL.bsv
Normal file
109
samples/Bluespec/TbTL.bsv
Normal file
@@ -0,0 +1,109 @@
|
||||
package TbTL;
|
||||
|
||||
import TL::*;
|
||||
|
||||
interface Lamp;
|
||||
method Bool changed;
|
||||
method Action show_offs;
|
||||
method Action show_ons;
|
||||
method Action reset;
|
||||
endinterface
|
||||
|
||||
module mkLamp#(String name, Bool lamp)(Lamp);
|
||||
Reg#(Bool) prev <- mkReg(False);
|
||||
|
||||
method changed = (prev != lamp);
|
||||
|
||||
method Action show_offs;
|
||||
if (prev && !lamp)
|
||||
$write (name + " off, ");
|
||||
endmethod
|
||||
|
||||
method Action show_ons;
|
||||
if (!prev && lamp)
|
||||
$write (name + " on, ");
|
||||
endmethod
|
||||
|
||||
method Action reset;
|
||||
prev <= lamp;
|
||||
endmethod
|
||||
endmodule
|
||||
|
||||
|
||||
(* synthesize *)
|
||||
module mkTest();
|
||||
let dut <- sysTL;
|
||||
|
||||
Reg#(Bit#(16)) ctr <- mkReg(0);
|
||||
|
||||
Reg#(Bool) carN <- mkReg(False);
|
||||
Reg#(Bool) carS <- mkReg(False);
|
||||
Reg#(Bool) carE <- mkReg(False);
|
||||
Reg#(Bool) carW <- mkReg(False);
|
||||
|
||||
Lamp lamps[12];
|
||||
|
||||
lamps[0] <- mkLamp("0: NS red ", dut.lampRedNS);
|
||||
lamps[1] <- mkLamp("1: NS amber", dut.lampAmberNS);
|
||||
lamps[2] <- mkLamp("2: NS green", dut.lampGreenNS);
|
||||
lamps[3] <- mkLamp("3: E red ", dut.lampRedE);
|
||||
lamps[4] <- mkLamp("4: E amber", dut.lampAmberE);
|
||||
lamps[5] <- mkLamp("5: E green", dut.lampGreenE);
|
||||
lamps[6] <- mkLamp("6: W red ", dut.lampRedW);
|
||||
lamps[7] <- mkLamp("7: W amber", dut.lampAmberW);
|
||||
lamps[8] <- mkLamp("8: W green", dut.lampGreenW);
|
||||
|
||||
lamps[9] <- mkLamp("9: Ped red ", dut.lampRedPed);
|
||||
lamps[10] <- mkLamp("10: Ped amber", dut.lampAmberPed);
|
||||
lamps[11] <- mkLamp("11: Ped green", dut.lampGreenPed);
|
||||
|
||||
rule start (ctr == 0);
|
||||
$dumpvars;
|
||||
endrule
|
||||
|
||||
rule detect_cars;
|
||||
dut.set_car_state_N(carN);
|
||||
dut.set_car_state_S(carS);
|
||||
dut.set_car_state_E(carE);
|
||||
dut.set_car_state_W(carW);
|
||||
endrule
|
||||
|
||||
rule go;
|
||||
ctr <= ctr + 1;
|
||||
if (ctr == 5000) carN <= True;
|
||||
if (ctr == 6500) carN <= False;
|
||||
if (ctr == 12_000) dut.ped_button_push;
|
||||
endrule
|
||||
|
||||
rule stop (ctr > 32768);
|
||||
$display("TESTS FINISHED");
|
||||
$finish(0);
|
||||
endrule
|
||||
|
||||
function do_offs(l) = l.show_offs;
|
||||
function do_ons(l) = l.show_ons;
|
||||
function do_reset(l) = l.reset;
|
||||
|
||||
function do_it(f);
|
||||
action
|
||||
for (Integer i=0; i<12; i=i+1)
|
||||
f(lamps[i]);
|
||||
endaction
|
||||
endfunction
|
||||
|
||||
function any_changes();
|
||||
Bool b = False;
|
||||
for (Integer i=0; i<12; i=i+1)
|
||||
b = b || lamps[i].changed;
|
||||
return b;
|
||||
endfunction
|
||||
|
||||
rule show (any_changes());
|
||||
do_it(do_offs);
|
||||
do_it(do_ons);
|
||||
do_it(do_reset);
|
||||
$display("(at time %d)", $time);
|
||||
endrule
|
||||
endmodule
|
||||
|
||||
endpackage
|
||||
305
samples/Brightscript/SimpleGrid.brs
Normal file
305
samples/Brightscript/SimpleGrid.brs
Normal file
@@ -0,0 +1,305 @@
|
||||
' *********************************************************
|
||||
' ** Simple Grid Screen Demonstration App
|
||||
' ** Jun 2010
|
||||
' ** Copyright (c) 2010 Roku Inc. All Rights Reserved.
|
||||
' *********************************************************
|
||||
|
||||
'************************************************************
|
||||
'** Application startup
|
||||
'************************************************************
|
||||
Sub Main()
|
||||
|
||||
'initialize theme attributes like titles, logos and overhang color
|
||||
initTheme()
|
||||
|
||||
gridstyle = "Flat-Movie"
|
||||
|
||||
'set to go, time to get started
|
||||
while gridstyle <> ""
|
||||
print "starting grid style= ";gridstyle
|
||||
screen=preShowGridScreen(gridstyle)
|
||||
gridstyle = showGridScreen(screen, gridstyle)
|
||||
end while
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
'*************************************************************
|
||||
'** Set the configurable theme attributes for the application
|
||||
'**
|
||||
'** Configure the custom overhang and Logo attributes
|
||||
'** These attributes affect the branding of the application
|
||||
'** and are artwork, colors and offsets specific to the app
|
||||
'*************************************************************
|
||||
|
||||
Sub initTheme()
|
||||
app = CreateObject("roAppManager")
|
||||
app.SetTheme(CreateDefaultTheme())
|
||||
End Sub
|
||||
|
||||
'******************************************************
|
||||
'** @return The default application theme.
|
||||
'** Screens can make slight adjustments to the default
|
||||
'** theme by getting it from here and then overriding
|
||||
'** individual theme attributes.
|
||||
'******************************************************
|
||||
Function CreateDefaultTheme() as Object
|
||||
theme = CreateObject("roAssociativeArray")
|
||||
|
||||
theme.ThemeType = "generic-dark"
|
||||
|
||||
' All these are greyscales
|
||||
theme.GridScreenBackgroundColor = "#363636"
|
||||
theme.GridScreenMessageColor = "#808080"
|
||||
theme.GridScreenRetrievingColor = "#CCCCCC"
|
||||
theme.GridScreenListNameColor = "#FFFFFF"
|
||||
|
||||
' Color values work here
|
||||
theme.GridScreenDescriptionTitleColor = "#001090"
|
||||
theme.GridScreenDescriptionDateColor = "#FF005B"
|
||||
theme.GridScreenDescriptionRuntimeColor = "#5B005B"
|
||||
theme.GridScreenDescriptionSynopsisColor = "#606000"
|
||||
|
||||
'used in the Grid Screen
|
||||
theme.CounterTextLeft = "#FF0000"
|
||||
theme.CounterSeparator = "#00FF00"
|
||||
theme.CounterTextRight = "#0000FF"
|
||||
|
||||
theme.GridScreenLogoHD = "pkg:/images/Overhang_Test_HD.png"
|
||||
|
||||
theme.GridScreenLogoOffsetHD_X = "0"
|
||||
theme.GridScreenLogoOffsetHD_Y = "0"
|
||||
theme.GridScreenOverhangHeightHD = "99"
|
||||
|
||||
theme.GridScreenLogoSD = "pkg:/images/Overhang_Test_SD43.png"
|
||||
theme.GridScreenOverhangHeightSD = "66"
|
||||
theme.GridScreenLogoOffsetSD_X = "0"
|
||||
theme.GridScreenLogoOffsetSD_Y = "0"
|
||||
|
||||
' to use your own focus ring artwork
|
||||
'theme.GridScreenFocusBorderSD = "pkg:/images/GridCenter_Border_Movies_SD43.png"
|
||||
'theme.GridScreenBorderOffsetSD = "(-26,-25)"
|
||||
'theme.GridScreenFocusBorderHD = "pkg:/images/GridCenter_Border_Movies_HD.png"
|
||||
'theme.GridScreenBorderOffsetHD = "(-28,-20)"
|
||||
|
||||
' to use your own description background artwork
|
||||
'theme.GridScreenDescriptionImageSD = "pkg:/images/Grid_Description_Background_SD43.png"
|
||||
'theme.GridScreenDescriptionOffsetSD = "(125,170)"
|
||||
'theme.GridScreenDescriptionImageHD = "pkg:/images/Grid_Description_Background_HD.png"
|
||||
'theme.GridScreenDescriptionOffsetHD = "(190,255)"
|
||||
|
||||
|
||||
return theme
|
||||
End Function
|
||||
|
||||
'******************************************************
|
||||
'** Perform any startup/initialization stuff prior to
|
||||
'** initially showing the screen.
|
||||
'******************************************************
|
||||
Function preShowGridScreen(style as string) As Object
|
||||
|
||||
m.port=CreateObject("roMessagePort")
|
||||
screen = CreateObject("roGridScreen")
|
||||
screen.SetMessagePort(m.port)
|
||||
' screen.SetDisplayMode("best-fit")
|
||||
screen.SetDisplayMode("scale-to-fill")
|
||||
|
||||
screen.SetGridStyle(style)
|
||||
return screen
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
'******************************************************
|
||||
'** Display the gird screen and wait for events from
|
||||
'** the screen. The screen will show retreiving while
|
||||
'** we fetch and parse the feeds for the show posters
|
||||
'******************************************************
|
||||
Function showGridScreen(screen As Object, gridstyle as string) As string
|
||||
|
||||
print "enter showGridScreen"
|
||||
|
||||
categoryList = getCategoryList()
|
||||
categoryList[0] = "GridStyle: " + gridstyle
|
||||
screen.setupLists(categoryList.count())
|
||||
screen.SetListNames(categoryList)
|
||||
StyleButtons = getGridControlButtons()
|
||||
screen.SetContentList(0, StyleButtons)
|
||||
for i = 1 to categoryList.count()-1
|
||||
screen.SetContentList(i, getShowsForCategoryItem(categoryList[i]))
|
||||
end for
|
||||
screen.Show()
|
||||
|
||||
while true
|
||||
print "Waiting for message"
|
||||
msg = wait(0, m.port)
|
||||
'msg = wait(0, screen.GetMessagePort()) ' getmessageport does not work on gridscreen
|
||||
print "Got Message:";type(msg)
|
||||
if type(msg) = "roGridScreenEvent" then
|
||||
print "msg= "; msg.GetMessage() " , index= "; msg.GetIndex(); " data= "; msg.getData()
|
||||
if msg.isListItemFocused() then
|
||||
print"list item focused | current show = "; msg.GetIndex()
|
||||
else if msg.isListItemSelected() then
|
||||
row = msg.GetIndex()
|
||||
selection = msg.getData()
|
||||
print "list item selected row= "; row; " selection= "; selection
|
||||
|
||||
' Did we get a selection from the gridstyle selection row?
|
||||
if (row = 0)
|
||||
' yes, return so we can come back with new style
|
||||
return StyleButtons[selection].Title
|
||||
endif
|
||||
|
||||
'm.curShow = displayShowDetailScreen(showList[msg.GetIndex()])
|
||||
else if msg.isScreenClosed() then
|
||||
return ""
|
||||
end if
|
||||
end If
|
||||
end while
|
||||
|
||||
|
||||
End Function
|
||||
|
||||
'**********************************************************
|
||||
'** When a poster on the home screen is selected, we call
|
||||
'** this function passing an roAssociativeArray with the
|
||||
'** ContentMetaData for the selected show. This data should
|
||||
'** be sufficient for the springboard to display
|
||||
'**********************************************************
|
||||
Function displayShowDetailScreen(category as Object, showIndex as Integer) As Integer
|
||||
|
||||
'add code to create springboard, for now we do nothing
|
||||
return 1
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
'**************************************************************
|
||||
'** Return the list of categories to display in the filter
|
||||
'** banner. The result is an roArray containing the names of
|
||||
'** all of the categories. All just static data for the example.
|
||||
'***************************************************************
|
||||
Function getCategoryList() As Object
|
||||
|
||||
categoryList = [ "GridStyle", "Reality", "History", "News", "Comedy", "Drama"]
|
||||
return categoryList
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
'********************************************************************
|
||||
'** Given the category from the filter banner, return an array
|
||||
'** of ContentMetaData objects (roAssociativeArray's) representing
|
||||
'** the shows for the category. For this example, we just cheat and
|
||||
'** create and return a static array with just the minimal items
|
||||
'** set, but ideally, you'd go to a feed service, fetch and parse
|
||||
'** this data dynamically, so content for each category is dynamic
|
||||
'********************************************************************
|
||||
Function getShowsForCategoryItem(category As Object) As Object
|
||||
|
||||
print "getting shows for category "; category
|
||||
|
||||
showList = [
|
||||
{
|
||||
Title: category + ": Header",
|
||||
releaseDate: "1976",
|
||||
length: 3600-600,
|
||||
Description:"This row is category " + category,
|
||||
hdBranded: true,
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif",
|
||||
Description:"Short Synopsis #1",
|
||||
Synopsis:"Length",
|
||||
StarRating:10,
|
||||
}
|
||||
{
|
||||
Title: category + ": Beverly Hillbillies",
|
||||
releaseDate: "1969",
|
||||
rating: "PG",
|
||||
Description:"Come and listen to a story about a man named Jed: Poor mountaineer, barely kept his family fed. Then one day he was shootin at some food, and up through the ground came a bubblin crude. Oil that is, black gold, Texas tea.",
|
||||
numEpisodes:42,
|
||||
contentType:"season",
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/4/4e/The_Beverly_Hillbillies.jpg",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/4/4e/The_Beverly_Hillbillies.jpg",
|
||||
StarRating:80,
|
||||
UserStarRating:40
|
||||
}
|
||||
{
|
||||
Title: category + ": Babylon 5",
|
||||
releaseDate: "1996",
|
||||
rating: "PG",
|
||||
Description:"The show centers on the Babylon 5 space station: a focal point for politics, diplomacy, and conflict during the years 2257-2262.",
|
||||
numEpisodes:102,
|
||||
contentType:"season",
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/9/9d/Smb5-s4.jpg",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/9/9d/Smb5-s4.jpg",
|
||||
StarRating:80,
|
||||
UserStarRating:40
|
||||
}
|
||||
{
|
||||
Title: category + ": John F. Kennedy",
|
||||
releaseDate: "1961",
|
||||
rating: "PG",
|
||||
Description:"My fellow citizens of the world: ask not what America will do for you, but what together we can do for the freedom of man.",
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/5/52/Jfk_happy_birthday_1.jpg",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/en/5/52/Jfk_happy_birthday_1.jpg",
|
||||
StarRating:100
|
||||
}
|
||||
{
|
||||
Title: category + ": Man on the Moon",
|
||||
releaseDate: "1969",
|
||||
rating: "PG",
|
||||
Description:"That's one small step for a man, one giant leap for mankind.",
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_11_first_step.jpg",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/1/1e/Apollo_11_first_step.jpg",
|
||||
StarRating:100
|
||||
}
|
||||
{
|
||||
Title: category + ": I have a Dream",
|
||||
releaseDate: "1963",
|
||||
rating: "PG",
|
||||
Description:"I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin, but by the content of their character.",
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/8/81/Martin_Luther_King_-_March_on_Washington.jpg",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/8/81/Martin_Luther_King_-_March_on_Washington.jpg",
|
||||
StarRating:100
|
||||
}
|
||||
]
|
||||
|
||||
return showList
|
||||
End Function
|
||||
|
||||
function getGridControlButtons() as object
|
||||
buttons = [
|
||||
{ Title: "Flat-Movie"
|
||||
ReleaseDate: "HD:5x2 SD:5x2"
|
||||
Description: "Flat-Movie (Netflix) style"
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif"
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/4/43/Gold_star_on_blue.gif"
|
||||
}
|
||||
{ Title: "Flat-Landscape"
|
||||
ReleaseDate: "HD:5x3 SD:4x3"
|
||||
Description: "Channel Store"
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Dunkery_Hill.jpg/800px-Dunkery_Hill.jpg",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/9/96/Dunkery_Hill.jpg/800px-Dunkery_Hill.jpg",
|
||||
}
|
||||
{ Title: "Flat-Portrait"
|
||||
ReleaseDate: "HD:5x2 SD:5x2"
|
||||
Description: "3x4 style posters"
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/9/9f/Kane_George_Gurnett.jpg",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/9/9f/Kane_George_Gurnett.jpg",
|
||||
}
|
||||
{ Title: "Flat-Square"
|
||||
ReleaseDate: "HD:7x3 SD:6x3"
|
||||
Description: "1x1 style posters"
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/SQUARE_SHAPE.svg/536px-SQUARE_SHAPE.svg.png",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/d/de/SQUARE_SHAPE.svg/536px-SQUARE_SHAPE.svg.png",
|
||||
}
|
||||
{ Title: "Flat-16x9"
|
||||
ReleaseDate: "HD:5x3 SD:4x3"
|
||||
Description: "HD style posters"
|
||||
HDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/%C3%89cran_TV_plat.svg/200px-%C3%89cran_TV_plat.svg.png",
|
||||
SDPosterUrl:"http://upload.wikimedia.org/wikipedia/commons/thumb/2/22/%C3%89cran_TV_plat.svg/200px-%C3%89cran_TV_plat.svg.png",
|
||||
}
|
||||
]
|
||||
return buttons
|
||||
End Function
|
||||
45
samples/C#/Index.cshtml
Normal file
45
samples/C#/Index.cshtml
Normal file
@@ -0,0 +1,45 @@
|
||||
@{
|
||||
ViewBag.Title = "Home Page";
|
||||
}
|
||||
@section featured {
|
||||
<section class="featured">
|
||||
<div class="content-wrapper">
|
||||
<hgroup class="title">
|
||||
<h1>@ViewBag.Title.</h1>
|
||||
<h2>@ViewBag.Message</h2>
|
||||
</hgroup>
|
||||
<p>
|
||||
To learn more about ASP.NET MVC visit
|
||||
<a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
|
||||
The page features <mark>videos, tutorials, and samples</mark> to help you get the most from ASP.NET MVC.
|
||||
If you have any questions about ASP.NET MVC visit
|
||||
<a href="http://forums.asp.net/1146.aspx/1?MVC" title="ASP.NET MVC Forum">our forums</a>.
|
||||
</p>
|
||||
</div>
|
||||
</section>
|
||||
}
|
||||
<h3>We suggest the following:</h3>
|
||||
<ol class="round">
|
||||
<li class="one">
|
||||
<h5>Getting Started</h5>
|
||||
ASP.NET MVC gives you a powerful, patterns-based way to build dynamic websites that
|
||||
enables a clean separation of concerns and that gives you full control over markup
|
||||
for enjoyable, agile development. ASP.NET MVC includes many features that enable
|
||||
fast, TDD-friendly development for creating sophisticated applications that use
|
||||
the latest web standards.
|
||||
<a href="http://go.microsoft.com/fwlink/?LinkId=245151">Learn more…</a>
|
||||
</li>
|
||||
|
||||
<li class="two">
|
||||
<h5>Add NuGet packages and jump-start your coding</h5>
|
||||
NuGet makes it easy to install and update free libraries and tools.
|
||||
<a href="http://go.microsoft.com/fwlink/?LinkId=245153">Learn more…</a>
|
||||
</li>
|
||||
|
||||
<li class="three">
|
||||
<h5>Find Web Hosting</h5>
|
||||
You can easily find a web hosting company that offers the right mix of features
|
||||
and price for your applications.
|
||||
<a href="http://go.microsoft.com/fwlink/?LinkId=245157">Learn more…</a>
|
||||
</li>
|
||||
</ol>
|
||||
21
samples/C#/Program.cs
Normal file
21
samples/C#/Program.cs
Normal file
@@ -0,0 +1,21 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace LittleSampleApp
|
||||
{
|
||||
/// <summary>
|
||||
/// Just what it says on the tin. A little sample application for Linguist to try out.
|
||||
///
|
||||
/// </summary>
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
Console.WriteLine("Hello, I am a little sample application to test GitHub's Linguist module.");
|
||||
Console.WriteLine("I also include a Razor MVC file just to prove it handles cshtml files now.");
|
||||
}
|
||||
}
|
||||
}
|
||||
42
samples/C++/CsvStreamer.h
Normal file
42
samples/C++/CsvStreamer.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <fstream>
|
||||
#include "util.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
#define DEFAULT_DELIMITER ','
|
||||
|
||||
|
||||
class CsvStreamer
|
||||
{
|
||||
private:
|
||||
ofstream file; // File output stream
|
||||
vector<string> row_buffer; // Buffer which stores a row's data before being flushed/written
|
||||
int fields; // Number of fields (columns)
|
||||
long rows; // Number of rows (records) including header row
|
||||
char delimiter; // Delimiter character; comma by default
|
||||
string sanitize(string); // Returns a string ready for output into the file
|
||||
|
||||
public:
|
||||
CsvStreamer(); // Empty CSV streamer... be sure to open the file before writing!
|
||||
CsvStreamer(string, char); // Same as open(string, char)...
|
||||
CsvStreamer(string); // Opens an output CSV file given a file path/name
|
||||
~CsvStreamer(); // Ensures the output file is closed and saved
|
||||
void open(string); // Opens an output CSV file given a file path/name (default delimiter)
|
||||
void open(string, char); // Opens an output CSV file given a file path/name and a delimiting character (default comma)
|
||||
void add_field(string); // If still on first line, adds a new field to the header row
|
||||
void save_fields(); // Call this to save the header row; all new writes should be through append()
|
||||
void append(string); // Appends the current row with this data for the next field; quoted only if needed (leading/trailing spaces are trimmed)
|
||||
void append(string, bool); // Like append(string) but can specify whether to trim spaces at either end of the data (false to keep spaces)
|
||||
void append(float); // Appends the current row with this number
|
||||
void append(double); // Appends the current row with this number
|
||||
void append(long); // Appends the current row with this number
|
||||
void append(int); // Appends the current row with this number
|
||||
void writeln(); // Flushes what was in the row buffer into the file (writes the row)
|
||||
void close(); // Saves and closes the file
|
||||
int field_count(); // Gets the number of fields (columns)
|
||||
long row_count(); // Gets the number of records (rows) -- NOT including the header row
|
||||
};
|
||||
32
samples/C++/Field.h
Normal file
32
samples/C++/Field.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*****************************************************************************
|
||||
* Dwarf Mine - The 13-11 Benchmark
|
||||
*
|
||||
* Copyright (c) 2013 Bünger, Thomas; Kieschnick, Christian; Kusber,
|
||||
* Michael; Lohse, Henning; Wuttke, Nikolai; Xylander, Oliver; Yao, Gary;
|
||||
* Zimmermann, Florian
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
enum Field { Free, Black, White, Illegal };
|
||||
|
||||
typedef Field Player;
|
||||
32
samples/C++/Types.h
Normal file
32
samples/C++/Types.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/*****************************************************************************
|
||||
* Dwarf Mine - The 13-11 Benchmark
|
||||
*
|
||||
* Copyright (c) 2013 Bünger, Thomas; Kieschnick, Christian; Kusber,
|
||||
* Michael; Lohse, Henning; Wuttke, Nikolai; Xylander, Oliver; Yao, Gary;
|
||||
* Zimmermann, Florian
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining
|
||||
* a copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sublicense, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be
|
||||
* included in all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
typedef uint32_t smallPrime_t;
|
||||
1129
samples/C++/bcm2835.h
Normal file
1129
samples/C++/bcm2835.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,39 +0,0 @@
|
||||
void foo()
|
||||
{
|
||||
cudaArray* cu_array;
|
||||
texture<float, 2, cudaReadModeElementType> tex;
|
||||
|
||||
// Allocate array
|
||||
cudaChannelFormatDesc description = cudaCreateChannelDesc<float>();
|
||||
cudaMallocArray(&cu_array, &description, width, height);
|
||||
|
||||
// Copy image data to array
|
||||
cudaMemcpyToArray(cu_array, image, width*height*sizeof(float), cudaMemcpyHostToDevice);
|
||||
|
||||
// Set texture parameters (default)
|
||||
tex.addressMode[0] = cudaAddressModeClamp;
|
||||
tex.addressMode[1] = cudaAddressModeClamp;
|
||||
tex.filterMode = cudaFilterModePoint;
|
||||
tex.normalized = false; // do not normalize coordinates
|
||||
|
||||
// Bind the array to the texture
|
||||
cudaBindTextureToArray(tex, cu_array);
|
||||
|
||||
// Run kernel
|
||||
dim3 blockDim(16, 16, 1);
|
||||
dim3 gridDim((width + blockDim.x - 1)/ blockDim.x, (height + blockDim.y - 1) / blockDim.y, 1);
|
||||
kernel<<< gridDim, blockDim, 0 >>>(d_data, height, width);
|
||||
|
||||
// Unbind the array from the texture
|
||||
cudaUnbindTexture(tex);
|
||||
} //end foo()
|
||||
|
||||
__global__ void kernel(float* odata, int height, int width)
|
||||
{
|
||||
unsigned int x = blockIdx.x*blockDim.x + threadIdx.x;
|
||||
unsigned int y = blockIdx.y*blockDim.y + threadIdx.y;
|
||||
if (x < width && y < height) {
|
||||
float c = tex2D(tex, x, y);
|
||||
odata[y*width+x] = c;
|
||||
}
|
||||
}
|
||||
138
samples/C++/libcanister.h
Normal file
138
samples/C++/libcanister.h
Normal file
@@ -0,0 +1,138 @@
|
||||
#ifndef LIBCANIH
|
||||
#define LIBCANIH
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <stdlib.h>
|
||||
#include <cstring>
|
||||
|
||||
#define int64 unsigned long long
|
||||
//#define DEBUG
|
||||
|
||||
#ifdef DEBUG
|
||||
#define dout cout
|
||||
#else
|
||||
#define dout if (0) cerr
|
||||
#endif
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace libcanister
|
||||
{
|
||||
|
||||
//the canmem object is a generic memory container used commonly
|
||||
//throughout the canister framework to hold memory of uncertain
|
||||
//length which may or may not contain null bytes.
|
||||
class canmem
|
||||
{
|
||||
public:
|
||||
char* data; //the raw memory block
|
||||
int size; //the absolute length of the block
|
||||
canmem(); //creates an unallocated canmem
|
||||
canmem(int allocsize); //creates an allocated, blank canmem of size
|
||||
canmem(char* strdata); //automates the creation of zero-limited canmems
|
||||
~canmem(); //cleans up the canmem
|
||||
void zeromem(); //overwrites this canmem
|
||||
void fragmem(); //overwrites this canmem with fragment notation
|
||||
void countlen(); //counts length of zero-limited strings and stores it in size
|
||||
void trim(); //removes any nulls from the end of the string
|
||||
static canmem null(); //returns a singleton null canmem
|
||||
|
||||
};
|
||||
|
||||
//contains information about the canister
|
||||
class caninfo
|
||||
{
|
||||
public:
|
||||
canmem path; //physical path
|
||||
canmem internalname; //a name for the canister
|
||||
int numfiles; //the number of files in the canister
|
||||
};
|
||||
|
||||
//necessary for the use of this class as a type in canfile
|
||||
class canister;
|
||||
|
||||
//this object holds the definition of a 'file' within the
|
||||
//canister 'filesystem.'
|
||||
class canfile
|
||||
{
|
||||
public:
|
||||
libcanister::canister* parent; //the canister that holds this file
|
||||
canmem path; //internal path ('filename')
|
||||
canmem data; //the file's decompressed contents
|
||||
int isfrag; //0 = probably not fragment, 1 = definitely a fragment (ignore)
|
||||
int cfid; //'canfile id' -- a unique ID for this file
|
||||
int64 dsize; //ondisk size (compressed form size)
|
||||
int cachestate; //0 = not in memory, 1 = in memory, 2 = in memory and needs flush
|
||||
//-1 = error, check the data for the message
|
||||
void cache(); //pull the file from disk and cache it in memory
|
||||
void cachedump(); //deletes the contents of this file from the memory cache after assuring the on disk copy is up to date
|
||||
void cachedumpfinal(fstream& infile); //same as cachedump, but more efficient during closing procedures
|
||||
void flush(); //updates the on disk copy, but retains the memory cache
|
||||
};
|
||||
|
||||
//the primary class
|
||||
//this defines and controls a single canister
|
||||
class canister
|
||||
{
|
||||
//table of contents
|
||||
//absolutely worthless to the control code in the canister
|
||||
//but quite useful to programs using the API, as they may
|
||||
//desire to enumerate the files in a canister for a user's
|
||||
//use or for their own.
|
||||
//contains a newline-delimited list of files in the container.
|
||||
canfile TOC;
|
||||
public:
|
||||
caninfo info; //the general info about this canister
|
||||
|
||||
//the raw canfiles -- recommended that programs do not modify
|
||||
//these files directly, but not enforced.
|
||||
canfile* files;
|
||||
bool readonly; //if true then no write routines will do anything
|
||||
|
||||
//maximum number of files to have in memory at any given
|
||||
//time, change this to whatever suits your application.
|
||||
int cachemax;
|
||||
int cachecnt; //number of files in the cache (should not be modified)
|
||||
|
||||
//both initialize the canister from a physical location
|
||||
canister (canmem fspath);
|
||||
canister (char* fspath);
|
||||
|
||||
//destroys the canister (after flushing the modded buffers, of course)
|
||||
~canister();
|
||||
|
||||
//open the fspath
|
||||
//does it exist?
|
||||
// | --- yes --- opening it (return 1)
|
||||
// | --- yes --- file is corrupted, halting (return -1)
|
||||
// | --- no --- making a new one (return 0)
|
||||
int open();
|
||||
|
||||
//close the canister, flush all buffers, clean up
|
||||
int close();
|
||||
|
||||
//deletes the file at path inside this canister
|
||||
int delFile(canmem path);
|
||||
|
||||
//pulls the contents of the file from disk or memory and returns it as a file
|
||||
canfile getFile(canmem path);
|
||||
|
||||
//creates a file if it does not exist, otherwise overwrites
|
||||
//returns whether operation succeeded
|
||||
bool writeFile(canmem path, canmem data);
|
||||
bool writeFile(canfile file);
|
||||
|
||||
//get the 'table of contents', a file containing a newline delimited
|
||||
//list of the file paths in the container which have contents
|
||||
canfile getTOC();
|
||||
|
||||
//brings the cache back within the cachemax limit
|
||||
//important: sCFID is the safe CFID
|
||||
//(the CFID of the file we want to avoid uncaching)
|
||||
//really just used internally, but it can't do any harm.
|
||||
void cacheclean(int sCFID, bool dFlush = false);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
92
samples/C++/metrics.h
Normal file
92
samples/C++/metrics.h
Normal file
@@ -0,0 +1,92 @@
|
||||
// Copyright 2011 Google Inc. All Rights Reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#ifndef NINJA_METRICS_H_
|
||||
#define NINJA_METRICS_H_
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
#include "util.h" // For int64_t.
|
||||
|
||||
/// The Metrics module is used for the debug mode that dumps timing stats of
|
||||
/// various actions. To use, see METRIC_RECORD below.
|
||||
|
||||
/// A single metrics we're tracking, like "depfile load time".
|
||||
struct Metric {
|
||||
string name;
|
||||
/// Number of times we've hit the code path.
|
||||
int count;
|
||||
/// Total time (in micros) we've spent on the code path.
|
||||
int64_t sum;
|
||||
};
|
||||
|
||||
|
||||
/// A scoped object for recording a metric across the body of a function.
|
||||
/// Used by the METRIC_RECORD macro.
|
||||
struct ScopedMetric {
|
||||
explicit ScopedMetric(Metric* metric);
|
||||
~ScopedMetric();
|
||||
|
||||
private:
|
||||
Metric* metric_;
|
||||
/// Timestamp when the measurement started.
|
||||
/// Value is platform-dependent.
|
||||
int64_t start_;
|
||||
};
|
||||
|
||||
/// The singleton that stores metrics and prints the report.
|
||||
struct Metrics {
|
||||
Metric* NewMetric(const string& name);
|
||||
|
||||
/// Print a summary report to stdout.
|
||||
void Report();
|
||||
|
||||
private:
|
||||
vector<Metric*> metrics_;
|
||||
};
|
||||
|
||||
/// Get the current time as relative to some epoch.
|
||||
/// Epoch varies between platforms; only useful for measuring elapsed time.
|
||||
int64_t GetTimeMillis();
|
||||
|
||||
/// A simple stopwatch which returns the time
|
||||
/// in seconds since Restart() was called.
|
||||
struct Stopwatch {
|
||||
public:
|
||||
Stopwatch() : started_(0) {}
|
||||
|
||||
/// Seconds since Restart() call.
|
||||
double Elapsed() const {
|
||||
return 1e-6 * static_cast<double>(Now() - started_);
|
||||
}
|
||||
|
||||
void Restart() { started_ = Now(); }
|
||||
|
||||
private:
|
||||
uint64_t started_;
|
||||
uint64_t Now() const;
|
||||
};
|
||||
|
||||
/// The primary interface to metrics. Use METRIC_RECORD("foobar") at the top
|
||||
/// of a function to get timing stats recorded for each call of the function.
|
||||
#define METRIC_RECORD(name) \
|
||||
static Metric* metrics_h_metric = \
|
||||
g_metrics ? g_metrics->NewMetric(name) : NULL; \
|
||||
ScopedMetric metrics_h_scoped(metrics_h_metric);
|
||||
|
||||
extern Metrics* g_metrics;
|
||||
|
||||
#endif // NINJA_METRICS_H_
|
||||
6
samples/C++/render_adapter.cpp
Normal file
6
samples/C++/render_adapter.cpp
Normal file
@@ -0,0 +1,6 @@
|
||||
#include <cstdint>
|
||||
|
||||
namespace Gui
|
||||
{
|
||||
|
||||
}
|
||||
26
samples/C++/rpc.h
Normal file
26
samples/C++/rpc.h
Normal file
@@ -0,0 +1,26 @@
|
||||
// Copyright (C) 2013 Simon Que
|
||||
//
|
||||
// This file is part of DuinoCube.
|
||||
//
|
||||
// DuinoCube is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// DuinoCube is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with DuinoCube. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
// DuinoCube remote procedure call functions.
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
// Initializes RPC system.
|
||||
void rpc_init();
|
||||
|
||||
// Runs the RPC server loop forever.
|
||||
void rpc_server_loop();
|
||||
102
samples/C/bootstrap.h
Normal file
102
samples/C/bootstrap.h
Normal file
@@ -0,0 +1,102 @@
|
||||
#ifndef BOOTSTRAP_H
|
||||
#define BOOTSTRAP_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include "cxrs.h"
|
||||
|
||||
/* If we're not using GNU C, elide __attribute__ */
|
||||
#ifndef __GNUC__
|
||||
# define __attribute__(x) /*NOTHING*/
|
||||
#endif
|
||||
|
||||
typedef struct object object;
|
||||
|
||||
object *true;
|
||||
object *false;
|
||||
object *eof;
|
||||
object *empty_list;
|
||||
object *global_enviroment;
|
||||
|
||||
enum obj_type {
|
||||
scm_bool,
|
||||
scm_empty_list,
|
||||
scm_eof,
|
||||
scm_char,
|
||||
scm_int,
|
||||
scm_pair,
|
||||
scm_symbol,
|
||||
scm_prim_fun,
|
||||
scm_lambda,
|
||||
scm_str,
|
||||
scm_file
|
||||
};
|
||||
|
||||
typedef object *(*prim_proc)(object *args);
|
||||
|
||||
object *read(FILE *in);
|
||||
object *eval(object *code, object *env);
|
||||
void print(FILE *out, object *obj, int display);
|
||||
|
||||
int check_type(enum obj_type type, object *obj, int err_on_false);
|
||||
|
||||
static inline int is_true(object *obj)
|
||||
{
|
||||
return obj != false;
|
||||
}
|
||||
|
||||
object *make_int(int value);
|
||||
int obj2int(object *i);
|
||||
|
||||
object *make_bool(int value);
|
||||
int obj2bool(object *b);
|
||||
|
||||
object *make_char(char c);
|
||||
char obj2char(object *ch);
|
||||
|
||||
object *make_str(char *str);
|
||||
char *obj2str(object *str);
|
||||
|
||||
object *cons(object *car, object *cdr);
|
||||
object *car(object *pair);
|
||||
object *cdr(object *pair);
|
||||
void set_car(object *pair, object *new);
|
||||
void set_cdr(object *pair, object *new);
|
||||
|
||||
object *make_symbol(char *name);
|
||||
char *sym2str(object *sym);
|
||||
object *get_symbol(char *name) __attribute__((pure));
|
||||
|
||||
object *make_prim_fun(prim_proc fun);
|
||||
prim_proc obj2prim_proc(object *proc);
|
||||
|
||||
object *make_lambda(object *args, object *code, object *env);
|
||||
object *lambda_code(object *lambda);
|
||||
object *lambda_args(object *lambda);
|
||||
|
||||
object *make_port(FILE *handle, int direction);
|
||||
int port_direction(object *port);
|
||||
FILE *port_handle(object *port);
|
||||
void set_port_handle_to_null(object *port);
|
||||
|
||||
/*both of these should never be called*/
|
||||
object *apply_proc(object *);
|
||||
object *eval_proc(object *);
|
||||
|
||||
|
||||
object *maybe_add_begin(object *code);
|
||||
|
||||
void init_enviroment(object *env);
|
||||
|
||||
|
||||
void eval_err(char *msg, object *code) __attribute__((noreturn));
|
||||
|
||||
void define_var(object *var, object *val, object *env);
|
||||
void set_var(object *var, object *val, object *env);
|
||||
object *get_var(object *var, object *env);
|
||||
|
||||
object *cond2nested_if(object *cond);
|
||||
object *let2lambda(object *let);
|
||||
object *and2nested_if(object *and);
|
||||
object *or2nested_if(object *or);
|
||||
|
||||
#endif /*include guard*/
|
||||
61
samples/C/jni_layer.h
Normal file
61
samples/C/jni_layer.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class jni_JniLayer */
|
||||
|
||||
#ifndef _Included_jni_JniLayer
|
||||
#define _Included_jni_JniLayer
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_initialize
|
||||
* Signature: ([II)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_jni_JniLayer_jni_1layer_1initialize
|
||||
(JNIEnv *, jobject, jintArray, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_mainloop
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1mainloop
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_set_button
|
||||
* Signature: (JII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1set_1button
|
||||
(JNIEnv *, jobject, jlong, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_set_analog
|
||||
* Signature: (JIIF)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1set_1analog
|
||||
(JNIEnv *, jobject, jlong, jint, jint, jfloat);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_report_analog_chg
|
||||
* Signature: (JI)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1report_1analog_1chg
|
||||
(JNIEnv *, jobject, jlong, jint);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_kill
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1kill
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
5
samples/C/syscalldefs.h
Normal file
5
samples/C/syscalldefs.h
Normal file
@@ -0,0 +1,5 @@
|
||||
static const syscalldef syscalldefs[] = {
|
||||
[SYSCALL_OR_NUM(0, SYS_restart_syscall)] = MAKE_UINT16(0, 1),
|
||||
[SYSCALL_OR_NUM(1, SYS_exit)] = MAKE_UINT16(1, 17),
|
||||
[SYSCALL_OR_NUM(2, SYS_fork)] = MAKE_UINT16(0, 22),
|
||||
};
|
||||
17
samples/Clojure/for.clj
Normal file
17
samples/Clojure/for.clj
Normal file
@@ -0,0 +1,17 @@
|
||||
(defn prime? [n]
|
||||
(not-any? zero? (map #(rem n %) (range 2 n))))
|
||||
|
||||
(range 3 33 2)
|
||||
'(3 5 7 9 11 13 15 17 19 21 23 25 27 29 31)
|
||||
|
||||
;; :when continues through the collection even if some have the
|
||||
;; condition evaluate to false, like filter
|
||||
(for [x (range 3 33 2) :when (prime? x)]
|
||||
x)
|
||||
'(3 5 7 11 13 17 19 23 29 31)
|
||||
|
||||
;; :while stops at the first collection element that evaluates to
|
||||
;; false, like take-while
|
||||
(for [x (range 3 33 2) :while (prime? x)]
|
||||
x)
|
||||
'(3 5 7)
|
||||
8
samples/Clojure/hiccup.hic
Normal file
8
samples/Clojure/hiccup.hic
Normal file
@@ -0,0 +1,8 @@
|
||||
[:html
|
||||
[:head
|
||||
[:meta {:charset "utf-8"}]
|
||||
[:link {:rel "stylesheet" :href "css/bootstrap.min.css"}]
|
||||
[:script {:src "app.js"}]]
|
||||
[:body
|
||||
[:div.nav
|
||||
[:p "Hello world!"]]]]
|
||||
13
samples/Clojure/into-array.cljc
Normal file
13
samples/Clojure/into-array.cljc
Normal file
@@ -0,0 +1,13 @@
|
||||
(defn into-array
|
||||
([aseq]
|
||||
(into-array nil aseq))
|
||||
([type aseq]
|
||||
(let [n (count aseq)
|
||||
a (make-array n)]
|
||||
(loop [aseq (seq aseq)
|
||||
i 0]
|
||||
(if (< i n)
|
||||
(do
|
||||
(aset a i (first aseq))
|
||||
(recur (next aseq) (inc i)))
|
||||
a)))))
|
||||
15
samples/Clojure/protocol.cljs
Normal file
15
samples/Clojure/protocol.cljs
Normal file
@@ -0,0 +1,15 @@
|
||||
(defprotocol ISound (sound []))
|
||||
|
||||
(deftype Cat []
|
||||
ISound
|
||||
(sound [_] "Meow!"))
|
||||
|
||||
(deftype Dog []
|
||||
ISound
|
||||
(sound [_] "Woof!"))
|
||||
|
||||
(extend-type default
|
||||
ISound
|
||||
(sound [_] "... silence ..."))
|
||||
|
||||
(sound 1) ;; => "... silence ..."
|
||||
5
samples/Clojure/rand.cljscm
Normal file
5
samples/Clojure/rand.cljscm
Normal file
@@ -0,0 +1,5 @@
|
||||
(defn rand
|
||||
"Returns a random floating point number between 0 (inclusive) and
|
||||
n (default 1) (exclusive)."
|
||||
([] (scm* [n] (random-real)))
|
||||
([n] (* (rand) n)))
|
||||
20
samples/Clojure/svg.cljx
Normal file
20
samples/Clojure/svg.cljx
Normal file
@@ -0,0 +1,20 @@
|
||||
^:clj (ns c2.svg
|
||||
(:use [c2.core :only [unify]]
|
||||
[c2.maths :only [Pi Tau radians-per-degree
|
||||
sin cos mean]]))
|
||||
|
||||
^:cljs (ns c2.svg
|
||||
(:use [c2.core :only [unify]]
|
||||
[c2.maths :only [Pi Tau radians-per-degree
|
||||
sin cos mean]])
|
||||
(:require [c2.dom :as dom]))
|
||||
|
||||
;;Stub for float fn, which does not exist on cljs runtime
|
||||
^:cljs (def float identity)
|
||||
|
||||
(defn ->xy
|
||||
"Convert coordinates (potentially map of `{:x :y}`) to 2-vector."
|
||||
[coordinates]
|
||||
(cond
|
||||
(and (vector? coordinates) (= 2 (count coordinates))) coordinates
|
||||
(map? coordinates) [(:x coordinates) (:y coordinates)]))
|
||||
20
samples/Clojure/unit-test.cl2
Normal file
20
samples/Clojure/unit-test.cl2
Normal file
@@ -0,0 +1,20 @@
|
||||
(deftest function-tests
|
||||
(is (= 3
|
||||
(count [1 2 3])))
|
||||
(is (= false
|
||||
(not true)))
|
||||
(is (= true
|
||||
(contains? {:foo 1 :bar 2} :foo)))
|
||||
|
||||
(is (= {"foo" 1, "baz" 3}
|
||||
(select-keys {:foo 1 :bar 2 :baz 3} [:foo :baz])))
|
||||
|
||||
(is (= [1 2 3]
|
||||
(vals {:foo 1 :bar 2 :baz 3})))
|
||||
|
||||
(is (= ["foo" "bar" "baz"]
|
||||
(keys {:foo 1 :bar 2 :baz 3})))
|
||||
|
||||
(is (= [2 4 6]
|
||||
(filter (fn [x] (=== (rem x 2) 0)) [1 2 3 4 5 6]))))
|
||||
|
||||
21
samples/Common Lisp/sample.lisp
Normal file
21
samples/Common Lisp/sample.lisp
Normal file
@@ -0,0 +1,21 @@
|
||||
;;;; -*- lisp -*-
|
||||
|
||||
(in-package :foo)
|
||||
|
||||
;;; Header comment.
|
||||
(defvar *foo*)
|
||||
|
||||
(eval-when (:execute :compile-toplevel :load-toplevel)
|
||||
(defun add (x &optional y &key z)
|
||||
(declare (ignore z))
|
||||
;; Inline comment.
|
||||
(+ x (or y 1))))
|
||||
|
||||
#|
|
||||
Multi-line comment.
|
||||
|#
|
||||
|
||||
(defmacro foo (x &body b)
|
||||
(if x
|
||||
`(1+ ,x) ;After-line comment.
|
||||
42))
|
||||
52
samples/Cuda/scalarProd_kernel.cuh
Normal file
52
samples/Cuda/scalarProd_kernel.cuh
Normal file
@@ -0,0 +1,52 @@
|
||||
__global__ void scalarProdGPU(
|
||||
float *d_C,
|
||||
float *d_A,
|
||||
float *d_B,
|
||||
int vectorN,
|
||||
int elementN
|
||||
)
|
||||
{
|
||||
//Accumulators cache
|
||||
__shared__ float accumResult[ACCUM_N];
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
// Cycle through every pair of vectors,
|
||||
// taking into account that vector counts can be different
|
||||
// from total number of thread blocks
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
for (int vec = blockIdx.x; vec < vectorN; vec += gridDim.x)
|
||||
{
|
||||
int vectorBase = IMUL(elementN, vec);
|
||||
int vectorEnd = vectorBase + elementN;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Each accumulator cycles through vectors with
|
||||
// stride equal to number of total number of accumulators ACCUM_N
|
||||
// At this stage ACCUM_N is only preferred be a multiple of warp size
|
||||
// to meet memory coalescing alignment constraints.
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
for (int iAccum = threadIdx.x; iAccum < ACCUM_N; iAccum += blockDim.x)
|
||||
{
|
||||
float sum = 0;
|
||||
|
||||
for (int pos = vectorBase + iAccum; pos < vectorEnd; pos += ACCUM_N)
|
||||
sum += d_A[pos] * d_B[pos];
|
||||
|
||||
accumResult[iAccum] = sum;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Perform tree-like reduction of accumulators' results.
|
||||
// ACCUM_N has to be power of two at this stage
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
for (int stride = ACCUM_N / 2; stride > 0; stride >>= 1)
|
||||
{
|
||||
__syncthreads();
|
||||
|
||||
for (int iAccum = threadIdx.x; iAccum < stride; iAccum += blockDim.x)
|
||||
accumResult[iAccum] += accumResult[stride + iAccum];
|
||||
}
|
||||
|
||||
if (threadIdx.x == 0) d_C[vec] = accumResult[0];
|
||||
}
|
||||
}
|
||||
46
samples/Cuda/vectorAdd.cu
Normal file
46
samples/Cuda/vectorAdd.cu
Normal file
@@ -0,0 +1,46 @@
|
||||
#include <stdio.h>
|
||||
#include <cuda_runtime.h>
|
||||
|
||||
/**
|
||||
* CUDA Kernel Device code
|
||||
*
|
||||
* Computes the vector addition of A and B into C. The 3 vectors have the same
|
||||
* number of elements numElements.
|
||||
*/
|
||||
__global__ void
|
||||
vectorAdd(const float *A, const float *B, float *C, int numElements)
|
||||
{
|
||||
int i = blockDim.x * blockIdx.x + threadIdx.x;
|
||||
|
||||
if (i < numElements)
|
||||
{
|
||||
C[i] = A[i] + B[i];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Host main routine
|
||||
*/
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
// Error code to check return values for CUDA calls
|
||||
cudaError_t err = cudaSuccess;
|
||||
|
||||
// Launch the Vector Add CUDA Kernel
|
||||
int threadsPerBlock = 256;
|
||||
int blocksPerGrid =(numElements + threadsPerBlock - 1) / threadsPerBlock;
|
||||
vectorAdd<<<blocksPerGrid, threadsPerBlock>>>(d_A, d_B, d_C, numElements);
|
||||
err = cudaGetLastError();
|
||||
|
||||
if (err != cudaSuccess)
|
||||
{
|
||||
fprintf(stderr, "Failed to launch vectorAdd kernel (error code %s)!\n", cudaGetErrorString(err));
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// Reset the device and exit
|
||||
err = cudaDeviceReset();
|
||||
|
||||
return 0;
|
||||
}
|
||||
87
samples/DM/example.dm
Normal file
87
samples/DM/example.dm
Normal file
@@ -0,0 +1,87 @@
|
||||
// This is a single line comment.
|
||||
/*
|
||||
This is a multi-line comment
|
||||
*/
|
||||
|
||||
// Pre-processor keywords
|
||||
|
||||
#define PI 3.1415
|
||||
|
||||
#if PI == 4
|
||||
|
||||
#define G 5
|
||||
|
||||
#elif PI == 3
|
||||
|
||||
#define I 6
|
||||
|
||||
#else
|
||||
|
||||
#define K 7
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
var/GlobalCounter = 0
|
||||
var/const/CONST_VARIABLE = 2
|
||||
var/list/MyList = list("anything", 1, new /datum/entity)
|
||||
var/list/EmptyList[99] // creates a list of 99 null entries
|
||||
var/list/NullList = null
|
||||
|
||||
/*
|
||||
Entity Class
|
||||
*/
|
||||
|
||||
/datum/entity
|
||||
var/name = "Entity"
|
||||
var/number = 0
|
||||
|
||||
/datum/entity/proc/myFunction()
|
||||
world.log << "Entity has called myFunction"
|
||||
|
||||
/datum/entity/New()
|
||||
number = GlobalCounter++
|
||||
|
||||
/*
|
||||
Unit Class, Extends from Entity
|
||||
*/
|
||||
|
||||
/datum/entity/unit
|
||||
name = "Unit"
|
||||
|
||||
/datum/entity/unit/New()
|
||||
..() // calls the parent's proc; equal to super() and base() in other languages
|
||||
number = rand(1, 99)
|
||||
|
||||
/datum/entity/unit/myFunction()
|
||||
world.log << "Unit has overriden and called myFunction"
|
||||
|
||||
// Global Function
|
||||
/proc/ReverseList(var/list/input)
|
||||
var/list/output = list()
|
||||
for(var/i = input.len; i >= 1; i--) // IMPORTANT: List Arrays count from 1.
|
||||
output += input[i] // "+= x" is ".Add(x)"
|
||||
return output
|
||||
|
||||
// Bitflags
|
||||
/proc/DoStuff()
|
||||
var/bitflag = 0
|
||||
bitflag |= 8
|
||||
return bitflag
|
||||
|
||||
/proc/DoOtherStuff()
|
||||
var/bitflag = 65535 // 16 bits is the maximum amount
|
||||
bitflag &= ~8
|
||||
return bitflag
|
||||
|
||||
// Logic
|
||||
/proc/DoNothing()
|
||||
var/pi = PI
|
||||
if(pi == 4)
|
||||
world.log << "PI is 4"
|
||||
else if(pi == CONST_VARIABLE)
|
||||
world.log << "PI is [CONST_VARIABLE]!"
|
||||
else
|
||||
world.log << "PI is approximety [pi]"
|
||||
|
||||
#undef PI // Undefine PI
|
||||
@@ -1,15 +1,19 @@
|
||||
import 'dart:math' as math;
|
||||
|
||||
class Point {
|
||||
num x, y;
|
||||
|
||||
Point(this.x, this.y);
|
||||
distanceTo(Point other) {
|
||||
|
||||
num distanceTo(Point other) {
|
||||
var dx = x - other.x;
|
||||
var dy = y - other.y;
|
||||
return Math.sqrt(dx * dx + dy * dy);
|
||||
return math.sqrt(dx * dx + dy * dy);
|
||||
}
|
||||
var x, y;
|
||||
}
|
||||
|
||||
main() {
|
||||
Point p = new Point(2, 3);
|
||||
Point q = new Point(3, 4);
|
||||
void main() {
|
||||
var p = new Point(2, 3);
|
||||
var q = new Point(3, 4);
|
||||
print('distance from p to q = ${p.distanceTo(q)}');
|
||||
}
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
print("hello")
|
||||
9
samples/Hy/fibonacci.hy
Normal file
9
samples/Hy/fibonacci.hy
Normal file
@@ -0,0 +1,9 @@
|
||||
;; Fibonacci example in Hy.
|
||||
|
||||
(defn fib [n]
|
||||
(if (<= n 2) n
|
||||
(+ (fib (- n 1)) (fib (- n 2)))))
|
||||
|
||||
(if (= __name__ "__main__")
|
||||
(for [x [1 2 3 4 5 6 7 8]]
|
||||
(print (fib x))))
|
||||
13
samples/Hy/hello-world.hy
Normal file
13
samples/Hy/hello-world.hy
Normal file
@@ -0,0 +1,13 @@
|
||||
;; The concurrent.futures example in Hy.
|
||||
|
||||
(import [concurrent.futures [ThreadPoolExecutor as-completed]]
|
||||
[random [randint]]
|
||||
[sh [sleep]])
|
||||
|
||||
(defn task-to-do []
|
||||
(sleep (randint 1 5)))
|
||||
|
||||
(with-as (ThreadPoolExecutor 10) executor
|
||||
(setv jobs (list-comp (.submit executor task-to-do) (x (range 0 10))))
|
||||
(for (future (as-completed jobs))
|
||||
(.result future)))
|
||||
29
samples/IDL/mg_acosh.pro
Normal file
29
samples/IDL/mg_acosh.pro
Normal file
@@ -0,0 +1,29 @@
|
||||
; docformat = 'rst'
|
||||
|
||||
;+
|
||||
; Inverse hyperbolic cosine. Uses the formula:
|
||||
;
|
||||
; $$\text{acosh}(z) = \ln(z + \sqrt{z + 1} \sqrt{z - 1})$$
|
||||
;
|
||||
; :Examples:
|
||||
; The arc hyperbolic sine function looks like::
|
||||
;
|
||||
; IDL> x = 2.5 * findgen(1000) / 999. + 1.
|
||||
; IDL> plot, x, mg_acosh(x), xstyle=1
|
||||
;
|
||||
; This should look like:
|
||||
;
|
||||
; .. image:: acosh.png
|
||||
;
|
||||
; :Returns:
|
||||
; float, double, complex, or double complex depending on the input
|
||||
;
|
||||
; :Params:
|
||||
; z : in, required, type=numeric
|
||||
; input
|
||||
;-
|
||||
function mg_acosh, z
|
||||
compile_opt strictarr
|
||||
|
||||
return, alog(z + sqrt(z + 1) * sqrt(z - 1))
|
||||
end
|
||||
9
samples/IDL/mg_analysis.dlm
Normal file
9
samples/IDL/mg_analysis.dlm
Normal file
@@ -0,0 +1,9 @@
|
||||
MODULE mg_analysis
|
||||
DESCRIPTION Tools for analysis
|
||||
VERSION 1.0
|
||||
SOURCE mgalloy
|
||||
BUILD_DATE January 18, 2011
|
||||
|
||||
FUNCTION MG_ARRAY_EQUAL 2 2 KEYWORDS
|
||||
FUNCTION MG_TOTAL 1 1
|
||||
|
||||
35
samples/IDL/mg_gcd.pro
Normal file
35
samples/IDL/mg_gcd.pro
Normal file
@@ -0,0 +1,35 @@
|
||||
; docformat = 'rst'
|
||||
|
||||
;+
|
||||
; Find the greatest common denominator (GCD) for two positive integers.
|
||||
;
|
||||
; :Returns:
|
||||
; integer
|
||||
;
|
||||
; :Params:
|
||||
; a : in, required, type=integer
|
||||
; first integer
|
||||
; b : in, required, type=integer
|
||||
; second integer
|
||||
;-
|
||||
function mg_gcd, a, b
|
||||
compile_opt strictarr
|
||||
on_error, 2
|
||||
|
||||
if (n_params() ne 2) then message, 'incorrect number of arguments'
|
||||
if (~mg_isinteger(a) || ~mg_isinteger(b)) then begin
|
||||
message, 'integer arguments required'
|
||||
endif
|
||||
|
||||
_a = abs(a)
|
||||
_b = abs(b)
|
||||
minArg = _a < _b
|
||||
maxArg = _a > _b
|
||||
|
||||
if (minArg eq 0) then return, maxArg
|
||||
|
||||
remainder = maxArg mod minArg
|
||||
if (remainder eq 0) then return, minArg
|
||||
|
||||
return, mg_gcd(minArg, remainder)
|
||||
end
|
||||
42
samples/IDL/mg_trunc.pro
Normal file
42
samples/IDL/mg_trunc.pro
Normal file
@@ -0,0 +1,42 @@
|
||||
; docformat = 'rst'
|
||||
|
||||
;+
|
||||
; Truncate argument towards 0.0, i.e., takes the `FLOOR` of positive values
|
||||
; and the `CEIL` of negative values.
|
||||
;
|
||||
; :Examples:
|
||||
; Try the main-level program at the end of this file. It does::
|
||||
;
|
||||
; IDL> print, mg_trunc([1.2, -1.2, 0.0])
|
||||
; 1 -1 0
|
||||
; IDL> print, floor([1.2, -1.2, 0.0])
|
||||
; 1 -2 0
|
||||
; IDL> print, ceil([1.2, -1.2, 0.0])
|
||||
; 2 -1 0
|
||||
;
|
||||
; :Returns:
|
||||
; array of same type as argument
|
||||
;
|
||||
; :Params:
|
||||
; x : in, required, type=float/double
|
||||
; array containing values to truncate
|
||||
;-
|
||||
function mg_trunc, x
|
||||
compile_opt strictarr
|
||||
|
||||
result = ceil(x)
|
||||
posInd = where(x gt 0, nposInd)
|
||||
|
||||
if (nposInd gt 0L) then begin
|
||||
result[posInd] = floor(x[posInd])
|
||||
endif
|
||||
|
||||
return, result
|
||||
end
|
||||
|
||||
|
||||
; main-level example program
|
||||
|
||||
print, mg_trunc([1.2, -1.2, 0.0])
|
||||
|
||||
end
|
||||
42
samples/Idris/Chars.idr
Normal file
42
samples/Idris/Chars.idr
Normal file
@@ -0,0 +1,42 @@
|
||||
module Prelude.Char
|
||||
|
||||
import Builtins
|
||||
|
||||
isUpper : Char -> Bool
|
||||
isUpper x = x >= 'A' && x <= 'Z'
|
||||
|
||||
isLower : Char -> Bool
|
||||
isLower x = x >= 'a' && x <= 'z'
|
||||
|
||||
isAlpha : Char -> Bool
|
||||
isAlpha x = isUpper x || isLower x
|
||||
|
||||
isDigit : Char -> Bool
|
||||
isDigit x = (x >= '0' && x <= '9')
|
||||
|
||||
isAlphaNum : Char -> Bool
|
||||
isAlphaNum x = isDigit x || isAlpha x
|
||||
|
||||
isSpace : Char -> Bool
|
||||
isSpace x = x == ' ' || x == '\t' || x == '\r' ||
|
||||
x == '\n' || x == '\f' || x == '\v' ||
|
||||
x == '\xa0'
|
||||
|
||||
isNL : Char -> Bool
|
||||
isNL x = x == '\r' || x == '\n'
|
||||
|
||||
toUpper : Char -> Char
|
||||
toUpper x = if (isLower x)
|
||||
then (prim__intToChar (prim__charToInt x - 32))
|
||||
else x
|
||||
|
||||
toLower : Char -> Char
|
||||
toLower x = if (isUpper x)
|
||||
then (prim__intToChar (prim__charToInt x + 32))
|
||||
else x
|
||||
|
||||
isHexDigit : Char -> Bool
|
||||
isHexDigit x = elem (toUpper x) hexChars where
|
||||
hexChars : List Char
|
||||
hexChars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
'A', 'B', 'C', 'D', 'E', 'F']
|
||||
267
samples/JSON/composer.lock
generated
Normal file
267
samples/JSON/composer.lock
generated
Normal file
@@ -0,0 +1,267 @@
|
||||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
|
||||
],
|
||||
"hash": "d8ff8fcb71824f5199f3499bf71862f1",
|
||||
"packages": [
|
||||
{
|
||||
"name": "arbit/system-process",
|
||||
"version": "1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Arbitracker/system-process.git",
|
||||
"reference": "1.0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Arbitracker/system-process/zipball/1.0",
|
||||
"reference": "1.0",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"SystemProcess": "src/main/php/"
|
||||
}
|
||||
},
|
||||
"notification-url": "http://packagist.org/downloads/",
|
||||
"description": "System process execution library",
|
||||
"time": "2013-03-31 12:42:56"
|
||||
},
|
||||
{
|
||||
"name": "pdepend/staticReflection",
|
||||
"version": "0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/manuelpichler/staticReflection.git",
|
||||
"reference": "origin/master"
|
||||
},
|
||||
"type": "library"
|
||||
},
|
||||
{
|
||||
"name": "qafoo/rmf",
|
||||
"version": "dev-master",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/Qafoo/REST-Micro-Framework.git",
|
||||
"reference": "5f43983f15a8aa12be42ad6068675d4008bfb9ed"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/Qafoo/REST-Micro-Framework/zipball/5f43983f15a8aa12be42ad6068675d4008bfb9ed",
|
||||
"reference": "5f43983f15a8aa12be42ad6068675d4008bfb9ed",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Qafoo\\RMF": "src/main/"
|
||||
}
|
||||
},
|
||||
"description": "Very simple VC framework which makes it easy to build HTTP applications / REST webservices",
|
||||
"support": {
|
||||
"source": "https://github.com/Qafoo/REST-Micro-Framework/tree/master",
|
||||
"issues": "https://github.com/Qafoo/REST-Micro-Framework/issues"
|
||||
},
|
||||
"time": "2012-12-07 13:33:01"
|
||||
},
|
||||
{
|
||||
"name": "twig/twig",
|
||||
"version": "1.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/fabpot/Twig.git",
|
||||
"reference": "v1.6.0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://github.com/fabpot/Twig/zipball/v1.6.0",
|
||||
"reference": "v1.6.0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.2.4"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"psr-0": {
|
||||
"Twig_": "lib/"
|
||||
}
|
||||
},
|
||||
"license": [
|
||||
"BSD"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Fabien Potencier",
|
||||
"email": "fabien@symfony.com"
|
||||
},
|
||||
{
|
||||
"name": "Armin Ronacher",
|
||||
"email": "armin.ronacher@active-4.com"
|
||||
}
|
||||
],
|
||||
"description": "Twig, the flexible, fast, and secure template language for PHP",
|
||||
"homepage": "http://twig.sensiolabs.org",
|
||||
"keywords": [
|
||||
"templating"
|
||||
],
|
||||
"time": "2012-02-03 23:34:52"
|
||||
},
|
||||
{
|
||||
"name": "twitter/bootstrap",
|
||||
"version": "0.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/twitter/bootstrap/",
|
||||
"reference": "origin/master"
|
||||
},
|
||||
"type": "library"
|
||||
},
|
||||
{
|
||||
"name": "zetacomponents/base",
|
||||
"version": "1.8",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/zetacomponents/Base.git",
|
||||
"reference": "1.8"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://github.com/zetacomponents/Base/zipball/1.8",
|
||||
"reference": "1.8",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src"
|
||||
]
|
||||
},
|
||||
"license": [
|
||||
"apache2"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Sergey Alexeev"
|
||||
},
|
||||
{
|
||||
"name": "Sebastian Bergmann"
|
||||
},
|
||||
{
|
||||
"name": "Jan Borsodi"
|
||||
},
|
||||
{
|
||||
"name": "Raymond Bosman"
|
||||
},
|
||||
{
|
||||
"name": "Frederik Holljen"
|
||||
},
|
||||
{
|
||||
"name": "Kore Nordmann"
|
||||
},
|
||||
{
|
||||
"name": "Derick Rethans"
|
||||
},
|
||||
{
|
||||
"name": "Vadym Savchuk"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schlitt"
|
||||
},
|
||||
{
|
||||
"name": "Alexandru Stanoi"
|
||||
}
|
||||
],
|
||||
"description": "The Base package provides the basic infrastructure that all packages rely on. Therefore every component relies on this package.",
|
||||
"homepage": "https://github.com/zetacomponents",
|
||||
"time": "2009-12-21 04:14:16"
|
||||
},
|
||||
{
|
||||
"name": "zetacomponents/graph",
|
||||
"version": "1.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/zetacomponents/Graph.git",
|
||||
"reference": "1.5"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://github.com/zetacomponents/Graph/zipball/1.5",
|
||||
"reference": "1.5",
|
||||
"shasum": ""
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src"
|
||||
]
|
||||
},
|
||||
"license": [
|
||||
"apache2"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Sergey Alexeev"
|
||||
},
|
||||
{
|
||||
"name": "Sebastian Bergmann"
|
||||
},
|
||||
{
|
||||
"name": "Jan Borsodi"
|
||||
},
|
||||
{
|
||||
"name": "Raymond Bosman"
|
||||
},
|
||||
{
|
||||
"name": "Frederik Holljen"
|
||||
},
|
||||
{
|
||||
"name": "Kore Nordmann"
|
||||
},
|
||||
{
|
||||
"name": "Derick Rethans"
|
||||
},
|
||||
{
|
||||
"name": "Vadym Savchuk"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schlitt"
|
||||
},
|
||||
{
|
||||
"name": "Alexandru Stanoi"
|
||||
},
|
||||
{
|
||||
"name": "Lars Jankowski"
|
||||
},
|
||||
{
|
||||
"name": "Elger Thiele"
|
||||
},
|
||||
{
|
||||
"name": "Michael Maclean"
|
||||
}
|
||||
],
|
||||
"description": "A component for creating pie charts, line graphs and other kinds of diagrams.",
|
||||
"homepage": "https://github.com/zetacomponents",
|
||||
"time": "2009-12-21 04:26:17"
|
||||
}
|
||||
],
|
||||
"packages-dev": [
|
||||
|
||||
],
|
||||
"aliases": [
|
||||
|
||||
],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": {
|
||||
"qafoo/rmf": 20,
|
||||
"arbit/system-process": 0
|
||||
},
|
||||
"platform": [
|
||||
|
||||
],
|
||||
"platform-dev": [
|
||||
|
||||
]
|
||||
}
|
||||
29
samples/JSON5/example.json5
Normal file
29
samples/JSON5/example.json5
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* The following is a contrived example, but it illustrates most of the features:
|
||||
*/
|
||||
|
||||
{
|
||||
foo: 'bar',
|
||||
while: true,
|
||||
|
||||
this: 'is a \
|
||||
multi-line string',
|
||||
|
||||
// this is an inline comment
|
||||
here: 'is another', // inline comment
|
||||
|
||||
/* this is a block comment
|
||||
that continues on another line */
|
||||
|
||||
hex: 0xDEADbeef,
|
||||
half: .5,
|
||||
delta: +10,
|
||||
to: Infinity, // and beyond!
|
||||
|
||||
finally: 'a trailing comma',
|
||||
oh: [
|
||||
"we shouldn't forget",
|
||||
'arrays can have',
|
||||
'trailing commas too',
|
||||
],
|
||||
}
|
||||
28
samples/JSON5/package.json5
Normal file
28
samples/JSON5/package.json5
Normal file
@@ -0,0 +1,28 @@
|
||||
// This file is written in JSON5 syntax, naturally, but npm needs a regular
|
||||
// JSON file, so compile via `npm run build`. Be sure to keep both in sync!
|
||||
|
||||
{
|
||||
name: 'json5',
|
||||
version: '0.2.0',
|
||||
description: 'JSON for the ES5 era.',
|
||||
keywords: ['json', 'es5'],
|
||||
author: 'Aseem Kishore <aseem.kishore@gmail.com>',
|
||||
contributors: [
|
||||
'Max Nanasy <max.nanasy@gmail.com>',
|
||||
],
|
||||
main: 'lib/json5.js',
|
||||
bin: 'lib/cli.js',
|
||||
dependencies: {},
|
||||
devDependencies: {
|
||||
mocha: '~1.0.3',
|
||||
},
|
||||
scripts: {
|
||||
build: './lib/cli.js -c package.json5',
|
||||
test: 'mocha --ui exports --reporter spec',
|
||||
},
|
||||
homepage: 'http://json5.org/',
|
||||
repository: {
|
||||
type: 'git',
|
||||
url: 'https://github.com/aseemk/json5.git',
|
||||
},
|
||||
}
|
||||
3
samples/Jade/hello.jade
Normal file
3
samples/Jade/hello.jade
Normal file
@@ -0,0 +1,3 @@
|
||||
p.
|
||||
Hello,
|
||||
World!
|
||||
15
samples/KRL/helloworld.krl
Normal file
15
samples/KRL/helloworld.krl
Normal file
@@ -0,0 +1,15 @@
|
||||
ruleset sample {
|
||||
meta {
|
||||
name "Hello World"
|
||||
description <<
|
||||
Hello world
|
||||
>>
|
||||
author "Phil Windley"
|
||||
}
|
||||
|
||||
// just one rule
|
||||
rule hello {
|
||||
select when web pageview
|
||||
notify("Hello world!", "Just a note to say hello");
|
||||
}
|
||||
}
|
||||
82
samples/Literate Agda/NatCat.lagda
Normal file
82
samples/Literate Agda/NatCat.lagda
Normal file
@@ -0,0 +1,82 @@
|
||||
\documentclass{article}
|
||||
|
||||
% The following packages are needed because unicode
|
||||
% is translated (using the next set of packages) to
|
||||
% latex commands. You may need more packages if you
|
||||
% use more unicode characters:
|
||||
|
||||
\usepackage{amssymb}
|
||||
\usepackage{bbm}
|
||||
\usepackage[greek,english]{babel}
|
||||
|
||||
% This handles the translation of unicode to latex:
|
||||
|
||||
\usepackage{ucs}
|
||||
\usepackage[utf8x]{inputenc}
|
||||
\usepackage{autofe}
|
||||
|
||||
% Some characters that are not automatically defined
|
||||
% (you figure out by the latex compilation errors you get),
|
||||
% and you need to define:
|
||||
|
||||
\DeclareUnicodeCharacter{8988}{\ensuremath{\ulcorner}}
|
||||
\DeclareUnicodeCharacter{8989}{\ensuremath{\urcorner}}
|
||||
\DeclareUnicodeCharacter{8803}{\ensuremath{\overline{\equiv}}}
|
||||
|
||||
% Add more as you need them (shouldn’t happen often).
|
||||
|
||||
% Using “\newenvironment” to redefine verbatim to
|
||||
% be called “code” doesn’t always work properly.
|
||||
% You can more reliably use:
|
||||
|
||||
\usepackage{fancyvrb}
|
||||
|
||||
\DefineVerbatimEnvironment
|
||||
{code}{Verbatim}
|
||||
{} % Add fancy options here if you like.
|
||||
|
||||
\begin{document}
|
||||
|
||||
\begin{code}
|
||||
module NatCat where
|
||||
|
||||
open import Relation.Binary.PropositionalEquality
|
||||
|
||||
-- If you can show that a relation only ever has one inhabitant
|
||||
-- you get the category laws for free
|
||||
module
|
||||
EasyCategory
|
||||
(obj : Set)
|
||||
(_⟶_ : obj → obj → Set)
|
||||
(_∘_ : ∀ {x y z} → x ⟶ y → y ⟶ z → x ⟶ z)
|
||||
(id : ∀ x → x ⟶ x)
|
||||
(single-inhabitant : (x y : obj) (r s : x ⟶ y) → r ≡ s)
|
||||
where
|
||||
|
||||
idʳ : ∀ x y (r : x ⟶ y) → r ∘ id y ≡ r
|
||||
idʳ x y r = single-inhabitant x y (r ∘ id y) r
|
||||
|
||||
idˡ : ∀ x y (r : x ⟶ y) → id x ∘ r ≡ r
|
||||
idˡ x y r = single-inhabitant x y (id x ∘ r) r
|
||||
|
||||
∘-assoc : ∀ w x y z (r : w ⟶ x) (s : x ⟶ y) (t : y ⟶ z) → (r ∘ s) ∘ t ≡ r ∘ (s ∘ t)
|
||||
∘-assoc w x y z r s t = single-inhabitant w z ((r ∘ s) ∘ t) (r ∘ (s ∘ t))
|
||||
|
||||
open import Data.Nat
|
||||
|
||||
same : (x y : ℕ) (r s : x ≤ y) → r ≡ s
|
||||
same .0 y z≤n z≤n = refl
|
||||
same .(suc m) .(suc n) (s≤s {m} {n} r) (s≤s s) = cong s≤s (same m n r s)
|
||||
|
||||
≤-trans : ∀ x y z → x ≤ y → y ≤ z → x ≤ z
|
||||
≤-trans .0 y z z≤n s = z≤n
|
||||
≤-trans .(suc m) .(suc n) .(suc n₁) (s≤s {m} {n} r) (s≤s {.n} {n₁} s) = s≤s (≤-trans m n n₁ r s)
|
||||
|
||||
≤-refl : ∀ x → x ≤ x
|
||||
≤-refl zero = z≤n
|
||||
≤-refl (suc x) = s≤s (≤-refl x)
|
||||
|
||||
module Nat-EasyCategory = EasyCategory ℕ _≤_ (λ {x}{y}{z} → ≤-trans x y z) ≤-refl same
|
||||
\end{code}
|
||||
|
||||
\end{document}
|
||||
31
samples/Matlab/cross_validation.m
Normal file
31
samples/Matlab/cross_validation.m
Normal file
@@ -0,0 +1,31 @@
|
||||
function [ error ] = cross_validation(x,y,hyper_parameter)
|
||||
|
||||
num_data = size(x,1);
|
||||
|
||||
K = 10;
|
||||
indices = crossvalind('Kfold', num_data, K);
|
||||
|
||||
errors = zeros(K,1);
|
||||
for i = 1:K
|
||||
% get indices
|
||||
test_idx = (indices == i);
|
||||
train_idx = ~test_idx;
|
||||
|
||||
% get training data
|
||||
x_train = x(train_idx,:);
|
||||
y_train = y(train_idx,:);
|
||||
|
||||
% train
|
||||
w = train(x_train, y_train, hyper_parameter);
|
||||
|
||||
% get test data
|
||||
x_test = x(test_idx,:);
|
||||
y_test = y(test_idx,:);
|
||||
|
||||
% calculate error
|
||||
errors(i) = calc_cost(x_test, y_test, w, hyper_parameter); %calc_error
|
||||
%errors(i) = calc_error(x_test, y_test, w);
|
||||
end
|
||||
|
||||
error = mean(errors);
|
||||
end
|
||||
6
samples/Matlab/normalize.m
Normal file
6
samples/Matlab/normalize.m
Normal file
@@ -0,0 +1,6 @@
|
||||
function [ d, d_mean, d_std ] = normalize( d )
|
||||
d_mean = mean(d);
|
||||
d = d - repmat(d_mean, size(d,1), 1);
|
||||
d_std = std(d);
|
||||
d = d./ repmat(d_std, size(d,1), 1);
|
||||
end
|
||||
55
samples/NetLogo/Life.nlogo
Normal file
55
samples/NetLogo/Life.nlogo
Normal file
@@ -0,0 +1,55 @@
|
||||
patches-own [
|
||||
living? ;; indicates if the cell is living
|
||||
live-neighbors ;; counts how many neighboring cells are alive
|
||||
]
|
||||
|
||||
to setup-blank
|
||||
clear-all
|
||||
ask patches [ cell-death ]
|
||||
reset-ticks
|
||||
end
|
||||
|
||||
to setup-random
|
||||
clear-all
|
||||
ask patches
|
||||
[ ifelse random-float 100.0 < initial-density
|
||||
[ cell-birth ]
|
||||
[ cell-death ] ]
|
||||
reset-ticks
|
||||
end
|
||||
|
||||
to cell-birth
|
||||
set living? true
|
||||
set pcolor fgcolor
|
||||
end
|
||||
|
||||
to cell-death
|
||||
set living? false
|
||||
set pcolor bgcolor
|
||||
end
|
||||
|
||||
to go
|
||||
ask patches
|
||||
[ set live-neighbors count neighbors with [living?] ]
|
||||
;; Starting a new "ask patches" here ensures that all the patches
|
||||
;; finish executing the first ask before any of them start executing
|
||||
;; the second ask. This keeps all the patches in synch with each other,
|
||||
;; so the births and deaths at each generation all happen in lockstep.
|
||||
ask patches
|
||||
[ ifelse live-neighbors = 3
|
||||
[ cell-birth ]
|
||||
[ if live-neighbors != 2
|
||||
[ cell-death ] ] ]
|
||||
tick
|
||||
end
|
||||
|
||||
to draw-cells
|
||||
let erasing? [living?] of patch mouse-xcor mouse-ycor
|
||||
while [mouse-down?]
|
||||
[ ask patch mouse-xcor mouse-ycor
|
||||
[ ifelse erasing?
|
||||
[ cell-death ]
|
||||
[ cell-birth ] ]
|
||||
display ]
|
||||
end
|
||||
|
||||
23
samples/OpenCL/sample.cl
Normal file
23
samples/OpenCL/sample.cl
Normal file
@@ -0,0 +1,23 @@
|
||||
/* Old-style comment. */
|
||||
|
||||
// New-style comment.
|
||||
|
||||
typedef float foo_t;
|
||||
|
||||
#ifndef ZERO
|
||||
#define ZERO (0.0)
|
||||
#endif
|
||||
|
||||
#define FOO(x) ((x) + \
|
||||
ZERO)
|
||||
|
||||
__kernel
|
||||
void foo(__global const foo_t * x, __local foo_t y, const uint n)
|
||||
{
|
||||
barrier(CLK_LOCAL_MEM_FENCE);
|
||||
|
||||
if (n > 42) {
|
||||
*x += y;
|
||||
}
|
||||
}
|
||||
|
||||
55
samples/Oxygene/Loops.oxygene
Normal file
55
samples/Oxygene/Loops.oxygene
Normal file
@@ -0,0 +1,55 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup>
|
||||
<RootNamespace>Loops</RootNamespace>
|
||||
<OutputType>exe</OutputType>
|
||||
<AssemblyName>Loops</AssemblyName>
|
||||
<AllowGlobals>False</AllowGlobals>
|
||||
<AllowLegacyOutParams>False</AllowLegacyOutParams>
|
||||
<AllowLegacyCreate>False</AllowLegacyCreate>
|
||||
<ApplicationIcon>Properties\App.ico</ApplicationIcon>
|
||||
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
|
||||
<ProjectGuid>{916BD89C-B610-4CEE-9CAF-C515D88E2C94}</ProjectGuid>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
|
||||
<DefineConstants>DEBUG;TRACE;</DefineConstants>
|
||||
<OutputPath>.\bin\Debug</OutputPath>
|
||||
<GeneratePDB>True</GeneratePDB>
|
||||
<GenerateMDB>True</GenerateMDB>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
|
||||
<OutputPath>.\bin\Release</OutputPath>
|
||||
<EnableAsserts>False</EnableAsserts>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(MSBuildExtensionsPath)\RemObjects Software\Oxygene\RemObjects.Oxygene.targets" />
|
||||
<ItemGroup>
|
||||
<Reference Include="mscorlib">
|
||||
<HintPath>$(Framework)\mscorlib.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System">
|
||||
<HintPath>$(Framework)\System.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Core">
|
||||
<HintPath>$(ProgramFiles)\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Data">
|
||||
<HintPath>$(Framework)\System.Data.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml">
|
||||
<HintPath>$(Framework)\System.Xml.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Program.pas" />
|
||||
<Content Include="Properties\App.ico" />
|
||||
<Compile Include="Properties\AssemblyInfo.pas" />
|
||||
<EmbeddResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
</EmbeddResource>
|
||||
<Compile Include="Properties\Resources.Designer.pas" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
</None>
|
||||
<Compile Include="Properties\Settings.Designer.pas" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
520
samples/PAWN/grandlarc.pwn
Normal file
520
samples/PAWN/grandlarc.pwn
Normal file
@@ -0,0 +1,520 @@
|
||||
//----------------------------------------------------------
|
||||
//
|
||||
// GRAND LARCENY 1.0
|
||||
// A freeroam gamemode for SA-MP 0.3
|
||||
//
|
||||
//----------------------------------------------------------
|
||||
|
||||
#include <a_samp>
|
||||
#include <core>
|
||||
#include <float>
|
||||
#include "../include/gl_common.inc"
|
||||
#include "../include/gl_spawns.inc"
|
||||
|
||||
#pragma tabsize 0
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
#define COLOR_WHITE 0xFFFFFFFF
|
||||
#define COLOR_NORMAL_PLAYER 0xFFBB7777
|
||||
|
||||
#define CITY_LOS_SANTOS 0
|
||||
#define CITY_SAN_FIERRO 1
|
||||
#define CITY_LAS_VENTURAS 2
|
||||
|
||||
new total_vehicles_from_files=0;
|
||||
|
||||
// Class selection globals
|
||||
new gPlayerCitySelection[MAX_PLAYERS];
|
||||
new gPlayerHasCitySelected[MAX_PLAYERS];
|
||||
new gPlayerLastCitySelectionTick[MAX_PLAYERS];
|
||||
|
||||
new Text:txtClassSelHelper;
|
||||
new Text:txtLosSantos;
|
||||
new Text:txtSanFierro;
|
||||
new Text:txtLasVenturas;
|
||||
|
||||
new thisanimid=0;
|
||||
new lastanimid=0;
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
main()
|
||||
{
|
||||
print("\n---------------------------------------");
|
||||
print("Running Grand Larceny - by the SA-MP team\n");
|
||||
print("---------------------------------------\n");
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
public OnPlayerConnect(playerid)
|
||||
{
|
||||
GameTextForPlayer(playerid,"~w~Grand Larceny",3000,4);
|
||||
SendClientMessage(playerid,COLOR_WHITE,"Welcome to {88AA88}G{FFFFFF}rand {88AA88}L{FFFFFF}arceny");
|
||||
|
||||
// class selection init vars
|
||||
gPlayerCitySelection[playerid] = -1;
|
||||
gPlayerHasCitySelected[playerid] = 0;
|
||||
gPlayerLastCitySelectionTick[playerid] = GetTickCount();
|
||||
|
||||
//SetPlayerColor(playerid,COLOR_NORMAL_PLAYER);
|
||||
|
||||
//Kick(playerid);
|
||||
|
||||
/*
|
||||
Removes vending machines
|
||||
RemoveBuildingForPlayer(playerid, 1302, 0.0, 0.0, 0.0, 6000.0);
|
||||
RemoveBuildingForPlayer(playerid, 1209, 0.0, 0.0, 0.0, 6000.0);
|
||||
RemoveBuildingForPlayer(playerid, 955, 0.0, 0.0, 0.0, 6000.0);
|
||||
RemoveBuildingForPlayer(playerid, 1775, 0.0, 0.0, 0.0, 6000.0);
|
||||
RemoveBuildingForPlayer(playerid, 1776, 0.0, 0.0, 0.0, 6000.0);
|
||||
*/
|
||||
|
||||
/*
|
||||
new ClientVersion[32];
|
||||
GetPlayerVersion(playerid, ClientVersion, 32);
|
||||
printf("Player %d reports client version: %s", playerid, ClientVersion);*/
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
public OnPlayerSpawn(playerid)
|
||||
{
|
||||
if(IsPlayerNPC(playerid)) return 1;
|
||||
|
||||
new randSpawn = 0;
|
||||
|
||||
SetPlayerInterior(playerid,0);
|
||||
TogglePlayerClock(playerid,0);
|
||||
ResetPlayerMoney(playerid);
|
||||
GivePlayerMoney(playerid, 30000);
|
||||
|
||||
if(CITY_LOS_SANTOS == gPlayerCitySelection[playerid]) {
|
||||
randSpawn = random(sizeof(gRandomSpawns_LosSantos));
|
||||
SetPlayerPos(playerid,
|
||||
gRandomSpawns_LosSantos[randSpawn][0],
|
||||
gRandomSpawns_LosSantos[randSpawn][1],
|
||||
gRandomSpawns_LosSantos[randSpawn][2]);
|
||||
SetPlayerFacingAngle(playerid,gRandomSpawns_LosSantos[randSpawn][3]);
|
||||
}
|
||||
else if(CITY_SAN_FIERRO == gPlayerCitySelection[playerid]) {
|
||||
randSpawn = random(sizeof(gRandomSpawns_SanFierro));
|
||||
SetPlayerPos(playerid,
|
||||
gRandomSpawns_SanFierro[randSpawn][0],
|
||||
gRandomSpawns_SanFierro[randSpawn][1],
|
||||
gRandomSpawns_SanFierro[randSpawn][2]);
|
||||
SetPlayerFacingAngle(playerid,gRandomSpawns_SanFierro[randSpawn][3]);
|
||||
}
|
||||
else if(CITY_LAS_VENTURAS == gPlayerCitySelection[playerid]) {
|
||||
randSpawn = random(sizeof(gRandomSpawns_LasVenturas));
|
||||
SetPlayerPos(playerid,
|
||||
gRandomSpawns_LasVenturas[randSpawn][0],
|
||||
gRandomSpawns_LasVenturas[randSpawn][1],
|
||||
gRandomSpawns_LasVenturas[randSpawn][2]);
|
||||
SetPlayerFacingAngle(playerid,gRandomSpawns_LasVenturas[randSpawn][3]);
|
||||
}
|
||||
|
||||
//SetPlayerColor(playerid,COLOR_NORMAL_PLAYER);
|
||||
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_PISTOL_SILENCED,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_DESERT_EAGLE,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_SHOTGUN,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_SAWNOFF_SHOTGUN,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_SPAS12_SHOTGUN,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_MICRO_UZI,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_MP5,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_AK47,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_M4,200);
|
||||
SetPlayerSkillLevel(playerid,WEAPONSKILL_SNIPERRIFLE,200);
|
||||
|
||||
GivePlayerWeapon(playerid,WEAPON_COLT45,100);
|
||||
//GivePlayerWeapon(playerid,WEAPON_MP5,100);
|
||||
TogglePlayerClock(playerid, 0);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
public OnPlayerDeath(playerid, killerid, reason)
|
||||
{
|
||||
new playercash;
|
||||
|
||||
// if they ever return to class selection make them city
|
||||
// select again first
|
||||
gPlayerHasCitySelected[playerid] = 0;
|
||||
|
||||
if(killerid == INVALID_PLAYER_ID) {
|
||||
ResetPlayerMoney(playerid);
|
||||
} else {
|
||||
playercash = GetPlayerMoney(playerid);
|
||||
if(playercash > 0) {
|
||||
GivePlayerMoney(killerid, playercash);
|
||||
ResetPlayerMoney(playerid);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
ClassSel_SetupCharSelection(playerid)
|
||||
{
|
||||
if(gPlayerCitySelection[playerid] == CITY_LOS_SANTOS) {
|
||||
SetPlayerInterior(playerid,11);
|
||||
SetPlayerPos(playerid,508.7362,-87.4335,998.9609);
|
||||
SetPlayerFacingAngle(playerid,0.0);
|
||||
SetPlayerCameraPos(playerid,508.7362,-83.4335,998.9609);
|
||||
SetPlayerCameraLookAt(playerid,508.7362,-87.4335,998.9609);
|
||||
}
|
||||
else if(gPlayerCitySelection[playerid] == CITY_SAN_FIERRO) {
|
||||
SetPlayerInterior(playerid,3);
|
||||
SetPlayerPos(playerid,-2673.8381,1399.7424,918.3516);
|
||||
SetPlayerFacingAngle(playerid,181.0);
|
||||
SetPlayerCameraPos(playerid,-2673.2776,1394.3859,918.3516);
|
||||
SetPlayerCameraLookAt(playerid,-2673.8381,1399.7424,918.3516);
|
||||
}
|
||||
else if(gPlayerCitySelection[playerid] == CITY_LAS_VENTURAS) {
|
||||
SetPlayerInterior(playerid,3);
|
||||
SetPlayerPos(playerid,349.0453,193.2271,1014.1797);
|
||||
SetPlayerFacingAngle(playerid,286.25);
|
||||
SetPlayerCameraPos(playerid,352.9164,194.5702,1014.1875);
|
||||
SetPlayerCameraLookAt(playerid,349.0453,193.2271,1014.1797);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
// Used to init textdraws of city names
|
||||
|
||||
ClassSel_InitCityNameText(Text:txtInit)
|
||||
{
|
||||
TextDrawUseBox(txtInit, 0);
|
||||
TextDrawLetterSize(txtInit,1.25,3.0);
|
||||
TextDrawFont(txtInit, 0);
|
||||
TextDrawSetShadow(txtInit,0);
|
||||
TextDrawSetOutline(txtInit,1);
|
||||
TextDrawColor(txtInit,0xEEEEEEFF);
|
||||
TextDrawBackgroundColor(txtClassSelHelper,0x000000FF);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
ClassSel_InitTextDraws()
|
||||
{
|
||||
// Init our observer helper text display
|
||||
txtLosSantos = TextDrawCreate(10.0, 380.0, "Los Santos");
|
||||
ClassSel_InitCityNameText(txtLosSantos);
|
||||
txtSanFierro = TextDrawCreate(10.0, 380.0, "San Fierro");
|
||||
ClassSel_InitCityNameText(txtSanFierro);
|
||||
txtLasVenturas = TextDrawCreate(10.0, 380.0, "Las Venturas");
|
||||
ClassSel_InitCityNameText(txtLasVenturas);
|
||||
|
||||
// Init our observer helper text display
|
||||
txtClassSelHelper = TextDrawCreate(10.0, 415.0,
|
||||
" Press ~b~~k~~GO_LEFT~ ~w~or ~b~~k~~GO_RIGHT~ ~w~to switch cities.~n~ Press ~r~~k~~PED_FIREWEAPON~ ~w~to select.");
|
||||
TextDrawUseBox(txtClassSelHelper, 1);
|
||||
TextDrawBoxColor(txtClassSelHelper,0x222222BB);
|
||||
TextDrawLetterSize(txtClassSelHelper,0.3,1.0);
|
||||
TextDrawTextSize(txtClassSelHelper,400.0,40.0);
|
||||
TextDrawFont(txtClassSelHelper, 2);
|
||||
TextDrawSetShadow(txtClassSelHelper,0);
|
||||
TextDrawSetOutline(txtClassSelHelper,1);
|
||||
TextDrawBackgroundColor(txtClassSelHelper,0x000000FF);
|
||||
TextDrawColor(txtClassSelHelper,0xFFFFFFFF);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
ClassSel_SetupSelectedCity(playerid)
|
||||
{
|
||||
if(gPlayerCitySelection[playerid] == -1) {
|
||||
gPlayerCitySelection[playerid] = CITY_LOS_SANTOS;
|
||||
}
|
||||
|
||||
if(gPlayerCitySelection[playerid] == CITY_LOS_SANTOS) {
|
||||
SetPlayerInterior(playerid,0);
|
||||
SetPlayerCameraPos(playerid,1630.6136,-2286.0298,110.0);
|
||||
SetPlayerCameraLookAt(playerid,1887.6034,-1682.1442,47.6167);
|
||||
|
||||
TextDrawShowForPlayer(playerid,txtLosSantos);
|
||||
TextDrawHideForPlayer(playerid,txtSanFierro);
|
||||
TextDrawHideForPlayer(playerid,txtLasVenturas);
|
||||
}
|
||||
else if(gPlayerCitySelection[playerid] == CITY_SAN_FIERRO) {
|
||||
SetPlayerInterior(playerid,0);
|
||||
SetPlayerCameraPos(playerid,-1300.8754,68.0546,129.4823);
|
||||
SetPlayerCameraLookAt(playerid,-1817.9412,769.3878,132.6589);
|
||||
|
||||
TextDrawHideForPlayer(playerid,txtLosSantos);
|
||||
TextDrawShowForPlayer(playerid,txtSanFierro);
|
||||
TextDrawHideForPlayer(playerid,txtLasVenturas);
|
||||
}
|
||||
else if(gPlayerCitySelection[playerid] == CITY_LAS_VENTURAS) {
|
||||
SetPlayerInterior(playerid,0);
|
||||
SetPlayerCameraPos(playerid,1310.6155,1675.9182,110.7390);
|
||||
SetPlayerCameraLookAt(playerid,2285.2944,1919.3756,68.2275);
|
||||
|
||||
TextDrawHideForPlayer(playerid,txtLosSantos);
|
||||
TextDrawHideForPlayer(playerid,txtSanFierro);
|
||||
TextDrawShowForPlayer(playerid,txtLasVenturas);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
ClassSel_SwitchToNextCity(playerid)
|
||||
{
|
||||
gPlayerCitySelection[playerid]++;
|
||||
if(gPlayerCitySelection[playerid] > CITY_LAS_VENTURAS) {
|
||||
gPlayerCitySelection[playerid] = CITY_LOS_SANTOS;
|
||||
}
|
||||
PlayerPlaySound(playerid,1052,0.0,0.0,0.0);
|
||||
gPlayerLastCitySelectionTick[playerid] = GetTickCount();
|
||||
ClassSel_SetupSelectedCity(playerid);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
ClassSel_SwitchToPreviousCity(playerid)
|
||||
{
|
||||
gPlayerCitySelection[playerid]--;
|
||||
if(gPlayerCitySelection[playerid] < CITY_LOS_SANTOS) {
|
||||
gPlayerCitySelection[playerid] = CITY_LAS_VENTURAS;
|
||||
}
|
||||
PlayerPlaySound(playerid,1053,0.0,0.0,0.0);
|
||||
gPlayerLastCitySelectionTick[playerid] = GetTickCount();
|
||||
ClassSel_SetupSelectedCity(playerid);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
ClassSel_HandleCitySelection(playerid)
|
||||
{
|
||||
new Keys,ud,lr;
|
||||
GetPlayerKeys(playerid,Keys,ud,lr);
|
||||
|
||||
if(gPlayerCitySelection[playerid] == -1) {
|
||||
ClassSel_SwitchToNextCity(playerid);
|
||||
return;
|
||||
}
|
||||
|
||||
// only allow new selection every ~500 ms
|
||||
if( (GetTickCount() - gPlayerLastCitySelectionTick[playerid]) < 500 ) return;
|
||||
|
||||
if(Keys & KEY_FIRE) {
|
||||
gPlayerHasCitySelected[playerid] = 1;
|
||||
TextDrawHideForPlayer(playerid,txtClassSelHelper);
|
||||
TextDrawHideForPlayer(playerid,txtLosSantos);
|
||||
TextDrawHideForPlayer(playerid,txtSanFierro);
|
||||
TextDrawHideForPlayer(playerid,txtLasVenturas);
|
||||
TogglePlayerSpectating(playerid,0);
|
||||
return;
|
||||
}
|
||||
|
||||
if(lr > 0) {
|
||||
ClassSel_SwitchToNextCity(playerid);
|
||||
}
|
||||
else if(lr < 0) {
|
||||
ClassSel_SwitchToPreviousCity(playerid);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
public OnPlayerRequestClass(playerid, classid)
|
||||
{
|
||||
if(IsPlayerNPC(playerid)) return 1;
|
||||
|
||||
if(gPlayerHasCitySelected[playerid]) {
|
||||
ClassSel_SetupCharSelection(playerid);
|
||||
return 1;
|
||||
} else {
|
||||
if(GetPlayerState(playerid) != PLAYER_STATE_SPECTATING) {
|
||||
TogglePlayerSpectating(playerid,1);
|
||||
TextDrawShowForPlayer(playerid, txtClassSelHelper);
|
||||
gPlayerCitySelection[playerid] = -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
public OnGameModeInit()
|
||||
{
|
||||
SetGameModeText("Grand Larceny");
|
||||
ShowPlayerMarkers(PLAYER_MARKERS_MODE_GLOBAL);
|
||||
ShowNameTags(1);
|
||||
SetNameTagDrawDistance(40.0);
|
||||
EnableStuntBonusForAll(0);
|
||||
DisableInteriorEnterExits();
|
||||
SetWeather(2);
|
||||
SetWorldTime(11);
|
||||
|
||||
//UsePlayerPedAnims();
|
||||
//ManualVehicleEngineAndLights();
|
||||
//LimitGlobalChatRadius(300.0);
|
||||
|
||||
ClassSel_InitTextDraws();
|
||||
|
||||
// Player Class
|
||||
AddPlayerClass(281,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(282,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(283,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(284,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(285,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(286,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(287,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(288,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(289,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(265,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(266,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(267,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(268,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(269,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(270,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(1,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(2,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(3,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(4,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(5,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(6,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(8,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(42,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(65,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
//AddPlayerClass(74,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(86,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(119,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(149,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(208,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(273,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(289,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
|
||||
AddPlayerClass(47,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(48,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(49,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(50,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(51,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(52,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(53,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(54,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(55,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(56,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(57,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(58,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(68,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(69,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(70,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(71,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(72,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(73,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(75,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(76,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(78,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(79,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(80,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(81,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(82,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(83,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(84,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(85,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(87,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(88,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(89,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(91,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(92,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(93,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(95,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(96,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(97,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(98,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
AddPlayerClass(99,1759.0189,-1898.1260,13.5622,266.4503,-1,-1,-1,-1,-1,-1);
|
||||
|
||||
// SPECIAL
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/trains.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/pilots.txt");
|
||||
|
||||
// LAS VENTURAS
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/lv_law.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/lv_airport.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/lv_gen.txt");
|
||||
|
||||
// SAN FIERRO
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/sf_law.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/sf_airport.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/sf_gen.txt");
|
||||
|
||||
// LOS SANTOS
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_law.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_airport.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_gen_inner.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/ls_gen_outer.txt");
|
||||
|
||||
// OTHER AREAS
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/whetstone.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/bone.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/flint.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/tierra.txt");
|
||||
total_vehicles_from_files += LoadStaticVehiclesFromFile("vehicles/red_county.txt");
|
||||
|
||||
printf("Total vehicles from files: %d",total_vehicles_from_files);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
|
||||
public OnPlayerUpdate(playerid)
|
||||
{
|
||||
if(!IsPlayerConnected(playerid)) return 0;
|
||||
if(IsPlayerNPC(playerid)) return 1;
|
||||
|
||||
// changing cities by inputs
|
||||
if( !gPlayerHasCitySelected[playerid] &&
|
||||
GetPlayerState(playerid) == PLAYER_STATE_SPECTATING ) {
|
||||
ClassSel_HandleCitySelection(playerid);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// No weapons in interiors
|
||||
if(GetPlayerInterior(playerid) != 0 && GetPlayerWeapon(playerid) != 0) {
|
||||
SetPlayerArmedWeapon(playerid,0); // fists
|
||||
return 0; // no syncing until they change their weapon
|
||||
}
|
||||
|
||||
// Don't allow minigun
|
||||
if(GetPlayerWeapon(playerid) == WEAPON_MINIGUN) {
|
||||
Kick(playerid);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* No jetpacks allowed
|
||||
if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK) {
|
||||
Kick(playerid);
|
||||
return 0;
|
||||
}*/
|
||||
|
||||
/* For testing animations
|
||||
new msg[128+1];
|
||||
new animlib[32+1];
|
||||
new animname[32+1];
|
||||
|
||||
thisanimid = GetPlayerAnimationIndex(playerid);
|
||||
if(lastanimid != thisanimid)
|
||||
{
|
||||
GetAnimationName(thisanimid,animlib,32,animname,32);
|
||||
format(msg, 128, "anim(%d,%d): %s %s", lastanimid, thisanimid, animlib, animname);
|
||||
lastanimid = thisanimid;
|
||||
SendClientMessage(playerid, 0xFFFFFFFF, msg);
|
||||
}*/
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------
|
||||
23
samples/Perl6/RoleQ.pm6
Normal file
23
samples/Perl6/RoleQ.pm6
Normal file
@@ -0,0 +1,23 @@
|
||||
role q {
|
||||
token stopper { \' }
|
||||
|
||||
token escape:sym<\\> { <sym> <item=.backslash> }
|
||||
|
||||
token backslash:sym<qq> { <?before 'q'> <quote=.LANG('MAIN','quote')> }
|
||||
token backslash:sym<\\> { <text=.sym> }
|
||||
token backslash:sym<stopper> { <text=.stopper> }
|
||||
|
||||
token backslash:sym<miscq> { {} . }
|
||||
|
||||
method tweak_q($v) { self.panic("Too late for :q") }
|
||||
method tweak_qq($v) { self.panic("Too late for :qq") }
|
||||
}
|
||||
|
||||
role qq does b1 does c1 does s1 does a1 does h1 does f1 {
|
||||
token stopper { \" }
|
||||
token backslash:sym<unrec> { {} (\w) { self.throw_unrecog_backslash_seq: $/[0].Str } }
|
||||
token backslash:sym<misc> { \W }
|
||||
|
||||
method tweak_q($v) { self.panic("Too late for :q") }
|
||||
method tweak_qq($v) { self.panic("Too late for :qq") }
|
||||
}
|
||||
22
samples/Perl6/grammar-test.p6
Normal file
22
samples/Perl6/grammar-test.p6
Normal file
@@ -0,0 +1,22 @@
|
||||
token pod_formatting_code {
|
||||
$<code>=<[A..Z]>
|
||||
'<' { $*POD_IN_FORMATTINGCODE := 1 }
|
||||
$<content>=[ <!before '>'> <pod_string_character> ]+
|
||||
'>' { $*POD_IN_FORMATTINGCODE := 0 }
|
||||
}
|
||||
|
||||
token pod_string {
|
||||
<pod_string_character>+
|
||||
}
|
||||
|
||||
token something:sym«<» {
|
||||
<!>
|
||||
}
|
||||
|
||||
token name {
|
||||
<!>
|
||||
}
|
||||
|
||||
token comment:sym<#> {
|
||||
'#' {} \N*
|
||||
}
|
||||
252
samples/Perl6/test.p6
Normal file
252
samples/Perl6/test.p6
Normal file
@@ -0,0 +1,252 @@
|
||||
#!/usr/bin/env perl6
|
||||
|
||||
use v6;
|
||||
|
||||
my $string = 'I look like a # comment!';
|
||||
|
||||
if $string eq 'foo' {
|
||||
say 'hello';
|
||||
}
|
||||
|
||||
regex http-verb {
|
||||
'GET'
|
||||
| 'POST'
|
||||
| 'PUT'
|
||||
| 'DELETE'
|
||||
| 'TRACE'
|
||||
| 'OPTIONS'
|
||||
| 'HEAD'
|
||||
}
|
||||
|
||||
# a sample comment
|
||||
|
||||
say 'Hello from Perl 6!'
|
||||
|
||||
|
||||
#`{
|
||||
multi-line comment!
|
||||
}
|
||||
|
||||
say 'here';
|
||||
|
||||
#`(
|
||||
multi-line comment!
|
||||
)
|
||||
|
||||
say 'here';
|
||||
|
||||
#`{{{
|
||||
I'm a special comment!
|
||||
}}}
|
||||
|
||||
say 'there';
|
||||
|
||||
#`{{
|
||||
I'm { even } specialer!
|
||||
}}
|
||||
|
||||
say 'there';
|
||||
|
||||
#`{{
|
||||
does {{nesting}} work?
|
||||
}}
|
||||
|
||||
#`«<
|
||||
trying mixed delimiters
|
||||
»
|
||||
|
||||
my $string = qq<Hooray, arbitrary delimiter!>;
|
||||
my $string = qq«Hooray, arbitrary delimiter!»;
|
||||
my $string = q <now with whitespace!>;
|
||||
my $string = qq<<more strings>>;
|
||||
|
||||
my %hash := Hash.new;
|
||||
|
||||
=begin pod
|
||||
|
||||
Here's some POD! Wooo
|
||||
|
||||
=end pod
|
||||
|
||||
=for Testing
|
||||
This is POD (see? role isn't highlighted)
|
||||
|
||||
say('this is not!');
|
||||
|
||||
=table
|
||||
Of role things
|
||||
|
||||
say('not in your table');
|
||||
#= A single line declarator "block" (with a keyword like role)
|
||||
#| Another single line declarator "block" (with a keyword like role)
|
||||
#={
|
||||
A declarator block (with a keyword like role)
|
||||
}
|
||||
#|{
|
||||
Another declarator block (with a keyword like role)
|
||||
}
|
||||
#= { A single line declarator "block" with a brace (with a keyword like role)
|
||||
#=«
|
||||
More declarator blocks! (with a keyword like role)
|
||||
»
|
||||
#|«
|
||||
More declarator blocks! (with a keyword like role)
|
||||
»
|
||||
|
||||
say 'Moar code!';
|
||||
|
||||
my $don't = 16;
|
||||
|
||||
sub don't($x) {
|
||||
!$x
|
||||
}
|
||||
|
||||
say don't 'foo';
|
||||
|
||||
my %hash = (
|
||||
:foo(1),
|
||||
);
|
||||
|
||||
say %hash<foo>;
|
||||
say %hash<<foo>>;
|
||||
say %hash«foo»;
|
||||
|
||||
say %*hash<foo>;
|
||||
say %*hash<<foo>>;
|
||||
say %*hash«foo»;
|
||||
|
||||
say $<todo>;
|
||||
say $<todo>;
|
||||
|
||||
for (@A Z @B) -> $a, $b {
|
||||
say $a + $b;
|
||||
}
|
||||
|
||||
Q:PIR {
|
||||
.loadlib "somelib"
|
||||
}
|
||||
|
||||
my $longstring = q/
|
||||
lots
|
||||
of
|
||||
text
|
||||
/;
|
||||
|
||||
my $heredoc = q:to/END_SQL/;
|
||||
SELECT * FROM Users
|
||||
WHERE first_name = 'Rob'
|
||||
END_SQL
|
||||
my $hello;
|
||||
|
||||
# Fun with regexen
|
||||
|
||||
if 'food' ~~ /foo/ {
|
||||
say 'match!'
|
||||
}
|
||||
|
||||
my $re = /foo/;
|
||||
my $re2 = m/ foo /;
|
||||
my $re3 = m:i/ FOO /;
|
||||
|
||||
call-a-sub(/ foo /);
|
||||
call-a-sub(/ foo \/ bar /);
|
||||
|
||||
my $re4 = rx/something | something-else/;
|
||||
my $result = ms/regexy stuff/;
|
||||
my $sub0 = s/regexy stuff/more stuff/;
|
||||
my $sub = ss/regexy stuff/more stuff/;
|
||||
my $trans = tr/regexy stuff/more stuff/;
|
||||
|
||||
my @values = <a b c d>;
|
||||
call-sub(<a b c d>);
|
||||
call-sub <a b c d>;
|
||||
|
||||
my $result = $a < $b;
|
||||
|
||||
for <a b c d> -> $letter {
|
||||
say $letter;
|
||||
}
|
||||
|
||||
sub test-sub {
|
||||
say @_;
|
||||
say $!;
|
||||
say $/;
|
||||
say $0;
|
||||
say $1;
|
||||
say @*ARGS;
|
||||
say $*ARGFILES;
|
||||
say &?BLOCK;
|
||||
say ::?CLASS;
|
||||
say $?CLASS;
|
||||
say @=COMMENT;
|
||||
say %?CONFIG;
|
||||
say $*CWD;
|
||||
say $=data;
|
||||
say %?DEEPMAGIC;
|
||||
say $?DISTRO;
|
||||
say $*DISTRO;
|
||||
say $*EGID;
|
||||
say %*ENV;
|
||||
say $*ERR;
|
||||
say $*EUID;
|
||||
say $*EXECUTABLE_NAME;
|
||||
say $?FILE;
|
||||
say $?GRAMMAR;
|
||||
say $*GID;
|
||||
say $*IN;
|
||||
say @*INC;
|
||||
say %?LANG;
|
||||
say $*LANG;
|
||||
say $?LINE;
|
||||
say %*META-ARGS;
|
||||
say $?MODULE;
|
||||
say %*OPTS;
|
||||
say %*OPT;
|
||||
say $?KERNEL;
|
||||
say $*KERNEL;
|
||||
say $*OUT;
|
||||
say $?PACKAGE;
|
||||
say $?PERL;
|
||||
say $*PERL;
|
||||
say $*PID;
|
||||
say %=pod;
|
||||
say $*PROGRAM_NAME;
|
||||
say %*PROTOCOLS;
|
||||
say ::?ROLE;
|
||||
say $?ROLE;
|
||||
say &?ROUTINE;
|
||||
say $?SCOPE;
|
||||
say $*TZ;
|
||||
say $*UID;
|
||||
say $?USAGE;
|
||||
say $?VM;
|
||||
say $?XVM;
|
||||
}
|
||||
|
||||
say <a b c>;
|
||||
|
||||
my $perl5_re = m:P5/ fo{2} /;
|
||||
my $re5 = rx«something | something-else»;
|
||||
|
||||
my $M := %*COMPILING<%?OPTIONS><M>;
|
||||
|
||||
say $M;
|
||||
|
||||
sub regex-name { ... }
|
||||
my $pair = role-name => 'foo';
|
||||
$pair = rolesque => 'foo';
|
||||
|
||||
my sub something(Str:D $value) { ... }
|
||||
|
||||
my $s = q«<
|
||||
some
|
||||
string
|
||||
stuff
|
||||
»;
|
||||
|
||||
my $regex = m«< some chars »;
|
||||
# after
|
||||
|
||||
say $/<foo><bar>;
|
||||
|
||||
roleq;
|
||||
159
samples/Pod/contents.pod
Normal file
159
samples/Pod/contents.pod
Normal file
@@ -0,0 +1,159 @@
|
||||
$Id: contents.pod,v 1.3 2003/05/04 04:05:14 tower Exp $
|
||||
|
||||
=begin html
|
||||
|
||||
<style = "text/css">
|
||||
code { font-family: sans-serif; font-weight:bold; }
|
||||
</style>
|
||||
|
||||
=end html
|
||||
|
||||
=head1 Net::Z3950::AsyncZ
|
||||
|
||||
=head2 Intro
|
||||
|
||||
Net::Z3950::AsyncZ adds an additional layer of asynchronous support for the Z3950 module through the use
|
||||
of multiple forked processes. I hope that users will also find that it provides a convenient
|
||||
front end to C<Net::Z3950>. My initial idea was to write something that
|
||||
would provide a convenient means of processing and formatting Z39.50 records--which I
|
||||
did, using the C<Z3950> synchronous code. But I also wanted something that could
|
||||
handle queries to large numbers of servers at one session. Working on this part of my
|
||||
project, I found that I had trouble with the C<Z3950> asynchronous features
|
||||
and so ended up with what I have here.
|
||||
|
||||
=begin html
|
||||
|
||||
I give a more detailed account in the <A href="AsyncZ.html#apologia"><B>DESCRIPTION</b></a>
|
||||
section of <code>AsyncZ.html</code>.
|
||||
|
||||
=end html
|
||||
|
||||
=pod
|
||||
|
||||
I give a more detailed account in in the B<DESCRIPTION> section of C<AsyncZ.pod>.
|
||||
|
||||
=cut
|
||||
|
||||
=head2 Documentation
|
||||
|
||||
=pod
|
||||
|
||||
=over 4
|
||||
|
||||
=item AsyncZ.pod
|
||||
|
||||
This is the starting point--it gives an overview of the AsyncZ module,
|
||||
describes the basic mechanics of its asynchronous workings, and details
|
||||
the particulars of the objects and methods. But see
|
||||
L</"Examples.pod> for detailed explanations of the sample
|
||||
scripts which come with the C<Net::Z3950::AsyncZ> distribution.
|
||||
|
||||
=item Options.pod
|
||||
|
||||
This document details the various options that can be set to modify
|
||||
the behavior of AsyncZ Index
|
||||
|
||||
=item Report.pod
|
||||
|
||||
Report.pod deals with how records are treated line by line
|
||||
and how you can affect the apearance of a record's line by line output
|
||||
|
||||
=item Examples.pod
|
||||
|
||||
This document goes through the sample scripts that come with the
|
||||
C<Net::Z3950::AsyncZ> distribution and annotates them
|
||||
in a line-by-line fashion. It's a basic HOW-TO.
|
||||
|
||||
=back
|
||||
|
||||
=cut
|
||||
|
||||
=begin html
|
||||
|
||||
<UL>
|
||||
<LI>
|
||||
<A href="AsyncZ.html">AsyncZ.html</a>
|
||||
<br>This is the starting point--it gives an overview of the AsyncZ module,
|
||||
describes the basic mechanics of its asynchronous workings, and details
|
||||
the particulars of the objects and methods. But see
|
||||
<a href="#examples">Examples</a> for detailed explanations of the sample
|
||||
scripts which come with the <code>Net::Z3950::AsyncZ</code> distribution.
|
||||
|
||||
<LI>
|
||||
<A href="Options.html">Options.html</a>
|
||||
<br> This document details the various options that can be set to modify
|
||||
the behavior of <code>AsyncZ</code>
|
||||
|
||||
<LI>
|
||||
<A href="Report.html">Report.html</a>
|
||||
<br><Code>Report.html</code> deals with how records are treated line by line
|
||||
and how you can affect the apearance of a record's line by line output
|
||||
|
||||
<LI><A name = "examples"></a>
|
||||
<A href="Examples.html">Examples.html</a>
|
||||
This document goes through the sample scripts that come with the
|
||||
<code>Net::Z3950::AsyncZ</code> distribution and annotates them
|
||||
in a line-by-line fashion. It's a basic HOW-TO.
|
||||
|
||||
</UL>
|
||||
|
||||
=end html
|
||||
|
||||
=head2 The Modules
|
||||
|
||||
=pod
|
||||
|
||||
There are more modules than there is documentation. The reason for this
|
||||
is that the only module you have full and complete access to is
|
||||
C<Net::Z3950::AsyncZ>. The other modules are either internal to C<Net::AsyncZ>
|
||||
or accessed indirectly or in part indirectly.
|
||||
|
||||
=cut
|
||||
|
||||
=for html
|
||||
There are more modules than there is documentation. The reason for this
|
||||
is that the only module you have full and complete access to is
|
||||
<code>Net::Z3950::AsyncZ</code>. The other modules are either internal to <code>Net::AsyncZ</code>
|
||||
or accessed indirectly or in part indirectly.
|
||||
|
||||
=head3 Here are the modules:
|
||||
|
||||
=over 4
|
||||
|
||||
=item Net::Z3950::AsyncZ
|
||||
|
||||
The main module: direct access --documented in
|
||||
C<AsyncZ> and C<Options> documentation
|
||||
|
||||
=item Net::Z3950::AsyncZ::ErrMsg
|
||||
|
||||
User error message handling: indirect access -- documented in
|
||||
C<AsyncZ> documentation
|
||||
|
||||
=item Net::Z3950::AsyncZ::Errors
|
||||
|
||||
Error handling for debugging: limited access -- documented in
|
||||
C<AsyncZ> documentation
|
||||
|
||||
=item Net::Z3950::AsyncZ::Report
|
||||
|
||||
Module reponsible for fetching and formatting records: limited access -- documented
|
||||
|
||||
=item Net::Z3950::AsyncZ::ZLoop
|
||||
|
||||
Event loop for child processes: no access -- not documented
|
||||
|
||||
=item Net::Z3950::AsyncZ::ZSend
|
||||
|
||||
Connection details for child processes: no access -- not documented
|
||||
|
||||
=item Net::Z3950::AsyncZ::Options::_params
|
||||
|
||||
Options for child processes: direct and indirect access -- documented
|
||||
in C<Options> and C<AsyncZ> documentation
|
||||
|
||||
=back
|
||||
|
||||
=head1 INDEX
|
||||
|
||||
|
||||
41
samples/PostScript/sierpinski.ps
Normal file
41
samples/PostScript/sierpinski.ps
Normal file
@@ -0,0 +1,41 @@
|
||||
%!PS-Adobe-3.0
|
||||
%%Creator: Aaron Puchert
|
||||
%%Title: The Sierpinski triangle
|
||||
%%Pages: 1
|
||||
%%PageOrder: Ascend
|
||||
|
||||
%%BeginProlog
|
||||
% PAGE SETTINGS
|
||||
/pageset {
|
||||
28.3464566 28.3464566 scale % set cm = 1
|
||||
0.5 0.5 translate
|
||||
0 setlinewidth
|
||||
} def
|
||||
|
||||
% sierpinski(n) draws a sierpinski triangle of order n
|
||||
/sierpinski {
|
||||
dup 0 gt {
|
||||
[0.5 0 0 0.5 0 0] concat dup 1 sub sierpinski
|
||||
[1 0 0 1 1 0] concat dup 1 sub sierpinski
|
||||
[1 0 0 1 -1 1] concat dup 1 sub sierpinski
|
||||
[2 0 0 2 0 -1] concat
|
||||
} {
|
||||
newpath
|
||||
0 0 moveto
|
||||
1 0 lineto
|
||||
0 1 lineto
|
||||
closepath
|
||||
fill
|
||||
} ifelse pop} def
|
||||
%%EndProlog
|
||||
|
||||
%%BeginSetup
|
||||
<< /PageSize [596 843] >> setpagedevice % A4
|
||||
%%EndSetup
|
||||
|
||||
%%Page: Test 1
|
||||
pageset
|
||||
[20 0 10 300 sqrt 0 0] concat
|
||||
9 sierpinski
|
||||
showpage
|
||||
%%EOF
|
||||
@@ -1,68 +0,0 @@
|
||||
action_module(calculator) .
|
||||
|
||||
|
||||
%[-,-,d1,-] --push(D)--> [-,-,D,-] if mode(init)
|
||||
push(D) < -
|
||||
mode(init),
|
||||
deny([displayed(D1),mode(init)]),
|
||||
affirm([displayed(D),mode(cont)]).
|
||||
|
||||
%[-,-,D1,-] --push(D)--> [-,-,10*D1+D,-] if mode(cont)
|
||||
push(D) < -
|
||||
mode(cont),
|
||||
deny(displayed(D1)),
|
||||
New = 10*D1 + D,
|
||||
affirm(displayed(New)).
|
||||
|
||||
%[a,op,d,m] --push(clear)--> [0,nop,0,0]
|
||||
push(clear) < -
|
||||
deny([accumulator(A),op(O),displayed(D),memory(M),mode(X)]),
|
||||
affirm([accumulator(0),op(nop),displayed(0),memory(0),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(mem_rec)--> [a,op,m,m]
|
||||
push(mem_rec) < -
|
||||
memory(M),
|
||||
deny([displayed(D),mode(X)]),
|
||||
affirm([displayed(M),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(plus)--> [op(a,d),plus,d,m]
|
||||
push(plus) < -
|
||||
displayed(D),
|
||||
deny([accumulator(A),op(O),mode(X)]),
|
||||
eval(O,A,D,V), ; use normal arithmetic, i.e., V=O(A,D)
|
||||
affirm([accumulator(V),op(plus),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(minus)--> [op(a,d,minus,d,m]
|
||||
push(minus) lt -
|
||||
displayed(D),
|
||||
deny([accumulator(A),op(O),mode(X)]),
|
||||
eval(O,A,D,V), ; use normal arithmetic, i.e., V=O(A,D)
|
||||
affirm([accumulator(V),op(minus),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(times)--> [op(a,d),times,d,m]
|
||||
push(times) < -
|
||||
displayed(D),
|
||||
deny([accumulator(A),op(O),mode(X)]),
|
||||
eval(O,A,D,V), ; use normal arithmetic, i.e., V=O(A,D)
|
||||
affirm([accumulator(V),op(times),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(equal)--> [a,nop,op(a,d),m]
|
||||
push(equal) < -
|
||||
accumulator(A),
|
||||
deny([op(O),displayed(D),mode(X)]),
|
||||
eval(O,A,D,V),
|
||||
affirm([op(nop),displayed(V),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(mem_plus)--> [a,nop,v,plus(m,v)] where v=op(a,d)
|
||||
push(mem_plus) < -
|
||||
accumulator(A),
|
||||
deny([op(O),displayed(D),memory(M),mode(X)]),
|
||||
eval(O,A,D,V),
|
||||
eval(plus,M,V,V1),
|
||||
affirm([op(nop),displayed(V),memory(V1),mode(init)]).
|
||||
|
||||
%[a,op,d,m] --push(plus_minus)--> [a,op,-d,m]
|
||||
push(clear) < -
|
||||
deny([displayed(D),mode(X)]),
|
||||
eval(minus,0,D,V),
|
||||
affirm([displayed(V),mode(init)]).
|
||||
@@ -1,94 +0,0 @@
|
||||
%%----- normalize(+Wff,-NormalClauses) ------
|
||||
normalize(Wff,NormalClauses) :-
|
||||
conVert(Wff,[],S),
|
||||
cnF(S,T),
|
||||
flatten_and(T,U),
|
||||
make_clauses(U,NormalClauses).
|
||||
|
||||
%%----- make a sequence out of a conjunction -----
|
||||
flatten_and(X /\ Y, F) :-
|
||||
!,
|
||||
flatten_and(X,A),
|
||||
flatten_and(Y, B),
|
||||
sequence_append(A,B,F).
|
||||
flatten_and(X,X).
|
||||
|
||||
%%----- make a sequence out of a disjunction -----
|
||||
flatten_or(X \/ Y, F) :-
|
||||
!,
|
||||
flatten_or(X,A),
|
||||
flatten_or(Y,B),
|
||||
sequence_append(A,B,F).
|
||||
flatten_or(X,X).
|
||||
|
||||
|
||||
%%----- append two sequences -------------------------------
|
||||
sequence_append((X,R),S,(X,T)) :- !, sequence_append(R,S,T).
|
||||
sequence_append((X),S,(X,S)).
|
||||
|
||||
%%----- separate into positive and negative literals -----------
|
||||
separate((A,B),P,N) :-
|
||||
!,
|
||||
(A = ~X -> N=[X|N1],
|
||||
separate(B,P,N1)
|
||||
;
|
||||
P=[A|P1],
|
||||
separate(B,P1,N) ).
|
||||
separate(A,P,N) :-
|
||||
(A = ~X -> N=[X],
|
||||
P = []
|
||||
;
|
||||
P=[A],
|
||||
N = [] ).
|
||||
|
||||
%%----- tautology ----------------------------
|
||||
tautology(P,N) :- some_occurs(N,P).
|
||||
|
||||
some_occurs([F|R],B) :-
|
||||
occurs(F,B) | some_occurs(R,B).
|
||||
|
||||
occurs(A,[F|_]) :-
|
||||
A == F,
|
||||
!.
|
||||
occurs(A,[_|R]) :-
|
||||
occurs(A,R).
|
||||
|
||||
make_clauses((A,B),C) :-
|
||||
!,
|
||||
flatten_or(A,F),
|
||||
separate(F,P,N),
|
||||
(tautology(P,N) ->
|
||||
make_clauses(B,C)
|
||||
;
|
||||
make_clause(P,N,D),
|
||||
C = [D|R],
|
||||
make_clauses(B,R) ).
|
||||
make_clauses(A,C) :-
|
||||
flatten_or(A,F),
|
||||
separate(F,P,N),
|
||||
(tautology(P,N) ->
|
||||
C = []
|
||||
;
|
||||
make_clause(P,N,D),
|
||||
C = [D] ).
|
||||
|
||||
make_clause([],N, false :- B) :-
|
||||
!,
|
||||
make_sequence(N,B,',').
|
||||
make_clause(P,[],H) :-
|
||||
!,
|
||||
make_sequence(P,H,'|').
|
||||
make_clause(P,N, H :- T) :-
|
||||
make_sequence(P,H,'|'),
|
||||
make_sequence(N,T,',').
|
||||
|
||||
make_sequence([A],A,_) :- !.
|
||||
make_sequence([F|R],(F|S),'|') :-
|
||||
make_sequence(R,S,'|').
|
||||
make_sequence([F|R],(F,S),',') :-
|
||||
make_sequence(R,S,',').
|
||||
|
||||
write_list([F|R]) :-
|
||||
write(F), write('.'), nl,
|
||||
write_list(R).
|
||||
write_list([]).
|
||||
@@ -1,287 +0,0 @@
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%
|
||||
%%% A* Algorithm
|
||||
%%%
|
||||
%%%
|
||||
%%% Nodes have form S#D#F#A
|
||||
%%% where S describes the state or configuration
|
||||
%%% D is the depth of the node
|
||||
%%% F is the evaluation function value
|
||||
%%% A is the ancestor list for the node
|
||||
|
||||
:- op(400,yfx,'#'). /* Node builder notation */
|
||||
|
||||
solve(State,Soln) :- f_function(State,0,F),
|
||||
search([State#0#F#[]],S), reverse(S,Soln).
|
||||
|
||||
f_function(State,D,F) :- h_function(State,H),
|
||||
F is D + H.
|
||||
|
||||
search([State#_#_#Soln|_], Soln) :- goal(State).
|
||||
search([B|R],S) :- expand(B,Children),
|
||||
insert_all(Children,R,Open),
|
||||
search(Open,S).
|
||||
|
||||
insert_all([F|R],Open1,Open3) :- insert(F,Open1,Open2),
|
||||
insert_all(R,Open2,Open3).
|
||||
insert_all([],Open,Open).
|
||||
|
||||
insert(B,Open,Open) :- repeat_node(B,Open), ! .
|
||||
insert(B,[C|R],[B,C|R]) :- cheaper(B,C), ! .
|
||||
insert(B,[B1|R],[B1|S]) :- insert(B,R,S), !.
|
||||
insert(B,[],[B]).
|
||||
|
||||
repeat_node(P#_#_#_, [P#_#_#_|_]).
|
||||
|
||||
cheaper( _#_#F1#_ , _#_#F2#_ ) :- F1 < F2.
|
||||
|
||||
expand(State#D#_#S,All_My_Children) :-
|
||||
bagof(Child#D1#F#[Move|S],
|
||||
(D1 is D+1,
|
||||
move(State,Child,Move),
|
||||
f_function(Child,D1,F)),
|
||||
All_My_Children).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%
|
||||
%%% 8-puzzle solver
|
||||
%%%
|
||||
%%%
|
||||
%%% State have form A/B/C/D/E/F/G/H/I
|
||||
%%% where {A,...,I} = {0,...,8}
|
||||
%%% 0 represents the empty tile
|
||||
%%%
|
||||
|
||||
goal(1/2/3/8/0/4/7/6/5).
|
||||
|
||||
%%% The puzzle moves
|
||||
|
||||
left( A/0/C/D/E/F/H/I/J , 0/A/C/D/E/F/H/I/J ).
|
||||
left( A/B/C/D/0/F/H/I/J , A/B/C/0/D/F/H/I/J ).
|
||||
left( A/B/C/D/E/F/H/0/J , A/B/C/D/E/F/0/H/J ).
|
||||
left( A/B/0/D/E/F/H/I/J , A/0/B/D/E/F/H/I/J ).
|
||||
left( A/B/C/D/E/0/H/I/J , A/B/C/D/0/E/H/I/J ).
|
||||
left( A/B/C/D/E/F/H/I/0 , A/B/C/D/E/F/H/0/I ).
|
||||
|
||||
up( A/B/C/0/E/F/H/I/J , 0/B/C/A/E/F/H/I/J ).
|
||||
up( A/B/C/D/0/F/H/I/J , A/0/C/D/B/F/H/I/J ).
|
||||
up( A/B/C/D/E/0/H/I/J , A/B/0/D/E/C/H/I/J ).
|
||||
up( A/B/C/D/E/F/0/I/J , A/B/C/0/E/F/D/I/J ).
|
||||
up( A/B/C/D/E/F/H/0/J , A/B/C/D/0/F/H/E/J ).
|
||||
up( A/B/C/D/E/F/H/I/0 , A/B/C/D/E/0/H/I/F ).
|
||||
|
||||
right( A/0/C/D/E/F/H/I/J , A/C/0/D/E/F/H/I/J ).
|
||||
right( A/B/C/D/0/F/H/I/J , A/B/C/D/F/0/H/I/J ).
|
||||
right( A/B/C/D/E/F/H/0/J , A/B/C/D/E/F/H/J/0 ).
|
||||
right( 0/B/C/D/E/F/H/I/J , B/0/C/D/E/F/H/I/J ).
|
||||
right( A/B/C/0/E/F/H/I/J , A/B/C/E/0/F/H/I/J ).
|
||||
right( A/B/C/D/E/F/0/I/J , A/B/C/D/E/F/I/0/J ).
|
||||
|
||||
down( A/B/C/0/E/F/H/I/J , A/B/C/H/E/F/0/I/J ).
|
||||
down( A/B/C/D/0/F/H/I/J , A/B/C/D/I/F/H/0/J ).
|
||||
down( A/B/C/D/E/0/H/I/J , A/B/C/D/E/J/H/I/0 ).
|
||||
down( 0/B/C/D/E/F/H/I/J , D/B/C/0/E/F/H/I/J ).
|
||||
down( A/0/C/D/E/F/H/I/J , A/E/C/D/0/F/H/I/J ).
|
||||
down( A/B/0/D/E/F/H/I/J , A/B/F/D/E/0/H/I/J ).
|
||||
|
||||
%%% the heuristic function
|
||||
h_function(Puzz,H) :- p_fcn(Puzz,P),
|
||||
s_fcn(Puzz,S),
|
||||
H is P + 3*S.
|
||||
|
||||
|
||||
%%% the move
|
||||
move(P,C,left) :- left(P,C).
|
||||
move(P,C,up) :- up(P,C).
|
||||
move(P,C,right) :- right(P,C).
|
||||
move(P,C,down) :- down(P,C).
|
||||
|
||||
%%% the Manhattan distance function
|
||||
p_fcn(A/B/C/D/E/F/G/H/I, P) :-
|
||||
a(A,Pa), b(B,Pb), c(C,Pc),
|
||||
d(D,Pd), e(E,Pe), f(F,Pf),
|
||||
g(G,Pg), h(H,Ph), i(I,Pi),
|
||||
P is Pa+Pb+Pc+Pd+Pe+Pf+Pg+Ph+Pg+Pi.
|
||||
|
||||
a(0,0). a(1,0). a(2,1). a(3,2). a(4,3). a(5,4). a(6,3). a(7,2). a(8,1).
|
||||
b(0,0). b(1,1). b(2,0). b(3,1). b(4,2). b(5,3). b(6,2). b(7,3). b(8,2).
|
||||
c(0,0). c(1,2). c(2,1). c(3,0). c(4,1). c(5,2). c(6,3). c(7,4). c(8,3).
|
||||
d(0,0). d(1,1). d(2,2). d(3,3). d(4,2). d(5,3). d(6,2). d(7,2). d(8,0).
|
||||
e(0,0). e(1,2). e(2,1). e(3,2). e(4,1). e(5,2). e(6,1). e(7,2). e(8,1).
|
||||
f(0,0). f(1,3). f(2,2). f(3,1). f(4,0). f(5,1). f(6,2). f(7,3). f(8,2).
|
||||
g(0,0). g(1,2). g(2,3). g(3,4). g(4,3). g(5,2). g(6,2). g(7,0). g(8,1).
|
||||
h(0,0). h(1,3). h(2,3). h(3,3). h(4,2). h(5,1). h(6,0). h(7,1). h(8,2).
|
||||
i(0,0). i(1,4). i(2,3). i(3,2). i(4,1). i(5,0). i(6,1). i(7,2). i(8,3).
|
||||
|
||||
%%% the out-of-cycle function
|
||||
s_fcn(A/B/C/D/E/F/G/H/I, S) :-
|
||||
s_aux(A,B,S1), s_aux(B,C,S2), s_aux(C,F,S3),
|
||||
s_aux(F,I,S4), s_aux(I,H,S5), s_aux(H,G,S6),
|
||||
s_aux(G,D,S7), s_aux(D,A,S8), s_aux(E,S9),
|
||||
S is S1+S2+S3+S4+S5+S6+S7+S8+S9.
|
||||
|
||||
s_aux(0,0) :- !.
|
||||
s_aux(_,1).
|
||||
|
||||
s_aux(X,Y,0) :- Y is X+1, !.
|
||||
s_aux(8,1,0) :- !.
|
||||
s_aux(_,_,2).
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%
|
||||
%%% 8-puzzle animation -- using VT100 character graphics
|
||||
%%%
|
||||
%%%
|
||||
%%%
|
||||
|
||||
puzzle(P) :- solve(P,S),
|
||||
animate(P,S),
|
||||
message.
|
||||
|
||||
animate(P,S) :- initialize(P),
|
||||
cursor(1,2), write(S),
|
||||
cursor(1,22), write('Hit ENTER to step solver.'),
|
||||
get0(_X),
|
||||
play_back(S).
|
||||
|
||||
:- dynamic location/3.
|
||||
|
||||
initialize(A/B/C/D/E/F/H/I/J) :-
|
||||
cls,
|
||||
retractall(location(_,_,_)),
|
||||
assert(location(A,20,5)),
|
||||
assert(location(B,30,5)),
|
||||
assert(location(C,40,5)),
|
||||
assert(location(F,40,10)),
|
||||
assert(location(J,40,15)),
|
||||
assert(location(I,30,15)),
|
||||
assert(location(H,20,15)),
|
||||
assert(location(D,20,10)),
|
||||
assert(location(E,30,10)), draw_all.
|
||||
|
||||
draw_all :- draw(1), draw(2), draw(3), draw(4),
|
||||
draw(5), draw(6), draw(7), draw(8).
|
||||
|
||||
%%% play_back([left,right,up,...]).
|
||||
play_back([M|R]) :- call(M), get0(_X), play_back(R).
|
||||
play_back([]) :- cursor(1,24). %%% Put cursor out of the way
|
||||
|
||||
message :- nl,nl,
|
||||
write(' ********************************************'), nl,
|
||||
write(' * Enter 8-puzzle goals in the form ... *'), nl,
|
||||
write(' * ?- puzzle(0/8/1/2/4/3/7/6/5). *'), nl,
|
||||
write(' * Enter goal ''message'' to reread this. *'), nl,
|
||||
write(' ********************************************'), nl, nl.
|
||||
|
||||
|
||||
cursor(X,Y) :- put(27), put(91), %%% ESC [
|
||||
write(Y),
|
||||
put(59), %%% ;
|
||||
write(X),
|
||||
put(72). %%% M
|
||||
|
||||
%%% clear the screen, quickly
|
||||
cls :- put(27), put("["), put("2"), put("J").
|
||||
|
||||
%%% video attributes -- bold and blink not working
|
||||
plain :- put(27), put("["), put("0"), put("m").
|
||||
reverse_video :- put(27), put("["), put("7"), put("m").
|
||||
|
||||
|
||||
%%% Tile objects, character map(s)
|
||||
%%% Each tile should be drawn using the character map,
|
||||
%%% drawn at 'location', which is asserted and retracted
|
||||
%%% by 'playback'.
|
||||
character_map(N, [ [' ',' ',' ',' ',' ',' ',' '],
|
||||
[' ',' ',' ', N ,' ',' ',' '],
|
||||
[' ',' ',' ',' ',' ',' ',' '] ]).
|
||||
|
||||
|
||||
%%% move empty tile (spot) to the left
|
||||
left :- retract(location(0,X0,Y0)),
|
||||
Xnew is X0 - 10,
|
||||
location(Tile,Xnew,Y0),
|
||||
assert(location(0,Xnew,Y0)),
|
||||
right(Tile),right(Tile),right(Tile),
|
||||
right(Tile),right(Tile),
|
||||
right(Tile),right(Tile),right(Tile),
|
||||
right(Tile),right(Tile).
|
||||
|
||||
up :- retract(location(0,X0,Y0)),
|
||||
Ynew is Y0 - 5,
|
||||
location(Tile,X0,Ynew),
|
||||
assert(location(0,X0,Ynew)),
|
||||
down(Tile),down(Tile),down(Tile),down(Tile),down(Tile).
|
||||
|
||||
right :- retract(location(0,X0,Y0)),
|
||||
Xnew is X0 + 10,
|
||||
location(Tile,Xnew,Y0),
|
||||
assert(location(0,Xnew,Y0)),
|
||||
left(Tile),left(Tile),left(Tile),left(Tile),left(Tile),
|
||||
left(Tile),left(Tile),left(Tile),left(Tile),left(Tile).
|
||||
|
||||
down :- retract(location(0,X0,Y0)),
|
||||
Ynew is Y0 + 5,
|
||||
location(Tile,X0,Ynew),
|
||||
assert(location(0,X0,Ynew)),
|
||||
up(Tile),up(Tile),up(Tile),up(Tile),up(Tile).
|
||||
|
||||
|
||||
draw(Obj) :- reverse_video, character_map(Obj,M),
|
||||
location(Obj,X,Y),
|
||||
draw(X,Y,M), plain.
|
||||
|
||||
%%% hide tile
|
||||
hide(Obj) :- character_map(Obj,M),
|
||||
location(Obj,X,Y),
|
||||
hide(X,Y,M).
|
||||
|
||||
hide(_,_,[]).
|
||||
hide(X,Y,[R|G]) :- hide_row(X,Y,R),
|
||||
Y1 is Y + 1,
|
||||
hide(X,Y1,G).
|
||||
|
||||
hide_row(_,_,[]).
|
||||
hide_row(X,Y,[_|R]) :- cursor(X,Y),
|
||||
write(' '),
|
||||
X1 is X + 1,
|
||||
hide_row(X1,Y,R).
|
||||
|
||||
%%% draw tile
|
||||
draw(_,_,[]).
|
||||
draw(X,Y,[R|G]) :- draw_row(X,Y,R),
|
||||
Y1 is Y + 1,
|
||||
draw(X,Y1,G).
|
||||
|
||||
draw_row(_,_,[]).
|
||||
draw_row(X,Y,[P|R]) :- cursor(X,Y),
|
||||
write(P),
|
||||
X1 is X + 1,
|
||||
draw_row(X1,Y,R).
|
||||
|
||||
%%% Move an Object up
|
||||
up(Obj) :- hide(Obj),
|
||||
retract(location(Obj,X,Y)),
|
||||
Y1 is Y - 1,
|
||||
assert(location(Obj,X,Y1)),
|
||||
draw(Obj).
|
||||
|
||||
down(Obj) :- hide(Obj),
|
||||
retract(location(Obj,X,Y)),
|
||||
Y1 is Y + 1,
|
||||
assert(location(Obj,X,Y1)),
|
||||
draw(Obj).
|
||||
|
||||
left(Obj) :- hide(Obj),
|
||||
retract(location(Obj,X,Y)),
|
||||
X1 is X - 1,
|
||||
assert(location(Obj,X1,Y)),
|
||||
draw(Obj).
|
||||
|
||||
right(Obj) :- hide(Obj),
|
||||
retract(location(Obj,X,Y)),
|
||||
X1 is X + 1,
|
||||
assert(location(Obj,X1,Y)),
|
||||
draw(Obj).
|
||||
|
||||
:- message.
|
||||
@@ -1,13 +0,0 @@
|
||||
partition([], _, [], []).
|
||||
partition([X|Xs], Pivot, Smalls, Bigs) :-
|
||||
( X @< Pivot ->
|
||||
Smalls = [X|Rest],
|
||||
partition(Xs, Pivot, Rest, Bigs)
|
||||
; Bigs = [X|Rest],
|
||||
partition(Xs, Pivot, Smalls, Rest)
|
||||
).
|
||||
|
||||
quicksort([]) --> [].
|
||||
quicksort([X|Xs]) -->
|
||||
{ partition(Xs, X, Smaller, Bigger) },
|
||||
quicksort(Smaller), [X], quicksort(Bigger).
|
||||
@@ -1,12 +0,0 @@
|
||||
/* Prolog test file */
|
||||
male(john).
|
||||
male(peter).
|
||||
|
||||
female(vick).
|
||||
female(christie).
|
||||
|
||||
parents(john, peter, christie).
|
||||
parents(vick, peter, christie).
|
||||
|
||||
/* X is a brother of Y */
|
||||
brother(X, Y) :- male(X), parents(X, F, M), parents(Y, F, M).
|
||||
12
samples/Prolog/test-prolog.prolog
Normal file
12
samples/Prolog/test-prolog.prolog
Normal file
@@ -0,0 +1,12 @@
|
||||
-/* Prolog test file */
|
||||
-male(john).
|
||||
-male(peter).
|
||||
-
|
||||
-female(vick).
|
||||
-female(christie).
|
||||
-
|
||||
-parents(john, peter, christie).
|
||||
-parents(vick, peter, christie).
|
||||
-
|
||||
-/* X is a brother of Y */
|
||||
-brother(X, Y) :- male(X), parents(X, F, M), parents(Y, F, M).
|
||||
@@ -1,21 +1,21 @@
|
||||
turing(Tape0, Tape) :-
|
||||
perform(q0, [], Ls, Tape0, Rs),
|
||||
reverse(Ls, Ls1),
|
||||
append(Ls1, Rs, Tape).
|
||||
|
||||
perform(qf, Ls, Ls, Rs, Rs) :- !.
|
||||
perform(Q0, Ls0, Ls, Rs0, Rs) :-
|
||||
symbol(Rs0, Sym, RsRest),
|
||||
once(rule(Q0, Sym, Q1, NewSym, Action)),
|
||||
action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1),
|
||||
perform(Q1, Ls1, Ls, Rs1, Rs).
|
||||
|
||||
symbol([], b, []).
|
||||
symbol([Sym|Rs], Sym, Rs).
|
||||
|
||||
action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs).
|
||||
action(stay, Ls, Ls, Rs, Rs).
|
||||
action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).
|
||||
|
||||
left([], [], Rs0, [b|Rs0]).
|
||||
left([L|Ls], Ls, Rs, [L|Rs]).
|
||||
-turing(Tape0, Tape) :-
|
||||
- perform(q0, [], Ls, Tape0, Rs),
|
||||
- reverse(Ls, Ls1),
|
||||
- append(Ls1, Rs, Tape).
|
||||
-
|
||||
-perform(qf, Ls, Ls, Rs, Rs) :- !.
|
||||
-perform(Q0, Ls0, Ls, Rs0, Rs) :-
|
||||
- symbol(Rs0, Sym, RsRest),
|
||||
- once(rule(Q0, Sym, Q1, NewSym, Action)),
|
||||
- action(Action, Ls0, Ls1, [NewSym|RsRest], Rs1),
|
||||
- perform(Q1, Ls1, Ls, Rs1, Rs).
|
||||
-
|
||||
-symbol([], b, []).
|
||||
-symbol([Sym|Rs], Sym, Rs).
|
||||
-
|
||||
-action(left, Ls0, Ls, Rs0, Rs) :- left(Ls0, Ls, Rs0, Rs).
|
||||
-action(stay, Ls, Ls, Rs, Rs).
|
||||
-action(right, Ls0, [Sym|Ls0], [Sym|Rs], Rs).
|
||||
-
|
||||
-left([], [], Rs0, [b|Rs0]).
|
||||
-left([L|Ls], Ls, Rs, [L|Rs]).
|
||||
|
||||
27
samples/Protocol Buffer/addressbook.proto
Normal file
27
samples/Protocol Buffer/addressbook.proto
Normal file
@@ -0,0 +1,27 @@
|
||||
package tutorial;
|
||||
|
||||
option java_package = "com.example.tutorial";
|
||||
option java_outer_classname = "AddressBookProtos";
|
||||
|
||||
message Person {
|
||||
required string name = 1;
|
||||
required int32 id = 2;
|
||||
optional string email = 3;
|
||||
|
||||
enum PhoneType {
|
||||
MOBILE = 0;
|
||||
HOME = 1;
|
||||
WORK = 2;
|
||||
}
|
||||
|
||||
message PhoneNumber {
|
||||
required string number = 1;
|
||||
optional PhoneType type = 2 [default = HOME];
|
||||
}
|
||||
|
||||
repeated PhoneNumber phone = 4;
|
||||
}
|
||||
|
||||
message AddressBook {
|
||||
repeated Person person = 1;
|
||||
}
|
||||
10
samples/RMarkdown/example.rmd
Normal file
10
samples/RMarkdown/example.rmd
Normal file
@@ -0,0 +1,10 @@
|
||||
# An example RMarkdown
|
||||
|
||||
Some text.
|
||||
|
||||
## A graphic in R
|
||||
|
||||
```{r}
|
||||
plot(1:10)
|
||||
hist(rnorm(10000))
|
||||
```
|
||||
@@ -1,7 +0,0 @@
|
||||
#!/bin/sh
|
||||
#| -*- scheme -*-
|
||||
exec racket -um "$0" "$@"
|
||||
|#
|
||||
|
||||
(require racket/file racket/path racket/list racket/string
|
||||
(for-syntax racket/base))
|
||||
45
samples/RobotFramework/data_driven.robot
Normal file
45
samples/RobotFramework/data_driven.robot
Normal file
@@ -0,0 +1,45 @@
|
||||
*** Settings ***
|
||||
Documentation Example test cases using the data-driven testing approach.
|
||||
...
|
||||
... Tests use `Calculate` keyword created in this file, that in
|
||||
... turn uses keywords in `CalculatorLibrary`. An exception is
|
||||
... the last test that has a custom _template keyword_.
|
||||
...
|
||||
... The data-driven style works well when you need to repeat
|
||||
... the same workflow multiple times.
|
||||
...
|
||||
... Notice that one of these tests fails on purpose to show how
|
||||
... failures look like.
|
||||
Test Template Calculate
|
||||
Library CalculatorLibrary
|
||||
|
||||
*** Test Cases *** Expression Expected
|
||||
Addition 12 + 2 + 2 16
|
||||
2 + -3 -1
|
||||
|
||||
Subtraction 12 - 2 - 2 8
|
||||
2 - -3 5
|
||||
|
||||
Multiplication 12 * 2 * 2 48
|
||||
2 * -3 -6
|
||||
|
||||
Division 12 / 2 / 2 3
|
||||
2 / -3 -1
|
||||
|
||||
Failing 1 + 1 3
|
||||
|
||||
Calculation error [Template] Calculation should fail
|
||||
kekkonen Invalid button 'k'.
|
||||
${EMPTY} Invalid expression.
|
||||
1 / 0 Division by zero.
|
||||
|
||||
*** Keywords ***
|
||||
Calculate
|
||||
[Arguments] ${expression} ${expected}
|
||||
Push buttons C${expression}=
|
||||
Result should be ${expected}
|
||||
|
||||
Calculation should fail
|
||||
[Arguments] ${expression} ${expected}
|
||||
${error} = Should cause error C${expression}=
|
||||
Should be equal ${expected} ${error} # Using `BuiltIn` keyword
|
||||
33
samples/RobotFramework/gherkin.robot
Normal file
33
samples/RobotFramework/gherkin.robot
Normal file
@@ -0,0 +1,33 @@
|
||||
*** Settings ***
|
||||
Documentation Example test case using the gherkin syntax.
|
||||
...
|
||||
... This test has a workflow similar to the keyword-driven
|
||||
... examples. The difference is that the keywords use higher
|
||||
... abstraction level and their arguments are embedded into
|
||||
... the keyword names.
|
||||
...
|
||||
... This kind of _gherkin_ syntax has been made popular by
|
||||
... [http://cukes.info|Cucumber]. It works well especially when
|
||||
... tests act as examples that need to be easily understood also
|
||||
... by the business people.
|
||||
Library CalculatorLibrary
|
||||
|
||||
*** Test Cases ***
|
||||
Addition
|
||||
Given calculator has been cleared
|
||||
When user types "1 + 1"
|
||||
and user pushes equals
|
||||
Then result is "2"
|
||||
|
||||
*** Keywords ***
|
||||
Calculator has been cleared
|
||||
Push button C
|
||||
|
||||
User types "${expression}"
|
||||
Push buttons ${expression}
|
||||
|
||||
User pushes equals
|
||||
Push button =
|
||||
|
||||
Result is "${result}"
|
||||
Result should be ${result}
|
||||
37
samples/RobotFramework/keyword_driven.robot
Normal file
37
samples/RobotFramework/keyword_driven.robot
Normal file
@@ -0,0 +1,37 @@
|
||||
*** Settings ***
|
||||
Documentation Example test cases using the keyword-driven testing approach.
|
||||
...
|
||||
... All tests contain a workflow constructed from keywords in
|
||||
... `CalculatorLibrary`. Creating new tests or editing existing
|
||||
... is easy even for people without programming skills.
|
||||
...
|
||||
... This kind of style works well for normal test automation.
|
||||
... If also business people need to understand tests, using
|
||||
... _gherkin_ style may work better.
|
||||
Library CalculatorLibrary
|
||||
|
||||
*** Test Cases ***
|
||||
Push button
|
||||
Push button 1
|
||||
Result should be 1
|
||||
|
||||
Push multiple buttons
|
||||
Push button 1
|
||||
Push button 2
|
||||
Result should be 12
|
||||
|
||||
Simple calculation
|
||||
Push button 1
|
||||
Push button +
|
||||
Push button 2
|
||||
Push button =
|
||||
Result should be 3
|
||||
|
||||
Longer calculation
|
||||
Push buttons 5 + 4 - 3 * 2 / 1 =
|
||||
Result should be 3
|
||||
|
||||
Clear
|
||||
Push button 1
|
||||
Push button C
|
||||
Result should be ${EMPTY} # ${EMPTY} is a built-in variable
|
||||
7
samples/Ruby/filenames/Appraisals
Normal file
7
samples/Ruby/filenames/Appraisals
Normal file
@@ -0,0 +1,7 @@
|
||||
appraise "rails32" do
|
||||
gem 'rails', '~> 3.2.0'
|
||||
end
|
||||
|
||||
appraise "rails40" do
|
||||
gem 'rails', '~> 4.0.0'
|
||||
end
|
||||
75
samples/Scala/node11.sc
Normal file
75
samples/Scala/node11.sc
Normal file
@@ -0,0 +1,75 @@
|
||||
import math.random
|
||||
import scala.language.postfixOps
|
||||
import scala.util._
|
||||
import scala.util.{Try, Success, Failure}
|
||||
import scala.concurrent._
|
||||
import duration._
|
||||
import ExecutionContext.Implicits.global
|
||||
import scala.concurrent.{ ExecutionContext, CanAwait, OnCompleteRunnable, TimeoutException, ExecutionException, blocking }
|
||||
/* This worksheet demonstrates some of the code snippets from
|
||||
* Week3, Lecture 4, "Composing Futures".
|
||||
*/
|
||||
|
||||
|
||||
object node11 {
|
||||
println("Welcome to the Scala worksheet") //> Welcome to the Scala worksheet
|
||||
|
||||
/**
|
||||
* Retry successfully completing block at most noTimes
|
||||
* and give up after that
|
||||
*/
|
||||
|
||||
def retry[T](n: Int)(block: =>Future[T]): Future[T] = {
|
||||
val ns: Iterator[Int] = (1 to n).iterator
|
||||
val attempts: Iterator[()=>Future[T]] = ns.map(_ => ()=>block)
|
||||
val failed: Future[T] = Future.failed(new Exception)
|
||||
attempts.foldLeft(failed)((a, block) => a fallbackTo { block() })
|
||||
} //> retry: [T](n: Int)(block: => scala.concurrent.Future[T])scala.concurrent.Fut
|
||||
//| ure[T]
|
||||
def rb(i: Int) = {
|
||||
blocking{Thread.sleep(100*random.toInt)}
|
||||
println("Hi " ++ i.toString)
|
||||
i + 10
|
||||
} //> rb: (i: Int)Int
|
||||
def block(i: Int) = {
|
||||
println("Iteration: " + i.toString)
|
||||
|
||||
val ri = retry(i)( Future {rb(i)} )
|
||||
|
||||
ri onComplete {
|
||||
case Success(s) => println(s.toString ++ " = 10 + " ++ i.toString)
|
||||
case Failure(t:Exception) => println(t.toString ++ " " ++ i.toString)
|
||||
case r => println(r.toString ++ " " ++ i.toString)
|
||||
}
|
||||
|
||||
} //> block: (i: Int)Unit
|
||||
/* Multiple executions of a block of commands where
|
||||
* each block contains one collectCoins and
|
||||
* one buyTreasure. If either call fails, the whole iteration does not fail,
|
||||
* because we are catching exceptions (with flatMap) in this implementation.
|
||||
* Note that these blocks execute synchrounsly.
|
||||
*/
|
||||
(0 to 4 toList).foreach(i =>block(i)) //> Iteration: 0
|
||||
//| Iteration: 1
|
||||
//| java.lang.Exception 0
|
||||
//| Hi 1
|
||||
//| Iteration: 2
|
||||
//| 11 = 10 + 1
|
||||
//| Hi 2
|
||||
//| Iteration: 3
|
||||
//| Hi 3
|
||||
//| Hi 2
|
||||
//| Iteration: 4
|
||||
//| 12 = 10 + 2
|
||||
blocking{Thread.sleep(3000)} //> Hi 4
|
||||
//| Hi 3
|
||||
//| 13 = 10 + 3
|
||||
//| Hi 3
|
||||
//| 14 = 10 + 4
|
||||
//| Hi 4
|
||||
//| Hi 4
|
||||
//| Hi 4-
|
||||
|
||||
|
||||
|
||||
}
|
||||
3
samples/Scaml/hello.scaml
Normal file
3
samples/Scaml/hello.scaml
Normal file
@@ -0,0 +1,3 @@
|
||||
%p
|
||||
Hello,
|
||||
World!
|
||||
254
samples/Standard ML/RedBlackTree.fun
Normal file
254
samples/Standard ML/RedBlackTree.fun
Normal file
@@ -0,0 +1,254 @@
|
||||
(* From Twelf *)
|
||||
(* Red/Black Trees *)
|
||||
(* Author: Frank Pfenning *)
|
||||
|
||||
functor RedBlackTree
|
||||
(type key'
|
||||
val compare : key' * key' -> order)
|
||||
:> TABLE where type key = key' =
|
||||
struct
|
||||
type key = key'
|
||||
type 'a entry = key * 'a
|
||||
|
||||
datatype 'a dict =
|
||||
Empty (* considered black *)
|
||||
| Red of 'a entry * 'a dict * 'a dict
|
||||
| Black of 'a entry * 'a dict * 'a dict
|
||||
|
||||
type 'a Table = 'a dict ref
|
||||
|
||||
(* Representation Invariants *)
|
||||
(*
|
||||
1. The tree is ordered: for every node Red((key1,datum1), left, right) or
|
||||
Black ((key1,datum1), left, right), every key in left is less than
|
||||
key1 and every key in right is greater than key1.
|
||||
|
||||
2. The children of a red node are black (color invariant).
|
||||
|
||||
3. Every path from the root to a leaf has the same number of
|
||||
black nodes, called the black height of the tree.
|
||||
*)
|
||||
|
||||
local
|
||||
|
||||
fun lookup dict key =
|
||||
let
|
||||
fun lk (Empty) = NONE
|
||||
| lk (Red tree) = lk' tree
|
||||
| lk (Black tree) = lk' tree
|
||||
and lk' ((key1, datum1), left, right) =
|
||||
(case compare(key,key1)
|
||||
of EQUAL => SOME(datum1)
|
||||
| LESS => lk left
|
||||
| GREATER => lk right)
|
||||
in
|
||||
lk dict
|
||||
end
|
||||
|
||||
(* val restore_right : 'a dict -> 'a dict *)
|
||||
(*
|
||||
restore_right (Black(e,l,r)) >=> dict
|
||||
where (1) Black(e,l,r) is ordered,
|
||||
(2) Black(e,l,r) has black height n,
|
||||
(3) color invariant may be violated at the root of r:
|
||||
one of its children might be red.
|
||||
and dict is a re-balanced red/black tree (satisfying all invariants)
|
||||
and same black height n.
|
||||
*)
|
||||
fun restore_right (Black(e, Red lt, Red (rt as (_,Red _,_)))) =
|
||||
Red(e, Black lt, Black rt) (* re-color *)
|
||||
| restore_right (Black(e, Red lt, Red (rt as (_,_,Red _)))) =
|
||||
Red(e, Black lt, Black rt) (* re-color *)
|
||||
| restore_right (Black(e, l, Red(re, Red(rle, rll, rlr), rr))) =
|
||||
(* l is black, deep rotate *)
|
||||
Black(rle, Red(e, l, rll), Red(re, rlr, rr))
|
||||
| restore_right (Black(e, l, Red(re, rl, rr as Red _))) =
|
||||
(* l is black, shallow rotate *)
|
||||
Black(re, Red(e, l, rl), rr)
|
||||
| restore_right dict = dict
|
||||
|
||||
(* restore_left is like restore_right, except *)
|
||||
(* the color invariant may be violated only at the root of left child *)
|
||||
fun restore_left (Black(e, Red (lt as (_,Red _,_)), Red rt)) =
|
||||
Red(e, Black lt, Black rt) (* re-color *)
|
||||
| restore_left (Black(e, Red (lt as (_,_,Red _)), Red rt)) =
|
||||
Red(e, Black lt, Black rt) (* re-color *)
|
||||
| restore_left (Black(e, Red(le, ll as Red _, lr), r)) =
|
||||
(* r is black, shallow rotate *)
|
||||
Black(le, ll, Red(e, lr, r))
|
||||
| restore_left (Black(e, Red(le, ll, Red(lre, lrl, lrr)), r)) =
|
||||
(* r is black, deep rotate *)
|
||||
Black(lre, Red(le, ll, lrl), Red(e, lrr, r))
|
||||
| restore_left dict = dict
|
||||
|
||||
fun insert (dict, entry as (key,datum)) =
|
||||
let
|
||||
(* val ins : 'a dict -> 'a dict inserts entry *)
|
||||
(* ins (Red _) may violate color invariant at root *)
|
||||
(* ins (Black _) or ins (Empty) will be red/black tree *)
|
||||
(* ins preserves black height *)
|
||||
fun ins (Empty) = Red(entry, Empty, Empty)
|
||||
| ins (Red(entry1 as (key1, datum1), left, right)) =
|
||||
(case compare(key,key1)
|
||||
of EQUAL => Red(entry, left, right)
|
||||
| LESS => Red(entry1, ins left, right)
|
||||
| GREATER => Red(entry1, left, ins right))
|
||||
| ins (Black(entry1 as (key1, datum1), left, right)) =
|
||||
(case compare(key,key1)
|
||||
of EQUAL => Black(entry, left, right)
|
||||
| LESS => restore_left (Black(entry1, ins left, right))
|
||||
| GREATER => restore_right (Black(entry1, left, ins right)))
|
||||
in
|
||||
case ins dict
|
||||
of Red (t as (_, Red _, _)) => Black t (* re-color *)
|
||||
| Red (t as (_, _, Red _)) => Black t (* re-color *)
|
||||
| dict => dict
|
||||
end
|
||||
|
||||
(* function below from .../smlnj-lib/Util/int-redblack-set.sml *)
|
||||
(* Need to check and improve some time *)
|
||||
(* Sun Mar 13 08:22:53 2005 -fp *)
|
||||
|
||||
(* Remove an item. Returns true if old item found, false otherwise *)
|
||||
local
|
||||
exception NotFound
|
||||
datatype 'a zipper
|
||||
= TOP
|
||||
| LEFTB of ('a entry * 'a dict * 'a zipper)
|
||||
| LEFTR of ('a entry * 'a dict * 'a zipper)
|
||||
| RIGHTB of ('a dict * 'a entry * 'a zipper)
|
||||
| RIGHTR of ('a dict * 'a entry * 'a zipper)
|
||||
in
|
||||
fun delete t key =
|
||||
let
|
||||
fun zip (TOP, t) = t
|
||||
| zip (LEFTB(x, b, z), a) = zip(z, Black(x, a, b))
|
||||
| zip (LEFTR(x, b, z), a) = zip(z, Red(x, a, b))
|
||||
| zip (RIGHTB(a, x, z), b) = zip(z, Black(x, a, b))
|
||||
| zip (RIGHTR(a, x, z), b) = zip(z, Red(x, a, b))
|
||||
(* bbZip propagates a black deficit up the tree until either the top
|
||||
* is reached, or the deficit can be covered. It returns a boolean
|
||||
* that is true if there is still a deficit and the zipped tree.
|
||||
*)
|
||||
fun bbZip (TOP, t) = (true, t)
|
||||
| bbZip (LEFTB(x, Red(y, c, d), z), a) = (* case 1L *)
|
||||
bbZip (LEFTR(x, c, LEFTB(y, d, z)), a)
|
||||
| bbZip (LEFTB(x, Black(w, Red(y, c, d), e), z), a) = (* case 3L *)
|
||||
bbZip (LEFTB(x, Black(y, c, Red(w, d, e)), z), a)
|
||||
| bbZip (LEFTR(x, Black(w, Red(y, c, d), e), z), a) = (* case 3L *)
|
||||
bbZip (LEFTR(x, Black(y, c, Red(w, d, e)), z), a)
|
||||
| bbZip (LEFTB(x, Black(y, c, Red(w, d, e)), z), a) = (* case 4L *)
|
||||
(false, zip (z, Black(y, Black(x, a, c), Black(w, d, e))))
|
||||
| bbZip (LEFTR(x, Black(y, c, Red(w, d, e)), z), a) = (* case 4L *)
|
||||
(false, zip (z, Red(y, Black(x, a, c), Black(w, d, e))))
|
||||
| bbZip (LEFTR(x, Black(y, c, d), z), a) = (* case 2L *)
|
||||
(false, zip (z, Black(x, a, Red(y, c, d))))
|
||||
| bbZip (LEFTB(x, Black(y, c, d), z), a) = (* case 2L *)
|
||||
bbZip (z, Black(x, a, Red(y, c, d)))
|
||||
| bbZip (RIGHTB(Red(y, c, d), x, z), b) = (* case 1R *)
|
||||
bbZip (RIGHTR(d, x, RIGHTB(c, y, z)), b)
|
||||
| bbZip (RIGHTR(Red(y, c, d), x, z), b) = (* case 1R *)
|
||||
bbZip (RIGHTR(d, x, RIGHTB(c, y, z)), b)
|
||||
| bbZip (RIGHTB(Black(y, Red(w, c, d), e), x, z), b) = (* case 3R *)
|
||||
bbZip (RIGHTB(Black(w, c, Red(y, d, e)), x, z), b)
|
||||
| bbZip (RIGHTR(Black(y, Red(w, c, d), e), x, z), b) = (* case 3R *)
|
||||
bbZip (RIGHTR(Black(w, c, Red(y, d, e)), x, z), b)
|
||||
| bbZip (RIGHTB(Black(y, c, Red(w, d, e)), x, z), b) = (* case 4R *)
|
||||
(false, zip (z, Black(y, c, Black(x, Red(w, d, e), b))))
|
||||
| bbZip (RIGHTR(Black(y, c, Red(w, d, e)), x, z), b) = (* case 4R *)
|
||||
(false, zip (z, Red(y, c, Black(w, Red(w, d, e), b))))
|
||||
| bbZip (RIGHTR(Black(y, c, d), x, z), b) = (* case 2R *)
|
||||
(false, zip (z, Black(x, Red(y, c, d), b)))
|
||||
| bbZip (RIGHTB(Black(y, c, d), x, z), b) = (* case 2R *)
|
||||
bbZip (z, Black(x, Red(y, c, d), b))
|
||||
| bbZip (z, t) = (false, zip(z, t))
|
||||
fun delMin (Red(y, Empty, b), z) = (y, (false, zip(z, b)))
|
||||
| delMin (Black(y, Empty, b), z) = (y, bbZip(z, b))
|
||||
| delMin (Black(y, a, b), z) = delMin(a, LEFTB(y, b, z))
|
||||
| delMin (Red(y, a, b), z) = delMin(a, LEFTR(y, b, z))
|
||||
| delMin (Empty, _) = raise Match
|
||||
fun joinRed (Empty, Empty, z) = zip(z, Empty)
|
||||
| joinRed (a, b, z) = let
|
||||
val (x, (needB, b')) = delMin(b, TOP)
|
||||
in
|
||||
if needB
|
||||
then #2(bbZip(z, Red(x, a, b')))
|
||||
else zip(z, Red(x, a, b'))
|
||||
end
|
||||
fun joinBlack (a, Empty, z) = #2(bbZip(z, a))
|
||||
| joinBlack (Empty, b, z) = #2(bbZip(z, b))
|
||||
| joinBlack (a, b, z) = let
|
||||
val (x, (needB, b')) = delMin(b, TOP)
|
||||
in
|
||||
if needB
|
||||
then #2(bbZip(z, Black(x, a, b')))
|
||||
else zip(z, Black(x, a, b'))
|
||||
end
|
||||
fun del (Empty, z) = raise NotFound
|
||||
| del (Black(entry1 as (key1, datum1), a, b), z) =
|
||||
(case compare(key,key1)
|
||||
of EQUAL => joinBlack (a, b, z)
|
||||
| LESS => del (a, LEFTB(entry1, b, z))
|
||||
| GREATER => del (b, RIGHTB(a, entry1, z)))
|
||||
| del (Red(entry1 as (key1, datum1), a, b), z) =
|
||||
(case compare(key,key1)
|
||||
of EQUAL => joinRed (a, b, z)
|
||||
| LESS => del (a, LEFTR(entry1, b, z))
|
||||
| GREATER => del (b, RIGHTR(a, entry1, z)))
|
||||
in
|
||||
(del(t, TOP); true) handle NotFound => false
|
||||
end
|
||||
end (* local *)
|
||||
|
||||
(* use non-imperative version? *)
|
||||
fun insertShadow (dict, entry as (key,datum)) =
|
||||
let val oldEntry = ref NONE (* : 'a entry option ref *)
|
||||
fun ins (Empty) = Red(entry, Empty, Empty)
|
||||
| ins (Red(entry1 as (key1, datum1), left, right)) =
|
||||
(case compare(key,key1)
|
||||
of EQUAL => (oldEntry := SOME(entry1);
|
||||
Red(entry, left, right))
|
||||
| LESS => Red(entry1, ins left, right)
|
||||
| GREATER => Red(entry1, left, ins right))
|
||||
| ins (Black(entry1 as (key1, datum1), left, right)) =
|
||||
(case compare(key,key1)
|
||||
of EQUAL => (oldEntry := SOME(entry1);
|
||||
Black(entry, left, right))
|
||||
| LESS => restore_left (Black(entry1, ins left, right))
|
||||
| GREATER => restore_right (Black(entry1, left, ins right)))
|
||||
in
|
||||
(oldEntry := NONE;
|
||||
((case ins dict
|
||||
of Red (t as (_, Red _, _)) => Black t (* re-color *)
|
||||
| Red (t as (_, _, Red _)) => Black t (* re-color *)
|
||||
| dict => dict),
|
||||
!oldEntry))
|
||||
end
|
||||
|
||||
fun app f dict =
|
||||
let fun ap (Empty) = ()
|
||||
| ap (Red tree) = ap' tree
|
||||
| ap (Black tree) = ap' tree
|
||||
and ap' (entry1, left, right) =
|
||||
(ap left; f entry1; ap right)
|
||||
in
|
||||
ap dict
|
||||
end
|
||||
|
||||
in
|
||||
fun new (n) = ref (Empty) (* ignore size hint *)
|
||||
val insert = (fn table => fn entry => (table := insert (!table, entry)))
|
||||
val insertShadow =
|
||||
(fn table => fn entry =>
|
||||
let
|
||||
val (dict, oldEntry) = insertShadow (!table, entry)
|
||||
in
|
||||
(table := dict; oldEntry)
|
||||
end)
|
||||
val lookup = (fn table => fn key => lookup (!table) key)
|
||||
val delete = (fn table => fn key => (delete (!table) key; ()))
|
||||
val clear = (fn table => (table := Empty))
|
||||
val app = (fn f => fn table => app f (!table))
|
||||
end
|
||||
|
||||
end; (* functor RedBlackTree *)
|
||||
1470
samples/Standard ML/main.fun
Normal file
1470
samples/Standard ML/main.fun
Normal file
File diff suppressed because it is too large
Load Diff
31
samples/Stylus/demo.styl
Normal file
31
samples/Stylus/demo.styl
Normal file
@@ -0,0 +1,31 @@
|
||||
border-radius()
|
||||
-webkit-border-radius arguments
|
||||
-moz-border-radius arguments
|
||||
border-radius arguments
|
||||
|
||||
a.button
|
||||
border-radius 5px
|
||||
|
||||
fonts = helvetica, arial, sans-serif
|
||||
|
||||
body {
|
||||
padding: 50px;
|
||||
font: 14px/1.4 fonts;
|
||||
}
|
||||
|
||||
form
|
||||
input[type=text]
|
||||
padding: 5px
|
||||
border: 1px solid #eee
|
||||
color: #ddd
|
||||
|
||||
textarea
|
||||
@extends form input[type=text]
|
||||
padding: 10px
|
||||
|
||||
$foo
|
||||
color: #FFF
|
||||
|
||||
.bar
|
||||
background: #000
|
||||
@extends $foo
|
||||
@@ -1,114 +0,0 @@
|
||||
BCR2000 {
|
||||
var controls,
|
||||
controlBuses,
|
||||
rangedControlBuses,
|
||||
responders
|
||||
;
|
||||
|
||||
*new {
|
||||
^super.new.init;
|
||||
}
|
||||
|
||||
init {
|
||||
controls = Dictionary.new(108);
|
||||
controlBuses = Dictionary.new(108);
|
||||
rangedControlBuses = Dictionary.new(108);
|
||||
|
||||
this.createCCResponders;
|
||||
}
|
||||
|
||||
createCCResponders {
|
||||
responders = Array.fill(108, {|i|
|
||||
CCResponder({|src, chan, num, val|
|
||||
[src, chan, num, val].postln;
|
||||
|
||||
// Write to controls
|
||||
controls.put(i + 1, val);
|
||||
|
||||
// Write to bus (converted to scalar 0..1)
|
||||
controlBuses.put(i + 1, Bus.control(Server.default));
|
||||
controlBuses.at(i + 1).value = val / 127;
|
||||
},
|
||||
// Adjust values as/if needed
|
||||
nil, // src
|
||||
nil, // chan
|
||||
nil, // num
|
||||
nil // value
|
||||
)
|
||||
});
|
||||
}
|
||||
|
||||
// Value from BCR
|
||||
at {arg controlNum;
|
||||
^controls.at(controlNum)
|
||||
}
|
||||
|
||||
// Convert to 0..1
|
||||
scalarAt {arg controlNum;
|
||||
^controls.at(controlNum) / 127
|
||||
}
|
||||
|
||||
// Get a bus
|
||||
busAt {arg controlNum;
|
||||
^controlBuses.at(controlNum)
|
||||
}
|
||||
|
||||
/*
|
||||
busRangeAt(arg controlNum, lo, hi;
|
||||
if (rangedControlBuses.at(controlNum).isNil, {
|
||||
rangedControlBuses.put(controlNum, Bus.control(Server.default))
|
||||
});
|
||||
|
||||
// Left to right order of operations
|
||||
//rangedControlBuses.put(
|
||||
bus.value = hi - lo * controls.at(controlNum) + lo;
|
||||
|
||||
^bus
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/* Scratch
|
||||
Dictionary
|
||||
b = BCR2000();
|
||||
b.at(4);
|
||||
b.scalarAt(4);
|
||||
b.controls[5].get;
|
||||
throw
|
||||
z = Dictionary.new(2);
|
||||
z.at(\1);
|
||||
Array.fill(10, {|i| i.postln;})
|
||||
(2 + 3).asSymbol;
|
||||
|
||||
|
||||
SynthDef(\x, {
|
||||
arg amp = 0.01,
|
||||
freq = 1200,
|
||||
modDepth = 0.7,
|
||||
modFreq = 2
|
||||
;
|
||||
|
||||
var
|
||||
carrier,
|
||||
modulator
|
||||
;
|
||||
|
||||
modulator = SinOsc.ar(modFreq, mul: modDepth);
|
||||
carrier = Saw.ar(freq, add: modulator, mul: amp);
|
||||
|
||||
Out.ar([0,1], carrier)
|
||||
}).store;
|
||||
|
||||
|
||||
x = Synth(\x);
|
||||
x.set(\modDepth, 1);
|
||||
x.set(\modFreq, 64);
|
||||
|
||||
x.map(\modFreq, b.busAt(
|
||||
|
||||
|
||||
|
||||
ControlSpec
|
||||
*/
|
||||
|
||||
|
||||
380
samples/TeX/problemset.cls
Normal file
380
samples/TeX/problemset.cls
Normal file
@@ -0,0 +1,380 @@
|
||||
% =====================================
|
||||
% problemset Document Style
|
||||
% For Problem Sets
|
||||
%
|
||||
% Options:
|
||||
% final hides to-dos
|
||||
% worksheet hides solutions and places each problem on separate page
|
||||
% expand places each problem on a separate page
|
||||
% =====================================
|
||||
|
||||
\ProvidesClass{problemset}
|
||||
\DeclareOption*{\PassOptionsToClass{final}{article}}
|
||||
\DeclareOption{worksheet}{\providecommand{\@solutionvis}{0}}
|
||||
\DeclareOption{expand}{\providecommand{\@expand}{1}}
|
||||
\ProcessOptions\relax
|
||||
|
||||
% ================== Packages and Document Options ==================
|
||||
\LoadClass[10pt,letterpaper]{article}
|
||||
\RequirePackage[%
|
||||
top=0.85in,
|
||||
bottom=1in,
|
||||
left=1in,
|
||||
right=1in
|
||||
]{geometry}
|
||||
\RequirePackage{pgfkeys} % For mathtable environment.
|
||||
\RequirePackage{tabularx} % For pset heading
|
||||
\RequirePackage{float} % Used for floats (tables, figures, etc.)
|
||||
\RequirePackage{graphicx} % Used for inserting images.
|
||||
\RequirePackage{enumerate} % Used for the enumerate environment.
|
||||
\RequirePackage{mathtools} % Required. Loads amsmath.
|
||||
\RequirePackage{amsthm} % Required. Used for theorem environments.
|
||||
\RequirePackage{amssymb} % Required.
|
||||
\RequirePackage{booktabs} % Required. Used for mathtable environment.
|
||||
\RequirePackage{esdiff} % For derivatives and partial derivatives
|
||||
\RequirePackage{mathtools} % Optional. Used for \shortintertext.
|
||||
\RequirePackage{fancyhdr} % Required. For customizing headers/footers.
|
||||
\RequirePackage{lastpage} % Required. For page count in header/footer.
|
||||
\RequirePackage{xcolor} % Required. For setting the color of hyperlinks
|
||||
\RequirePackage[%
|
||||
obeyFinal, % Disable todos by setting [final] option for class
|
||||
color=@todoclr,
|
||||
linecolor=red
|
||||
]{todonotes} % For keeping track of to-dos.
|
||||
\RequirePackage[%
|
||||
colorlinks=true,
|
||||
linkcolor=navy,
|
||||
urlcolor=black
|
||||
]{hyperref} % For following urls and references in a document.
|
||||
\RequirePackage{url} % Enables urls with the \url tag
|
||||
\RequirePackage[all]{hypcap}
|
||||
% hypcap: Links go to object instead of caption. [Keep as last package]
|
||||
|
||||
% ================== Appearance Settings ==================
|
||||
\definecolor{@todoclr}{gray}{0.80} % For To-Dos. 50% brightness
|
||||
\definecolor{navy}{RGB}{0,0,150} % For coloring hyperlinks
|
||||
\setlength{\parskip}{1.5ex} % Sets space between paragraphs.
|
||||
\setlength{\parindent}{0pt} % Indent for first line of new paragraphs.
|
||||
|
||||
% Smaller verbatim type size
|
||||
\let\VERBATIM\verbatim
|
||||
\def\verbatim{%
|
||||
\def\verbatim@font{\small\ttfamily}%
|
||||
\VERBATIM}
|
||||
|
||||
% ============= Caption Modifications =============
|
||||
\usepackage[small]{caption}
|
||||
\usepackage[footnotesize]{subcaption}
|
||||
% For no visible number, use: \caption*{Unnumbered figure caption.}
|
||||
\captionsetup[table]{labelformat=simple, labelsep=period, labelfont=bf}
|
||||
\captionsetup[figure]{labelformat=simple, labelsep=period, labelfont=bf}
|
||||
\captionsetup[subtable]{labelformat=parens, labelsep=space, labelfont=bf}
|
||||
\captionsetup[subfigure]{labelformat=simple, labelsep=period, labelfont=bf}
|
||||
|
||||
% ================== Booleans ==================
|
||||
\def\TRUE{1}
|
||||
\def\FALSE{0}
|
||||
\def\SHOW{1}
|
||||
\def\HIDE{0}
|
||||
|
||||
% ============= Gets Document Info, Generates Heading =============
|
||||
\providecommand{\heading}[5][]{
|
||||
\thispagestyle{empty}
|
||||
\listoftodos
|
||||
\clearpage
|
||||
\pagenumbering{arabic}
|
||||
%
|
||||
\providecommand{\shortname}{#1}
|
||||
\providecommand{\authorname}{#2}
|
||||
\providecommand{\coursename}{#3}
|
||||
\providecommand{\assignment}{#4}
|
||||
\providecommand{\duedate}{#5}
|
||||
\begin{minipage}{0.5\textwidth}
|
||||
\begin{flushleft}
|
||||
\hypertarget{@assignment}{
|
||||
\textbf{\assignment}
|
||||
}\\
|
||||
\authorname
|
||||
\end{flushleft}
|
||||
\end{minipage}
|
||||
\begin{minipage}{0.5\textwidth}
|
||||
\begin{flushright}
|
||||
\coursename\\
|
||||
\duedate\\
|
||||
\end{flushright}
|
||||
\end{minipage}
|
||||
\thispagestyle{empty}
|
||||
}
|
||||
|
||||
% ============= Headers and Footers =============
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
\renewcommand{\footrulewidth}{0.5pt}
|
||||
\pagestyle{fancyplain}
|
||||
\fancyhf{}
|
||||
\lfoot{%
|
||||
\fancyplain{}{%
|
||||
\hyperlink{@assignment}{%
|
||||
\small{%
|
||||
\color{black}{%
|
||||
\assignment
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
\cfoot{%
|
||||
\fancyplain{}{%
|
||||
\small{%
|
||||
\coursename
|
||||
}
|
||||
}
|
||||
}
|
||||
\rfoot{%
|
||||
\fancyplain{}{%
|
||||
\small{\shortname~\thepage~of~\pageref{LastPage}}
|
||||
}
|
||||
}
|
||||
|
||||
% ============= Problem Command =============
|
||||
% INPUT: Points for question [#1] (Optional)
|
||||
\newcounter{theproblem} % Problem counter for environment
|
||||
|
||||
\providecommand{\problem}[1][]{%
|
||||
\addtocounter{theproblem}{1}%
|
||||
\setcounter{table}{0}%
|
||||
\setcounter{figure}{0}%
|
||||
\setcounter{equation}{0}%
|
||||
\noindent%
|
||||
\textbf{%
|
||||
Problem~\arabic{theproblem}.}~\textit{\small{#1}}
|
||||
|
||||
}
|
||||
|
||||
% ============= QED, Page Breaks After QED? =============
|
||||
\providecommand{\@expand}{\HIDE} % Default is to omit pagebreaks after the solution
|
||||
\providecommand{\qqed}{\hfill\rule{2mm}{2mm}\ifnum\@expand=\SHOW\\\pagebreak\fi}
|
||||
|
||||
|
||||
% ============= Solution Command =============
|
||||
\providecommand{\@solutionvis}{1} % Default setting is to show solutions.
|
||||
\providecommand{\solution}[2][\@solutionvis]{
|
||||
\vspace{0.5em}\noindent\textbf{Solution.}
|
||||
\ifnum#1=\SHOW%
|
||||
#2
|
||||
|
||||
\hfill\qqed\vspace{0.1em}
|
||||
\else%
|
||||
\pagebreak%
|
||||
\fi
|
||||
}
|
||||
|
||||
% ============= Chapter, Section, Item Commands =============
|
||||
\providecommand{\chap}[2][0]{
|
||||
\ifnum#1=0%
|
||||
\else%
|
||||
\setcounter{section}{#1}%
|
||||
\addtocounter{section}{-1}%
|
||||
\fi%
|
||||
\vspace{-1.75em}%
|
||||
\section{#2}
|
||||
}
|
||||
|
||||
\providecommand{\sect}[2][0]{
|
||||
\ifnum#1=0%
|
||||
\else%
|
||||
\setcounter{subsection}{#1}%
|
||||
\addtocounter{subsection}{-1}%
|
||||
\fi%
|
||||
\vspace{-0.5em}%
|
||||
\subsection{#2}
|
||||
}
|
||||
|
||||
\providecommand{\subsect}[1]{\noindent\textbf{#1.}}
|
||||
|
||||
% ============= Insert Non-Float Image =============
|
||||
\providecommand{\insertgraphic}[2][0.5\textwidth]{
|
||||
\vspace{-1em}
|
||||
\begin{center}
|
||||
\includegraphics[width=#1]{#2}
|
||||
\end{center}
|
||||
\vspace{-1em}
|
||||
}
|
||||
|
||||
|
||||
|
||||
% ============= Object Numbering by Problem =============
|
||||
\renewcommand{\thetable}{\arabic{theproblem}.\arabic{table}}
|
||||
\renewcommand{\thefigure}{\arabic{theproblem}.\arabic{figure}}
|
||||
\renewcommand{\theequation}{\arabic{theproblem}.\arabic{equation}}
|
||||
|
||||
|
||||
% ============= Formula Environment =============
|
||||
\newcounter{formula}
|
||||
\newenvironment{formula}[1][Formula \arabic{formula}]
|
||||
{
|
||||
\addtocounter{formula}{1}
|
||||
\begin{displaymath}
|
||||
\tag*{\parbox{5em}{\textbf{\small{#1}}}}
|
||||
}{
|
||||
\end{displaymath}\\
|
||||
}
|
||||
|
||||
% ============= Math Table =============
|
||||
\newif\ifcaption
|
||||
\pgfkeys
|
||||
{
|
||||
/mypkg/title/.store in=\Caption,% Any value assigned to title will be stored in \Caption
|
||||
/mypkg/title= , % Initialize so \Caption exists
|
||||
/mypkg/label/.store in=\Label, % Any value assigned to label will be stored in \Label
|
||||
/mypkg/label= , % Initialize so \Label exists
|
||||
/mypkg/caption/.is if=caption, % Declare a boolean, defaults to false
|
||||
}
|
||||
\newenvironment{mathtable}[2][]{
|
||||
\pgfkeys{/mypkg/.cd, #1}%
|
||||
\vspace{-1em}%
|
||||
\begin{table}[ht!]%
|
||||
\small \begin{center}%
|
||||
\begin{displaymath}%
|
||||
\begin{array}{#2}%
|
||||
\toprule
|
||||
}{
|
||||
\bottomrule
|
||||
\end{array}%
|
||||
\end{displaymath}%
|
||||
\ifcaption%
|
||||
\vspace{-1em}\caption{\Caption}\label{\Label}%
|
||||
\fi%
|
||||
\end{center}%
|
||||
\end{table}%
|
||||
\vspace{-1em}%
|
||||
}
|
||||
|
||||
|
||||
% ============= Double-line Column-Heading for table =============
|
||||
\providecommand{\double}[2]{%
|
||||
\multicolumn{1}{c}{%
|
||||
\genfrac{}{}{0pt}{}{\text{#1}}{\text{#2}}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
% ============= Theorem-Style Environments =============
|
||||
\theoremstyle{plain} % Bold label, italic letters
|
||||
\newtheorem{thm}{Theorem}[section] % Numbered by section
|
||||
\newtheorem{lma}[thm]{Lemma}
|
||||
\newtheorem{crl}[thm]{Corollary}
|
||||
\newtheorem{prp}[thm]{Proposition}
|
||||
\newtheorem{cnj}[thm]{Conjecture}
|
||||
\newtheorem{alg}[thm]{Algorithm}
|
||||
|
||||
% Associated environments (for numbered theorem environments)
|
||||
\newenvironment{theorem}[2][]{\begin{thm}[#1]\label{#2}}{\end{thm}}
|
||||
\newenvironment{lemma}[2][]{\begin{lma}[#1]\label{#2}}{\end{lma}}
|
||||
\newenvironment{corollary}[2][]{\begin{crl}[#1]\label{#2}}{\end{thm}}
|
||||
\newenvironment{proposition}[2][]{\begin{prp}[#1]\label{#2}}{\end{crl}}
|
||||
\newenvironment{conjecture}[2][]{\begin{cnj}[#1]\label{#2}}{\end{cnj}}
|
||||
\newenvironment{algorithm}[2][]{\begin{alg}[#1]\label{#2}}{\end{alg}}
|
||||
|
||||
\theoremstyle{remark} % Italic label, roman letters
|
||||
\newtheorem{rmk}{Remark}[section] % Numbered by section. Remarks are used to expand on and integrate material.
|
||||
\newtheorem*{note}{Note} % Un-numbered. Notes are used to comment on specific elements of the material.
|
||||
\newtheorem*{caveat}{Caveat} % Un-numbered. Caveats are used to guide the reader away from a common error.
|
||||
\newtheorem*{warning}{Warning} % Un-numbered. Warnings are used to guide away from especially egregious errors.
|
||||
|
||||
\theoremstyle{definition} % Bold label, roman letters
|
||||
\newtheorem{dfn}{Definition}[section] % Numbered by section. Definitions of concepts and terms.
|
||||
\newtheorem{exm}{Example}[section] % Numbered by section. Illustrative examples.
|
||||
\newtheorem{smm}{Summary}[subsection] % Numbered by subsection. For section summaries.
|
||||
\newtheorem*{question}{Question} % Un-numbered. For questions to motivate further analysis.
|
||||
\newtheorem*{speculation}{Speculation} % Un-numbered. For questions that arise but will not be immediately answered.
|
||||
|
||||
% Associated environments (for numbered theorem environments)
|
||||
\newenvironment{remark}[2][]{\begin{rmk}[#1]\label{#2}}{\end{rmk}}
|
||||
\newenvironment{definition}[2][]{\begin{dfn}[#1]\label{#2}}{\end{dfn}}
|
||||
\newenvironment{example}[2][]{\begin{exm}[#1]\label{#2}}{\end{exm}}
|
||||
\newenvironment{summary}[2][]{\begin{smm}[#1]\label{#2}}{\end{smm}}
|
||||
|
||||
|
||||
% ============= Greek Letters =============
|
||||
\renewcommand{\a}{\ensuremath{\alpha}}
|
||||
\renewcommand{\b}{\ensuremath{\beta}}
|
||||
\renewcommand{\c}{\ensuremath{\gamma}}
|
||||
\newcommand{\ch}{\ensuremath{\chi}}
|
||||
\renewcommand{\d}{\ensuremath{\delta}}
|
||||
\newcommand{\ep}{\ensuremath{\epsilon}}
|
||||
\newcommand{\et}{\ensuremath{\eta}}
|
||||
\newcommand{\ve}{\ensuremath{\varepsilon}}
|
||||
\renewcommand{\r}{\ensuremath{\rho}}
|
||||
\newcommand{\s}{\ensuremath{\sigma}}
|
||||
\renewcommand{\t}{\ensuremath{\tau}}
|
||||
\newcommand{\f}{\ensuremath{\psi}}
|
||||
\newcommand{\w}{\ensuremath{\omega}}
|
||||
\newcommand{\h}{\ensuremath{\phi}}
|
||||
\newcommand{\m}{\ensuremath{\mu}}
|
||||
\renewcommand{\l}{\ensuremath{\lambda}}
|
||||
\renewcommand{\k}{\ensuremath{\kappa}}
|
||||
\renewcommand{\v}{\ensuremath{\nu}}
|
||||
\renewcommand{\i}{\ensuremath{\iota}}
|
||||
\renewcommand{\o}{\ensuremath{\theta}}
|
||||
\newcommand{\z}{\ensuremath{\zeta}}
|
||||
|
||||
% ============= Mathematical Symbols =============
|
||||
\providecommand{\NN}{\ensuremath{\mathbb{N}}}
|
||||
\providecommand{\ZZ}{\ensuremath{\mathbb{Z}}}
|
||||
\providecommand{\QQ}{\ensuremath{\mathbb{Q}}}
|
||||
\providecommand{\RR}{\ensuremath{\mathbb{R}}}
|
||||
\providecommand{\CC}{\ensuremath{\mathbb{C}}}
|
||||
\providecommand{\pd}{\partial} % 'dee' symbol for partial derivatives
|
||||
\providecommand{\dd}{\mathrm{d}} % 'dee' symbol for ordinary derivatives
|
||||
\providecommand{\x}{\times}
|
||||
\providecommand{\n}{\scalebox{0.6}[1.0]{\ensuremath{-}}}
|
||||
|
||||
|
||||
|
||||
% ============= Mathematical Macros =============
|
||||
\providecommand{\Sum}[3][n]{\ensuremath{\sum_{{#1}={#2}}^{#3}}} % Sum from [n]={1}to{2}. \Sum{1}{10}
|
||||
\providecommand{\infsum}[2][n]{\ensuremath{\sum_{{#1}={#2}}^\infty}} % Infinite sum from [n]={1} \infsum{1}
|
||||
\providecommand{\Int}[4][x]{\ensuremath{\int_{#3}^{#4}\!{#2}\,\mathrm{d}{#1}}} % Integrate {1} from {2} to {3} with respect to [x]
|
||||
\providecommand{\Lim}[3][\infty]{\ensuremath{\displaystyle \lim_{{#2}\to{#1}}\!\!{#3}}} % Take the limit from {1} to [infinity] of {3} \Lim{x}{f(x)}
|
||||
\providecommand{\Frac}[2]{\ensuremath{\,^{#1}\!/\!_{#2}}} % Slanted fraction with proper spacing. Usefule for in-line display of fractions.
|
||||
\providecommand{\eval}[3]{\ensuremath{\left[ #1 \right \vert_{#2}^{#3}}}
|
||||
\renewcommand{\L}{\left} % for left-hand right-sizing
|
||||
\providecommand{\R}{\right} % for right-hand right-sizing
|
||||
\providecommand{\D}{\diff} % for writing derivatives
|
||||
\providecommand{\PD}{\diffp} % for writing partial derivatives
|
||||
\providecommand{\full}{\displaystyle} % Forces display style in math mode
|
||||
\providecommand{\Deg}{\ensuremath{^\circ}} % for adding a degree symbol, even if not in math mode
|
||||
\providecommand{\abs}[1]{\left\vert #1 \right\vert} % Absolute Value
|
||||
\providecommand{\norm}[1]{\left \Vert #1 \right \Vert} % Norm (vector magnitude)
|
||||
\providecommand{\e}[1]{\ensuremath{\times 10^{#1}}} % Scientific Notation with times symbol
|
||||
\providecommand{\E}[1]{\ensuremath{10^{#1}}} % Scientific Notation
|
||||
\renewcommand{\u}[1]{\text{ #1}} % For inserting units in Roman text
|
||||
\providecommand{\mc}{\text{,}\hspace{1em}} % For inserting comma and space into math mode
|
||||
\providecommand{\mtxt}[2][]{#1\hspace{0.5em}\text{#2}\hspace{0.5em}} % For insterting text into math mode with space on either side. Option for preceding punctuation.
|
||||
|
||||
% ============= Probability and Statistics =============
|
||||
\providecommand{\prob}[1]{\ensuremath{P\!\left(#1\right)} }
|
||||
\providecommand{\cndprb}[2]{\ensuremath{P\!\left(#1 \left\vert #2 \right. \right)} }
|
||||
\providecommand{\cov}[1]{\ensuremath{\text{Cov}\!\left(#1\right)} }
|
||||
\providecommand{\ex}[1]{\ensuremath{E\!\left[#1\right]} }
|
||||
|
||||
% ============= Linear Algebra =============
|
||||
|
||||
% Column vectors
|
||||
\providecommand{\twovector}[3][r]{\left(\begin{array}{#1} #2 \\ #3\end{array}\right)}
|
||||
\providecommand{\threevector}[4][r]{\left(\begin{array}{#1} #2 \\ #3 \\ #4\end{array}\right)}
|
||||
\providecommand{\fourvector}[5][r]{\left(\begin{array}{#1} #2 \\ #3 \\ #4 \\ #5 \end{array}\right)}
|
||||
|
||||
% ============= Vector Calculus =============
|
||||
% ------------- Susan Lea's notation ---------------
|
||||
\providecommand{\vecs}[1]{\ensuremath{\vec{\bm{#1}}} } % bolded symbol, arrow
|
||||
\providecommand{\vect}[1]{\ensuremath{\vec{\textbf{#1}}} } % bolded text, arrow
|
||||
\providecommand{\unitvecs}[1]{\bm{\hat{#1}}}
|
||||
\providecommand{\unitvect}[1]{\hat{\textbf{#1}}}
|
||||
\providecommand{\Div}[1]{\vecs{\del} \cdot \vect{#1}}
|
||||
\providecommand{\Curl}[1]{\vecs{\del} \times \vect{#1}}
|
||||
\providecommand{\Grad}{\vecs{\del}}
|
||||
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user