mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Merge github.com:github/linguist
Conflicts: lib/linguist/vendor.yml
This commit is contained in:
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2011 GitHub, Inc.
|
||||
Copyright (c) 2011-2013 GitHub, Inc.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
|
||||
@@ -84,7 +84,7 @@ To run the tests:
|
||||
|
||||
The majority of patches won't need to touch any Ruby code at all. The [master language list](https://github.com/github/linguist/blob/master/lib/linguist/languages.yml) is just a configuration file.
|
||||
|
||||
We try to only add languages once they have a some usage on GitHub, so please note in-the-wild usage examples in your pull request.
|
||||
We try to only add languages once they have some usage on GitHub, so please note in-the-wild usage examples in your pull request.
|
||||
|
||||
Almost all bug fixes or new language additions should come with some additional code samples. Just drop them under [`samples/`](https://github.com/github/linguist/tree/master/samples) in the correct subdirectory and our test suite will automatically test them. In most cases you shouldn't need to add any new assertions.
|
||||
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
# linguist — detect language type for a file, or, given a directory, determine language breakdown
|
||||
#
|
||||
# usage: linguist <path>
|
||||
|
||||
require 'linguist/file_blob'
|
||||
require 'linguist/repository'
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
Gem::Specification.new do |s|
|
||||
s.name = 'github-linguist'
|
||||
s.version = '2.6.9'
|
||||
s.version = '2.9.7'
|
||||
s.summary = "GitHub Language detection"
|
||||
|
||||
s.authors = "GitHub"
|
||||
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
||||
s.add_dependency 'charlock_holmes', '~> 0.6.6'
|
||||
s.add_dependency 'escape_utils', '~> 0.3.1'
|
||||
s.add_dependency 'mime-types', '~> 1.19'
|
||||
s.add_dependency 'pygments.rb', '~> 0.4.2'
|
||||
s.add_dependency 'pygments.rb', '~> 0.5.2'
|
||||
s.add_development_dependency 'mocha'
|
||||
s.add_development_dependency 'json'
|
||||
s.add_development_dependency 'rake'
|
||||
|
||||
@@ -70,7 +70,7 @@ module Linguist
|
||||
#
|
||||
# Return true or false
|
||||
def likely_binary?
|
||||
binary_mime_type? and not Language.find_by_filename(name)
|
||||
binary_mime_type? && !Language.find_by_filename(name)
|
||||
end
|
||||
|
||||
# Public: Get the Content-Type header value
|
||||
@@ -189,10 +189,9 @@ module Linguist
|
||||
|
||||
# Public: Is the blob safe to colorize?
|
||||
#
|
||||
# We use Pygments.rb for syntax highlighting blobs, which
|
||||
# has some quirks and also is essentially 'un-killable' via
|
||||
# normal timeout. To workaround this we try to
|
||||
# carefully handling Pygments.rb anything it can't handle.
|
||||
# We use Pygments for syntax highlighting blobs. Pygments
|
||||
# can be too slow for very large blobs or for certain
|
||||
# corner-case blobs.
|
||||
#
|
||||
# Return true or false
|
||||
def safe_to_colorize?
|
||||
@@ -278,36 +277,6 @@ module Linguist
|
||||
@_generated ||= Generated.generated?(name, lambda { data })
|
||||
end
|
||||
|
||||
# Public: Should the blob be indexed for searching?
|
||||
#
|
||||
# Excluded:
|
||||
# - Files over 0.1MB
|
||||
# - Non-text files
|
||||
# - Languages marked as not searchable
|
||||
# - Generated source files
|
||||
#
|
||||
# Please add additional test coverage to
|
||||
# `test/test_blob.rb#test_indexable` if you make any changes.
|
||||
#
|
||||
# Return true or false
|
||||
def indexable?
|
||||
if size > 100 * 1024
|
||||
false
|
||||
elsif binary?
|
||||
false
|
||||
elsif extname == '.txt'
|
||||
true
|
||||
elsif language.nil?
|
||||
false
|
||||
elsif !language.searchable?
|
||||
false
|
||||
elsif generated?
|
||||
false
|
||||
else
|
||||
true
|
||||
end
|
||||
end
|
||||
|
||||
# Public: Detects the Language of the blob.
|
||||
#
|
||||
# May load Blob#data
|
||||
@@ -343,19 +312,5 @@ module Linguist
|
||||
options[:options][:encoding] ||= encoding
|
||||
lexer.highlight(data, options)
|
||||
end
|
||||
|
||||
# Public: Highlight syntax of blob without the outer highlight div
|
||||
# wrapper.
|
||||
#
|
||||
# options - A Hash of options (defaults to {})
|
||||
#
|
||||
# Returns html String
|
||||
def colorize_without_wrapper(options = {})
|
||||
if text = colorize(options)
|
||||
text[%r{<div class="highlight"><pre>(.*?)</pre>\s*</div>}m, 1]
|
||||
else
|
||||
''
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -130,9 +130,9 @@ module Linguist
|
||||
Math.log(@languages[language].to_f / @languages_total.to_f)
|
||||
end
|
||||
|
||||
private
|
||||
private
|
||||
def verbosity
|
||||
@verbosity ||= (ENV['LINGUIST_DEBUG']||0).to_i
|
||||
@verbosity ||= (ENV['LINGUIST_DEBUG'] || 0).to_i
|
||||
end
|
||||
|
||||
# Internal: show a table of probabilities for each <token,language> pair.
|
||||
@@ -146,19 +146,23 @@ private
|
||||
# appear in one language vs. the least-likely language. Dashes
|
||||
# indicate the least-likely language (and zero points) for each token.
|
||||
def dump_all_tokens(tokens, languages)
|
||||
maxlen = tokens.map{|tok| tok.size}.max
|
||||
maxlen = tokens.map { |tok| tok.size }.max
|
||||
|
||||
printf "%#{maxlen}s", ""
|
||||
puts " #" + languages.map{|lang| sprintf("%10s", lang)}.join
|
||||
puts " #" + languages.map { |lang| sprintf("%10s", lang) }.join
|
||||
|
||||
tokmap = Hash.new(0)
|
||||
tokens.each{|tok| tokmap[tok] += 1}
|
||||
tokmap.sort.each{|tok, count|
|
||||
arr = languages.map{|lang| [lang, token_probability(tok, lang)] }
|
||||
min = arr.map{|a,b| b}.min
|
||||
tokens.each { |tok| tokmap[tok] += 1 }
|
||||
|
||||
tokmap.sort.each { |tok, count|
|
||||
arr = languages.map { |lang| [lang, token_probability(tok, lang)] }
|
||||
min = arr.map { |a,b| b }.min
|
||||
minlog = Math.log(min)
|
||||
if !arr.inject(true) {|result, n| result && n[1] == arr[0][1]} # if not all the same
|
||||
if !arr.inject(true) { |result, n| result && n[1] == arr[0][1] }
|
||||
printf "%#{maxlen}s%5d", tok, count
|
||||
puts arr.map{|ent|
|
||||
ent[1] == min ? " -" : sprintf("%10.3f", count*(Math.log(ent[1])-minlog))
|
||||
|
||||
puts arr.map { |ent|
|
||||
ent[1] == min ? " -" : sprintf("%10.3f", count * (Math.log(ent[1]) - minlog))
|
||||
}.join
|
||||
end
|
||||
}
|
||||
|
||||
@@ -52,12 +52,14 @@ module Linguist
|
||||
# Return true or false
|
||||
def generated?
|
||||
name == 'Gemfile.lock' ||
|
||||
minified_javascript? ||
|
||||
minified_files? ||
|
||||
compiled_coffeescript? ||
|
||||
xcode_project_file? ||
|
||||
generated_net_docfile? ||
|
||||
generated_parser? ||
|
||||
generated_protocol_buffer?
|
||||
generated_net_docfile? ||
|
||||
generated_net_designer_file? ||
|
||||
generated_protocol_buffer? ||
|
||||
generated_jni_header?
|
||||
end
|
||||
|
||||
# Internal: Is the blob an XCode project file?
|
||||
@@ -70,16 +72,16 @@ module Linguist
|
||||
['.xib', '.nib', '.storyboard', '.pbxproj', '.xcworkspacedata', '.xcuserstate'].include?(extname)
|
||||
end
|
||||
|
||||
# Internal: Is the blob minified JS?
|
||||
# Internal: Is the blob minified files?
|
||||
#
|
||||
# Consider JS minified if the average line length is
|
||||
# greater then 100c.
|
||||
# Consider a file minified if it contains more than 5% spaces.
|
||||
# Currently, only JS and CSS files are detected by this method.
|
||||
#
|
||||
# Returns true or false.
|
||||
def minified_javascript?
|
||||
return unless extname == '.js'
|
||||
if lines.any?
|
||||
(lines.inject(0) { |n, l| n += l.length } / lines.length) > 100
|
||||
def minified_files?
|
||||
return unless ['.js', '.css'].include? extname
|
||||
if data && data.length > 200
|
||||
(data.each_char.count{ |c| c <= ' ' } / data.length.to_f) < 0.05
|
||||
else
|
||||
false
|
||||
end
|
||||
@@ -143,6 +145,16 @@ module Linguist
|
||||
lines[-2].include?("</doc>")
|
||||
end
|
||||
|
||||
# Internal: Is this a codegen file for a .NET project?
|
||||
#
|
||||
# Visual Studio often uses code generation to generate partial classes, and
|
||||
# these files can be quite unwieldy. Let's hide them.
|
||||
#
|
||||
# Returns true or false
|
||||
def generated_net_designer_file?
|
||||
name.downcase =~ /\.designer\.cs$/
|
||||
end
|
||||
|
||||
# Internal: Is the blob of JS a parser generated by PEG.js?
|
||||
#
|
||||
# PEG.js-generated parsers are not meant to be consumed by humans.
|
||||
@@ -170,5 +182,16 @@ module Linguist
|
||||
|
||||
return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!")
|
||||
end
|
||||
|
||||
# Internal: Is the blob a C/C++ header generated by the Java JNI tool javah?
|
||||
#
|
||||
# Returns true of false.
|
||||
def generated_jni_header?
|
||||
return false unless extname == '.h'
|
||||
return false unless lines.count > 2
|
||||
|
||||
return lines[0].include?("/* DO NOT EDIT THIS FILE - it is machine generated */")
|
||||
return lines[1].include?("#include <jni.h>")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -15,12 +15,21 @@ module Linguist
|
||||
@index = {}
|
||||
@name_index = {}
|
||||
@alias_index = {}
|
||||
|
||||
@extension_index = Hash.new { |h,k| h[k] = [] }
|
||||
@filename_index = Hash.new { |h,k| h[k] = [] }
|
||||
@primary_extension_index = {}
|
||||
|
||||
# Valid Languages types
|
||||
TYPES = [:data, :markup, :programming]
|
||||
|
||||
# Names of non-programming languages that we will still detect
|
||||
#
|
||||
# Returns an array
|
||||
def self.detectable_markup
|
||||
["CSS", "Less", "Sass"]
|
||||
end
|
||||
|
||||
# Internal: Create a new Language object
|
||||
#
|
||||
# attributes - A hash of attributes
|
||||
@@ -56,6 +65,12 @@ module Linguist
|
||||
@extension_index[extension] << language
|
||||
end
|
||||
|
||||
if @primary_extension_index.key?(language.primary_extension)
|
||||
raise ArgumentError, "Duplicate primary extension: #{language.primary_extension}"
|
||||
end
|
||||
|
||||
@primary_extension_index[language.primary_extension] = language
|
||||
|
||||
language.filenames.each do |filename|
|
||||
@filename_index[filename] << language
|
||||
end
|
||||
@@ -141,7 +156,10 @@ module Linguist
|
||||
# Returns all matching Languages or [] if none were found.
|
||||
def self.find_by_filename(filename)
|
||||
basename, extname = File.basename(filename), File.extname(filename)
|
||||
@filename_index[basename] + @extension_index[extname]
|
||||
langs = [@primary_extension_index[extname]] +
|
||||
@filename_index[basename] +
|
||||
@extension_index[extname]
|
||||
langs.compact.uniq
|
||||
end
|
||||
|
||||
# Public: Look up Language by its name or lexer.
|
||||
@@ -445,8 +463,6 @@ module Linguist
|
||||
extnames.each do |extname|
|
||||
if !options['extensions'].include?(extname)
|
||||
options['extensions'] << extname
|
||||
else
|
||||
warn "#{name} #{extname.inspect} is already defined in samples/. Remove from languages.yml."
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -455,8 +471,6 @@ module Linguist
|
||||
fns.each do |filename|
|
||||
if !options['filenames'].include?(filename)
|
||||
options['filenames'] << filename
|
||||
else
|
||||
warn "#{name} #{filename.inspect} is already defined in samples/. Remove from languages.yml."
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -29,6 +29,12 @@ ABAP:
|
||||
lexer: ABAP
|
||||
primary_extension: .abap
|
||||
|
||||
ANTLR:
|
||||
type: programming
|
||||
color: "#9DC3FF"
|
||||
lexer: ANTLR
|
||||
primary_extension: .g4
|
||||
|
||||
ASP:
|
||||
type: programming
|
||||
color: "#6a40fd"
|
||||
@@ -137,6 +143,11 @@ Befunge:
|
||||
BlitzMax:
|
||||
primary_extension: .bmx
|
||||
|
||||
Bluespec:
|
||||
type: programming
|
||||
lexer: verilog
|
||||
primary_extension: .bsv
|
||||
|
||||
Boo:
|
||||
type: programming
|
||||
color: "#d4bec1"
|
||||
@@ -212,8 +223,18 @@ CMake:
|
||||
filenames:
|
||||
- CMakeLists.txt
|
||||
|
||||
COBOL:
|
||||
type: programming
|
||||
primary_extension: .cob
|
||||
extensions:
|
||||
- .cbl
|
||||
- .ccp
|
||||
- .cobol
|
||||
- .cpy
|
||||
|
||||
CSS:
|
||||
ace_mode: css
|
||||
color: "#1f085e"
|
||||
primary_extension: .css
|
||||
|
||||
Ceylon:
|
||||
@@ -232,6 +253,7 @@ Clojure:
|
||||
primary_extension: .clj
|
||||
extensions:
|
||||
- .cljs
|
||||
- .cljx
|
||||
filenames:
|
||||
- riemann.config
|
||||
|
||||
@@ -270,8 +292,10 @@ Common Lisp:
|
||||
primary_extension: .lisp
|
||||
extensions:
|
||||
- .asd
|
||||
- .cl
|
||||
- .lsp
|
||||
- .ny
|
||||
- .podsl
|
||||
|
||||
Coq:
|
||||
type: programming
|
||||
@@ -309,6 +333,14 @@ D-ObjDump:
|
||||
lexer: d-objdump
|
||||
primary_extension: .d-objdump
|
||||
|
||||
DM:
|
||||
type: programming
|
||||
color: "#075ff1"
|
||||
lexer: Text only
|
||||
primary_extension: .dm
|
||||
aliases:
|
||||
- byond
|
||||
|
||||
DOT:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
@@ -328,14 +360,6 @@ Dart:
|
||||
type: programming
|
||||
primary_extension: .dart
|
||||
|
||||
Delphi:
|
||||
type: programming
|
||||
color: "#b0ce4e"
|
||||
primary_extension: .pas
|
||||
extensions:
|
||||
- .dfm
|
||||
- .lpr
|
||||
|
||||
DCPU-16 ASM:
|
||||
type: programming
|
||||
lexer: dasm16
|
||||
@@ -383,7 +407,6 @@ Elixir:
|
||||
Elm:
|
||||
type: programming
|
||||
lexer: Haskell
|
||||
group: Haskell
|
||||
primary_extension: .elm
|
||||
|
||||
Emacs Lisp:
|
||||
@@ -399,7 +422,7 @@ Emacs Lisp:
|
||||
|
||||
Erlang:
|
||||
type: programming
|
||||
color: "#949e0e"
|
||||
color: "#0faf8d"
|
||||
primary_extension: .erl
|
||||
extensions:
|
||||
- .hrl
|
||||
@@ -408,7 +431,9 @@ F#:
|
||||
type: programming
|
||||
lexer: FSharp
|
||||
color: "#b845fc"
|
||||
search_term: ocaml
|
||||
search_term: fsharp
|
||||
aliases:
|
||||
- fsharp
|
||||
primary_extension: .fs
|
||||
extensions:
|
||||
- .fsi
|
||||
@@ -473,6 +498,18 @@ GAS:
|
||||
extensions:
|
||||
- .S
|
||||
|
||||
GLSL:
|
||||
group: C
|
||||
type: programming
|
||||
primary_extension: .glsl
|
||||
extensions:
|
||||
- .fp
|
||||
- .frag
|
||||
- .geom
|
||||
- .glslv
|
||||
- .shader
|
||||
- .vert
|
||||
|
||||
Genshi:
|
||||
primary_extension: .kid
|
||||
|
||||
@@ -495,9 +532,15 @@ Gettext Catalog:
|
||||
extensions:
|
||||
- .pot
|
||||
|
||||
Glyph:
|
||||
type: programming
|
||||
color: "#e4cc98"
|
||||
lexer: Tcl
|
||||
primary_extension: .glf
|
||||
|
||||
Go:
|
||||
type: programming
|
||||
color: "#8d04eb"
|
||||
color: "#a89b4d"
|
||||
primary_extension: .go
|
||||
|
||||
Gosu:
|
||||
@@ -581,6 +624,10 @@ Handlebars:
|
||||
type: markup
|
||||
lexer: Text only
|
||||
primary_extension: .handlebars
|
||||
extensions:
|
||||
- .hbs
|
||||
- .html.handlebars
|
||||
- .html.hbs
|
||||
|
||||
Haskell:
|
||||
type: programming
|
||||
@@ -601,12 +648,15 @@ Haxe:
|
||||
INI:
|
||||
type: data
|
||||
extensions:
|
||||
- .cfg
|
||||
- .ini
|
||||
- .prefs
|
||||
- .properties
|
||||
primary_extension: .ini
|
||||
|
||||
Inno Setup:
|
||||
primary_extension: .iss
|
||||
lexer: Text only
|
||||
|
||||
IRC log:
|
||||
lexer: IRC logs
|
||||
search_term: irc
|
||||
@@ -626,12 +676,30 @@ Ioke:
|
||||
color: "#078193"
|
||||
primary_extension: .ik
|
||||
|
||||
J:
|
||||
type: programming
|
||||
lexer: Text only
|
||||
primary_extension: .ijs
|
||||
|
||||
JSON:
|
||||
type: data
|
||||
group: JavaScript
|
||||
ace_mode: json
|
||||
searchable: false
|
||||
primary_extension: .json
|
||||
extensions:
|
||||
- .sublime-keymap
|
||||
- .sublime_metrics
|
||||
- .sublime-mousemap
|
||||
- .sublime-project
|
||||
- .sublime_session
|
||||
- .sublime-settings
|
||||
- .sublime-workspace
|
||||
|
||||
Jade:
|
||||
group: HTML
|
||||
type: markup
|
||||
primary_extension: .jade
|
||||
|
||||
Java:
|
||||
type: programming
|
||||
@@ -672,6 +740,7 @@ JavaScript:
|
||||
Julia:
|
||||
type: programming
|
||||
primary_extension: .jl
|
||||
color: "#a270ba"
|
||||
|
||||
Kotlin:
|
||||
type: programming
|
||||
@@ -680,6 +749,13 @@ Kotlin:
|
||||
- .ktm
|
||||
- .kts
|
||||
|
||||
LFE:
|
||||
type: programming
|
||||
primary_extension: .lfe
|
||||
color: "#004200"
|
||||
lexer: Common Lisp
|
||||
group: Erlang
|
||||
|
||||
LLVM:
|
||||
primary_extension: .ll
|
||||
|
||||
@@ -745,6 +821,8 @@ Logos:
|
||||
Logtalk:
|
||||
type: programming
|
||||
primary_extension: .lgt
|
||||
extensions:
|
||||
- .logtalk
|
||||
|
||||
Lua:
|
||||
type: programming
|
||||
@@ -753,13 +831,16 @@ Lua:
|
||||
primary_extension: .lua
|
||||
extensions:
|
||||
- .nse
|
||||
- .rbxs
|
||||
|
||||
M:
|
||||
type: programming
|
||||
lexer: Common Lisp
|
||||
aliases:
|
||||
- mumps
|
||||
primary_extension: .m
|
||||
primary_extension: .mumps
|
||||
extensions:
|
||||
- .m
|
||||
|
||||
Makefile:
|
||||
aliases:
|
||||
@@ -974,6 +1055,15 @@ Parrot Assembly:
|
||||
- pasm
|
||||
primary_extension: .pasm
|
||||
|
||||
Pascal:
|
||||
type: programming
|
||||
lexer: Delphi
|
||||
color: "#b0ce4e"
|
||||
primary_extension: .pas
|
||||
extensions:
|
||||
- .dfm
|
||||
- .lpr
|
||||
|
||||
Perl:
|
||||
type: programming
|
||||
ace_mode: perl
|
||||
@@ -981,6 +1071,7 @@ Perl:
|
||||
primary_extension: .pl
|
||||
extensions:
|
||||
- .PL
|
||||
- .nqp
|
||||
- .perl
|
||||
- .ph
|
||||
- .plx
|
||||
@@ -1008,6 +1099,9 @@ PowerShell:
|
||||
aliases:
|
||||
- posh
|
||||
primary_extension: .ps1
|
||||
extensions:
|
||||
- .psd1
|
||||
- .psm1
|
||||
|
||||
Processing:
|
||||
type: programming
|
||||
@@ -1022,6 +1116,13 @@ Prolog:
|
||||
extensions:
|
||||
- .pro
|
||||
|
||||
Protocol Buffer:
|
||||
type: markup
|
||||
aliases:
|
||||
- protobuf
|
||||
- Protocol Buffers
|
||||
primary_extension: .proto
|
||||
|
||||
Puppet:
|
||||
type: programming
|
||||
color: "#cc5555"
|
||||
@@ -1044,6 +1145,7 @@ Python:
|
||||
primary_extension: .py
|
||||
extensions:
|
||||
- .gyp
|
||||
- .pyt
|
||||
- .pyw
|
||||
- .wsgi
|
||||
- .xpy
|
||||
@@ -1062,6 +1164,19 @@ R:
|
||||
color: "#198ce7"
|
||||
lexer: S
|
||||
primary_extension: .r
|
||||
filenames:
|
||||
- .Rprofile
|
||||
|
||||
REALbasic:
|
||||
type: programming
|
||||
lexer: VB.net
|
||||
primary_extension: .rbbas
|
||||
extensions:
|
||||
- .rbfrm
|
||||
- .rbmnu
|
||||
- .rbres
|
||||
- .rbtbar
|
||||
- .rbuistate
|
||||
|
||||
RHTML:
|
||||
type: markup
|
||||
@@ -1124,6 +1239,7 @@ Ruby:
|
||||
- .gemspec
|
||||
- .god
|
||||
- .irbrc
|
||||
- .mspec
|
||||
- .podspec
|
||||
- .rbuild
|
||||
- .rbw
|
||||
@@ -1132,6 +1248,7 @@ Ruby:
|
||||
- .thor
|
||||
- .watchr
|
||||
filenames:
|
||||
- Berksfile
|
||||
- Gemfile
|
||||
- Guardfile
|
||||
- Podfile
|
||||
@@ -1172,6 +1289,11 @@ Scala:
|
||||
color: "#7dd3b0"
|
||||
primary_extension: .scala
|
||||
|
||||
Scaml:
|
||||
group: HTML
|
||||
type: markup
|
||||
primary_extension: .scaml
|
||||
|
||||
Scheme:
|
||||
type: programming
|
||||
color: "#1e4aec"
|
||||
@@ -1201,7 +1323,15 @@ Shell:
|
||||
- zsh
|
||||
primary_extension: .sh
|
||||
extensions:
|
||||
- .bats
|
||||
- .tmux
|
||||
filenames:
|
||||
- Dockerfile
|
||||
|
||||
Slash:
|
||||
type: programming
|
||||
color: "#007eff"
|
||||
primary_extension: .sl
|
||||
|
||||
Smalltalk:
|
||||
type: programming
|
||||
@@ -1211,6 +1341,11 @@ Smalltalk:
|
||||
Smarty:
|
||||
primary_extension: .tpl
|
||||
|
||||
Squirrel:
|
||||
type: programming
|
||||
lexer: C++
|
||||
primary_extension: .nut
|
||||
|
||||
Standard ML:
|
||||
type: programming
|
||||
color: "#dc566d"
|
||||
@@ -1237,6 +1372,8 @@ Tcl:
|
||||
type: programming
|
||||
color: "#e4cc98"
|
||||
primary_extension: .tcl
|
||||
extensions:
|
||||
- .adp
|
||||
|
||||
Tcsh:
|
||||
type: programming
|
||||
@@ -1253,6 +1390,7 @@ TeX:
|
||||
primary_extension: .tex
|
||||
extensions:
|
||||
- .aux
|
||||
- .bib
|
||||
- .dtx
|
||||
- .ins
|
||||
- .ltx
|
||||
@@ -1287,7 +1425,6 @@ Twig:
|
||||
TypeScript:
|
||||
type: programming
|
||||
color: "#31859c"
|
||||
lexer: Text only
|
||||
aliases:
|
||||
- ts
|
||||
primary_extension: .ts
|
||||
@@ -1345,6 +1482,17 @@ Visual Basic:
|
||||
- .vba
|
||||
- .vbs
|
||||
|
||||
Volt:
|
||||
type: programming
|
||||
lexer: D
|
||||
color: "#0098db"
|
||||
primary_extension: .volt
|
||||
|
||||
XC:
|
||||
type: programming
|
||||
lexer: C
|
||||
primary_extension: .xc
|
||||
|
||||
XML:
|
||||
type: markup
|
||||
ace_mode: xml
|
||||
@@ -1356,14 +1504,18 @@ XML:
|
||||
extensions:
|
||||
- .axml
|
||||
- .ccxml
|
||||
- .clixml
|
||||
- .dita
|
||||
- .ditamap
|
||||
- .ditaval
|
||||
- .glade
|
||||
- .grxml
|
||||
- .jelly
|
||||
- .kml
|
||||
- .mxml
|
||||
- .plist
|
||||
- .ps1xml
|
||||
- .psc1
|
||||
- .pt
|
||||
- .rdf
|
||||
- .rss
|
||||
@@ -1373,6 +1525,7 @@ XML:
|
||||
- .tmLanguage
|
||||
- .tmPreferences
|
||||
- .tmSnippet
|
||||
- .tmTheme
|
||||
- .tml
|
||||
- .ui
|
||||
- .vxml
|
||||
@@ -1380,9 +1533,11 @@ XML:
|
||||
- .wxi
|
||||
- .wxl
|
||||
- .wxs
|
||||
- .x3d
|
||||
- .xaml
|
||||
- .xlf
|
||||
- .xliff
|
||||
- .xmi
|
||||
- .xsd
|
||||
- .xul
|
||||
- .zcml
|
||||
@@ -1403,6 +1558,8 @@ XQuery:
|
||||
primary_extension: .xquery
|
||||
extensions:
|
||||
- .xq
|
||||
- .xql
|
||||
- .xqm
|
||||
- .xqy
|
||||
|
||||
XS:
|
||||
@@ -1422,7 +1579,7 @@ Xtend:
|
||||
primary_extension: .xtend
|
||||
|
||||
YAML:
|
||||
type: markup
|
||||
type: data
|
||||
aliases:
|
||||
- yml
|
||||
primary_extension: .yml
|
||||
|
||||
@@ -73,8 +73,8 @@ module Linguist
|
||||
# Skip vendored or generated blobs
|
||||
next if blob.vendored? || blob.generated? || blob.language.nil?
|
||||
|
||||
# Only include programming languages
|
||||
if blob.language.type == :programming
|
||||
# Only include programming languages and acceptable markup languages
|
||||
if blob.language.type == :programming || Language.detectable_markup.include?(blob.language.name)
|
||||
@sizes[blob.language.group] += blob.size
|
||||
end
|
||||
end
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -24,8 +24,15 @@
|
||||
# Node dependencies
|
||||
- node_modules/
|
||||
|
||||
# Erlang bundles
|
||||
- ^rebar$
|
||||
|
||||
# Bootstrap minified css and js
|
||||
- (^|/)bootstrap([^.]*)(\.min)\.(js|css)$
|
||||
|
||||
# Vendored dependencies
|
||||
- vendor/
|
||||
- thirdparty/
|
||||
- vendors?/
|
||||
|
||||
# Debian packaging
|
||||
- ^debian/
|
||||
@@ -34,7 +41,11 @@
|
||||
|
||||
# jQuery
|
||||
- (^|/)jquery([^.]*)(\.min)?\.js$
|
||||
- (^|/)jquery\-\d\.\d(\.\d)?(\.min)?\.js$
|
||||
- (^|/)jquery\-\d\.\d+(\.\d+)?(\.min)?\.js$
|
||||
|
||||
# jQuery UI
|
||||
- (^|/)jquery\-ui(\-\d\.\d+(\.\d+)?)?(\.\w+)?(\.min)?\.(js|css)$
|
||||
- (^|/)jquery\.(ui|effects)\.([^.]*)(\.min)?\.(js|css)$
|
||||
|
||||
# Prototype
|
||||
- (^|/)prototype(.*)\.js$
|
||||
@@ -55,10 +66,6 @@
|
||||
- (^|/)yahoo-([^.]*)\.js$
|
||||
- (^|/)yui([^.]*)\.js$
|
||||
|
||||
# LESS css
|
||||
- (^|/)less([^.]*)(\.min)?\.js$
|
||||
- (^|/)less\-\d+\.\d+\.\d+(\.min)?\.js$
|
||||
|
||||
# WYS editors
|
||||
- (^|/)ckeditor\.js$
|
||||
- (^|/)tiny_mce([^.]*)\.js$
|
||||
@@ -95,7 +102,8 @@
|
||||
- -vsdoc\.js$
|
||||
|
||||
# jQuery validation plugin (MS bundles this with asp.net mvc)
|
||||
- (^|/)jquery([^.]*)\.validate(\.min)?\.js$
|
||||
- (^|/)jquery([^.]*)\.validate(\.unobtrusive)?(\.min)?\.js$
|
||||
- (^|/)jquery([^.]*)\.unobtrusive\-ajax(\.min)?\.js$
|
||||
|
||||
# Microsoft Ajax
|
||||
- (^|/)[Mm]icrosoft([Mm]vc)?([Aa]jax|[Vv]alidation)(\.debug)?\.js$
|
||||
@@ -104,14 +112,41 @@
|
||||
- ^[Pp]ackages/
|
||||
|
||||
# ExtJS
|
||||
- (^|/)extjs/
|
||||
- (^|/)extjs/.*?\.js$
|
||||
- (^|/)extjs/.*?\.xml$
|
||||
- (^|/)extjs/.*?\.txt$
|
||||
- (^|/)extjs/.*?\.html$
|
||||
- (^|/)extjs/.*?\.properties$
|
||||
- (^|/)extjs/.sencha/
|
||||
- (^|/)extjs/docs/
|
||||
- (^|/)extjs/builds/
|
||||
- (^|/)extjs/cmd/
|
||||
- (^|/)extjs/examples/
|
||||
- (^|/)extjs/locale/
|
||||
- (^|/)extjs/packages/
|
||||
- (^|/)extjs/plugins/
|
||||
- (^|/)extjs/resources/
|
||||
- (^|/)extjs/src/
|
||||
- (^|/)extjs/welcome/
|
||||
|
||||
# Samples folders
|
||||
- ^[Ss]amples/
|
||||
|
||||
# LICENSE, README, git config files
|
||||
- ^COPYING$
|
||||
- ^LICENSE$
|
||||
- gitattributes$
|
||||
- gitignore$
|
||||
- gitmodules$
|
||||
- ^README$
|
||||
- ^readme$
|
||||
|
||||
# Test fixtures
|
||||
- ^[Tt]est/fixtures/
|
||||
|
||||
# PhoneGap/Cordova
|
||||
- (^|/)cordova([^.]*)(\.min)?\.js$
|
||||
- (^|/)cordova\-\d\.\d(\.\d)?(\.min)?\.js$
|
||||
|
||||
# .DS_Store's
|
||||
- .[Dd][Ss]_[Ss]tore$
|
||||
|
||||
167
samples/Bluespec/TL.bsv
Normal file
167
samples/Bluespec/TL.bsv
Normal file
@@ -0,0 +1,167 @@
|
||||
package TL;
|
||||
|
||||
interface TL;
|
||||
method Action ped_button_push();
|
||||
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_N(Bool x);
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_S(Bool x);
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_E(Bool x);
|
||||
(* always_enabled *)
|
||||
method Action set_car_state_W(Bool x);
|
||||
|
||||
method Bool lampRedNS();
|
||||
method Bool lampAmberNS();
|
||||
method Bool lampGreenNS();
|
||||
|
||||
method Bool lampRedE();
|
||||
method Bool lampAmberE();
|
||||
method Bool lampGreenE();
|
||||
|
||||
method Bool lampRedW();
|
||||
method Bool lampAmberW();
|
||||
method Bool lampGreenW();
|
||||
|
||||
method Bool lampRedPed();
|
||||
method Bool lampAmberPed();
|
||||
method Bool lampGreenPed();
|
||||
endinterface: TL
|
||||
|
||||
typedef enum {
|
||||
AllRed,
|
||||
GreenNS, AmberNS,
|
||||
GreenE, AmberE,
|
||||
GreenW, AmberW,
|
||||
GreenPed, AmberPed} TLstates deriving (Eq, Bits);
|
||||
|
||||
typedef UInt#(5) Time32;
|
||||
typedef UInt#(20) CtrSize;
|
||||
|
||||
(* synthesize *)
|
||||
module sysTL(TL);
|
||||
Time32 allRedDelay = 2;
|
||||
Time32 amberDelay = 4;
|
||||
Time32 nsGreenDelay = 20;
|
||||
Time32 ewGreenDelay = 10;
|
||||
Time32 pedGreenDelay = 10;
|
||||
Time32 pedAmberDelay = 6;
|
||||
|
||||
CtrSize clocks_per_sec = 100;
|
||||
|
||||
Reg#(TLstates) state <- mkReg(AllRed);
|
||||
Reg#(TLstates) next_green <- mkReg(GreenNS);
|
||||
Reg#(Time32) secs <- mkReg(0);
|
||||
Reg#(Bool) ped_button_pushed <- mkReg(False);
|
||||
Reg#(Bool) car_present_N <- mkReg(True);
|
||||
Reg#(Bool) car_present_S <- mkReg(True);
|
||||
Reg#(Bool) car_present_E <- mkReg(True);
|
||||
Reg#(Bool) car_present_W <- mkReg(True);
|
||||
Bool car_present_NS = car_present_N || car_present_S;
|
||||
Reg#(CtrSize) cycle_ctr <- mkReg(0);
|
||||
|
||||
rule dec_cycle_ctr (cycle_ctr != 0);
|
||||
cycle_ctr <= cycle_ctr - 1;
|
||||
endrule
|
||||
|
||||
Rules low_priority_rule = (rules
|
||||
rule inc_sec (cycle_ctr == 0);
|
||||
secs <= secs + 1;
|
||||
cycle_ctr <= clocks_per_sec;
|
||||
endrule endrules);
|
||||
|
||||
function Action next_state(TLstates ns);
|
||||
action
|
||||
state <= ns;
|
||||
secs <= 0;
|
||||
endaction
|
||||
endfunction: next_state
|
||||
|
||||
function TLstates green_seq(TLstates x);
|
||||
case (x)
|
||||
GreenNS: return (GreenE);
|
||||
GreenE: return (GreenW);
|
||||
GreenW: return (GreenNS);
|
||||
endcase
|
||||
endfunction
|
||||
|
||||
function Bool car_present(TLstates x);
|
||||
case (x)
|
||||
GreenNS: return (car_present_NS);
|
||||
GreenE: return (car_present_E);
|
||||
GreenW: return (car_present_W);
|
||||
endcase
|
||||
endfunction
|
||||
|
||||
function Rules make_from_green_rule(TLstates green_state, Time32 delay, Bool car_is_present, TLstates ns);
|
||||
return (rules
|
||||
rule from_green (state == green_state && (secs >= delay || !car_is_present));
|
||||
next_state(ns);
|
||||
endrule endrules);
|
||||
endfunction: make_from_green_rule
|
||||
|
||||
function Rules make_from_amber_rule(TLstates amber_state, TLstates ng);
|
||||
return (rules
|
||||
rule from_amber (state == amber_state && secs >= amberDelay);
|
||||
next_state(AllRed);
|
||||
next_green <= ng;
|
||||
endrule endrules);
|
||||
endfunction: make_from_amber_rule
|
||||
|
||||
Rules hprs[7];
|
||||
|
||||
hprs[1] = make_from_green_rule(GreenNS, nsGreenDelay, car_present_NS, AmberNS);
|
||||
hprs[2] = make_from_amber_rule(AmberNS, GreenE);
|
||||
hprs[3] = make_from_green_rule(GreenE, ewGreenDelay, car_present_E, AmberE);
|
||||
hprs[4] = make_from_amber_rule(AmberE, GreenW);
|
||||
hprs[5] = make_from_green_rule(GreenW, ewGreenDelay, car_present_W, AmberW);
|
||||
hprs[6] = make_from_amber_rule(AmberW, GreenNS);
|
||||
|
||||
hprs[0] = (rules
|
||||
rule fromAllRed (state == AllRed && secs >= allRedDelay);
|
||||
if (ped_button_pushed) action
|
||||
ped_button_pushed <= False;
|
||||
next_state(GreenPed);
|
||||
endaction else if (car_present(next_green))
|
||||
next_state(next_green);
|
||||
else if (car_present(green_seq(next_green)))
|
||||
next_state(green_seq(next_green));
|
||||
else if (car_present(green_seq(green_seq(next_green))))
|
||||
next_state(green_seq(green_seq(next_green)));
|
||||
else
|
||||
noAction;
|
||||
endrule: fromAllRed endrules);
|
||||
|
||||
Rules high_priority_rules = hprs[0];
|
||||
for (Integer i = 1; i<7; i=i+1)
|
||||
high_priority_rules = rJoin(hprs[i], high_priority_rules);
|
||||
|
||||
addRules(preempts(high_priority_rules, low_priority_rule));
|
||||
|
||||
method Action ped_button_push();
|
||||
ped_button_pushed <= True;
|
||||
endmethod: ped_button_push
|
||||
|
||||
method Action set_car_state_N(b) ; car_present_N <= b; endmethod
|
||||
method Action set_car_state_S(b) ; car_present_S <= b; endmethod
|
||||
method Action set_car_state_E(b) ; car_present_E <= b; endmethod
|
||||
method Action set_car_state_W(b) ; car_present_W <= b; endmethod
|
||||
|
||||
method lampRedNS() = (!(state == GreenNS || state == AmberNS));
|
||||
method lampAmberNS() = (state == AmberNS);
|
||||
method lampGreenNS() = (state == GreenNS);
|
||||
method lampRedE() = (!(state == GreenE || state == AmberE));
|
||||
method lampAmberE() = (state == AmberE);
|
||||
method lampGreenE() = (state == GreenE);
|
||||
method lampRedW() = (!(state == GreenW || state == AmberW));
|
||||
method lampAmberW() = (state == AmberW);
|
||||
method lampGreenW() = (state == GreenW);
|
||||
|
||||
method lampRedPed() = (!(state == GreenPed || state == AmberPed));
|
||||
method lampAmberPed() = (state == AmberPed);
|
||||
method lampGreenPed() = (state == GreenPed);
|
||||
|
||||
endmodule: sysTL
|
||||
|
||||
endpackage: TL
|
||||
109
samples/Bluespec/TbTL.bsv
Normal file
109
samples/Bluespec/TbTL.bsv
Normal file
@@ -0,0 +1,109 @@
|
||||
package TbTL;
|
||||
|
||||
import TL::*;
|
||||
|
||||
interface Lamp;
|
||||
method Bool changed;
|
||||
method Action show_offs;
|
||||
method Action show_ons;
|
||||
method Action reset;
|
||||
endinterface
|
||||
|
||||
module mkLamp#(String name, Bool lamp)(Lamp);
|
||||
Reg#(Bool) prev <- mkReg(False);
|
||||
|
||||
method changed = (prev != lamp);
|
||||
|
||||
method Action show_offs;
|
||||
if (prev && !lamp)
|
||||
$write (name + " off, ");
|
||||
endmethod
|
||||
|
||||
method Action show_ons;
|
||||
if (!prev && lamp)
|
||||
$write (name + " on, ");
|
||||
endmethod
|
||||
|
||||
method Action reset;
|
||||
prev <= lamp;
|
||||
endmethod
|
||||
endmodule
|
||||
|
||||
|
||||
(* synthesize *)
|
||||
module mkTest();
|
||||
let dut <- sysTL;
|
||||
|
||||
Reg#(Bit#(16)) ctr <- mkReg(0);
|
||||
|
||||
Reg#(Bool) carN <- mkReg(False);
|
||||
Reg#(Bool) carS <- mkReg(False);
|
||||
Reg#(Bool) carE <- mkReg(False);
|
||||
Reg#(Bool) carW <- mkReg(False);
|
||||
|
||||
Lamp lamps[12];
|
||||
|
||||
lamps[0] <- mkLamp("0: NS red ", dut.lampRedNS);
|
||||
lamps[1] <- mkLamp("1: NS amber", dut.lampAmberNS);
|
||||
lamps[2] <- mkLamp("2: NS green", dut.lampGreenNS);
|
||||
lamps[3] <- mkLamp("3: E red ", dut.lampRedE);
|
||||
lamps[4] <- mkLamp("4: E amber", dut.lampAmberE);
|
||||
lamps[5] <- mkLamp("5: E green", dut.lampGreenE);
|
||||
lamps[6] <- mkLamp("6: W red ", dut.lampRedW);
|
||||
lamps[7] <- mkLamp("7: W amber", dut.lampAmberW);
|
||||
lamps[8] <- mkLamp("8: W green", dut.lampGreenW);
|
||||
|
||||
lamps[9] <- mkLamp("9: Ped red ", dut.lampRedPed);
|
||||
lamps[10] <- mkLamp("10: Ped amber", dut.lampAmberPed);
|
||||
lamps[11] <- mkLamp("11: Ped green", dut.lampGreenPed);
|
||||
|
||||
rule start (ctr == 0);
|
||||
$dumpvars;
|
||||
endrule
|
||||
|
||||
rule detect_cars;
|
||||
dut.set_car_state_N(carN);
|
||||
dut.set_car_state_S(carS);
|
||||
dut.set_car_state_E(carE);
|
||||
dut.set_car_state_W(carW);
|
||||
endrule
|
||||
|
||||
rule go;
|
||||
ctr <= ctr + 1;
|
||||
if (ctr == 5000) carN <= True;
|
||||
if (ctr == 6500) carN <= False;
|
||||
if (ctr == 12_000) dut.ped_button_push;
|
||||
endrule
|
||||
|
||||
rule stop (ctr > 32768);
|
||||
$display("TESTS FINISHED");
|
||||
$finish(0);
|
||||
endrule
|
||||
|
||||
function do_offs(l) = l.show_offs;
|
||||
function do_ons(l) = l.show_ons;
|
||||
function do_reset(l) = l.reset;
|
||||
|
||||
function do_it(f);
|
||||
action
|
||||
for (Integer i=0; i<12; i=i+1)
|
||||
f(lamps[i]);
|
||||
endaction
|
||||
endfunction
|
||||
|
||||
function any_changes();
|
||||
Bool b = False;
|
||||
for (Integer i=0; i<12; i=i+1)
|
||||
b = b || lamps[i].changed;
|
||||
return b;
|
||||
endfunction
|
||||
|
||||
rule show (any_changes());
|
||||
do_it(do_offs);
|
||||
do_it(do_ons);
|
||||
do_it(do_reset);
|
||||
$display("(at time %d)", $time);
|
||||
endrule
|
||||
endmodule
|
||||
|
||||
endpackage
|
||||
61
samples/C/jni_layer.h
Normal file
61
samples/C/jni_layer.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class jni_JniLayer */
|
||||
|
||||
#ifndef _Included_jni_JniLayer
|
||||
#define _Included_jni_JniLayer
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_initialize
|
||||
* Signature: ([II)J
|
||||
*/
|
||||
JNIEXPORT jlong JNICALL Java_jni_JniLayer_jni_1layer_1initialize
|
||||
(JNIEnv *, jobject, jintArray, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_mainloop
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1mainloop
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_set_button
|
||||
* Signature: (JII)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1set_1button
|
||||
(JNIEnv *, jobject, jlong, jint, jint);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_set_analog
|
||||
* Signature: (JIIF)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1set_1analog
|
||||
(JNIEnv *, jobject, jlong, jint, jint, jfloat);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_report_analog_chg
|
||||
* Signature: (JI)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1report_1analog_1chg
|
||||
(JNIEnv *, jobject, jlong, jint);
|
||||
|
||||
/*
|
||||
* Class: jni_JniLayer
|
||||
* Method: jni_layer_kill
|
||||
* Signature: (J)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_jni_JniLayer_jni_1layer_1kill
|
||||
(JNIEnv *, jobject, jlong);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
5
samples/C/syscalldefs.h
Normal file
5
samples/C/syscalldefs.h
Normal file
@@ -0,0 +1,5 @@
|
||||
static const syscalldef syscalldefs[] = {
|
||||
[SYSCALL_OR_NUM(0, SYS_restart_syscall)] = MAKE_UINT16(0, 1),
|
||||
[SYSCALL_OR_NUM(1, SYS_exit)] = MAKE_UINT16(1, 17),
|
||||
[SYSCALL_OR_NUM(2, SYS_fork)] = MAKE_UINT16(0, 22),
|
||||
};
|
||||
5
samples/COBOL/hello_world.cbl
Normal file
5
samples/COBOL/hello_world.cbl
Normal file
@@ -0,0 +1,5 @@
|
||||
program-id. hello.
|
||||
procedure division.
|
||||
display "Hello, World!".
|
||||
stop run.
|
||||
|
||||
6
samples/COBOL/hello_world.ccp
Normal file
6
samples/COBOL/hello_world.ccp
Normal file
@@ -0,0 +1,6 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. hello.
|
||||
PROCEDURE DIVISION.
|
||||
DISPLAY "Hello World, yet again.".
|
||||
STOP RUN.
|
||||
|
||||
6
samples/COBOL/hello_world.cob
Normal file
6
samples/COBOL/hello_world.cob
Normal file
@@ -0,0 +1,6 @@
|
||||
IDENTIFICATION DIVISION.
|
||||
PROGRAM-ID. hello.
|
||||
PROCEDURE DIVISION.
|
||||
DISPLAY "Hello World!".
|
||||
STOP RUN.
|
||||
|
||||
7
samples/COBOL/simple.cpy
Normal file
7
samples/COBOL/simple.cpy
Normal file
@@ -0,0 +1,7 @@
|
||||
01 COBOL-TEST-RECORD.
|
||||
05 COBOL-TEST-USAGES.
|
||||
10 COBOL-4-COMP PIC S9(4) COMP.
|
||||
10 COBOL-8-COMP PIC S9(8) COMP.
|
||||
10 COBOL-9-COMP PIC S9(9) COMP.
|
||||
10 COBOL-4-COMP2 PIC S9(4) COMP-2.
|
||||
10 COBOL-7-COMP2 PIC 9(7) COMP-2.
|
||||
6307
samples/CSS/bootstrap.css
vendored
Normal file
6307
samples/CSS/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
873
samples/CSS/bootstrap.min.css
vendored
Normal file
873
samples/CSS/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
21
samples/Common Lisp/sample.lisp
Normal file
21
samples/Common Lisp/sample.lisp
Normal file
@@ -0,0 +1,21 @@
|
||||
;;;; -*- lisp -*-
|
||||
|
||||
(in-package :foo)
|
||||
|
||||
;;; Header comment.
|
||||
(defvar *foo*)
|
||||
|
||||
(eval-when (:execute :compile-toplevel :load-toplevel)
|
||||
(defun add (x &optional y &key z)
|
||||
(declare (ignore z))
|
||||
;; Inline comment.
|
||||
(+ x (or y 1))))
|
||||
|
||||
#|
|
||||
Multi-line comment.
|
||||
|#
|
||||
|
||||
(defmacro foo (x &body b)
|
||||
(if x
|
||||
`(1+ ,x) ;After-line comment.
|
||||
42))
|
||||
87
samples/DM/example.dm
Normal file
87
samples/DM/example.dm
Normal file
@@ -0,0 +1,87 @@
|
||||
// This is a single line comment.
|
||||
/*
|
||||
This is a multi-line comment
|
||||
*/
|
||||
|
||||
// Pre-processor keywords
|
||||
|
||||
#define PI 3.1415
|
||||
|
||||
#if PI == 4
|
||||
|
||||
#define G 5
|
||||
|
||||
#elif PI == 3
|
||||
|
||||
#define I 6
|
||||
|
||||
#else
|
||||
|
||||
#define K 7
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
var/GlobalCounter = 0
|
||||
var/const/CONST_VARIABLE = 2
|
||||
var/list/MyList = list("anything", 1, new /datum/entity)
|
||||
var/list/EmptyList[99] // creates a list of 99 null entries
|
||||
var/list/NullList = null
|
||||
|
||||
/*
|
||||
Entity Class
|
||||
*/
|
||||
|
||||
/datum/entity
|
||||
var/name = "Entity"
|
||||
var/number = 0
|
||||
|
||||
/datum/entity/proc/myFunction()
|
||||
world.log << "Entity has called myFunction"
|
||||
|
||||
/datum/entity/New()
|
||||
number = GlobalCounter++
|
||||
|
||||
/*
|
||||
Unit Class, Extends from Entity
|
||||
*/
|
||||
|
||||
/datum/entity/unit
|
||||
name = "Unit"
|
||||
|
||||
/datum/entity/unit/New()
|
||||
..() // calls the parent's proc; equal to super() and base() in other languages
|
||||
number = rand(1, 99)
|
||||
|
||||
/datum/entity/unit/myFunction()
|
||||
world.log << "Unit has overriden and called myFunction"
|
||||
|
||||
// Global Function
|
||||
/proc/ReverseList(var/list/input)
|
||||
var/list/output = list()
|
||||
for(var/i = input.len; i >= 1; i--) // IMPORTANT: List Arrays count from 1.
|
||||
output += input[i] // "+= x" is ".Add(x)"
|
||||
return output
|
||||
|
||||
// Bitflags
|
||||
/proc/DoStuff()
|
||||
var/bitflag = 0
|
||||
bitflag |= 8
|
||||
return bitflag
|
||||
|
||||
/proc/DoOtherStuff()
|
||||
var/bitflag = 65535 // 16 bits is the maximum amount
|
||||
bitflag &= ~8
|
||||
return bitflag
|
||||
|
||||
// Logic
|
||||
/proc/DoNothing()
|
||||
var/pi = PI
|
||||
if(pi == 4)
|
||||
world.log << "PI is 4"
|
||||
else if(pi == CONST_VARIABLE)
|
||||
world.log << "PI is [CONST_VARIABLE]!"
|
||||
else
|
||||
world.log << "PI is approximety [pi]"
|
||||
|
||||
#undef PI // Undefine PI
|
||||
122
samples/Erlang/release.script!
Normal file
122
samples/Erlang/release.script!
Normal file
@@ -0,0 +1,122 @@
|
||||
#!/usr/bin/env escript
|
||||
%%!
|
||||
%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*-
|
||||
% ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et:
|
||||
%%%
|
||||
%%%------------------------------------------------------------------------
|
||||
%%% BSD LICENSE
|
||||
%%%
|
||||
%%% Copyright (c) 2013, Michael Truog <mjtruog at gmail dot com>
|
||||
%%% All rights reserved.
|
||||
%%%
|
||||
%%% Redistribution and use in source and binary forms, with or without
|
||||
%%% modification, are permitted provided that the following conditions are met:
|
||||
%%%
|
||||
%%% * Redistributions of source code must retain the above copyright
|
||||
%%% notice, this list of conditions and the following disclaimer.
|
||||
%%% * Redistributions in binary form must reproduce the above copyright
|
||||
%%% notice, this list of conditions and the following disclaimer in
|
||||
%%% the documentation and/or other materials provided with the
|
||||
%%% distribution.
|
||||
%%% * All advertising materials mentioning features or use of this
|
||||
%%% software must display the following acknowledgment:
|
||||
%%% This product includes software developed by Michael Truog
|
||||
%%% * The name of the author may not be used to endorse or promote
|
||||
%%% products derived from this software without specific prior
|
||||
%%% written permission
|
||||
%%%
|
||||
%%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
%%% CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
%%% INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
%%% OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
%%% DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
||||
%%% CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
%%% SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||
%%% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
%%% SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
%%% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
%%% WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
%%% NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
%%% OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
%%% DAMAGE.
|
||||
%%%------------------------------------------------------------------------
|
||||
|
||||
-author('mjtruog [at] gmail (dot) com').
|
||||
|
||||
-mode(compile).
|
||||
|
||||
main(_) ->
|
||||
{ok,
|
||||
[{sys, _} = RelToolConfig,
|
||||
{target_dir, TargetDir},
|
||||
{overlay, OverlayConfig}]} = file:consult("reltool.config"),
|
||||
{ok, Spec} = reltool:get_target_spec([RelToolConfig]),
|
||||
case file:make_dir(TargetDir) of
|
||||
ok ->
|
||||
ok;
|
||||
{error, eexist} ->
|
||||
io:format("release already exists? (~p)~n", [TargetDir]),
|
||||
exit_code(1)
|
||||
end,
|
||||
ok = reltool:eval_target_spec(Spec, code:root_dir(), TargetDir),
|
||||
ok = process_overlay(RelToolConfig, TargetDir, OverlayConfig),
|
||||
exit_code(0).
|
||||
|
||||
shell(Command, Arguments) ->
|
||||
CommandSuffix = " && echo 0 || echo 1",
|
||||
case lists:reverse(os:cmd(lists:flatten(
|
||||
io_lib:format(Command ++ CommandSuffix, Arguments)))) of
|
||||
[_, $0 | _] ->
|
||||
ok;
|
||||
[_, $1 | _] ->
|
||||
io:format("\"~s\" failed!~n", [io_lib:format(Command, Arguments)]),
|
||||
error
|
||||
end.
|
||||
|
||||
boot_rel_vsn({sys, Config} = _RelToolConfig) ->
|
||||
{rel, _Name, Ver, _} = proplists:lookup(rel, Config),
|
||||
Ver.
|
||||
|
||||
%% minimal parsing for handling mustache syntax
|
||||
mustache(Body, Context) ->
|
||||
mustache(Body, "", Context).
|
||||
mustache([], Result, _Context) ->
|
||||
lists:reverse(Result);
|
||||
mustache([${, ${ | KeyStr], Result, Context) ->
|
||||
mustache_key(KeyStr, "", Result, Context);
|
||||
mustache([C | Rest], Result, Context) ->
|
||||
mustache(Rest, [C | Result], Context).
|
||||
mustache_key([$}, $} | Rest], KeyStr, Result, Context) ->
|
||||
Key = erlang:list_to_existing_atom(lists:reverse(KeyStr)),
|
||||
{ok, Value} = dict:find(Key, Context),
|
||||
mustache(Rest, lists:reverse(Value) ++ Result, Context);
|
||||
mustache_key([C | Rest], KeyStr, Result, Context) ->
|
||||
mustache_key(Rest, [C | KeyStr], Result, Context).
|
||||
|
||||
%% support minimal overlay based on rebar overlays
|
||||
process_overlay(RelToolConfig, TargetDir, OverlayConfig) ->
|
||||
BootRelVsn = boot_rel_vsn(RelToolConfig),
|
||||
OverlayVars =
|
||||
dict:from_list([{erts_vsn, "erts-" ++ erlang:system_info(version)},
|
||||
{rel_vsn, BootRelVsn},
|
||||
{target_dir, TargetDir},
|
||||
{hostname, net_adm:localhost()}]),
|
||||
{ok, BaseDir} = file:get_cwd(),
|
||||
execute_overlay(OverlayConfig, OverlayVars, BaseDir, TargetDir).
|
||||
|
||||
execute_overlay([], _Vars, _BaseDir, _TargetDir) ->
|
||||
ok;
|
||||
execute_overlay([{mkdir, Out} | Rest], Vars, BaseDir, TargetDir) ->
|
||||
OutDir = mustache(filename:join(TargetDir, Out), Vars),
|
||||
ok = shell("mkdir -p ~s", [OutDir]),
|
||||
execute_overlay(Rest, Vars, BaseDir, TargetDir);
|
||||
execute_overlay([{copy, In, Out} | Rest], Vars, BaseDir, TargetDir) ->
|
||||
InFile = mustache(filename:join(BaseDir, In), Vars),
|
||||
OutFile = mustache(filename:join(TargetDir, Out), Vars),
|
||||
true = filelib:is_file(InFile),
|
||||
ok = shell("cp -R ~s ~s", [InFile, OutFile]),
|
||||
execute_overlay(Rest, Vars, BaseDir, TargetDir).
|
||||
|
||||
exit_code(ExitCode) ->
|
||||
erlang:halt(ExitCode, [{flush, true}]).
|
||||
|
||||
161
samples/GLSL/SyLens.glsl
Normal file
161
samples/GLSL/SyLens.glsl
Normal file
@@ -0,0 +1,161 @@
|
||||
#version 120
|
||||
|
||||
/*
|
||||
Original Lens Distortion Algorithm from SSontech (Syntheyes)
|
||||
http://www.ssontech.com/content/lensalg.htm
|
||||
|
||||
r2 is radius squared.
|
||||
|
||||
r2 = image_aspect*image_aspect*u*u + v*v
|
||||
f = 1 + r2*(k + kcube*sqrt(r2))
|
||||
u' = f*u
|
||||
v' = f*v
|
||||
|
||||
*/
|
||||
|
||||
// Controls
|
||||
uniform float kCoeff, kCube, uShift, vShift;
|
||||
uniform float chroma_red, chroma_green, chroma_blue;
|
||||
uniform bool apply_disto;
|
||||
|
||||
// Uniform inputs
|
||||
uniform sampler2D input1;
|
||||
uniform float adsk_input1_w, adsk_input1_h, adsk_input1_aspect, adsk_input1_frameratio;
|
||||
uniform float adsk_result_w, adsk_result_h;
|
||||
|
||||
float distortion_f(float r) {
|
||||
float f = 1 + (r*r)*(kCoeff + kCube * r);
|
||||
return f;
|
||||
}
|
||||
|
||||
|
||||
float inverse_f(float r)
|
||||
{
|
||||
|
||||
// Build a lookup table on the radius, as a fixed-size table.
|
||||
// We will use a vec3 since we will store the multipled number in the Z coordinate.
|
||||
// So to recap: x will be the radius, y will be the f(x) distortion, and Z will be x * y;
|
||||
vec3[48] lut;
|
||||
|
||||
// Since out LUT is shader-global check if it's been computed alrite
|
||||
// Flame has no overflow bbox so we can safely max out at the image edge, plus some cushion
|
||||
float max_r = sqrt((adsk_input1_frameratio * adsk_input1_frameratio) + 1) + 0.1;
|
||||
float incr = max_r / 48;
|
||||
float lut_r = 0;
|
||||
float f;
|
||||
for(int i=0; i < 48; i++) {
|
||||
f = distortion_f(lut_r);
|
||||
lut[i] = vec3(lut_r, f, lut_r * f);
|
||||
lut_r += incr;
|
||||
}
|
||||
|
||||
float t;
|
||||
// Now find the nehgbouring elements
|
||||
// only iterate to 46 since we will need
|
||||
// 47 as i+1
|
||||
for(int i=0; i < 47; i++) {
|
||||
if(lut[i].z < r && lut[i+1].z > r) {
|
||||
// BAM! our value is between these two segments
|
||||
// get the T interpolant and mix
|
||||
t = (r - lut[i].z) / (lut[i+1].z - lut[i]).z;
|
||||
return mix(lut[i].y, lut[i+1].y, t );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
float aberrate(float f, float chroma)
|
||||
{
|
||||
return f + (f * chroma);
|
||||
}
|
||||
|
||||
vec3 chromaticize_and_invert(float f)
|
||||
{
|
||||
vec3 rgb_f = vec3(aberrate(f, chroma_red), aberrate(f, chroma_green), aberrate(f, chroma_blue));
|
||||
// We need to DIVIDE by F when we redistort, and x / y == x * (1 / y)
|
||||
if(apply_disto) {
|
||||
rgb_f = 1 / rgb_f;
|
||||
}
|
||||
return rgb_f;
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec2 px, uv;
|
||||
float f = 1;
|
||||
float r = 1;
|
||||
|
||||
px = gl_FragCoord.xy;
|
||||
|
||||
// Make sure we are still centered
|
||||
px.x -= (adsk_result_w - adsk_input1_w) / 2;
|
||||
px.y -= (adsk_result_h - adsk_input1_h) / 2;
|
||||
|
||||
// Push the destination coordinates into the [0..1] range
|
||||
uv.x = px.x / adsk_input1_w;
|
||||
uv.y = px.y / adsk_input1_h;
|
||||
|
||||
|
||||
// And to Syntheyes UV which are [1..-1] on both X and Y
|
||||
uv.x = (uv.x *2 ) - 1;
|
||||
uv.y = (uv.y *2 ) - 1;
|
||||
|
||||
// Add UV shifts
|
||||
uv.x += uShift;
|
||||
uv.y += vShift;
|
||||
|
||||
// Make the X value the aspect value, so that the X coordinates go to [-aspect..aspect]
|
||||
uv.x = uv.x * adsk_input1_frameratio;
|
||||
|
||||
// Compute the radius
|
||||
r = sqrt(uv.x*uv.x + uv.y*uv.y);
|
||||
|
||||
// If we are redistorting, account for the oversize plate in the input, assume that
|
||||
// the input aspect is the same
|
||||
if(apply_disto) {
|
||||
r = r / (float(adsk_input1_w) / float(adsk_result_w));
|
||||
}
|
||||
|
||||
// Apply or remove disto, per channel honoring chromatic aberration
|
||||
if(apply_disto) {
|
||||
f = inverse_f(r);
|
||||
} else {
|
||||
f = distortion_f(r);
|
||||
}
|
||||
|
||||
vec2[3] rgb_uvs = vec2[](uv, uv, uv);
|
||||
|
||||
// Compute distortions per component
|
||||
vec3 rgb_f = chromaticize_and_invert(f);
|
||||
|
||||
// Apply the disto coefficients, per component
|
||||
rgb_uvs[0] = rgb_uvs[0] * rgb_f.rr;
|
||||
rgb_uvs[1] = rgb_uvs[1] * rgb_f.gg;
|
||||
rgb_uvs[2] = rgb_uvs[2] * rgb_f.bb;
|
||||
|
||||
// Convert all the UVs back to the texture space, per color component
|
||||
for(int i=0; i < 3; i++) {
|
||||
uv = rgb_uvs[i];
|
||||
|
||||
// Back from [-aspect..aspect] to [-1..1]
|
||||
uv.x = uv.x / adsk_input1_frameratio;
|
||||
|
||||
// Remove UV shifts
|
||||
uv.x -= uShift;
|
||||
uv.y -= vShift;
|
||||
|
||||
// Back to OGL UV
|
||||
uv.x = (uv.x + 1) / 2;
|
||||
uv.y = (uv.y + 1) / 2;
|
||||
|
||||
rgb_uvs[i] = uv;
|
||||
}
|
||||
|
||||
// Sample the input plate, per component
|
||||
vec4 sampled;
|
||||
sampled.r = texture2D(input1, rgb_uvs[0]).r;
|
||||
sampled.g = texture2D(input1, rgb_uvs[1]).g;
|
||||
sampled.b = texture2D(input1, rgb_uvs[2]).b;
|
||||
|
||||
// and assign to the output
|
||||
gl_FragColor.rgba = vec4(sampled.rgb, 1.0 );
|
||||
}
|
||||
630
samples/GLSL/islandScene.glsl
Normal file
630
samples/GLSL/islandScene.glsl
Normal file
@@ -0,0 +1,630 @@
|
||||
//// High quality (Some browsers may freeze or crash)
|
||||
//#define HIGHQUALITY
|
||||
|
||||
//// Medium quality (Should be fine on all systems, works on Intel HD2000 on Win7 but quite slow)
|
||||
//#define MEDIUMQUALITY
|
||||
|
||||
//// Defaults
|
||||
//#define REFLECTIONS
|
||||
#define SHADOWS
|
||||
//#define GRASS
|
||||
//#define SMALL_WAVES
|
||||
#define RAGGED_LEAVES
|
||||
//#define DETAILED_NOISE
|
||||
//#define LIGHT_AA // 2 sample SSAA
|
||||
//#define HEAVY_AA // 2x2 RG SSAA
|
||||
//#define TONEMAP
|
||||
|
||||
//// Configurations
|
||||
#ifdef MEDIUMQUALITY
|
||||
#define SHADOWS
|
||||
#define SMALL_WAVES
|
||||
#define RAGGED_LEAVES
|
||||
#define TONEMAP
|
||||
#endif
|
||||
|
||||
#ifdef HIGHQUALITY
|
||||
#define REFLECTIONS
|
||||
#define SHADOWS
|
||||
//#define GRASS
|
||||
#define SMALL_WAVES
|
||||
#define RAGGED_LEAVES
|
||||
#define DETAILED_NOISE
|
||||
#define LIGHT_AA
|
||||
#define TONEMAP
|
||||
#endif
|
||||
|
||||
// Constants
|
||||
const float eps = 1e-5;
|
||||
const float PI = 3.14159265359;
|
||||
|
||||
const vec3 sunDir = vec3(0.79057,-0.47434, 0.0);
|
||||
const vec3 skyCol = vec3(0.3, 0.5, 0.8);
|
||||
const vec3 sandCol = vec3(0.9, 0.8, 0.5);
|
||||
const vec3 treeCol = vec3(0.8, 0.65, 0.3);
|
||||
const vec3 grassCol = vec3(0.4, 0.5, 0.18);
|
||||
const vec3 leavesCol = vec3(0.3, 0.6, 0.2);
|
||||
const vec3 leavesPos = vec3(-5.1,13.4, 0.0);
|
||||
|
||||
#ifdef TONEMAP
|
||||
const vec3 sunCol = vec3(1.8, 1.7, 1.6);
|
||||
#else
|
||||
const vec3 sunCol = vec3(0.9, 0.85, 0.8);
|
||||
#endif
|
||||
|
||||
const float exposure = 1.1; // Only used when tonemapping
|
||||
|
||||
// Description : Array and textureless GLSL 2D/3D/4D simplex
|
||||
// noise functions.
|
||||
// Author : Ian McEwan, Ashima Arts.
|
||||
// License : Copyright (C) 2011 Ashima Arts. All rights reserved.
|
||||
// Distributed under the MIT License. See LICENSE file.
|
||||
// https://github.com/ashima/webgl-noise
|
||||
vec3 mod289(vec3 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 mod289(vec4 x) {
|
||||
return x - floor(x * (1.0 / 289.0)) * 289.0;
|
||||
}
|
||||
|
||||
vec4 permute(vec4 x) {
|
||||
return mod289(((x*34.0)+1.0)*x);
|
||||
}
|
||||
|
||||
vec4 taylorInvSqrt(vec4 r) {
|
||||
return 1.79284291400159 - 0.85373472095314 * r;
|
||||
}
|
||||
|
||||
float snoise(vec3 v) {
|
||||
const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;
|
||||
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
|
||||
|
||||
// First corner
|
||||
vec3 i = floor(v + dot(v, C.yyy) );
|
||||
vec3 x0 = v - i + dot(i, C.xxx) ;
|
||||
|
||||
// Other corners
|
||||
vec3 g = step(x0.yzx, x0.xyz);
|
||||
vec3 l = 1.0 - g;
|
||||
vec3 i1 = min( g.xyz, l.zxy );
|
||||
vec3 i2 = max( g.xyz, l.zxy );
|
||||
|
||||
// x0 = x0 - 0.0 + 0.0 * C.xxx;
|
||||
// x1 = x0 - i1 + 1.0 * C.xxx;
|
||||
// x2 = x0 - i2 + 2.0 * C.xxx;
|
||||
// x3 = x0 - 1.0 + 3.0 * C.xxx;
|
||||
vec3 x1 = x0 - i1 + C.xxx;
|
||||
vec3 x2 = x0 - i2 + C.yyy; // 2.0*C.x = 1/3 = C.y
|
||||
vec3 x3 = x0 - D.yyy; // -1.0+3.0*C.x = -0.5 = -D.y
|
||||
|
||||
// Permutations
|
||||
i = mod289(i);
|
||||
vec4 p = permute( permute( permute(
|
||||
i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
|
||||
+ i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
|
||||
+ i.x + vec4(0.0, i1.x, i2.x, 1.0 ));
|
||||
|
||||
// Gradients: 7x7 points over a square, mapped onto an octahedron.
|
||||
// The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294)
|
||||
float n_ = 0.142857142857; // 1.0/7.0
|
||||
vec3 ns = n_ * D.wyz - D.xzx;
|
||||
|
||||
vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)
|
||||
|
||||
vec4 x_ = floor(j * ns.z);
|
||||
vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)
|
||||
|
||||
vec4 x = x_ *ns.x + ns.yyyy;
|
||||
vec4 y = y_ *ns.x + ns.yyyy;
|
||||
vec4 h = 1.0 - abs(x) - abs(y);
|
||||
|
||||
vec4 b0 = vec4( x.xy, y.xy );
|
||||
vec4 b1 = vec4( x.zw, y.zw );
|
||||
|
||||
//vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0;
|
||||
//vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0;
|
||||
vec4 s0 = floor(b0)*2.0 + 1.0;
|
||||
vec4 s1 = floor(b1)*2.0 + 1.0;
|
||||
vec4 sh = -step(h, vec4(0.0));
|
||||
|
||||
vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;
|
||||
vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;
|
||||
|
||||
vec3 p0 = vec3(a0.xy,h.x);
|
||||
vec3 p1 = vec3(a0.zw,h.y);
|
||||
vec3 p2 = vec3(a1.xy,h.z);
|
||||
vec3 p3 = vec3(a1.zw,h.w);
|
||||
|
||||
//Normalise gradients
|
||||
vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));
|
||||
p0 *= norm.x;
|
||||
p1 *= norm.y;
|
||||
p2 *= norm.z;
|
||||
p3 *= norm.w;
|
||||
|
||||
// Mix final noise value
|
||||
vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);
|
||||
m = m * m;
|
||||
return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),
|
||||
dot(p2,x2), dot(p3,x3) ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Main
|
||||
float fbm(vec3 p)
|
||||
{
|
||||
float final = snoise(p);
|
||||
p *= 1.94; final += snoise(p) * 0.5;
|
||||
#ifdef DETAILED_NOISE
|
||||
p *= 3.75; final += snoise(p) * 0.25;
|
||||
return final / 1.75;
|
||||
#else
|
||||
return final / 1.5;
|
||||
#endif
|
||||
}
|
||||
|
||||
float waterHeight(vec3 p)
|
||||
{
|
||||
float d = length(p.xz);
|
||||
float h = sin(d * 1.5 + iGlobalTime * 3.0) * 12.0 / d; // Island waves
|
||||
#ifdef SMALL_WAVES
|
||||
h += fbm(p*0.5); // Other waves
|
||||
#endif
|
||||
return h;
|
||||
}
|
||||
|
||||
vec3 bump(vec3 pos, vec3 rayDir)
|
||||
{
|
||||
float s = 2.0;
|
||||
|
||||
// Fade out waves to reduce aliasing
|
||||
float dist = dot(pos, rayDir);
|
||||
s *= dist < 2.0 ? 1.0 : 1.4142 / sqrt(dist);
|
||||
|
||||
// Calculate normal from heightmap
|
||||
vec2 e = vec2(1e-2, 0.0);
|
||||
vec3 p = vec3(pos.x, iGlobalTime*0.5, pos.z)*0.7;
|
||||
float m = waterHeight(p)*s;
|
||||
return normalize(vec3(
|
||||
waterHeight(p+e.xyy)*s-m,
|
||||
1.0,
|
||||
waterHeight(p+e.yxy)*s-m
|
||||
));
|
||||
}
|
||||
|
||||
// Ray intersections
|
||||
vec4 intersectSphere(vec3 rpos, vec3 rdir, vec3 pos, float rad)
|
||||
{
|
||||
vec3 op = pos - rpos;
|
||||
float b = dot(op, rdir);
|
||||
float det = b*b - dot(op, op) + rad*rad;
|
||||
|
||||
if (det > 0.0)
|
||||
{
|
||||
det = sqrt(det);
|
||||
float t = b - det;
|
||||
if (t > eps)
|
||||
return vec4(-normalize(rpos+rdir*t-pos), t);
|
||||
}
|
||||
|
||||
return vec4(0.0);
|
||||
}
|
||||
|
||||
vec4 intersectCylinder(vec3 rpos, vec3 rdir, vec3 pos, float rad)
|
||||
{
|
||||
vec3 op = pos - rpos;
|
||||
vec2 rdir2 = normalize(rdir.yz);
|
||||
float b = dot(op.yz, rdir2);
|
||||
float det = b*b - dot(op.yz, op.yz) + rad*rad;
|
||||
|
||||
if (det > 0.0)
|
||||
{
|
||||
det = sqrt(det);
|
||||
float t = b - det;
|
||||
if (t > eps)
|
||||
return vec4(-normalize(rpos.yz+rdir2*t-pos.yz), 0.0, t);
|
||||
t = b + det;
|
||||
if (t > eps)
|
||||
return vec4(-normalize(rpos.yz+rdir2*t-pos.yz), 0.0, t);
|
||||
}
|
||||
|
||||
return vec4(0.0);
|
||||
}
|
||||
|
||||
vec4 intersectPlane(vec3 rayPos, vec3 rayDir, vec3 n, float d)
|
||||
{
|
||||
float t = -(dot(rayPos, n) + d) / dot(rayDir, n);
|
||||
return vec4(n * sign(dot(rayDir, n)), t);
|
||||
}
|
||||
|
||||
// Helper functions
|
||||
vec3 rotate(vec3 p, float theta)
|
||||
{
|
||||
float c = cos(theta), s = sin(theta);
|
||||
return vec3(p.x * c + p.z * s, p.y,
|
||||
p.z * c - p.x * s);
|
||||
}
|
||||
|
||||
float impulse(float k, float x) // by iq
|
||||
{
|
||||
float h = k*x;
|
||||
return h * exp(1.0 - h);
|
||||
}
|
||||
|
||||
// Raymarched parts of scene
|
||||
float grass(vec3 pos)
|
||||
{
|
||||
float h = length(pos - vec3(0.0, -7.0, 0.0)) - 8.0;
|
||||
|
||||
if (h > 2.0) return h; // Optimization (Avoid noise if too far away)
|
||||
|
||||
return h + snoise(pos * 3.0) * 0.1 + pos.y * 0.9;
|
||||
}
|
||||
|
||||
float tree(vec3 pos)
|
||||
{
|
||||
pos.y -= 0.5;
|
||||
float s = sin(pos.y*0.03);
|
||||
float c = cos(pos.y*0.03);
|
||||
mat2 m = mat2(c, -s, s, c);
|
||||
vec3 p = vec3(m*pos.xy, pos.z);
|
||||
|
||||
float width = 1.0 - pos.y * 0.02 - clamp(sin(pos.y * 8.0) * 0.1, 0.05, 0.1);
|
||||
|
||||
return max(length(p.xz) - width, pos.y - 12.5);
|
||||
}
|
||||
|
||||
vec2 scene(vec3 pos)
|
||||
{
|
||||
float vtree = tree(pos);
|
||||
#ifdef GRASS
|
||||
float vgrass = grass(pos);
|
||||
float v = min(vtree, vgrass);
|
||||
#else
|
||||
float v = vtree;
|
||||
#endif
|
||||
return vec2(v, v == vtree ? 2.0 : 1.0);
|
||||
}
|
||||
|
||||
vec3 normal(vec3 pos)
|
||||
{
|
||||
vec2 eps = vec2(1e-3, 0.0);
|
||||
float h = scene(pos).x;
|
||||
return normalize(vec3(
|
||||
scene(pos-eps.xyy).x-h,
|
||||
scene(pos-eps.yxy).x-h,
|
||||
scene(pos-eps.yyx).x-h
|
||||
));
|
||||
}
|
||||
|
||||
float plantsShadow(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
// Soft shadow taken from iq
|
||||
float k = 6.0;
|
||||
float t = 0.0;
|
||||
float s = 1.0;
|
||||
for (int i = 0; i < 30; i++)
|
||||
{
|
||||
vec3 pos = rayPos+rayDir*t;
|
||||
vec2 res = scene(pos);
|
||||
if (res.x < 0.001) return 0.0;
|
||||
s = min(s, k*res.x/t);
|
||||
t += max(res.x, 0.01);
|
||||
}
|
||||
|
||||
return s*s*(3.0 - 2.0*s);
|
||||
}
|
||||
|
||||
// Ray-traced parts of scene
|
||||
vec4 intersectWater(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
float h = sin(20.5 + iGlobalTime * 2.0) * 0.03;
|
||||
float t = -(rayPos.y + 2.5 + h) / rayDir.y;
|
||||
return vec4(0.0, 1.0, 0.0, t);
|
||||
}
|
||||
|
||||
vec4 intersectSand(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
return intersectSphere(rayPos, rayDir, vec3(0.0,-24.1,0.0), 24.1);
|
||||
}
|
||||
|
||||
vec4 intersectTreasure(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
return vec4(0.0);
|
||||
}
|
||||
|
||||
vec4 intersectLeaf(vec3 rayPos, vec3 rayDir, float openAmount)
|
||||
{
|
||||
vec3 dir = normalize(vec3(0.0, 1.0, openAmount));
|
||||
float offset = 0.0;
|
||||
|
||||
vec4 res = intersectPlane(rayPos, rayDir, dir, 0.0);
|
||||
vec3 pos = rayPos+rayDir*res.w;
|
||||
#ifdef RAGGED_LEAVES
|
||||
offset = snoise(pos*0.8) * 0.3;
|
||||
#endif
|
||||
if (pos.y > 0.0 || length(pos * vec3(0.9, 2.0, 1.0)) > 4.0 - offset) res.w = 0.0;
|
||||
|
||||
vec4 res2 = intersectPlane(rayPos, rayDir, vec3(dir.xy, -dir.z), 0.0);
|
||||
pos = rayPos+rayDir*res2.w;
|
||||
#ifdef RAGGED_LEAVES
|
||||
offset = snoise(pos*0.8) * 0.3;
|
||||
#endif
|
||||
if (pos.y > 0.0 || length(pos * vec3(0.9, 2.0, 1.0)) > 4.0 - offset) res2.w = 0.0;
|
||||
|
||||
if (res2.w > 0.0 && res2.w < res.w || res.w <= 0.0)
|
||||
res = res2;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
vec4 leaves(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
float t = 1e20;
|
||||
vec3 n = vec3(0.0);
|
||||
|
||||
rayPos -= leavesPos;
|
||||
|
||||
float sway = impulse(15.0, fract(iGlobalTime / PI * 0.125));
|
||||
float upDownSway = sway * -sin(iGlobalTime) * 0.06;
|
||||
float openAmount = sway * max(-cos(iGlobalTime) * 0.4, 0.0);
|
||||
|
||||
float angleOffset = -0.1;
|
||||
for (float k = 0.0; k < 6.2; k += 0.75)
|
||||
{
|
||||
// Left-right
|
||||
float alpha = k + (k - PI) * sway * 0.015;
|
||||
vec3 p = rotate(rayPos, alpha);
|
||||
vec3 d = rotate(rayDir, alpha);
|
||||
|
||||
// Up-down
|
||||
angleOffset *= -1.0;
|
||||
float theta = -0.4 +
|
||||
angleOffset +
|
||||
cos(k) * 0.35 +
|
||||
upDownSway +
|
||||
sin(iGlobalTime+k*10.0) * 0.03 * (sway + 0.2);
|
||||
|
||||
p = rotate(p.xzy, theta).xzy;
|
||||
d = rotate(d.xzy, theta).xzy;
|
||||
|
||||
// Shift
|
||||
p -= vec3(5.4, 0.0, 0.0);
|
||||
|
||||
// Intersect individual leaf
|
||||
vec4 res = intersectLeaf(p, d, 1.0+openAmount);
|
||||
if (res.w > 0.0 && res.w < t)
|
||||
{
|
||||
t = res.w;
|
||||
n = res.xyz;
|
||||
}
|
||||
}
|
||||
|
||||
return vec4(n, t);
|
||||
}
|
||||
|
||||
// Lighting
|
||||
float shadow(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
float s = 1.0;
|
||||
|
||||
// Intersect sand
|
||||
//vec4 resSand = intersectSand(rayPos, rayDir);
|
||||
//if (resSand.w > 0.0) return 0.0;
|
||||
|
||||
// Intersect plants
|
||||
s = min(s, plantsShadow(rayPos, rayDir));
|
||||
if (s < 0.0001) return 0.0;
|
||||
|
||||
// Intersect leaves
|
||||
vec4 resLeaves = leaves(rayPos, rayDir);
|
||||
if (resLeaves.w > 0.0 && resLeaves.w < 1e7) return 0.0;
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
vec3 light(vec3 p, vec3 n)
|
||||
{
|
||||
float s = 1.0;
|
||||
|
||||
#ifdef SHADOWS
|
||||
s = shadow(p-sunDir*0.01, -sunDir);
|
||||
#endif
|
||||
|
||||
vec3 col = sunCol * min(max(dot(n, sunDir), 0.0), s);
|
||||
col += skyCol * (-n.y * 0.5 + 0.5) * 0.3;
|
||||
return col;
|
||||
}
|
||||
|
||||
vec3 lightLeaves(vec3 p, vec3 n)
|
||||
{
|
||||
float s = 1.0;
|
||||
|
||||
#ifdef SHADOWS
|
||||
s = shadow(p-sunDir*0.01, -sunDir);
|
||||
#endif
|
||||
|
||||
float ao = min(length(p - leavesPos) * 0.1, 1.0);
|
||||
|
||||
float ns = dot(n, sunDir);
|
||||
float d = sqrt(max(ns, 0.0));
|
||||
vec3 col = sunCol * min(d, s);
|
||||
col += sunCol * max(-ns, 0.0) * vec3(0.3, 0.3, 0.1) * ao;
|
||||
col += skyCol * (-n.y * 0.5 + 0.5) * 0.3 * ao;
|
||||
return col;
|
||||
}
|
||||
|
||||
vec3 sky(vec3 n)
|
||||
{
|
||||
return skyCol * (1.0 - n.y * 0.8);
|
||||
}
|
||||
|
||||
// Ray-marching
|
||||
vec4 plants(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
float t = 0.0;
|
||||
|
||||
for (int i = 0; i < 40; i++)
|
||||
{
|
||||
vec3 pos = rayPos+rayDir*t;
|
||||
vec2 res = scene(pos);
|
||||
float h = res.x;
|
||||
|
||||
if (h < 0.001)
|
||||
{
|
||||
vec3 col = res.y == 2.0 ? treeCol : grassCol;
|
||||
float uvFact = res.y == 2.0 ? 1.0 : 10.0;
|
||||
|
||||
vec3 n = normal(pos);
|
||||
vec2 uv = vec2(n.x, pos.y * 0.5) * 0.2 * uvFact;
|
||||
vec3 tex = texture2D(iChannel0, uv).rgb * 0.6 + 0.4;
|
||||
float ao = min(length(pos - leavesPos) * 0.1, 1.0);
|
||||
return vec4(col * light(pos, n) * ao * tex, t);
|
||||
}
|
||||
|
||||
t += h;
|
||||
}
|
||||
|
||||
return vec4(sky(rayDir), 1e8);
|
||||
}
|
||||
|
||||
// Final combination
|
||||
vec3 traceReflection(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
vec3 col = vec3(0.0);
|
||||
float t = 1e20;
|
||||
|
||||
// Intersect plants
|
||||
vec4 resPlants = plants(rayPos, rayDir);
|
||||
if (resPlants.w > 0.0 && resPlants.w < t)
|
||||
{
|
||||
t = resPlants.w;
|
||||
col = resPlants.xyz;
|
||||
}
|
||||
|
||||
// Intersect leaves
|
||||
vec4 resLeaves = leaves(rayPos, rayDir);
|
||||
if (resLeaves.w > 0.0 && resLeaves.w < t)
|
||||
{
|
||||
vec3 pos = rayPos + rayDir * resLeaves.w;
|
||||
vec2 uv = (pos.xz - leavesPos.xz) * 0.3;
|
||||
float tex = texture2D(iChannel0, uv).r * 0.6 + 0.5;
|
||||
|
||||
t = resLeaves.w;
|
||||
col = leavesCol * lightLeaves(pos, resLeaves.xyz) * tex;
|
||||
}
|
||||
|
||||
if (t > 1e7) return sky(rayDir);
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
vec3 trace(vec3 rayPos, vec3 rayDir)
|
||||
{
|
||||
vec3 col = vec3(0.0);
|
||||
float t = 1e20;
|
||||
|
||||
// Intersect sand
|
||||
vec4 resSand = intersectSand(rayPos, rayDir);
|
||||
if (resSand.w > 0.0)
|
||||
{
|
||||
vec3 pos = rayPos + rayDir * resSand.w;
|
||||
t = resSand.w;
|
||||
|
||||
col = sandCol * light(pos, resSand.xyz);
|
||||
}
|
||||
|
||||
// Intersect treasure chest
|
||||
vec4 resTreasure = intersectTreasure(rayPos, rayDir);
|
||||
if (resTreasure.w > 0.0 && resTreasure.w < t)
|
||||
{
|
||||
vec3 pos = rayPos + rayDir * resTreasure.w;
|
||||
t = resTreasure.w;
|
||||
col = leavesCol * light(pos, resTreasure.xyz);
|
||||
}
|
||||
|
||||
// Intersect leaves
|
||||
vec4 resLeaves = leaves(rayPos, rayDir);
|
||||
if (resLeaves.w > 0.0 && resLeaves.w < t)
|
||||
{
|
||||
vec3 pos = rayPos + rayDir * resLeaves.w;
|
||||
vec2 uv = (pos.xz - leavesPos.xz) * 0.3;
|
||||
float tex = texture2D(iChannel0, uv).r * 0.6 + 0.5;
|
||||
|
||||
t = resLeaves.w;
|
||||
col = leavesCol * lightLeaves(pos, resLeaves.xyz) * tex;
|
||||
}
|
||||
|
||||
// Intersect plants
|
||||
vec4 resPlants = plants(rayPos, rayDir);
|
||||
if (resPlants.w > 0.0 && resPlants.w < t)
|
||||
{
|
||||
t = resPlants.w;
|
||||
col = resPlants.xyz;
|
||||
}
|
||||
|
||||
// Intersect water
|
||||
vec4 resWater = intersectWater(rayPos, rayDir);
|
||||
if (resWater.w > 0.0 && resWater.w < t)
|
||||
{
|
||||
vec3 pos = rayPos + rayDir * resWater.w;
|
||||
float dist = t - resWater.w;
|
||||
vec3 n = bump(pos, rayDir);
|
||||
|
||||
float ct = -min(dot(n,rayDir), 0.0);
|
||||
float fresnel = 0.9 - 0.9 * pow(1.0 - ct, 5.0);
|
||||
|
||||
vec3 trans = col * exp(-dist * vec3(1.0, 0.7, 0.4) * 3.0);
|
||||
vec3 reflDir = normalize(reflect(rayDir, n));
|
||||
vec3 refl = sky(reflDir);
|
||||
|
||||
#ifdef REFLECTIONS
|
||||
if (dot(pos, rayDir) < -2.0)
|
||||
refl = traceReflection(pos, reflDir).rgb;
|
||||
#endif
|
||||
|
||||
t = resWater.t;
|
||||
col = mix(refl, trans, fresnel);
|
||||
}
|
||||
|
||||
if (t > 1e7) return sky(rayDir);
|
||||
|
||||
return col;
|
||||
}
|
||||
|
||||
// Ray-generation
|
||||
vec3 camera(vec2 px)
|
||||
{
|
||||
vec2 rd = (px / iResolution.yy - vec2(iResolution.x/iResolution.y*0.5-0.5, 0.0)) * 2.0 - 1.0;
|
||||
float t = sin(iGlobalTime * 0.1) * 0.2;
|
||||
vec3 rayDir = normalize(vec3(rd.x, rd.y, 1.0));
|
||||
vec3 rayPos = vec3(0.0, 3.0, -18.0);
|
||||
return trace(rayPos, rayDir);
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
#ifdef HEAVY_AA
|
||||
vec3 col = camera(gl_FragCoord.xy+vec2(0.0,0.5))*0.25;
|
||||
col += camera(gl_FragCoord.xy+vec2(0.25,0.0))*0.25;
|
||||
col += camera(gl_FragCoord.xy+vec2(0.5,0.75))*0.25;
|
||||
col += camera(gl_FragCoord.xy+vec2(0.75,0.25))*0.25;
|
||||
#else
|
||||
vec3 col = camera(gl_FragCoord.xy);
|
||||
#ifdef LIGHT_AA
|
||||
col = col * 0.5 + camera(gl_FragCoord.xy+vec2(0.5,0.5))*0.5;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef TONEMAP
|
||||
// Optimized Haarm-Peter Duiker’s curve
|
||||
vec3 x = max(vec3(0.0),col*exposure-0.004);
|
||||
col = (x*(6.2*x+.5))/(x*(6.2*x+1.7)+0.06);
|
||||
#else
|
||||
col = pow(col, vec3(0.4545));
|
||||
#endif
|
||||
|
||||
gl_FragColor = vec4(col, 1.0);
|
||||
}
|
||||
68
samples/GLSL/shader.fp
Normal file
68
samples/GLSL/shader.fp
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright (C) 2010 Josh A. Beam
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
||||
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
* WHETHER IN CONTACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
const int NUM_LIGHTS = 3;
|
||||
const vec3 AMBIENT = vec3(0.1, 0.1, 0.1);
|
||||
const float MAX_DIST = 2.5;
|
||||
const float MAX_DIST_SQUARED = MAX_DIST * MAX_DIST;
|
||||
|
||||
uniform vec3 lightColor[NUM_LIGHTS];
|
||||
|
||||
varying vec3 fragmentNormal;
|
||||
varying vec3 cameraVector;
|
||||
varying vec3 lightVector[NUM_LIGHTS];
|
||||
|
||||
void
|
||||
main()
|
||||
{
|
||||
// initialize diffuse/specular lighting
|
||||
vec3 diffuse = vec3(0.0, 0.0, 0.0);
|
||||
vec3 specular = vec3(0.0, 0.0, 0.0);
|
||||
|
||||
// normalize the fragment normal and camera direction
|
||||
vec3 normal = normalize(fragmentNormal);
|
||||
vec3 cameraDir = normalize(cameraVector);
|
||||
|
||||
// loop through each light
|
||||
for(int i = 0; i < NUM_LIGHTS; ++i) {
|
||||
// calculate distance between 0.0 and 1.0
|
||||
float dist = min(dot(lightVector[i], lightVector[i]), MAX_DIST_SQUARED) / MAX_DIST_SQUARED;
|
||||
float distFactor = 1.0 - dist;
|
||||
|
||||
// diffuse
|
||||
vec3 lightDir = normalize(lightVector[i]);
|
||||
float diffuseDot = dot(normal, lightDir);
|
||||
diffuse += lightColor[i] * clamp(diffuseDot, 0.0, 1.0) * distFactor;
|
||||
|
||||
// specular
|
||||
vec3 halfAngle = normalize(cameraDir + lightDir);
|
||||
vec3 specularColor = min(lightColor[i] + 0.5, 1.0);
|
||||
float specularDot = dot(normal, halfAngle);
|
||||
specular += specularColor * pow(clamp(specularDot, 0.0, 1.0), 16.0) * distFactor;
|
||||
}
|
||||
|
||||
vec4 sample = vec4(1.0, 1.0, 1.0, 1.0);
|
||||
gl_FragColor = vec4(clamp(sample.rgb * (diffuse + AMBIENT) + specular, 0.0, 1.0), sample.a);
|
||||
}
|
||||
3
samples/Jade/hello.jade
Normal file
3
samples/Jade/hello.jade
Normal file
@@ -0,0 +1,3 @@
|
||||
p.
|
||||
Hello,
|
||||
World!
|
||||
111
samples/LFE/church.lfe
Normal file
111
samples/LFE/church.lfe
Normal file
@@ -0,0 +1,111 @@
|
||||
;; Copyright (c) 2013 Duncan McGreggor <oubiwann@cogitat.io>
|
||||
;;
|
||||
;; Licensed under the Apache License, Version 2.0 (the "License");
|
||||
;; you may not use this file except in compliance with the License.
|
||||
;; You may obtain a copy of the License at
|
||||
;;
|
||||
;; http://www.apache.org/licenses/LICENSE-2.0
|
||||
;;
|
||||
;; Unless required by applicable law or agreed to in writing, software
|
||||
;; distributed under the License is distributed on an "AS IS" BASIS,
|
||||
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
;; See the License for the specific language governing permissions and
|
||||
;; limitations under the License.
|
||||
|
||||
;; File : church.lfe
|
||||
;; Author : Duncan McGreggor
|
||||
;; Purpose : Demonstrating church numerals from the lambda calculus
|
||||
|
||||
;; The code below was used to create the section of the user guide here:
|
||||
;; http://lfe.github.io/user-guide/recursion/5.html
|
||||
;;
|
||||
;; Here is some example usage:
|
||||
;;
|
||||
;; > (slurp '"church.lfe")
|
||||
;; #(ok church)
|
||||
;; > (zero)
|
||||
;; #Fun<lfe_eval.10.53503600>
|
||||
;; > (church->int1 (zero))
|
||||
;; 0
|
||||
;; > (church->int1 (three))
|
||||
;; 3
|
||||
;; > (church->int1 (five))
|
||||
;; 5
|
||||
;; > (church->int2 #'five/0)
|
||||
;; 5
|
||||
;; > (church->int2 (lambda () (get-church 25)))
|
||||
;; 25
|
||||
|
||||
(defmodule church
|
||||
(export all))
|
||||
|
||||
(defun zero ()
|
||||
(lambda (s)
|
||||
(lambda (x) x)))
|
||||
|
||||
(defun one ()
|
||||
(lambda (s)
|
||||
(lambda (x)
|
||||
(funcall s x))))
|
||||
|
||||
(defun two ()
|
||||
(lambda (s)
|
||||
(lambda (x)
|
||||
(funcall s
|
||||
(funcall s x)))))
|
||||
|
||||
(defun three ()
|
||||
(lambda (s)
|
||||
(lambda (x)
|
||||
(funcall s
|
||||
(funcall s
|
||||
(funcall s x))))))
|
||||
|
||||
(defun four ()
|
||||
(lambda (s)
|
||||
(lambda (x)
|
||||
(funcall s
|
||||
(funcall s
|
||||
(funcall s
|
||||
(funcall s x)))))))
|
||||
|
||||
(defun five ()
|
||||
(get-church 5))
|
||||
|
||||
(defun int-successor (n)
|
||||
(+ n 1))
|
||||
|
||||
(defun church->int1 (church-numeral)
|
||||
"
|
||||
Converts a called church numeral to an integer, e.g.:
|
||||
> (church->int1 (five))
|
||||
"
|
||||
(funcall
|
||||
(funcall church-numeral #'int-successor/1) 0))
|
||||
|
||||
(defun church->int2 (church-numeral)
|
||||
"
|
||||
Converts a non-called church numeral to an integer, e.g.:
|
||||
> (church->int2 #'five/0)
|
||||
"
|
||||
(funcall
|
||||
(funcall
|
||||
(funcall church-numeral) #'int-successor/1) 0))
|
||||
|
||||
(defun church-successor (church-numeral)
|
||||
(lambda (s)
|
||||
(lambda (x)
|
||||
(funcall s
|
||||
(funcall
|
||||
(funcall church-numeral s) x)))))
|
||||
|
||||
(defun get-church (church-numeral count limit)
|
||||
(cond ((== count limit) church-numeral)
|
||||
((/= count limit)
|
||||
(get-church
|
||||
(church-successor church-numeral)
|
||||
(+ 1 count)
|
||||
limit))))
|
||||
|
||||
(defun get-church (integer)
|
||||
(get-church (zero) 0 integer))
|
||||
104
samples/LFE/gps1.lfe
Normal file
104
samples/LFE/gps1.lfe
Normal file
@@ -0,0 +1,104 @@
|
||||
;;; -*- Mode: LFE; -*-
|
||||
;;; Code from Paradigms of Artificial Intelligence Programming
|
||||
;;; Copyright (c) 1991 Peter Norvig
|
||||
|
||||
;;;; File gps1.lisp: First version of GPS (General Problem Solver)
|
||||
|
||||
;;;; Converted to LFE by Robert Virding
|
||||
|
||||
;; Define macros for global variable access. This is a hack and very naughty!
|
||||
(defsyntax defvar
|
||||
([name val] (let ((v val)) (put 'name v) v)))
|
||||
|
||||
(defsyntax setvar
|
||||
([name val] (let ((v val)) (put 'name v) v)))
|
||||
|
||||
(defsyntax getvar
|
||||
([name] (get 'name)))
|
||||
|
||||
;; Module definition.
|
||||
|
||||
(defmodule gps1
|
||||
(export (gps 2) (gps 3) (school-ops 0))
|
||||
(import (from lists (member 2) (all 2) (any 2))
|
||||
;; Rename lists functions to be more CL like.
|
||||
(rename lists ((all 2) every) ((any 2) some) ((filter 2) find-all))))
|
||||
|
||||
;; An operation.
|
||||
(defrecord op
|
||||
action preconds add-list del-list)
|
||||
|
||||
;; General Problem Solver: achieve all goals using *ops*.
|
||||
(defun gps (state goals ops)
|
||||
;; Set global variables
|
||||
(defvar *state* state) ;The current state: a list of conditions.
|
||||
(defvar *ops* ops) ;A list of available operators.
|
||||
(if (every (fun achieve 1) goals) 'solved))
|
||||
|
||||
(defun gps (state goals)
|
||||
;; Set global variables, but use existing *ops*
|
||||
(defvar *state* state) ;The current state: a list of conditions.
|
||||
(if (every (fun achieve 1) goals) 'solved))
|
||||
|
||||
;; A goal is achieved if it already holds or if there is an
|
||||
;; appropriate op for it that is applicable."
|
||||
(defun achieve (goal)
|
||||
(orelse (member goal (getvar *state*))
|
||||
(some (fun apply-op 1)
|
||||
(find-all (lambda (op) (appropriate-p goal op))
|
||||
(getvar *ops*)))))
|
||||
|
||||
;; An op is appropriate to a goal if it is in its add list.
|
||||
(defun appropriate-p (goal op)
|
||||
(member goal (op-add-list op)))
|
||||
|
||||
;; Print a message and update *state* if op is applicable.
|
||||
(defun apply-op (op)
|
||||
(if (every (fun achieve 1) (op-preconds op))
|
||||
(progn
|
||||
(: io fwrite '"executing ~p\n" (list (op-action op)))
|
||||
(setvar *state* (set-difference (getvar *state*) (op-del-list op)))
|
||||
(setvar *state* (union (getvar *state*) (op-add-list op)))
|
||||
'true)))
|
||||
|
||||
;; Define the set functions to work on list, a listsets module really.
|
||||
(defun set-difference
|
||||
([(cons e es) s2]
|
||||
(if (member e s2)
|
||||
(set-difference es s2)
|
||||
(cons e (set-difference es s2))))
|
||||
([() s2] ()))
|
||||
|
||||
(defun union
|
||||
([(cons e es) s2]
|
||||
(if (member e s2) (union es s2) (cons e (union es s2))))
|
||||
([() s2] ()))
|
||||
|
||||
;;; ==============================
|
||||
|
||||
(defun school-ops ()
|
||||
(list
|
||||
(make-op action 'drive-son-to-school
|
||||
preconds '(son-at-home car-works)
|
||||
add-list '(son-at-school)
|
||||
del-list '(son-at-home))
|
||||
(make-op action 'shop-installs-battery
|
||||
preconds '(car-needs-battery shop-knows-problem shop-has-money)
|
||||
add-list '(car-works)
|
||||
del-list ())
|
||||
(make-op action 'tell-shop-problem
|
||||
preconds '(in-communication-with-shop)
|
||||
add-list '(shop-knows-problem)
|
||||
del-list ())
|
||||
(make-op action 'telephone-shop
|
||||
preconds '(know-phone-number)
|
||||
add-list '(in-communication-with-shop)
|
||||
del-list ())
|
||||
(make-op action 'look-up-number
|
||||
preconds '(have-phone-book)
|
||||
add-list '(know-phone-number)
|
||||
del-list ())
|
||||
(make-op action 'give-shop-money
|
||||
preconds '(have-money)
|
||||
add-list '(shop-has-money)
|
||||
del-list '(have-money))))
|
||||
83
samples/LFE/mnesia_demo.lfe
Normal file
83
samples/LFE/mnesia_demo.lfe
Normal file
@@ -0,0 +1,83 @@
|
||||
;; Copyright (c) 2008-2013 Robert Virding
|
||||
;;
|
||||
;; Licensed under the Apache License, Version 2.0 (the "License");
|
||||
;; you may not use this file except in compliance with the License.
|
||||
;; You may obtain a copy of the License at
|
||||
;;
|
||||
;; http://www.apache.org/licenses/LICENSE-2.0
|
||||
;;
|
||||
;; Unless required by applicable law or agreed to in writing, software
|
||||
;; distributed under the License is distributed on an "AS IS" BASIS,
|
||||
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
;; See the License for the specific language governing permissions and
|
||||
;; limitations under the License.
|
||||
|
||||
;; File : mnesia_demo.lfe
|
||||
;; Author : Robert Virding
|
||||
;; Purpose : A simple Mnesia demo file for LFE.
|
||||
|
||||
;; This file contains a simple demo of using LFE to access Mnesia
|
||||
;; tables. It shows how to use the emp-XXXX macro (ETS match pattern)
|
||||
;; together with mnesia:match_object, match specifications with
|
||||
;; mnesia:select and Query List Comprehensions.
|
||||
|
||||
(defmodule mnesia_demo
|
||||
(export (new 0) (by_place 1) (by_place_ms 1) (by_place_qlc 1)))
|
||||
|
||||
(defrecord person name place job)
|
||||
|
||||
(defun new ()
|
||||
;; Start mnesia and create a table, we will get an in memory only schema.
|
||||
(: mnesia start)
|
||||
(: mnesia create_table 'person '(#(attributes (name place job))))
|
||||
;; Initialise the table.
|
||||
(let ((people '(
|
||||
;; First some people in London.
|
||||
#(fred london waiter)
|
||||
#(bert london waiter)
|
||||
#(john london painter)
|
||||
#(paul london driver)
|
||||
;; Now some in Paris.
|
||||
#(jean paris waiter)
|
||||
#(gerard paris driver)
|
||||
#(claude paris painter)
|
||||
#(yves paris waiter)
|
||||
;; And some in Rome.
|
||||
#(roberto rome waiter)
|
||||
#(guiseppe rome driver)
|
||||
#(paulo rome painter)
|
||||
;; And some in Berlin.
|
||||
#(fritz berlin painter)
|
||||
#(kurt berlin driver)
|
||||
#(hans berlin waiter)
|
||||
#(franz berlin waiter)
|
||||
)))
|
||||
(: lists foreach (match-lambda
|
||||
([(tuple n p j)]
|
||||
(: mnesia transaction
|
||||
(lambda ()
|
||||
(let ((new (make-person name n place p job j)))
|
||||
(: mnesia write new))))))
|
||||
people)))
|
||||
|
||||
;; Match records by place using match_object and the emp-XXXX macro.
|
||||
(defun by_place (place)
|
||||
(: mnesia transaction
|
||||
(lambda () (: mnesia match_object (emp-person place place)))))
|
||||
|
||||
;; Use match specifications to match records
|
||||
(defun by_place_ms (place)
|
||||
(let ((f (lambda () (: mnesia select 'person
|
||||
(match-spec ([(match-person name n place p job j)]
|
||||
(when (=:= p place))
|
||||
(tuple n j)))))))
|
||||
(: mnesia transaction f)))
|
||||
|
||||
;; Use Query List Comprehensions to match records
|
||||
(defun by_place_qlc (place)
|
||||
(let ((f (lambda ()
|
||||
(let ((q (qlc (lc ((<- person (: mnesia table 'person))
|
||||
(=:= (person-place person) place))
|
||||
person))))
|
||||
(: qlc e q)))))
|
||||
(: mnesia transaction f)))
|
||||
169
samples/LFE/object.lfe
Normal file
169
samples/LFE/object.lfe
Normal file
@@ -0,0 +1,169 @@
|
||||
;; Copyright (c) 2013 Duncan McGreggor <oubiwann@cogitat.io>
|
||||
;;
|
||||
;; Licensed under the Apache License, Version 2.0 (the "License");
|
||||
;; you may not use this file except in compliance with the License.
|
||||
;; You may obtain a copy of the License at
|
||||
;;
|
||||
;; http://www.apache.org/licenses/LICENSE-2.0
|
||||
;;
|
||||
;; Unless required by applicable law or agreed to in writing, software
|
||||
;; distributed under the License is distributed on an "AS IS" BASIS,
|
||||
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
;; See the License for the specific language governing permissions and
|
||||
;; limitations under the License.
|
||||
|
||||
;; File : object.lfe
|
||||
;; Author : Duncan McGreggor
|
||||
;; Purpose : Demonstrating simple OOP with closures
|
||||
|
||||
;; The simple object system demonstrated below shows how to do the following:
|
||||
;; * create objects
|
||||
;; * call methods on those objects
|
||||
;; * have methods which can call other methods
|
||||
;; * update the state of an instance variable
|
||||
;;
|
||||
;; Note, however, that his example does not demonstrate inheritance.
|
||||
;;
|
||||
;; To use the code below in LFE, do the following:
|
||||
;;
|
||||
;; $ cd examples
|
||||
;; $ ../bin/lfe -pa ../ebin
|
||||
;;
|
||||
;; Load the file and create a fish-class instance:
|
||||
;;
|
||||
;; > (slurp '"object.lfe")
|
||||
;; #(ok object)
|
||||
;; > (set mommy-fish (fish-class '"Carp"))
|
||||
;; #Fun<lfe_eval.10.91765564>
|
||||
;;
|
||||
;; Execute some of the basic methods:
|
||||
;;
|
||||
;; > (get-species mommy-fish)
|
||||
;; "Carp"
|
||||
;; > (move mommy-fish 17)
|
||||
;; The Carp swam 17 feet!
|
||||
;; ok
|
||||
;; > (get-id mommy-fish)
|
||||
;; "47eebe91a648f042fc3fb278df663de5"
|
||||
;;
|
||||
;; Now let's look at "modifying" state data (e.g., children counts):
|
||||
;;
|
||||
;; > (get-children mommy-fish)
|
||||
;; ()
|
||||
;; > (get-children-count mommy-fish)
|
||||
;; 0
|
||||
;; > (set (mommy-fish baby-fish-1) (reproduce mommy-fish))
|
||||
;; (#Fun<lfe_eval.10.91765564> #Fun<lfe_eval.10.91765564>)
|
||||
;; > (get-id mommy-fish)
|
||||
;; "47eebe91a648f042fc3fb278df663de5"
|
||||
;; > (get-id baby-fish-1)
|
||||
;; "fdcf35983bb496650e558a82e34c9935"
|
||||
;; > (get-children-count mommy-fish)
|
||||
;; 1
|
||||
;; > (set (mommy-fish baby-fish-2) (reproduce mommy-fish))
|
||||
;; (#Fun<lfe_eval.10.91765564> #Fun<lfe_eval.10.91765564>)
|
||||
;; > (get-id mommy-fish)
|
||||
;; "47eebe91a648f042fc3fb278df663de5"
|
||||
;; > (get-id baby-fish-2)
|
||||
;; "3e64e5c20fb742dd88dac1032749c2fd"
|
||||
;; > (get-children-count mommy-fish)
|
||||
;; 2
|
||||
;; > (get-info mommy-fish)
|
||||
;; id: "47eebe91a648f042fc3fb278df663de5"
|
||||
;; species: "Carp"
|
||||
;; children: ["fdcf35983bb496650e558a82e34c9935",
|
||||
;; "3e64e5c20fb742dd88dac1032749c2fd"]
|
||||
;; ok
|
||||
|
||||
(defmodule object
|
||||
(export all))
|
||||
|
||||
(defun fish-class (species)
|
||||
"
|
||||
This is the constructor that will be used most often, only requiring that
|
||||
one pass a 'species' string.
|
||||
|
||||
When the children are not defined, simply use an empty list.
|
||||
"
|
||||
(fish-class species ()))
|
||||
|
||||
(defun fish-class (species children)
|
||||
"
|
||||
This contructor is mostly useful as a way of abstracting out the id
|
||||
generation from the larger constructor. Nothing else uses fish-class/2
|
||||
besides fish-class/1, so it's not strictly necessary.
|
||||
|
||||
When the id isn't know, generate one."
|
||||
(let* (((binary (id (size 128))) (: crypto rand_bytes 16))
|
||||
(formatted-id (car
|
||||
(: io_lib format
|
||||
'"~32.16.0b" (list id)))))
|
||||
(fish-class species children formatted-id)))
|
||||
|
||||
(defun fish-class (species children id)
|
||||
"
|
||||
This is the constructor used internally, once the children and fish id are
|
||||
known.
|
||||
"
|
||||
(let ((move-verb '"swam"))
|
||||
(lambda (method-name)
|
||||
(case method-name
|
||||
('id
|
||||
(lambda (self) id))
|
||||
('species
|
||||
(lambda (self) species))
|
||||
('children
|
||||
(lambda (self) children))
|
||||
('info
|
||||
(lambda (self)
|
||||
(: io format
|
||||
'"id: ~p~nspecies: ~p~nchildren: ~p~n"
|
||||
(list (get-id self)
|
||||
(get-species self)
|
||||
(get-children self)))))
|
||||
('move
|
||||
(lambda (self distance)
|
||||
(: io format
|
||||
'"The ~s ~s ~p feet!~n"
|
||||
(list species move-verb distance))))
|
||||
('reproduce
|
||||
(lambda (self)
|
||||
(let* ((child (fish-class species))
|
||||
(child-id (get-id child))
|
||||
(children-ids (: lists append
|
||||
(list children (list child-id))))
|
||||
(parent-id (get-id self))
|
||||
(parent (fish-class species children-ids parent-id)))
|
||||
(list parent child))))
|
||||
('children-count
|
||||
(lambda (self)
|
||||
(: erlang length children)))))))
|
||||
|
||||
(defun get-method (object method-name)
|
||||
"
|
||||
This is a generic function, used to call into the given object (class
|
||||
instance).
|
||||
"
|
||||
(funcall object method-name))
|
||||
|
||||
; define object methods
|
||||
(defun get-id (object)
|
||||
(funcall (get-method object 'id) object))
|
||||
|
||||
(defun get-species (object)
|
||||
(funcall (get-method object 'species) object))
|
||||
|
||||
(defun get-info (object)
|
||||
(funcall (get-method object 'info) object))
|
||||
|
||||
(defun move (object distance)
|
||||
(funcall (get-method object 'move) object distance))
|
||||
|
||||
(defun reproduce (object)
|
||||
(funcall (get-method object 'reproduce) object))
|
||||
|
||||
(defun get-children (object)
|
||||
(funcall (get-method object 'children) object))
|
||||
|
||||
(defun get-children-count (object)
|
||||
(funcall (get-method object 'children-count) object))
|
||||
16
samples/Makefile/filenames/Makefile
Normal file
16
samples/Makefile/filenames/Makefile
Normal file
@@ -0,0 +1,16 @@
|
||||
all: hello
|
||||
|
||||
hello: main.o factorial.o hello.o
|
||||
g++ main.o factorial.o hello.o -o hello
|
||||
|
||||
main.o: main.cpp
|
||||
g++ -c main.cpp
|
||||
|
||||
factorial.o: factorial.cpp
|
||||
g++ -c factorial.cpp
|
||||
|
||||
hello.o: hello.cpp
|
||||
g++ -c hello.cpp
|
||||
|
||||
clean:
|
||||
rm -rf *o hello
|
||||
3
samples/Makefile/makefile.script!
Normal file
3
samples/Makefile/makefile.script!
Normal file
@@ -0,0 +1,3 @@
|
||||
#!/usr/bin/make -f
|
||||
%:
|
||||
ls -l
|
||||
23
samples/OpenCL/sample.cl
Normal file
23
samples/OpenCL/sample.cl
Normal file
@@ -0,0 +1,23 @@
|
||||
/* Old-style comment. */
|
||||
|
||||
// New-style comment.
|
||||
|
||||
typedef float foo_t;
|
||||
|
||||
#ifndef ZERO
|
||||
#define ZERO (0.0)
|
||||
#endif
|
||||
|
||||
#define FOO(x) ((x) + \
|
||||
ZERO)
|
||||
|
||||
__kernel
|
||||
void foo(__global const foo_t * x, __local foo_t y, const uint n)
|
||||
{
|
||||
barrier(CLK_LOCAL_MEM_FENCE);
|
||||
|
||||
if (n > 42) {
|
||||
*x += y;
|
||||
}
|
||||
}
|
||||
|
||||
22
samples/PHP/php2.script!
Normal file
22
samples/PHP/php2.script!
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
/**
|
||||
* Yii console bootstrap file.
|
||||
*
|
||||
* @link http://www.yiiframework.com/
|
||||
* @copyright Copyright (c) 2008 Yii Software LLC
|
||||
* @license http://www.yiiframework.com/license/
|
||||
*/
|
||||
|
||||
defined('YII_DEBUG') or define('YII_DEBUG', true);
|
||||
|
||||
// fcgi doesn't have STDIN defined by default
|
||||
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
|
||||
|
||||
require(__DIR__ . '/vendor/yiisoft/yii2/yii/Yii.php');
|
||||
require(__DIR__ . '/vendor/autoload.php');
|
||||
|
||||
$config = require(__DIR__ . '/config/console.php');
|
||||
|
||||
$application = new yii\console\Application($config);
|
||||
$application->run();
|
||||
102
samples/Perl/index.fcgi
Executable file
102
samples/Perl/index.fcgi
Executable file
@@ -0,0 +1,102 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
use CGI::Fast;
|
||||
use XML::Hash::XS;
|
||||
use File::Spec;
|
||||
use FindBin qw($Bin);
|
||||
|
||||
#use lib File::Spec->catdir($Bin, qw(.. lib));
|
||||
|
||||
my $_stop = 0;
|
||||
my $request;
|
||||
$SIG{'PIPE'} = 'IGNORE';
|
||||
|
||||
$SIG{'INT'} = $SIG{'TERM'} = sub {
|
||||
$_stop = 1;
|
||||
|
||||
exit(0) unless defined($request);
|
||||
};
|
||||
|
||||
unless ($ENV{'SERVER_SOFTWARE'}) { # for nginx external fcgi
|
||||
$CGI::Fast::Ext_Request = FCGI::Request(
|
||||
\*STDIN, \*STDOUT, \*STDERR,
|
||||
\%ENV, int($ARGV[0] || 0), 1
|
||||
);
|
||||
}
|
||||
|
||||
my $conv = XML::Hash::XS->new(
|
||||
use_attr => 1,
|
||||
indent => 2,
|
||||
output => \*STDOUT,
|
||||
xml_decl => 1
|
||||
);
|
||||
|
||||
my $tmpl_path = File::Spec->catdir($Bin, qw|.. tmpl|);
|
||||
|
||||
|
||||
my $data = {
|
||||
name => {
|
||||
nick => 'cono'
|
||||
},
|
||||
tree => {
|
||||
example => [
|
||||
{ name => 'Encyclopaedia', parent => 0, id => 1 },
|
||||
{ name => 'Science', parent => 1, id => 2 },
|
||||
{ name => 'Culture', parent => 1, id => 3 },
|
||||
{ name => 'Art', parent => 3, id => 4 },
|
||||
{ name => 'Craft', parent => 3, id => 5 }
|
||||
],
|
||||
},
|
||||
third_party => {
|
||||
results => [
|
||||
{ artist_name => 'Madonna', venue => 'Kitchen', event => 'cooking', date => '2013-04-21' },
|
||||
{ artist_name => 'cono', venue => 'Provectus-IT', event => 'presentation', date => '2013-04-20' },
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
while (1) {
|
||||
eval {
|
||||
$request = CGI::Fast->new();
|
||||
unless ($request) {
|
||||
$_stop = 1;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
my ($tmpl, $output) = ('nick');
|
||||
if ($ENV{'REQUEST_URI'} =~ m|/([a-zA-Z0-9_]+)|) {
|
||||
$tmpl = $1;
|
||||
$output = $data->{$tmpl} if exists $data->{$tmpl};
|
||||
}
|
||||
|
||||
die "Bad request" unless $output;
|
||||
|
||||
if (-e File::Spec->catfile($tmpl_path, "$tmpl.xslt")) {
|
||||
print "X-Xslt-Stylesheet: /$tmpl.xslt\r\n";
|
||||
}
|
||||
|
||||
print qq(Content-type:application/xml;charset=utf-8\r\n\r\n);
|
||||
$conv->hash2xml($output);
|
||||
|
||||
};
|
||||
|
||||
if ($@) {
|
||||
print qq(Content-type:text/html;charset=utf-8\r\n\r\nError: $@);
|
||||
}
|
||||
|
||||
$request = undef;
|
||||
last if $_stop;
|
||||
|
||||
if (-M $0 < 0) {
|
||||
unless ($ENV{'SERVER_SOFTWARE'}) { # for nginx external fcgi
|
||||
system("$0 ". int($ARGV[0] || 0).' &');
|
||||
}
|
||||
last;
|
||||
}
|
||||
}
|
||||
|
||||
exit(0);
|
||||
27
samples/Protocol Buffer/addressbook.proto
Normal file
27
samples/Protocol Buffer/addressbook.proto
Normal file
@@ -0,0 +1,27 @@
|
||||
package tutorial;
|
||||
|
||||
option java_package = "com.example.tutorial";
|
||||
option java_outer_classname = "AddressBookProtos";
|
||||
|
||||
message Person {
|
||||
required string name = 1;
|
||||
required int32 id = 2;
|
||||
optional string email = 3;
|
||||
|
||||
enum PhoneType {
|
||||
MOBILE = 0;
|
||||
HOME = 1;
|
||||
WORK = 2;
|
||||
}
|
||||
|
||||
message PhoneNumber {
|
||||
required string number = 1;
|
||||
optional PhoneType type = 2 [default = HOME];
|
||||
}
|
||||
|
||||
repeated PhoneNumber phone = 4;
|
||||
}
|
||||
|
||||
message AddressBook {
|
||||
repeated Person person = 1;
|
||||
}
|
||||
47
samples/Python/python2.script!
Normal file
47
samples/Python/python2.script!
Normal file
@@ -0,0 +1,47 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
def main():
|
||||
|
||||
# usage string
|
||||
usage = 'usage: gitall command'
|
||||
|
||||
# command check
|
||||
if len(sys.argv) < 2:
|
||||
sys.exit(usage)
|
||||
|
||||
command = 'git ' + ' '.join(sys.argv[1:])
|
||||
printDelimiter()
|
||||
print 'Running command:', command
|
||||
|
||||
# get a list of git directories in the specified parent
|
||||
gitDirectories = getSubdirectories('.', isGitDirectory)
|
||||
|
||||
for gitDirectory in gitDirectories:
|
||||
os.chdir(gitDirectory)
|
||||
printDelimiter()
|
||||
print 'Current respository location:', os.getcwd()
|
||||
os.system(command)
|
||||
|
||||
printDelimiter()
|
||||
|
||||
def getSubdirectories(directory, filter = None):
|
||||
directory = os.path.abspath(directory)
|
||||
subdirectories = os.walk(directory).next()[1]
|
||||
if filter is None:
|
||||
return [directory + '/' + i for i in subdirectories]
|
||||
else:
|
||||
return [directory + '/' + i for i in subdirectories if filter(directory + '/' + i)]
|
||||
|
||||
def isGitDirectory(directory):
|
||||
return os.path.isdir(directory + '/.git/')
|
||||
|
||||
def printDelimiter():
|
||||
print '\033[91m'
|
||||
print ('#' * 80)
|
||||
print '\033[0m'
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
324
samples/Python/python3.script!
Normal file
324
samples/Python/python3.script!
Normal file
@@ -0,0 +1,324 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Copyright © 2013 Martin Ueding <dev@martin-ueding.de>
|
||||
|
||||
import argparse
|
||||
import matplotlib.pyplot as pl
|
||||
import numpy as np
|
||||
import scipy.optimize as op
|
||||
from prettytable import PrettyTable
|
||||
|
||||
__docformat__ = "restructuredtext en"
|
||||
|
||||
# Sensitivität der Thermosäule
|
||||
S = 30e-6
|
||||
|
||||
def phif(U):
|
||||
return U / S
|
||||
|
||||
def main():
|
||||
options = _parse_args()
|
||||
|
||||
V = 1000
|
||||
|
||||
data = np.genfromtxt("a-leer.csv", delimiter="\t")
|
||||
t = data[:,0]
|
||||
U = data[:,1] / V / 1000
|
||||
U_err = 0.7e-3 / V
|
||||
|
||||
offset = np.mean(U[-3:])
|
||||
|
||||
x = np.linspace(min(t), max(t))
|
||||
y = np.ones(x.size) * offset
|
||||
pl.plot(x, y * 10**6, label="Offset")
|
||||
|
||||
print "Offset: {:.3g} V".format(offset)
|
||||
|
||||
pl.errorbar(t, U * 10**6, yerr=U_err * 10**6, linestyle="none", marker="+",
|
||||
label="Messdaten")
|
||||
pl.grid(True)
|
||||
pl.legend(loc="best")
|
||||
pl.title(u"Bestimmung des Offsets")
|
||||
pl.xlabel(ur"Zeit $t / \mathrm{s}$")
|
||||
pl.ylabel(ur"Thermospannung $U / \mathrm{\mu V}$")
|
||||
pl.savefig("Plot_a-leer.pdf")
|
||||
pl.clf()
|
||||
|
||||
V = 100
|
||||
|
||||
data = np.genfromtxt("a-Lampe.csv", delimiter="\t")
|
||||
t = data[:,0]
|
||||
U = data[:,1] / V / 1000 - offset
|
||||
U_err = 0.7e-3 / V
|
||||
|
||||
x = np.linspace(min(t), max(t))
|
||||
y = np.ones(x.size) * max(U) * 0.9
|
||||
pl.plot(x, y * 10**6, label=ur"$90\%$")
|
||||
|
||||
pl.errorbar(t, U * 10**6, yerr=U_err * 10**6, linestyle="none", marker="+",
|
||||
label="Messdaten")
|
||||
pl.grid(True)
|
||||
pl.legend(loc="best")
|
||||
pl.title(u"Bestimmung der Ansprechzeit")
|
||||
pl.xlabel(ur"Zeit $t / \mathrm{s}$")
|
||||
pl.ylabel(ur"Thermospannung $U / \mathrm{\mu V}$")
|
||||
pl.savefig("Plot_a-Lampe.pdf")
|
||||
pl.clf()
|
||||
|
||||
# Lesliewürfel
|
||||
print """
|
||||
Lesliewürfel
|
||||
============
|
||||
"""
|
||||
|
||||
glanz = np.genfromtxt("b-glanz.csv", delimiter="\t")
|
||||
matt = np.genfromtxt("b-matt.csv", delimiter="\t")
|
||||
schwarz = np.genfromtxt("b-schwarz.csv", delimiter="\t")
|
||||
weiss = np.genfromtxt("b-weiss.csv", delimiter="\t")
|
||||
|
||||
T0 = 19.0 + 273.15
|
||||
T0_err = 1.0
|
||||
|
||||
glanz[:,0] += 273.15
|
||||
matt[:,0] += 273.15
|
||||
schwarz[:,0] += 273.15
|
||||
weiss[:,0] += 273.15
|
||||
|
||||
glanz[:,1] /= 1000 * V
|
||||
matt[:,1] /= 1000 * V
|
||||
schwarz[:,1] /= 1000 * V
|
||||
weiss[:,1] /= 1000 * V
|
||||
|
||||
glanz[:,1] -= offset
|
||||
matt[:,1] -= offset
|
||||
schwarz[:,1] -= offset
|
||||
weiss[:,1] -= offset
|
||||
|
||||
glanz_phi = phif(glanz[:,1])
|
||||
matt_phi = phif(matt[:,1])
|
||||
schwarz_phi = phif(schwarz[:,1])
|
||||
weiss_phi = phif(weiss[:,1])
|
||||
|
||||
T_err = 0.3
|
||||
|
||||
sigma = 5.670373e-8
|
||||
|
||||
def boltzmann(T, epsilon, offset):
|
||||
return epsilon * sigma * T**4 + offset
|
||||
|
||||
glanz_popt, glanz_pconv = op.curve_fit(boltzmann, glanz[:,0], glanz_phi)
|
||||
matt_popt, matt_pconv = op.curve_fit(boltzmann, matt[:,0], matt_phi)
|
||||
schwarz_popt, schwarz_pconv = op.curve_fit(boltzmann, schwarz[:,0], schwarz_phi)
|
||||
weiss_popt, weiss_pconv = op.curve_fit(boltzmann, weiss[:,0], weiss_phi)
|
||||
|
||||
glanz_x = np.linspace(min(glanz[:,0]), max(glanz[:,0]))
|
||||
glanz_y = boltzmann(glanz_x, *glanz_popt)
|
||||
pl.plot(glanz_x, glanz_y, label="Fit glanz", color="gold")
|
||||
|
||||
matt_x = np.linspace(min(matt[:,0]), max(matt[:,0]))
|
||||
matt_y = boltzmann(matt_x, *matt_popt)
|
||||
pl.plot(matt_x, matt_y, label="Fit matt", color="yellow")
|
||||
|
||||
schwarz_x = np.linspace(min(schwarz[:,0]), max(schwarz[:,0]))
|
||||
schwarz_y = boltzmann(schwarz_x, *schwarz_popt)
|
||||
pl.plot(schwarz_x, schwarz_y, label="Fit schwarz", color="black")
|
||||
|
||||
weiss_x = np.linspace(min(weiss[:,0]), max(weiss[:,0]))
|
||||
weiss_y = boltzmann(weiss_x, *weiss_popt)
|
||||
pl.plot(weiss_x, weiss_y, label="Fit weiss", color="gray")
|
||||
|
||||
print "glanz ε = {:.3g} ± {:.3g}".format(glanz_popt[0], np.sqrt(glanz_pconv.diagonal()[0]))
|
||||
print "glanz offset = {:.3g} ± {:.3g}".format(glanz_popt[1], np.sqrt(glanz_pconv.diagonal()[1]))
|
||||
print "matt ε = {:.3g} ± {:.3g}".format(matt_popt[0], np.sqrt(matt_pconv.diagonal()[0]))
|
||||
print "matt offset = {:.3g} ± {:.3g}".format(matt_popt[1], np.sqrt(matt_pconv.diagonal()[1]))
|
||||
print "schwarz ε = {:.3g} ± {:.3g}".format(schwarz_popt[0], np.sqrt(schwarz_pconv.diagonal()[0]))
|
||||
print "schwarz offset = {:.3g} ± {:.3g}".format(schwarz_popt[1], np.sqrt(schwarz_pconv.diagonal()[1]))
|
||||
print "weiss ε = {:.3g} ± {:.3g}".format(weiss_popt[0], np.sqrt(weiss_pconv.diagonal()[0]))
|
||||
print "weiss offset = {:.3g} ± {:.3g}".format(weiss_popt[1], np.sqrt(weiss_pconv.diagonal()[1]))
|
||||
|
||||
pl.errorbar(glanz[:,0], glanz_phi, xerr=T_err, yerr=U_err/S,
|
||||
label="glanz", color="gold", linestyle="none")
|
||||
pl.errorbar(matt[:,0], matt_phi, xerr=T_err, yerr=U_err/S,
|
||||
label="matt", color="yellow", linestyle="none")
|
||||
pl.errorbar(schwarz[:,0], schwarz_phi, xerr=T_err, yerr=U_err/S,
|
||||
label="schwarz", color="black", linestyle="none")
|
||||
pl.errorbar(weiss[:,0], weiss_phi, xerr=T_err, yerr=U_err/S,
|
||||
label="weiss", color="gray", linestyle="none")
|
||||
|
||||
header = ["T / K", "Phi/F in W/m^2", "Fehler T", "Fehler Phi/F"]
|
||||
|
||||
print """
|
||||
Tabellen für den Lesliewürfel-Plot
|
||||
----------------------------------
|
||||
"""
|
||||
|
||||
print "Glanz"
|
||||
glanz_table = PrettyTable(header)
|
||||
for row in zip(glanz[:,0], glanz_phi, np.ones(glanz[:,0].size)*T_err, np.ones(glanz_phi.size)*U_err/S):
|
||||
glanz_table.add_row(row)
|
||||
print glanz_table
|
||||
print
|
||||
|
||||
print "Matt"
|
||||
matt_table = PrettyTable(header)
|
||||
for row in zip(matt[:,0], matt_phi, np.ones(matt[:,0].size)*T_err, np.ones(matt_phi.size)*U_err/S):
|
||||
matt_table.add_row(row)
|
||||
print matt_table
|
||||
print
|
||||
|
||||
print "Schwarz"
|
||||
schwarz_table = PrettyTable(header)
|
||||
for row in zip(schwarz[:,0], schwarz_phi, np.ones(schwarz[:,0].size)*T_err, np.ones(schwarz_phi.size)*U_err/S):
|
||||
schwarz_table.add_row(row)
|
||||
print schwarz_table
|
||||
print
|
||||
|
||||
print "Weiß"
|
||||
weiss_table = PrettyTable(header)
|
||||
for row in zip(weiss[:,0], weiss_phi, np.ones(weiss[:,0].size)*T_err, np.ones(weiss_phi.size)*U_err/S):
|
||||
weiss_table.add_row(row)
|
||||
print weiss_table
|
||||
print
|
||||
|
||||
epsilon = 0.1
|
||||
|
||||
x = np.linspace(min([min(x) for x in [glanz[:,0], matt[:,0], schwarz[:,0],
|
||||
weiss[:,0]]]),
|
||||
max([max(x) for x in [glanz[:,0], matt[:,0], schwarz[:,0],
|
||||
weiss[:,0]]]),
|
||||
100)
|
||||
offset = - epsilon * sigma * T0**4
|
||||
print "ideal offset = {:.3g}".format(offset)
|
||||
y = boltzmann(x, epsilon, offset)
|
||||
pl.plot(x, y, label=ur"$\epsilon = 0.1$")
|
||||
|
||||
|
||||
pl.grid(True)
|
||||
pl.title(u"Lesliewürfel")
|
||||
pl.xlabel(ur"Temperatur $T / \mathrm{K}$")
|
||||
pl.ylabel(ur"Strahlungsfluss $\frac{\Phi}{F} / \mathrm{\frac{W}{m^2}}$")
|
||||
pl.legend(loc="best", prop={"size": 12})
|
||||
pl.savefig("Plot_b.pdf")
|
||||
pl.clf()
|
||||
|
||||
# Aufgabe c
|
||||
print """
|
||||
Aufgabe c
|
||||
=========
|
||||
"""
|
||||
|
||||
data = np.genfromtxt("c-erste.csv", delimiter="\t")
|
||||
d = data[:,0] / 100
|
||||
U = data[:,1] / V
|
||||
phi = phif(U)
|
||||
|
||||
def c(x, a, b):
|
||||
return a*x + b
|
||||
|
||||
|
||||
dx = d**(-2)
|
||||
dy = phi
|
||||
|
||||
dx_err = np.abs(-2 * d**(-3)) * 0.001
|
||||
dy_err = 0.001 / S
|
||||
|
||||
popt, pconv = op.curve_fit(c, dx, dy)
|
||||
x = np.linspace(min(dx), max(dx))
|
||||
y = c(x, *popt)
|
||||
pl.plot(x, y, label="Fit")
|
||||
|
||||
print "Fitparameter"
|
||||
print "a", popt[0], "±", np.sqrt(pconv.diagonal()[0])
|
||||
print "b", popt[1], "±", np.sqrt(pconv.diagonal()[1])
|
||||
|
||||
pl.errorbar(dx, dy, xerr=dx_err, yerr=dy_err, linestyle="none",
|
||||
marker="+", label="Messdaten")
|
||||
pl.grid(True)
|
||||
pl.title(u"Halogenlampe bei verschiedenen Abständen")
|
||||
pl.xlabel(ur"Abstand $d^{-2} / \mathrm{m^{-2}}$")
|
||||
pl.ylabel(ur"Strahlungsfluss $\frac{\Phi}{F} / \mathrm{\frac{W}{m^2}}$")
|
||||
pl.legend(loc="best")
|
||||
pl.savefig("Plot_c-erste.pdf")
|
||||
pl.clf()
|
||||
|
||||
print
|
||||
print "Tabelle für Aufgabe c"
|
||||
fields = ["d^-2 in m^-2", "Phi/F in W/m^2", "Fehler d^-2", "Fehler Phi/F"]
|
||||
table = PrettyTable(fields)
|
||||
table.align = "l"
|
||||
for row in zip(dx, dy, dx_err, np.ones(dy.size)*dy_err):
|
||||
table.add_row(row)
|
||||
print table
|
||||
print
|
||||
|
||||
data = np.genfromtxt("c-zweite.csv", delimiter="\t")
|
||||
U1 = data[:,0]
|
||||
I1 = data[:,1]
|
||||
U2 = data[:,2] / V
|
||||
|
||||
U_err = 0.001
|
||||
I_err = 0.01
|
||||
|
||||
p = U1 * I1
|
||||
R = U1 / I1
|
||||
R_err = np.sqrt(
|
||||
(1/I1 * U_err)**2
|
||||
+ (U1/I1**2 * I_err)**2
|
||||
)
|
||||
|
||||
phi = phif(U2)
|
||||
phi_err = U_err / S
|
||||
|
||||
alpha = 4.82e-3
|
||||
beta = 6.76e-7
|
||||
|
||||
R0 = 0.35
|
||||
R0_err = 0.05
|
||||
|
||||
T = (-alpha*R0 + np.sqrt(R0)*np.sqrt(4*beta*R + alpha**2*R0 - 4*beta*R0) +
|
||||
2*beta*R0*T0)/(2*beta*R0)
|
||||
|
||||
popt, pconv = op.curve_fit(boltzmann, T, phi, sigma=phi_err)
|
||||
x = np.linspace(min(T), max(T))
|
||||
y = boltzmann(x, *popt)
|
||||
pl.plot(x, y, label="Fit")
|
||||
|
||||
epsilon = popt[0]
|
||||
epsilon_err = np.sqrt(pconv.diagonal()[0])
|
||||
|
||||
print "ε = {:.3g} ± {:.3g}".format(epsilon, epsilon_err)
|
||||
|
||||
f1 = (1/(np.sqrt(R0)*np.sqrt(4*beta*R + alpha**2*R0 - 4*beta*R0))) * R_err
|
||||
f2 = T0_err
|
||||
f3 = ((-alpha + ((alpha**2 - 4*beta)*np.sqrt(R0))/( 2*np.sqrt(4*beta*R + alpha**2*R0 - 4*beta*R0)) + np.sqrt( 4*beta*R + alpha**2*R0 - 4*beta*R0)/(2*np.sqrt(R0)) + 2*beta*T0)/( 2*beta*R0) - (-alpha*R0 + np.sqrt(R0)*np.sqrt(4*beta*R + alpha**2*R0 - 4*beta*R0) + 2*beta*R0*T0)/( 2*beta*R0**2)) * R0_err
|
||||
|
||||
T_err = np.sqrt(f1**2 + f2**2 + f3**2)
|
||||
|
||||
pl.errorbar(T, phi, xerr=T_err, yerr=phi_err, label="Messdaten",
|
||||
linestyle="none", marker="+")
|
||||
pl.grid(True)
|
||||
pl.legend(loc="best")
|
||||
pl.title(u"Halogenlampe bei verschiedenen Leistungen")
|
||||
pl.xlabel(u"Temperatur $T / \mathrm{K}$")
|
||||
pl.ylabel(ur"Strahlungsfluss $\frac{\Phi}{F} / \mathrm{\frac{W}{m^2}}$")
|
||||
pl.savefig("Plot_c-zweite.pdf")
|
||||
pl.clf()
|
||||
|
||||
def _parse_args():
|
||||
"""
|
||||
Parses the command line arguments.
|
||||
|
||||
:return: Namespace with arguments.
|
||||
:rtype: Namespace
|
||||
"""
|
||||
parser = argparse.ArgumentParser(description="")
|
||||
#parser.add_argument("args", metavar="N", type=str, nargs="*", help="Positional arguments.")
|
||||
#parser.add_argument("", dest="", type="", default=, help=)
|
||||
#parser.add_argument("--version", action="version", version="<the version>")
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
31
samples/R/git-punchcard.script!
Executable file
31
samples/R/git-punchcard.script!
Executable file
@@ -0,0 +1,31 @@
|
||||
#! /usr/bin/env Rscript
|
||||
# vim: filetype=r:
|
||||
|
||||
ParseDates <- function(lines) {
|
||||
dates <- matrix(unlist(strsplit(lines, " +")), ncol=6, byrow=TRUE)
|
||||
days <- dates[,1]
|
||||
times <- dates[,4]
|
||||
hours <- matrix(unlist(strsplit(times, ":")), ncol=3, byrow=TRUE)[,1]
|
||||
all.days <- c("Sun", "Sat", "Fri", "Thu", "Wed", "Tue", "Mon")
|
||||
all.hours <- 0:23
|
||||
data.frame( Day = factor(days , levels=all.days)
|
||||
, Hour = factor(hours, levels=all.hours)
|
||||
)
|
||||
}
|
||||
|
||||
Main <- function() {
|
||||
lines <- system("git log --format=%ad", intern=TRUE)
|
||||
punchcard <- as.data.frame(table(ParseDates(lines)))
|
||||
punchcard <-
|
||||
( ggplot2::ggplot(punchcard, ggplot2::aes(y=Day, x=Hour))
|
||||
+ ggplot2::geom_point(ggplot2::aes(size=Freq))
|
||||
+ ggplot2::scale_size(range=c(0, 15))
|
||||
)
|
||||
ggplot2::ggsave( filename = "punchcard.png"
|
||||
, plot = punchcard
|
||||
, width = 10
|
||||
, height = 5
|
||||
)
|
||||
}
|
||||
|
||||
Main()
|
||||
12
samples/Sass/demo.scss
Normal file
12
samples/Sass/demo.scss
Normal file
@@ -0,0 +1,12 @@
|
||||
$blue: #3bbfce;
|
||||
$margin: 16px;
|
||||
|
||||
.content_navigation {
|
||||
color: $blue;
|
||||
}
|
||||
|
||||
.border {
|
||||
padding: $margin / 2;
|
||||
margin: $margin / 2;
|
||||
border: 2px $blue solid;
|
||||
}
|
||||
3
samples/Scaml/hello.scaml
Normal file
3
samples/Scaml/hello.scaml
Normal file
@@ -0,0 +1,3 @@
|
||||
%p
|
||||
Hello,
|
||||
World!
|
||||
30
samples/Shell/filenames/Dockerfile
Normal file
30
samples/Shell/filenames/Dockerfile
Normal file
@@ -0,0 +1,30 @@
|
||||
# This file describes the standard way to build Docker, using docker
|
||||
docker-version 0.4.2
|
||||
from ubuntu:12.04
|
||||
maintainer Solomon Hykes <solomon@dotcloud.com>
|
||||
# Build dependencies
|
||||
run apt-get install -y -q curl
|
||||
run apt-get install -y -q git
|
||||
# Install Go
|
||||
run curl -s https://go.googlecode.com/files/go1.1.1.linux-amd64.tar.gz | tar -v -C /usr/local -xz
|
||||
env PATH /usr/local/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
|
||||
env GOPATH /go
|
||||
env CGO_ENABLED 0
|
||||
run cd /tmp && echo 'package main' > t.go && go test -a -i -v
|
||||
# Download dependencies
|
||||
run PKG=github.com/kr/pty REV=27435c699; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV
|
||||
run PKG=github.com/gorilla/context/ REV=708054d61e5; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV
|
||||
run PKG=github.com/gorilla/mux/ REV=9b36453141c; git clone http://$PKG /go/src/$PKG && cd /go/src/$PKG && git checkout -f $REV
|
||||
# Run dependencies
|
||||
run apt-get install -y iptables
|
||||
# lxc requires updating ubuntu sources
|
||||
run echo 'deb http://archive.ubuntu.com/ubuntu precise main universe' > /etc/apt/sources.list
|
||||
run apt-get update
|
||||
run apt-get install -y lxc
|
||||
run apt-get install -y aufs-tools
|
||||
# Upload docker source
|
||||
add . /go/src/github.com/dotcloud/docker
|
||||
# Build the binary
|
||||
run cd /go/src/github.com/dotcloud/docker/docker && go install -ldflags "-X main.GITCOMMIT '??' -d -w"
|
||||
env PATH /usr/local/go/bin:/go/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
|
||||
cmd ["docker"]
|
||||
127
samples/Slash/brainfuck.sl
Normal file
127
samples/Slash/brainfuck.sl
Normal file
@@ -0,0 +1,127 @@
|
||||
<%
|
||||
|
||||
class Env {
|
||||
def init {
|
||||
@memory = [];
|
||||
@ptr = 0;
|
||||
}
|
||||
|
||||
def ptr { @ptr }
|
||||
def ptr=(ptr) { @ptr = ptr }
|
||||
|
||||
def current_value { @memory[@ptr] || 0 }
|
||||
def current_value=(value) { @memory[@ptr] = value }
|
||||
}
|
||||
|
||||
class AST {
|
||||
class Next {
|
||||
def eval(env) {
|
||||
env.ptr++;
|
||||
}
|
||||
}
|
||||
|
||||
class Prev {
|
||||
def eval(env) {
|
||||
env.ptr--;
|
||||
}
|
||||
}
|
||||
|
||||
class Inc {
|
||||
def eval(env) {
|
||||
env.current_value++;
|
||||
}
|
||||
}
|
||||
|
||||
class Dec {
|
||||
def eval(env) {
|
||||
env.current_value--;
|
||||
}
|
||||
}
|
||||
|
||||
class Output {
|
||||
def eval(env) {
|
||||
print(env.current_value.char);
|
||||
}
|
||||
}
|
||||
|
||||
class Input {
|
||||
def eval(env) {
|
||||
...
|
||||
}
|
||||
}
|
||||
|
||||
class Sequence {
|
||||
def init(nodes) {
|
||||
@nodes = nodes;
|
||||
}
|
||||
|
||||
def eval(env) {
|
||||
for node in @nodes {
|
||||
node.eval(env);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Loop {
|
||||
def init(seq) {
|
||||
@seq = seq;
|
||||
}
|
||||
|
||||
def eval(env) {
|
||||
while env.current_value != 0 {
|
||||
@seq.eval(env);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Parser {
|
||||
def init(str) {
|
||||
@chars = str.split("");
|
||||
}
|
||||
|
||||
def parse {
|
||||
@stack = [[]];
|
||||
for char in @chars {
|
||||
_parse_char(char);
|
||||
}
|
||||
if @stack.length != 1 {
|
||||
throw SyntaxError.new("unexpected end of input");
|
||||
}
|
||||
AST::Sequence.new(@stack.last);
|
||||
}
|
||||
|
||||
def _parse_char(char) {
|
||||
switch char {
|
||||
">" { _add(AST::Next.new); }
|
||||
"<" { _add(AST::Prev.new); }
|
||||
"+" { _add(AST::Inc.new); }
|
||||
"-" { _add(AST::Dec.new); }
|
||||
"." { _add(AST::Output.new); }
|
||||
"," { _add(AST::Input.new); }
|
||||
"[" { _open_loop(); }
|
||||
"]" { _close_loop(); }
|
||||
}
|
||||
}
|
||||
|
||||
def _add(node) {
|
||||
@stack.last.push(node);
|
||||
}
|
||||
|
||||
def _open_loop {
|
||||
@stack.push([]);
|
||||
}
|
||||
|
||||
def _close_loop {
|
||||
if @stack.length == 1 {
|
||||
throw SyntaxError.new("unexpected ']'");
|
||||
}
|
||||
|
||||
nodes = @stack.pop;
|
||||
_add(AST::Loop.new(AST::Sequence.new(nodes)));
|
||||
}
|
||||
}
|
||||
|
||||
src = File.read(ARGV.first);
|
||||
ast = Parser.new(src).parse;
|
||||
ast.eval(Env.new);
|
||||
56
samples/Squirrel/Squirrel.nut
Normal file
56
samples/Squirrel/Squirrel.nut
Normal file
@@ -0,0 +1,56 @@
|
||||
//example from http://www.squirrel-lang.org/#documentation
|
||||
|
||||
local table = {
|
||||
a = "10"
|
||||
subtable = {
|
||||
array = [1,2,3]
|
||||
},
|
||||
[10 + 123] = "expression index"
|
||||
}
|
||||
|
||||
local array=[ 1, 2, 3, { a = 10, b = "string" } ];
|
||||
|
||||
foreach (i,val in array)
|
||||
{
|
||||
::print("the type of val is"+typeof val);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////
|
||||
|
||||
class Entity
|
||||
{
|
||||
constructor(etype,entityname)
|
||||
{
|
||||
name = entityname;
|
||||
type = etype;
|
||||
}
|
||||
|
||||
x = 0;
|
||||
y = 0;
|
||||
z = 0;
|
||||
name = null;
|
||||
type = null;
|
||||
}
|
||||
|
||||
function Entity::MoveTo(newx,newy,newz)
|
||||
{
|
||||
x = newx;
|
||||
y = newy;
|
||||
z = newz;
|
||||
}
|
||||
|
||||
class Player extends Entity {
|
||||
constructor(entityname)
|
||||
{
|
||||
base.constructor("Player",entityname)
|
||||
}
|
||||
function DoDomething()
|
||||
{
|
||||
::print("something");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
local newplayer = Player("da playar");
|
||||
|
||||
newplayer.MoveTo(100,200,300);
|
||||
@@ -1 +1 @@
|
||||
console.log "Hello, World!"
|
||||
console.log("Hello, World!");
|
||||
|
||||
93
samples/Volt/tesla.volt
Normal file
93
samples/Volt/tesla.volt
Normal file
@@ -0,0 +1,93 @@
|
||||
// Copyright © 2012-2013, Jakob Bornecrantz. All rights reserved.
|
||||
// See copyright notice in src/volt/license.d (BOOST ver. 1.0).
|
||||
module main;
|
||||
|
||||
import core.stdc.stdio;
|
||||
import core.stdc.stdlib;
|
||||
|
||||
import watt.process;
|
||||
import watt.path;
|
||||
|
||||
import results;
|
||||
import list;
|
||||
import cmd;
|
||||
|
||||
int main()
|
||||
{
|
||||
auto cmdGroup = new CmdGroup();
|
||||
bool printOk = true;
|
||||
bool printImprovments = true;
|
||||
bool printFailing = true;
|
||||
bool printRegressions = true;
|
||||
string compiler = getEnv("VOLT");
|
||||
|
||||
if (compiler is null) {
|
||||
printf("compiler envar not set\n".ptr);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/// @todo Scan for files
|
||||
auto tests = testList;
|
||||
|
||||
int total;
|
||||
int passed;
|
||||
int failed;
|
||||
int improved;
|
||||
int regressed;
|
||||
|
||||
auto rets = new Result[] (tests.length);
|
||||
for (size_t i; i < tests.length; i++) {
|
||||
rets[i] = new Result();
|
||||
rets[i].runTest(cmdGroup, tests[i], compiler);
|
||||
}
|
||||
|
||||
cmdGroup.waitAll();
|
||||
|
||||
for (size_t i; i < tests.length; i++) {
|
||||
auto ret = rets[i];
|
||||
total++;
|
||||
if (ret.ok) {
|
||||
passed++;
|
||||
improved += cast(int)!ret.hasPassed;
|
||||
|
||||
if (!ret.hasPassed && printImprovments) {
|
||||
printf("%s: %s, improved!\n".ptr, ret.test.ptr, ret.msg.ptr);
|
||||
} else if (printOk) {
|
||||
printf("%s: %s\n".ptr, ret.test.ptr, ret.msg.ptr);
|
||||
}
|
||||
} else {
|
||||
failed++;
|
||||
regressed += cast(int)ret.hasPassed;
|
||||
|
||||
|
||||
if (ret.hasPassed && printRegressions) {
|
||||
printf("%s: %s, regressed!\n".ptr, ret.test.ptr, ret.msg.ptr);
|
||||
} else if (printFailing) {
|
||||
printf("%s: %s\n".ptr, ret.test.ptr, ret.msg.ptr);
|
||||
}
|
||||
}
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
auto xml = fopen("results.xml".ptr, "w+".ptr);
|
||||
if (xml !is null) {
|
||||
fprintf(xml, "<testsuites errors=\"%u\" failures=\"%u\" tests=\"%u\">\n".ptr,
|
||||
regressed, failed - regressed, total);
|
||||
for (size_t i; i < rets.length; i++) {
|
||||
rets[i].xmlLog(xml);
|
||||
}
|
||||
fprintf(xml, "</testsuites>\n".ptr);
|
||||
fflush(xml);
|
||||
fclose(xml);
|
||||
xml = null;
|
||||
}
|
||||
|
||||
auto rate = cast(float)passed / cast(float)total * 100.f;
|
||||
printf("Summary: %i tests, %i pass%s, %i failure%s, %.2f%% pass rate, %i regressions, %i improvements.\n".ptr,
|
||||
total,
|
||||
passed, (passed == 1 ? "".ptr : "es".ptr),
|
||||
failed, (failed == 1 ? "".ptr : "s".ptr),
|
||||
cast(double)rate, regressed, improved);
|
||||
|
||||
return regressed ? -1 : 0;
|
||||
}
|
||||
10
samples/XC/main.xc
Normal file
10
samples/XC/main.xc
Normal file
@@ -0,0 +1,10 @@
|
||||
int main()
|
||||
{
|
||||
int x;
|
||||
chan c;
|
||||
par {
|
||||
c <: 0;
|
||||
c :> x;
|
||||
}
|
||||
return x;
|
||||
}
|
||||
@@ -197,6 +197,13 @@ class TestBlob < Test::Unit::TestCase
|
||||
assert blob("C++/protocol-buffer.pb.cc").generated?
|
||||
assert blob("Java/ProtocolBuffer.java").generated?
|
||||
assert blob("Python/protocol_buffer_pb2.py").generated?
|
||||
|
||||
# Generated JNI
|
||||
assert blob("C/jni_layer.h").generated?
|
||||
|
||||
# Minified CSS
|
||||
assert !blob("CSS/bootstrap.css").generated?
|
||||
assert blob("CSS/bootstrap.min.css").generated?
|
||||
end
|
||||
|
||||
def test_vendored
|
||||
@@ -209,6 +216,9 @@ class TestBlob < Test::Unit::TestCase
|
||||
# Rails vendor/
|
||||
assert blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored?
|
||||
|
||||
# 'thirdparty' directory
|
||||
assert blob("thirdparty/lib/main.c").vendored?
|
||||
|
||||
# C deps
|
||||
assert blob("deps/http_parser/http_parser.c").vendored?
|
||||
assert blob("deps/v8/src/v8.h").vendored?
|
||||
@@ -232,8 +242,27 @@ class TestBlob < Test::Unit::TestCase
|
||||
assert blob("public/javascripts/jquery-1.5.2.js").vendored?
|
||||
assert blob("public/javascripts/jquery-1.6.1.js").vendored?
|
||||
assert blob("public/javascripts/jquery-1.6.1.min.js").vendored?
|
||||
assert blob("public/javascripts/jquery-1.10.1.js").vendored?
|
||||
assert blob("public/javascripts/jquery-1.10.1.min.js").vendored?
|
||||
assert !blob("public/javascripts/jquery.github.menu.js").vendored?
|
||||
|
||||
# jQuery UI
|
||||
assert blob("themes/ui-lightness/jquery-ui.css").vendored?
|
||||
assert blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored?
|
||||
assert blob("themes/ui-lightness/jquery.ui.accordion.css").vendored?
|
||||
assert blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored?
|
||||
assert blob("ui/i18n/jquery-ui-i18n.js").vendored?
|
||||
assert blob("ui/jquery.effects.blind.js").vendored?
|
||||
assert blob("ui/jquery-ui-1.8.22.custom.js").vendored?
|
||||
assert blob("ui/jquery-ui-1.8.22.custom.min.js").vendored?
|
||||
assert blob("ui/jquery-ui-1.8.22.js").vendored?
|
||||
assert blob("ui/jquery-ui-1.8.js").vendored?
|
||||
assert blob("ui/jquery-ui.min.js").vendored?
|
||||
assert blob("ui/jquery.ui.accordion.js").vendored?
|
||||
assert blob("ui/minified/jquery.effects.blind.min.js").vendored?
|
||||
assert blob("ui/minified/jquery.ui.accordion.min.js").vendored?
|
||||
|
||||
|
||||
# MooTools
|
||||
assert blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored?
|
||||
assert blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored?
|
||||
@@ -249,10 +278,6 @@ class TestBlob < Test::Unit::TestCase
|
||||
assert blob("public/javascripts/yahoo-min.js").vendored?
|
||||
assert blob("public/javascripts/yuiloader-dom-event.js").vendored?
|
||||
|
||||
# LESS
|
||||
assert blob("public/javascripts/less-1.1.0.js").vendored?
|
||||
assert blob("public/javascripts/less-1.1.0.min.js").vendored?
|
||||
|
||||
# WYS editors
|
||||
assert blob("public/javascripts/ckeditor.js").vendored?
|
||||
assert blob("public/javascripts/tiny_mce.js").vendored?
|
||||
@@ -278,6 +303,11 @@ class TestBlob < Test::Unit::TestCase
|
||||
|
||||
# jQuery validation plugin (MS bundles this with asp.net mvc)
|
||||
assert blob("Scripts/jquery.validate.js").vendored?
|
||||
assert blob("Scripts/jquery.validate.min.js").vendored?
|
||||
assert blob("Scripts/jquery.validate.unobtrusive.js").vendored?
|
||||
assert blob("Scripts/jquery.validate.unobtrusive.min.js").vendored?
|
||||
assert blob("Scripts/jquery.unobtrusive-ajax.js").vendored?
|
||||
assert blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored?
|
||||
|
||||
# NuGet Packages
|
||||
assert blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored?
|
||||
@@ -293,20 +323,6 @@ class TestBlob < Test::Unit::TestCase
|
||||
assert blob("cordova-2.1.0.min.js").vendored?
|
||||
end
|
||||
|
||||
def test_indexable
|
||||
assert blob("Ruby/foo.rb").indexable?
|
||||
assert !blob("Text/defu.nkt").indexable?
|
||||
assert !blob("Text/dump.sql").indexable?
|
||||
assert !blob("Binary/github.po").indexable?
|
||||
assert !blob("Binary/linguist.gem").indexable?
|
||||
|
||||
# large binary blobs should fail on size check first, not call
|
||||
# into charlock_holmes and alloc big buffers for testing encoding
|
||||
b = blob("Binary/octocat.ai")
|
||||
b.expects(:binary?).never
|
||||
assert !b.indexable?
|
||||
end
|
||||
|
||||
def test_language
|
||||
Samples.each do |sample|
|
||||
blob = blob(sample[:path])
|
||||
@@ -327,13 +343,6 @@ class TestBlob < Test::Unit::TestCase
|
||||
HTML
|
||||
end
|
||||
|
||||
def test_colorize_without_wrapper
|
||||
assert_equal <<-HTML, blob("Ruby/foo.rb").colorize_without_wrapper
|
||||
<span class="k">module</span> <span class="nn">Foo</span>
|
||||
<span class="k">end</span>
|
||||
HTML
|
||||
end
|
||||
|
||||
def test_colorize_does_skip_minified_files
|
||||
assert_nil blob("JavaScript/jquery-1.6.1.min.js").colorize
|
||||
end
|
||||
|
||||
@@ -160,7 +160,7 @@ class TestLanguage < Test::Unit::TestCase
|
||||
assert_equal 'cpp', Language['C++'].search_term
|
||||
assert_equal 'cfm', Language['ColdFusion'].search_term
|
||||
assert_equal 'dpatch', Language['Darcs Patch'].search_term
|
||||
assert_equal 'ocaml', Language['F#'].search_term
|
||||
assert_equal 'fsharp', Language['F#'].search_term
|
||||
assert_equal 'pot', Language['Gettext Catalog'].search_term
|
||||
assert_equal 'irc', Language['IRC log'].search_term
|
||||
assert_equal 'lhs', Language['Literate Haskell'].search_term
|
||||
@@ -191,7 +191,10 @@ class TestLanguage < Test::Unit::TestCase
|
||||
|
||||
def test_markup
|
||||
assert_equal :markup, Language['HTML'].type
|
||||
assert_equal :markup, Language['YAML'].type
|
||||
end
|
||||
|
||||
def test_data
|
||||
assert_equal :data, Language['YAML'].type
|
||||
end
|
||||
|
||||
def test_other
|
||||
|
||||
Reference in New Issue
Block a user