* Optionally compress large responses, if the browser accepts
deflate compression. This mainly improves start up time.
+ * More fine tuning of the regular expressions that detect URLs.
+ We now allow '.' and ',' in URLs, as long as they are not at the
+ very end of the URL, where they would probably be part of the
+ enclosing sentence and not actually part of the URL.
+
2009-07-06 Markus Gutschke <markus@shellinabox.com>
* Making it easier to host the terminal on non-root URLs by always
#define STDC_HEADERS 1
/* Most recent revision number in the version control system */
-#define VCS_REVISION "142"
+#define VCS_REVISION "143"
/* Version number of package */
#define VERSION "2.9"
ac_compiler_gnu=$ac_cv_c_compiler_gnu
-VCS_REVISION=142
+VCS_REVISION=143
cat >>confdefs.h <<_ACEOF
dnl This is the one location where the authoritative version number is stored
AC_INIT(shellinabox, 2.9, markus@shellinabox.com)
-VCS_REVISION=142
+VCS_REVISION=143
AC_SUBST(VCS_REVISION)
AC_DEFINE_UNQUOTED(VCS_REVISION, "${VCS_REVISION}",
[Most recent revision number in the version control system])
'(?:http|https|ftp)://' +
// Optionally allow username and passwords.
- '(?:[^:@/ ]*(?::[^@/ ]*)?@)?' +
+ '(?:[^:@/ \u00A0]*(?::[^@/ \u00A0]*)?@)?' +
// Hostname.
'(?:[1-9][0-9]{0,2}(?:[.][1-9][0-9]{0,2}){3}|' +
'(?::[1-9][0-9]*)?' +
// Path.
- '(?:/[^/,.) ]*)*|' +
+ '(?:/(?:(?![/ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)*|' +
(linkifyURLs <= 1 ? '' :
// Also support URLs without a protocol (assume "http").
// Optional username and password.
- '(?:[^:@/ ]*(?::[^@/ ]*)?@)?' +
+ '(?:[^:@/ \u00A0]*(?::[^@/ \u00A0]*)?@)?' +
// Hostnames must end with a well-known top-level domain or must be
// numeric.
'(?::[1-9][0-9]{0,4})?' +
// Path.
- '(?:/[^/,.) ]*)*|') +
+ '(?:/(?:(?![/ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)*|') +
// In addition, support e-mail address. Optionally, recognize "mailto:"
'(?:mailto:)' + (linkifyURLs <= 1 ? '' : '?') +
'yu|za|zm|zw|arpa)(?![a-zA-Z0-9])|[Xx][Nn]--[-a-zA-Z0-9]+)' +
// Optional arguments
- '(?:[?][^/,.) ]+)?');
+ '(?:[?](?:(?![ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)?');
}
this.initializeElements(container);
this.initializeAnsiColors();
if (line.tagName == 'DIV') {
var x = 0;
- // Traverse current line and truncate if once we saw "width" characters
+ // Traverse current line and truncate it once we saw "width" characters
for (var span = line.firstChild; span;
span = span.nextSibling) {
var s = this.getTextContent(span);
// Scan backwards looking for first non-space character
var s = this.getTextContent(span);
for (var i = s.length; i--; ) {
- if (s.charAt(i) != ' ') {
+ if (s.charAt(i) != ' ' && s.charAt(i) != '\u00A0') {
if (i+1 != s.length) {
this.setTextContent(s.substr(0, i+1));
}
// Scan backwards looking for first non-space character
s = this.getTextContent(span);
for (var i = s.length; i--; ) {
- if (s.charAt(i) != ' ') {
+ if (s.charAt(i) != ' ' && s.charAt(i) != '\u00A0') {
if (i+1 != s.length) {
this.setTextContent(s.substr(0, i+1));
}
};
VT100.prototype.about = function() {
- alert("VT100 Terminal Emulator " + "2.9 (revision 142)" +
+ alert("VT100 Terminal Emulator " + "2.9 (revision 143)" +
"\nCopyright 2008-2009 by Markus Gutschke\n" +
"For more information check http://shellinabox.com");
};
};
ShellInABox.prototype.about = function() {
- alert("Shell In A Box version " + "2.9 (revision 142)" +
+ alert("Shell In A Box version " + "2.9 (revision 143)" +
"\nCopyright 2008-2009 by Markus Gutschke\n" +
"For more information check http://shellinabox.com" +
(typeof serverSupportsSSL != 'undefined' && serverSupportsSSL ?
'(?:http|https|ftp)://' +
// Optionally allow username and passwords.
- '(?:[^:@/ ]*(?::[^@/ ]*)?@)?' +
+ '(?:[^:@/ \u00A0]*(?::[^@/ \u00A0]*)?@)?' +
// Hostname.
'(?:[1-9][0-9]{0,2}(?:[.][1-9][0-9]{0,2}){3}|' +
'(?::[1-9][0-9]*)?' +
// Path.
- '(?:/[^/,.) ]*)*|' +
+ '(?:/(?:(?![/ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)*|' +
(linkifyURLs <= 1 ? '' :
// Also support URLs without a protocol (assume "http").
// Optional username and password.
- '(?:[^:@/ ]*(?::[^@/ ]*)?@)?' +
+ '(?:[^:@/ \u00A0]*(?::[^@/ \u00A0]*)?@)?' +
// Hostnames must end with a well-known top-level domain or must be
// numeric.
'(?::[1-9][0-9]{0,4})?' +
// Path.
- '(?:/[^/,.) ]*)*|') +
+ '(?:/(?:(?![/ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)*|') +
// In addition, support e-mail address. Optionally, recognize "mailto:"
'(?:mailto:)' + (linkifyURLs <= 1 ? '' : '?') +
'yu|za|zm|zw|arpa)(?![a-zA-Z0-9])|[Xx][Nn]--[-a-zA-Z0-9]+)' +
// Optional arguments
- '(?:[?][^/,.) ]+)?');
+ '(?:[?](?:(?![ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)?');
}
this.initializeElements(container);
this.initializeAnsiColors();
if (line.tagName == 'DIV') {
var x = 0;
- // Traverse current line and truncate if once we saw "width" characters
+ // Traverse current line and truncate it once we saw "width" characters
for (var span = line.firstChild; span;
span = span.nextSibling) {
var s = this.getTextContent(span);
// Scan backwards looking for first non-space character
var s = this.getTextContent(span);
for (var i = s.length; i--; ) {
- if (s.charAt(i) != ' ') {
+ if (s.charAt(i) != ' ' && s.charAt(i) != '\u00A0') {
if (i+1 != s.length) {
this.setTextContent(s.substr(0, i+1));
}
// Scan backwards looking for first non-space character
s = this.getTextContent(span);
for (var i = s.length; i--; ) {
- if (s.charAt(i) != ' ') {
+ if (s.charAt(i) != ' ' && s.charAt(i) != '\u00A0') {
if (i+1 != s.length) {
this.setTextContent(s.substr(0, i+1));
}
};
VT100.prototype.about = function() {
- alert("VT100 Terminal Emulator " + "2.9 (revision 142)" +
+ alert("VT100 Terminal Emulator " + "2.9 (revision 143)" +
"\nCopyright 2008-2009 by Markus Gutschke\n" +
"For more information check http://shellinabox.com");
};
'(?:http|https|ftp)://' +
// Optionally allow username and passwords.
- '(?:[^:@/ ]*(?::[^@/ ]*)?@)?' +
+ '(?:[^:@/ \u00A0]*(?::[^@/ \u00A0]*)?@)?' +
// Hostname.
'(?:[1-9][0-9]{0,2}(?:[.][1-9][0-9]{0,2}){3}|' +
'(?::[1-9][0-9]*)?' +
// Path.
- '(?:/[^/,.) ]*)*|' +
+ '(?:/(?:(?![/ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)*|' +
(linkifyURLs <= 1 ? '' :
// Also support URLs without a protocol (assume "http").
// Optional username and password.
- '(?:[^:@/ ]*(?::[^@/ ]*)?@)?' +
+ '(?:[^:@/ \u00A0]*(?::[^@/ \u00A0]*)?@)?' +
// Hostnames must end with a well-known top-level domain or must be
// numeric.
'(?::[1-9][0-9]{0,4})?' +
// Path.
- '(?:/[^/,.) ]*)*|') +
+ '(?:/(?:(?![/ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)*|') +
// In addition, support e-mail address. Optionally, recognize "mailto:"
'(?:mailto:)' + (linkifyURLs <= 1 ? '' : '?') +
'yu|za|zm|zw|arpa)(?![a-zA-Z0-9])|[Xx][Nn]--[-a-zA-Z0-9]+)' +
// Optional arguments
- '(?:[?][^/,.) ]+)?');
+ '(?:[?](?:(?![ \u00A0]|[,.)][ \u00A0]|[,.)]$).)*)?');
}
this.initializeElements(container);
this.initializeAnsiColors();
if (line.tagName == 'DIV') {
var x = 0;
- // Traverse current line and truncate if once we saw "width" characters
+ // Traverse current line and truncate it once we saw "width" characters
for (var span = line.firstChild; span;
span = span.nextSibling) {
var s = this.getTextContent(span);
// Scan backwards looking for first non-space character
var s = this.getTextContent(span);
for (var i = s.length; i--; ) {
- if (s.charAt(i) != ' ') {
+ if (s.charAt(i) != ' ' && s.charAt(i) != '\u00A0') {
if (i+1 != s.length) {
this.setTextContent(s.substr(0, i+1));
}
// Scan backwards looking for first non-space character
s = this.getTextContent(span);
for (var i = s.length; i--; ) {
- if (s.charAt(i) != ' ') {
+ if (s.charAt(i) != ' ' && s.charAt(i) != '\u00A0') {
if (i+1 != s.length) {
this.setTextContent(s.substr(0, i+1));
}