mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 17:50:22 +00:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2696a9c5e7 | ||
|
|
7c170972a0 | ||
|
|
d00dfd82c1 | ||
|
|
9003139119 | ||
|
|
36e867ec76 | ||
|
|
cf4813979c | ||
|
|
7e12c3eff1 | ||
|
|
281cc985bf | ||
|
|
dcc2be0781 | ||
|
|
161d076bfd | ||
|
|
09fbcc9a72 | ||
|
|
ee2b92cf82 | ||
|
|
720914b290 | ||
|
|
16f8e54ed7 | ||
|
|
50ecb63058 | ||
|
|
586650f01c | ||
|
|
ae753e6e88 | ||
|
|
04a2845e91 | ||
|
|
acb20d95ca | ||
|
|
d3ebe1844d | ||
|
|
fc8492e8f7 | ||
|
|
ff5ffd0482 | ||
|
|
50db6d0150 | ||
|
|
2e0b854428 | ||
|
|
1dfb44cff7 | ||
|
|
0a8fad2040 | ||
|
|
9b97d3ac8a | ||
|
|
26e78c0c1b | ||
|
|
b036e8d3c2 | ||
|
|
f84a904ad8 | ||
|
|
b1684037d6 | ||
|
|
1c85d0b38a | ||
|
|
ec3434cf1d | ||
|
|
0e20f6d454 | ||
|
|
d92d208a45 | ||
|
|
b798e28bfb | ||
|
|
ebd6077cd7 | ||
|
|
9e9500dfa9 | ||
|
|
04cc100fba | ||
|
|
31e33f99f2 | ||
|
|
7c51b90586 | ||
|
|
2b36f73da6 | ||
|
|
d96dd473b8 | ||
|
|
f9066ffb7b | ||
|
|
945941d529 | ||
|
|
10e875e899 | ||
|
|
d24e5c938e | ||
|
|
aa069a336f | ||
|
|
662fc2ee9d | ||
|
|
567cd6ef68 | ||
|
|
887a050db9 | ||
|
|
bda895eaae | ||
|
|
2e49c06f47 | ||
|
|
ae137847b4 | ||
|
|
5443dc50a3 | ||
|
|
fc435a2541 | ||
|
|
04394750e7 | ||
|
|
e415a1351b | ||
|
|
6ec907a915 | ||
|
|
1f55f01fa9 | ||
|
|
da6cf8dbb4 |
4
Rakefile
4
Rakefile
@@ -3,9 +3,7 @@ require 'rake/testtask'
|
|||||||
|
|
||||||
task :default => :test
|
task :default => :test
|
||||||
|
|
||||||
Rake::TestTask.new do |t|
|
Rake::TestTask.new
|
||||||
t.warning = true
|
|
||||||
end
|
|
||||||
|
|
||||||
task :samples do
|
task :samples do
|
||||||
require 'linguist/samples'
|
require 'linguist/samples'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
Gem::Specification.new do |s|
|
Gem::Specification.new do |s|
|
||||||
s.name = 'github-linguist'
|
s.name = 'github-linguist'
|
||||||
s.version = '2.3.1'
|
s.version = '2.4.0'
|
||||||
s.summary = "GitHub Language detection"
|
s.summary = "GitHub Language detection"
|
||||||
|
|
||||||
s.authors = "GitHub"
|
s.authors = "GitHub"
|
||||||
@@ -11,7 +11,8 @@ Gem::Specification.new do |s|
|
|||||||
s.add_dependency 'charlock_holmes', '~> 0.6.6'
|
s.add_dependency 'charlock_holmes', '~> 0.6.6'
|
||||||
s.add_dependency 'escape_utils', '~> 0.2.3'
|
s.add_dependency 'escape_utils', '~> 0.2.3'
|
||||||
s.add_dependency 'mime-types', '~> 1.19'
|
s.add_dependency 'mime-types', '~> 1.19'
|
||||||
s.add_dependency 'pygments.rb', '>= 0.2.13'
|
s.add_dependency 'pygments.rb', '>= 0.3.0'
|
||||||
|
s.add_development_dependency 'mocha'
|
||||||
s.add_development_dependency 'json'
|
s.add_development_dependency 'json'
|
||||||
s.add_development_dependency 'rake'
|
s.add_development_dependency 'rake'
|
||||||
s.add_development_dependency 'yajl-ruby'
|
s.add_development_dependency 'yajl-ruby'
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Return true or false
|
# Return true or false
|
||||||
def safe_to_colorize?
|
def safe_to_colorize?
|
||||||
text? && !large? && !high_ratio_of_long_lines?
|
!large? && text? && !high_ratio_of_long_lines?
|
||||||
end
|
end
|
||||||
|
|
||||||
# Internal: Does the blob have a ratio of long lines?
|
# Internal: Does the blob have a ratio of long lines?
|
||||||
@@ -204,7 +204,31 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Returns an Array of lines
|
# Returns an Array of lines
|
||||||
def lines
|
def lines
|
||||||
@lines ||= (viewable? && data) ? data.split("\n", -1) : []
|
@lines ||=
|
||||||
|
if viewable? && data
|
||||||
|
data.split(line_split_character, -1)
|
||||||
|
else
|
||||||
|
[]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Character used to split lines. This is almost always "\n" except when Mac
|
||||||
|
# Format is detected in which case it's "\r".
|
||||||
|
#
|
||||||
|
# Returns a split pattern string.
|
||||||
|
def line_split_character
|
||||||
|
@line_split_character ||= (mac_format?? "\r" : "\n")
|
||||||
|
end
|
||||||
|
|
||||||
|
# Public: Is the data in ** Mac Format **. This format uses \r (0x0d) characters
|
||||||
|
# for line ends and does not include a \n (0x0a).
|
||||||
|
#
|
||||||
|
# Returns true when mac format is detected.
|
||||||
|
def mac_format?
|
||||||
|
return if !viewable?
|
||||||
|
if pos = data[0, 4096].index("\r")
|
||||||
|
data[pos + 1] != ?\n
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Public: Get number of lines of code
|
# Public: Get number of lines of code
|
||||||
@@ -250,7 +274,9 @@ module Linguist
|
|||||||
#
|
#
|
||||||
# Return true or false
|
# Return true or false
|
||||||
def indexable?
|
def indexable?
|
||||||
if binary?
|
if size > 100 * 1024
|
||||||
|
false
|
||||||
|
elsif binary?
|
||||||
false
|
false
|
||||||
elsif extname == '.txt'
|
elsif extname == '.txt'
|
||||||
true
|
true
|
||||||
@@ -260,8 +286,6 @@ module Linguist
|
|||||||
false
|
false
|
||||||
elsif generated?
|
elsif generated?
|
||||||
false
|
false
|
||||||
elsif size > 100 * 1024
|
|
||||||
false
|
|
||||||
else
|
else
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
@@ -278,7 +302,7 @@ module Linguist
|
|||||||
if defined?(@data) && @data.is_a?(String)
|
if defined?(@data) && @data.is_a?(String)
|
||||||
data = @data
|
data = @data
|
||||||
else
|
else
|
||||||
data = lambda { binary_mime_type? ? "" : self.data }
|
data = lambda { (binary_mime_type? || binary?) ? "" : self.data }
|
||||||
end
|
end
|
||||||
|
|
||||||
@language = Language.detect(name.to_s, data, mode)
|
@language = Language.detect(name.to_s, data, mode)
|
||||||
|
|||||||
@@ -84,7 +84,9 @@ module Linguist
|
|||||||
|
|
||||||
if possible_languages.length > 1
|
if possible_languages.length > 1
|
||||||
data = data.call() if data.respond_to?(:call)
|
data = data.call() if data.respond_to?(:call)
|
||||||
if result = Classifier.classify(Samples::DATA, data, possible_languages.map(&:name)).first
|
if data.nil? || data == ""
|
||||||
|
nil
|
||||||
|
elsif result = Classifier.classify(Samples::DATA, data, possible_languages.map(&:name)).first
|
||||||
Language[result[0]]
|
Language[result[0]]
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -220,6 +222,7 @@ module Linguist
|
|||||||
raise(ArgumentError, "#{@name} is missing lexer")
|
raise(ArgumentError, "#{@name} is missing lexer")
|
||||||
|
|
||||||
@ace_mode = attributes[:ace_mode]
|
@ace_mode = attributes[:ace_mode]
|
||||||
|
@wrap = attributes[:wrap] || false
|
||||||
|
|
||||||
# Set legacy search term
|
# Set legacy search term
|
||||||
@search_term = attributes[:search_term] || default_alias_name
|
@search_term = attributes[:search_term] || default_alias_name
|
||||||
@@ -310,6 +313,11 @@ module Linguist
|
|||||||
# Returns a String name or nil
|
# Returns a String name or nil
|
||||||
attr_reader :ace_mode
|
attr_reader :ace_mode
|
||||||
|
|
||||||
|
# Public: Should language lines be wrapped
|
||||||
|
#
|
||||||
|
# Returns true or false
|
||||||
|
attr_reader :wrap
|
||||||
|
|
||||||
# Public: Get extensions
|
# Public: Get extensions
|
||||||
#
|
#
|
||||||
# Examples
|
# Examples
|
||||||
@@ -460,6 +468,7 @@ module Linguist
|
|||||||
:aliases => options['aliases'],
|
:aliases => options['aliases'],
|
||||||
:lexer => options['lexer'],
|
:lexer => options['lexer'],
|
||||||
:ace_mode => options['ace_mode'],
|
:ace_mode => options['ace_mode'],
|
||||||
|
:wrap => options['wrap'],
|
||||||
:group_name => options['group'],
|
:group_name => options['group'],
|
||||||
:searchable => options.key?('searchable') ? options['searchable'] : true,
|
:searchable => options.key?('searchable') ? options['searchable'] : true,
|
||||||
:search_term => options['search_term'],
|
:search_term => options['search_term'],
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
# aliases - An Array of additional aliases (implicitly
|
# aliases - An Array of additional aliases (implicitly
|
||||||
# includes name.downcase)
|
# includes name.downcase)
|
||||||
# ace_mode - A String name of Ace Mode (if available)
|
# ace_mode - A String name of Ace Mode (if available)
|
||||||
|
# wrap - Boolean wrap to enable line wrapping (default: false)
|
||||||
# extension - An Array of associated extensions
|
# extension - An Array of associated extensions
|
||||||
# primary_extension - A String for the main extension associated with
|
# primary_extension - A String for the main extension associated with
|
||||||
# the language. Must be unique. Used when a Language is picked
|
# the language. Must be unique. Used when a Language is picked
|
||||||
@@ -62,6 +63,12 @@ Ada:
|
|||||||
- .adb
|
- .adb
|
||||||
- .ads
|
- .ads
|
||||||
|
|
||||||
|
ApacheConf:
|
||||||
|
type: markup
|
||||||
|
aliases:
|
||||||
|
- apache
|
||||||
|
primary_extension: .apacheconf
|
||||||
|
|
||||||
Apex:
|
Apex:
|
||||||
type: programming
|
type: programming
|
||||||
lexer: Text only
|
lexer: Text only
|
||||||
@@ -179,8 +186,10 @@ C++:
|
|||||||
- cpp
|
- cpp
|
||||||
primary_extension: .cpp
|
primary_extension: .cpp
|
||||||
extensions:
|
extensions:
|
||||||
|
- .C
|
||||||
- .c++
|
- .c++
|
||||||
- .cxx
|
- .cxx
|
||||||
|
- .H
|
||||||
- .h++
|
- .h++
|
||||||
- .hh
|
- .hh
|
||||||
- .hxx
|
- .hxx
|
||||||
@@ -243,6 +252,7 @@ CoffeeScript:
|
|||||||
color: "#244776"
|
color: "#244776"
|
||||||
aliases:
|
aliases:
|
||||||
- coffee
|
- coffee
|
||||||
|
- coffee-script
|
||||||
primary_extension: .coffee
|
primary_extension: .coffee
|
||||||
extensions:
|
extensions:
|
||||||
- ._coffee
|
- ._coffee
|
||||||
@@ -367,6 +377,14 @@ Ecere Projects:
|
|||||||
extensions:
|
extensions:
|
||||||
- .epj
|
- .epj
|
||||||
|
|
||||||
|
Ecl:
|
||||||
|
type: programming
|
||||||
|
color: "#8a1267"
|
||||||
|
primary_extension: .ecl
|
||||||
|
lexer: ECL
|
||||||
|
extensions:
|
||||||
|
- .eclxml
|
||||||
|
|
||||||
Eiffel:
|
Eiffel:
|
||||||
type: programming
|
type: programming
|
||||||
lexer: Text only
|
lexer: Text only
|
||||||
@@ -383,6 +401,12 @@ Elixir:
|
|||||||
- .ex
|
- .ex
|
||||||
- .exs
|
- .exs
|
||||||
|
|
||||||
|
Elm:
|
||||||
|
type: programming
|
||||||
|
lexer: Haskell
|
||||||
|
group: Haskell
|
||||||
|
primary_extension: .elm
|
||||||
|
|
||||||
Emacs Lisp:
|
Emacs Lisp:
|
||||||
type: programming
|
type: programming
|
||||||
lexer: Scheme
|
lexer: Scheme
|
||||||
@@ -536,6 +560,8 @@ Groovy Server Pages:
|
|||||||
HTML:
|
HTML:
|
||||||
type: markup
|
type: markup
|
||||||
ace_mode: html
|
ace_mode: html
|
||||||
|
aliases:
|
||||||
|
- xhtml
|
||||||
primary_extension: .html
|
primary_extension: .html
|
||||||
extensions:
|
extensions:
|
||||||
- .htm
|
- .htm
|
||||||
@@ -554,6 +580,8 @@ HTML+ERB:
|
|||||||
type: markup
|
type: markup
|
||||||
group: HTML
|
group: HTML
|
||||||
lexer: RHTML
|
lexer: RHTML
|
||||||
|
aliases:
|
||||||
|
- erb
|
||||||
primary_extension: .erb
|
primary_extension: .erb
|
||||||
extensions:
|
extensions:
|
||||||
- .erb
|
- .erb
|
||||||
@@ -566,22 +594,20 @@ HTML+PHP:
|
|||||||
extensions:
|
extensions:
|
||||||
- .phtml
|
- .phtml
|
||||||
|
|
||||||
HaXe:
|
HTTP:
|
||||||
type: programming
|
type: data
|
||||||
lexer: haXe
|
primary_extension: .http
|
||||||
ace_mode: haxe
|
|
||||||
color: "#346d51"
|
|
||||||
primary_extension: .hx
|
|
||||||
extensions:
|
|
||||||
- .hx
|
|
||||||
- .hxml
|
|
||||||
- .mtt
|
|
||||||
|
|
||||||
Haml:
|
Haml:
|
||||||
group: HTML
|
group: HTML
|
||||||
type: markup
|
type: markup
|
||||||
primary_extension: .haml
|
primary_extension: .haml
|
||||||
|
|
||||||
|
Handlebars:
|
||||||
|
type: markup
|
||||||
|
lexer: Text only
|
||||||
|
primary_extension: .handlebars
|
||||||
|
|
||||||
Haskell:
|
Haskell:
|
||||||
type: programming
|
type: programming
|
||||||
color: "#29b544"
|
color: "#29b544"
|
||||||
@@ -590,6 +616,15 @@ Haskell:
|
|||||||
- .hs
|
- .hs
|
||||||
- .hsc
|
- .hsc
|
||||||
|
|
||||||
|
Haxe:
|
||||||
|
type: programming
|
||||||
|
lexer: haXe
|
||||||
|
ace_mode: haxe
|
||||||
|
color: "#346d51"
|
||||||
|
primary_extension: .hx
|
||||||
|
extensions:
|
||||||
|
- .hxsl
|
||||||
|
|
||||||
INI:
|
INI:
|
||||||
type: data
|
type: data
|
||||||
extensions:
|
extensions:
|
||||||
@@ -714,6 +749,8 @@ Lua:
|
|||||||
- .nse
|
- .nse
|
||||||
|
|
||||||
Makefile:
|
Makefile:
|
||||||
|
aliases:
|
||||||
|
- make
|
||||||
extensions:
|
extensions:
|
||||||
- .mak
|
- .mak
|
||||||
- .mk
|
- .mk
|
||||||
@@ -733,6 +770,7 @@ Markdown:
|
|||||||
type: markup
|
type: markup
|
||||||
lexer: Text only
|
lexer: Text only
|
||||||
ace_mode: markdown
|
ace_mode: markdown
|
||||||
|
wrap: true
|
||||||
primary_extension: .md
|
primary_extension: .md
|
||||||
extensions:
|
extensions:
|
||||||
- .markdown
|
- .markdown
|
||||||
@@ -788,6 +826,11 @@ Nemerle:
|
|||||||
color: "#0d3c6e"
|
color: "#0d3c6e"
|
||||||
primary_extension: .n
|
primary_extension: .n
|
||||||
|
|
||||||
|
Nginx:
|
||||||
|
type: markup
|
||||||
|
lexer: Nginx configuration file
|
||||||
|
primary_extension: .nginxconf
|
||||||
|
|
||||||
Nimrod:
|
Nimrod:
|
||||||
type: programming
|
type: programming
|
||||||
color: "#37775b"
|
color: "#37775b"
|
||||||
@@ -833,6 +876,9 @@ ObjDump:
|
|||||||
Objective-C:
|
Objective-C:
|
||||||
type: programming
|
type: programming
|
||||||
color: "#438eff"
|
color: "#438eff"
|
||||||
|
aliases:
|
||||||
|
- obj-c
|
||||||
|
- objc
|
||||||
primary_extension: .m
|
primary_extension: .m
|
||||||
extensions:
|
extensions:
|
||||||
- .mm
|
- .mm
|
||||||
@@ -840,6 +886,8 @@ Objective-C:
|
|||||||
Objective-J:
|
Objective-J:
|
||||||
type: programming
|
type: programming
|
||||||
color: "#ff0c5a"
|
color: "#ff0c5a"
|
||||||
|
aliases:
|
||||||
|
- obj-j
|
||||||
primary_extension: .j
|
primary_extension: .j
|
||||||
extensions:
|
extensions:
|
||||||
- .j
|
- .j
|
||||||
@@ -1114,10 +1162,6 @@ Shell:
|
|||||||
- bash
|
- bash
|
||||||
- zsh
|
- zsh
|
||||||
primary_extension: .sh
|
primary_extension: .sh
|
||||||
filenames:
|
|
||||||
- .zsh
|
|
||||||
- bashrc
|
|
||||||
- zshrc
|
|
||||||
|
|
||||||
Smalltalk:
|
Smalltalk:
|
||||||
type: programming
|
type: programming
|
||||||
@@ -1162,6 +1206,8 @@ Tcsh:
|
|||||||
TeX:
|
TeX:
|
||||||
type: markup
|
type: markup
|
||||||
ace_mode: latex
|
ace_mode: latex
|
||||||
|
aliases:
|
||||||
|
- latex
|
||||||
primary_extension: .tex
|
primary_extension: .tex
|
||||||
extensions:
|
extensions:
|
||||||
- .aux
|
- .aux
|
||||||
@@ -1180,6 +1226,7 @@ Textile:
|
|||||||
type: markup
|
type: markup
|
||||||
lexer: Text only
|
lexer: Text only
|
||||||
ace_mode: textile
|
ace_mode: textile
|
||||||
|
wrap: true
|
||||||
primary_extension: .textile
|
primary_extension: .textile
|
||||||
extensions:
|
extensions:
|
||||||
- .textile
|
- .textile
|
||||||
@@ -1250,6 +1297,11 @@ Visual Basic:
|
|||||||
XML:
|
XML:
|
||||||
type: markup
|
type: markup
|
||||||
ace_mode: xml
|
ace_mode: xml
|
||||||
|
aliases:
|
||||||
|
- rss
|
||||||
|
- xsd
|
||||||
|
- xsl
|
||||||
|
- wsdl
|
||||||
primary_extension: .xml
|
primary_extension: .xml
|
||||||
extensions:
|
extensions:
|
||||||
- .glade
|
- .glade
|
||||||
@@ -1295,6 +1347,8 @@ XSLT:
|
|||||||
|
|
||||||
YAML:
|
YAML:
|
||||||
type: markup
|
type: markup
|
||||||
|
aliases:
|
||||||
|
- yml
|
||||||
primary_extension: .yml
|
primary_extension: .yml
|
||||||
extensions:
|
extensions:
|
||||||
- .yaml
|
- .yaml
|
||||||
@@ -1324,6 +1378,7 @@ ooc:
|
|||||||
|
|
||||||
reStructuredText:
|
reStructuredText:
|
||||||
type: markup
|
type: markup
|
||||||
|
wrap: true
|
||||||
search_term: rst
|
search_term: rst
|
||||||
aliases:
|
aliases:
|
||||||
- rst
|
- rst
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -76,12 +76,14 @@ module Linguist
|
|||||||
db['extnames'][language_name] ||= []
|
db['extnames'][language_name] ||= []
|
||||||
if !db['extnames'][language_name].include?(sample[:extname])
|
if !db['extnames'][language_name].include?(sample[:extname])
|
||||||
db['extnames'][language_name] << sample[:extname]
|
db['extnames'][language_name] << sample[:extname]
|
||||||
|
db['extnames'][language_name].sort!
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if sample[:filename]
|
if sample[:filename]
|
||||||
db['filenames'][language_name] ||= []
|
db['filenames'][language_name] ||= []
|
||||||
db['filenames'][language_name] << sample[:filename]
|
db['filenames'][language_name] << sample[:filename]
|
||||||
|
db['filenames'][language_name].sort!
|
||||||
end
|
end
|
||||||
|
|
||||||
data = File.read(sample[:path])
|
data = File.read(sample[:path])
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ module Linguist
|
|||||||
s.scan(/\s+/)
|
s.scan(/\s+/)
|
||||||
script = s.scan(/\S+/)
|
script = s.scan(/\S+/)
|
||||||
end
|
end
|
||||||
script = script[/[^\d]+/, 0]
|
script = script[/[^\d]+/, 0] if script
|
||||||
return script
|
return script
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
26
samples/ApacheConf/filenames/.htaccess
Normal file
26
samples/ApacheConf/filenames/.htaccess
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
ServerSignature Off
|
||||||
|
RewriteCond %{REQUEST_METHOD} ^(HEAD|TRACE|DELETE|TRACK) [NC,OR]
|
||||||
|
RewriteCond %{THE_REQUEST} (\\r|\\n|%0A|%0D) [NC,OR]
|
||||||
|
|
||||||
|
RewriteCond %{HTTP_REFERER} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
|
||||||
|
RewriteCond %{HTTP_COOKIE} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
|
||||||
|
RewriteCond %{REQUEST_URI} ^/(,|;|:|<|>|”>|”<|/|\\\.\.\\).{0,9999} [NC,OR]
|
||||||
|
|
||||||
|
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
|
||||||
|
RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget) [NC,OR]
|
||||||
|
RewriteCond %{HTTP_USER_AGENT} (winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner) [NC,OR]
|
||||||
|
RewriteCond %{HTTP_USER_AGENT} (libwww-perl|curl|wget|python|nikto|scan) [NC,OR]
|
||||||
|
RewriteCond %{HTTP_USER_AGENT} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC,OR]
|
||||||
|
|
||||||
|
#Block mySQL injects
|
||||||
|
RewriteCond %{QUERY_STRING} (;|<|>|’|”|\)|%0A|%0D|%22|%27|%3C|%3E|%00).*(/\*|union|select|insert|cast|set|declare|drop|update|md5|benchmark) [NC,OR]
|
||||||
|
|
||||||
|
RewriteCond %{QUERY_STRING} \.\./\.\. [OR]
|
||||||
|
|
||||||
|
RewriteCond %{QUERY_STRING} (localhost|loopback|127\.0\.0\.1) [NC,OR]
|
||||||
|
RewriteCond %{QUERY_STRING} \.[a-z0-9] [NC,OR]
|
||||||
|
RewriteCond %{QUERY_STRING} (<|>|’|%0A|%0D|%27|%3C|%3E|%00) [NC]
|
||||||
|
# Note: The final RewriteCond must NOT use the [OR] flag.
|
||||||
|
|
||||||
|
# Return 403 Forbidden error.
|
||||||
|
RewriteRule .* index.php [F]
|
||||||
470
samples/ApacheConf/filenames/apache2.conf
Normal file
470
samples/ApacheConf/filenames/apache2.conf
Normal file
@@ -0,0 +1,470 @@
|
|||||||
|
# This is the main Apache HTTP server configuration file. It contains the
|
||||||
|
# configuration directives that give the server its instructions.
|
||||||
|
# See <URL:http://httpd.apache.org/docs/2.2> for detailed information.
|
||||||
|
# In particular, see
|
||||||
|
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
|
||||||
|
# for a discussion of each configuration directive.
|
||||||
|
#
|
||||||
|
# Do NOT simply read the instructions in here without understanding
|
||||||
|
# what they do. They're here only as hints or reminders. If you are unsure
|
||||||
|
# consult the online docs. You have been warned.
|
||||||
|
#
|
||||||
|
# Configuration and logfile names: If the filenames you specify for many
|
||||||
|
# of the server's control files begin with "/" (or "drive:/" for Win32), the
|
||||||
|
# server will use that explicit path. If the filenames do *not* begin
|
||||||
|
# with "/", the value of ServerRoot is prepended -- so "/var/log/apache2/foo.log"
|
||||||
|
# with ServerRoot set to "" will be interpreted by the
|
||||||
|
# server as "//var/log/apache2/foo.log".
|
||||||
|
|
||||||
|
#
|
||||||
|
# ServerRoot: The top of the directory tree under which the server's
|
||||||
|
# configuration, error, and log files are kept.
|
||||||
|
#
|
||||||
|
# Do not add a slash at the end of the directory path. If you point
|
||||||
|
# ServerRoot at a non-local disk, be sure to point the LockFile directive
|
||||||
|
# at a local disk. If you wish to share the same ServerRoot for multiple
|
||||||
|
# httpd daemons, you will need to change at least LockFile and PidFile.
|
||||||
|
#
|
||||||
|
ServerRoot ""
|
||||||
|
|
||||||
|
#
|
||||||
|
# Listen: Allows you to bind Apache to specific IP addresses and/or
|
||||||
|
# ports, instead of the default. See also the <VirtualHost>
|
||||||
|
# directive.
|
||||||
|
#
|
||||||
|
# Change this to Listen on specific IP addresses as shown below to
|
||||||
|
# prevent Apache from glomming onto all bound IP addresses.
|
||||||
|
#
|
||||||
|
#Listen 12.34.56.78:80
|
||||||
|
Listen 80
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dynamic Shared Object (DSO) Support
|
||||||
|
#
|
||||||
|
# To be able to use the functionality of a module which was built as a DSO you
|
||||||
|
# have to place corresponding `LoadModule' lines at this location so the
|
||||||
|
# directives contained in it are actually available _before_ they are used.
|
||||||
|
# Statically compiled modules (those listed by `httpd -l') do not need
|
||||||
|
# to be loaded here.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# LoadModule foo_module modules/mod_foo.so
|
||||||
|
#
|
||||||
|
LoadModule authn_file_module /usr/lib/apache2/modules/mod_authn_file.so
|
||||||
|
LoadModule authn_dbm_module /usr/lib/apache2/modules/mod_authn_dbm.so
|
||||||
|
LoadModule authn_anon_module /usr/lib/apache2/modules/mod_authn_anon.so
|
||||||
|
LoadModule authn_dbd_module /usr/lib/apache2/modules/mod_authn_dbd.so
|
||||||
|
LoadModule authn_default_module /usr/lib/apache2/modules/mod_authn_default.so
|
||||||
|
LoadModule authn_alias_module /usr/lib/apache2/modules/mod_authn_alias.so
|
||||||
|
LoadModule authz_host_module /usr/lib/apache2/modules/mod_authz_host.so
|
||||||
|
LoadModule authz_groupfile_module /usr/lib/apache2/modules/mod_authz_groupfile.so
|
||||||
|
LoadModule authz_user_module /usr/lib/apache2/modules/mod_authz_user.so
|
||||||
|
LoadModule authz_dbm_module /usr/lib/apache2/modules/mod_authz_dbm.so
|
||||||
|
LoadModule authz_owner_module /usr/lib/apache2/modules/mod_authz_owner.so
|
||||||
|
LoadModule authnz_ldap_module /usr/lib/apache2/modules/mod_authnz_ldap.so
|
||||||
|
LoadModule authz_default_module /usr/lib/apache2/modules/mod_authz_default.so
|
||||||
|
LoadModule auth_basic_module /usr/lib/apache2/modules/mod_auth_basic.so
|
||||||
|
LoadModule auth_digest_module /usr/lib/apache2/modules/mod_auth_digest.so
|
||||||
|
LoadModule file_cache_module /usr/lib/apache2/modules/mod_file_cache.so
|
||||||
|
LoadModule cache_module /usr/lib/apache2/modules/mod_cache.so
|
||||||
|
LoadModule disk_cache_module /usr/lib/apache2/modules/mod_disk_cache.so
|
||||||
|
LoadModule mem_cache_module /usr/lib/apache2/modules/mod_mem_cache.so
|
||||||
|
LoadModule dbd_module /usr/lib/apache2/modules/mod_dbd.so
|
||||||
|
LoadModule dumpio_module /usr/lib/apache2/modules/mod_dumpio.so
|
||||||
|
LoadModule ext_filter_module /usr/lib/apache2/modules/mod_ext_filter.so
|
||||||
|
LoadModule include_module /usr/lib/apache2/modules/mod_include.so
|
||||||
|
LoadModule filter_module /usr/lib/apache2/modules/mod_filter.so
|
||||||
|
LoadModule charset_lite_module /usr/lib/apache2/modules/mod_charset_lite.so
|
||||||
|
LoadModule deflate_module /usr/lib/apache2/modules/mod_deflate.so
|
||||||
|
LoadModule ldap_module /usr/lib/apache2/modules/mod_ldap.so
|
||||||
|
LoadModule log_forensic_module /usr/lib/apache2/modules/mod_log_forensic.so
|
||||||
|
LoadModule env_module /usr/lib/apache2/modules/mod_env.so
|
||||||
|
LoadModule mime_magic_module /usr/lib/apache2/modules/mod_mime_magic.so
|
||||||
|
LoadModule cern_meta_module /usr/lib/apache2/modules/mod_cern_meta.so
|
||||||
|
LoadModule expires_module /usr/lib/apache2/modules/mod_expires.so
|
||||||
|
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
|
||||||
|
LoadModule ident_module /usr/lib/apache2/modules/mod_ident.so
|
||||||
|
LoadModule usertrack_module /usr/lib/apache2/modules/mod_usertrack.so
|
||||||
|
LoadModule unique_id_module /usr/lib/apache2/modules/mod_unique_id.so
|
||||||
|
LoadModule setenvif_module /usr/lib/apache2/modules/mod_setenvif.so
|
||||||
|
LoadModule version_module /usr/lib/apache2/modules/mod_version.so
|
||||||
|
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
|
||||||
|
LoadModule proxy_connect_module /usr/lib/apache2/modules/mod_proxy_connect.so
|
||||||
|
LoadModule proxy_ftp_module /usr/lib/apache2/modules/mod_proxy_ftp.so
|
||||||
|
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
|
||||||
|
LoadModule proxy_ajp_module /usr/lib/apache2/modules/mod_proxy_ajp.so
|
||||||
|
LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
|
||||||
|
LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
|
||||||
|
LoadModule mime_module /usr/lib/apache2/modules/mod_mime.so
|
||||||
|
LoadModule dav_module /usr/lib/apache2/modules/mod_dav.so
|
||||||
|
LoadModule status_module /usr/lib/apache2/modules/mod_status.so
|
||||||
|
LoadModule autoindex_module /usr/lib/apache2/modules/mod_autoindex.so
|
||||||
|
LoadModule asis_module /usr/lib/apache2/modules/mod_asis.so
|
||||||
|
LoadModule info_module /usr/lib/apache2/modules/mod_info.so
|
||||||
|
LoadModule suexec_module /usr/lib/apache2/modules/mod_suexec.so
|
||||||
|
LoadModule cgid_module /usr/lib/apache2/modules/mod_cgid.so
|
||||||
|
LoadModule cgi_module /usr/lib/apache2/modules/mod_cgi.so
|
||||||
|
LoadModule dav_fs_module /usr/lib/apache2/modules/mod_dav_fs.so
|
||||||
|
LoadModule dav_lock_module /usr/lib/apache2/modules/mod_dav_lock.so
|
||||||
|
LoadModule vhost_alias_module /usr/lib/apache2/modules/mod_vhost_alias.so
|
||||||
|
LoadModule negotiation_module /usr/lib/apache2/modules/mod_negotiation.so
|
||||||
|
LoadModule dir_module /usr/lib/apache2/modules/mod_dir.so
|
||||||
|
LoadModule imagemap_module /usr/lib/apache2/modules/mod_imagemap.so
|
||||||
|
LoadModule actions_module /usr/lib/apache2/modules/mod_actions.so
|
||||||
|
LoadModule speling_module /usr/lib/apache2/modules/mod_speling.so
|
||||||
|
LoadModule userdir_module /usr/lib/apache2/modules/mod_userdir.so
|
||||||
|
LoadModule alias_module /usr/lib/apache2/modules/mod_alias.so
|
||||||
|
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
|
||||||
|
|
||||||
|
<IfModule !mpm_netware_module>
|
||||||
|
#
|
||||||
|
# If you wish httpd to run as a different user or group, you must run
|
||||||
|
# httpd as root initially and it will switch.
|
||||||
|
#
|
||||||
|
# User/Group: The name (or #number) of the user/group to run httpd as.
|
||||||
|
# It is usually good practice to create a dedicated user and group for
|
||||||
|
# running httpd, as with most system services.
|
||||||
|
#
|
||||||
|
User daemon
|
||||||
|
Group daemon
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# 'Main' server configuration
|
||||||
|
#
|
||||||
|
# The directives in this section set up the values used by the 'main'
|
||||||
|
# server, which responds to any requests that aren't handled by a
|
||||||
|
# <VirtualHost> definition. These values also provide defaults for
|
||||||
|
# any <VirtualHost> containers you may define later in the file.
|
||||||
|
#
|
||||||
|
# All of these directives may appear inside <VirtualHost> containers,
|
||||||
|
# in which case these default settings will be overridden for the
|
||||||
|
# virtual host being defined.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# ServerAdmin: Your address, where problems with the server should be
|
||||||
|
# e-mailed. This address appears on some server-generated pages, such
|
||||||
|
# as error documents. e.g. admin@your-domain.com
|
||||||
|
#
|
||||||
|
ServerAdmin you@example.com
|
||||||
|
|
||||||
|
#
|
||||||
|
# ServerName gives the name and port that the server uses to identify itself.
|
||||||
|
# This can often be determined automatically, but we recommend you specify
|
||||||
|
# it explicitly to prevent problems during startup.
|
||||||
|
#
|
||||||
|
# If your host doesn't have a registered DNS name, enter its IP address here.
|
||||||
|
#
|
||||||
|
#ServerName www.example.com:80
|
||||||
|
|
||||||
|
#
|
||||||
|
# DocumentRoot: The directory out of which you will serve your
|
||||||
|
# documents. By default, all requests are taken from this directory, but
|
||||||
|
# symbolic links and aliases may be used to point to other locations.
|
||||||
|
#
|
||||||
|
DocumentRoot "/usr/share/apache2/default-site/htdocs"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Each directory to which Apache has access can be configured with respect
|
||||||
|
# to which services and features are allowed and/or disabled in that
|
||||||
|
# directory (and its subdirectories).
|
||||||
|
#
|
||||||
|
# First, we configure the "default" to be a very restrictive set of
|
||||||
|
# features.
|
||||||
|
#
|
||||||
|
<Directory />
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Note that from this point forward you must specifically allow
|
||||||
|
# particular features to be enabled - so if something's not working as
|
||||||
|
# you might expect, make sure that you have specifically enabled it
|
||||||
|
# below.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# This should be changed to whatever you set DocumentRoot to.
|
||||||
|
#
|
||||||
|
<Directory "/usr/share/apache2/default-site/htdocs">
|
||||||
|
#
|
||||||
|
# Possible values for the Options directive are "None", "All",
|
||||||
|
# or any combination of:
|
||||||
|
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
|
||||||
|
#
|
||||||
|
# Note that "MultiViews" must be named *explicitly* --- "Options All"
|
||||||
|
# doesn't give it to you.
|
||||||
|
#
|
||||||
|
# The Options directive is both complicated and important. Please see
|
||||||
|
# http://httpd.apache.org/docs/2.2/mod/core.html#options
|
||||||
|
# for more information.
|
||||||
|
#
|
||||||
|
Options Indexes FollowSymLinks
|
||||||
|
|
||||||
|
#
|
||||||
|
# AllowOverride controls what directives may be placed in .htaccess files.
|
||||||
|
# It can be "All", "None", or any combination of the keywords:
|
||||||
|
# Options FileInfo AuthConfig Limit
|
||||||
|
#
|
||||||
|
AllowOverride None
|
||||||
|
|
||||||
|
#
|
||||||
|
# Controls who can get stuff from this server.
|
||||||
|
#
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
#
|
||||||
|
# DirectoryIndex: sets the file that Apache will serve if a directory
|
||||||
|
# is requested.
|
||||||
|
#
|
||||||
|
<IfModule dir_module>
|
||||||
|
DirectoryIndex index.html
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following lines prevent .htaccess and .htpasswd files from being
|
||||||
|
# viewed by Web clients.
|
||||||
|
#
|
||||||
|
<FilesMatch "^\.ht">
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
Satisfy All
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
#
|
||||||
|
# ErrorLog: The location of the error log file.
|
||||||
|
# If you do not specify an ErrorLog directive within a <VirtualHost>
|
||||||
|
# container, error messages relating to that virtual host will be
|
||||||
|
# logged here. If you *do* define an error logfile for a <VirtualHost>
|
||||||
|
# container, that host's errors will be logged there and not here.
|
||||||
|
#
|
||||||
|
ErrorLog /var/log/apache2/error_log
|
||||||
|
|
||||||
|
#
|
||||||
|
# LogLevel: Control the number of messages logged to the error_log.
|
||||||
|
# Possible values include: debug, info, notice, warn, error, crit,
|
||||||
|
# alert, emerg.
|
||||||
|
#
|
||||||
|
LogLevel warn
|
||||||
|
|
||||||
|
<IfModule log_config_module>
|
||||||
|
#
|
||||||
|
# The following directives define some format nicknames for use with
|
||||||
|
# a CustomLog directive (see below).
|
||||||
|
#
|
||||||
|
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
|
||||||
|
LogFormat "%h %l %u %t \"%r\" %>s %b" common
|
||||||
|
|
||||||
|
<IfModule logio_module>
|
||||||
|
# You need to enable mod_logio.c to use %I and %O
|
||||||
|
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# The location and format of the access logfile (Common Logfile Format).
|
||||||
|
# If you do not define any access logfiles within a <VirtualHost>
|
||||||
|
# container, they will be logged here. Contrariwise, if you *do*
|
||||||
|
# define per-<VirtualHost> access logfiles, transactions will be
|
||||||
|
# logged therein and *not* in this file.
|
||||||
|
#
|
||||||
|
CustomLog /var/log/apache2/access_log common
|
||||||
|
|
||||||
|
#
|
||||||
|
# If you prefer a logfile with access, agent, and referer information
|
||||||
|
# (Combined Logfile Format) you can use the following directive.
|
||||||
|
#
|
||||||
|
#CustomLog /var/log/apache2/access_log combined
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
<IfModule alias_module>
|
||||||
|
#
|
||||||
|
# Redirect: Allows you to tell clients about documents that used to
|
||||||
|
# exist in your server's namespace, but do not anymore. The client
|
||||||
|
# will make a new request for the document at its new location.
|
||||||
|
# Example:
|
||||||
|
# Redirect permanent /foo http://www.example.com/bar
|
||||||
|
|
||||||
|
#
|
||||||
|
# Alias: Maps web paths into filesystem paths and is used to
|
||||||
|
# access content that does not live under the DocumentRoot.
|
||||||
|
# Example:
|
||||||
|
# Alias /webpath /full/filesystem/path
|
||||||
|
#
|
||||||
|
# If you include a trailing / on /webpath then the server will
|
||||||
|
# require it to be present in the URL. You will also likely
|
||||||
|
# need to provide a <Directory> section to allow access to
|
||||||
|
# the filesystem path.
|
||||||
|
|
||||||
|
#
|
||||||
|
# ScriptAlias: This controls which directories contain server scripts.
|
||||||
|
# ScriptAliases are essentially the same as Aliases, except that
|
||||||
|
# documents in the target directory are treated as applications and
|
||||||
|
# run by the server when requested rather than as documents sent to the
|
||||||
|
# client. The same rules about trailing "/" apply to ScriptAlias
|
||||||
|
# directives as to Alias.
|
||||||
|
#
|
||||||
|
ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin/"
|
||||||
|
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
<IfModule cgid_module>
|
||||||
|
#
|
||||||
|
# ScriptSock: On threaded servers, designate the path to the UNIX
|
||||||
|
# socket used to communicate with the CGI daemon of mod_cgid.
|
||||||
|
#
|
||||||
|
#Scriptsock /var/run/apache2/cgisock
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# "/usr/lib/cgi-bin" should be changed to whatever your ScriptAliased
|
||||||
|
# CGI directory exists, if you have that configured.
|
||||||
|
#
|
||||||
|
<Directory "/usr/lib/cgi-bin">
|
||||||
|
AllowOverride None
|
||||||
|
Options None
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
#
|
||||||
|
# DefaultType: the default MIME type the server will use for a document
|
||||||
|
# if it cannot otherwise determine one, such as from filename extensions.
|
||||||
|
# If your server contains mostly text or HTML documents, "text/plain" is
|
||||||
|
# a good value. If most of your content is binary, such as applications
|
||||||
|
# or images, you may want to use "application/octet-stream" instead to
|
||||||
|
# keep browsers from trying to display binary files as though they are
|
||||||
|
# text.
|
||||||
|
#
|
||||||
|
DefaultType text/plain
|
||||||
|
|
||||||
|
<IfModule mime_module>
|
||||||
|
#
|
||||||
|
# TypesConfig points to the file containing the list of mappings from
|
||||||
|
# filename extension to MIME-type.
|
||||||
|
#
|
||||||
|
TypesConfig /etc/apache2/mime.types
|
||||||
|
|
||||||
|
#
|
||||||
|
# AddType allows you to add to or override the MIME configuration
|
||||||
|
# file specified in TypesConfig for specific file types.
|
||||||
|
#
|
||||||
|
#AddType application/x-gzip .tgz
|
||||||
|
#
|
||||||
|
# AddEncoding allows you to have certain browsers uncompress
|
||||||
|
# information on the fly. Note: Not all browsers support this.
|
||||||
|
#
|
||||||
|
#AddEncoding x-compress .Z
|
||||||
|
#AddEncoding x-gzip .gz .tgz
|
||||||
|
#
|
||||||
|
# If the AddEncoding directives above are commented-out, then you
|
||||||
|
# probably should define those extensions to indicate media types:
|
||||||
|
#
|
||||||
|
AddType application/x-compress .Z
|
||||||
|
AddType application/x-gzip .gz .tgz
|
||||||
|
|
||||||
|
#
|
||||||
|
# AddHandler allows you to map certain file extensions to "handlers":
|
||||||
|
# actions unrelated to filetype. These can be either built into the server
|
||||||
|
# or added with the Action directive (see below)
|
||||||
|
#
|
||||||
|
# To use CGI scripts outside of ScriptAliased directories:
|
||||||
|
# (You will also need to add "ExecCGI" to the "Options" directive.)
|
||||||
|
#
|
||||||
|
#AddHandler cgi-script .cgi
|
||||||
|
|
||||||
|
# For type maps (negotiated resources):
|
||||||
|
#AddHandler type-map var
|
||||||
|
|
||||||
|
#
|
||||||
|
# Filters allow you to process content before it is sent to the client.
|
||||||
|
#
|
||||||
|
# To parse .shtml files for server-side includes (SSI):
|
||||||
|
# (You will also need to add "Includes" to the "Options" directive.)
|
||||||
|
#
|
||||||
|
#AddType text/html .shtml
|
||||||
|
#AddOutputFilter INCLUDES .shtml
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# The mod_mime_magic module allows the server to use various hints from the
|
||||||
|
# contents of the file itself to determine its type. The MIMEMagicFile
|
||||||
|
# directive tells the module where the hint definitions are located.
|
||||||
|
#
|
||||||
|
#MIMEMagicFile /etc/apache2/magic
|
||||||
|
|
||||||
|
#
|
||||||
|
# Customizable error responses come in three flavors:
|
||||||
|
# 1) plain text 2) local redirects 3) external redirects
|
||||||
|
#
|
||||||
|
# Some examples:
|
||||||
|
#ErrorDocument 500 "The server made a boo boo."
|
||||||
|
#ErrorDocument 404 /missing.html
|
||||||
|
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
|
||||||
|
#ErrorDocument 402 http://www.example.com/subscription_info.html
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# EnableMMAP and EnableSendfile: On systems that support it,
|
||||||
|
# memory-mapping or the sendfile syscall is used to deliver
|
||||||
|
# files. This usually improves server performance, but must
|
||||||
|
# be turned off when serving from networked-mounted
|
||||||
|
# filesystems or if support for these functions is otherwise
|
||||||
|
# broken on your system.
|
||||||
|
#
|
||||||
|
#EnableMMAP off
|
||||||
|
#EnableSendfile off
|
||||||
|
|
||||||
|
# Supplemental configuration
|
||||||
|
#
|
||||||
|
# The configuration files in the /etc/apache2/extra/ directory can be
|
||||||
|
# included to add extra features or to modify the default configuration of
|
||||||
|
# the server, or you may simply copy their contents here and change as
|
||||||
|
# necessary.
|
||||||
|
|
||||||
|
# Server-pool management (MPM specific)
|
||||||
|
#Include /etc/apache2/extra/httpd-mpm.conf
|
||||||
|
|
||||||
|
# Multi-language error messages
|
||||||
|
#Include /etc/apache2/extra/httpd-multilang-errordoc.conf
|
||||||
|
|
||||||
|
# Fancy directory listings
|
||||||
|
#Include /etc/apache2/extra/httpd-autoindex.conf
|
||||||
|
|
||||||
|
# Language settings
|
||||||
|
#Include /etc/apache2/extra/httpd-languages.conf
|
||||||
|
|
||||||
|
# User home directories
|
||||||
|
#Include /etc/apache2/extra/httpd-userdir.conf
|
||||||
|
|
||||||
|
# Real-time info on requests and configuration
|
||||||
|
#Include /etc/apache2/extra/httpd-info.conf
|
||||||
|
|
||||||
|
# Virtual hosts
|
||||||
|
#Include /etc/apache2/extra/httpd-vhosts.conf
|
||||||
|
|
||||||
|
# Local access to the Apache HTTP Server Manual
|
||||||
|
#Include /etc/apache2/extra/httpd-manual.conf
|
||||||
|
|
||||||
|
# Distributed authoring and versioning (WebDAV)
|
||||||
|
#Include /etc/apache2/extra/httpd-dav.conf
|
||||||
|
|
||||||
|
# Various default settings
|
||||||
|
#Include /etc/apache2/extra/httpd-default.conf
|
||||||
|
|
||||||
|
# Secure (SSL/TLS) connections
|
||||||
|
#Include /etc/apache2/extra/httpd-ssl.conf
|
||||||
|
#
|
||||||
|
# Note: The following must must be present to support
|
||||||
|
# starting without SSL on platforms with no /dev/random equivalent
|
||||||
|
# but a statically compiled-in mod_ssl.
|
||||||
|
#
|
||||||
|
<IfModule ssl_module>
|
||||||
|
SSLRandomSeed startup builtin
|
||||||
|
SSLRandomSeed connect builtin
|
||||||
|
</IfModule>
|
||||||
500
samples/ApacheConf/filenames/httpd.conf
Normal file
500
samples/ApacheConf/filenames/httpd.conf
Normal file
@@ -0,0 +1,500 @@
|
|||||||
|
#
|
||||||
|
# This is the main Apache HTTP server configuration file. It contains the
|
||||||
|
# configuration directives that give the server its instructions.
|
||||||
|
# See <URL:http://httpd.apache.org/docs/2.2> for detailed information.
|
||||||
|
# In particular, see
|
||||||
|
# <URL:http://httpd.apache.org/docs/2.2/mod/directives.html>
|
||||||
|
# for a discussion of each configuration directive.
|
||||||
|
#
|
||||||
|
# Do NOT simply read the instructions in here without understanding
|
||||||
|
# what they do. They're here only as hints or reminders. If you are unsure
|
||||||
|
# consult the online docs. You have been warned.
|
||||||
|
#
|
||||||
|
# Configuration and logfile names: If the filenames you specify for many
|
||||||
|
# of the server's control files begin with "/" (or "drive:/" for Win32), the
|
||||||
|
# server will use that explicit path. If the filenames do *not* begin
|
||||||
|
# with "/", the value of ServerRoot is prepended -- so "log/foo_log"
|
||||||
|
# with ServerRoot set to "/usr" will be interpreted by the
|
||||||
|
# server as "/usr/log/foo_log".
|
||||||
|
|
||||||
|
#
|
||||||
|
# ServerRoot: The top of the directory tree under which the server's
|
||||||
|
# configuration, error, and log files are kept.
|
||||||
|
#
|
||||||
|
# Do not add a slash at the end of the directory path. If you point
|
||||||
|
# ServerRoot at a non-local disk, be sure to point the LockFile directive
|
||||||
|
# at a local disk. If you wish to share the same ServerRoot for multiple
|
||||||
|
# httpd daemons, you will need to change at least LockFile and PidFile.
|
||||||
|
#
|
||||||
|
ServerRoot "/usr"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Listen: Allows you to bind Apache to specific IP addresses and/or
|
||||||
|
# ports, instead of the default. See also the <VirtualHost>
|
||||||
|
# directive.
|
||||||
|
#
|
||||||
|
# Change this to Listen on specific IP addresses as shown below to
|
||||||
|
# prevent Apache from glomming onto all bound IP addresses.
|
||||||
|
#
|
||||||
|
#Listen 12.34.56.78:80
|
||||||
|
Listen 80
|
||||||
|
|
||||||
|
#
|
||||||
|
# Dynamic Shared Object (DSO) Support
|
||||||
|
#
|
||||||
|
# To be able to use the functionality of a module which was built as a DSO you
|
||||||
|
# have to place corresponding `LoadModule' lines at this location so the
|
||||||
|
# directives contained in it are actually available _before_ they are used.
|
||||||
|
# Statically compiled modules (those listed by `httpd -l') do not need
|
||||||
|
# to be loaded here.
|
||||||
|
#
|
||||||
|
# Example:
|
||||||
|
# LoadModule foo_module modules/mod_foo.so
|
||||||
|
#
|
||||||
|
LoadModule authn_file_module libexec/apache2/mod_authn_file.so
|
||||||
|
LoadModule authn_dbm_module libexec/apache2/mod_authn_dbm.so
|
||||||
|
LoadModule authn_anon_module libexec/apache2/mod_authn_anon.so
|
||||||
|
LoadModule authn_dbd_module libexec/apache2/mod_authn_dbd.so
|
||||||
|
LoadModule authn_default_module libexec/apache2/mod_authn_default.so
|
||||||
|
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
|
||||||
|
LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
|
||||||
|
LoadModule authz_user_module libexec/apache2/mod_authz_user.so
|
||||||
|
LoadModule authz_dbm_module libexec/apache2/mod_authz_dbm.so
|
||||||
|
LoadModule authz_owner_module libexec/apache2/mod_authz_owner.so
|
||||||
|
LoadModule authz_default_module libexec/apache2/mod_authz_default.so
|
||||||
|
LoadModule auth_basic_module libexec/apache2/mod_auth_basic.so
|
||||||
|
LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so
|
||||||
|
LoadModule cache_module libexec/apache2/mod_cache.so
|
||||||
|
LoadModule disk_cache_module libexec/apache2/mod_disk_cache.so
|
||||||
|
LoadModule mem_cache_module libexec/apache2/mod_mem_cache.so
|
||||||
|
LoadModule dbd_module libexec/apache2/mod_dbd.so
|
||||||
|
LoadModule dumpio_module libexec/apache2/mod_dumpio.so
|
||||||
|
LoadModule reqtimeout_module libexec/apache2/mod_reqtimeout.so
|
||||||
|
LoadModule ext_filter_module libexec/apache2/mod_ext_filter.so
|
||||||
|
LoadModule include_module libexec/apache2/mod_include.so
|
||||||
|
LoadModule filter_module libexec/apache2/mod_filter.so
|
||||||
|
LoadModule substitute_module libexec/apache2/mod_substitute.so
|
||||||
|
LoadModule deflate_module libexec/apache2/mod_deflate.so
|
||||||
|
LoadModule log_config_module libexec/apache2/mod_log_config.so
|
||||||
|
LoadModule log_forensic_module libexec/apache2/mod_log_forensic.so
|
||||||
|
LoadModule logio_module libexec/apache2/mod_logio.so
|
||||||
|
LoadModule env_module libexec/apache2/mod_env.so
|
||||||
|
LoadModule mime_magic_module libexec/apache2/mod_mime_magic.so
|
||||||
|
LoadModule cern_meta_module libexec/apache2/mod_cern_meta.so
|
||||||
|
LoadModule expires_module libexec/apache2/mod_expires.so
|
||||||
|
LoadModule headers_module libexec/apache2/mod_headers.so
|
||||||
|
LoadModule ident_module libexec/apache2/mod_ident.so
|
||||||
|
LoadModule usertrack_module libexec/apache2/mod_usertrack.so
|
||||||
|
#LoadModule unique_id_module libexec/apache2/mod_unique_id.so
|
||||||
|
LoadModule setenvif_module libexec/apache2/mod_setenvif.so
|
||||||
|
LoadModule version_module libexec/apache2/mod_version.so
|
||||||
|
LoadModule proxy_module libexec/apache2/mod_proxy.so
|
||||||
|
LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
|
||||||
|
LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
|
||||||
|
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
|
||||||
|
LoadModule proxy_scgi_module libexec/apache2/mod_proxy_scgi.so
|
||||||
|
LoadModule proxy_ajp_module libexec/apache2/mod_proxy_ajp.so
|
||||||
|
LoadModule proxy_balancer_module libexec/apache2/mod_proxy_balancer.so
|
||||||
|
LoadModule ssl_module libexec/apache2/mod_ssl.so
|
||||||
|
LoadModule mime_module libexec/apache2/mod_mime.so
|
||||||
|
LoadModule dav_module libexec/apache2/mod_dav.so
|
||||||
|
LoadModule status_module libexec/apache2/mod_status.so
|
||||||
|
LoadModule autoindex_module libexec/apache2/mod_autoindex.so
|
||||||
|
LoadModule asis_module libexec/apache2/mod_asis.so
|
||||||
|
LoadModule info_module libexec/apache2/mod_info.so
|
||||||
|
LoadModule cgi_module libexec/apache2/mod_cgi.so
|
||||||
|
LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
|
||||||
|
LoadModule vhost_alias_module libexec/apache2/mod_vhost_alias.so
|
||||||
|
LoadModule negotiation_module libexec/apache2/mod_negotiation.so
|
||||||
|
LoadModule dir_module libexec/apache2/mod_dir.so
|
||||||
|
LoadModule imagemap_module libexec/apache2/mod_imagemap.so
|
||||||
|
LoadModule actions_module libexec/apache2/mod_actions.so
|
||||||
|
LoadModule speling_module libexec/apache2/mod_speling.so
|
||||||
|
LoadModule userdir_module libexec/apache2/mod_userdir.so
|
||||||
|
LoadModule alias_module libexec/apache2/mod_alias.so
|
||||||
|
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
|
||||||
|
#LoadModule perl_module libexec/apache2/mod_perl.so
|
||||||
|
#LoadModule php5_module libexec/apache2/libphp5.so
|
||||||
|
#LoadModule hfs_apple_module libexec/apache2/mod_hfs_apple.so
|
||||||
|
|
||||||
|
<IfModule !mpm_netware_module>
|
||||||
|
<IfModule !mpm_winnt_module>
|
||||||
|
#
|
||||||
|
# If you wish httpd to run as a different user or group, you must run
|
||||||
|
# httpd as root initially and it will switch.
|
||||||
|
#
|
||||||
|
# User/Group: The name (or #number) of the user/group to run httpd as.
|
||||||
|
# It is usually good practice to create a dedicated user and group for
|
||||||
|
# running httpd, as with most system services.
|
||||||
|
#
|
||||||
|
User _www
|
||||||
|
Group _www
|
||||||
|
|
||||||
|
</IfModule>
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
# 'Main' server configuration
|
||||||
|
#
|
||||||
|
# The directives in this section set up the values used by the 'main'
|
||||||
|
# server, which responds to any requests that aren't handled by a
|
||||||
|
# <VirtualHost> definition. These values also provide defaults for
|
||||||
|
# any <VirtualHost> containers you may define later in the file.
|
||||||
|
#
|
||||||
|
# All of these directives may appear inside <VirtualHost> containers,
|
||||||
|
# in which case these default settings will be overridden for the
|
||||||
|
# virtual host being defined.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# ServerAdmin: Your address, where problems with the server should be
|
||||||
|
# e-mailed. This address appears on some server-generated pages, such
|
||||||
|
# as error documents. e.g. admin@your-domain.com
|
||||||
|
#
|
||||||
|
ServerAdmin you@example.com
|
||||||
|
|
||||||
|
#
|
||||||
|
# ServerName gives the name and port that the server uses to identify itself.
|
||||||
|
# This can often be determined automatically, but we recommend you specify
|
||||||
|
# it explicitly to prevent problems during startup.
|
||||||
|
#
|
||||||
|
# If your host doesn't have a registered DNS name, enter its IP address here.
|
||||||
|
#
|
||||||
|
#ServerName www.example.com:80
|
||||||
|
|
||||||
|
#
|
||||||
|
# DocumentRoot: The directory out of which you will serve your
|
||||||
|
# documents. By default, all requests are taken from this directory, but
|
||||||
|
# symbolic links and aliases may be used to point to other locations.
|
||||||
|
#
|
||||||
|
DocumentRoot "/Library/WebServer/Documents"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Each directory to which Apache has access can be configured with respect
|
||||||
|
# to which services and features are allowed and/or disabled in that
|
||||||
|
# directory (and its subdirectories).
|
||||||
|
#
|
||||||
|
# First, we configure the "default" to be a very restrictive set of
|
||||||
|
# features.
|
||||||
|
#
|
||||||
|
<Directory />
|
||||||
|
Options FollowSymLinks
|
||||||
|
AllowOverride None
|
||||||
|
Order deny,allow
|
||||||
|
Deny from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Note that from this point forward you must specifically allow
|
||||||
|
# particular features to be enabled - so if something's not working as
|
||||||
|
# you might expect, make sure that you have specifically enabled it
|
||||||
|
# below.
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# This should be changed to whatever you set DocumentRoot to.
|
||||||
|
#
|
||||||
|
<Directory "/Library/WebServer/Documents">
|
||||||
|
#
|
||||||
|
# Possible values for the Options directive are "None", "All",
|
||||||
|
# or any combination of:
|
||||||
|
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
|
||||||
|
#
|
||||||
|
# Note that "MultiViews" must be named *explicitly* --- "Options All"
|
||||||
|
# doesn't give it to you.
|
||||||
|
#
|
||||||
|
# The Options directive is both complicated and important. Please see
|
||||||
|
# http://httpd.apache.org/docs/2.2/mod/core.html#options
|
||||||
|
# for more information.
|
||||||
|
#
|
||||||
|
Options Indexes FollowSymLinks MultiViews
|
||||||
|
|
||||||
|
#
|
||||||
|
# AllowOverride controls what directives may be placed in .htaccess files.
|
||||||
|
# It can be "All", "None", or any combination of the keywords:
|
||||||
|
# Options FileInfo AuthConfig Limit
|
||||||
|
#
|
||||||
|
AllowOverride None
|
||||||
|
|
||||||
|
#
|
||||||
|
# Controls who can get stuff from this server.
|
||||||
|
#
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
#
|
||||||
|
# DirectoryIndex: sets the file that Apache will serve if a directory
|
||||||
|
# is requested.
|
||||||
|
#
|
||||||
|
<IfModule dir_module>
|
||||||
|
DirectoryIndex index.html
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# The following lines prevent .htaccess and .htpasswd files from being
|
||||||
|
# viewed by Web clients.
|
||||||
|
#
|
||||||
|
<FilesMatch "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
Satisfy All
|
||||||
|
</FilesMatch>
|
||||||
|
|
||||||
|
#
|
||||||
|
# Apple specific filesystem protection.
|
||||||
|
#
|
||||||
|
<Files "rsrc">
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
Satisfy All
|
||||||
|
</Files>
|
||||||
|
<DirectoryMatch ".*\.\.namedfork">
|
||||||
|
Order allow,deny
|
||||||
|
Deny from all
|
||||||
|
Satisfy All
|
||||||
|
</DirectoryMatch>
|
||||||
|
|
||||||
|
#
|
||||||
|
# ErrorLog: The location of the error log file.
|
||||||
|
# If you do not specify an ErrorLog directive within a <VirtualHost>
|
||||||
|
# container, error messages relating to that virtual host will be
|
||||||
|
# logged here. If you *do* define an error logfile for a <VirtualHost>
|
||||||
|
# container, that host's errors will be logged there and not here.
|
||||||
|
#
|
||||||
|
ErrorLog "/private/var/log/apache2/error_log"
|
||||||
|
|
||||||
|
#
|
||||||
|
# LogLevel: Control the number of messages logged to the error_log.
|
||||||
|
# Possible values include: debug, info, notice, warn, error, crit,
|
||||||
|
# alert, emerg.
|
||||||
|
#
|
||||||
|
LogLevel warn
|
||||||
|
|
||||||
|
<IfModule log_config_module>
|
||||||
|
#
|
||||||
|
# The following directives define some format nicknames for use with
|
||||||
|
# a CustomLog directive (see below).
|
||||||
|
#
|
||||||
|
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
|
||||||
|
LogFormat "%h %l %u %t \"%r\" %>s %b" common
|
||||||
|
|
||||||
|
<IfModule logio_module>
|
||||||
|
# You need to enable mod_logio.c to use %I and %O
|
||||||
|
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# The location and format of the access logfile (Common Logfile Format).
|
||||||
|
# If you do not define any access logfiles within a <VirtualHost>
|
||||||
|
# container, they will be logged here. Contrariwise, if you *do*
|
||||||
|
# define per-<VirtualHost> access logfiles, transactions will be
|
||||||
|
# logged therein and *not* in this file.
|
||||||
|
#
|
||||||
|
CustomLog "/private/var/log/apache2/access_log" common
|
||||||
|
|
||||||
|
#
|
||||||
|
# If you prefer a logfile with access, agent, and referer information
|
||||||
|
# (Combined Logfile Format) you can use the following directive.
|
||||||
|
#
|
||||||
|
#CustomLog "/private/var/log/apache2/access_log" combined
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
<IfModule alias_module>
|
||||||
|
#
|
||||||
|
# Redirect: Allows you to tell clients about documents that used to
|
||||||
|
# exist in your server's namespace, but do not anymore. The client
|
||||||
|
# will make a new request for the document at its new location.
|
||||||
|
# Example:
|
||||||
|
# Redirect permanent /foo http://www.example.com/bar
|
||||||
|
|
||||||
|
#
|
||||||
|
# Alias: Maps web paths into filesystem paths and is used to
|
||||||
|
# access content that does not live under the DocumentRoot.
|
||||||
|
# Example:
|
||||||
|
# Alias /webpath /full/filesystem/path
|
||||||
|
#
|
||||||
|
# If you include a trailing / on /webpath then the server will
|
||||||
|
# require it to be present in the URL. You will also likely
|
||||||
|
# need to provide a <Directory> section to allow access to
|
||||||
|
# the filesystem path.
|
||||||
|
|
||||||
|
#
|
||||||
|
# ScriptAlias: This controls which directories contain server scripts.
|
||||||
|
# ScriptAliases are essentially the same as Aliases, except that
|
||||||
|
# documents in the target directory are treated as applications and
|
||||||
|
# run by the server when requested rather than as documents sent to the
|
||||||
|
# client. The same rules about trailing "/" apply to ScriptAlias
|
||||||
|
# directives as to Alias.
|
||||||
|
#
|
||||||
|
ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) "/Library/WebServer/CGI-Executables/$1"
|
||||||
|
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
<IfModule cgid_module>
|
||||||
|
#
|
||||||
|
# ScriptSock: On threaded servers, designate the path to the UNIX
|
||||||
|
# socket used to communicate with the CGI daemon of mod_cgid.
|
||||||
|
#
|
||||||
|
#Scriptsock /private/var/run/cgisock
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# "/Library/WebServer/CGI-Executables" should be changed to whatever your ScriptAliased
|
||||||
|
# CGI directory exists, if you have that configured.
|
||||||
|
#
|
||||||
|
<Directory "/Library/WebServer/CGI-Executables">
|
||||||
|
AllowOverride None
|
||||||
|
Options None
|
||||||
|
Order allow,deny
|
||||||
|
Allow from all
|
||||||
|
</Directory>
|
||||||
|
|
||||||
|
#
|
||||||
|
# DefaultType: the default MIME type the server will use for a document
|
||||||
|
# if it cannot otherwise determine one, such as from filename extensions.
|
||||||
|
# If your server contains mostly text or HTML documents, "text/plain" is
|
||||||
|
# a good value. If most of your content is binary, such as applications
|
||||||
|
# or images, you may want to use "application/octet-stream" instead to
|
||||||
|
# keep browsers from trying to display binary files as though they are
|
||||||
|
# text.
|
||||||
|
#
|
||||||
|
DefaultType text/plain
|
||||||
|
|
||||||
|
<IfModule mime_module>
|
||||||
|
#
|
||||||
|
# TypesConfig points to the file containing the list of mappings from
|
||||||
|
# filename extension to MIME-type.
|
||||||
|
#
|
||||||
|
TypesConfig /private/etc/apache2/mime.types
|
||||||
|
|
||||||
|
#
|
||||||
|
# AddType allows you to add to or override the MIME configuration
|
||||||
|
# file specified in TypesConfig for specific file types.
|
||||||
|
#
|
||||||
|
#AddType application/x-gzip .tgz
|
||||||
|
#
|
||||||
|
# AddEncoding allows you to have certain browsers uncompress
|
||||||
|
# information on the fly. Note: Not all browsers support this.
|
||||||
|
#
|
||||||
|
#AddEncoding x-compress .Z
|
||||||
|
#AddEncoding x-gzip .gz .tgz
|
||||||
|
#
|
||||||
|
# If the AddEncoding directives above are commented-out, then you
|
||||||
|
# probably should define those extensions to indicate media types:
|
||||||
|
#
|
||||||
|
AddType application/x-compress .Z
|
||||||
|
AddType application/x-gzip .gz .tgz
|
||||||
|
|
||||||
|
#
|
||||||
|
# AddHandler allows you to map certain file extensions to "handlers":
|
||||||
|
# actions unrelated to filetype. These can be either built into the server
|
||||||
|
# or added with the Action directive (see below)
|
||||||
|
#
|
||||||
|
# To use CGI scripts outside of ScriptAliased directories:
|
||||||
|
# (You will also need to add "ExecCGI" to the "Options" directive.)
|
||||||
|
#
|
||||||
|
#AddHandler cgi-script .cgi
|
||||||
|
|
||||||
|
# For type maps (negotiated resources):
|
||||||
|
#AddHandler type-map var
|
||||||
|
|
||||||
|
#
|
||||||
|
# Filters allow you to process content before it is sent to the client.
|
||||||
|
#
|
||||||
|
# To parse .shtml files for server-side includes (SSI):
|
||||||
|
# (You will also need to add "Includes" to the "Options" directive.)
|
||||||
|
#
|
||||||
|
#AddType text/html .shtml
|
||||||
|
#AddOutputFilter INCLUDES .shtml
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
#
|
||||||
|
# The mod_mime_magic module allows the server to use various hints from the
|
||||||
|
# contents of the file itself to determine its type. The MIMEMagicFile
|
||||||
|
# directive tells the module where the hint definitions are located.
|
||||||
|
#
|
||||||
|
#MIMEMagicFile /private/etc/apache2/magic
|
||||||
|
|
||||||
|
#
|
||||||
|
# Customizable error responses come in three flavors:
|
||||||
|
# 1) plain text 2) local redirects 3) external redirects
|
||||||
|
#
|
||||||
|
# Some examples:
|
||||||
|
#ErrorDocument 500 "The server made a boo boo."
|
||||||
|
#ErrorDocument 404 /missing.html
|
||||||
|
#ErrorDocument 404 "/cgi-bin/missing_handler.pl"
|
||||||
|
#ErrorDocument 402 http://www.example.com/subscription_info.html
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# MaxRanges: Maximum number of Ranges in a request before
|
||||||
|
# returning the entire resource, or one of the special
|
||||||
|
# values 'default', 'none' or 'unlimited'.
|
||||||
|
# Default setting is to accept 200 Ranges.
|
||||||
|
#MaxRanges unlimited
|
||||||
|
|
||||||
|
#
|
||||||
|
# EnableMMAP and EnableSendfile: On systems that support it,
|
||||||
|
# memory-mapping or the sendfile syscall is used to deliver
|
||||||
|
# files. This usually improves server performance, but must
|
||||||
|
# be turned off when serving from networked-mounted
|
||||||
|
# filesystems or if support for these functions is otherwise
|
||||||
|
# broken on your system.
|
||||||
|
#
|
||||||
|
#EnableMMAP off
|
||||||
|
#EnableSendfile off
|
||||||
|
|
||||||
|
# 6894961
|
||||||
|
TraceEnable off
|
||||||
|
|
||||||
|
# Supplemental configuration
|
||||||
|
#
|
||||||
|
# The configuration files in the /private/etc/apache2/extra/ directory can be
|
||||||
|
# included to add extra features or to modify the default configuration of
|
||||||
|
# the server, or you may simply copy their contents here and change as
|
||||||
|
# necessary.
|
||||||
|
|
||||||
|
# Server-pool management (MPM specific)
|
||||||
|
Include /private/etc/apache2/extra/httpd-mpm.conf
|
||||||
|
|
||||||
|
# Multi-language error messages
|
||||||
|
#Include /private/etc/apache2/extra/httpd-multilang-errordoc.conf
|
||||||
|
|
||||||
|
# Fancy directory listings
|
||||||
|
Include /private/etc/apache2/extra/httpd-autoindex.conf
|
||||||
|
|
||||||
|
# Language settings
|
||||||
|
Include /private/etc/apache2/extra/httpd-languages.conf
|
||||||
|
|
||||||
|
# User home directories
|
||||||
|
Include /private/etc/apache2/extra/httpd-userdir.conf
|
||||||
|
|
||||||
|
# Real-time info on requests and configuration
|
||||||
|
#Include /private/etc/apache2/extra/httpd-info.conf
|
||||||
|
|
||||||
|
# Virtual hosts
|
||||||
|
#Include /private/etc/apache2/extra/httpd-vhosts.conf
|
||||||
|
|
||||||
|
# Local access to the Apache HTTP Server Manual
|
||||||
|
Include /private/etc/apache2/extra/httpd-manual.conf
|
||||||
|
|
||||||
|
# Distributed authoring and versioning (WebDAV)
|
||||||
|
#Include /private/etc/apache2/extra/httpd-dav.conf
|
||||||
|
|
||||||
|
# Various default settings
|
||||||
|
#Include /private/etc/apache2/extra/httpd-default.conf
|
||||||
|
|
||||||
|
# Secure (SSL/TLS) connections
|
||||||
|
#Include /private/etc/apache2/extra/httpd-ssl.conf
|
||||||
|
#
|
||||||
|
# Note: The following must must be present to support
|
||||||
|
# starting without SSL on platforms with no /dev/random equivalent
|
||||||
|
# but a statically compiled-in mod_ssl.
|
||||||
|
#
|
||||||
|
<IfModule ssl_module>
|
||||||
|
SSLRandomSeed startup builtin
|
||||||
|
SSLRandomSeed connect builtin
|
||||||
|
</IfModule>
|
||||||
|
|
||||||
|
Include /private/etc/apache2/other/*.conf
|
||||||
@@ -1,13 +1,3 @@
|
|||||||
(************************************************************************)
|
|
||||||
(* v * The Coq Proof Assistant / The Coq Development Team *)
|
|
||||||
(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2010 *)
|
|
||||||
(* \VV/ **************************************************************)
|
|
||||||
(* // * This file is distributed under the terms of the *)
|
|
||||||
(* * GNU Lesser General Public License Version 2.1 *)
|
|
||||||
(************************************************************************)
|
|
||||||
|
|
||||||
(** This file is deprecated, for a tree on list, use [Mergesort.v]. *)
|
|
||||||
|
|
||||||
(** A development of Treesort on Heap trees. It has an average
|
(** A development of Treesort on Heap trees. It has an average
|
||||||
complexity of O(n.log n) but of O(n²) in the worst case (e.g. if
|
complexity of O(n.log n) but of O(n²) in the worst case (e.g. if
|
||||||
the list is already sorted) *)
|
the list is already sorted) *)
|
||||||
@@ -88,9 +78,9 @@ Section defs.
|
|||||||
forall P:Tree -> Type,
|
forall P:Tree -> Type,
|
||||||
P Tree_Leaf ->
|
P Tree_Leaf ->
|
||||||
(forall (a:A) (T1 T2:Tree),
|
(forall (a:A) (T1 T2:Tree),
|
||||||
leA_Tree a T1 ->
|
leA_Tree a T1 ->
|
||||||
leA_Tree a T2 ->
|
leA_Tree a T2 ->
|
||||||
is_heap T1 -> P T1 -> is_heap T2 -> P T2 -> P (Tree_Node a T1 T2)) ->
|
is_heap T1 -> P T1 -> is_heap T2 -> P T2 -> P (Tree_Node a T1 T2)) ->
|
||||||
forall T:Tree, is_heap T -> P T.
|
forall T:Tree, is_heap T -> P T.
|
||||||
Proof.
|
Proof.
|
||||||
simple induction T; auto with datatypes.
|
simple induction T; auto with datatypes.
|
||||||
@@ -105,9 +95,9 @@ Section defs.
|
|||||||
forall P:Tree -> Set,
|
forall P:Tree -> Set,
|
||||||
P Tree_Leaf ->
|
P Tree_Leaf ->
|
||||||
(forall (a:A) (T1 T2:Tree),
|
(forall (a:A) (T1 T2:Tree),
|
||||||
leA_Tree a T1 ->
|
leA_Tree a T1 ->
|
||||||
leA_Tree a T2 ->
|
leA_Tree a T2 ->
|
||||||
is_heap T1 -> P T1 -> is_heap T2 -> P T2 -> P (Tree_Node a T1 T2)) ->
|
is_heap T1 -> P T1 -> is_heap T2 -> P T2 -> P (Tree_Node a T1 T2)) ->
|
||||||
forall T:Tree, is_heap T -> P T.
|
forall T:Tree, is_heap T -> P T.
|
||||||
Proof.
|
Proof.
|
||||||
simple induction T; auto with datatypes.
|
simple induction T; auto with datatypes.
|
||||||
@@ -135,13 +125,13 @@ Section defs.
|
|||||||
(forall a, HdRel leA a l1 -> HdRel leA a l2 -> HdRel leA a l) ->
|
(forall a, HdRel leA a l1 -> HdRel leA a l2 -> HdRel leA a l) ->
|
||||||
merge_lem l1 l2.
|
merge_lem l1 l2.
|
||||||
Require Import Morphisms.
|
Require Import Morphisms.
|
||||||
|
|
||||||
Instance: Equivalence (@meq A).
|
Instance: Equivalence (@meq A).
|
||||||
Proof. constructor; auto with datatypes. red. apply meq_trans. Defined.
|
Proof. constructor; auto with datatypes. red. apply meq_trans. Defined.
|
||||||
|
|
||||||
Instance: Proper (@meq A ++> @meq _ ++> @meq _) (@munion A).
|
Instance: Proper (@meq A ++> @meq _ ++> @meq _) (@munion A).
|
||||||
Proof. intros x y H x' y' H'. now apply meq_congr. Qed.
|
Proof. intros x y H x' y' H'. now apply meq_congr. Qed.
|
||||||
|
|
||||||
Lemma merge :
|
Lemma merge :
|
||||||
forall l1:list A, Sorted leA l1 ->
|
forall l1:list A, Sorted leA l1 ->
|
||||||
forall l2:list A, Sorted leA l2 -> merge_lem l1 l2.
|
forall l2:list A, Sorted leA l2 -> merge_lem l1 l2.
|
||||||
@@ -150,8 +140,8 @@ Section defs.
|
|||||||
apply merge_exist with l2; auto with datatypes.
|
apply merge_exist with l2; auto with datatypes.
|
||||||
rename l1 into l.
|
rename l1 into l.
|
||||||
revert l2 H0. fix 1. intros.
|
revert l2 H0. fix 1. intros.
|
||||||
destruct l2 as [|a0 l0].
|
destruct l2 as [|a0 l0].
|
||||||
apply merge_exist with (a :: l); simpl; auto with datatypes.
|
apply merge_exist with (a :: l); simpl; auto with datatypes.
|
||||||
elim (leA_dec a a0); intros.
|
elim (leA_dec a a0); intros.
|
||||||
|
|
||||||
(* 1 (leA a a0) *)
|
(* 1 (leA a a0) *)
|
||||||
@@ -159,18 +149,18 @@ Section defs.
|
|||||||
destruct (merge l H (a0 :: l0) H0).
|
destruct (merge l H (a0 :: l0) H0).
|
||||||
apply merge_exist with (a :: l1). clear merge merge0.
|
apply merge_exist with (a :: l1). clear merge merge0.
|
||||||
auto using cons_sort, cons_leA with datatypes.
|
auto using cons_sort, cons_leA with datatypes.
|
||||||
simpl. rewrite m. now rewrite munion_ass.
|
simpl. rewrite m. now rewrite munion_ass.
|
||||||
intros. apply cons_leA.
|
intros. apply cons_leA.
|
||||||
apply (@HdRel_inv _ leA) with l; trivial with datatypes.
|
apply (@HdRel_inv _ leA) with l; trivial with datatypes.
|
||||||
|
|
||||||
(* 2 (leA a0 a) *)
|
(* 2 (leA a0 a) *)
|
||||||
apply Sorted_inv in H0. destruct H0.
|
apply Sorted_inv in H0. destruct H0.
|
||||||
destruct (merge0 l0 H0). clear merge merge0.
|
destruct (merge0 l0 H0). clear merge merge0.
|
||||||
apply merge_exist with (a0 :: l1);
|
apply merge_exist with (a0 :: l1);
|
||||||
auto using cons_sort, cons_leA with datatypes.
|
auto using cons_sort, cons_leA with datatypes.
|
||||||
simpl; rewrite m. simpl. setoid_rewrite munion_ass at 1. rewrite munion_comm.
|
simpl; rewrite m. simpl. setoid_rewrite munion_ass at 1. rewrite munion_comm.
|
||||||
repeat rewrite munion_ass. setoid_rewrite munion_comm at 3. reflexivity.
|
repeat rewrite munion_ass. setoid_rewrite munion_comm at 3. reflexivity.
|
||||||
intros. apply cons_leA.
|
intros. apply cons_leA.
|
||||||
apply (@HdRel_inv _ leA) with l0; trivial with datatypes.
|
apply (@HdRel_inv _ leA) with l0; trivial with datatypes.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
@@ -186,7 +176,7 @@ Section defs.
|
|||||||
match t with
|
match t with
|
||||||
| Tree_Leaf => emptyBag
|
| Tree_Leaf => emptyBag
|
||||||
| Tree_Node a t1 t2 =>
|
| Tree_Node a t1 t2 =>
|
||||||
munion (contents t1) (munion (contents t2) (singletonBag a))
|
munion (contents t1) (munion (contents t2) (singletonBag a))
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
|
||||||
@@ -272,11 +262,11 @@ Section defs.
|
|||||||
apply flat_exist with (a :: l); simpl; auto with datatypes.
|
apply flat_exist with (a :: l); simpl; auto with datatypes.
|
||||||
apply meq_trans with
|
apply meq_trans with
|
||||||
(munion (list_contents _ eqA_dec l1)
|
(munion (list_contents _ eqA_dec l1)
|
||||||
(munion (list_contents _ eqA_dec l2) (singletonBag a))).
|
(munion (list_contents _ eqA_dec l2) (singletonBag a))).
|
||||||
apply meq_congr; auto with datatypes.
|
apply meq_congr; auto with datatypes.
|
||||||
apply meq_trans with
|
apply meq_trans with
|
||||||
(munion (singletonBag a)
|
(munion (singletonBag a)
|
||||||
(munion (list_contents _ eqA_dec l1) (list_contents _ eqA_dec l2))).
|
(munion (list_contents _ eqA_dec l1) (list_contents _ eqA_dec l2))).
|
||||||
apply munion_rotate.
|
apply munion_rotate.
|
||||||
apply meq_right; apply meq_sym; trivial with datatypes.
|
apply meq_right; apply meq_sym; trivial with datatypes.
|
||||||
Qed.
|
Qed.
|
||||||
|
|||||||
@@ -1,11 +1,3 @@
|
|||||||
(************************************************************************)
|
|
||||||
(* v * The Coq Proof Assistant / The Coq Development Team *)
|
|
||||||
(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2010 *)
|
|
||||||
(* \VV/ **************************************************************)
|
|
||||||
(* // * This file is distributed under the terms of the *)
|
|
||||||
(* * GNU Lesser General Public License Version 2.1 *)
|
|
||||||
(************************************************************************)
|
|
||||||
|
|
||||||
Require Import Omega Relations Multiset SetoidList.
|
Require Import Omega Relations Multiset SetoidList.
|
||||||
|
|
||||||
(** This file is deprecated, use [Permutation.v] instead.
|
(** This file is deprecated, use [Permutation.v] instead.
|
||||||
@@ -154,7 +146,7 @@ Lemma permut_add_cons_inside :
|
|||||||
Proof.
|
Proof.
|
||||||
intros;
|
intros;
|
||||||
replace (a :: l) with ([] ++ a :: l); trivial;
|
replace (a :: l) with ([] ++ a :: l); trivial;
|
||||||
apply permut_add_inside; trivial.
|
apply permut_add_inside; trivial.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
Lemma permut_middle :
|
Lemma permut_middle :
|
||||||
@@ -168,8 +160,8 @@ Lemma permut_sym_app :
|
|||||||
Proof.
|
Proof.
|
||||||
intros l1 l2;
|
intros l1 l2;
|
||||||
unfold permutation, meq;
|
unfold permutation, meq;
|
||||||
intro a; do 2 rewrite list_contents_app; simpl;
|
intro a; do 2 rewrite list_contents_app; simpl;
|
||||||
auto with arith.
|
auto with arith.
|
||||||
Qed.
|
Qed.
|
||||||
|
|
||||||
Lemma permut_rev :
|
Lemma permut_rev :
|
||||||
|
|||||||
@@ -1,17 +1,5 @@
|
|||||||
(************************************************************************)
|
|
||||||
(* v * The Coq Proof Assistant / The Coq Development Team *)
|
|
||||||
(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2010 *)
|
|
||||||
(* \VV/ **************************************************************)
|
|
||||||
(* // * This file is distributed under the terms of the *)
|
|
||||||
(* * GNU Lesser General Public License Version 2.1 *)
|
|
||||||
(************************************************************************)
|
|
||||||
|
|
||||||
(*********************************************************************)
|
|
||||||
(** * List permutations as a composition of adjacent transpositions *)
|
|
||||||
(*********************************************************************)
|
|
||||||
|
|
||||||
(* Adapted in May 2006 by Jean-Marc Notin from initial contents by
|
(* Adapted in May 2006 by Jean-Marc Notin from initial contents by
|
||||||
Laurent Théry (Huffmann contribution, October 2003) *)
|
Laurent Thery (Huffmann contribution, October 2003) *)
|
||||||
|
|
||||||
Require Import List Setoid Compare_dec Morphisms.
|
Require Import List Setoid Compare_dec Morphisms.
|
||||||
Import ListNotations. (* For notations [] and [a;b;c] *)
|
Import ListNotations. (* For notations [] and [a;b;c] *)
|
||||||
|
|||||||
@@ -1,10 +1,2 @@
|
|||||||
(************************************************************************)
|
|
||||||
(* v * The Coq Proof Assistant / The Coq Development Team *)
|
|
||||||
(* <O___,, * INRIA - CNRS - LIX - LRI - PPS - Copyright 1999-2010 *)
|
|
||||||
(* \VV/ **************************************************************)
|
|
||||||
(* // * This file is distributed under the terms of the *)
|
|
||||||
(* * GNU Lesser General Public License Version 2.1 *)
|
|
||||||
(************************************************************************)
|
|
||||||
|
|
||||||
Require Export Sorted.
|
Require Export Sorted.
|
||||||
Require Export Mergesort.
|
Require Export Mergesort.
|
||||||
|
|||||||
42
samples/Ecl/sample.ecl
Normal file
42
samples/Ecl/sample.ecl
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Multi-line comment
|
||||||
|
*/
|
||||||
|
#option ('slidingJoins', true);
|
||||||
|
|
||||||
|
namesRecord :=
|
||||||
|
RECORD
|
||||||
|
string20 surname;
|
||||||
|
string10 forename;
|
||||||
|
integer2 age;
|
||||||
|
integer2 dadAge;
|
||||||
|
integer2 mumAge;
|
||||||
|
END;
|
||||||
|
|
||||||
|
namesRecord2 :=
|
||||||
|
record
|
||||||
|
string10 extra;
|
||||||
|
namesRecord;
|
||||||
|
end;
|
||||||
|
|
||||||
|
namesTable := dataset('x',namesRecord,FLAT);
|
||||||
|
namesTable2 := dataset('y',namesRecord2,FLAT);
|
||||||
|
|
||||||
|
integer2 aveAgeL(namesRecord l) := (l.dadAge+l.mumAge)/2;
|
||||||
|
integer2 aveAgeR(namesRecord2 r) := (r.dadAge+r.mumAge)/2;
|
||||||
|
|
||||||
|
// Standard join on a function of left and right
|
||||||
|
output(join(namesTable, namesTable2, aveAgeL(left) = aveAgeR(right)));
|
||||||
|
|
||||||
|
//Several simple examples of sliding join syntax
|
||||||
|
output(join(namesTable, namesTable2, left.age >= right.age - 10 and left.age <= right.age +10));
|
||||||
|
output(join(namesTable, namesTable2, left.age between right.age - 10 and right.age +10));
|
||||||
|
output(join(namesTable, namesTable2, left.age between right.age + 10 and right.age +30));
|
||||||
|
output(join(namesTable, namesTable2, left.age between (right.age + 20) - 10 and (right.age +20) + 10));
|
||||||
|
output(join(namesTable, namesTable2, aveAgeL(left) between aveAgeR(right)+10 and aveAgeR(right)+40));
|
||||||
|
|
||||||
|
//Same, but on strings. Also includes age to ensure sort is done by non-sliding before sliding.
|
||||||
|
output(join(namesTable, namesTable2, left.surname between right.surname[1..10]+'AAAAAAAAAA' and right.surname[1..10]+'ZZZZZZZZZZ' and left.age=right.age));
|
||||||
|
output(join(namesTable, namesTable2, left.surname between right.surname[1..10]+'AAAAAAAAAA' and right.surname[1..10]+'ZZZZZZZZZZ' and left.age=right.age,all));
|
||||||
|
|
||||||
|
//This should not generate a self join
|
||||||
|
output(join(namesTable, namesTable, left.age between right.age - 10 and right.age +10));
|
||||||
127
samples/Elm/Basic.elm
Normal file
127
samples/Elm/Basic.elm
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
|
||||||
|
import List (intercalate,intersperse)
|
||||||
|
import Website.Skeleton
|
||||||
|
import Website.ColorScheme
|
||||||
|
|
||||||
|
addFolder folder lst =
|
||||||
|
let add (x,y) = (x, folder ++ y ++ ".elm") in
|
||||||
|
let f (n,xs) = (n, map add xs) in
|
||||||
|
map f lst
|
||||||
|
|
||||||
|
elements = addFolder "Elements/"
|
||||||
|
[ ("Primitives",
|
||||||
|
[ ("Text" , "HelloWorld")
|
||||||
|
, ("Images", "Image")
|
||||||
|
, ("Fitted Images", "FittedImage")
|
||||||
|
, ("Videos", "Video")
|
||||||
|
, ("Markdown", "Markdown")
|
||||||
|
])
|
||||||
|
, ("Formatting",
|
||||||
|
[ ("Size" , "Size")
|
||||||
|
, ("Opacity" , "Opacity")
|
||||||
|
, ("Text" , "Text")
|
||||||
|
, ("Typeface", "Typeface")
|
||||||
|
])
|
||||||
|
, ("Layout",
|
||||||
|
[ ("Simple Flow", "FlowDown1a")
|
||||||
|
, ("Flow Down" , "FlowDown2")
|
||||||
|
, ("Layers" , "Layers")
|
||||||
|
, ("Positioning", "Position")
|
||||||
|
, ("Spacers" , "Spacer")
|
||||||
|
])
|
||||||
|
, ("Collage", [ ("Lines" , "Lines")
|
||||||
|
, ("Shapes" , "Shapes")
|
||||||
|
, ("Sprites" , "Sprite")
|
||||||
|
, ("Elements" , "ToForm")
|
||||||
|
, ("Colors" , "Color")
|
||||||
|
, ("Textures" , "Texture")
|
||||||
|
, ("Transforms", "Transforms")
|
||||||
|
])
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
functional = addFolder "Functional/"
|
||||||
|
[ ("Recursion",
|
||||||
|
[ ("Factorial" , "Factorial")
|
||||||
|
, ("List Length", "Length")
|
||||||
|
, ("Zip" , "Zip")
|
||||||
|
, ("Quick Sort" , "QuickSort")
|
||||||
|
])
|
||||||
|
, ("Functions",
|
||||||
|
[ ("Anonymous Functions", "Anonymous")
|
||||||
|
, ("Application" , "Application")
|
||||||
|
, ("Composition" , "Composition")
|
||||||
|
, ("Infix Operators" , "Infix")
|
||||||
|
])
|
||||||
|
, ("Higher-Order",
|
||||||
|
[ ("Map" , "Map")
|
||||||
|
, ("Fold" , "Sum")
|
||||||
|
, ("Filter" , "Filter")
|
||||||
|
, ("ZipWith", "ZipWith")
|
||||||
|
])
|
||||||
|
, ("Data Types",
|
||||||
|
[ ("Maybe", "Maybe")
|
||||||
|
, ("Boolean Expressions", "BooleanExpressions")
|
||||||
|
, ("Tree", "Tree")
|
||||||
|
])
|
||||||
|
]
|
||||||
|
|
||||||
|
reactive = addFolder "Reactive/"
|
||||||
|
[ ("Mouse", [ ("Position", "Position")
|
||||||
|
, ("Presses" , "IsDown")
|
||||||
|
, ("Clicks" , "CountClicks")
|
||||||
|
, ("Position+Image", "ResizeYogi")
|
||||||
|
, ("Position+Collage" , "Transforms")
|
||||||
|
-- , ("Hover" , "IsAbove")
|
||||||
|
])
|
||||||
|
,("Keyboard",[ ("Keys Down" , "KeysDown")
|
||||||
|
, ("Key Presses", "CharPressed")
|
||||||
|
])
|
||||||
|
, ("Window", [ ("Size", "ResizePaint")
|
||||||
|
, ("Centering", "Centering")
|
||||||
|
])
|
||||||
|
, ("Time", [ ("Before and After", "Between")
|
||||||
|
, ("Every" , "Every")
|
||||||
|
, ("Clock" , "Clock")
|
||||||
|
])
|
||||||
|
, ("Input", [ ("Text Fields", "TextField")
|
||||||
|
, ("Passwords" , "Password")
|
||||||
|
, ("Check Boxes", "CheckBox")
|
||||||
|
, ("String Drop Down", "StringDropDown")
|
||||||
|
, ("Drop Down", "DropDown")
|
||||||
|
])
|
||||||
|
, ("Random", [ ("Randomize", "Randomize") ])
|
||||||
|
, ("HTTP", [ ("Zip Codes", "ZipCodes") ])
|
||||||
|
, ("Filters",[ ("Sample", "SampleOn")
|
||||||
|
, ("Keep If", "KeepIf")
|
||||||
|
, ("Drop Repeats", "DropRepeats")
|
||||||
|
])
|
||||||
|
]
|
||||||
|
|
||||||
|
example (name, loc) = Text.link ("/edit/examples/" ++ loc) (toText name)
|
||||||
|
toLinks (title, links) =
|
||||||
|
flow right [ width 130 (text $ toText " " ++ italic (toText title))
|
||||||
|
, text (intercalate (bold . Text.color accent4 $ toText " · ") $ map example links)
|
||||||
|
]
|
||||||
|
|
||||||
|
insertSpace lst = case lst of { x:xs -> x : spacer 1 5 : xs ; [] -> [] }
|
||||||
|
|
||||||
|
subsection w (name,info) =
|
||||||
|
flow down . insertSpace . intersperse (spacer 1 1) . map (width w) $
|
||||||
|
(text . bold $ toText name) : map toLinks info
|
||||||
|
|
||||||
|
words = [markdown|
|
||||||
|
|
||||||
|
### Basic Examples
|
||||||
|
|
||||||
|
Each example listed below focuses on a single function or concept.
|
||||||
|
These examples demonstrate all of the basic building blocks of Elm.
|
||||||
|
|
||||||
|
|]
|
||||||
|
|
||||||
|
content w =
|
||||||
|
words : map (subsection w) [ ("Display",elements), ("React",reactive), ("Compute",functional) ]
|
||||||
|
|
||||||
|
exampleSets w = flow down . map (width w) . intersperse (plainText " ") $ content w
|
||||||
|
|
||||||
|
main = lift (skeleton exampleSets) Window.width
|
||||||
32
samples/Elm/QuickSort.elm
Normal file
32
samples/Elm/QuickSort.elm
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
|
||||||
|
main = asText (qsort [3,9,1,8,5,4,7])
|
||||||
|
|
||||||
|
qsort lst =
|
||||||
|
case lst of
|
||||||
|
x:xs -> qsort (filter ((>=)x) xs) ++ [x] ++ qsort (filter ((<)x) xs)
|
||||||
|
[] -> []
|
||||||
|
|
||||||
|
|
||||||
|
{---------------------
|
||||||
|
|
||||||
|
QuickSort works as follows:
|
||||||
|
- Choose a pivot element which be placed in the "middle" of the sorted list.
|
||||||
|
In our case we are choosing the first element as the pivot.
|
||||||
|
- Gather all of the elements less than the pivot (the first filter).
|
||||||
|
We know that these must come before our pivot element in the sorted list.
|
||||||
|
Note: ((>=)x) === (\y -> (>=) x y) === (\y -> x >= y)
|
||||||
|
- Gather all of the elements greater than the pivot (the second filter).
|
||||||
|
We know that these must come after our pivot element in the sorted list.
|
||||||
|
- Run `qsort` on the lesser elements, producing a sorted list that contains
|
||||||
|
only elements less than the pivot. Put these before the pivot.
|
||||||
|
- Run `qsort` on the greater elements, producing a sorted list. Put these
|
||||||
|
after the pivot.
|
||||||
|
|
||||||
|
Note that choosing a bad pivot can have bad effects. Take a sorted list with
|
||||||
|
N elements. The pivot will always be the lowest member, meaning that it does
|
||||||
|
not divide the list very evenly. The list of lessers has 0 elements
|
||||||
|
and the list of greaters has N-1 elemens. This means qsort will be called
|
||||||
|
N times, each call looking through the entire list. This means, in the worst
|
||||||
|
case, QuickSort will make N^2 comparisons.
|
||||||
|
|
||||||
|
----------------------}
|
||||||
91
samples/Elm/Tree.elm
Normal file
91
samples/Elm/Tree.elm
Normal file
@@ -0,0 +1,91 @@
|
|||||||
|
|
||||||
|
{-----------------------------------------------------------------
|
||||||
|
|
||||||
|
Overview: A "Tree" represents a binary tree. A "Node" in a binary
|
||||||
|
tree always has two children. A tree can also be "Empty". Below
|
||||||
|
I have defined "Tree" and a number of useful functions.
|
||||||
|
|
||||||
|
This example also includes some challenge problems :)
|
||||||
|
|
||||||
|
-----------------------------------------------------------------}
|
||||||
|
|
||||||
|
|
||||||
|
data Tree a = Node a (Tree a) (Tree a) | Empty
|
||||||
|
|
||||||
|
empty = Empty
|
||||||
|
singleton v = Node v Empty Empty
|
||||||
|
|
||||||
|
insert x tree =
|
||||||
|
case tree of
|
||||||
|
Empty -> singleton x
|
||||||
|
Node y left right ->
|
||||||
|
if x == y then tree else
|
||||||
|
if x < y then Node y (insert x left) right
|
||||||
|
else Node y left (insert x right)
|
||||||
|
|
||||||
|
fromList xs = foldl insert empty xs
|
||||||
|
|
||||||
|
depth tree =
|
||||||
|
case tree of
|
||||||
|
Node v left right -> 1 + max (depth left) (depth right)
|
||||||
|
Empty -> 0
|
||||||
|
|
||||||
|
map f tree =
|
||||||
|
case tree of
|
||||||
|
Node v left right -> Node (f v) (map f left) (map f right)
|
||||||
|
Empty -> Empty
|
||||||
|
|
||||||
|
t1 = fromList [1,2,3]
|
||||||
|
t2 = fromList [2,1,3]
|
||||||
|
|
||||||
|
main = flow down [ display "depth" depth t1
|
||||||
|
, display "depth" depth t2
|
||||||
|
, display "map ((+)1)" (map ((+)1)) t2
|
||||||
|
]
|
||||||
|
|
||||||
|
display name f v =
|
||||||
|
text . monospace . toText $
|
||||||
|
concat [ show (f v), " ⇐ ", name, " ", show v ]
|
||||||
|
|
||||||
|
{-----------------------------------------------------------------
|
||||||
|
|
||||||
|
Exercises:
|
||||||
|
|
||||||
|
(1) Sum all of the elements of a tree.
|
||||||
|
|
||||||
|
sum :: Tree Number -> Number
|
||||||
|
|
||||||
|
(2) Flatten a tree into a list.
|
||||||
|
|
||||||
|
flatten :: Tree a -> [a]
|
||||||
|
|
||||||
|
(3) Check to see if an element is in a given tree.
|
||||||
|
|
||||||
|
isElement :: a -> Tree a -> Bool
|
||||||
|
|
||||||
|
(4) Write a general fold function that acts on trees. The fold
|
||||||
|
function does not need to guarantee a particular order of
|
||||||
|
traversal.
|
||||||
|
|
||||||
|
fold :: (a -> b -> b) -> b -> Tree a -> b
|
||||||
|
|
||||||
|
(5) Use "fold" to do exercises 1-3 in one line each. The best
|
||||||
|
readable versions I have come up have the following length
|
||||||
|
in characters including spaces and function name:
|
||||||
|
sum: 16
|
||||||
|
flatten: 21
|
||||||
|
isElement: 46
|
||||||
|
See if you can match or beat me! Don't forget about currying
|
||||||
|
and partial application!
|
||||||
|
|
||||||
|
(6) Can "fold" be used to implement "map" or "depth"?
|
||||||
|
|
||||||
|
(7) Try experimenting with different ways to traverse a
|
||||||
|
tree: pre-order, in-order, post-order, depth-first, etc.
|
||||||
|
More info at: http://en.wikipedia.org/wiki/Tree_traversal
|
||||||
|
|
||||||
|
-----------------------------------------------------------------}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
6
samples/Handlebars/basic.handlebars
Normal file
6
samples/Handlebars/basic.handlebars
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<div class="entry">
|
||||||
|
<h1>{{title}}</h1>
|
||||||
|
<div class="body">
|
||||||
|
{{body}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
11
samples/Handlebars/each.hbs
Normal file
11
samples/Handlebars/each.hbs
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<div class="post">
|
||||||
|
<h1>By {{fullName author}}</h1>
|
||||||
|
<div class="body">{{body}}</div>
|
||||||
|
|
||||||
|
<h1>Comments</h1>
|
||||||
|
|
||||||
|
{{#each comments}}
|
||||||
|
<h2>By {{fullName author}}</h2>
|
||||||
|
<div class="body">{{body}}</div>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
70
samples/Nginx/filenames/nginx.conf
Normal file
70
samples/Nginx/filenames/nginx.conf
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
user www www;
|
||||||
|
worker_processes 5;
|
||||||
|
error_log logs/error.log;
|
||||||
|
pid logs/nginx.pid;
|
||||||
|
worker_rlimit_nofile 8192;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 4096;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include conf/mime.types;
|
||||||
|
include /etc/nginx/proxy.conf;
|
||||||
|
include /etc/nginx/fastcgi.conf;
|
||||||
|
index index.html index.htm index.php;
|
||||||
|
|
||||||
|
default_type application/octet-stream;
|
||||||
|
log_format main '$remote_addr - $remote_user [$time_local] $status '
|
||||||
|
'"$request" $body_bytes_sent "$http_referer" '
|
||||||
|
'"$http_user_agent" "$http_x_forwarded_for"';
|
||||||
|
access_log logs/access.log main;
|
||||||
|
sendfile on;
|
||||||
|
tcp_nopush on;
|
||||||
|
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
|
||||||
|
|
||||||
|
server { # php/fastcgi
|
||||||
|
listen 80;
|
||||||
|
server_name domain1.com www.domain1.com;
|
||||||
|
access_log logs/domain1.access.log main;
|
||||||
|
root html;
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
fastcgi_pass 127.0.0.1:1025;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
server { # simple reverse-proxy
|
||||||
|
listen 80;
|
||||||
|
server_name domain2.com www.domain2.com;
|
||||||
|
access_log logs/domain2.access.log main;
|
||||||
|
|
||||||
|
# serve static files
|
||||||
|
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
|
||||||
|
root /var/www/virtual/big.server.com/htdocs;
|
||||||
|
expires 30d;
|
||||||
|
}
|
||||||
|
|
||||||
|
# pass requests for dynamic content to rails/turbogears/zope, et al
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:8080;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
upstream big_server_com {
|
||||||
|
server 127.0.0.3:8000 weight=5;
|
||||||
|
server 127.0.0.3:8001 weight=5;
|
||||||
|
server 192.168.0.1:8000;
|
||||||
|
server 192.168.0.1:8001;
|
||||||
|
}
|
||||||
|
|
||||||
|
server { # simple load balancing
|
||||||
|
listen 80;
|
||||||
|
server_name big.server.com;
|
||||||
|
access_log logs/big.server.access.log main;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://big_server_com;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
4
samples/PHP/php-script.script!
Normal file
4
samples/PHP/php-script.script!
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
echo "PHP\n";
|
||||||
4
samples/PHP/php.script!
Normal file
4
samples/PHP/php.script!
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#!/usr/bin/env php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
echo "PHP\n";
|
||||||
1
samples/Shell/filenames/.bash_logout
Normal file
1
samples/Shell/filenames/.bash_logout
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/usr/bin/clear
|
||||||
@@ -1 +1,36 @@
|
|||||||
export PATH="/usr/local/bin:/usr/bin:/bin"
|
##
|
||||||
|
# Environment...
|
||||||
|
##
|
||||||
|
# Set up some variables for 'screen'
|
||||||
|
if [ -z "${SCREENDIR}" ];then echo -n
|
||||||
|
export SCREENDIR="${HOME}/.screen"
|
||||||
|
# Save my screen sockets within my $HOME dir
|
||||||
|
fi
|
||||||
|
## PATH
|
||||||
|
export PATH=/usr/local/bin:/usr/local/sbin:/usr/xpg4/bin:/usr/sbin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin:/usr/openwin/bin:/opt/mysql/current/bin
|
||||||
|
export MANPATH=/usr/local/man:/usr/share/man
|
||||||
|
|
||||||
|
## Random ENV...
|
||||||
|
# Set $TERM to 'vt100' (a safe default) if, for some
|
||||||
|
# reason, it is set to 'network' (which is not valid!)
|
||||||
|
if [ ${TERM} == 'network' ];then echo -n
|
||||||
|
export TERM='vt100'
|
||||||
|
# not 'nsterm' because if its 'network' we're
|
||||||
|
# probly not in Terminal.app
|
||||||
|
fi
|
||||||
|
# Set $COLORTERM, all this does is trick *some* apps into
|
||||||
|
# using color in the terminal, which should happen anyway.
|
||||||
|
if [ -z "${COLORTERM}" ];then echo -n
|
||||||
|
export COLORTERM="${TERM}"
|
||||||
|
fi
|
||||||
|
# another color option, this one for BSD's ls
|
||||||
|
if [ -z "${CLICOLOR}" ];then echo -n
|
||||||
|
export CLICOLOR='1' # can be set to anything, actually
|
||||||
|
fi
|
||||||
|
# If $DISPLAY is not already set, set it!
|
||||||
|
if [ -z "${DISPLAY}" ];then echo -n
|
||||||
|
export DISPLAY=':0'
|
||||||
|
fi
|
||||||
|
##
|
||||||
|
# Source the bash rc file
|
||||||
|
[ -r "${HOME}/.bashrc" ] && . "${HOME}/.bashrc"
|
||||||
|
|||||||
@@ -1 +1,119 @@
|
|||||||
export PATH="/usr/local/bin:/usr/bin:/bin"
|
##
|
||||||
|
# Functions... *MUCH* better than aliases, and they do more too!
|
||||||
|
# but they clutter the environment... (try typing just 'set' at the prompt)
|
||||||
|
##
|
||||||
|
# The reason that some of these are... odd... is because
|
||||||
|
# I had to convert them early because bash can't do positional
|
||||||
|
# arguments in aliases! functionName () { do something $@<-arguments ; }
|
||||||
|
function ls { command ls -Fh "$@"; }
|
||||||
|
# 'command ls' to prevent loop; -A for .file, -F for dir/ link@,
|
||||||
|
# -h for 5k 3m 1g, -o for printing flags (uchg)...
|
||||||
|
function l { ls -l "$@"; } # -l to list in long format...
|
||||||
|
function ll { l "$@" | less -XF ; } # pipe into 'more'
|
||||||
|
|
||||||
|
##
|
||||||
|
# Tips and Ticks... from http://www.caliban.org/bash/index.shtml
|
||||||
|
##
|
||||||
|
# The $CDPATH variable is so that you can be in /path/to/something and 'cd'
|
||||||
|
# to 'somethingElse' and end up in /not/the/same/path/to/somethingElse.
|
||||||
|
# iWould use it if it didn't ALWAYS echo the directory it changes to!
|
||||||
|
#CDPATH='.:~'
|
||||||
|
#
|
||||||
|
# HISTIGNORE="&:l:ls:ls *:l *:cd:cd *:[bf]g:exit:quit:q:sleep *"
|
||||||
|
# History ignores commands that include any l/ls/cd etc
|
||||||
|
# This kicks-ass! It drops repeats and other useless
|
||||||
|
# things from the command history!
|
||||||
|
HISTIGNORE="[bf]g:exit:quit:q:sleep *"
|
||||||
|
# I want to see l/ls/cd in my history
|
||||||
|
HISTCONTROL=ignoreboth
|
||||||
|
# ignores both commands that start with a space or a tab, and duplicates
|
||||||
|
# other options are as follows:
|
||||||
|
# `ignorespace' means to not enter lines which begin with a space or tab into the history list.
|
||||||
|
# `ignoredups' means to not enter lines which match the last entered line.
|
||||||
|
# `ignoreboth' combines the two options.
|
||||||
|
|
||||||
|
shopt -s cdspell extglob progcomp
|
||||||
|
# Spell check for 'cd', extended globbing, programmable completion
|
||||||
|
|
||||||
|
##
|
||||||
|
# Bash Completion... Cannibalised from bash_completion 20030929
|
||||||
|
# Completion defaults... Yes, its long...
|
||||||
|
# Basically this sets up many useful defaults for command completion, these
|
||||||
|
# should probly be built into bash. Use bash_completions itself if you want
|
||||||
|
# more functionality and don't mind the hacks it uses.
|
||||||
|
complete -f -X '!*.?(t)bz2' bunzip2 bzcat bzcmp bzdiff bzegrep bzfgrep bzgrep
|
||||||
|
complete -f -X '!*.@(zip|ZIP|jar|JAR|exe|EXE|pk3|war|wsz|ear|zargo|xpi)' unzip zipinfo
|
||||||
|
complete -f -X '*.Z' compress znew
|
||||||
|
complete -f -X '!*.@(Z|gz|tgz|Gz|dz)' gunzip zcmp zdiff zcat zegrep zfgrep zgrep zless zmore
|
||||||
|
complete -f -X '!*.Z' uncompress
|
||||||
|
complete -f -X '!*.@(gif|jp?(e)g|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|GIF|JP?(E)G|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA)' ee display
|
||||||
|
complete -f -X '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|GIF|JPG|JP?(E)G|TIF?(F)|PNG|P[BGP]M|BMP|X[BP]M|RLE|RGB|PCX|FITS|PM)' xv qiv
|
||||||
|
complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.Z))' gv ggv
|
||||||
|
complete -f -X '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi
|
||||||
|
complete -f -X '!*.@(dvi|DVI)' dvips dviselect dvitype
|
||||||
|
complete -f -X '!*.@(pdf|PDF)' acroread xpdf
|
||||||
|
complete -f -X '!*.texi*' makeinfo texi2html
|
||||||
|
complete -f -X '!*.@(?(la)tex|?(LA)TEX|texi|TEXI|dtx|DTX|ins|INS)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi
|
||||||
|
complete -f -X '!*.@(mp3|MP3|m3u)' mpg123 mpg321
|
||||||
|
complete -f -X '!*.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|bin|dat|vcd|ps|pes|fli|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp3|MP3|ogg|OGG|ogm|OGM|mp4|MP4|wav|WAV)' xine
|
||||||
|
complete -f -X '!*.@(avi|asf|wmv)' aviplay
|
||||||
|
complete -f -X '!*.@(rm|ram|smi?(l))' realplay
|
||||||
|
complete -f -X '!*.@(mp?(e)g|avi|mov|qt)' xanim
|
||||||
|
complete -f -X '!*.@(ogg|OGG|m3u)' ogg123
|
||||||
|
complete -f -X '!*.@(mp3|MP3|ogg|OGG|pls|m3u)' gqmpeg freeamp
|
||||||
|
complete -f -X '!*.@(mp[23]|MP[23]|ogg|OGG|wav|WAV|pls|m3u|xm|mod|s[3t]m|it|mtm|ult|flac)' xmms
|
||||||
|
complete -f -X '!*.fig' xfig
|
||||||
|
complete -f -X '!*.@(mid?(i))' timidity playmidi
|
||||||
|
complete -f -X '.*|*.@(o|so|so.!(conf)|a|tar?(.@(gz|bz2))|tgz|tbz2|rpm|zip|ZIP|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)' vi vim gvim rvim view rview rgvim rgview gview emacs
|
||||||
|
complete -f -X '!*.@(exe|EXE|com|COM|scr|SCR)' wine
|
||||||
|
complete -f -X '!*.@(zip|ZIP|z|Z|gz|GZ|tgz|TGZ)' bzme
|
||||||
|
complete -f -X '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx opera w3m galeon curl dillo elinks links
|
||||||
|
#
|
||||||
|
complete -u su passwd groups # user commands see only users
|
||||||
|
complete -A stopped -P '%' bg # bg completes with stopped jobs
|
||||||
|
complete -j -P '%' fg jobs disown # other job commands
|
||||||
|
complete -v readonly unset export # readonly and unset complete with shell variables
|
||||||
|
complete -A setopt set # set completes with set options
|
||||||
|
complete -A shopt shopt # shopt completes with shopt options
|
||||||
|
complete -A helptopic help # helptopics
|
||||||
|
complete -a unalias # unalias completes with aliases
|
||||||
|
complete -A binding bind # bind completes with readline bindings (make this more intelligent)
|
||||||
|
complete -c command type which man #sudo # type, which, man complete on commands
|
||||||
|
complete -d pushd cd rmdir # Make directory commands see only directories
|
||||||
|
complete -W ' ' alias # no filenames for alias,
|
||||||
|
|
||||||
|
##
|
||||||
|
# Set the prompt
|
||||||
|
##
|
||||||
|
PS1="[\h:\w] \[\033[1;34m\]\u\[\033[0m\]\\$ "
|
||||||
|
# My prompt line: "[gaelicWizard:~/Documents] user$ " user is in blue
|
||||||
|
# Or: "[gaelicWizard:~/Documents] root# " root is in blue
|
||||||
|
##
|
||||||
|
# Aliases:
|
||||||
|
##
|
||||||
|
# Aliases frequently used...
|
||||||
|
alias ..='cd ..;l'
|
||||||
|
alias cd..='cd ..'
|
||||||
|
alias which='type' # 'which' in (t)csh is same(?) as 'type' in bash...
|
||||||
|
alias quit='exit'
|
||||||
|
alias q='quit' # and 'q' is even shorter! :-D
|
||||||
|
alias v='vim'
|
||||||
|
alias rehash='. ~/.bashrc;' # source ~/.bashrc after I edit it
|
||||||
|
alias pg='ps -afe|grep -v grep|grep'
|
||||||
|
alias make='gmake'
|
||||||
|
alias patch='gpatch'
|
||||||
|
alias sed='gsed'
|
||||||
|
alias awk='nawk'
|
||||||
|
alias diff='gdiff'
|
||||||
|
alias grep='ggrep'
|
||||||
|
alias find='gfind'
|
||||||
|
alias ps='/usr/ucb/ps'
|
||||||
|
alias whoami='/usr/ucb/whoami'
|
||||||
|
alias ping='ping -s'
|
||||||
|
alias man='GROFF_NO_SGR= TCAT="less -s" TROFF="groff -Tascii" man -t'
|
||||||
|
|
||||||
|
|
||||||
|
# The rest are uncategorised and fairly random... :-)
|
||||||
|
shopt -s histappend
|
||||||
|
PROMPT_COMMAND='echo -ne "\033]0;${USER} on ${HOSTNAME} at ${PWD}\007" && history -a'
|
||||||
|
export PATH=/usr/local/bin:/usr/local/sbin:/usr/xpg4/bin:/usr/sbin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin:/usr/openwin/bin:/opt/mysql/current/bin
|
||||||
|
|||||||
5
samples/Shell/filenames/.cshrc
Normal file
5
samples/Shell/filenames/.cshrc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
umask 022
|
||||||
|
set path=(/opt/local/bin /opt/local/sbin /bin /usr/bin)
|
||||||
|
if ( $?prompt ) then
|
||||||
|
set history=32
|
||||||
|
endif
|
||||||
2
samples/Shell/filenames/.login
Normal file
2
samples/Shell/filenames/.login
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
stty -istrip
|
||||||
|
# setenv TERM `tset -Q -`
|
||||||
3
samples/Shell/filenames/.zlogout
Normal file
3
samples/Shell/filenames/.zlogout
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Store dirs stack
|
||||||
|
# See ~/.dotfiles/oh-my-zsh/plugins/dirspersist.plugin.zsh
|
||||||
|
dirpersiststore
|
||||||
28
samples/Shell/filenames/.zprofile
Normal file
28
samples/Shell/filenames/.zprofile
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
##############################################################################
|
||||||
|
#Import the shell-agnostic (Bash or Zsh) environment config
|
||||||
|
##############################################################################
|
||||||
|
source ~/.profile
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# History Configuration
|
||||||
|
##############################################################################
|
||||||
|
HISTSIZE=5000 #How many lines of history to keep in memory
|
||||||
|
HISTFILE=~/.zsh_history #Where to save history to disk
|
||||||
|
SAVEHIST=5000 #Number of history entries to save to disk
|
||||||
|
HISTDUP=erase #Erase duplicates in the history file
|
||||||
|
setopt appendhistory #Append history to the history file (no overwriting)
|
||||||
|
setopt sharehistory #Share history across terminals
|
||||||
|
setopt incappendhistory #Immediately append to the history file, not just when a term is killed
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# sjl/z-zsh setup
|
||||||
|
##############################################################################
|
||||||
|
#. ~/.dotfiles/z-zsh/z.sh
|
||||||
|
#function precmd () {
|
||||||
|
# z --add "$(pwd -P)"
|
||||||
|
#}
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# rupa/z setup
|
||||||
|
##############################################################################
|
||||||
|
. ~/.dotfiles/z-rupa/z.sh
|
||||||
2
samples/Shell/filenames/.zshenv
Normal file
2
samples/Shell/filenames/.zshenv
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fpath=($fpath $HOME/.zsh/func)
|
||||||
|
typeset -U fpath
|
||||||
1
samples/Shell/filenames/bash_logout
Normal file
1
samples/Shell/filenames/bash_logout
Normal file
@@ -0,0 +1 @@
|
|||||||
|
/usr/bin/clear
|
||||||
36
samples/Shell/filenames/bash_profile
Normal file
36
samples/Shell/filenames/bash_profile
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
##
|
||||||
|
# Environment...
|
||||||
|
##
|
||||||
|
# Set up some variables for 'screen'
|
||||||
|
if [ -z "${SCREENDIR}" ];then echo -n
|
||||||
|
export SCREENDIR="${HOME}/.screen"
|
||||||
|
# Save my screen sockets within my $HOME dir
|
||||||
|
fi
|
||||||
|
## PATH
|
||||||
|
export PATH=/usr/local/bin:/usr/local/sbin:/usr/xpg4/bin:/usr/sbin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin:/usr/openwin/bin:/opt/mysql/current/bin
|
||||||
|
export MANPATH=/usr/local/man:/usr/share/man
|
||||||
|
|
||||||
|
## Random ENV...
|
||||||
|
# Set $TERM to 'vt100' (a safe default) if, for some
|
||||||
|
# reason, it is set to 'network' (which is not valid!)
|
||||||
|
if [ ${TERM} == 'network' ];then echo -n
|
||||||
|
export TERM='vt100'
|
||||||
|
# not 'nsterm' because if its 'network' we're
|
||||||
|
# probly not in Terminal.app
|
||||||
|
fi
|
||||||
|
# Set $COLORTERM, all this does is trick *some* apps into
|
||||||
|
# using color in the terminal, which should happen anyway.
|
||||||
|
if [ -z "${COLORTERM}" ];then echo -n
|
||||||
|
export COLORTERM="${TERM}"
|
||||||
|
fi
|
||||||
|
# another color option, this one for BSD's ls
|
||||||
|
if [ -z "${CLICOLOR}" ];then echo -n
|
||||||
|
export CLICOLOR='1' # can be set to anything, actually
|
||||||
|
fi
|
||||||
|
# If $DISPLAY is not already set, set it!
|
||||||
|
if [ -z "${DISPLAY}" ];then echo -n
|
||||||
|
export DISPLAY=':0'
|
||||||
|
fi
|
||||||
|
##
|
||||||
|
# Source the bash rc file
|
||||||
|
[ -r "${HOME}/.bashrc" ] && . "${HOME}/.bashrc"
|
||||||
119
samples/Shell/filenames/bashrc
Normal file
119
samples/Shell/filenames/bashrc
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
##
|
||||||
|
# Functions... *MUCH* better than aliases, and they do more too!
|
||||||
|
# but they clutter the environment... (try typing just 'set' at the prompt)
|
||||||
|
##
|
||||||
|
# The reason that some of these are... odd... is because
|
||||||
|
# I had to convert them early because bash can't do positional
|
||||||
|
# arguments in aliases! functionName () { do something $@<-arguments ; }
|
||||||
|
function ls { command ls -Fh "$@"; }
|
||||||
|
# 'command ls' to prevent loop; -A for .file, -F for dir/ link@,
|
||||||
|
# -h for 5k 3m 1g, -o for printing flags (uchg)...
|
||||||
|
function l { ls -l "$@"; } # -l to list in long format...
|
||||||
|
function ll { l "$@" | less -XF ; } # pipe into 'more'
|
||||||
|
|
||||||
|
##
|
||||||
|
# Tips and Ticks... from http://www.caliban.org/bash/index.shtml
|
||||||
|
##
|
||||||
|
# The $CDPATH variable is so that you can be in /path/to/something and 'cd'
|
||||||
|
# to 'somethingElse' and end up in /not/the/same/path/to/somethingElse.
|
||||||
|
# iWould use it if it didn't ALWAYS echo the directory it changes to!
|
||||||
|
#CDPATH='.:~'
|
||||||
|
#
|
||||||
|
# HISTIGNORE="&:l:ls:ls *:l *:cd:cd *:[bf]g:exit:quit:q:sleep *"
|
||||||
|
# History ignores commands that include any l/ls/cd etc
|
||||||
|
# This kicks-ass! It drops repeats and other useless
|
||||||
|
# things from the command history!
|
||||||
|
HISTIGNORE="[bf]g:exit:quit:q:sleep *"
|
||||||
|
# I want to see l/ls/cd in my history
|
||||||
|
HISTCONTROL=ignoreboth
|
||||||
|
# ignores both commands that start with a space or a tab, and duplicates
|
||||||
|
# other options are as follows:
|
||||||
|
# `ignorespace' means to not enter lines which begin with a space or tab into the history list.
|
||||||
|
# `ignoredups' means to not enter lines which match the last entered line.
|
||||||
|
# `ignoreboth' combines the two options.
|
||||||
|
|
||||||
|
shopt -s cdspell extglob progcomp
|
||||||
|
# Spell check for 'cd', extended globbing, programmable completion
|
||||||
|
|
||||||
|
##
|
||||||
|
# Bash Completion... Cannibalised from bash_completion 20030929
|
||||||
|
# Completion defaults... Yes, its long...
|
||||||
|
# Basically this sets up many useful defaults for command completion, these
|
||||||
|
# should probly be built into bash. Use bash_completions itself if you want
|
||||||
|
# more functionality and don't mind the hacks it uses.
|
||||||
|
complete -f -X '!*.?(t)bz2' bunzip2 bzcat bzcmp bzdiff bzegrep bzfgrep bzgrep
|
||||||
|
complete -f -X '!*.@(zip|ZIP|jar|JAR|exe|EXE|pk3|war|wsz|ear|zargo|xpi)' unzip zipinfo
|
||||||
|
complete -f -X '*.Z' compress znew
|
||||||
|
complete -f -X '!*.@(Z|gz|tgz|Gz|dz)' gunzip zcmp zdiff zcat zegrep zfgrep zgrep zless zmore
|
||||||
|
complete -f -X '!*.Z' uncompress
|
||||||
|
complete -f -X '!*.@(gif|jp?(e)g|tif?(f)|pn[gm]|p[bgp]m|bmp|xpm|ico|xwd|tga|GIF|JP?(E)G|TIF?(F)|PN[GM]|P[BGP]M|BMP|XPM|ICO|XWD|TGA)' ee display
|
||||||
|
complete -f -X '!*.@(gif|jp?(e)g|tif?(f)|png|p[bgp]m|bmp|x[bp]m|rle|rgb|pcx|fits|pm|GIF|JPG|JP?(E)G|TIF?(F)|PNG|P[BGP]M|BMP|X[BP]M|RLE|RGB|PCX|FITS|PM)' xv qiv
|
||||||
|
complete -f -X '!*.@(@(?(e)ps|?(E)PS|pdf|PDF)?(.gz|.GZ|.Z))' gv ggv
|
||||||
|
complete -f -X '!*.@(dvi|DVI)?(.@(gz|Z|bz2))' xdvi
|
||||||
|
complete -f -X '!*.@(dvi|DVI)' dvips dviselect dvitype
|
||||||
|
complete -f -X '!*.@(pdf|PDF)' acroread xpdf
|
||||||
|
complete -f -X '!*.texi*' makeinfo texi2html
|
||||||
|
complete -f -X '!*.@(?(la)tex|?(LA)TEX|texi|TEXI|dtx|DTX|ins|INS)' tex latex slitex jadetex pdfjadetex pdftex pdflatex texi2dvi
|
||||||
|
complete -f -X '!*.@(mp3|MP3|m3u)' mpg123 mpg321
|
||||||
|
complete -f -X '!*.@(mp?(e)g|MP?(E)G|wma|avi|AVI|asf|vob|bin|dat|vcd|ps|pes|fli|viv|rm|ram|yuv|mov|MOV|qt|QT|wmv|mp3|MP3|ogg|OGG|ogm|OGM|mp4|MP4|wav|WAV)' xine
|
||||||
|
complete -f -X '!*.@(avi|asf|wmv)' aviplay
|
||||||
|
complete -f -X '!*.@(rm|ram|smi?(l))' realplay
|
||||||
|
complete -f -X '!*.@(mp?(e)g|avi|mov|qt)' xanim
|
||||||
|
complete -f -X '!*.@(ogg|OGG|m3u)' ogg123
|
||||||
|
complete -f -X '!*.@(mp3|MP3|ogg|OGG|pls|m3u)' gqmpeg freeamp
|
||||||
|
complete -f -X '!*.@(mp[23]|MP[23]|ogg|OGG|wav|WAV|pls|m3u|xm|mod|s[3t]m|it|mtm|ult|flac)' xmms
|
||||||
|
complete -f -X '!*.fig' xfig
|
||||||
|
complete -f -X '!*.@(mid?(i))' timidity playmidi
|
||||||
|
complete -f -X '.*|*.@(o|so|so.!(conf)|a|tar?(.@(gz|bz2))|tgz|tbz2|rpm|zip|ZIP|gif|GIF|jp?(e)g|JP?(E)G|mp3|MP3|mp?(e)g|MPG|avi|AVI|asf|ASF|ogg|OGG|class|CLASS)' vi vim gvim rvim view rview rgvim rgview gview emacs
|
||||||
|
complete -f -X '!*.@(exe|EXE|com|COM|scr|SCR)' wine
|
||||||
|
complete -f -X '!*.@(zip|ZIP|z|Z|gz|GZ|tgz|TGZ)' bzme
|
||||||
|
complete -f -X '!*.@(?([xX]|[sS])[hH][tT][mM]?([lL]))' netscape mozilla lynx opera w3m galeon curl dillo elinks links
|
||||||
|
#
|
||||||
|
complete -u su passwd groups # user commands see only users
|
||||||
|
complete -A stopped -P '%' bg # bg completes with stopped jobs
|
||||||
|
complete -j -P '%' fg jobs disown # other job commands
|
||||||
|
complete -v readonly unset export # readonly and unset complete with shell variables
|
||||||
|
complete -A setopt set # set completes with set options
|
||||||
|
complete -A shopt shopt # shopt completes with shopt options
|
||||||
|
complete -A helptopic help # helptopics
|
||||||
|
complete -a unalias # unalias completes with aliases
|
||||||
|
complete -A binding bind # bind completes with readline bindings (make this more intelligent)
|
||||||
|
complete -c command type which man #sudo # type, which, man complete on commands
|
||||||
|
complete -d pushd cd rmdir # Make directory commands see only directories
|
||||||
|
complete -W ' ' alias # no filenames for alias,
|
||||||
|
|
||||||
|
##
|
||||||
|
# Set the prompt
|
||||||
|
##
|
||||||
|
PS1="[\h:\w] \[\033[1;34m\]\u\[\033[0m\]\\$ "
|
||||||
|
# My prompt line: "[gaelicWizard:~/Documents] user$ " user is in blue
|
||||||
|
# Or: "[gaelicWizard:~/Documents] root# " root is in blue
|
||||||
|
##
|
||||||
|
# Aliases:
|
||||||
|
##
|
||||||
|
# Aliases frequently used...
|
||||||
|
alias ..='cd ..;l'
|
||||||
|
alias cd..='cd ..'
|
||||||
|
alias which='type' # 'which' in (t)csh is same(?) as 'type' in bash...
|
||||||
|
alias quit='exit'
|
||||||
|
alias q='quit' # and 'q' is even shorter! :-D
|
||||||
|
alias v='vim'
|
||||||
|
alias rehash='. ~/.bashrc;' # source ~/.bashrc after I edit it
|
||||||
|
alias pg='ps -afe|grep -v grep|grep'
|
||||||
|
alias make='gmake'
|
||||||
|
alias patch='gpatch'
|
||||||
|
alias sed='gsed'
|
||||||
|
alias awk='nawk'
|
||||||
|
alias diff='gdiff'
|
||||||
|
alias grep='ggrep'
|
||||||
|
alias find='gfind'
|
||||||
|
alias ps='/usr/ucb/ps'
|
||||||
|
alias whoami='/usr/ucb/whoami'
|
||||||
|
alias ping='ping -s'
|
||||||
|
alias man='GROFF_NO_SGR= TCAT="less -s" TROFF="groff -Tascii" man -t'
|
||||||
|
|
||||||
|
|
||||||
|
# The rest are uncategorised and fairly random... :-)
|
||||||
|
shopt -s histappend
|
||||||
|
PROMPT_COMMAND='echo -ne "\033]0;${USER} on ${HOSTNAME} at ${PWD}\007" && history -a'
|
||||||
|
export PATH=/usr/local/bin:/usr/local/sbin:/usr/xpg4/bin:/usr/sbin:/usr/bin:/usr/sfw/bin:/usr/ccs/bin:/usr/openwin/bin:/opt/mysql/current/bin
|
||||||
5
samples/Shell/filenames/cshrc
Normal file
5
samples/Shell/filenames/cshrc
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
umask 022
|
||||||
|
set path=(/opt/local/bin /opt/local/sbin /bin /usr/bin)
|
||||||
|
if ( $?prompt ) then
|
||||||
|
set history=32
|
||||||
|
endif
|
||||||
2
samples/Shell/filenames/login
Normal file
2
samples/Shell/filenames/login
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
stty -istrip
|
||||||
|
# setenv TERM `tset -Q -`
|
||||||
1
samples/Shell/filenames/profile
Normal file
1
samples/Shell/filenames/profile
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export PATH="/usr/local/bin:/usr/bin:/bin"
|
||||||
1
samples/Shell/filenames/zlogin
Normal file
1
samples/Shell/filenames/zlogin
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export PATH="/usr/local/bin:/usr/bin:/bin"
|
||||||
3
samples/Shell/filenames/zlogout
Normal file
3
samples/Shell/filenames/zlogout
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Store dirs stack
|
||||||
|
# See ~/.dotfiles/oh-my-zsh/plugins/dirspersist.plugin.zsh
|
||||||
|
dirpersiststore
|
||||||
28
samples/Shell/filenames/zprofile
Normal file
28
samples/Shell/filenames/zprofile
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
##############################################################################
|
||||||
|
#Import the shell-agnostic (Bash or Zsh) environment config
|
||||||
|
##############################################################################
|
||||||
|
source ~/.profile
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# History Configuration
|
||||||
|
##############################################################################
|
||||||
|
HISTSIZE=5000 #How many lines of history to keep in memory
|
||||||
|
HISTFILE=~/.zsh_history #Where to save history to disk
|
||||||
|
SAVEHIST=5000 #Number of history entries to save to disk
|
||||||
|
HISTDUP=erase #Erase duplicates in the history file
|
||||||
|
setopt appendhistory #Append history to the history file (no overwriting)
|
||||||
|
setopt sharehistory #Share history across terminals
|
||||||
|
setopt incappendhistory #Immediately append to the history file, not just when a term is killed
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# sjl/z-zsh setup
|
||||||
|
##############################################################################
|
||||||
|
#. ~/.dotfiles/z-zsh/z.sh
|
||||||
|
#function precmd () {
|
||||||
|
# z --add "$(pwd -P)"
|
||||||
|
#}
|
||||||
|
|
||||||
|
##############################################################################
|
||||||
|
# rupa/z setup
|
||||||
|
##############################################################################
|
||||||
|
. ~/.dotfiles/z-rupa/z.sh
|
||||||
2
samples/Shell/filenames/zshenv
Normal file
2
samples/Shell/filenames/zshenv
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fpath=($fpath $HOME/.zsh/func)
|
||||||
|
typeset -U fpath
|
||||||
1
samples/Shell/filenames/zshrc
Normal file
1
samples/Shell/filenames/zshrc
Normal file
@@ -0,0 +1 @@
|
|||||||
|
export PATH="/usr/local/bin:/usr/bin:/bin"
|
||||||
3
samples/Shell/invalid-shebang.sh
Normal file
3
samples/Shell/invalid-shebang.sh
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/usr/bin/env
|
||||||
|
|
||||||
|
echo "wat"
|
||||||
432
samples/Shell/sbt.script!
Executable file
432
samples/Shell/sbt.script!
Executable file
@@ -0,0 +1,432 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
#
|
||||||
|
# A more capable sbt runner, coincidentally also called sbt.
|
||||||
|
# Author: Paul Phillips <paulp@typesafe.com>
|
||||||
|
|
||||||
|
# todo - make this dynamic
|
||||||
|
declare -r sbt_release_version=0.11.3
|
||||||
|
declare -r sbt_snapshot_version=0.13.0-SNAPSHOT
|
||||||
|
|
||||||
|
unset sbt_jar sbt_dir sbt_create sbt_snapshot sbt_launch_dir
|
||||||
|
unset scala_version java_home sbt_explicit_version
|
||||||
|
unset verbose debug quiet
|
||||||
|
|
||||||
|
build_props_sbt () {
|
||||||
|
if [[ -f project/build.properties ]]; then
|
||||||
|
versionLine=$(grep ^sbt.version project/build.properties)
|
||||||
|
versionString=${versionLine##sbt.version=}
|
||||||
|
echo "$versionString"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
update_build_props_sbt () {
|
||||||
|
local ver="$1"
|
||||||
|
local old=$(build_props_sbt)
|
||||||
|
|
||||||
|
if [[ $ver == $old ]]; then
|
||||||
|
return
|
||||||
|
elif [[ -f project/build.properties ]]; then
|
||||||
|
perl -pi -e "s/^sbt\.version=.*\$/sbt.version=${ver}/" project/build.properties
|
||||||
|
grep -q '^sbt.version=' project/build.properties || echo "sbt.version=${ver}" >> project/build.properties
|
||||||
|
|
||||||
|
echo !!!
|
||||||
|
echo !!! Updated file project/build.properties setting sbt.version to: $ver
|
||||||
|
echo !!! Previous value was: $old
|
||||||
|
echo !!!
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
sbt_version () {
|
||||||
|
if [[ -n $sbt_explicit_version ]]; then
|
||||||
|
echo $sbt_explicit_version
|
||||||
|
else
|
||||||
|
local v=$(build_props_sbt)
|
||||||
|
if [[ -n $v ]]; then
|
||||||
|
echo $v
|
||||||
|
else
|
||||||
|
echo $sbt_release_version
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echoerr () {
|
||||||
|
echo 1>&2 "$@"
|
||||||
|
}
|
||||||
|
vlog () {
|
||||||
|
[[ $verbose || $debug ]] && echoerr "$@"
|
||||||
|
}
|
||||||
|
dlog () {
|
||||||
|
[[ $debug ]] && echoerr "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# this seems to cover the bases on OSX, and someone will
|
||||||
|
# have to tell me about the others.
|
||||||
|
get_script_path () {
|
||||||
|
local path="$1"
|
||||||
|
[[ -L "$path" ]] || { echo "$path" ; return; }
|
||||||
|
|
||||||
|
local target=$(readlink "$path")
|
||||||
|
if [[ "${target:0:1}" == "/" ]]; then
|
||||||
|
echo "$target"
|
||||||
|
else
|
||||||
|
echo "$(dirname $path)/$target"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# a ham-fisted attempt to move some memory settings in concert
|
||||||
|
# so they need not be dicked around with individually.
|
||||||
|
get_mem_opts () {
|
||||||
|
local mem=${1:-1536}
|
||||||
|
local perm=$(( $mem / 4 ))
|
||||||
|
(( $perm > 256 )) || perm=256
|
||||||
|
(( $perm < 1024 )) || perm=1024
|
||||||
|
local codecache=$(( $perm / 2 ))
|
||||||
|
|
||||||
|
echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m"
|
||||||
|
}
|
||||||
|
|
||||||
|
die() {
|
||||||
|
echo "Aborting: $@"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
make_url () {
|
||||||
|
groupid="$1"
|
||||||
|
category="$2"
|
||||||
|
version="$3"
|
||||||
|
|
||||||
|
echo "http://typesafe.artifactoryonline.com/typesafe/ivy-$category/$groupid/sbt-launch/$version/sbt-launch.jar"
|
||||||
|
}
|
||||||
|
|
||||||
|
declare -r default_jvm_opts="-Dfile.encoding=UTF8"
|
||||||
|
declare -r default_sbt_opts="-XX:+CMSClassUnloadingEnabled"
|
||||||
|
declare -r default_sbt_mem=1536
|
||||||
|
declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy"
|
||||||
|
declare -r sbt_opts_file=".sbtopts"
|
||||||
|
declare -r jvm_opts_file=".jvmopts"
|
||||||
|
declare -r latest_28="2.8.2"
|
||||||
|
declare -r latest_29="2.9.1"
|
||||||
|
declare -r latest_210="2.10.0-SNAPSHOT"
|
||||||
|
|
||||||
|
declare -r script_path=$(get_script_path "$BASH_SOURCE")
|
||||||
|
declare -r script_dir="$(dirname $script_path)"
|
||||||
|
declare -r script_name="$(basename $script_path)"
|
||||||
|
|
||||||
|
# some non-read-onlies set with defaults
|
||||||
|
declare java_cmd=java
|
||||||
|
declare sbt_launch_dir="$script_dir/.lib"
|
||||||
|
declare sbt_mem=$default_sbt_mem
|
||||||
|
|
||||||
|
# pull -J and -D options to give to java.
|
||||||
|
declare -a residual_args
|
||||||
|
declare -a java_args
|
||||||
|
declare -a scalac_args
|
||||||
|
declare -a sbt_commands
|
||||||
|
|
||||||
|
build_props_scala () {
|
||||||
|
if [[ -f project/build.properties ]]; then
|
||||||
|
versionLine=$(grep ^build.scala.versions project/build.properties)
|
||||||
|
versionString=${versionLine##build.scala.versions=}
|
||||||
|
echo ${versionString%% .*}
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
execRunner () {
|
||||||
|
# print the arguments one to a line, quoting any containing spaces
|
||||||
|
[[ $verbose || $debug ]] && echo "# Executing command line:" && {
|
||||||
|
for arg; do
|
||||||
|
if printf "%s\n" "$arg" | grep -q ' '; then
|
||||||
|
printf "\"%s\"\n" "$arg"
|
||||||
|
else
|
||||||
|
printf "%s\n" "$arg"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
}
|
||||||
|
|
||||||
|
exec "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
sbt_groupid () {
|
||||||
|
case $(sbt_version) in
|
||||||
|
0.7.*) echo org.scala-tools.sbt ;;
|
||||||
|
0.10.*) echo org.scala-tools.sbt ;;
|
||||||
|
0.11.[12]) echo org.scala-tools.sbt ;;
|
||||||
|
*) echo org.scala-sbt ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
sbt_artifactory_list () {
|
||||||
|
local version0=$(sbt_version)
|
||||||
|
local version=${version0%-SNAPSHOT}
|
||||||
|
local url="http://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/$(sbt_groupid)/sbt-launch/"
|
||||||
|
dlog "Looking for snapshot list at: $url "
|
||||||
|
|
||||||
|
curl -s --list-only "$url" | \
|
||||||
|
grep -F $version | \
|
||||||
|
perl -e 'print reverse <>' | \
|
||||||
|
perl -pe 's#^<a href="([^"/]+).*#$1#;'
|
||||||
|
}
|
||||||
|
|
||||||
|
make_release_url () {
|
||||||
|
make_url $(sbt_groupid) releases $(sbt_version)
|
||||||
|
}
|
||||||
|
|
||||||
|
# argument is e.g. 0.13.0-SNAPSHOT
|
||||||
|
# finds the actual version (with the build id) at artifactory
|
||||||
|
make_snapshot_url () {
|
||||||
|
for ver in $(sbt_artifactory_list); do
|
||||||
|
local url=$(make_url $(sbt_groupid) snapshots $ver)
|
||||||
|
dlog "Testing $url"
|
||||||
|
curl -s --head "$url" >/dev/null
|
||||||
|
dlog "curl returned: $?"
|
||||||
|
echo "$url"
|
||||||
|
return
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
jar_url () {
|
||||||
|
case $(sbt_version) in
|
||||||
|
0.7.*) echo "http://simple-build-tool.googlecode.com/files/sbt-launch-0.7.7.jar" ;;
|
||||||
|
*-SNAPSHOT) make_snapshot_url ;;
|
||||||
|
*) make_release_url ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
jar_file () {
|
||||||
|
echo "$sbt_launch_dir/$1/sbt-launch.jar"
|
||||||
|
}
|
||||||
|
|
||||||
|
download_url () {
|
||||||
|
local url="$1"
|
||||||
|
local jar="$2"
|
||||||
|
|
||||||
|
echo "Downloading sbt launcher $(sbt_version):"
|
||||||
|
echo " From $url"
|
||||||
|
echo " To $jar"
|
||||||
|
|
||||||
|
mkdir -p $(dirname "$jar") && {
|
||||||
|
if which curl >/dev/null; then
|
||||||
|
curl --fail --silent "$url" --output "$jar"
|
||||||
|
elif which wget >/dev/null; then
|
||||||
|
wget --quiet -O "$jar" "$url"
|
||||||
|
fi
|
||||||
|
} && [[ -f "$jar" ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
acquire_sbt_jar () {
|
||||||
|
sbt_url="$(jar_url)"
|
||||||
|
sbt_jar="$(jar_file $(sbt_version))"
|
||||||
|
|
||||||
|
[[ -f "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar"
|
||||||
|
}
|
||||||
|
|
||||||
|
usage () {
|
||||||
|
cat <<EOM
|
||||||
|
Usage: $script_name [options]
|
||||||
|
|
||||||
|
-h | -help print this message
|
||||||
|
-v | -verbose this runner is chattier
|
||||||
|
-d | -debug set sbt log level to Debug
|
||||||
|
-q | -quiet set sbt log level to Error
|
||||||
|
-no-colors disable ANSI color codes
|
||||||
|
-sbt-create start sbt even if current directory contains no sbt project
|
||||||
|
-sbt-dir <path> path to global settings/plugins directory (default: ~/.sbt/<version>)
|
||||||
|
-sbt-boot <path> path to shared boot directory (default: ~/.sbt/boot in 0.11 series)
|
||||||
|
-ivy <path> path to local Ivy repository (default: ~/.ivy2)
|
||||||
|
-mem <integer> set memory options (default: $sbt_mem, which is
|
||||||
|
$(get_mem_opts $sbt_mem) )
|
||||||
|
-no-share use all local caches; no sharing
|
||||||
|
-offline put sbt in offline mode
|
||||||
|
-jvm-debug <port> Turn on JVM debugging, open at the given port.
|
||||||
|
-batch Disable interactive mode
|
||||||
|
|
||||||
|
# sbt version (default: from project/build.properties if present, else latest release)
|
||||||
|
!!! The only way to accomplish this pre-0.12.0 if there is a build.properties file which
|
||||||
|
!!! contains an sbt.version property is to update the file on disk. That's what this does.
|
||||||
|
-sbt-version <version> use the specified version of sbt
|
||||||
|
-sbt-jar <path> use the specified jar as the sbt launcher
|
||||||
|
-sbt-snapshot use a snapshot version of sbt
|
||||||
|
-sbt-launch-dir <path> directory to hold sbt launchers (default: $sbt_launch_dir)
|
||||||
|
|
||||||
|
# scala version (default: as chosen by sbt)
|
||||||
|
-28 use $latest_28
|
||||||
|
-29 use $latest_29
|
||||||
|
-210 use $latest_210
|
||||||
|
-scala-home <path> use the scala build at the specified directory
|
||||||
|
-scala-version <version> use the specified version of scala
|
||||||
|
|
||||||
|
# java version (default: java from PATH, currently $(java -version |& grep version))
|
||||||
|
-java-home <path> alternate JAVA_HOME
|
||||||
|
|
||||||
|
# jvm options and output control
|
||||||
|
JAVA_OPTS environment variable holding jvm args, if unset uses "$default_jvm_opts"
|
||||||
|
SBT_OPTS environment variable holding jvm args, if unset uses "$default_sbt_opts"
|
||||||
|
.jvmopts if file is in sbt root, it is prepended to the args given to the jvm
|
||||||
|
.sbtopts if file is in sbt root, it is prepended to the args given to **sbt**
|
||||||
|
-Dkey=val pass -Dkey=val directly to the jvm
|
||||||
|
-J-X pass option -X directly to the jvm (-J is stripped)
|
||||||
|
-S-X add -X to sbt's scalacOptions (-S is stripped)
|
||||||
|
|
||||||
|
In the case of duplicated or conflicting options, the order above
|
||||||
|
shows precedence: JAVA_OPTS lowest, command line options highest.
|
||||||
|
EOM
|
||||||
|
}
|
||||||
|
|
||||||
|
addJava () {
|
||||||
|
dlog "[addJava] arg = '$1'"
|
||||||
|
java_args=( "${java_args[@]}" "$1" )
|
||||||
|
}
|
||||||
|
addSbt () {
|
||||||
|
dlog "[addSbt] arg = '$1'"
|
||||||
|
sbt_commands=( "${sbt_commands[@]}" "$1" )
|
||||||
|
}
|
||||||
|
addScalac () {
|
||||||
|
dlog "[addScalac] arg = '$1'"
|
||||||
|
scalac_args=( "${scalac_args[@]}" "$1" )
|
||||||
|
}
|
||||||
|
addResidual () {
|
||||||
|
dlog "[residual] arg = '$1'"
|
||||||
|
residual_args=( "${residual_args[@]}" "$1" )
|
||||||
|
}
|
||||||
|
addResolver () {
|
||||||
|
addSbt "set resolvers in ThisBuild += $1"
|
||||||
|
}
|
||||||
|
addDebugger () {
|
||||||
|
addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1"
|
||||||
|
}
|
||||||
|
get_jvm_opts () {
|
||||||
|
# echo "${JAVA_OPTS:-$default_jvm_opts}"
|
||||||
|
# echo "${SBT_OPTS:-$default_sbt_opts}"
|
||||||
|
|
||||||
|
[[ -f "$jvm_opts_file" ]] && cat "$jvm_opts_file"
|
||||||
|
}
|
||||||
|
|
||||||
|
process_args ()
|
||||||
|
{
|
||||||
|
require_arg () {
|
||||||
|
local type="$1"
|
||||||
|
local opt="$2"
|
||||||
|
local arg="$3"
|
||||||
|
|
||||||
|
if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then
|
||||||
|
die "$opt requires <$type> argument"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
while [[ $# -gt 0 ]]; do
|
||||||
|
case "$1" in
|
||||||
|
-h|-help) usage; exit 1 ;;
|
||||||
|
-v|-verbose) verbose=1 && shift ;;
|
||||||
|
-d|-debug) debug=1 && shift ;;
|
||||||
|
-q|-quiet) quiet=1 && shift ;;
|
||||||
|
|
||||||
|
-ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;;
|
||||||
|
-mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;;
|
||||||
|
-no-colors) addJava "-Dsbt.log.noformat=true" && shift ;;
|
||||||
|
-no-share) addJava "$noshare_opts" && shift ;;
|
||||||
|
-sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;;
|
||||||
|
-sbt-dir) require_arg path "$1" "$2" && sbt_dir="$2" && shift 2 ;;
|
||||||
|
-debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;;
|
||||||
|
-offline) addSbt "set offline := true" && shift ;;
|
||||||
|
-jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;;
|
||||||
|
-batch) exec </dev/null && shift ;;
|
||||||
|
|
||||||
|
-sbt-create) sbt_create=true && shift ;;
|
||||||
|
-sbt-snapshot) sbt_explicit_version=$sbt_snapshot_version && shift ;;
|
||||||
|
-sbt-jar) require_arg path "$1" "$2" && sbt_jar="$2" && shift 2 ;;
|
||||||
|
-sbt-version) require_arg version "$1" "$2" && sbt_explicit_version="$2" && shift 2 ;;
|
||||||
|
-sbt-launch-dir) require_arg path "$1" "$2" && sbt_launch_dir="$2" && shift 2 ;;
|
||||||
|
-scala-version) require_arg version "$1" "$2" && addSbt "set scalaVersion := \"$2\"" && shift 2 ;;
|
||||||
|
-scala-home) require_arg path "$1" "$2" && addSbt "set scalaHome in ThisBuild := Some(file(\"$2\"))" && shift 2 ;;
|
||||||
|
-java-home) require_arg path "$1" "$2" && java_cmd="$2/bin/java" && shift 2 ;;
|
||||||
|
|
||||||
|
-D*) addJava "$1" && shift ;;
|
||||||
|
-J*) addJava "${1:2}" && shift ;;
|
||||||
|
-S*) addScalac "${1:2}" && shift ;;
|
||||||
|
-28) addSbt "++ $latest_28" && shift ;;
|
||||||
|
-29) addSbt "++ $latest_29" && shift ;;
|
||||||
|
-210) addSbt "++ $latest_210" && shift ;;
|
||||||
|
|
||||||
|
*) addResidual "$1" && shift ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
[[ $debug ]] && {
|
||||||
|
case $(sbt_version) in
|
||||||
|
0.7.*) addSbt "debug" ;;
|
||||||
|
*) addSbt "set logLevel in Global := Level.Debug" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
[[ $quiet ]] && {
|
||||||
|
case $(sbt_version) in
|
||||||
|
0.7.*) ;;
|
||||||
|
*) addSbt "set logLevel in Global := Level.Error" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# if .sbtopts exists, prepend its contents to $@ so it can be processed by this runner
|
||||||
|
[[ -f "$sbt_opts_file" ]] && {
|
||||||
|
sbtargs=()
|
||||||
|
while IFS= read -r arg; do
|
||||||
|
sbtargs=( "${sbtargs[@]}" "$arg" )
|
||||||
|
done <"$sbt_opts_file"
|
||||||
|
|
||||||
|
set -- "${sbtargs[@]}" "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# process the combined args, then reset "$@" to the residuals
|
||||||
|
process_args "$@"
|
||||||
|
set -- "${residual_args[@]}"
|
||||||
|
argumentCount=$#
|
||||||
|
|
||||||
|
# set scalacOptions if we were given any -S opts
|
||||||
|
[[ ${#scalac_args[@]} -eq 0 ]] || addSbt "set scalacOptions in ThisBuild += \"${scalac_args[@]}\""
|
||||||
|
|
||||||
|
# Update build.properties no disk to set explicit version - sbt gives us no choice
|
||||||
|
[[ -n "$sbt_explicit_version" ]] && update_build_props_sbt "$sbt_explicit_version"
|
||||||
|
echo "Detected sbt version $(sbt_version)"
|
||||||
|
|
||||||
|
[[ -n "$scala_version" ]] && echo "Overriding scala version to $scala_version"
|
||||||
|
|
||||||
|
# no args - alert them there's stuff in here
|
||||||
|
(( $argumentCount > 0 )) || echo "Starting $script_name: invoke with -help for other options"
|
||||||
|
|
||||||
|
# verify this is an sbt dir or -create was given
|
||||||
|
[[ -f ./build.sbt || -d ./project || -n "$sbt_create" ]] || {
|
||||||
|
cat <<EOM
|
||||||
|
$(pwd) doesn't appear to be an sbt project.
|
||||||
|
If you want to start sbt anyway, run:
|
||||||
|
$0 -sbt-create
|
||||||
|
|
||||||
|
EOM
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# pick up completion if present; todo
|
||||||
|
[[ -f .sbt_completion.sh ]] && source .sbt_completion.sh
|
||||||
|
|
||||||
|
# no jar? download it.
|
||||||
|
[[ -f "$sbt_jar" ]] || acquire_sbt_jar || {
|
||||||
|
# still no jar? uh-oh.
|
||||||
|
echo "Download failed. Obtain the jar manually and place it at $sbt_jar"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
[[ -n "$sbt_dir" ]] || {
|
||||||
|
sbt_dir=~/.sbt/$(sbt_version)
|
||||||
|
addJava "-Dsbt.global.base=$sbt_dir"
|
||||||
|
echo "Using $sbt_dir as sbt dir, -sbt-dir to override."
|
||||||
|
}
|
||||||
|
|
||||||
|
# since sbt 0.7 doesn't understand iflast
|
||||||
|
(( ${#residual_args[@]} == 0 )) && residual_args=( "shell" )
|
||||||
|
|
||||||
|
# run sbt
|
||||||
|
execRunner "$java_cmd" \
|
||||||
|
$(get_mem_opts $sbt_mem) \
|
||||||
|
$(get_jvm_opts) \
|
||||||
|
${java_args[@]} \
|
||||||
|
-jar "$sbt_jar" \
|
||||||
|
"${sbt_commands[@]}" \
|
||||||
|
"${residual_args[@]}"
|
||||||
1
samples/Text/mac.txt
Normal file
1
samples/Text/mac.txt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
line 1
|
||||||
@@ -2,6 +2,7 @@ require 'linguist/file_blob'
|
|||||||
require 'linguist/samples'
|
require 'linguist/samples'
|
||||||
|
|
||||||
require 'test/unit'
|
require 'test/unit'
|
||||||
|
require 'mocha'
|
||||||
require 'mime/types'
|
require 'mime/types'
|
||||||
require 'pygments'
|
require 'pygments'
|
||||||
|
|
||||||
@@ -64,6 +65,14 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
assert_equal ["module Foo", "end", ""], blob("Ruby/foo.rb").lines
|
assert_equal ["module Foo", "end", ""], blob("Ruby/foo.rb").lines
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_mac_format
|
||||||
|
assert blob("Text/mac.txt").mac_format?
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_lines_mac_format
|
||||||
|
assert_equal ["line 1", "line 2", ""], blob("Text/mac.txt").lines
|
||||||
|
end
|
||||||
|
|
||||||
def test_size
|
def test_size
|
||||||
assert_equal 15, blob("Ruby/foo.rb").size
|
assert_equal 15, blob("Ruby/foo.rb").size
|
||||||
end
|
end
|
||||||
@@ -261,6 +270,12 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
assert !blob("Text/dump.sql").indexable?
|
assert !blob("Text/dump.sql").indexable?
|
||||||
assert !blob("Binary/github.po").indexable?
|
assert !blob("Binary/github.po").indexable?
|
||||||
assert !blob("Binary/linguist.gem").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
|
end
|
||||||
|
|
||||||
def test_language
|
def test_language
|
||||||
@@ -276,11 +291,10 @@ class TestBlob < Test::Unit::TestCase
|
|||||||
end
|
end
|
||||||
|
|
||||||
def test_colorize
|
def test_colorize
|
||||||
assert_equal <<-HTML, blob("Ruby/foo.rb").colorize
|
assert_equal <<-HTML.chomp, blob("Ruby/foo.rb").colorize
|
||||||
<div class="highlight"><pre><span class="k">module</span> <span class="nn">Foo</span>
|
<div class="highlight"><pre><span class="k">module</span> <span class="nn">Foo</span>
|
||||||
<span class="k">end</span>
|
<span class="k">end</span>
|
||||||
</pre>
|
</pre></div>
|
||||||
</div>
|
|
||||||
HTML
|
HTML
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal Lexer['HTML'], Language['HTML'].lexer
|
assert_equal Lexer['HTML'], Language['HTML'].lexer
|
||||||
assert_equal Lexer['HTML+Django/Jinja'], Language['HTML+Django'].lexer
|
assert_equal Lexer['HTML+Django/Jinja'], Language['HTML+Django'].lexer
|
||||||
assert_equal Lexer['HTML+PHP'], Language['HTML+PHP'].lexer
|
assert_equal Lexer['HTML+PHP'], Language['HTML+PHP'].lexer
|
||||||
|
assert_equal Lexer['HTTP'], Language['HTTP'].lexer
|
||||||
assert_equal Lexer['JSON'], Language['JSON'].lexer
|
assert_equal Lexer['JSON'], Language['JSON'].lexer
|
||||||
assert_equal Lexer['Java'], Language['ChucK'].lexer
|
assert_equal Lexer['Java'], Language['ChucK'].lexer
|
||||||
assert_equal Lexer['Java'], Language['Java'].lexer
|
assert_equal Lexer['Java'], Language['Java'].lexer
|
||||||
@@ -51,7 +52,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal Lexer['Verilog'], Language['Verilog'].lexer
|
assert_equal Lexer['Verilog'], Language['Verilog'].lexer
|
||||||
assert_equal Lexer['XSLT'], Language['XSLT'].lexer
|
assert_equal Lexer['XSLT'], Language['XSLT'].lexer
|
||||||
assert_equal Lexer['aspx-vb'], Language['ASP'].lexer
|
assert_equal Lexer['aspx-vb'], Language['ASP'].lexer
|
||||||
assert_equal Lexer['haXe'], Language['HaXe'].lexer
|
assert_equal Lexer['haXe'], Language['Haxe'].lexer
|
||||||
assert_equal Lexer['reStructuredText'], Language['reStructuredText'].lexer
|
assert_equal Lexer['reStructuredText'], Language['reStructuredText'].lexer
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -60,6 +61,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal Language['ASP'], Language.find_by_alias('aspx')
|
assert_equal Language['ASP'], Language.find_by_alias('aspx')
|
||||||
assert_equal Language['ASP'], Language.find_by_alias('aspx-vb')
|
assert_equal Language['ASP'], Language.find_by_alias('aspx-vb')
|
||||||
assert_equal Language['ActionScript'], Language.find_by_alias('as3')
|
assert_equal Language['ActionScript'], Language.find_by_alias('as3')
|
||||||
|
assert_equal Language['ApacheConf'], Language.find_by_alias('apache')
|
||||||
assert_equal Language['Assembly'], Language.find_by_alias('nasm')
|
assert_equal Language['Assembly'], Language.find_by_alias('nasm')
|
||||||
assert_equal Language['Batchfile'], Language.find_by_alias('bat')
|
assert_equal Language['Batchfile'], Language.find_by_alias('bat')
|
||||||
assert_equal Language['C#'], Language.find_by_alias('c#')
|
assert_equal Language['C#'], Language.find_by_alias('c#')
|
||||||
@@ -68,6 +70,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal Language['C++'], Language.find_by_alias('c++')
|
assert_equal Language['C++'], Language.find_by_alias('c++')
|
||||||
assert_equal Language['C++'], Language.find_by_alias('cpp')
|
assert_equal Language['C++'], Language.find_by_alias('cpp')
|
||||||
assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee')
|
assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee')
|
||||||
|
assert_equal Language['CoffeeScript'], Language.find_by_alias('coffee-script')
|
||||||
assert_equal Language['ColdFusion'], Language.find_by_alias('cfm')
|
assert_equal Language['ColdFusion'], Language.find_by_alias('cfm')
|
||||||
assert_equal Language['Common Lisp'], Language.find_by_alias('common-lisp')
|
assert_equal Language['Common Lisp'], Language.find_by_alias('common-lisp')
|
||||||
assert_equal Language['Common Lisp'], Language.find_by_alias('lisp')
|
assert_equal Language['Common Lisp'], Language.find_by_alias('lisp')
|
||||||
@@ -78,7 +81,9 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal Language['Emacs Lisp'], Language.find_by_alias('emacs-lisp')
|
assert_equal Language['Emacs Lisp'], Language.find_by_alias('emacs-lisp')
|
||||||
assert_equal Language['Gettext Catalog'], Language.find_by_alias('pot')
|
assert_equal Language['Gettext Catalog'], Language.find_by_alias('pot')
|
||||||
assert_equal Language['HTML'], Language.find_by_alias('html')
|
assert_equal Language['HTML'], Language.find_by_alias('html')
|
||||||
|
assert_equal Language['HTML'], Language.find_by_alias('xhtml')
|
||||||
assert_equal Language['HTML+ERB'], Language.find_by_alias('html+erb')
|
assert_equal Language['HTML+ERB'], Language.find_by_alias('html+erb')
|
||||||
|
assert_equal Language['HTML+ERB'], Language.find_by_alias('erb')
|
||||||
assert_equal Language['IRC log'], Language.find_by_alias('irc')
|
assert_equal Language['IRC log'], Language.find_by_alias('irc')
|
||||||
assert_equal Language['JSON'], Language.find_by_alias('json')
|
assert_equal Language['JSON'], Language.find_by_alias('json')
|
||||||
assert_equal Language['Java Server Pages'], Language.find_by_alias('jsp')
|
assert_equal Language['Java Server Pages'], Language.find_by_alias('jsp')
|
||||||
@@ -87,6 +92,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal Language['JavaScript'], Language.find_by_alias('js')
|
assert_equal Language['JavaScript'], Language.find_by_alias('js')
|
||||||
assert_equal Language['Literate Haskell'], Language.find_by_alias('lhs')
|
assert_equal Language['Literate Haskell'], Language.find_by_alias('lhs')
|
||||||
assert_equal Language['Literate Haskell'], Language.find_by_alias('literate-haskell')
|
assert_equal Language['Literate Haskell'], Language.find_by_alias('literate-haskell')
|
||||||
|
assert_equal Language['Objective-C'], Language.find_by_alias('objc')
|
||||||
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('openedge')
|
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('openedge')
|
||||||
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('progress')
|
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('progress')
|
||||||
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('abl')
|
assert_equal Language['OpenEdge ABL'], Language.find_by_alias('abl')
|
||||||
@@ -106,6 +112,7 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal Language['VimL'], Language.find_by_alias('vim')
|
assert_equal Language['VimL'], Language.find_by_alias('vim')
|
||||||
assert_equal Language['VimL'], Language.find_by_alias('viml')
|
assert_equal Language['VimL'], Language.find_by_alias('viml')
|
||||||
assert_equal Language['reStructuredText'], Language.find_by_alias('rst')
|
assert_equal Language['reStructuredText'], Language.find_by_alias('rst')
|
||||||
|
assert_equal Language['YAML'], Language.find_by_alias('yml')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_groups
|
def test_groups
|
||||||
@@ -224,10 +231,16 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert_equal [Language['Ruby']], Language.find_by_filename('foo/bar.rb')
|
assert_equal [Language['Ruby']], Language.find_by_filename('foo/bar.rb')
|
||||||
assert_equal [Language['Ruby']], Language.find_by_filename('Rakefile')
|
assert_equal [Language['Ruby']], Language.find_by_filename('Rakefile')
|
||||||
assert_equal [Language['Ruby']], Language.find_by_filename('PKGBUILD.rb')
|
assert_equal [Language['Ruby']], Language.find_by_filename('PKGBUILD.rb')
|
||||||
|
assert_equal Language['ApacheConf'], Language.find_by_filename('httpd.conf').first
|
||||||
|
assert_equal [Language['ApacheConf']], Language.find_by_filename('.htaccess')
|
||||||
|
assert_equal Language['Nginx'], Language.find_by_filename('nginx.conf').first
|
||||||
assert_equal ['C', 'C++', 'Objective-C'], Language.find_by_filename('foo.h').map(&:name).sort
|
assert_equal ['C', 'C++', 'Objective-C'], Language.find_by_filename('foo.h').map(&:name).sort
|
||||||
assert_equal [], Language.find_by_filename('rb')
|
assert_equal [], Language.find_by_filename('rb')
|
||||||
assert_equal [], Language.find_by_filename('.rb')
|
assert_equal [], Language.find_by_filename('.rb')
|
||||||
assert_equal [], Language.find_by_filename('.nkt')
|
assert_equal [], Language.find_by_filename('.nkt')
|
||||||
|
assert_equal [Language['Shell']], Language.find_by_filename('.bashrc')
|
||||||
|
assert_equal [Language['Shell']], Language.find_by_filename('bash_profile')
|
||||||
|
assert_equal [Language['Shell']], Language.find_by_filename('.zshrc')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_find
|
def test_find
|
||||||
@@ -286,6 +299,11 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
assert !Language.ace_modes.include?(Language['FORTRAN'])
|
assert !Language.ace_modes.include?(Language['FORTRAN'])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_wrap
|
||||||
|
assert_equal false, Language['C'].wrap
|
||||||
|
assert_equal true, Language['Markdown'].wrap
|
||||||
|
end
|
||||||
|
|
||||||
def test_extensions
|
def test_extensions
|
||||||
assert Language['Perl'].extensions.include?('.pl')
|
assert Language['Perl'].extensions.include?('.pl')
|
||||||
assert Language['Python'].extensions.include?('.py')
|
assert Language['Python'].extensions.include?('.py')
|
||||||
@@ -314,12 +332,11 @@ class TestLanguage < Test::Unit::TestCase
|
|||||||
|
|
||||||
|
|
||||||
def test_colorize
|
def test_colorize
|
||||||
assert_equal <<-HTML, Language['Ruby'].colorize("def foo\n 'foo'\nend\n")
|
assert_equal <<-HTML.chomp, Language['Ruby'].colorize("def foo\n 'foo'\nend\n")
|
||||||
<div class="highlight"><pre><span class="k">def</span> <span class="nf">foo</span>
|
<div class="highlight"><pre><span class="k">def</span> <span class="nf">foo</span>
|
||||||
<span class="s1">'foo'</span>
|
<span class="s1">'foo'</span>
|
||||||
<span class="k">end</span>
|
<span class="k">end</span>
|
||||||
</pre>
|
</pre></div>
|
||||||
</div>
|
|
||||||
HTML
|
HTML
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
require 'linguist/samples'
|
require 'linguist/samples'
|
||||||
|
require 'tempfile'
|
||||||
|
require 'yajl'
|
||||||
|
|
||||||
require 'test/unit'
|
require 'test/unit'
|
||||||
|
|
||||||
@@ -12,6 +14,19 @@ class TestSamples < Test::Unit::TestCase
|
|||||||
# Just warn, it shouldn't scare people off by breaking the build.
|
# Just warn, it shouldn't scare people off by breaking the build.
|
||||||
if serialized['md5'] != latest['md5']
|
if serialized['md5'] != latest['md5']
|
||||||
warn "Samples database is out of date. Run `bundle exec rake samples`."
|
warn "Samples database is out of date. Run `bundle exec rake samples`."
|
||||||
|
|
||||||
|
expected = Tempfile.new('expected.json')
|
||||||
|
expected.write Yajl::Encoder.encode(serialized, :pretty => true)
|
||||||
|
expected.close
|
||||||
|
|
||||||
|
actual = Tempfile.new('actual.json')
|
||||||
|
actual.write Yajl::Encoder.encode(latest, :pretty => true)
|
||||||
|
actual.close
|
||||||
|
|
||||||
|
warn `diff #{expected.path} #{actual.path}`
|
||||||
|
|
||||||
|
expected.unlink
|
||||||
|
actual.unlink
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ class TestTokenizer < Test::Unit::TestCase
|
|||||||
assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0]
|
assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0]
|
||||||
assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0]
|
assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0]
|
||||||
assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0]
|
assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0]
|
||||||
|
assert_equal "SHEBANG#!php", tokenize(:"PHP/php.script!")[0]
|
||||||
|
assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0]
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_javascript_tokens
|
def test_javascript_tokens
|
||||||
|
|||||||
Reference in New Issue
Block a user