Skip to content

Commit

Permalink
first commit
Browse files Browse the repository at this point in the history
  • Loading branch information
pallid committed Dec 3, 2019
0 parents commit 6dabf7e
Show file tree
Hide file tree
Showing 7 changed files with 341 additions and 0 deletions.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
build
oscript_modules/*
features/*
tests.xml
.vscode/
44 changes: 44 additions & 0 deletions README.MD
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# CamelCase

Методы СтрРазделить и СтрСоединить для преобразования в "Верблюжью нотацию"

# Установка

Установка пакета через файл. Качаем последний релиз со страницы Релизы. Затем из командной строки:

```
opm install -f camelcase*.ospx
```

# Примеры

### СтрРазделить(Строка)

```bsl
#Использовать camelcase
Строки = camelcase.СтрРазделить("РезультатыОбменаДанными");
Сообщить("Количество строк: " +Строки.Количество()); // Количество строк: 3
Сообщить("Первая строка: " + Строки[0]); // Первая строка: Результаты
Сообщить("Вторая строка: " + Строки[1]); // Первая строка: Обмена
Сообщить("Первая строка: " + Строки[2]); // Первая строка: Данными
```

### СтрСоединить(Строки)

```bsl
#Использовать camelcase
Строки = Новый Массив;
Строки.Добавить("результат");
Строки.Добавить("Обмена");
Строки.Добавить("данными");
Строка = camelcase.СтрСоединить(Строки);
Сообщить("Результат: " + Строка); // Результат: РезультатыОбменаДанными
```

### Вдохновление

https://github.com/fatih/camelcase
15 changes: 15 additions & 0 deletions example.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#Использовать "./src"

Строки = camelcase.СтрРазделить("РезультатыОбменаДанными");
Сообщить("Количество строк: " +Строки.Количество()); // Количество строк: 3
Сообщить("Первая строка: " + Строки[0]); // Первая строка: Результаты
Сообщить("Вторая строка: " + Строки[1]); // Первая строка: Обмена
Сообщить("Первая строка: " + Строки[2]); // Первая строка: Данными

Строки = Новый Массив;
Строки.Добавить("результат");
Строки.Добавить("Обмена");
Строки.Добавить("данными");
Строка = camelcase.СтрСоединить(Строки);
Сообщить("Результат: " + Строка); // Результат: РезультатыОбменаДанными

3 changes: 3 additions & 0 deletions lib.config
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<package-def>
<module name="CamelCase" file="src/Модули/CamelCase.os"/>
</package-def>
9 changes: 9 additions & 0 deletions packagedef
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
Описание.Имя("camelcase")
.Версия("0.0.1")
.Автор("pallid")
.АдресАвтора("1005220@mail.ru")
.ВключитьФайл("src")
.ВключитьФайл("tests")
.ВключитьФайл("lib.config")
.ВключитьФайл("README.MD")
.ВерсияСреды("1.0.21");
137 changes: 137 additions & 0 deletions src/Модули/CamelCase.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@

#Область ПрограммныйИнтерфейс

// Соединяет массив переданных строк в одну строку в "Верблюжьей нотации".
//
// Параметры:
// Строки - Массив - Массив, содержащий объединяемые строки.
//
// Возвращаемое значение:
// Строка - Строка, содержащая соединенные исходные строки.
//
Функция СтрСоединить(Знач Строки) Экспорт
Если Строки.Количество() = 0 Тогда
Возврат "";
КонецЕсли;
НормализованныйМассив = Новый Массив;
Для Каждого СтрокаМассива из Строки Цикл
Строка = ТРег(Лев(СтрокаМассива, 1)) + Прав(СтрокаМассива, СтрДлина(СтрокаМассива)-1);
НормализованныйМассив.Добавить(Строка);
КонецЦикла;
Возврат СтрСоединить(НормализованныйМассив);
КонецФункции

// Разделяет строку на массив подстрок в "Верблюжьей нотации".
//
// Параметры:
// Строка - Строка - Разделяемая строка, в "Верблюжьей нотации".
//
// Возвращаемое значение:
// Массив - Массив со строками, которые получились в результате разделения исходной строки.
//
Функция СтрРазделить(Знач Строка) Экспорт

Если СтрДлина(Строка) = 0 Тогда
Массив = Новый Массив;
Массив.Добавить("");
Возврат Массив;
КонецЕсли;

Частицы = Новый Массив;
ПредыдущийКласс = 0;
Класс = 0;
МассивПустых = Новый Массив;

Для Индекс = 0 По СтрДлина(Строка) Цикл
Если Индекс >= СтрДлина(Строка) Тогда
Прервать;
КонецЕсли;
Символ = Сред(Строка, Индекс+1, 1);
Если ЭтоСимволНижнегоРегистра(Символ) Тогда
Класс = 1;
ИначеЕсли ЭтоСимволВерхнегоРегистра(Символ) Тогда
Класс = 2;
ИначеЕсли ЭтоЦифра(Символ) Тогда
Класс = 3;
Иначе
Класс = 4;
КонецЕсли;

Если Класс = ПредыдущийКласс Тогда
Частицы[Частицы.Количество()-1].Добавить(Символ);
Иначе
Массив = Новый Массив;
Массив.Добавить(Символ);
Частицы.Добавить(Массив);
КонецЕсли;
ПредыдущийКласс = Класс;
КонецЦикла;

Для Индекс = 0 По Частицы.Количество()-1 Цикл
Если Индекс >= Частицы.Количество()-1 Тогда
Прервать;
КонецЕсли;
Если ЭтоСимволВерхнегоРегистра(Частицы[Индекс][0]) И ЭтоСимволНижнегоРегистра(Частицы[Индекс+1][0]) Тогда
Значение = Частицы[Индекс][Частицы[Индекс].Количество()-1];
МассивПеребора = Новый Массив;
МассивПеребора.Добавить(Значение);
Для Каждого Стр из Частицы[Индекс+1] Цикл
МассивПеребора.Добавить(Стр);
КонецЦикла;
Частицы[Индекс+1] = МассивПеребора;
Частицы[Индекс].Удалить(Частицы[Индекс].Количество()-1);
КонецЕсли;
КонецЦикла;

Результат = Новый Массив;
Для каждого Массив из Частицы Цикл
Если Массив.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
СобраннаяСтрока = СтрСоединить(Массив);
Результат.Добавить(СобраннаяСтрока);
КонецЦикла;

Возврат Результат;

КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ЭтоСимволНижнегоРегистра(Знач Символ)
Набор = Кириллица()+Алгийские();
Результат = Найти(Набор, Символ);
Возврат ПроверкаРезультата(Результат);
КонецФункции

Функция ЭтоСимволВерхнегоРегистра(Знач Символ)
Набор = Врег(Кириллица()+Алгийские());
Результат = Найти(Набор, Символ);
Возврат ПроверкаРезультата(Результат);
КонецФункции

Функция ЭтоЦифра(Знач Символ)
Набор = "0123456789";
Результат = Найти(Набор, Символ);
Возврат ПроверкаРезультата(Результат);
КонецФункции

Функция ПроверкаРезультата(Знач Результат)
Если Результат = 0 Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции

Функция Кириллица()
Возврат "абвгдеёжзиклмнопрстуфхцчшщъыьэюя";
КонецФункции

Функция Алгийские()
Возврат "abcdefghijklmnopqrstuvwxyz";
КонецФункции

#КонецОбласти
128 changes: 128 additions & 0 deletions tests/camelcase_test.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
#Использовать "../src"
#Использовать asserts

Перем ЮнитТест;
Перем ТокенАвторизации;
Перем МассивВременныхФайлов;
Перем РаботаетПоискФайлов;

Перем МассивТестовыйНаборРазделить;
Перем МассивТестовыйНаборСоединить;

Функция ПолучитьСписокТестов(Знач Тестирование) Экспорт

ЮнитТест = Тестирование;

ИменаТестов = Новый Массив;
ИменаТестов.Добавить("ТестДолжен_ПроверитьСтрРазделить");
ИменаТестов.Добавить("ТестДолжен_ПроверитьСтрСоединить");

Возврат ИменаТестов;

КонецФункции // ПолучитьСписокТестов()

Процедура ПередЗапускомТеста() Экспорт


КонецПроцедуры // ПередЗапускомТеста()

Процедура ПослеЗапускаТеста() Экспорт


КонецПроцедуры // ПослеЗапускаТеста()

Процедура ТестДолжен_ПроверитьСтрРазделить() Экспорт

Для каждого ТестовыйНабор из МассивТестовыйНаборРазделить Цикл
Результат = CamelCase.СтрРазделить(ТестовыйНабор.ВходящаяСтрока);
Утверждения.Проверить(ТестовыйНабор.МассивСлов.Количество() = Результат.Количество(),
СтрШаблон("СтрРазделить %1 - Ошибка проверки количества в массиве", ТестовыйНабор.Описание));

Для Индекс = 0 По ТестовыйНабор.МассивСлов.Количество()-1 Цикл
Утверждения.Проверить(ТестовыйНабор.МассивСлов[Индекс] = Результат[Индекс],
СтрШаблон("СтрРазделить %1, ждали %2, получили %3 - Ошибка проверки по массиву результатов",
ТестовыйНабор.Описание, ТестовыйНабор.МассивСлов[Индекс], Результат[Индекс]));
КонецЦикла;
КонецЦикла;

КонецПроцедуры

Процедура ТестДолжен_ПроверитьСтрСоединить() Экспорт

Для каждого ТестовыйНабор из МассивТестовыйНаборСоединить Цикл
Результат = CamelCase.СтрСоединить(ТестовыйНабор.МассивСлов);
Утверждения.Проверить(ТестовыйНабор.ВходящаяСтрока = Результат,
СтрШаблон("СтрСоединить %1 - Ошибка сравнения результатов", ТестовыйНабор.Описание));
КонецЦикла;

КонецПроцедуры

Процедура ЗаполнениеМассиваТестовыхНаборов()

МассивТестовыйНаборРазделить = Новый Массив;
МассивТестовыйНаборСоединить = Новый Массив;

Структура = Новый Структура;
Структура.Вставить("Описание", "Пустая строка");
Структура.Вставить("ВходящаяСтрока", "");
Массив = Новый Массив;
Массив.Добавить("");
Структура.Вставить("МассивСлов", Массив);

МассивТестовыйНаборРазделить.Добавить(Структура);
МассивТестовыйНаборСоединить.Добавить(Структура);

Структура = Новый Структура;
Структура.Вставить("Описание", "Строка нижнего регистра");
Структура.Вставить("ВходящаяСтрока", "строканижнегорегистра");
Массив = Новый Массив;
Массив.Добавить("строканижнегорегистра");
Структура.Вставить("МассивСлов", Массив);

МассивТестовыйНаборРазделить.Добавить(Структура);

Структура = Новый Структура;
Структура.Вставить("Описание", "Строка нижнего регистра2");
Структура.Вставить("ВходящаяСтрока", "Строканижнегорегистра");
Массив = Новый Массив;
Массив.Добавить("строканижнегорегистра");
Структура.Вставить("МассивСлов", Массив);

МассивТестовыйНаборСоединить.Добавить(Структура);

Структура = Новый Структура;
Структура.Вставить("Описание", "Верблюжья Нотация");
Структура.Вставить("ВходящаяСтрока", "ВерблюжьяНотация");
Массив = Новый Массив;
Массив.Добавить("Верблюжья");
Массив.Добавить("Нотация");
Структура.Вставить("МассивСлов", Массив);

МассивТестовыйНаборРазделить.Добавить(Структура);
МассивТестовыйНаборСоединить.Добавить(Структура);

Структура = Новый Структура;
Структура.Вставить("Описание", "Все в верхнем регистре");
Структура.Вставить("ВходящаяСтрока", "HTML");
Массив = Новый Массив;
Массив.Добавить("HTML");
Структура.Вставить("МассивСлов", Массив);

МассивТестовыйНаборРазделить.Добавить(Структура);
МассивТестовыйНаборСоединить.Добавить(Структура);

Структура = Новый Структура;
Структура.Вставить("Описание", "Одна из частей в верхнем регистре");
Структура.Вставить("ВходящаяСтрока", "PDFДокумент");
Массив = Новый Массив;
Массив.Добавить("PDF");
Массив.Добавить("Документ");
Структура.Вставить("МассивСлов", Массив);

МассивТестовыйНаборРазделить.Добавить(Структура);
МассивТестовыйНаборСоединить.Добавить(Структура);

КонецПроцедуры

ЗаполнениеМассиваТестовыхНаборов();

0 comments on commit 6dabf7e

Please sign in to comment.