cxltx
Version:
CXLTX (CoffeeXeLaTeX) brings CoffeeScript to (Xe)(La)TeX documents. Fully general approach; use your own favorite language.
125 lines (93 loc) • 3.36 kB
JavaScript
// Generated by CoffeeScript 1.8.0
(function() {
var CXLTX, MULTIMIX, TRM, TYPES, alert, app, badge, debug, express, help, ids_provider, info, log, main, njs_url, provider, rpr, sample_provider, server_options, view, warn, whisper, _echo;
njs_url = require('url');
TYPES = require('coffeenode-types');
TRM = require('coffeenode-trm');
rpr = TRM.rpr.bind(TRM);
badge = 'CXLTX/server';
log = TRM.get_logger('plain', badge);
info = TRM.get_logger('info', badge);
whisper = TRM.get_logger('whisper', badge);
debug = TRM.get_logger('debug', badge);
alert = TRM.get_logger('alert', badge);
warn = TRM.get_logger('warn', badge);
help = TRM.get_logger('help', badge);
_echo = TRM.echo.bind(TRM);
express = require('express');
CXLTX = require('./main');
MULTIMIX = require('coffeenode-multimix');
sample_provider = require('./sample-provider');
ids_provider = require('./ids-provider');
provider = MULTIMIX.compose(sample_provider, ids_provider);
server_options = {
'host': '127.0.0.1',
'port': 8910
};
this.request_count = 0;
this.main = function() {
var process_request;
process_request = (function(_this) {
return function(request, handler) {
var RC, command, parameter, splitter, texroute, _ref;
_this.request_count += 1;
RC = _this.request_count;
_ref = request.params, texroute = _ref.texroute, splitter = _ref.splitter, command = _ref.command, parameter = _ref.parameter;
/* TAINT rewrite as middleware */
if (!((texroute != null) && (command != null))) {
return handler("need 2 or 3 parts in URL route");
}
CXLTX.dispatch(provider, texroute, splitter, command, parameter, handler);
return null;
};
})(this);
return (function(_this) {
return function(request, response) {
process_request(request, function(error, result) {
var headers, status;
if (error != null) {
if ((TYPES.type_of(error)) !== 'text') {
error = rpr(error);
}
warn("©23 " + _this.request_count + " error:", error);
status = 500;
headers = {
'Content-Type': 'text/plain'
};
response.writeHeader(status, headers);
response.write(CXLTX.escape_error(error));
return response.end();
}
if (!TYPES.isa_text(result)) {
result = rpr(result);
}
whisper("©23 " + _this.request_count + " result:", rpr(result));
status = 200;
headers = {
'Content-Type': 'text/plain'
};
response.writeHeader(status, headers);
if (result != null) {
response.write(result);
}
return response.end();
});
return null;
};
})(this);
};
app = express();
view = this.main();
app.use(express.logger({
'format': 'dev'
}));
main = this.main();
app.get('/:texroute/:splitter/:command/:parameter', main);
app.get('/:texroute/:splitter/:command', main);
app.listen(server_options['port'], function(error) {
if (error != null) {
throw error;
}
return log(TRM.green("listening to " + server_options['host'] + ":" + server_options['port']));
});
}).call(this);