// 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("