Merge branch 'master' into 1623-local

Conflicts:
	lib/linguist/heuristics.rb
This commit is contained in:
Arfon Smith
2014-11-02 19:58:50 -06:00
parent 49c2793bf5
commit 9d8ab16a38
20 changed files with 1552 additions and 24 deletions

View File

@@ -6,6 +6,7 @@ before_install:
rvm:
- 1.9.3
- 2.0.0
- 2.1.1
- 2.1
- 2.2
notifications:
disabled: true

View File

@@ -1,2 +1,3 @@
source 'https://rubygems.org'
gemspec
gem 'test-unit', require: false if RUBY_VERSION >= '2.2'

View File

@@ -108,6 +108,8 @@ See [Linguist::Generated#generated?](https://github.com/github/linguist/blob/mas
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.
Please note that the overrides currently only affect the language statistics for a repository and not the syntax-highlighting of files.
```
$ cat .gitattributes
*.rb linguist-language=Java

View File

@@ -1,8 +1,8 @@
require 'bundler/setup'
require 'json'
require 'rake/clean'
require 'rake/testtask'
require 'yaml'
require 'yajl'
task :default => :test
@@ -20,15 +20,13 @@ end
task :samples do
require 'linguist/samples'
require 'yajl'
data = Linguist::Samples.data
json = Yajl::Encoder.encode(data, :pretty => true)
File.open('lib/linguist/samples.json', 'w') { |io| io.write json }
json = Yajl.dump(Linguist::Samples.data, :pretty => true)
File.write 'lib/linguist/samples.json', json
end
task :build_gem => :samples do
languages = YAML.load_file("lib/linguist/languages.yml")
File.write("lib/linguist/languages.json", JSON.dump(languages))
File.write("lib/linguist/languages.json", Yajl.dump(languages))
`gem build github-linguist.gemspec`
File.delete("lib/linguist/languages.json")
end
@@ -72,11 +70,11 @@ namespace :benchmark do
reference_file = ENV["REFERENCE"]
candidate_file = ENV["CANDIDATE"]
reference = JSON.parse(File.read(reference_file))
reference = Yajl.load(File.read(reference_file))
reference_counts = Hash.new(0)
reference.each { |filename, language| reference_counts[language] += 1 }
candidate = JSON.parse(File.read(candidate_file))
candidate = Yajl.load(File.read(candidate_file))
candidate_counts = Hash.new(0)
candidate.each { |filename, language| candidate_counts[language] += 1 }
@@ -126,14 +124,12 @@ namespace :classifier do
def each_public_gist
require 'open-uri'
require 'json'
url = "https://api.github.com/gists/public"
loop do
resp = open(url)
url = resp.meta['link'][/<([^>]+)>; rel="next"/, 1]
gists = JSON.parse(resp.read)
gists = Yajl.load(resp.read)
for gist in gists
for filename, attrs in gist['files']

View File

@@ -19,7 +19,6 @@ Gem::Specification.new do |s|
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'
s.add_development_dependency 'pry'
s.add_development_dependency 'rake'

View File

@@ -28,6 +28,9 @@ module Linguist
if languages.all? { |l| ["Scala", "SuperCollider"].include?(l) }
result = disambiguate_sc(data, languages)
end
if languages.all? { |l| ["AsciiDoc", "AGS Script"].include?(l) }
result = disambiguate_asc(data, languages)
end
return result
end
end
@@ -102,6 +105,12 @@ module Linguist
matches
end
def self.disambiguate_asc(data, languages)
matches = []
matches << Language["AsciiDoc"] if /^=+(\s|\n)/.match(data)
matches
end
def self.active?
!!ACTIVE
end

View File

@@ -2,7 +2,7 @@ require 'escape_utils'
require 'pygments'
require 'yaml'
begin
require 'json'
require 'yajl'
rescue LoadError
end
@@ -533,8 +533,8 @@ module Linguist
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))
if File.exist?(languages_json) && defined?(Yajl)
languages = Yajl.load(File.read(languages_json))
else
languages = YAML.load_file(languages_yml)
end

View File

@@ -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
@@ -175,6 +181,7 @@ Assembly:
extensions:
- .asm
- .a51
tm_scope: source.asm.x86
Augeas:
type: programming
@@ -199,6 +206,7 @@ AutoIt:
- AutoItScript
extensions:
- .au3
tm_scope: source.autoit.3
Awk:
type: programming
@@ -224,6 +232,7 @@ Batchfile:
extensions:
- .bat
- .cmd
tm_scope: source.dosbatch
Befunge:
extensions:
@@ -237,6 +246,7 @@ BlitzBasic:
extensions:
- .bb
- .decls
tm_scope: source.blitzmax
BlitzMax:
type: programming
@@ -249,6 +259,7 @@ Bluespec:
lexer: verilog
extensions:
- .bsv
tm_scope: source.verilog
Boo:
type: programming
@@ -260,6 +271,7 @@ Brainfuck:
extensions:
- .b
- .bf
tm_scope: source.bf
Brightscript:
type: programming
@@ -323,6 +335,7 @@ C-ObjDump:
lexer: c-objdump
extensions:
- .c-objdump
tm_scope: objdump.x86asm
C2hs Haskell:
type: programming
@@ -332,6 +345,7 @@ C2hs Haskell:
- c2hs
extensions:
- .chs
tm_scope: source.haskell
CLIPS:
type: programming
@@ -379,6 +393,7 @@ ChucK:
lexer: Java
extensions:
- .ck
tm_scope: source.java
Cirru:
type: programming
@@ -442,6 +457,7 @@ ColdFusion:
- cfml
extensions:
- .cfm
tm_scope: text.html.cfm
ColdFusion CFC:
type: programming
@@ -454,6 +470,7 @@ ColdFusion CFC:
- cfc
extensions:
- .cfc
tm_scope: source.cfscript
Common Lisp:
type: programming
@@ -482,6 +499,7 @@ Component Pascal:
extensions:
- .cp
- .cps
tm_scope: source.pascal
Coq:
type: programming
@@ -496,6 +514,7 @@ Cpp-ObjDump:
- .cppobjdump
- .c++objdump
- .cxx-objdump
tm_scope: objdump.x86asm
Creole:
type: prose
@@ -510,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
@@ -522,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
@@ -549,6 +572,7 @@ D-ObjDump:
lexer: d-objdump
extensions:
- .d-objdump
tm_scope: objdump.x86asm
DM:
type: programming
@@ -558,6 +582,7 @@ DM:
- .dm
aliases:
- byond
tm_scope: source.c++
DOT:
type: data
@@ -613,6 +638,7 @@ Ecere Projects:
lexer: JSON
extensions:
- .epj
tm_scope: source.json
ECL:
type: programming
@@ -629,6 +655,7 @@ Eagle:
extensions:
- .sch
- .brd
tm_scope: text.xml
Eiffel:
type: programming
@@ -649,6 +676,7 @@ Elm:
lexer: Haskell
extensions:
- .elm
tm_scope: source.haskell
Emacs Lisp:
type: programming
@@ -671,6 +699,7 @@ EmberScript:
extensions:
- .em
- .emberscript
tm_scope: source.coffee
Erlang:
type: programming
@@ -691,6 +720,7 @@ F#:
- .fs
- .fsi
- .fsx
tm_scope: source.fsharp
FLUX:
type: programming
@@ -745,6 +775,7 @@ Fantom:
color: "#dbded5"
extensions:
- .fan
tm_scope: source.fan
Forth:
type: programming
@@ -762,6 +793,7 @@ Frege:
lexer: Haskell
extensions:
- .fr
tm_scope: source.haskell
G-code:
type: data
@@ -777,6 +809,7 @@ Game Maker Language:
lexer: JavaScript
extensions:
- .gml
tm_scope: source.js
GAMS:
type: programming
@@ -826,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
@@ -847,6 +883,7 @@ Gettext Catalog:
extensions:
- .po
- .pot
tm_scope: source.po
Glyph:
type: programming
@@ -854,6 +891,7 @@ Glyph:
lexer: Tcl
extensions:
- .glf
tm_scope: source.tcl
Gnuplot:
type: programming
@@ -880,6 +918,7 @@ Gosu:
- .gst
- .gsx
- .vark
tm_scope: source.gosu.2
Grace:
type: programming
@@ -897,6 +936,7 @@ Grammatical Framework:
- .gf
searchable: true
color: "#ff0000"
tm_scope: source.haskell
Graph Modeling Language:
type: data
@@ -914,6 +954,7 @@ Groff:
- '.5'
- '.6'
- '.7'
tm_scope: text.groff
Groovy:
type: programming
@@ -921,7 +962,6 @@ Groovy:
color: "#e69f56"
extensions:
- .groovy
- .gradle
- .grt
- .gtpl
- .gvy
@@ -935,6 +975,7 @@ Groovy Server Pages:
- gsp
extensions:
- .gsp
tm_scope: text.html.jsp
HTML:
type: markup
@@ -959,7 +1000,7 @@ HTML+Django:
HTML+ERB:
type: markup
tm_scope: text.html.ruby
tm_scope: text.html.erb
group: HTML
lexer: RHTML
aliases:
@@ -995,6 +1036,7 @@ Handlebars:
extensions:
- .handlebars
- .hbs
tm_scope: text.html.handlebars
Harbour:
type: programming
@@ -1017,6 +1059,7 @@ Haxe:
extensions:
- .hx
- .hxsl
tm_scope: source.haxe.2
Hy:
type: programming
@@ -1046,6 +1089,7 @@ INI:
- .ini
- .prefs
- .properties
tm_scope: source.ini
Inno Setup:
extensions:
@@ -1066,6 +1110,7 @@ Inform 7:
extensions:
- .ni
- .i7x
tm_scope: source.inform
Inno Setup:
extensions:
@@ -1131,6 +1176,7 @@ JSON5:
lexer: JavaScript
extensions:
- .json5
tm_scope: source.js
JSONLD:
type: data
@@ -1139,6 +1185,7 @@ JSONLD:
lexer: JavaScript
extensions:
- .jsonld
tm_scope: source.js
JSONiq:
type: programming
@@ -1146,12 +1193,14 @@ JSONiq:
lexer: XQuery
extensions:
- .jq
tm_scope: source.xquery
Jade:
group: HTML
type: markup
extensions:
- .jade
tm_scope: source.jade
Java:
type: programming
@@ -1168,6 +1217,7 @@ Java Server Pages:
- jsp
extensions:
- .jsp
tm_scope: text.html.jsp
JavaScript:
type: programming
@@ -1219,6 +1269,7 @@ Kit:
ace_mode: html
extensions:
- .kit
tm_scope: text.html.basic
Kotlin:
type: programming
@@ -1226,6 +1277,7 @@ Kotlin:
- .kt
- .ktm
- .kts
tm_scope: source.Kotlin
LFE:
type: programming
@@ -1234,11 +1286,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
@@ -1264,6 +1324,7 @@ Lasso:
- .las
- .lasso9
- .ldml
tm_scope: file.lasso
Latte:
type: markup
@@ -1272,6 +1333,7 @@ Latte:
lexer: Smarty
extensions:
- .latte
tm_scope: source.smarty
Less:
type: markup
@@ -1279,6 +1341,7 @@ Less:
lexer: CSS
extensions:
- .less
tm_scope: source.css
LilyPond:
lexer: Text only
@@ -1319,6 +1382,7 @@ Literate Haskell:
- lhs
extensions:
- .lhs
tm_scope: text.tex.latex.haskell
LiveScript:
type: programming
@@ -1350,6 +1414,7 @@ LookML:
color: "#652B81"
extensions:
- .lookml
tm_scope: source.yaml
Lua:
type: programming
@@ -1372,6 +1437,7 @@ M:
extensions:
- .mumps
- .m
tm_scope: source.lisp
MTML:
type: markup
@@ -1379,6 +1445,7 @@ MTML:
color: "#0095d9"
extensions:
- .mtml
tm_scope: text.html.basic
Makefile:
aliases:
@@ -1397,6 +1464,7 @@ Mako:
extensions:
- .mako
- .mao
tm_scope: text.html.mako
Markdown:
type: prose
@@ -1410,6 +1478,7 @@ Markdown:
- .mkdn
- .mkdown
- .ron
tm_scope: text.html.markdown
Mask:
type: markup
@@ -1418,6 +1487,7 @@ Mask:
ace_mode: scss
extensions:
- .mask
tm_scope: source.scss
Mathematica:
type: programming
@@ -1448,6 +1518,7 @@ Max:
- .maxproj
- .mxt
- .pat
tm_scope: source.json
MediaWiki:
type: prose
@@ -1464,6 +1535,7 @@ Mercury:
extensions:
- .m
- .moo
tm_scope: source.prolog
MiniD: # Legacy
searchable: false
@@ -1480,6 +1552,7 @@ Mirah:
- .duby
- .mir
- .mirah
tm_scope: source.ruby
Monkey:
type: programming
@@ -1497,6 +1570,8 @@ MoonScript:
type: programming
extensions:
- .moon
interpreters:
- moon
Myghty:
extensions:
@@ -1519,12 +1594,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
@@ -1556,6 +1633,7 @@ Nu:
- .nu
filenames:
- Nukefile
tm_scope: source.scheme
NumPy:
group: Python
@@ -1582,6 +1660,7 @@ ObjDump:
lexer: objdump
extensions:
- .objdump
tm_scope: objdump.x86asm
Objective-C:
type: programming
@@ -1612,6 +1691,7 @@ Objective-J:
extensions:
- .j
- .sj
tm_scope: source.js.objj
Omgrofl:
type: programming
@@ -1639,6 +1719,7 @@ OpenCL:
extensions:
- .cl
- .opencl
tm_scope: source.c
OpenEdge ABL:
type: programming
@@ -1649,6 +1730,7 @@ OpenEdge ABL:
extensions:
- .p
- .cls
tm_scope: source.abl
OpenSCAD:
type: programming
@@ -1684,6 +1766,7 @@ PAWN:
color: "#dbb284"
extensions:
- .pwn
tm_scope: source.c++
PHP:
type: programming
@@ -1712,6 +1795,13 @@ Pan:
extensions:
- .pan
Papyrus:
type: programming
color: "#6600cc"
lexer: Text only
extensions:
- .psc
Parrot:
type: programming
color: "#f3ca0a"
@@ -1815,6 +1905,7 @@ PostScript:
extensions:
- .ps
- .eps
tm_scope: source.postscript
PowerShell:
type: programming
@@ -1857,6 +1948,7 @@ Protocol Buffer:
- Protocol Buffers
extensions:
- .proto
tm_scope: source.protobuf
Puppet:
type: programming
@@ -1879,6 +1971,7 @@ PureScript:
lexer: Haskell
extensions:
- .purs
tm_scope: source.haskell
Python:
type: programming
@@ -1916,6 +2009,7 @@ QML:
color: "#44a51c"
extensions:
- .qml
tm_scope: source.qml
QMake:
lexer: Text only
@@ -1948,6 +2042,7 @@ RDoc:
wrap: true
extensions:
- .rdoc
tm_scope: text.rdoc
REALbasic:
type: programming
@@ -1959,12 +2054,14 @@ REALbasic:
- .rbres
- .rbtbar
- .rbuistate
tm_scope: source.vbnet
RHTML:
type: markup
group: HTML
extensions:
- .rhtml
tm_scope: text.html.ruby
RMarkdown:
type: prose
@@ -1984,6 +2081,7 @@ Racket:
- .rktd
- .rktl
- .scrbl
tm_scope: source.scheme
Ragel in Ruby Host:
type: programming
@@ -2027,6 +2125,7 @@ RobotFramework:
extensions:
- .robot
# - .txt
tm_scope: text.robot
Rouge:
type: programming
@@ -2035,6 +2134,7 @@ Rouge:
color: "#cc0088"
extensions:
- .rg
tm_scope: source.clojure
Ruby:
type: programming
@@ -2110,6 +2210,7 @@ SQF:
extensions:
- .sqf
- .hqf
tm_scope: source.c++
SQL:
type: data
@@ -2128,6 +2229,7 @@ STON:
lexer: JSON
extensions:
- .ston
tm_scope: source.json
Sage:
type: programming
@@ -2135,6 +2237,7 @@ Sage:
group: Python
extensions:
- .sage
tm_scope: source.python
Sass:
type: markup
@@ -2158,6 +2261,7 @@ Scaml:
type: markup
extensions:
- .scaml
tm_scope: source.scaml
Scheme:
type: programming
@@ -2192,7 +2296,7 @@ Shell:
type: programming
lexer: Bash
search_term: bash
color: "#5861ce"
color: "#89e051"
aliases:
- sh
- bash
@@ -2202,6 +2306,7 @@ Shell:
- .bash
- .bats
- .cgi
- .command
- .fcgi
- .tmux
- .zsh
@@ -2230,6 +2335,7 @@ Slash:
color: "#007eff"
extensions:
- .sl
tm_scope: text.html.slash
Slim:
group: HTML
@@ -2256,12 +2362,14 @@ SourcePawn:
- sourcemod
extensions:
- .sp
tm_scope: source.sp
Squirrel:
type: programming
lexer: C++
extensions:
- .nut
tm_scope: source.c++
Standard ML:
type: programming
@@ -2273,6 +2381,7 @@ Standard ML:
- .fun
- .sig
- .sml
tm_scope: source.ml
Stata:
type: programming
@@ -2321,6 +2430,7 @@ TOML:
type: data
extensions:
- .toml
tm_scope: source.toml
TXL:
type: programming
@@ -2345,6 +2455,7 @@ Tcsh:
extensions:
- .tcsh
- .csh
tm_scope: source.shell
TeX:
type: markup
@@ -2374,6 +2485,7 @@ Tea:
type: markup
extensions:
- .tea
tm_scope: source.tea
Textile:
type: prose
@@ -2397,6 +2509,7 @@ Twig:
lexer: HTML+Django/Jinja
extensions:
- .twig
tm_scope: text.html.twig
TypeScript:
type: programming
@@ -2405,6 +2518,7 @@ TypeScript:
- ts
extensions:
- .ts
tm_scope: source.ts
Unified Parallel C:
type: programming
@@ -2414,6 +2528,7 @@ Unified Parallel C:
color: "#755223"
extensions:
- .upc
tm_scope: source.c
UnrealScript:
type: programming
@@ -2421,6 +2536,7 @@ UnrealScript:
lexer: Java
extensions:
- .uc
tm_scope: source.java
VCL:
type: programming
@@ -2429,6 +2545,7 @@ VCL:
color: "#0298c3"
extensions:
- .vcl
tm_scope: source.perl
VHDL:
type: programming
@@ -2486,6 +2603,7 @@ Visual Basic:
- .vba
- .vbhtml
- .vbs
tm_scope: source.vbnet
Volt:
type: programming
@@ -2493,12 +2611,14 @@ Volt:
color: "#0098db"
extensions:
- .volt
tm_scope: source.d
XC:
type: programming
lexer: C
extensions:
- .xc
tm_scope: source.c
XML:
type: markup
@@ -2569,6 +2689,7 @@ XML:
filenames:
- .classpath
- .project
- build.xml.dist
- phpunit.xml.dist
XProc:
@@ -2577,6 +2698,7 @@ XProc:
extensions:
- .xpl
- .xproc
tm_scope: text.xml
XQuery:
type: programming
@@ -2592,6 +2714,7 @@ XS:
lexer: C
extensions:
- .xs
tm_scope: source.c
XSLT:
type: programming
@@ -2600,6 +2723,7 @@ XSLT:
extensions:
- .xslt
- .xsl
tm_scope: text.xml.xsl
Xojo:
type: programming
@@ -2611,6 +2735,7 @@ Xojo:
- .xojo_script
- .xojo_toolbar
- .xojo_window
tm_scope: source.vbnet
Xtend:
type: programming
@@ -2634,6 +2759,7 @@ Zephir:
color: "#118f9e"
extensions:
- .zep
tm_scope: text.html.php
Zimpl:
type: programming
@@ -2657,6 +2783,7 @@ edn:
color: "#db5855"
extensions:
- .edn
tm_scope: source.clojure
fish:
type: programming
@@ -2701,6 +2828,7 @@ wisp:
color: "#7582D1"
extensions:
- .wisp
tm_scope: source.clojure
xBase:
type: programming

View File

@@ -1,5 +1,5 @@
begin
require 'json'
require 'yajl'
rescue LoadError
require 'yaml'
end
@@ -19,7 +19,7 @@ module Linguist
# Hash of serialized samples object
def self.cache
@cache ||= begin
serializer = defined?(JSON) ? JSON : YAML
serializer = defined?(Yajl) ? Yajl : YAML
serializer.load(File.read(PATH))
end
end

View File

@@ -242,3 +242,7 @@
# Typesafe Activator
- (^|/)activator$
- (^|/)activator\.bat$
# ProGuard
- proguard.pro
- proguard-rules.pro

View File

@@ -1,3 +1,3 @@
module Linguist
VERSION = "3.4.0"
VERSION = "3.4.1"
end

367
samples/APL/UT.dyalog Normal file
View 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 16attr ⍝ 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

View 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

View File

@@ -0,0 +1,68 @@
Scriptname CAMTEST_OverShoulderME extends activemagiceffect
{Play with camera effects}
;--=== Imports ===--
Import Utility
Import Game
;--=== Properties ===--
Actor Property PlayerRef Auto
ActorBase Property CAMTEST_CameraActor Auto
;--=== Variables ===--
Actor Player
Actor Camera
Actor Target
Float PosX
Float PosY
Float PosZ
Float SpeedMult
ObjectReference Mist
ObjectReference Fog
;--=== Events ===--
Event OnInit()
Player = PlayerRef
EndEvent
Event onEffectStart(Actor akTarget, Actor akCaster)
Camera = Player.PlaceActorAtMe(CAMTEST_CameraActor)
Camera.EnableAI(False)
Camera.SetScale(0.1)
Camera.TranslateTo(Player.X + 40,Player.Y,Player.Z,0,0,0,800,30)
DisablePlayerControls(abMovement = true, abFighting = true, abCamSwitch = true, abLooking = true, abSneaking = true, abMenu = true, abActivate = true, abJournalTabs = false)
SetPlayerAIDriven(True)
ForceThirdPerson()
SetHUDCartMode()
SetInChargen(True, True, False)
SetCameraTarget(Camera)
ForceFirstPerson()
Wait(1)
Camera.SplineTranslateTo(Player.X + 4000,Player.Y,Player.Z + 1000,15,0,Camera.GetHeadingAngle(Player) + Camera.GetAngleZ(),1800,800,100)
; Camera.SetLookAt(Player)
Wait(10)
Camera.SplineTranslateTo(Player.X + 1000,Player.Y - 500,Player.Z + 500,25,0,Camera.GetHeadingAngle(Player) + Camera.GetAngleZ(),1800,800,100)
Wait(10)
SetHUDCartMode(False)
SetCameraTarget(Player)
SetInChargen(False, False, False)
EnablePlayerControls()
SetPlayerAIDriven(False)
EndEvent
Event onUpdate()
EndEvent
Event onEffectFinish(Actor akTarget, Actor akCaster)
EndEvent
;--=== Functions ===--

View File

@@ -0,0 +1 @@
Scriptname vMFX_FXPlugin extends Quest

View File

@@ -0,0 +1,120 @@
Scriptname vSCM_MetaQuestScript extends Quest
{Do initialization and track variables for scripts}
;--=== Imports ===--
Import Utility
Import Game
;--=== Properties ===--
Actor Property PlayerRef Auto
Float Property ModVersion Auto Hidden
String Property ModName = "Smarter Combat Music" Auto Hidden
Message Property vSCM_ModLoadedMSG Auto
Message Property vSCM_ModUpdatedMSG Auto
;--=== Variables ===--
Float _CurrentVersion
String _sCurrentVersion
Bool _Running
Float _ScriptLatency
Float _StartTime
Float _EndTime
;--=== Events ===--
Event OnInit()
If ModVersion == 0
DoUpkeep(True)
EndIf
EndEvent
Event OnReset()
Debug.Trace("SCM: Metaquest event: OnReset")
EndEvent
Event OnGameReloaded()
Debug.Trace("SCM: Metaquest event: OnGameReloaded")
EndEvent
;--=== Functions ===--
Function DoUpkeep(Bool DelayedStart = True)
;FIXME: CHANGE THIS WHEN UPDATING!
_CurrentVersion = 0.01
_sCurrentVersion = GetVersionString(_CurrentVersion)
String sErrorMessage
If DelayedStart
Wait(RandomFloat(2,4))
EndIf
Debug.Trace("SCM: " + ModName)
Debug.Trace("SCM: Performing upkeep...")
Debug.Trace("SCM: Loaded version is " + GetVersionString(ModVersion) + ", Current version is " + _sCurrentVersion)
If ModVersion == 0
Debug.Trace("SCM: Newly installed, doing initialization...")
DoInit()
If ModVersion == _CurrentVersion
Debug.Trace("SCM: Initialization succeeded.")
Else
Debug.Trace("SCM: WARNING! Initialization had a problem!")
EndIf
ElseIf ModVersion < _CurrentVersion
Debug.Trace("SCM: Installed version is older. Starting the upgrade...")
DoUpgrade()
If ModVersion != _CurrentVersion
Debug.Trace("SCM: WARNING! Upgrade failed!")
Debug.MessageBox("WARNING! " + ModName + " upgrade failed for some reason. You should report this to the mod author.")
EndIf
Debug.Trace("SCM: Upgraded to " + _CurrentVersion)
vSCM_ModUpdatedMSG.Show(_CurrentVersion)
Else
Debug.Trace("SCM: Loaded, no updates.")
;CheckForOrphans()
EndIf
CheckForExtras()
UpdateConfig()
Debug.Trace("SCM: Upkeep complete!")
EndFunction
Function DoInit()
Debug.Trace("SCM: Initializing...")
_Running = True
ModVersion = _CurrentVersion
vSCM_ModLoadedMSG.Show(_CurrentVersion)
EndFunction
Function DoUpgrade()
_Running = False
If ModVersion < 0.01
Debug.Trace("SCM: Upgrading to 0.01...")
ModVersion = 0.01
EndIf
_Running = True
Debug.Trace("SCM: Upgrade complete!")
EndFunction
Function UpdateConfig()
Debug.Trace("SCM: Updating configuration...")
Debug.Trace("SCM: Updated configuration values, some scripts may update in the background!")
EndFunction
String Function GetVersionString(Float fVersion)
Int Major = Math.Floor(fVersion) as Int
Int Minor = ((fVersion - (Major as Float)) * 100.0) as Int
If Minor < 10
Return Major + ".0" + Minor
Else
Return Major + "." + Minor
EndIf
EndFunction
Function CheckForExtras()
EndFunction

View 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 ""

View File

@@ -14,4 +14,5 @@ set +x
mkdir -p ./vendor/gems
bundle install --local --path ./vendor/gems
bundle exec rake samples
bundle exec rake

View File

@@ -77,6 +77,12 @@ class TestHeuristcs < Test::Unit::TestCase
assert_equal Language["IDL"], results.first
end
def test_asc_asciidoc_by_heuristics
languages = ["AGS Script", "AsciiDoc"]
results = Heuristics.disambiguate_asc(fixture("AsciiDoc/list.asc"), languages)
assert_equal Language["AsciiDoc"], results.first
end
def test_ts_typescript_by_heuristics
languages = ["TypeScript", "XML"]
results = Heuristics.disambiguate_ts(fixture("TypeScript/classes.ts"), languages)

View File

@@ -16,11 +16,11 @@ class TestSamples < Test::Unit::TestCase
warn "Samples database is out of date. Run `bundle exec rake samples`."
expected = Tempfile.new('expected.json')
expected.write Yajl::Encoder.encode(serialized, :pretty => true)
expected.write Yajl.dump(serialized, :pretty => true)
expected.close
actual = Tempfile.new('actual.json')
actual.write Yajl::Encoder.encode(latest, :pretty => true)
actual.write Yajl.dump(latest, :pretty => true)
actual.close
expected.unlink