<?php

//Пиши верно
error_reporting(-1);
mb_internal_encoding('utf-8');

//$text = "ну что.      не смотрел еще black mesa. я собирался скачать  ,но все как-то некогда было.";
// Для тестов
// $text = "roses are red,and violets are blue.whatever you do i'll keep it for you.";
// $text = 'привет.есть 2 функции,preg_split и explode ,не понимаю,в чем между ними разница.';
$text = "много их в Петербурге,молоденьких дур,сегодня в атласе да бархате,а завтра , поглядишь , метут улицу вместе с голью кабацкою...в самом деле ,что было бы с нами ,если бы вместо общеудобного прaвила:чин чина почитай , ввелось в употребление другое,например:ум ума почитай?какие возникли бы споры!";


/* Делает первую букву в строке заглавной */
function makeFirstLetterUppercase($text) {
	$letters = preg_split("//u", $text,-1,PREG_SPLIT_NO_EMPTY);
	$letters[0] = mb_strtoupper($letters[0]);
	$sentence = implode('',$letters);
    return  $sentence;
}

/* исправляет текст */
function fixText($text) {
	$regExp =[
		"/(^ *)/u", //пробелы в начале строки
		"/  +/u",   //лишние пробелы в тексте
		"/ *([.,?!:]) */u", //знаки препининия 
		"/\. \. \. */u" //троеточие с пробелами между точек
		];
	$result = '';
	$matches = array();	
	$matches = preg_split("/(?<=[?!.])/u", $text ,-1,PREG_SPLIT_NO_EMPTY);
	
	$text = preg_replace($regExp[1], ' ', $text); // удаляем лишние пробелы в тексте
	
	foreach($matches as $match){
		$match = preg_replace($regExp[0], '', $match); // удаляем пробел из начала строки
		$match = preg_replace($regExp[2], '$1 ', $match); // меняем на знак препинания и пробел
		$match = makeFirstLetterUppercase($match);
		$result .= $match; 
	}
	
	$result = preg_replace("/\. \. \. */u", "... ", $result); //исправляем троеточие
	return $result;
}

$result = fixText($text);
echo "{$result}\n";
