Merge remote-tracking branch 'remotes/upstream/master'

Conflicts:
	demo/kitchen-sink/demo.js
This commit is contained in:
nightwing 2012-03-31 00:06:11 +04:00
commit b546875c1d
288 changed files with 56230 additions and 22271 deletions

View file

@ -41,9 +41,9 @@
define(function(require, exports, module) {
require("ace/lib/fixoldbrowsers");
require("ace/config").init();
var env = {};
var net = require("ace/lib/net");
var event = require("ace/lib/event");
var theme = require("ace/theme/textmate");
var EditSession = require("ace/edit_session").EditSession;
@ -65,6 +65,7 @@ var Doc = function(name, desc, file) {
this.desc = desc;
this.doc = new EditSession(file);
this.doc.setMode(modesByName[name].mode);
this.doc.modeName = name;
this.doc.setUndoManager(new UndoManager());
};
@ -75,13 +76,10 @@ var WrappedDoc = function(name, desc, file) {
this.doc.setWrapLimitRange(80, 80);
};
var Mode = function(name, desc, clazz, extensions) {
var Mode = function(name, desc, extensions) {
this.name = name;
this.desc = desc;
this.clazz = clazz;
this.mode = new clazz();
this.mode.name = name;
this.mode = "ace/mode/" + name;
this.extRe = new RegExp("^.*\\.(" + extensions.join("|") + ")$", "g");
};
@ -89,48 +87,38 @@ Mode.prototype.supportsFile = function(filename) {
return filename.match(this.extRe);
};
var themes = {};
function loadTheme(name, callback) {
if (themes[name])
return callback();
themes[name] = 1;
var base = name.split("/").pop();
var fileName = "demo/kitchen-sink/theme-" + base + "-uncompressed.js";
net.loadScript(fileName, callback);
}
//{
var modes = [
new Mode("c_cpp", "C/C++", require("ace/mode/c_cpp").Mode, ["c", "cpp", "cxx", "h", "hpp"]),
new Mode("clojure", "Clojure", require("ace/mode/clojure").Mode, ["clj"]),
new Mode("coffee", "CoffeeScript", require("ace/mode/coffee").Mode, ["coffee"]),
new Mode("coldfusion", "ColdFusion", require("ace/mode/coldfusion").Mode, ["cfm"]),
new Mode("csharp", "C#", require("ace/mode/csharp").Mode, ["cs"]),
new Mode("css", "CSS", require("ace/mode/css").Mode, ["css"]),
new Mode("groovy", "Groovy", require("ace/mode/groovy").Mode, ["groovy"]),
new Mode("haxe", "haXe", require("ace/mode/haxe").Mode, ["hx"]),
new Mode("html", "HTML", require("ace/mode/html").Mode, ["html", "htm"]),
new Mode("java", "Java", require("ace/mode/java").Mode, ["java"]),
new Mode("javascript", "JavaScript", require("ace/mode/javascript").Mode, ["js"]),
new Mode("json", "JSON", require("ace/mode/json").Mode, ["json"]),
new Mode("latex", "LaTeX", require("ace/mode/latex").Mode, ["tex"]),
new Mode("lua", "Lua", require("ace/mode/lua").Mode, ["lua"]),
new Mode("markdown", "Markdown", require("ace/mode/markdown").Mode, ["md", "markdown"]),
new Mode("ocaml", "OCaml", require("ace/mode/ocaml").Mode, ["ml", "mli"]),
new Mode("perl", "Perl", require("ace/mode/perl").Mode, ["pl", "pm"]),
new Mode("pgsql", "pgSQL",require("ace/mode/pgsql").Mode, ["pgsql", "sql"]),
new Mode("php", "PHP",require("ace/mode/php").Mode, ["php"]),
new Mode("powershell", "Powershell", require("ace/mode/powershell").Mode, ["ps1"]),
new Mode("python", "Python", require("ace/mode/python").Mode, ["py"]),
new Mode("scala", "Scala", require("ace/mode/scala").Mode, ["scala"]),
new Mode("scss", "SCSS", require("ace/mode/scss").Mode, ["scss"]),
new Mode("ruby", "Ruby", require("ace/mode/ruby").Mode, ["rb"]),
new Mode("sql", "SQL", require("ace/mode/sql").Mode, ["sql"]),
new Mode("svg", "SVG", require("ace/mode/SVG").Mode, ["svg"]),
new Mode("text", "Text", require("ace/mode/text").Mode, ["txt"]),
new Mode("textile", "Textile", require("ace/mode/textile").Mode, ["textile"]),
new Mode("xml", "XML", require("ace/mode/xml").Mode, ["xml"])
new Mode("c_cpp", "C/C++", ["c", "cpp", "cxx", "h", "hpp"]),
new Mode("clojure", "Clojure", ["clj"]),
new Mode("coffee", "CoffeeScript", ["coffee"]),
new Mode("coldfusion", "ColdFusion", ["cfm"]),
new Mode("csharp", "C#", ["cs"]),
new Mode("css", "CSS", ["css"]),
new Mode("groovy", "Groovy", ["groovy"]),
new Mode("haxe", "haXe", ["hx"]),
new Mode("html", "HTML", ["html", "htm"]),
new Mode("java", "Java", ["java"]),
new Mode("javascript", "JavaScript", ["js"]),
new Mode("json", "JSON", ["json"]),
new Mode("latex", "LaTeX", ["tex"]),
new Mode("lua", "Lua", ["lua"]),
new Mode("markdown", "Markdown", ["md", "markdown"]),
new Mode("ocaml", "OCaml", ["ml", "mli"]),
new Mode("perl", "Perl", ["pl", "pm"]),
new Mode("pgsql", "pgSQL", ["pgsql", "sql"]),
new Mode("php", "PHP", ["php"]),
new Mode("powershell", "Powershell", ["ps1"]),
new Mode("python", "Python", ["py"]),
new Mode("scala", "Scala", ["scala"]),
new Mode("scss", "SCSS", ["scss"]),
new Mode("ruby", "Ruby", ["rb"]),
new Mode("sql", "SQL", ["sql"]),
new Mode("svg", "SVG", ["svg"]),
new Mode("text", "Text", ["txt"]),
new Mode("textile", "Textile", ["textile"]),
new Mode("xml", "XML", ["xml"]),
new Mode("sh", "SH", ["sh"])
];
modesByName = {};
@ -237,6 +225,10 @@ var docs = [
"haxe", "haXe",
require("ace/requirejs/text!./docs/Haxe.hx")
),
new Doc(
"sh", "SH",
require("ace/requirejs/text!./docs/sh.sh")
),
new WrappedDoc(
"markdown", "Markdown",
require("ace/requirejs/text!./docs/markdown.md")
@ -325,6 +317,11 @@ modes.forEach(function(mode) {
modeEl.appendChild(option);
});
bindDropdown("mode", function(value) {
env.editor.getSession().setMode(modesByName[value].mode || modesByName.text.mode);
env.editor.getSession().modeName = value;
});
bindDropdown("doc", function(value) {
var doc = docsByName[value].doc;
var session = env.split.setSession(doc);
@ -335,11 +332,6 @@ bindDropdown("doc", function(value) {
env.editor.focus();
});
bindDropdown("mode", function(value) {
env.editor.getSession().setMode(modesByName[value].mode || modesByName.text.mode);
});
function updateUIEditorOptions() {
var editor = env.editor;
var session = editor.session;
@ -347,7 +339,7 @@ function updateUIEditorOptions() {
session.setFoldStyle(foldingEl.value);
saveOption(docEl, session.name);
saveOption(modeEl, session.getMode().name || "text");
saveOption(modeEl, session.modeName || "text");
saveOption(wrapModeEl, session.getUseWrapMode() ? session.getWrapLimitRange().min || "free" : "off");
saveOption(selectStyleEl, editor.getSelectionStyle() == "line");
@ -376,19 +368,10 @@ function saveOption(el, val) {
};
}
bindDropdown("theme", function(value) {
if (!value)
return;
if (module.packaged) {
loadTheme(value, function() {
env.editor.setTheme(value);
});
}
else {
env.editor.setTheme(value);
}
env.editor.setTheme(value);
});
bindDropdown("keybinding", function(value) {
@ -560,6 +543,7 @@ event.addListener(container, "drop", function(e) {
modeEl.value = mode.name;
env.editor.getSession().setMode(mode.mode);
env.editor.getSession().modeName = mode.name;
};
reader.readAsText(file);
}

View file

@ -1,26 +1,41 @@
//http://groovy.codehaus.org/Concurrency+with+Groovy
import java.util.concurrent.atomic.AtomicInteger
//http://groovy.codehaus.org/Martin+Fowler%27s+closure+examples+in+Groovy
def counter = new AtomicInteger()
synchronized out(message) {
println(message)
class Employee {
def name, salary
boolean manager
String toString() { return name }
}
def th = Thread.start {
for( i in 1..8 ) {
sleep 30
out "thread loop $i"
counter.incrementAndGet()
}
def emps = [new Employee(name:'Guillaume', manager:true, salary:200),
new Employee(name:'Graeme', manager:true, salary:200),
new Employee(name:'Dierk', manager:false, salary:151),
new Employee(name:'Bernd', manager:false, salary:50)]
def managers(emps) {
emps.findAll { e -> e.isManager() }
}
for( j in 1..4 ) {
sleep 50
out "main loop $j"
counter.incrementAndGet()
assert emps[0..1] == managers(emps) // [Guillaume, Graeme]
def highPaid(emps) {
threshold = 150
emps.findAll { e -> e.salary > threshold }
}
th.join()
assert emps[0..2] == highPaid(emps) // [Guillaume, Graeme, Dierk]
assert counter.get() == 12
def paidMore(amount) {
{ e -> e.salary > amount}
}
def highPaid = paidMore(150)
assert highPaid(emps[0]) // true
assert emps[0..2] == emps.findAll(highPaid)
def filename = 'test.txt'
new File(filename).withReader{ reader -> doSomethingWith(reader) }
def readersText
def doSomethingWith(reader) { readersText = reader.text }
assert new File(filename).text == readersText

View file

@ -1,6 +1,6 @@
function foo(items) {
function foo (items, nada) {
for (var i=0; i<items.length; i++) {
alert(items[i] + "juhu");
alert(items[i] + "juhu\n");
} // Real Tab.
}

View file

@ -1,12 +1,69 @@
//http://www.scala-lang.org/node/227
/* Defines a new method 'sort' for array objects */
object implicits extends Application {
implicit def arrayWrapper[A : ClassManifest](x: Array[A]) =
new {
def sort(p: (A, A) => Boolean) = {
util.Sorting.stableSort(x, p); x
// http://www.scala-lang.org/node/54
package examples.actors
import scala.actors.Actor
import scala.actors.Actor._
abstract class PingMessage
case object Start extends PingMessage
case object SendPing extends PingMessage
case object Pong extends PingMessage
abstract class PongMessage
case object Ping extends PongMessage
case object Stop extends PongMessage
object pingpong extends Application {
val pong = new Pong
val ping = new Ping(100000, pong)
ping.start
pong.start
ping ! Start
}
class Ping(count: Int, pong: Actor) extends Actor {
def act() {
println("Ping: Initializing with count "+count+": "+pong)
var pingsLeft = count
loop {
react {
case Start =>
println("Ping: starting.")
pong ! Ping
pingsLeft = pingsLeft - 1
case SendPing =>
pong ! Ping
pingsLeft = pingsLeft - 1
case Pong =>
if (pingsLeft % 1000 == 0)
println("Ping: pong from: "+sender)
if (pingsLeft > 0)
self ! SendPing
else {
println("Ping: Stop.")
pong ! Stop
exit('stop)
}
}
}
val x = Array(2, 3, 1, 4)
println("x = "+ x.sort((x: Int, y: Int) => x < y))
}
}
class Pong extends Actor {
def act() {
var pongCount = 0
loop {
react {
case Ping =>
if (pongCount % 1000 == 0)
println("Pong: ping "+pongCount+" from "+sender)
sender ! Pong
pongCount = pongCount + 1
case Stop =>
println("Pong: Stop.")
exit('stop)
}
}
}
}

38
demo/kitchen-sink/docs/sh.sh Executable file
View file

@ -0,0 +1,38 @@
#!/bin/sh
# Script to open a browser to current branch
# Repo formats:
# ssh git@github.com:richoH/gh_pr.git
# http https://richoH@github.com/richoH/gh_pr.git
# git git://github.com/richoH/gh_pr.git
username=`git config --get github.user`
get_repo() {
git remote -v | grep ${@:-$username} | while read remote; do
if repo=`echo $remote | grep -E -o "git@github.com:[^ ]*"`; then
echo $repo | sed -e "s/^git@github\.com://" -e "s/\.git$//"
exit 1
fi
if repo=`echo $remote | grep -E -o "https?://([^@]*@)?github.com/[^ ]*\.git"`; then
echo $repo | sed -e "s|^https?://||" -e "s/^.*github\.com\///" -e "s/\.git$//"
exit 1
fi
if repo=`echo $remote | grep -E -o "git://github.com/[^ ]*\.git"`; then
echo $repo | sed -e "s|^git://github.com/||" -e "s/\.git$//"
exit 1
fi
done
if [ $? -eq 0 ]; then
echo "Couldn't find a valid remote" >&2
exit 1
fi
}
if repo=`get_repo $@`; then
branch=`git symbolic-ref HEAD 2>/dev/null`
echo "http://github.com/$repo/pull/new/${branch##refs/heads/}"
else
exit 1
fi