mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-31 17:23:31 -05:00
Merge from vscode 2e5312cd61ff99c570299ecc122c52584265eda2
This commit is contained in:
committed by
Anthony Dresser
parent
3603f55d97
commit
7f1d8fc32f
@@ -295,7 +295,31 @@ export function compare(a: string, b: string): number {
|
||||
}
|
||||
}
|
||||
|
||||
export function compareIgnoreCase(a: string, b: string, aStart: number = 0, aEnd: number = a.length, bStart: number = 0, bEnd: number = b.length): number {
|
||||
export function compareSubstring(a: string, b: string, aStart: number = 0, aEnd: number = a.length, bStart: number = 0, bEnd: number = b.length): number {
|
||||
for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {
|
||||
let codeA = a.charCodeAt(aStart);
|
||||
let codeB = b.charCodeAt(bStart);
|
||||
if (codeA < codeB) {
|
||||
return -1;
|
||||
} else if (codeA > codeB) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
const aLen = aEnd - aStart;
|
||||
const bLen = bEnd - bStart;
|
||||
if (aLen < bLen) {
|
||||
return -1;
|
||||
} else if (aLen > bLen) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
export function compareIgnoreCase(a: string, b: string): number {
|
||||
return compareSubstringIgnoreCase(a, b, 0, a.length, 0, b.length);
|
||||
}
|
||||
|
||||
export function compareSubstringIgnoreCase(a: string, b: string, aStart: number = 0, aEnd: number = a.length, bStart: number = 0, bEnd: number = b.length): number {
|
||||
|
||||
for (; aStart < aEnd && bStart < bEnd; aStart++, bStart++) {
|
||||
|
||||
@@ -307,26 +331,20 @@ export function compareIgnoreCase(a: string, b: string, aStart: number = 0, aEnd
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isUpperAsciiLetter(codeA)) {
|
||||
codeA += 32;
|
||||
}
|
||||
|
||||
if (isUpperAsciiLetter(codeB)) {
|
||||
codeB += 32;
|
||||
}
|
||||
|
||||
const diff = codeA - codeB;
|
||||
|
||||
if (diff === 0) {
|
||||
// equal -> ignoreCase
|
||||
if (diff === 32 && isUpperAsciiLetter(codeB)) { //codeB =[65-90] && codeA =[97-122]
|
||||
continue;
|
||||
|
||||
} else if (isLowerAsciiLetter(codeA) && isLowerAsciiLetter(codeB)) {
|
||||
} else if (diff === -32 && isUpperAsciiLetter(codeA)) { //codeB =[97-122] && codeA =[65-90]
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isLowerAsciiLetter(codeA) && isLowerAsciiLetter(codeB)) {
|
||||
//
|
||||
return diff;
|
||||
|
||||
} else {
|
||||
return compare(a.toLowerCase(), b.toLowerCase());
|
||||
return compareSubstring(a.toLowerCase(), b.toLowerCase(), aStart, aEnd, bStart, bEnd);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -833,6 +851,9 @@ export function safeBtoa(str: string): string {
|
||||
return btoa(encodeURIComponent(str)); // we use encodeURIComponent because btoa fails for non Latin 1 values
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated ES6
|
||||
*/
|
||||
export function repeat(s: string, count: number): string {
|
||||
let result = '';
|
||||
for (let i = 0; i < count; i++) {
|
||||
|
||||
Reference in New Issue
Block a user