12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- import * as strings from './strings.js';
- export function buildReplaceStringWithCasePreserved(matches, pattern) {
- if (matches && (matches[0] !== '')) {
- const containsHyphens = validateSpecificSpecialCharacter(matches, pattern, '-');
- const containsUnderscores = validateSpecificSpecialCharacter(matches, pattern, '_');
- if (containsHyphens && !containsUnderscores) {
- return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '-');
- }
- else if (!containsHyphens && containsUnderscores) {
- return buildReplaceStringForSpecificSpecialCharacter(matches, pattern, '_');
- }
- if (matches[0].toUpperCase() === matches[0]) {
- return pattern.toUpperCase();
- }
- else if (matches[0].toLowerCase() === matches[0]) {
- return pattern.toLowerCase();
- }
- else if (strings.containsUppercaseCharacter(matches[0][0]) && pattern.length > 0) {
- return pattern[0].toUpperCase() + pattern.substr(1);
- }
- else if (matches[0][0].toUpperCase() !== matches[0][0] && pattern.length > 0) {
- return pattern[0].toLowerCase() + pattern.substr(1);
- }
- else {
- // we don't understand its pattern yet.
- return pattern;
- }
- }
- else {
- return pattern;
- }
- }
- function validateSpecificSpecialCharacter(matches, pattern, specialCharacter) {
- const doesContainSpecialCharacter = matches[0].indexOf(specialCharacter) !== -1 && pattern.indexOf(specialCharacter) !== -1;
- return doesContainSpecialCharacter && matches[0].split(specialCharacter).length === pattern.split(specialCharacter).length;
- }
- function buildReplaceStringForSpecificSpecialCharacter(matches, pattern, specialCharacter) {
- const splitPatternAtSpecialCharacter = pattern.split(specialCharacter);
- const splitMatchAtSpecialCharacter = matches[0].split(specialCharacter);
- let replaceString = '';
- splitPatternAtSpecialCharacter.forEach((splitValue, index) => {
- replaceString += buildReplaceStringWithCasePreserved([splitMatchAtSpecialCharacter[index]], splitValue) + specialCharacter;
- });
- return replaceString.slice(0, -1);
- }
|