Restore CASE

by Super_baloo8

HTML

<div class="before">
<p>Before</p>
<pre id="before">
un messaGE dE test.alors testons

(test)TEST
TEST(test)TEST
TEST (test) TEST

TEST-TEST
TEST- TEST
TEST - TEST

TEST.TEST
TEST. TEST
TEST . TEST

test.test
test. test
test . test 

TEST!TEST 
TEST! TEST 
TEST ! TEST 

test!test
test! test
test ! test 

TEST?TEST 
TEST? TEST 
TEST ? TEST 

test?test
test? test
test ? test 

1)test
1) test
1 ) test

1)TEST
1) TEST
1 ) TEST

2-test
2- test
2 - test

2-TEST
2- TEST
2 - TEST

a)test
a) test
a ) test

A)TEST
A) TEST
A ) TEST

b-test
b- test
b - test

B-TEST
B- TEST
B - TEST
</pre>
</div>

<div class="after">
<p>After</p>
<pre id="after">
</pre>
</div>

CSS

div {
    color: green;
    margin: 0 2%;
}
div p{
    font-weight: bold;
    text-align: center;
    margin: 0;
    padding: 0;
}
.before {
    width: 44%;
    color: red;
    float: left;
}
.after{
    margin-left: 52%;
}

JavaScript

var texte = $('#before').text();
function restoreCase(string) {
  var res = "",
      upperCase = true;
  for (var i = 0; i < string.length; ++i) {
    var c = string.charAt(i);

    upperCase = upperCase && !/^[-) ?]/.test(string.charAt(i+1)+ string.charAt(i+2));

    res += upperCase ? c.toUpperCase() : c.toLowerCase();

    var upperCaseChar = /[-!)\n.?]/.test(c);
    if (upperCaseChar || !/\s/.test(c)) {
      upperCase = upperCaseChar;
    }
  }
    res = res.replace(/ ?\((.*)\) ?[A-Z]{1}/gi, function(a) { return a.toLowerCase(); });

  return res;
}

$('#after').append(restoreCase(texte));