summaryrefslogtreecommitdiff
path: root/javascript/natcompare.js
diff options
context:
space:
mode:
Diffstat (limited to 'javascript/natcompare.js')
-rw-r--r--javascript/natcompare.js156
1 files changed, 0 insertions, 156 deletions
diff --git a/javascript/natcompare.js b/javascript/natcompare.js
deleted file mode 100644
index 9988643..0000000
--- a/javascript/natcompare.js
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-natcompare.js -- Perform 'natural order' comparisons of strings in JavaScript.
-Copyright (C) 2005 by SCK-CEN (Belgian Nucleair Research Centre)
-Written by Kristof Coomans <kristof[dot]coomans[at]sckcen[dot]be>
-
-Based on the Java version by Pierre-Luc Paour, of which this is more or less a straight conversion.
-Copyright (C) 2003 by Pierre-Luc Paour <natorder@paour.com>
-
-The Java version was based on the C version by Martin Pool.
-Copyright (C) 2000 by Martin Pool <mbp@humbug.org.au>
-
-This software is provided 'as-is', without any express or implied
-warranty. In no event will the authors be held liable for any damages
-arising from the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
-claim that you wrote the original software. If you use this software
-in a product, an acknowledgment in the product documentation would be
-appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-
-function isWhitespaceChar(a)
-{
- var charCode;
- charCode = a.charCodeAt(0);
-
- if ( charCode <= 32 )
- {
- return true;
- }
- else
- {
- return false;
- }
-}
-
-function isDigitChar(a)
-{
- var charCode;
- charCode = a.charCodeAt(0);
-
- if ( charCode >= 48 && charCode <= 57 )
- {
- return true;
- }
- else
- {
- return false;
- }
-}
-
-function compareRight(a,b)
-{
- var bias = 0;
- var ia = 0;
- var ib = 0;
-
- var ca;
- var cb;
-
- // The longest run of digits wins. That aside, the greatest
- // value wins, but we can't know that it will until we've scanned
- // both numbers to know that they have the same magnitude, so we
- // remember it in BIAS.
- for (;; ia++, ib++) {
- ca = a.charAt(ia);
- cb = b.charAt(ib);
-
- if (!isDigitChar(ca)
- && !isDigitChar(cb)) {
- return bias;
- } else if (!isDigitChar(ca)) {
- return -1;
- } else if (!isDigitChar(cb)) {
- return +1;
- } else if (ca < cb) {
- if (bias == 0) {
- bias = -1;
- }
- } else if (ca > cb) {
- if (bias == 0)
- bias = +1;
- }
- }
-}
-
-function natcompare(a,b) {
-
- var ia = 0, ib = 0;
- var nza = 0, nzb = 0;
- var ca, cb;
- var result;
-
- while (true)
- {
- // only count the number of zeroes leading the last number compared
- nza = nzb = 0;
-
- ca = a.charAt(ia);
- cb = b.charAt(ib);
-
- // skip over leading spaces or zeros
- while ( isWhitespaceChar( ca ) || ca =='0' ) {
- if (ca == '0') {
- nza++;
- } else {
- // only count consecutive zeroes
- nza = 0;
- }
-
- ca = a.charAt(++ia);
- }
-
- while ( isWhitespaceChar( cb ) || cb == '0') {
- if (cb == '0') {
- nzb++;
- } else {
- // only count consecutive zeroes
- nzb = 0;
- }
-
- cb = b.charAt(++ib);
- }
-
- // process run of digits
- if (isDigitChar(ca) && isDigitChar(cb)) {
- if ((result = compareRight(a.substring(ia), b.substring(ib))) != 0) {
- return result;
- }
- }
-
- if (ca == 0 && cb == 0) {
- // The strings compare the same. Perhaps the caller
- // will want to call strcmp to break the tie.
- return nza - nzb;
- }
-
- if (ca < cb) {
- return -1;
- } else if (ca > cb) {
- return +1;
- }
-
- ++ia; ++ib;
- }
-}
-
-