mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6ab5870b59 | ||
|
|
7dbe2bb774 | ||
|
|
163a039e0d | ||
|
|
9595e2ba7e | ||
|
|
a696e3a7a2 | ||
|
|
8336dc33e4 | ||
|
|
94fba197d1 | ||
|
|
3504a36c3e | ||
|
|
c8038d1c80 | ||
|
|
8ba8b48caf | ||
|
|
92d0c1f3b7 | ||
|
|
d4186bd34a | ||
|
|
008ba9e23f | ||
|
|
f258e4940d | ||
|
|
a7b8e38bf3 | ||
|
|
b65129a8e1 | ||
|
|
6b0783936f | ||
|
|
2a66b754c2 | ||
|
|
460443b3c8 | ||
|
|
cd99ab2d6e | ||
|
|
6d07302963 | ||
|
|
d831205f6a | ||
|
|
a9b9e6216b | ||
|
|
3ba090de7e | ||
|
|
c105208481 | ||
|
|
0c9e14eeff | ||
|
|
2a8a5cdca9 | ||
|
|
1f91acbd9d | ||
|
|
3e48a84cf1 | ||
|
|
31728a3a78 | ||
|
|
e56a2ed6ad | ||
|
|
35aa57657b | ||
|
|
423c8865bd | ||
|
|
55ecc5f7eb | ||
|
|
6aae7882df | ||
|
|
240fcec3ce | ||
|
|
170c1d4ee8 | ||
|
|
38f0a71ea3 | ||
|
|
62936dc6b5 | ||
|
|
fb9c784f4f | ||
|
|
89477ed2fa | ||
|
|
844679dcbe | ||
|
|
47843e7e78 | ||
|
|
85957ecf56 | ||
|
|
4232b04571 | ||
|
|
34f717526a | ||
|
|
b0b94182a2 | ||
|
|
843e196f00 | ||
|
|
63661dfc6e | ||
|
|
f100dc91c2 | ||
|
|
fd9d63d605 | ||
|
|
5c21c35875 | ||
|
|
370d55fd74 | ||
|
|
0fcc26f778 | ||
|
|
8dd2ddcbf7 | ||
|
|
037857623d | ||
|
|
d7b19d577b | ||
|
|
c70048a3e2 | ||
|
|
b8a5e8505a | ||
|
|
3087d640a3 | ||
|
|
e87b89ab5b | ||
|
|
7aabc6a5ad | ||
|
|
5cc053694a | ||
|
|
653314448c | ||
|
|
48f2949d69 | ||
|
|
baa3cba0fc | ||
|
|
eb54a92328 |
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,5 +1,4 @@
|
||||
Gemfile.lock
|
||||
.bundle/
|
||||
vendor/
|
||||
benchmark/
|
||||
lib/linguist/samples.json
|
||||
|
||||
27
README.md
27
README.md
@@ -34,7 +34,7 @@ The repository stats API, accessed through `#languages`, can be used on a direct
|
||||
|
||||
***API UPDATE***
|
||||
|
||||
Since [Version 3.0.0](https://github.com/github/linguist/releases/tag/v3.0.0) Linguist requires a git repository (in the form of a [Rugged::Repository](https://github.com/libgit2/rugged#repositories)) to be passed when initializing `Linguist::Repository`.
|
||||
Since [Version 3.0.0](https://github.com/github/linguist/releases/tag/v3.0.0) Linguist expects a git repository (in the form of a [Rugged::Repository](https://github.com/libgit2/rugged#repositories)) to be passed when initializing `Linguist::Repository`.
|
||||
|
||||
|
||||
```ruby
|
||||
@@ -104,9 +104,32 @@ Linguist::FileBlob.new("underscore.min.js").generated? # => true
|
||||
|
||||
See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/master/lib/linguist/generated.rb).
|
||||
|
||||
## Overrides
|
||||
|
||||
Linguist supports custom overrides for language definitions and vendored paths. Add a `.gitattributes` file to your project using the keys `linguist-language` and `linguist-vendored` with the standard git-style path matchers for the files you want to override.
|
||||
|
||||
```
|
||||
$ cat .gitattributes
|
||||
*.rb linguist-language=Java
|
||||
|
||||
$ linguist --breakdown
|
||||
100.00% Java
|
||||
|
||||
Java:
|
||||
ruby_file.rb
|
||||
```
|
||||
|
||||
By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. Use the `linguist-vendored` attribute to vendor or un-vendor paths.
|
||||
|
||||
```
|
||||
$ cat .gitattributes
|
||||
special-vendored-path/* linguist-vendored
|
||||
jquery.js linguist-vendored=false
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
github.com is usually running the latest version of the `github-linguist` gem that is released on [RubyGems.org](http://rubygems.org/gems/github-linguist).
|
||||
Github.com is usually running the latest version of the `github-linguist` gem that is released on [RubyGems.org](http://rubygems.org/gems/github-linguist).
|
||||
|
||||
But for development you are going to want to checkout out the source. To get it, clone the repo and run [Bundler](http://gembundler.com/) to install its dependencies.
|
||||
|
||||
|
||||
1
Rakefile
1
Rakefile
@@ -1,3 +1,4 @@
|
||||
require 'bundler/setup'
|
||||
require 'json'
|
||||
require 'rake/clean'
|
||||
require 'rake/testtask'
|
||||
|
||||
@@ -17,6 +17,7 @@ Gem::Specification.new do |s|
|
||||
s.add_dependency 'escape_utils', '~> 1.0.1'
|
||||
s.add_dependency 'mime-types', '~> 1.19'
|
||||
s.add_dependency 'pygments.rb', '~> 0.6.0'
|
||||
s.add_dependency 'rugged', '~> 0.21.1b2'
|
||||
|
||||
s.add_development_dependency 'json'
|
||||
s.add_development_dependency 'mocha'
|
||||
|
||||
@@ -37,6 +37,7 @@ AGS Script:
|
||||
extensions:
|
||||
- .asc
|
||||
- .ash
|
||||
tm_scope: source.c++
|
||||
|
||||
ANTLR:
|
||||
type: programming
|
||||
@@ -50,6 +51,7 @@ APL:
|
||||
color: "#8a0707"
|
||||
extensions:
|
||||
- .apl
|
||||
- .dyalog
|
||||
|
||||
ASP:
|
||||
type: programming
|
||||
@@ -79,6 +81,7 @@ ATS:
|
||||
- .atxt
|
||||
- .hats
|
||||
- .sats
|
||||
tm_scope: source.ocaml
|
||||
|
||||
ActionScript:
|
||||
type: programming
|
||||
@@ -117,12 +120,14 @@ ApacheConf:
|
||||
- apache
|
||||
extensions:
|
||||
- .apacheconf
|
||||
tm_scope: source.apache-config
|
||||
|
||||
Apex:
|
||||
type: programming
|
||||
lexer: Java
|
||||
extensions:
|
||||
- .cls
|
||||
tm_scope: source.java
|
||||
|
||||
AppleScript:
|
||||
type: programming
|
||||
@@ -147,6 +152,7 @@ Arduino:
|
||||
lexer: C++
|
||||
extensions:
|
||||
- .ino
|
||||
tm_scope: source.c++
|
||||
|
||||
AsciiDoc:
|
||||
type: prose
|
||||
@@ -174,6 +180,8 @@ Assembly:
|
||||
- nasm
|
||||
extensions:
|
||||
- .asm
|
||||
- .a51
|
||||
tm_scope: source.asm.x86
|
||||
|
||||
Augeas:
|
||||
type: programming
|
||||
@@ -198,6 +206,7 @@ AutoIt:
|
||||
- AutoItScript
|
||||
extensions:
|
||||
- .au3
|
||||
tm_scope: source.autoit.3
|
||||
|
||||
Awk:
|
||||
type: programming
|
||||
@@ -223,6 +232,7 @@ Batchfile:
|
||||
extensions:
|
||||
- .bat
|
||||
- .cmd
|
||||
tm_scope: source.dosbatch
|
||||
|
||||
Befunge:
|
||||
extensions:
|
||||
@@ -236,6 +246,7 @@ BlitzBasic:
|
||||
extensions:
|
||||
- .bb
|
||||
- .decls
|
||||
tm_scope: source.blitzmax
|
||||
|
||||
BlitzMax:
|
||||
type: programming
|
||||
@@ -248,6 +259,7 @@ Bluespec:
|
||||
lexer: verilog
|
||||
extensions:
|
||||
- .bsv
|
||||
tm_scope: source.verilog
|
||||
|
||||
Boo:
|
||||
type: programming
|
||||
@@ -259,6 +271,7 @@ Brainfuck:
|
||||
extensions:
|
||||
- .b
|
||||
- .bf
|
||||
tm_scope: source.bf
|
||||
|
||||
Brightscript:
|
||||
type: programming
|
||||
@@ -322,6 +335,7 @@ C-ObjDump:
|
||||
lexer: c-objdump
|
||||
extensions:
|
||||
- .c-objdump
|
||||
tm_scope: objdump.x86asm
|
||||
|
||||
C2hs Haskell:
|
||||
type: programming
|
||||
@@ -331,6 +345,7 @@ C2hs Haskell:
|
||||
- c2hs
|
||||
extensions:
|
||||
- .chs
|
||||
tm_scope: source.haskell
|
||||
|
||||
CLIPS:
|
||||
type: programming
|
||||
@@ -378,6 +393,7 @@ ChucK:
|
||||
lexer: Java
|
||||
extensions:
|
||||
- .ck
|
||||
tm_scope: source.java
|
||||
|
||||
Cirru:
|
||||
type: programming
|
||||
@@ -441,6 +457,7 @@ ColdFusion:
|
||||
- cfml
|
||||
extensions:
|
||||
- .cfm
|
||||
tm_scope: text.html.cfm
|
||||
|
||||
ColdFusion CFC:
|
||||
type: programming
|
||||
@@ -453,6 +470,7 @@ ColdFusion CFC:
|
||||
- cfc
|
||||
extensions:
|
||||
- .cfc
|
||||
tm_scope: source.cfscript
|
||||
|
||||
Common Lisp:
|
||||
type: programming
|
||||
@@ -481,6 +499,7 @@ Component Pascal:
|
||||
extensions:
|
||||
- .cp
|
||||
- .cps
|
||||
tm_scope: source.pascal
|
||||
|
||||
Coq:
|
||||
type: programming
|
||||
@@ -495,6 +514,7 @@ Cpp-ObjDump:
|
||||
- .cppobjdump
|
||||
- .c++objdump
|
||||
- .cxx-objdump
|
||||
tm_scope: objdump.x86asm
|
||||
|
||||
Creole:
|
||||
type: prose
|
||||
@@ -509,11 +529,13 @@ Crystal:
|
||||
extensions:
|
||||
- .cr
|
||||
ace_mode: ruby
|
||||
tm_scope: source.ruby
|
||||
|
||||
Cucumber:
|
||||
lexer: Gherkin
|
||||
extensions:
|
||||
- .feature
|
||||
tm_scope: text.gherkin.feature
|
||||
|
||||
Cuda:
|
||||
type: programming
|
||||
@@ -521,12 +543,14 @@ Cuda:
|
||||
extensions:
|
||||
- .cu
|
||||
- .cuh
|
||||
tm_scope: source.cuda-c++
|
||||
|
||||
Cycript:
|
||||
type: programming
|
||||
lexer: JavaScript
|
||||
extensions:
|
||||
- .cy
|
||||
tm_scope: source.js
|
||||
|
||||
Cython:
|
||||
type: programming
|
||||
@@ -548,6 +572,7 @@ D-ObjDump:
|
||||
lexer: d-objdump
|
||||
extensions:
|
||||
- .d-objdump
|
||||
tm_scope: objdump.x86asm
|
||||
|
||||
DM:
|
||||
type: programming
|
||||
@@ -557,6 +582,7 @@ DM:
|
||||
- .dm
|
||||
aliases:
|
||||
- byond
|
||||
tm_scope: source.c++
|
||||
|
||||
DOT:
|
||||
type: data
|
||||
@@ -612,6 +638,7 @@ Ecere Projects:
|
||||
lexer: JSON
|
||||
extensions:
|
||||
- .epj
|
||||
tm_scope: source.json
|
||||
|
||||
ECL:
|
||||
type: programming
|
||||
@@ -628,6 +655,7 @@ Eagle:
|
||||
extensions:
|
||||
- .sch
|
||||
- .brd
|
||||
tm_scope: text.xml
|
||||
|
||||
Eiffel:
|
||||
type: programming
|
||||
@@ -648,6 +676,7 @@ Elm:
|
||||
lexer: Haskell
|
||||
extensions:
|
||||
- .elm
|
||||
tm_scope: source.haskell
|
||||
|
||||
Emacs Lisp:
|
||||
type: programming
|
||||
@@ -670,6 +699,7 @@ EmberScript:
|
||||
extensions:
|
||||
- .em
|
||||
- .emberscript
|
||||
tm_scope: source.coffee
|
||||
|
||||
Erlang:
|
||||
type: programming
|
||||
@@ -690,6 +720,7 @@ F#:
|
||||
- .fs
|
||||
- .fsi
|
||||
- .fsx
|
||||
tm_scope: source.fsharp
|
||||
|
||||
FLUX:
|
||||
type: programming
|
||||
@@ -744,6 +775,7 @@ Fantom:
|
||||
color: "#dbded5"
|
||||
extensions:
|
||||
- .fan
|
||||
tm_scope: source.fan
|
||||
|
||||
Forth:
|
||||
type: programming
|
||||
@@ -761,6 +793,7 @@ Frege:
|
||||
lexer: Haskell
|
||||
extensions:
|
||||
- .fr
|
||||
tm_scope: source.haskell
|
||||
|
||||
G-code:
|
||||
type: data
|
||||
@@ -776,6 +809,7 @@ Game Maker Language:
|
||||
lexer: JavaScript
|
||||
extensions:
|
||||
- .gml
|
||||
tm_scope: source.js
|
||||
|
||||
GAMS:
|
||||
type: programming
|
||||
@@ -825,18 +859,21 @@ GLSL:
|
||||
Genshi:
|
||||
extensions:
|
||||
- .kid
|
||||
tm_scope: text.xml.genshi
|
||||
|
||||
Gentoo Ebuild:
|
||||
group: Shell
|
||||
lexer: Bash
|
||||
extensions:
|
||||
- .ebuild
|
||||
tm_scope: source.shell
|
||||
|
||||
Gentoo Eclass:
|
||||
group: Shell
|
||||
lexer: Bash
|
||||
extensions:
|
||||
- .eclass
|
||||
tm_scope: source.shell
|
||||
|
||||
Gettext Catalog:
|
||||
search_term: pot
|
||||
@@ -846,6 +883,7 @@ Gettext Catalog:
|
||||
extensions:
|
||||
- .po
|
||||
- .pot
|
||||
tm_scope: source.po
|
||||
|
||||
Glyph:
|
||||
type: programming
|
||||
@@ -853,6 +891,7 @@ Glyph:
|
||||
lexer: Tcl
|
||||
extensions:
|
||||
- .glf
|
||||
tm_scope: source.tcl
|
||||
|
||||
Gnuplot:
|
||||
type: programming
|
||||
@@ -879,6 +918,7 @@ Gosu:
|
||||
- .gst
|
||||
- .gsx
|
||||
- .vark
|
||||
tm_scope: source.gosu.2
|
||||
|
||||
Grace:
|
||||
type: programming
|
||||
@@ -896,6 +936,7 @@ Grammatical Framework:
|
||||
- .gf
|
||||
searchable: true
|
||||
color: "#ff0000"
|
||||
tm_scope: source.haskell
|
||||
|
||||
Graph Modeling Language:
|
||||
type: data
|
||||
@@ -913,6 +954,7 @@ Groff:
|
||||
- '.5'
|
||||
- '.6'
|
||||
- '.7'
|
||||
tm_scope: text.groff
|
||||
|
||||
Groovy:
|
||||
type: programming
|
||||
@@ -934,6 +976,7 @@ Groovy Server Pages:
|
||||
- gsp
|
||||
extensions:
|
||||
- .gsp
|
||||
tm_scope: text.html.jsp
|
||||
|
||||
HTML:
|
||||
type: markup
|
||||
@@ -989,9 +1032,12 @@ Haml:
|
||||
Handlebars:
|
||||
type: markup
|
||||
lexer: Handlebars
|
||||
aliases:
|
||||
- hbs
|
||||
extensions:
|
||||
- .handlebars
|
||||
- .hbs
|
||||
tm_scope: text.html.handlebars
|
||||
|
||||
Harbour:
|
||||
type: programming
|
||||
@@ -1014,6 +1060,7 @@ Haxe:
|
||||
extensions:
|
||||
- .hx
|
||||
- .hxsl
|
||||
tm_scope: source.haxe.2
|
||||
|
||||
Hy:
|
||||
type: programming
|
||||
@@ -1043,6 +1090,7 @@ INI:
|
||||
- .ini
|
||||
- .prefs
|
||||
- .properties
|
||||
tm_scope: source.ini
|
||||
|
||||
Inno Setup:
|
||||
extensions:
|
||||
@@ -1063,6 +1111,7 @@ Inform 7:
|
||||
extensions:
|
||||
- .ni
|
||||
- .i7x
|
||||
tm_scope: source.inform
|
||||
|
||||
Inno Setup:
|
||||
extensions:
|
||||
@@ -1128,6 +1177,7 @@ JSON5:
|
||||
lexer: JavaScript
|
||||
extensions:
|
||||
- .json5
|
||||
tm_scope: source.js
|
||||
|
||||
JSONLD:
|
||||
type: data
|
||||
@@ -1136,6 +1186,7 @@ JSONLD:
|
||||
lexer: JavaScript
|
||||
extensions:
|
||||
- .jsonld
|
||||
tm_scope: source.js
|
||||
|
||||
JSONiq:
|
||||
type: programming
|
||||
@@ -1143,12 +1194,14 @@ JSONiq:
|
||||
lexer: XQuery
|
||||
extensions:
|
||||
- .jq
|
||||
tm_scope: source.xquery
|
||||
|
||||
Jade:
|
||||
group: HTML
|
||||
type: markup
|
||||
extensions:
|
||||
- .jade
|
||||
tm_scope: source.jade
|
||||
|
||||
Java:
|
||||
type: programming
|
||||
@@ -1165,6 +1218,7 @@ Java Server Pages:
|
||||
- jsp
|
||||
extensions:
|
||||
- .jsp
|
||||
tm_scope: text.html.jsp
|
||||
|
||||
JavaScript:
|
||||
type: programming
|
||||
@@ -1216,6 +1270,7 @@ Kit:
|
||||
ace_mode: html
|
||||
extensions:
|
||||
- .kit
|
||||
tm_scope: text.html.basic
|
||||
|
||||
Kotlin:
|
||||
type: programming
|
||||
@@ -1223,6 +1278,7 @@ Kotlin:
|
||||
- .kt
|
||||
- .ktm
|
||||
- .kts
|
||||
tm_scope: source.Kotlin
|
||||
|
||||
LFE:
|
||||
type: programming
|
||||
@@ -1231,11 +1287,19 @@ LFE:
|
||||
color: "#004200"
|
||||
lexer: Common Lisp
|
||||
group: Erlang
|
||||
tm_scope: source.lisp
|
||||
|
||||
LLVM:
|
||||
extensions:
|
||||
- .ll
|
||||
|
||||
LOLCODE:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
extensions:
|
||||
- .lol
|
||||
color: "#cc9900"
|
||||
|
||||
LSL:
|
||||
type: programming
|
||||
lexer: LSL
|
||||
@@ -1261,6 +1325,7 @@ Lasso:
|
||||
- .las
|
||||
- .lasso9
|
||||
- .ldml
|
||||
tm_scope: file.lasso
|
||||
|
||||
Latte:
|
||||
type: markup
|
||||
@@ -1269,6 +1334,7 @@ Latte:
|
||||
lexer: Smarty
|
||||
extensions:
|
||||
- .latte
|
||||
tm_scope: source.smarty
|
||||
|
||||
Less:
|
||||
type: markup
|
||||
@@ -1276,6 +1342,7 @@ Less:
|
||||
lexer: CSS
|
||||
extensions:
|
||||
- .less
|
||||
tm_scope: source.css
|
||||
|
||||
LilyPond:
|
||||
lexer: Text only
|
||||
@@ -1316,6 +1383,7 @@ Literate Haskell:
|
||||
- lhs
|
||||
extensions:
|
||||
- .lhs
|
||||
tm_scope: text.tex.latex.haskell
|
||||
|
||||
LiveScript:
|
||||
type: programming
|
||||
@@ -1347,6 +1415,7 @@ LookML:
|
||||
color: "#652B81"
|
||||
extensions:
|
||||
- .lookml
|
||||
tm_scope: source.yaml
|
||||
|
||||
Lua:
|
||||
type: programming
|
||||
@@ -1354,6 +1423,7 @@ Lua:
|
||||
color: "#fa1fa1"
|
||||
extensions:
|
||||
- .lua
|
||||
- .fcgi
|
||||
- .nse
|
||||
- .pd_lua
|
||||
- .rbxs
|
||||
@@ -1368,6 +1438,7 @@ M:
|
||||
extensions:
|
||||
- .mumps
|
||||
- .m
|
||||
tm_scope: source.lisp
|
||||
|
||||
MTML:
|
||||
type: markup
|
||||
@@ -1375,6 +1446,7 @@ MTML:
|
||||
color: "#0095d9"
|
||||
extensions:
|
||||
- .mtml
|
||||
tm_scope: text.html.basic
|
||||
|
||||
Makefile:
|
||||
aliases:
|
||||
@@ -1393,6 +1465,7 @@ Mako:
|
||||
extensions:
|
||||
- .mako
|
||||
- .mao
|
||||
tm_scope: text.html.mako
|
||||
|
||||
Markdown:
|
||||
type: prose
|
||||
@@ -1406,6 +1479,7 @@ Markdown:
|
||||
- .mkdn
|
||||
- .mkdown
|
||||
- .ron
|
||||
tm_scope: text.html.markdown
|
||||
|
||||
Mask:
|
||||
type: markup
|
||||
@@ -1414,6 +1488,7 @@ Mask:
|
||||
ace_mode: scss
|
||||
extensions:
|
||||
- .mask
|
||||
tm_scope: source.scss
|
||||
|
||||
Mathematica:
|
||||
type: programming
|
||||
@@ -1444,6 +1519,7 @@ Max:
|
||||
- .maxproj
|
||||
- .mxt
|
||||
- .pat
|
||||
tm_scope: source.json
|
||||
|
||||
MediaWiki:
|
||||
type: prose
|
||||
@@ -1460,6 +1536,7 @@ Mercury:
|
||||
extensions:
|
||||
- .m
|
||||
- .moo
|
||||
tm_scope: source.prolog
|
||||
|
||||
MiniD: # Legacy
|
||||
searchable: false
|
||||
@@ -1476,6 +1553,7 @@ Mirah:
|
||||
- .duby
|
||||
- .mir
|
||||
- .mirah
|
||||
tm_scope: source.ruby
|
||||
|
||||
Monkey:
|
||||
type: programming
|
||||
@@ -1515,12 +1593,14 @@ NetLogo:
|
||||
color: "#ff2b2b"
|
||||
extensions:
|
||||
- .nlogo
|
||||
tm_scope: source.lisp
|
||||
|
||||
Nginx:
|
||||
type: markup
|
||||
lexer: Nginx configuration file
|
||||
extensions:
|
||||
- .nginxconf
|
||||
tm_scope: source.nginx
|
||||
|
||||
Nimrod:
|
||||
type: programming
|
||||
@@ -1552,6 +1632,7 @@ Nu:
|
||||
- .nu
|
||||
filenames:
|
||||
- Nukefile
|
||||
tm_scope: source.scheme
|
||||
|
||||
NumPy:
|
||||
group: Python
|
||||
@@ -1578,6 +1659,7 @@ ObjDump:
|
||||
lexer: objdump
|
||||
extensions:
|
||||
- .objdump
|
||||
tm_scope: objdump.x86asm
|
||||
|
||||
Objective-C:
|
||||
type: programming
|
||||
@@ -1608,6 +1690,7 @@ Objective-J:
|
||||
extensions:
|
||||
- .j
|
||||
- .sj
|
||||
tm_scope: source.js.objj
|
||||
|
||||
Omgrofl:
|
||||
type: programming
|
||||
@@ -1635,6 +1718,7 @@ OpenCL:
|
||||
extensions:
|
||||
- .cl
|
||||
- .opencl
|
||||
tm_scope: source.c
|
||||
|
||||
OpenEdge ABL:
|
||||
type: programming
|
||||
@@ -1645,6 +1729,7 @@ OpenEdge ABL:
|
||||
extensions:
|
||||
- .p
|
||||
- .cls
|
||||
tm_scope: source.abl
|
||||
|
||||
OpenSCAD:
|
||||
type: programming
|
||||
@@ -1680,6 +1765,7 @@ PAWN:
|
||||
color: "#dbb284"
|
||||
extensions:
|
||||
- .pwn
|
||||
tm_scope: source.c++
|
||||
|
||||
PHP:
|
||||
type: programming
|
||||
@@ -1690,6 +1776,7 @@ PHP:
|
||||
- .php
|
||||
- .aw
|
||||
- .ctp
|
||||
- .fcgi
|
||||
- .module
|
||||
- .php3
|
||||
- .php4
|
||||
@@ -1810,6 +1897,7 @@ PostScript:
|
||||
extensions:
|
||||
- .ps
|
||||
- .eps
|
||||
tm_scope: source.postscript
|
||||
|
||||
PowerShell:
|
||||
type: programming
|
||||
@@ -1852,6 +1940,7 @@ Protocol Buffer:
|
||||
- Protocol Buffers
|
||||
extensions:
|
||||
- .proto
|
||||
tm_scope: source.protobuf
|
||||
|
||||
Puppet:
|
||||
type: programming
|
||||
@@ -1874,6 +1963,7 @@ PureScript:
|
||||
lexer: Haskell
|
||||
extensions:
|
||||
- .purs
|
||||
tm_scope: source.haskell
|
||||
|
||||
Python:
|
||||
type: programming
|
||||
@@ -1882,6 +1972,7 @@ Python:
|
||||
extensions:
|
||||
- .py
|
||||
- .cgi
|
||||
- .fcgi
|
||||
- .gyp
|
||||
- .lmi
|
||||
- .pyde
|
||||
@@ -1910,6 +2001,7 @@ QML:
|
||||
color: "#44a51c"
|
||||
extensions:
|
||||
- .qml
|
||||
tm_scope: source.qml
|
||||
|
||||
QMake:
|
||||
lexer: Text only
|
||||
@@ -1942,6 +2034,7 @@ RDoc:
|
||||
wrap: true
|
||||
extensions:
|
||||
- .rdoc
|
||||
tm_scope: text.rdoc
|
||||
|
||||
REALbasic:
|
||||
type: programming
|
||||
@@ -1953,12 +2046,14 @@ REALbasic:
|
||||
- .rbres
|
||||
- .rbtbar
|
||||
- .rbuistate
|
||||
tm_scope: source.vbnet
|
||||
|
||||
RHTML:
|
||||
type: markup
|
||||
group: HTML
|
||||
extensions:
|
||||
- .rhtml
|
||||
tm_scope: text.html.ruby
|
||||
|
||||
RMarkdown:
|
||||
type: prose
|
||||
@@ -1978,6 +2073,7 @@ Racket:
|
||||
- .rktd
|
||||
- .rktl
|
||||
- .scrbl
|
||||
tm_scope: source.scheme
|
||||
|
||||
Ragel in Ruby Host:
|
||||
type: programming
|
||||
@@ -2021,6 +2117,7 @@ RobotFramework:
|
||||
extensions:
|
||||
- .robot
|
||||
# - .txt
|
||||
tm_scope: text.robot
|
||||
|
||||
Rouge:
|
||||
type: programming
|
||||
@@ -2029,6 +2126,7 @@ Rouge:
|
||||
color: "#cc0088"
|
||||
extensions:
|
||||
- .rg
|
||||
tm_scope: source.clojure
|
||||
|
||||
Ruby:
|
||||
type: programming
|
||||
@@ -2043,6 +2141,7 @@ Ruby:
|
||||
extensions:
|
||||
- .rb
|
||||
- .builder
|
||||
- .fcgi
|
||||
- .gemspec
|
||||
- .god
|
||||
- .irbrc
|
||||
@@ -2103,6 +2202,7 @@ SQF:
|
||||
extensions:
|
||||
- .sqf
|
||||
- .hqf
|
||||
tm_scope: source.c++
|
||||
|
||||
SQL:
|
||||
type: data
|
||||
@@ -2121,6 +2221,7 @@ STON:
|
||||
lexer: JSON
|
||||
extensions:
|
||||
- .ston
|
||||
tm_scope: source.json
|
||||
|
||||
Sage:
|
||||
type: programming
|
||||
@@ -2128,6 +2229,7 @@ Sage:
|
||||
group: Python
|
||||
extensions:
|
||||
- .sage
|
||||
tm_scope: source.python
|
||||
|
||||
Sass:
|
||||
type: markup
|
||||
@@ -2151,6 +2253,7 @@ Scaml:
|
||||
type: markup
|
||||
extensions:
|
||||
- .scaml
|
||||
tm_scope: source.scaml
|
||||
|
||||
Scheme:
|
||||
type: programming
|
||||
@@ -2195,6 +2298,8 @@ Shell:
|
||||
- .bash
|
||||
- .bats
|
||||
- .cgi
|
||||
- .command
|
||||
- .fcgi
|
||||
- .tmux
|
||||
- .zsh
|
||||
interpreters:
|
||||
@@ -2222,6 +2327,7 @@ Slash:
|
||||
color: "#007eff"
|
||||
extensions:
|
||||
- .sl
|
||||
tm_scope: text.html.slash
|
||||
|
||||
Slim:
|
||||
group: HTML
|
||||
@@ -2248,12 +2354,14 @@ SourcePawn:
|
||||
- sourcemod
|
||||
extensions:
|
||||
- .sp
|
||||
tm_scope: source.sp
|
||||
|
||||
Squirrel:
|
||||
type: programming
|
||||
lexer: C++
|
||||
extensions:
|
||||
- .nut
|
||||
tm_scope: source.c++
|
||||
|
||||
Standard ML:
|
||||
type: programming
|
||||
@@ -2265,6 +2373,7 @@ Standard ML:
|
||||
- .fun
|
||||
- .sig
|
||||
- .sml
|
||||
tm_scope: source.ml
|
||||
|
||||
Stata:
|
||||
type: programming
|
||||
@@ -2312,6 +2421,7 @@ TOML:
|
||||
type: data
|
||||
extensions:
|
||||
- .toml
|
||||
tm_scope: source.toml
|
||||
|
||||
TXL:
|
||||
type: programming
|
||||
@@ -2326,6 +2436,9 @@ Tcl:
|
||||
- .tcl
|
||||
- .adp
|
||||
- .tm
|
||||
interpreters:
|
||||
- tclsh
|
||||
- wish
|
||||
|
||||
Tcsh:
|
||||
type: programming
|
||||
@@ -2333,6 +2446,7 @@ Tcsh:
|
||||
extensions:
|
||||
- .tcsh
|
||||
- .csh
|
||||
tm_scope: source.shell
|
||||
|
||||
TeX:
|
||||
type: markup
|
||||
@@ -2362,6 +2476,7 @@ Tea:
|
||||
type: markup
|
||||
extensions:
|
||||
- .tea
|
||||
tm_scope: source.tea
|
||||
|
||||
Textile:
|
||||
type: prose
|
||||
@@ -2385,6 +2500,7 @@ Twig:
|
||||
lexer: HTML+Django/Jinja
|
||||
extensions:
|
||||
- .twig
|
||||
tm_scope: text.html.twig
|
||||
|
||||
TypeScript:
|
||||
type: programming
|
||||
@@ -2393,6 +2509,7 @@ TypeScript:
|
||||
- ts
|
||||
extensions:
|
||||
- .ts
|
||||
tm_scope: source.ts
|
||||
|
||||
Unified Parallel C:
|
||||
type: programming
|
||||
@@ -2402,6 +2519,7 @@ Unified Parallel C:
|
||||
color: "#755223"
|
||||
extensions:
|
||||
- .upc
|
||||
tm_scope: source.c
|
||||
|
||||
UnrealScript:
|
||||
type: programming
|
||||
@@ -2409,6 +2527,7 @@ UnrealScript:
|
||||
lexer: Java
|
||||
extensions:
|
||||
- .uc
|
||||
tm_scope: source.java
|
||||
|
||||
VCL:
|
||||
type: programming
|
||||
@@ -2417,6 +2536,7 @@ VCL:
|
||||
color: "#0298c3"
|
||||
extensions:
|
||||
- .vcl
|
||||
tm_scope: source.perl
|
||||
|
||||
VHDL:
|
||||
type: programming
|
||||
@@ -2457,6 +2577,7 @@ VimL:
|
||||
- .vim
|
||||
filenames:
|
||||
- .vimrc
|
||||
- _vimrc
|
||||
- vimrc
|
||||
- gvimrc
|
||||
|
||||
@@ -2473,6 +2594,7 @@ Visual Basic:
|
||||
- .vba
|
||||
- .vbhtml
|
||||
- .vbs
|
||||
tm_scope: source.vbnet
|
||||
|
||||
Volt:
|
||||
type: programming
|
||||
@@ -2480,12 +2602,14 @@ Volt:
|
||||
color: "#0098db"
|
||||
extensions:
|
||||
- .volt
|
||||
tm_scope: source.d
|
||||
|
||||
XC:
|
||||
type: programming
|
||||
lexer: C
|
||||
extensions:
|
||||
- .xc
|
||||
tm_scope: source.c
|
||||
|
||||
XML:
|
||||
type: markup
|
||||
@@ -2564,6 +2688,7 @@ XProc:
|
||||
extensions:
|
||||
- .xpl
|
||||
- .xproc
|
||||
tm_scope: text.xml
|
||||
|
||||
XQuery:
|
||||
type: programming
|
||||
@@ -2579,6 +2704,7 @@ XS:
|
||||
lexer: C
|
||||
extensions:
|
||||
- .xs
|
||||
tm_scope: source.c
|
||||
|
||||
XSLT:
|
||||
type: programming
|
||||
@@ -2587,6 +2713,7 @@ XSLT:
|
||||
extensions:
|
||||
- .xslt
|
||||
- .xsl
|
||||
tm_scope: text.xml.xsl
|
||||
|
||||
Xojo:
|
||||
type: programming
|
||||
@@ -2598,6 +2725,7 @@ Xojo:
|
||||
- .xojo_script
|
||||
- .xojo_toolbar
|
||||
- .xojo_window
|
||||
tm_scope: source.vbnet
|
||||
|
||||
Xtend:
|
||||
type: programming
|
||||
@@ -2621,6 +2749,7 @@ Zephir:
|
||||
color: "#118f9e"
|
||||
extensions:
|
||||
- .zep
|
||||
tm_scope: text.html.php
|
||||
|
||||
Zimpl:
|
||||
type: programming
|
||||
@@ -2644,6 +2773,7 @@ edn:
|
||||
color: "#db5855"
|
||||
extensions:
|
||||
- .edn
|
||||
tm_scope: source.clojure
|
||||
|
||||
fish:
|
||||
type: programming
|
||||
@@ -2688,6 +2818,7 @@ wisp:
|
||||
color: "#7582D1"
|
||||
extensions:
|
||||
- .wisp
|
||||
tm_scope: source.clojure
|
||||
|
||||
xBase:
|
||||
type: programming
|
||||
|
||||
@@ -128,13 +128,20 @@ module Linguist
|
||||
protected
|
||||
|
||||
def compute_stats(old_commit_oid, cache = nil)
|
||||
file_map = cache ? cache.dup : {}
|
||||
old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree
|
||||
|
||||
read_index
|
||||
|
||||
diff = Rugged::Tree.diff(repository, old_tree, current_tree)
|
||||
|
||||
# Clear file map and fetch full diff if any .gitattributes files are changed
|
||||
if cache && diff.each_delta.any? { |delta| File.basename(delta.new_file[:path]) == ".gitattributes" }
|
||||
diff = Rugged::Tree.diff(repository, old_tree = nil, current_tree)
|
||||
file_map = {}
|
||||
else
|
||||
file_map = cache ? cache.dup : {}
|
||||
end
|
||||
|
||||
diff.each_delta do |delta|
|
||||
old = delta.old_file[:path]
|
||||
new = delta.new_file[:path]
|
||||
|
||||
@@ -242,3 +242,7 @@
|
||||
# Typesafe Activator
|
||||
- (^|/)activator$
|
||||
- (^|/)activator\.bat$
|
||||
|
||||
# ProGuard
|
||||
- proguard.pro
|
||||
- proguard-rules.pro
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
module Linguist
|
||||
VERSION = "3.3.1"
|
||||
VERSION = "3.4.1"
|
||||
end
|
||||
|
||||
367
samples/APL/UT.dyalog
Normal file
367
samples/APL/UT.dyalog
Normal file
@@ -0,0 +1,367 @@
|
||||
:NameSpace UT
|
||||
|
||||
sac ← 0
|
||||
expect_orig ← expect ← ⎕NS⍬
|
||||
exception ← ⍬
|
||||
nexpect_orig ← nexpect ← ⎕NS⍬
|
||||
|
||||
∇ {Z}←{Conf}run Argument;PRE_test;POST_test;TEST_step;COVER_step;FromSpace
|
||||
|
||||
load_display_if_not_already_loaded
|
||||
load_salt_scripts_into_current_namespace_if_configured
|
||||
|
||||
FromSpace←1⊃⎕RSI
|
||||
|
||||
PRE_test←{}
|
||||
POST_test←{}
|
||||
COVER_step←{}
|
||||
:If 0≠⎕NC'Conf'
|
||||
:If Conf has'cover_target'
|
||||
PRE_test←{{}⎕PROFILE'start'}
|
||||
POST_test←{{}⎕PROFILE'stop'}
|
||||
:EndIf
|
||||
:EndIf
|
||||
|
||||
:If is_function Argument
|
||||
TEST_step←single_function_test_function
|
||||
COVER_file←Argument,'_coverage.html'
|
||||
|
||||
:ElseIf is_list_of_functions Argument
|
||||
TEST_step←list_of_functions_test_function
|
||||
COVER_file←'list_coverage.html'
|
||||
|
||||
:ElseIf is_file Argument
|
||||
TEST_step←file_test_function
|
||||
COVER_file←(get_file_name Argument),'_coverage.html'
|
||||
|
||||
:ElseIf is_dir Argument
|
||||
test_files←test_files_in_dir Argument
|
||||
TEST_step←test_dir_function
|
||||
Argument←test_files
|
||||
:EndIf
|
||||
|
||||
:If 0≠⎕NC'Conf'
|
||||
:If Conf has'cover_target'
|
||||
COVER_step←{Conf,←⊂('cover_file'COVER_file)
|
||||
generate_coverage_page Conf}
|
||||
:EndIf
|
||||
:EndIf
|
||||
|
||||
PRE_test ⍬
|
||||
Z←FromSpace TEST_step Argument
|
||||
POST_test ⍬
|
||||
COVER_step ⍬
|
||||
∇
|
||||
|
||||
∇ load_display_if_not_already_loaded
|
||||
:If 0=⎕NC'#.DISPLAY'
|
||||
'DISPLAY'#.⎕CY'display'
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
∇ load_salt_scripts_into_current_namespace_if_configured
|
||||
:If 0≠⎕NC'#.UT.appdir'
|
||||
:If ⍬≢#.UT.appdir
|
||||
⎕SE.SALT.Load #.UT.appdir,'src/*.dyalog -target=#'
|
||||
⎕SE.SALT.Load #.UT.appdir,'test/*.dyalog -target=#'
|
||||
:EndIf
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
∇ Z←FromSpace single_function_test_function TestName
|
||||
Z←run_ut FromSpace TestName
|
||||
∇
|
||||
|
||||
∇ Z←FromSpace list_of_functions_test_function ListOfNames;t
|
||||
t←⎕TS
|
||||
Z←run_ut¨{FromSpace ⍵}¨ListOfNames
|
||||
t←⎕TS-t
|
||||
('Test execution report')print_passed_crashed_failed Z t
|
||||
∇
|
||||
|
||||
∇ Z←FromSpace file_test_function FilePath;FileNS;Functions;TestFunctions;t
|
||||
FileNS←⎕SE.SALT.Load FilePath,' -target=#'
|
||||
Functions←↓FileNS.⎕NL 3
|
||||
TestFunctions←(is_test¨Functions)/Functions
|
||||
:If (0/⍬,⊂0/'')≡TestFunctions
|
||||
⎕←'No test functions found'
|
||||
Z←⍬
|
||||
:Else
|
||||
t←⎕TS
|
||||
Z←run_ut¨{FileNS ⍵}¨TestFunctions
|
||||
t←⎕TS-t
|
||||
(FilePath,' tests')print_passed_crashed_failed Z t
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
∇ Z←FromSpace test_dir_function Test_files
|
||||
:If Test_files≡⍬/⍬,⊂''
|
||||
⎕←'No test files found'
|
||||
Z←⍬
|
||||
:Else
|
||||
Z←#.UT.run¨Test_files
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
∇ Z←get_file_name Argument;separator
|
||||
separator←⊃⌽(Argument∊'/\')/⍳⍴Argument
|
||||
Z←¯7↓separator↓Argument
|
||||
∇
|
||||
|
||||
∇ generate_coverage_page Conf;ProfileData;CoverResults;HTML
|
||||
ProfileData←⎕PROFILE'data'
|
||||
ToCover←retrieve_coverables¨(⊃'cover_target'in Conf)
|
||||
:If (⍴ToCover)≡(⍴⊂1)
|
||||
ToCover←⊃ToCover
|
||||
:EndIf
|
||||
Representations←get_representation¨ToCover
|
||||
CoverResults←ProfileData∘generate_cover_result¨↓ToCover,[1.5]Representations
|
||||
HTML←generate_html CoverResults
|
||||
Conf write_html_to_page HTML
|
||||
⎕PROFILE'clear'
|
||||
∇
|
||||
|
||||
∇ Z←retrieve_coverables Something;nc;functions
|
||||
nc←⎕NC Something
|
||||
:If nc=3
|
||||
Z←Something
|
||||
:ElseIf nc=9
|
||||
functions←strip¨↓⍎Something,'.⎕NL 3'
|
||||
Z←{(Something,'.',⍵)}¨functions
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
∇ Z←strip input
|
||||
Z←(input≠' ')/input
|
||||
∇
|
||||
|
||||
∇ Z←get_representation Function;nc;rep
|
||||
nc←⎕NC⊂Function
|
||||
:If nc=3.1
|
||||
rep←↓⎕CR Function
|
||||
rep[1]←⊂'∇',⊃rep[1]
|
||||
rep,←⊂'∇'
|
||||
rep←↑rep
|
||||
:Else
|
||||
rep←⎕CR Function
|
||||
:EndIf
|
||||
Z←rep
|
||||
∇
|
||||
|
||||
∇ Z←ProfileData generate_cover_result(name representation);Indices;lines;functionlines;covered_lines
|
||||
Indices←({name≡⍵}¨ProfileData[;1])/⍳⍴ProfileData[;1]
|
||||
lines←ProfileData[Indices;2]
|
||||
nc←⎕NC⊂name
|
||||
:If 3.1=nc
|
||||
functionlines←¯2+⍴↓representation
|
||||
:Else
|
||||
functionlines←⊃⍴↓representation
|
||||
:EndIf
|
||||
covered_lines←(⍬∘≢¨lines)/lines
|
||||
Z←(nc lines functionlines covered_lines representation)
|
||||
∇
|
||||
|
||||
∇ Z←generate_html CoverResults;Covered;Total;Percentage;CoverageText;ColorizedCode;Timestamp;Page
|
||||
Covered←⊃⊃+/{⍴4⊃⍵}¨CoverResults
|
||||
Total←⊃⊃+/{3⊃⍵}¨CoverResults
|
||||
Percentage←100×Covered÷Total
|
||||
CoverageText←'Coverage: ',Percentage,'% (',Covered,'/',Total,')'
|
||||
ColorizedCode←⊃,/{colorize_code_by_coverage ⍵}¨CoverResults
|
||||
Timestamp←generate_timestamp_text
|
||||
Page←⍬
|
||||
Page,←⊂⍬,'<html>'
|
||||
Page,←⊂⍬,'<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>'
|
||||
Page,←⊂⍬,'<style>pre cov {line-height:80%;}'
|
||||
Page,←⊂⍬,'pre cov {color: green;}'
|
||||
Page,←⊂⍬,'pre uncov {line-height:80%;}'
|
||||
Page,←⊂⍬,'pre uncov {color:red;}</style>'
|
||||
Page,←⊂⍬,CoverageText
|
||||
Page,←⊂⍬,'<pre>'
|
||||
Page,←ColorizedCode
|
||||
Page,←⊂⍬,'</pre>'
|
||||
Page,←Timestamp
|
||||
Page,←⊂⍬,'</html>'
|
||||
Z←Page
|
||||
∇
|
||||
|
||||
∇ Z←colorize_code_by_coverage CoverResult;Colors;Ends;Code
|
||||
:If 3.1=⊃CoverResult
|
||||
Colors←(2+3⊃CoverResult)⍴⊂'<uncov>'
|
||||
Colors[1]←⊂''
|
||||
Colors[⍴Colors]←⊂''
|
||||
Ends←(2+3⊃CoverResult)⍴⊂'</uncov>'
|
||||
Ends[1]←⊂''
|
||||
Ends[⍴Ends]←⊂''
|
||||
:Else
|
||||
Colors←(3⊃CoverResult)⍴⊂'<uncov>'
|
||||
Ends←(3⊃CoverResult)⍴⊂'</uncov>'
|
||||
:EndIf
|
||||
Colors[1+4⊃CoverResult]←⊂'<cov>'
|
||||
Ends[1+4⊃CoverResult]←⊂'</cov>'
|
||||
Code←↓5⊃CoverResult
|
||||
Z←Colors,[1.5]Code
|
||||
Z←{⍺,(⎕UCS 13),⍵}/Z,Ends
|
||||
∇
|
||||
|
||||
∇ Z←generate_timestamp_text;TS;YYMMDD;HHMMSS
|
||||
TS←⎕TS
|
||||
YYMMDD←⊃{⍺,'-',⍵}/3↑TS
|
||||
HHMMSS←⊃{⍺,':',⍵}/3↑3↓TS
|
||||
Z←'Page generated: ',YYMMDD,'|',HHMMSS
|
||||
∇
|
||||
|
||||
∇ Conf write_html_to_page Page;tie;filename
|
||||
filename←(⊃'cover_out'in Conf),(⊃'cover_file'in Conf)
|
||||
:Trap 22
|
||||
tie←filename ⎕NTIE 0
|
||||
filename ⎕NERASE tie
|
||||
filename ⎕NCREATE tie
|
||||
:Else
|
||||
tie←filename ⎕NCREATE 0
|
||||
:EndTrap
|
||||
Simple_array←⍕⊃,/Page
|
||||
(⎕UCS'UTF-8'⎕UCS Simple_array)⎕NAPPEND tie
|
||||
∇
|
||||
|
||||
∇ Z←is_function Argument
|
||||
Z←'_TEST'≡¯5↑Argument
|
||||
∇
|
||||
|
||||
∇ Z←is_list_of_functions Argument
|
||||
Z←2=≡Argument
|
||||
∇
|
||||
|
||||
∇ Z←is_file Argument
|
||||
Z←'.dyalog'≡¯7↑Argument
|
||||
∇
|
||||
|
||||
∇ Z←is_dir Argument;attr
|
||||
:If 'Linux'≡5↑⊃'.'⎕WG'APLVersion'
|
||||
Z←'yes'≡⊃⎕CMD'test -d ',Argument,' && echo yes || echo no'
|
||||
:Else
|
||||
'gfa'⎕NA'I kernel32|GetFileAttributes* <0t'
|
||||
:If Z←¯1≠attr←gfa⊂Argument ⍝ If file exists
|
||||
Z←⊃2 16⊤attr ⍝ Return bit 4
|
||||
:EndIf
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
|
||||
∇ Z←test_files_in_dir Argument
|
||||
:If 'Linux'≡5↑⊃'.'⎕WG'APLVersion'
|
||||
Z←⎕SH'find ',Argument,' -name \*_tests.dyalog'
|
||||
:Else
|
||||
#.⎕CY'files'
|
||||
Z←#.Files.Dir Argument,'\*_tests.dyalog'
|
||||
Z←(Argument,'\')∘,¨Z
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
∇ Z←run_ut ut_data;returned;crashed;pass;crash;fail;message
|
||||
(returned crashed time)←execute_function ut_data
|
||||
(pass crash fail)←determine_pass_crash_or_fail returned crashed
|
||||
message←determine_message pass fail crashed(2⊃ut_data)returned time
|
||||
print_message_to_screen message
|
||||
Z←(pass crash fail)
|
||||
∇
|
||||
|
||||
∇ Z←execute_function ut_data;function;t
|
||||
reset_UT_globals
|
||||
function←(⍕(⊃ut_data[1])),'.',⊃ut_data[2]
|
||||
:Trap sac
|
||||
:If 3.2≡⎕NC⊂function
|
||||
t←⎕TS
|
||||
Z←(⍎function,' ⍬')0
|
||||
t←⎕TS-t
|
||||
:Else
|
||||
t←⎕TS
|
||||
Z←(⍎function)0
|
||||
t←⎕TS-t
|
||||
:EndIf
|
||||
|
||||
:Else
|
||||
Z←(↑⎕DM)1
|
||||
:If exception≢⍬
|
||||
expect←exception
|
||||
Z[2]←0
|
||||
t←⎕TS-t
|
||||
:EndIf
|
||||
:EndTrap
|
||||
Z,←⊂t
|
||||
∇
|
||||
|
||||
∇ reset_UT_globals
|
||||
expect_orig ← expect← ⎕NS⍬
|
||||
exception←⍬
|
||||
nexpect_orig ← nexpect← ⎕NS⍬
|
||||
∇
|
||||
|
||||
∇ Z←is_test FunctionName;wsIndex
|
||||
wsIndex←FunctionName⍳' '
|
||||
FunctionName←(wsIndex-1)↑FunctionName
|
||||
Z←'_TEST'≡¯5↑FunctionName
|
||||
∇
|
||||
|
||||
∇ Heading print_passed_crashed_failed(ArrayRes time)
|
||||
⎕←'-----------------------------------------'
|
||||
⎕←Heading
|
||||
⎕←' ⍋ Passed: ',+/{1⊃⍵}¨ArrayRes
|
||||
⎕←' ⍟ Crashed: ',+/{2⊃⍵}¨ArrayRes
|
||||
⎕←' ⍒ Failed: ',+/{3⊃⍵}¨ArrayRes
|
||||
⎕←' ○ Runtime: ',time[5],'m',time[6],'s',time[7],'ms'
|
||||
∇
|
||||
|
||||
determine_pass_crash_or_fail←{
|
||||
r c←⍵ ⋄ 0≠c:0 1 0 ⋄ z←(0 0 1)(1 0 0)
|
||||
expect_orig≢expect:(⎕IO+expect≡r)⊃z ⋄ (⎕IO+nexpect≢r)⊃z
|
||||
}
|
||||
|
||||
∇ Z←determine_message(pass fail crashed name returned time)
|
||||
:If crashed
|
||||
Z←'CRASHED: 'failure_message name returned
|
||||
:ElseIf pass
|
||||
Z←'Passed ',time[5],'m',time[6],'s',time[7],'ms'
|
||||
:Else
|
||||
Z←'FAILED: 'failure_message name returned
|
||||
:EndIf
|
||||
∇
|
||||
|
||||
∇ print_message_to_screen message
|
||||
⎕←message
|
||||
∇
|
||||
|
||||
∇ Z←term_to_text Term;Text;Rows
|
||||
Text←#.DISPLAY Term
|
||||
Rows←1⊃⍴Text
|
||||
Z←(Rows 4⍴''),Text
|
||||
∇
|
||||
|
||||
∇ Z←Cause failure_message(name returned);hdr;exp;expterm;got;gotterm
|
||||
hdr←Cause,name
|
||||
exp←'Expected'
|
||||
expterm←term_to_text #.UT.expect
|
||||
got←'Got'
|
||||
gotterm←term_to_text returned
|
||||
Z←align_and_join_message_parts hdr exp expterm got gotterm
|
||||
∇
|
||||
|
||||
∇ Z←align_and_join_message_parts Parts;hdr;exp;expterm;got;gotterm;R1;C1;R2;C2;W
|
||||
(hdr exp expterm got gotterm)←Parts
|
||||
(R1 C1)←⍴expterm
|
||||
(R2 C2)←⍴gotterm
|
||||
W←⊃⊃⌈/C1 C2(⍴hdr)(⍴exp)(⍴got)
|
||||
Z←(W↑hdr),[0.5](W↑exp)
|
||||
Z←Z⍪(R1 W↑expterm)
|
||||
Z←Z⍪(W↑got)
|
||||
Z←Z⍪(R2 W↑gotterm)
|
||||
∇
|
||||
|
||||
∇ Z←confparam in config
|
||||
Z←1↓⊃({confparam≡⊃⍵}¨config)/config
|
||||
∇
|
||||
|
||||
∇ Z←config has confparam
|
||||
Z←∨/{confparam≡⊃⍵}¨config
|
||||
∇
|
||||
|
||||
:EndNameSpace
|
||||
66
samples/Assembly/External Interrupt.a51
Normal file
66
samples/Assembly/External Interrupt.a51
Normal file
@@ -0,0 +1,66 @@
|
||||
ORG 0000h
|
||||
SJMP START
|
||||
ORG 0003h
|
||||
LCALL INT0_ISR
|
||||
RETI
|
||||
ORG 000Bh
|
||||
LCALL T0_ISR
|
||||
RETI
|
||||
ORG 0013h
|
||||
LCALL INT1_ISR
|
||||
RETI
|
||||
ORG 001Bh
|
||||
LCALL T1_ISR
|
||||
RETI
|
||||
ORG 0023h
|
||||
LCALL UART_ISR
|
||||
RETI
|
||||
ORG 0030h
|
||||
START:
|
||||
MOV A,#11111110b
|
||||
SETB IT0 ; Set External Interrupt 0 to be falling edge triggered
|
||||
SETB EX0 ; Enable External Interrut 0
|
||||
SETB EA ; Enable Interrupt
|
||||
LEFT:
|
||||
CJNE A,#01111111b,LOOP1
|
||||
JMP RIGHT
|
||||
LOOP1:
|
||||
MOV P1,A
|
||||
RL A
|
||||
LCALL DELAY
|
||||
SJMP LEFT
|
||||
RIGHT:
|
||||
CJNE A,#11111110b,LOOP2
|
||||
JMP LEFT
|
||||
LOOP2:
|
||||
MOV P1,A
|
||||
RR A
|
||||
LCALL DELAY
|
||||
SJMP RIGHT
|
||||
|
||||
INT0_ISR:
|
||||
MOV R1,#3
|
||||
FLASH:
|
||||
MOV P1,#00h
|
||||
LCALL DELAY
|
||||
MOV P1,#0FFh
|
||||
LCALL DELAY
|
||||
DJNZ R1,FLASH
|
||||
RET
|
||||
T0_ISR:
|
||||
RET
|
||||
INT1_ISR:
|
||||
RET
|
||||
T1_ISR:
|
||||
RET
|
||||
UART_ISR:
|
||||
RET
|
||||
|
||||
DELAY: MOV R5,#20 ;R5*20 mS
|
||||
D1: MOV R6,#40
|
||||
D2: MOV R7,#249
|
||||
DJNZ R7,$
|
||||
DJNZ R6,D2
|
||||
DJNZ R5,D1
|
||||
RET
|
||||
END
|
||||
795
samples/LOLCODE/LOLTracer.lol
Normal file
795
samples/LOLCODE/LOLTracer.lol
Normal file
@@ -0,0 +1,795 @@
|
||||
HAI 1.3
|
||||
OBTW
|
||||
Author: Logan Kelly (logan.kelly@gmail.com)
|
||||
Github: https://github.com/LoganKelly/LOLTracer
|
||||
TLDR
|
||||
|
||||
OBTW prev is the number used in the randin function.
|
||||
I had to declare it in global scope so that it
|
||||
would retain its value between calls to randin.
|
||||
TLDR
|
||||
I HAS A prev ITZ 0
|
||||
I HAS A rand_max ITZ 104729
|
||||
|
||||
|
||||
OBTW Equivalent to C's rand() function, except returns
|
||||
a number in the range of 0 to rand_max.
|
||||
TLDR
|
||||
HOW IZ I randin
|
||||
I HAS A a ITZ 33083
|
||||
I HAS A c ITZ 67607
|
||||
prev R MOD OF SUM OF PRODUKT OF prev AN a AN c AN rand_max
|
||||
FOUND YR prev
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
BTW Returns a random number within the range of 0-1.
|
||||
HOW IZ I rand_onein
|
||||
I HAS A rand_num ITZ I IZ randin MKAY
|
||||
rand_num IS NOW A NUMBAR
|
||||
I HAS A rand_max_float ITZ MAEK rand_max A NUMBAR
|
||||
FOUND YR QUOSHUNT OF rand_num AN rand_max_float
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Equivalent to C ceil() function. Returns the next
|
||||
largest integer for the given number.
|
||||
TLDR
|
||||
HOW IZ I ceilin YR num
|
||||
I HAS A int_num ITZ num
|
||||
int_num IS NOW A NUMBR
|
||||
BOTH SAEM int_num AN num, O RLY?
|
||||
YA RLY, FOUND YR num
|
||||
OIC
|
||||
DIFFRINT num AN SMALLR OF num AN 0, O RLY?
|
||||
YA RLY
|
||||
int_num R SUM OF int_num AN 1
|
||||
FOUND YR MAEK int_num A NUMBAR
|
||||
OIC
|
||||
DIFFRINT num AN BIGGR OF num AN 0, O RLY?
|
||||
YA RLY
|
||||
FOUND YR MAEK int_num A NUMBAR
|
||||
OIC
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Convert a number to hexadecimal. This
|
||||
is returned as a string.
|
||||
TLDR
|
||||
HOW IZ I decimal_to_hex YR num
|
||||
I HAS A i ITZ 0
|
||||
I HAS A rem
|
||||
I HAS A hex_num ITZ A BUKKIT
|
||||
I HAS A decimal_num ITZ num
|
||||
IM IN YR num_loop
|
||||
rem R MOD OF decimal_num AN 16
|
||||
I HAS A hex_digit
|
||||
rem, WTF?
|
||||
OMG 10, hex_digit R "A", GTFO
|
||||
OMG 11, hex_digit R "B", GTFO
|
||||
OMG 12, hex_digit R "C", GTFO
|
||||
OMG 13, hex_digit R "D", GTFO
|
||||
OMG 14, hex_digit R "E", GTFO
|
||||
OMG 15, hex_digit R "F", GTFO
|
||||
OMGWTF, hex_digit R rem
|
||||
OIC
|
||||
hex_num HAS A SRS i ITZ hex_digit
|
||||
decimal_num R QUOSHUNT OF decimal_num AN 16
|
||||
BOTH SAEM decimal_num AN 0, O RLY?
|
||||
YA RLY, GTFO
|
||||
NO WAI, i R SUM OF i AN 1
|
||||
OIC
|
||||
IM OUTTA YR num_loop
|
||||
I HAS A hex_string ITZ A YARN
|
||||
IM IN YR string_reverse
|
||||
DIFFRINT i AN BIGGR OF i AN 0, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
hex_string R SMOOSH hex_string AN hex_num'Z SRS i MKAY
|
||||
i R DIFF OF i AN 1
|
||||
IM OUTTA YR string_reverse
|
||||
FOUND YR hex_string
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Convert a number to binary. This is returned
|
||||
as a bukkit which has slots number 0-N where
|
||||
n is equal to the number of binary digits - 1.
|
||||
It also has a length slot which is equal to
|
||||
the number of binary digits.
|
||||
TLDR
|
||||
HOW IZ I decimal_to_binary YR num
|
||||
I HAS A i ITZ 0
|
||||
I HAS A decimal_num ITZ num
|
||||
I HAS A binary_num ITZ A BUKKIT
|
||||
IM IN YR num_loop
|
||||
binary_num HAS A SRS i ITZ MOD OF decimal_num AN 2
|
||||
decimal_num R QUOSHUNT OF decimal_num AN 2
|
||||
BOTH SAEM decimal_num AN 0, O RLY?
|
||||
YA RLY
|
||||
I HAS A length ITZ SUM OF i AN 1
|
||||
binary_num HAS A length ITZ length
|
||||
GTFO
|
||||
NO WAI, i R SUM OF i AN 1
|
||||
OIC
|
||||
IM OUTTA YR num_loop
|
||||
FOUND YR binary_num
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Bitwise and two binary numbers. The numbers
|
||||
must be provided in the format returned by
|
||||
decimal_to_binary.
|
||||
TLDR
|
||||
HOW IZ I bitwise_andin YR first_num AN YR second_num
|
||||
I HAS A binary_first_num ITZ I IZ decimal_to_binary YR first_num MKAY
|
||||
I HAS A binary_second_num ITZ I IZ decimal_to_binary YR second_num MKAY
|
||||
I HAS A first_length ITZ binary_first_num'Z length
|
||||
I HAS A second_length ITZ binary_second_num'Z length
|
||||
I HAS A max_length ITZ BIGGR OF first_length AN second_length
|
||||
I HAS A final_binary ITZ A BUKKIT
|
||||
I HAS A final_length ITZ 0
|
||||
I HAS A i ITZ 0
|
||||
IM IN YR num_loop
|
||||
BOTH SAEM i AN max_length, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
I HAS A first_binary ITZ 0
|
||||
I HAS A second_binary ITZ 0
|
||||
DIFFRINT i AN BIGGR OF i AN first_length, O RLY?
|
||||
YA RLY, first_binary R binary_first_num'Z SRS i
|
||||
OIC
|
||||
DIFFRINT i AN BIGGR OF i AN second_length, O RLY?
|
||||
YA RLY, second_binary R binary_second_num'Z SRS i
|
||||
OIC
|
||||
EITHER OF BOTH SAEM first_binary AN 0 AN ...
|
||||
BOTH SAEM second_binary AN 0, O RLY?
|
||||
YA RLY, final_binary HAS A SRS i ITZ 0
|
||||
NO WAI
|
||||
final_binary HAS A SRS i ITZ 1
|
||||
final_length R SUM OF i AN 1
|
||||
OIC
|
||||
i R SUM OF i AN 1
|
||||
IM OUTTA YR num_loop
|
||||
final_binary HAS A length ITZ final_length
|
||||
FOUND YR final_binary
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Bitshift left a binary number by num_bits.
|
||||
The binary number must be provided in the format
|
||||
returned by decimal_to_binary.
|
||||
TLDR
|
||||
HOW IZ I bit_shift_leftin YR num AN YR num_bits
|
||||
I HAS A binary_num ITZ num
|
||||
I HAS A length ITZ binary_num'Z length
|
||||
I HAS A i ITZ SUM OF DIFF OF length AN 1 AN num_bits
|
||||
I HAS A shifted_binary_num ITZ A BUKKIT
|
||||
IM IN YR num_loop
|
||||
BOTH SAEM i AN -1, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
I HAS A unshifted_index ITZ DIFF OF i AN num_bits
|
||||
BOTH SAEM unshifted_index AN BIGGR OF unshifted_index AN 0, O RLY?
|
||||
YA RLY
|
||||
shifted_binary_num HAS A SRS i ITZ binary_num'Z SRS unshifted_index
|
||||
NO WAI
|
||||
shifted_binary_num HAS A SRS i ITZ 0
|
||||
OIC
|
||||
i R DIFF OF i AN 1
|
||||
IM OUTTA YR num_loop
|
||||
shifted_binary_num HAS A length ITZ SUM OF binary_num'Z length AN num_bits
|
||||
FOUND YR shifted_binary_num
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Convert a binary number into a decimal number.
|
||||
The binary number must be provided in the format
|
||||
return by decimal_to_binary.
|
||||
TLDR
|
||||
HOW IZ I binary_to_decimal YR binary_num
|
||||
I HAS A length ITZ binary_num'Z length
|
||||
I HAS A decimal_num ITZ 0
|
||||
I HAS A i ITZ 0
|
||||
IM IN YR num_loop
|
||||
BOTH SAEM i AN length, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
I HAS A binary_value ITZ binary_num'Z SRS i
|
||||
I HAS A decimal_value ITZ 0
|
||||
BOTH SAEM binary_value AN 1, O RLY?
|
||||
YA RLY, decimal_value R I IZ power_of YR 2 AN YR i MKAY
|
||||
OIC
|
||||
decimal_num R SUM OF decimal_num AN decimal_value
|
||||
i R SUM OF i AN 1
|
||||
IM OUTTA YR num_loop
|
||||
FOUND YR decimal_num
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Equivalent to C's pow() function. Raises
|
||||
base to the power of exponent.
|
||||
TLDR
|
||||
HOW IZ I power_of YR base AN YR exponent
|
||||
I HAS A i ITZ 0
|
||||
I HAS A num ITZ 1
|
||||
IM IN YR num_loop
|
||||
BOTH SAEM i AN exponent, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
num R PRODUKT OF num AN base
|
||||
i R SUM OF i AN 1
|
||||
IM OUTTA YR num_loop
|
||||
FOUND YR num
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Return a binary number as a YARN.
|
||||
The binary number must be provided in the format
|
||||
return by decimal_to_binary.
|
||||
TLDR
|
||||
HOW IZ I binary_to_string YR binary_num
|
||||
I HAS A binary_string ITZ A YARN
|
||||
I HAS A i ITZ DIFF OF binary_num'Z length AN 1
|
||||
IM IN YR string_reverse
|
||||
DIFFRINT i AN BIGGR OF i AN 0, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
binary_string R SMOOSH binary_string AN binary_num'Z SRS i MKAY
|
||||
i R DIFF OF i AN 1
|
||||
IM OUTTA YR string_reverse
|
||||
FOUND YR binary_string
|
||||
IF U SAY SO
|
||||
|
||||
OBTW Converts a hexadecimal number to the character
|
||||
equivalent in UNICODE. This was originally used
|
||||
in an attempt to write out to the P6 format of PPM,
|
||||
but the string produced by VISIBLE didn't seem to be
|
||||
properly formatted for some reason. Instead I fell back
|
||||
to P3 of PPM and wrote out to regular ascii format.
|
||||
TLDR
|
||||
HOW IZ I hex_to_char YR hex_string
|
||||
OBTW This is a hack I found for converting hexadecimal strings
|
||||
into their unicode character equivalents. Instead of using
|
||||
the ":" character directly, we escape it and get it using its
|
||||
unicode hex value (3A). This allows us to assemble the string
|
||||
with our inserted hex value without errors.
|
||||
TLDR
|
||||
FOUND YR SMOOSH ":(3A)" AN "(" AN hex_string AN ")" MKAY
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW Equivalent to C's square() function. However it will only
|
||||
produce accurate results if the number is no larger than
|
||||
1048576. See the note below. This is based upon Newton's
|
||||
Approximation Method as adapted in C at this website (#11):
|
||||
|
||||
http://www.codeproject.com/Articles/69941/Best-Square-Root-Method-Algorithm-Function-Precisi
|
||||
TLDR
|
||||
HOW IZ I square_rootin YR number
|
||||
OBTW Forcing a comparison between the accuracy and a number
|
||||
which is so big that its precision is larger than the
|
||||
accuracy causes an infinite loop to occur. For this
|
||||
reason we have to set any number larger than 2^20 to
|
||||
a value below it.
|
||||
TLDR
|
||||
BOTH SAEM number AN BIGGR OF number AN 1048576.00, O RLY?
|
||||
YA RLY, number R 1048575.00
|
||||
OIC
|
||||
I HAS A accuracy ITZ 0.0001
|
||||
I HAS A lower ITZ A NUMBAR
|
||||
I HAS A upper ITZ A NUMBAR
|
||||
I HAS A guess ITZ A NUMBAR
|
||||
DIFFRINT number AN BIGGR OF number AN 1.0, O RLY?
|
||||
YA RLY
|
||||
lower R number
|
||||
upper R 1.0
|
||||
NO WAI
|
||||
lower R 1.0
|
||||
upper R number
|
||||
OIC
|
||||
IM IN YR LOOP
|
||||
I HAS A delta ITZ DIFF OF upper AN lower
|
||||
BOTH SAEM delta AN SMALLR OF delta AN accuracy, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
I HAS A guess ITZ QUOSHUNT OF SUM OF lower AN upper AN 2.0
|
||||
I HAS A guess_squared ITZ PRODUKT OF guess AN guess
|
||||
DIFFRINT guess_squared AN SMALLR OF guess_squared AN number, O RLY?
|
||||
YA RLY
|
||||
upper R guess
|
||||
NO WAI
|
||||
lower R guess
|
||||
OIC
|
||||
IM OUTTA YR LOOP
|
||||
FOUND YR QUOSHUNT OF SUM OF lower AN upper AN 2.0
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW
|
||||
The intersection test for line [o, d]
|
||||
Return 2 if a hit was found (and also return distance t and bouncing ray n).
|
||||
Return 0 if no hit was found but ray goes upward
|
||||
Return 1 if no hit was found but ray goes downward
|
||||
TLDR
|
||||
HOW IZ I tracin YR o AN YR d
|
||||
I HAS A t ITZ 1000000000
|
||||
I HAS A m ITZ 0
|
||||
BOTH SAEM d'Z z AN 0, O RLY?
|
||||
YA RLY, d'Z z R 0.00001
|
||||
OIC
|
||||
I HAS A p ITZ QUOSHUNT OF DIFF OF 0 AN o'Z z AN d'Z z
|
||||
I HAS A n ITZ LIEK A Vector
|
||||
DIFFRINT p AN SMALLR OF p AN 0.01, O RLY?
|
||||
YA RLY
|
||||
t R p
|
||||
n R Vector IZ constructin YR 0.0 AN YR 0.0 AN YR 1.0 MKAY
|
||||
m R 1
|
||||
OIC
|
||||
|
||||
BTW The world is encoded in sphere_positions, with 9 lines and 19 columns
|
||||
I HAS A k ITZ 18
|
||||
IM IN YR column_loop BTW For each column of objects
|
||||
BOTH SAEM k AN -1, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
|
||||
I HAS A j ITZ 8
|
||||
IM IN YR line_loop BTW For each line on that column
|
||||
BOTH SAEM j AN -1, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
|
||||
I HAS A sphere_positions_line ITZ sphere_positions'Z SRS j
|
||||
sphere_positions_line'Z SRS k, O RLY?
|
||||
YA RLY
|
||||
BTW There is a sphere, but does the ray hit it?
|
||||
p R Vector IZ addin YR o AN YR ...
|
||||
Vector IZ constructin YR DIFF OF 0 AN k AN ...
|
||||
YR 0 AN ...
|
||||
YR DIFF OF DIFF OF 0 AN j AN 4 MKAY ...
|
||||
MKAY
|
||||
I HAS A b ITZ Vector IZ dot_productin YR p AN YR d MKAY
|
||||
I HAS A q_c ITZ DIFF OF Vector IZ dot_productin YR p AN YR p MKAY AN 1
|
||||
I HAS A q ITZ DIFF OF PRODUKT OF b AN b AN q_c
|
||||
|
||||
|
||||
DIFFRINT q AN SMALLR OF q AN 0, O RLY?
|
||||
YA RLY
|
||||
BTW It does, compute the distance camera-sphere
|
||||
I HAS A s ITZ DIFF OF DIFF OF 0 AN b AN I IZ square_rootin YR q MKAY
|
||||
|
||||
|
||||
BOTH OF DIFFRINT s AN BIGGR OF s AN t AN ...
|
||||
DIFFRINT s AN SMALLR OF s AN 0.01, O RLY?
|
||||
YA RLY
|
||||
BTW So far this is the minimum distance, save it. And
|
||||
BTW also compute the bouncing ray vector into 'n'
|
||||
t R s
|
||||
I HAS A bouncing_ray ITZ Vector IZ scalin YR direction AN YR t MKAY
|
||||
bouncing_ray R Vector IZ addin YR p AN YR bouncing_ray MKAY
|
||||
n R Vector IZ normalizin YR bouncing_ray MKAY
|
||||
m R 2
|
||||
OIC
|
||||
OIC
|
||||
OIC
|
||||
j R DIFF OF j AN 1
|
||||
IM OUTTA YR line_loop
|
||||
k R DIFF OF k AN 1
|
||||
IM OUTTA YR column_loop
|
||||
I HAS A result ITZ A BUKKIT
|
||||
result HAS A m ITZ m
|
||||
result HAS A t ITZ t
|
||||
result HAS A n ITZ n
|
||||
FOUND YR result
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW
|
||||
Sample the world and return the pixel color for
|
||||
a ray [o, d]
|
||||
TLDR
|
||||
HOW IZ I samplin YR o AN YR d
|
||||
|
||||
BTW Search for an intersection ray Vs. world
|
||||
I HAS A result ITZ I IZ tracin YR o AN YR d MKAY
|
||||
I HAS A m ITZ result'Z m
|
||||
I HAS A t ITZ result'Z t
|
||||
I HAS A n ITZ result'Z n
|
||||
|
||||
BOTH SAEM m AN 0, O RLY?
|
||||
YA RLY
|
||||
BTW No sphere found and the ray goes upward: Generate a sky color
|
||||
I HAS A vec_result ITZ Vector IZ constructin YR 0.7 AN YR 0.6 AN YR 1.0 MKAY
|
||||
|
||||
I HAS A z_component ITZ d'Z z
|
||||
DIFFRINT z_component AN BIGGR OF z_component AN 0, O RLY?
|
||||
YA RLY, z_component R 0
|
||||
OIC
|
||||
I HAS A vec_num ITZ DIFF OF 1 AN z_component
|
||||
vec_num R I IZ power_of YR vec_num AN YR 4 MKAY
|
||||
FOUND YR Vector IZ scalin YR vec_result AN YR vec_num MKAY
|
||||
OIC
|
||||
|
||||
BTW h = intersection coordinate
|
||||
I HAS A h ITZ Vector IZ scalin YR d AN YR t MKAY
|
||||
h R Vector IZ addin YR o AN YR h MKAY
|
||||
BTW l = direction to light (with random delta for soft shadows)
|
||||
I HAS A l ITZ LIEK A Vector
|
||||
l HAS A x ITZ SUM OF 9 AN I IZ rand_onein MKAY
|
||||
l HAS A y ITZ SUM OF 9 AN I IZ rand_onein MKAY
|
||||
l HAS A z ITZ 16
|
||||
I HAS A l_two ITZ Vector IZ scalin YR h AN YR -1.0 MKAY
|
||||
l R Vector IZ addin YR l AN YR l_two MKAY
|
||||
l R Vector IZ normalizin YR l MKAY
|
||||
BTW r = The half-vector
|
||||
I HAS A r ITZ Vector IZ dot_productin YR n AN YR d MKAY
|
||||
r R PRODUKT OF r AN -2
|
||||
r R Vector IZ scalin YR n AN YR r MKAY
|
||||
r R Vector IZ addin YR d AN YR r MKAY
|
||||
|
||||
BTW Calculate the lambertian factor
|
||||
I HAS A b ITZ Vector IZ dot_productin YR l AN YR n MKAY
|
||||
|
||||
BTW Calculate illumination factor (lambertian coefficient > 0 or in shadow)?
|
||||
I HAS A illumination_result ITZ I IZ tracin YR h AN YR l MKAY
|
||||
I HAS A i_m ITZ illumination_result'Z m
|
||||
EITHER OF DIFFRINT b AN BIGGR OF b AN 0 AN BOTH SAEM i_m AN 2, O RLY?
|
||||
YA RLY, b R 0
|
||||
OIC
|
||||
|
||||
BTW Calculate the color 'p' with diffuse and specular component
|
||||
I HAS A base
|
||||
DIFFRINT b AN SMALLR OF b AN 0, O RLY?
|
||||
YA RLY, base R 1
|
||||
NO WAI, base R 0
|
||||
OIC
|
||||
base R Vector IZ scalin YR r AN YR base MKAY
|
||||
base R Vector IZ dot_productin YR l AN YR r MKAY
|
||||
I HAS A p ITZ I IZ power_of YR base AN YR 99 MKAY
|
||||
|
||||
BOTH SAEM m AN 1, O RLY?
|
||||
YA RLY
|
||||
BTW No sphere was hit and the ray was going downward: Generate a floor color
|
||||
h R Vector IZ scalin YR h AN YR 0.2 MKAY
|
||||
I HAS A ceil_h_x ITZ I IZ ceilin YR h'Z x MKAY
|
||||
I HAS A ceil_h_y ITZ I IZ ceilin YR h'Z y MKAY
|
||||
I HAS A ceil_h ITZ SUM OF ceil_h_x AN ceil_h_y
|
||||
ceil_h IS NOW A NUMBR
|
||||
I HAS A color_choice ITZ MOD OF ceil_h AN 2
|
||||
I HAS A color ITZ LIEK A Vector
|
||||
color_choice, O RLY?
|
||||
YA RLY
|
||||
color HAS A x ITZ 3
|
||||
color HAS A y ITZ 1
|
||||
color HAS A z ITZ 1
|
||||
NO WAI
|
||||
color HAS A x ITZ 3
|
||||
color HAS A y ITZ 3
|
||||
color HAS A z ITZ 3
|
||||
OIC
|
||||
FOUND YR Vector IZ scalin YR color AN YR SUM OF PRODUKT OF b AN 0.2 AN 0.1 MKAY
|
||||
OIC
|
||||
|
||||
BTW m == 2 A sphere was hit. Cast a ray bouncing from the sphere surface.
|
||||
I HAS A sphere_color ITZ LIEK A Vector
|
||||
sphere_color HAS A x ITZ p
|
||||
sphere_color HAS A y ITZ p
|
||||
sphere_color HAS A z ITZ p
|
||||
I HAS A recursive_color ITZ I IZ samplin YR h AN YR r MKAY
|
||||
BTW Attenuate color by 50% since it is bouncing (* .5)
|
||||
recursive_color R Vector IZ scalin YR recursive_color AN YR 0.5 MKAY
|
||||
FOUND YR Vector IZ addin YR sphere_color AN YR recursive_color MKAY
|
||||
IF U SAY SO
|
||||
|
||||
|
||||
OBTW The vector class provides functionality for all the common
|
||||
linear algebra operations performed on vectors.
|
||||
TLDR
|
||||
O HAI IM Vector
|
||||
I HAS A x ITZ 0
|
||||
I HAS A y ITZ 0
|
||||
I HAS A z ITZ 0
|
||||
|
||||
BTW Add vector_one and vector_two
|
||||
HOW IZ I addin YR vector_one AN YR vector_two
|
||||
I HAS A result ITZ LIEK A Vector
|
||||
result HAS A x ITZ 0
|
||||
result HAS A y ITZ 0
|
||||
result HAS A z ITZ 0
|
||||
result'Z x R SUM OF vector_one'Z x AN vector_two'Z x
|
||||
result'Z y R SUM OF vector_one'Z y AN vector_two'Z y
|
||||
result'Z z R SUM OF vector_one'Z z AN vector_two'Z z
|
||||
FOUND YR result
|
||||
IF U SAY SO
|
||||
|
||||
BTW Scale vector_one by value
|
||||
HOW IZ I scalin YR vector_one AN YR value
|
||||
I HAS A result ITZ LIEK A Vector
|
||||
result HAS A x ITZ 0
|
||||
result HAS A y ITZ 0
|
||||
result HAS A z ITZ 0
|
||||
result'Z x R PRODUKT OF vector_one'Z x AN value
|
||||
result'Z y R PRODUKT OF vector_one'Z y AN value
|
||||
result'Z z R PRODUKT OF vector_one'Z z AN value
|
||||
FOUND YR result
|
||||
IF U SAY SO
|
||||
|
||||
BTW Dot product of vector_one and vector_two
|
||||
HOW IZ I dot_productin YR vector_one AN YR vector_two
|
||||
FOUND YR SUM OF SUM OF PRODUKT OF vector_one'Z x AN vector_two'Z x AN ...
|
||||
PRODUKT OF vector_one'Z y AN vector_two'Z y AN ...
|
||||
PRODUKT OF vector_one'Z z AN vector_two'Z z
|
||||
IF U SAY SO
|
||||
|
||||
BTW Cross product of vector_one and vector_two
|
||||
HOW IZ I cross_productin YR vector_one AN YR vector_two
|
||||
I HAS A result ITZ LIEK A Vector
|
||||
result HAS A x ITZ 0
|
||||
result HAS A y ITZ 0
|
||||
result HAS A z ITZ 0
|
||||
result'Z x R DIFF OF PRODUKT OF vector_one'Z y AN vector_two'Z z AN ...
|
||||
PRODUKT OF vector_one'Z z AN vector_two'Z y
|
||||
result'Z y R DIFF OF PRODUKT OF vector_one'Z z AN vector_two'Z x AN ...
|
||||
PRODUKT OF vector_one'Z x AN vector_two'Z z
|
||||
result'Z z R DIFF OF PRODUKT OF vector_one'Z x AN vector_two'Z y AN ...
|
||||
PRODUKT OF vector_one'Z y AN vector_two'Z x
|
||||
FOUND YR result
|
||||
IF U SAY SO
|
||||
|
||||
BTW Length of vector_one
|
||||
HOW IZ I lengthin YR vector_one
|
||||
FOUND YR I IZ square_rootin YR ...
|
||||
SUM OF SUM OF PRODUKT OF vector_one'Z x AN vector_one'Z x AN ...
|
||||
PRODUKT OF vector_one'Z y AN vector_one'Z y AN ...
|
||||
PRODUKT OF vector_one'Z z AN vector_one'Z z MKAY
|
||||
IF U SAY SO
|
||||
|
||||
BTW Normalize vector_one
|
||||
HOW IZ I normalizin YR vector_one
|
||||
I HAS A result ITZ LIEK A Vector
|
||||
result HAS A x ITZ 0
|
||||
result HAS A y ITZ 0
|
||||
result HAS A z ITZ 0
|
||||
I HAS A length ITZ Vector IZ lengthin YR vector_one MKAY
|
||||
BOTH SAEM length AN 0, O RLY?
|
||||
YA RLY
|
||||
length R 1
|
||||
OIC
|
||||
result'Z x R QUOSHUNT OF vector_one'Z x AN length
|
||||
result'Z y R QUOSHUNT OF vector_one'Z y AN length
|
||||
result'Z z R QUOSHUNT OF vector_one'Z z AN length
|
||||
FOUND YR result
|
||||
IF U SAY SO
|
||||
|
||||
BTW Printable YARN version of vector
|
||||
HOW IZ I to_stringin YR vector
|
||||
FOUND YR SMOOSH "[" AN vector'Z x AN ", " ...
|
||||
AN vector'Z y AN ", " ...
|
||||
AN vector'Z z AN "]" MKAY
|
||||
IF U SAY SO
|
||||
|
||||
BTW Create and return a vector with components x, y, and z
|
||||
HOW IZ I constructin YR x AN YR y AN YR z
|
||||
I HAS A result ITZ LIEK A Vector
|
||||
result HAS A x ITZ x
|
||||
result HAS A y ITZ y
|
||||
result HAS A z ITZ z
|
||||
FOUND YR result
|
||||
IF U SAY SO
|
||||
KTHX
|
||||
|
||||
OBTW The positions of the spheres are essentially
|
||||
stored in a 2-D array. This differs from Kensler's
|
||||
version where he used bit flags to store the
|
||||
positions in a compressed and quickly accessed
|
||||
manner. Unfortunately for us, bit operations
|
||||
in LOLCODE were too slow for this to be a tenable
|
||||
solution.
|
||||
TLDR
|
||||
I HAS A sphere_positions ITZ A BUKKIT
|
||||
I HAS A sphere_positions_0 ITZ A BUKKIT
|
||||
IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19
|
||||
sphere_positions_0 HAS A SRS pos_index ITZ FAIL
|
||||
IM OUTTA YR LOOP
|
||||
sphere_positions HAS A SRS 0 ITZ sphere_positions_0
|
||||
I HAS A sphere_positions_1 ITZ A BUKKIT
|
||||
sphere_positions_1 HAS A SRS 0 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 0 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 1 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 2 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 2 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 3 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 4 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 4 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 5 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 6 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 7 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 7 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 8 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 9 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 9 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 10 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 11 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 11 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 12 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 13 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 14 ITZ WIN
|
||||
BTWsphere_positions_1 HAS A SRS 14 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 15 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 16 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 16 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 17 ITZ FAIL
|
||||
sphere_positions_1 HAS A SRS 18 ITZ WIN
|
||||
BTW sphere_positions_1 HAS A SRS 18 ITZ FAIL
|
||||
sphere_positions HAS A SRS 1 ITZ sphere_positions_1
|
||||
I HAS A sphere_positions_2 ITZ A BUKKIT
|
||||
IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19
|
||||
sphere_positions_2 HAS A SRS pos_index ITZ FAIL
|
||||
IM OUTTA YR LOOP
|
||||
sphere_positions HAS A SRS 2 ITZ sphere_positions_2
|
||||
I HAS A sphere_positions_3 ITZ A BUKKIT
|
||||
sphere_positions_3 HAS A SRS 0 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 1 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 2 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 3 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 4 ITZ WIN
|
||||
BTW sphere_positions_3 HAS A SRS 4 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 5 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 6 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 7 ITZ WIN
|
||||
BTW sphere_positions_3 HAS A SRS 7 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 8 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 9 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 10 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 11 ITZ WIN
|
||||
sphere_positions_3 HAS A SRS 12 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 13 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 14 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 15 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 16 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 17 ITZ FAIL
|
||||
sphere_positions_3 HAS A SRS 18 ITZ WIN
|
||||
BTW sphere_positions_3 HAS A SRS 18 ITZ FAIL
|
||||
sphere_positions HAS A SRS 3 ITZ sphere_positions_3
|
||||
I HAS A sphere_positions_4 ITZ A BUKKIT
|
||||
IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19
|
||||
sphere_positions_4 HAS A SRS pos_index ITZ FAIL
|
||||
IM OUTTA YR LOOP
|
||||
sphere_positions HAS A SRS 4 ITZ sphere_positions_4
|
||||
I HAS A sphere_positions_5 ITZ A BUKKIT
|
||||
sphere_positions_5 HAS A SRS 0 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 1 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 2 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 3 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 4 ITZ WIN
|
||||
BTW sphere_positions_5 HAS A SRS 4 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 5 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 6 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 7 ITZ WIN
|
||||
BTW sphere_positions_5 HAS A SRS 7 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 8 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 9 ITZ WIN
|
||||
BTW sphere_positions_5 HAS A SRS 9 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 10 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 11 ITZ WIN
|
||||
BTW sphere_positions_5 HAS A SRS 11 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 12 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 13 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 14 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 15 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 16 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 17 ITZ FAIL
|
||||
sphere_positions_5 HAS A SRS 18 ITZ WIN
|
||||
BTW sphere_positions_5 HAS A SRS 18 ITZ FAIL
|
||||
sphere_positions HAS A SRS 5 ITZ sphere_positions_5
|
||||
I HAS A sphere_positions_6 ITZ A BUKKIT
|
||||
IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19
|
||||
sphere_positions_6 HAS A SRS pos_index ITZ FAIL
|
||||
IM OUTTA YR LOOP
|
||||
sphere_positions HAS A SRS 6 ITZ sphere_positions_6
|
||||
I HAS A sphere_positions_7 ITZ A BUKKIT
|
||||
IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19
|
||||
sphere_positions_7 HAS A SRS pos_index ITZ FAIL
|
||||
IM OUTTA YR LOOP
|
||||
sphere_positions HAS A SRS 7 ITZ sphere_positions_7
|
||||
I HAS A sphere_positions_8 ITZ A BUKKIT
|
||||
IM IN YR LOOP UPPIN YR pos_index TIL BOTH SAEM pos_index AN 19
|
||||
sphere_positions_8 HAS A SRS pos_index ITZ FAIL
|
||||
IM OUTTA YR LOOP
|
||||
sphere_positions HAS A SRS 8 ITZ sphere_positions_8
|
||||
|
||||
BTW Camera direction
|
||||
I HAS A g ITZ Vector IZ constructin YR -6.0 AN YR -16.0 AN YR 0.0 MKAY
|
||||
g R Vector IZ normalizin YR g MKAY
|
||||
|
||||
BTW Camera up vector
|
||||
I HAS A a ITZ Vector IZ constructin YR 0.0 AN YR 0.0 AN YR 1.0 MKAY
|
||||
a R Vector IZ cross_productin YR a AN YR g MKAY
|
||||
a R Vector IZ normalizin YR a MKAY
|
||||
a R Vector IZ scalin YR a AN YR 0.002 MKAY
|
||||
BTW Camera right vector
|
||||
I HAS A b ITZ Vector IZ cross_productin YR g AN YR a MKAY
|
||||
b R Vector IZ normalizin YR b MKAY
|
||||
b R Vector IZ scalin YR b AN YR 0.002 MKAY
|
||||
BTW Camera eye offset
|
||||
I HAS A c ITZ Vector IZ addin YR a AN YR b MKAY
|
||||
c R Vector IZ scalin YR c AN YR -256.0 MKAY
|
||||
c R Vector IZ addin YR c AN YR g MKAY
|
||||
|
||||
I HAS A max_x ITZ 511
|
||||
I HAS A max_y ITZ max_x
|
||||
BTW Issue the PPM Header info
|
||||
VISIBLE "P3 " SUM OF max_x AN 1 " " SUM OF max_y AN 1 " 255"!
|
||||
|
||||
I HAS A viewpoint ITZ Vector IZ constructin YR 17 AN YR 16 AN YR 8 MKAY
|
||||
|
||||
I HAS A y ITZ max_y
|
||||
IM IN YR y_loop
|
||||
BOTH SAEM y AN -1, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
I HAS A x ITZ max_x
|
||||
IM IN YR x_loop
|
||||
BOTH SAEM x AN -1, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
I HAS A pixel_color ITZ Vector IZ constructin YR 13 AN YR 13 AN YR 13 MKAY
|
||||
|
||||
I HAS A rays ITZ 64
|
||||
IM IN YR ray_loop
|
||||
BOTH SAEM rays AN 0, O RLY?
|
||||
YA RLY, GTFO
|
||||
OIC
|
||||
|
||||
BTW The delta to apply to the origin of the view (For Depth of View blur).
|
||||
I HAS A a_rand ITZ DIFF OF I IZ rand_onein MKAY AN 0.5
|
||||
I HAS A t_a ITZ Vector IZ scalin YR a AN YR a_rand MKAY
|
||||
t_a R Vector IZ scalin YR t_a AN YR 99.0 MKAY
|
||||
I HAS A b_rand ITZ DIFF OF I IZ rand_onein MKAY AN 0.5
|
||||
I HAS A t_b ITZ Vector IZ scalin YR b AN YR b_rand MKAY
|
||||
t_b R Vector IZ scalin YR t_b AN YR 99.0 MKAY
|
||||
I HAS A t ITZ Vector IZ addin YR t_a AN YR t_b MKAY
|
||||
|
||||
I HAS A origin ITZ Vector IZ addin YR viewpoint AN YR t MKAY
|
||||
|
||||
BTW Ray direction with random deltas for stochastic sampling
|
||||
I HAS A direction_up ITZ SUM OF I IZ rand_onein MKAY AN x
|
||||
direction_up R Vector IZ scalin YR a AN YR direction_up MKAY
|
||||
I HAS A direction_right ITZ SUM OF I IZ rand_onein MKAY AN y
|
||||
direction_right R Vector IZ scalin YR b AN YR direction_right MKAY
|
||||
I HAS A direction_t ITZ Vector IZ scalin YR t AN YR -1 MKAY
|
||||
I HAS A direction ITZ Vector IZ addin YR direction_right AN YR direction_up MKAY
|
||||
direction R Vector IZ addin YR direction AN YR c MKAY
|
||||
direction R Vector IZ scalin YR direction AN YR 16 MKAY
|
||||
direction R Vector IZ addin YR direction AN YR direction_t MKAY
|
||||
direction R Vector IZ normalizin YR direction MKAY
|
||||
|
||||
I HAS A sample_color ITZ I IZ samplin YR origin AN YR direction MKAY
|
||||
sample_color R Vector IZ scalin YR sample_color AN YR 3.5 MKAY
|
||||
BTW + pixel_color for color accumulation
|
||||
pixel_color R Vector IZ addin YR sample_color AN YR pixel_color MKAY
|
||||
rays R DIFF OF rays AN 1
|
||||
IM OUTTA YR ray_loop
|
||||
I HAS A write_color ITZ pixel_color
|
||||
write_color'Z x IS NOW A NUMBR
|
||||
write_color'Z y IS NOW A NUMBR
|
||||
write_color'Z z IS NOW A NUMBR
|
||||
DIFFRINT write_color'Z x AN BIGGR OF write_color'Z x AN 0, O RLY?
|
||||
YA RLY, write_color'Z x R 0
|
||||
OIC
|
||||
DIFFRINT write_color'Z y AN BIGGR OF write_color'Z y AN 0, O RLY?
|
||||
YA RLY, write_color'Z y R 0
|
||||
OIC
|
||||
DIFFRINT write_color'Z z AN BIGGR OF write_color'Z z AN 0, O RLY?
|
||||
YA RLY, write_color'Z z R 0
|
||||
OIC
|
||||
VISIBLE " " write_color'Z x " " ...
|
||||
" " write_color'Z y " " ...
|
||||
" " write_color'Z z " "!
|
||||
x R DIFF OF x AN 1
|
||||
IM OUTTA YR x_loop
|
||||
y R DIFF OF y AN 1
|
||||
IM OUTTA YR y_loop
|
||||
|
||||
KTHXBYE
|
||||
28
samples/Lua/wsapi.fcgi
Executable file
28
samples/Lua/wsapi.fcgi
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/lua
|
||||
|
||||
-- Generic WSAPI FastCGI launcher, extracts application to launch
|
||||
-- from SCRIPT_FILENAME/PATH_TRANSLATED, each application (defined
|
||||
-- by its script entry point) gets an isolated Lua VM; sequential
|
||||
-- requests to the same application go to the same VM
|
||||
|
||||
pcall(require,"luarocks.require")
|
||||
|
||||
local common = require "wsapi.common"
|
||||
local fastcgi = require "wsapi.fastcgi"
|
||||
|
||||
local ONE_HOUR = 60 * 60
|
||||
local ONE_DAY = 24 * ONE_HOUR
|
||||
|
||||
local wsapi_loader = common.make_loader{
|
||||
isolated = true, -- isolate each script in its own Lua state
|
||||
filename = nil, -- if you want to force the launch of a single script
|
||||
launcher = "wsapi.fcgi", -- the name of this script
|
||||
reload = false, -- if you want to reload the application on every request
|
||||
period = ONE_HOUR, -- frequency of Lua state staleness checks
|
||||
ttl = ONE_DAY, -- time-to-live for Lua states
|
||||
vars = -- order of checking for the path of the script
|
||||
{ "SCRIPT_FILENAME",
|
||||
"PATH_TRANSLATED" }
|
||||
}
|
||||
|
||||
fastcgi.run(wsapi_loader)
|
||||
3
samples/PHP/prefix.fcgi
Executable file
3
samples/PHP/prefix.fcgi
Executable file
@@ -0,0 +1,3 @@
|
||||
<?php
|
||||
echo $_SERVER[$_GET["var"]];
|
||||
?>
|
||||
120
samples/Python/backstage.fcgi
Executable file
120
samples/Python/backstage.fcgi
Executable file
@@ -0,0 +1,120 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import sqlite
|
||||
import urllib2
|
||||
import csv
|
||||
import cgi
|
||||
import simplejson
|
||||
import jsontemplate
|
||||
import time
|
||||
|
||||
log = open('log.txt', 'a')
|
||||
|
||||
def urldecode(query):
|
||||
d = {}
|
||||
a = query.split('&')
|
||||
for s in a:
|
||||
if s.find('='):
|
||||
k,v = map(urllib2.unquote, s.split('='))
|
||||
try:
|
||||
d[k].append(v)
|
||||
except KeyError:
|
||||
d[k] = [v]
|
||||
|
||||
return d
|
||||
|
||||
def load_table(uri, cur):
|
||||
table = uri.split('/')[-1]
|
||||
table = table.split('.')[0]
|
||||
|
||||
contents = urllib2.urlopen(uri)
|
||||
fields = ""
|
||||
for field in contents.readline().strip().split(','):
|
||||
fields += field
|
||||
fields += ","
|
||||
fields = fields.rstrip(',')
|
||||
|
||||
cur.execute("SELECT name FROM sqlite_master WHERE type='table' \
|
||||
AND name='%s';" % (table))
|
||||
if cur.fetchone() == None:
|
||||
# cur.execute("DROP TABLE %s;" % (table))
|
||||
cur.execute("CREATE TABLE %s (%s);" % (table, fields))
|
||||
for line in contents:
|
||||
values = line.strip()
|
||||
values = "','".join([val.strip() for val in values.split(",")])
|
||||
values = "'" + values + "'"
|
||||
sql = "INSERT INTO %s (%s) VALUES (%s);" % (table, fields, values)
|
||||
cur.execute(sql)
|
||||
return table
|
||||
|
||||
def build_structure(headings, allresults):
|
||||
results = []
|
||||
for result in allresults:
|
||||
results.append(dict(zip(headings, result)))
|
||||
results = { "query" : results }
|
||||
return results
|
||||
|
||||
def build_json(headings, allresults, callback):
|
||||
results = build_structure(headings, allresults)
|
||||
return_str = simplejson.dumps(results)
|
||||
if callback != None:
|
||||
return_str = callback + "(" + return_str + ");";
|
||||
return return_str
|
||||
|
||||
def load_template(templatefile):
|
||||
return "".join(urllib2.urlopen(templatefile).readlines())
|
||||
|
||||
def build_template(headings, allresults, template_str):
|
||||
results = build_structure(headings, allresults)
|
||||
return jsontemplate.expand(template_str, results)
|
||||
return ""
|
||||
|
||||
def myapp(environ, start_response):
|
||||
args = cgi.parse_qs(environ['QUERY_STRING'])
|
||||
|
||||
query = args['query'][0]
|
||||
uri = args['uri'][0]
|
||||
callback = None
|
||||
if 'callback' in args:
|
||||
callback = args['callback'][0]
|
||||
label = "no label"
|
||||
if 'label' in args:
|
||||
label = args['label'][0]
|
||||
templatefile = None
|
||||
if 'templatefile' in args:
|
||||
templatefile = args['templatefile'][0]
|
||||
|
||||
con = sqlite.connect('mydatabase.db')
|
||||
cur = con.cursor()
|
||||
table_uris = uri.split(',')
|
||||
tables = [load_table(uri, cur) for uri in table_uris]
|
||||
con.commit()
|
||||
before = time.time()
|
||||
cur.execute(query)
|
||||
allresults = cur.fetchall()
|
||||
after = time.time()
|
||||
log.write("%s: query time %f\n" % (label, after - before))
|
||||
|
||||
headings = [name[0] for name in cur.description]
|
||||
return_str = ""
|
||||
if templatefile != None:
|
||||
start_response('200 OK', [('Content-Type', 'text/html')])
|
||||
before = time.time()
|
||||
template_str = load_template(templatefile)
|
||||
after = time.time()
|
||||
log.write("%s: template loading time %f\n" % (label, after - before))
|
||||
before = time.time()
|
||||
return_str = build_template(headings, allresults, template_str)
|
||||
after = time.time()
|
||||
log.write("%s: template rendering time %f\n" % (label, after - before))
|
||||
else:
|
||||
start_response('200 OK', [('Content-Type', 'text/plain')])
|
||||
before = time.time()
|
||||
return_str = build_json(headings, allresults, callback)
|
||||
after = time.time()
|
||||
log.write("%s: json-making time %f\n" % (label, after - before))
|
||||
return return_str
|
||||
|
||||
if __name__ == '__main__':
|
||||
from fcgi import WSGIServer
|
||||
WSGIServer(myapp).run()
|
||||
68
samples/Ruby/mdata_server.fcgi
Executable file
68
samples/Ruby/mdata_server.fcgi
Executable file
@@ -0,0 +1,68 @@
|
||||
#!/usr/bin/env ruby
|
||||
require "xmlrpc/server"
|
||||
|
||||
# NOTE: force the usage of the pure-ruby version of fcgi.
|
||||
# - this is required by the workaround to get fcgi+xmlrpc working together
|
||||
FCGI_PURE_RUBY=true
|
||||
require 'fcgi'
|
||||
|
||||
require File.join(File.dirname(__FILE__), '../bt_cast/mdata_echo_server/bt_cast_mdata_server_t.rb')
|
||||
|
||||
################################################################################
|
||||
################################################################################
|
||||
# CGI handling for xmlrpc
|
||||
################################################################################
|
||||
################################################################################
|
||||
# - for basic xmlrpc via CGI example
|
||||
# - see http://www.ntecs.de/projects/xmlrpc4r/server.html#label-19
|
||||
|
||||
# create the directory needed for Neoip::Cast_mdata_server_t
|
||||
Neoip::Cast_mdata_server_t.create_dir_ifneeded();
|
||||
|
||||
# init the cgi_server
|
||||
cgi_server = XMLRPC::CGIServer.new
|
||||
# register all the xmlrpc function
|
||||
cgi_server.add_handler("set_cast_mdata_pull") do |web2srv_str, cast_name, cast_privtext, cast_id,
|
||||
port_lview, port_pview, uri_pathquery|
|
||||
Neoip::Cast_mdata_server_t.set_cast_mdata_pull(web2srv_str, cast_name, cast_privtext, cast_id,
|
||||
port_lview, port_pview, uri_pathquery, ENV['REMOTE_ADDR']);
|
||||
end
|
||||
cgi_server.add_handler("set_cast_mdata_push") do |web2srv_str, cast_name, cast_privtext, cast_mdata|
|
||||
Neoip::Cast_mdata_server_t.set_cast_mdata_push(web2srv_str, cast_name, cast_privtext, cast_mdata);
|
||||
end
|
||||
cgi_server.add_handler("get_cast_mdata") do |cast_name, cast_privhash|
|
||||
Neoip::Cast_mdata_server_t.get_cast_mdata(cast_name, cast_privhash);
|
||||
end
|
||||
cgi_server.add_handler("del_cast_mdata") do |cast_name, cast_privtext|
|
||||
Neoip::Cast_mdata_server_t.del_cast_mdata(cast_name, cast_privtext);
|
||||
end
|
||||
|
||||
# handle the unknown/bad formered calls
|
||||
cgi_server.set_default_handler do |name, *args|
|
||||
raise XMLRPC::FaultException.new(-99, "Method #{name} missing" +
|
||||
" or wrong number of parameters!")
|
||||
end
|
||||
|
||||
# server the cgi_server
|
||||
#cgi_server.serve
|
||||
#exit
|
||||
|
||||
# experiment at using fast-cgi
|
||||
FCGI.each_request do |request|
|
||||
# XMLRPC::CGIServer expect some value in ENV[] but FCGI doesnt provides them
|
||||
# - so working around by copying them by hand... dirty
|
||||
ENV['REMOTE_ADDR'] = request.env['REMOTE_ADDR'];
|
||||
ENV['REQUEST_METHOD'] = request.env['REQUEST_METHOD'];
|
||||
ENV['CONTENT_TYPE'] = "text/xml";
|
||||
ENV['CONTENT_LENGTH'] = "#{request.in.length}";
|
||||
|
||||
# copy the request in/out into the stdin/stdout to act as a CGI
|
||||
$stdin = request.in
|
||||
$stdout = request.out
|
||||
|
||||
# process the cgi itself
|
||||
cgi_server.serve
|
||||
|
||||
# mark the request as finished
|
||||
request.finish
|
||||
end
|
||||
30
samples/Shell/build.command
Normal file
30
samples/Shell/build.command
Normal file
@@ -0,0 +1,30 @@
|
||||
set -e
|
||||
|
||||
echo "/************/"
|
||||
echo "/* BUILDING */"
|
||||
echo "/************/"
|
||||
echo ""
|
||||
|
||||
cd `dirname $0`
|
||||
|
||||
cd build
|
||||
|
||||
cmake ..
|
||||
|
||||
make
|
||||
|
||||
echo ""
|
||||
echo "/***********/"
|
||||
echo "/* TESTING */"
|
||||
echo "/***********/"
|
||||
echo ""
|
||||
|
||||
# ctest ..
|
||||
|
||||
make Experimental
|
||||
|
||||
echo ""
|
||||
echo "/***********/"
|
||||
echo "/* SUCCESS */"
|
||||
echo "/***********/"
|
||||
echo ""
|
||||
16
samples/Shell/php.fcgi
Executable file
16
samples/Shell/php.fcgi
Executable file
@@ -0,0 +1,16 @@
|
||||
#!/bin/sh
|
||||
# you can change the PHP version here.
|
||||
version="RB_PHP_VERSION_X_Y_Z"
|
||||
|
||||
# php.ini file location
|
||||
PHPRC=/usr/local/php/phpfarm/inst/php-${version}/lib/php.ini
|
||||
export PHPRC
|
||||
|
||||
PHP_FCGI_CHILDREN=3
|
||||
export PHP_FCGI_CHILDREN
|
||||
|
||||
PHP_FCGI_MAX_REQUESTS=5000
|
||||
export PHP_FCGI_MAX_REQUESTS
|
||||
|
||||
# which php-cgi binary to execute
|
||||
exec /usr/local/php/inst/php-${version}/bin/php-cgi
|
||||
63
samples/Tcl/filenames/owh
Executable file
63
samples/Tcl/filenames/owh
Executable file
@@ -0,0 +1,63 @@
|
||||
#!/usr/bin/env tclsh
|
||||
# http://wiki.tcl.tk/906
|
||||
|
||||
if {[llength $argv] < 1} {
|
||||
puts "usage: owh ?init? body ?exit?
|
||||
performs body (in Tcl) for each line (\$0) from stdin
|
||||
owh: Ousterhout - Welch - Hobbs, to name a few"
|
||||
exit -1
|
||||
}
|
||||
|
||||
proc awksplit {text {split default}} {
|
||||
set no 0
|
||||
if {$split eq "default"} {
|
||||
set t {}
|
||||
foreach string [split $text] {
|
||||
if {$string ne {}} {
|
||||
lappend t $string
|
||||
}
|
||||
}
|
||||
} else {
|
||||
set t [list $text $split]
|
||||
}
|
||||
uplevel 1 [list set NF [llength $t]]
|
||||
foreach i $t {uplevel 1 [list set [incr no] $i]}
|
||||
uplevel 1 {set 0 {};trace variable 0 ru 0}
|
||||
}
|
||||
proc 0 {_name index op} {
|
||||
switch $op {
|
||||
r {
|
||||
uplevel {
|
||||
set 0 {}
|
||||
for {set i 1} {$i <= $NF} {incr i} {lappend 0 [set $i]}
|
||||
set 0 [join $0 $OFS]
|
||||
}
|
||||
}
|
||||
u {rename 0 {} ;# leave no traces of the trace..}
|
||||
}
|
||||
}
|
||||
|
||||
proc print s {if {[catch {puts $s}]} exit} ;# good for broken pipe
|
||||
|
||||
set FS default
|
||||
set OFS { }
|
||||
|
||||
if {[llength $argv] > 1} {
|
||||
eval [lindex $argv 0]
|
||||
set _body [lindex $argv 1] ;# strip outer braces
|
||||
set _exit [lindex $argv 2]
|
||||
} else {
|
||||
set _body [lindex $argv 0] ;# strip outer braces
|
||||
set _exit {}
|
||||
}
|
||||
|
||||
set NR 1
|
||||
while 1 {
|
||||
gets stdin line
|
||||
if {[eof stdin]} break
|
||||
awksplit $line $FS
|
||||
eval $_body
|
||||
incr NR
|
||||
}
|
||||
set res [eval $_exit]
|
||||
if {[string length $res]} {puts $res}
|
||||
28
samples/Tcl/filenames/starfield
Executable file
28
samples/Tcl/filenames/starfield
Executable file
@@ -0,0 +1,28 @@
|
||||
#!/usr/bin/env wish
|
||||
# http://wiki.tcl.tk/14140
|
||||
|
||||
proc stars'go {c factor} {
|
||||
set w [winfo width $c]
|
||||
set h [winfo height $c]
|
||||
$c scale all [expr {$w/2}] [expr {$h/2}] $factor $factor
|
||||
foreach item [$c find all] {
|
||||
if {[llength [$c bbox $item]] == 0} {$c delete $item; continue} ;# (1)
|
||||
foreach {x0 y0 x1 y1} [$c bbox $item] break
|
||||
if {$x1<0 || $x0>$w || $y1<0 || $y0>$h} {$c delete $item}
|
||||
}
|
||||
time {
|
||||
set x [expr {rand()*$w}]
|
||||
set y [expr {rand()*$h}]
|
||||
set col [lpick {white yellow beige bisque cyan}]
|
||||
$c create oval $x $y [expr {$x+1}] [expr {$y+1}] -fill $col \
|
||||
-outline $col
|
||||
} 10
|
||||
after $::ms [info level 0]
|
||||
}
|
||||
proc lpick list {lindex $list [expr {int(rand()*[llength $list])}]}
|
||||
#-- Let's go!
|
||||
pack [canvas .c -bg black] -fill both -expand 1
|
||||
set ms 40
|
||||
bind . <Up> {incr ms -5}
|
||||
bind . <Down> {incr ms 5}
|
||||
stars'go .c 1.05
|
||||
8
samples/VimL/filenames/_vimrc
Normal file
8
samples/VimL/filenames/_vimrc
Normal file
@@ -0,0 +1,8 @@
|
||||
set nocompatible
|
||||
set ignorecase
|
||||
set incsearch
|
||||
set smartcase
|
||||
set showmatch
|
||||
set showcmd
|
||||
|
||||
syntax on
|
||||
18
script/cibuild
Executable file
18
script/cibuild
Executable file
@@ -0,0 +1,18 @@
|
||||
#!/bin/sh
|
||||
if [ -d /usr/share/rbenv/shims ]; then
|
||||
export PATH=/usr/share/rbenv/shims:$PATH
|
||||
export RBENV_VERSION=2.1.2-github
|
||||
export RUBY_VERSION=2.1.2-github
|
||||
fi
|
||||
|
||||
set -x
|
||||
git log -n 1 HEAD | cat
|
||||
ruby -v
|
||||
bundle -v
|
||||
set +x
|
||||
|
||||
mkdir -p ./vendor/gems
|
||||
|
||||
bundle install --local --path ./vendor/gems
|
||||
bundle exec rake samples
|
||||
bundle exec rake
|
||||
@@ -68,6 +68,19 @@ class TestRepository < Test::Unit::TestCase
|
||||
assert !repo.breakdown_by_file["Ruby"].empty?
|
||||
end
|
||||
|
||||
def test_commit_with_git_attributes_data
|
||||
# Before we had any .gitattributes data
|
||||
old_commit = '4a017d9033f91b2776eb85275463f9613cc371ef'
|
||||
old_repo = linguist_repo(old_commit)
|
||||
|
||||
# With some .gitattributes data
|
||||
attr_commit = '7ee006cbcb2d7261f9e648510a684ee9ac64126b'
|
||||
# It's incremental but should bust the cache
|
||||
new_repo = Linguist::Repository.incremental(rugged_repository, attr_commit, old_commit, old_repo.cache)
|
||||
|
||||
assert new_repo.breakdown_by_file["Java"].include?("lib/linguist.rb")
|
||||
end
|
||||
|
||||
def test_linguist_override_vendored?
|
||||
attr_commit = '351c1cc8fd57340839bdb400d7812332af80e9bd'
|
||||
repo = linguist_repo(attr_commit).read_index
|
||||
|
||||
BIN
vendor/cache/charlock_holmes-0.7.3.gem
vendored
Normal file
BIN
vendor/cache/charlock_holmes-0.7.3.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/coderay-1.1.0.gem
vendored
Normal file
BIN
vendor/cache/coderay-1.1.0.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/escape_utils-1.0.1.gem
vendored
Normal file
BIN
vendor/cache/escape_utils-1.0.1.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/json-1.8.1.gem
vendored
Normal file
BIN
vendor/cache/json-1.8.1.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/metaclass-0.0.4.gem
vendored
Normal file
BIN
vendor/cache/metaclass-0.0.4.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/method_source-0.8.2.gem
vendored
Normal file
BIN
vendor/cache/method_source-0.8.2.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/mime-types-1.25.1.gem
vendored
Normal file
BIN
vendor/cache/mime-types-1.25.1.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/mocha-1.1.0.gem
vendored
Normal file
BIN
vendor/cache/mocha-1.1.0.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/posix-spawn-0.3.9.gem
vendored
Normal file
BIN
vendor/cache/posix-spawn-0.3.9.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/pry-0.10.1.gem
vendored
Normal file
BIN
vendor/cache/pry-0.10.1.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/pygments.rb-0.6.0.gem
vendored
Normal file
BIN
vendor/cache/pygments.rb-0.6.0.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/rake-10.3.2.gem
vendored
Normal file
BIN
vendor/cache/rake-10.3.2.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/rugged-0.21.1b2.gem
vendored
Normal file
BIN
vendor/cache/rugged-0.21.1b2.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/slop-3.6.0.gem
vendored
Normal file
BIN
vendor/cache/slop-3.6.0.gem
vendored
Normal file
Binary file not shown.
BIN
vendor/cache/yajl-ruby-1.1.0.gem
vendored
Normal file
BIN
vendor/cache/yajl-ruby-1.1.0.gem
vendored
Normal file
Binary file not shown.
Reference in New Issue
Block a user