-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 6dabf7e
Showing
7 changed files
with
341 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
build | ||
oscript_modules/* | ||
features/* | ||
tests.xml | ||
.vscode/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
#Использовать "./src" | ||
|
||
Строки = camelcase.СтрРазделить("РезультатыОбменаДанными"); | ||
Сообщить("Количество строк: " +Строки.Количество()); // Количество строк: 3 | ||
Сообщить("Первая строка: " + Строки[0]); // Первая строка: Результаты | ||
Сообщить("Вторая строка: " + Строки[1]); // Первая строка: Обмена | ||
Сообщить("Первая строка: " + Строки[2]); // Первая строка: Данными | ||
|
||
Строки = Новый Массив; | ||
Строки.Добавить("результат"); | ||
Строки.Добавить("Обмена"); | ||
Строки.Добавить("данными"); | ||
Строка = camelcase.СтрСоединить(Строки); | ||
Сообщить("Результат: " + Строка); // Результат: РезультатыОбменаДанными | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"; | ||
КонецФункции | ||
|
||
#КонецОбласти |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"); | ||
Массив.Добавить("Документ"); | ||
Структура.Вставить("МассивСлов", Массив); | ||
|
||
МассивТестовыйНаборРазделить.Добавить(Структура); | ||
МассивТестовыйНаборСоединить.Добавить(Структура); | ||
|
||
КонецПроцедуры | ||
|
||
ЗаполнениеМассиваТестовыхНаборов(); | ||
|