// jEdit macro for basic typographic corrections
// check buffer read-only status
if ( buffer.isReadOnly() ) {
Macros.error( view, "File is read only." );
return ;
}
buffer.beginCompoundEdit();
// get the current selection
Selection[] selections = textArea.getSelection();
// set options
// common settings for next actions
SearchAndReplace.setBeanShellReplace(true);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(true);
// fix dashes between numbers
SearchAndReplace.setSearchString("(\\d+)(\\s+| | )?(\\-|–|—|–|&mdash)(\\s+| | )?(\\d+)");
SearchAndReplace.setReplaceString("_1+\"–\"+_5");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// fix units
SearchAndReplace.setSearchString("(\\d+)(\\s| )?(r\\.|rad|minut|min|minutę|minutą|godz\\.|godz|euro|€|ha|Kb|KB|MB|Mb|GB|Gb|TB|Tb|m|cm|mm|dm|m3|cm3|cm3|m2|cm2|dm2|zł|PLN|$|h|km/h|m/s|g|dkg|kg|s|K|rad|sr|MPH|pH|em|ex|px|en|t|h|W|N|dB|A|V|Hz|MHz|GHz|\\$|MW|KM|ml|l)(\\s| |\\.|,|:|;|\\?||!)");
SearchAndReplace.setReplaceString("_1+\" \"+_3+_4");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// undo thinsp after &ndash and digit
SearchAndReplace.setSearchString("(–\\d+) ");
SearchAndReplace.setReplaceString("_1");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// fix units with power indexes
SearchAndReplace.setSearchString("(\\s| | )(mm|cm|dm|m|km)(2|3)");
SearchAndReplace.setReplaceString("_1+_2+\"\"+_3+\"\"");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// undo thinsp after &ndash and digit
SearchAndReplace.setSearchString("(\\d+) ");
SearchAndReplace.setReplaceString("_1");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// fix times
SearchAndReplace.setSearchString("(\\d+)(\\s| | )?(x|×|×)(\\s| | )?(\\d+)");
SearchAndReplace.setReplaceString("_1+\" × \"+_5");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// fix hanging punctuation (Polish language)
SearchAndReplace.setSearchString("((\\s| )+(i|z|w|a|o|u|by|się|ku|na|po|do|od))(\\s| | )+");
SearchAndReplace.setReplaceString("_1+\" \"");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// fix percent sign (without space)
SearchAndReplace.setSearchString("(\\d+)(\\s| | )+%");
SearchAndReplace.setReplaceString("_1+\"%\"");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// fix ellipsis
SearchAndReplace.setSearchString("...");
SearchAndReplace.setReplaceString("…");
SearchAndReplace.setBeanShellReplace(false);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(false);
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// common settings for next actions
SearchAndReplace.setBeanShellReplace(true);
SearchAndReplace.setIgnoreCase(true);
SearchAndReplace.setRegexp(true);
// delete spaces before , . ? ! : ; )
SearchAndReplace.setSearchString("(\\s| | )+([,\\.\\?!;:\\)\\]])");
SearchAndReplace.setReplaceString("_2");
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// insert spaces after , ? ; : before capital letters and ( [
SearchAndReplace.setSearchString("(\\s^&+)([,\\?!;:])+([AQWERTYUIOPLKJHGFDSZXCVBNMaqwertyuioplkjhgfdszxcvbnm\\(\\[ąćęłńóśżźĄĆĘŁŃÓŚŻŹ])");
SearchAndReplace.setReplaceString("_1+_2+\" \"+_3");
SearchAndReplace.setIgnoreCase(false);
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// insert space after . ()
SearchAndReplace.setSearchString("(\\.)+([AQWERTYUIOPLKJHGFDSZXCVBNM\\(\\[ĄĆĘŁŃÓŚŻŹ])");
SearchAndReplace.setReplaceString("_1+\" \"+_2");
SearchAndReplace.setIgnoreCase(false);
if (selections.length==0) {
SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
SearchAndReplace.replaceAll(view);
}
else SearchAndReplace.replace(view);
// fix broken doctype
SearchAndReplace.setSearchString("