Մասնակից:Xelgen/autohinter.js

Վիքիդարանից՝ ազատ գրադարանից

Ծանուցում. Հիշելուց հետո կատարված փոփոխությունները տեսնելու համար մաքրեք ձեր զննարկիչի հիշապահեստը. Mozilla / Firefox / Safari՝ Ctrl+Shift+R (Cmd+Shift+R Mac OS X-ում) Konqueror՝ F5 Opera՝ Tools→Preferences ընտրացանկից։ Internet Explorer՝ Ctrl+F5

function InitializeAutoHinter () {
	$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
		'section': 'main',
		'group': 'insert',
		'tools': {
				'autoHinter': {
						label: 'Հավանական սխալների որոնում (Alt+Z)',
						type: 'button',
						icon: '//upload.wikimedia.org/wikipedia/commons/thumb/f/fd/Oxygen480-actions-help-hint.svg/22px-Oxygen480-actions-help-hint.svg.png',
						action: {
							type: 'callback',
								execute: function(context){
									autoHint();
							}
						}
				}
		}
	} );

	
	$(document).keyup(function(evt)
	{
		if (evt.altKey && !(evt.ctrlKey)) //Left Alt under Win, Alt & no Ctrl under Lin/OS X
		{
			evt.stopPropagation();
 
			switch(evt.keyCode)
			{			
			case 90: //Alt + Z
				autoHint();
				break;
			}
 
			return false;
		}
	});

}

var OCRMistakes = {
						tooManyVowelsInRow:{
										pos:-1,
										regex:/[աեէիոօև]{3,}/,
										length:3,
										preoffset:0,
										postoffset:0,
										message:''},
						threeOrMoreRepeated:{
										pos:-1,
										regex:/([^0-9\nI])\1{2,}/im,
										length:2,
										preoffset:0,
										postoffset:0,
										message:''},
						doubleCharacters:{
										pos:-1,
										regex:/([^\n/[/{նղլթI])\1{1,}/m, //Add characters in class, which can often be double in your language
										length:1,
										preoffset:0,
										postoffset:0,
										message:''},
						tooManyEvslsInRow:{
										pos:-1,
										regex:/[և]{2,}/,
										length:2,
										preoffset:0,
										postoffset:0,
										message:''},
						ViunWithoutVo:{
										pos:-1,
										regex:/[^ոՈ]ւ/,
										length:2,
										preoffset:0,
										postoffset:0,
										message:''},
						LatArmMix:{
										pos:-1,
										regex:/[ա-ֆև][a-zа-я0-9]|[a-zа-я0-9][ա-ֆև]/i,
										length:2,
										preoffset:0,
										postoffset:0,
										message:''},
						LatCapLetterswithDot:{
										pos:-1,
										regex:/[A-ZА-Я][.․]/,
										length:2,
										preoffset:0,
										postoffset:0,
										message:''},
						SuspiciousSigns:{
										pos:-1,
										regex:/[\^"\&£€~\\]/,
										length:1,
										preoffset:0,
										postoffset:0,
										message:''},
						SuspiciousSpacing:{
										pos:-1,
										regex:/\s[՛՝`՜\.․,]/,
										length:1,
										preoffset:0,
										postoffset:0,
										message:''},
						LonelyLetter:{
										pos:-1,
										regex:/\s[ա-զըժլ-ֆ]\s/,
										length:1,
										preoffset:1,
										postoffset:0,
										message:''},
						Hyphenation:{
										pos:-1,
										regex:/[-–—¬]\n/,
										length:1,
										preoffset:0,
										postoffset:1,
										message:''}
		};


var autoHint = function ( isRecursiveCall ) {
	console.log(isRecursiveCall);
	if (typeof isRecursiveCall == 'undefined') {
		isRecursiveCall = false;
	}
 
	var textarea = document.getElementById("wpTextbox1");
	var end = textarea.selectionEnd;
	var text = textarea.value;
	var firstMistakePos, firstMistake;
	//console.log(end);
	if (!isRecursiveCall) {
			autoHintPos = end;
	}
  
	textPart = text.substring(autoHintPos);
	//console.log("New Iteration");
	//console.log(textPart);
 
	$.each(OCRMistakes, function( index, value ) {
		value.pos = textPart.search(value.regex);
		
		console.log(value);
		if (value.pos!==-1)	{
			if (typeof firstMistakePos == 'undefined') {
				firstMistakePos = value.pos;
				firstMistake = index;
			}
			else if (value.pos<firstMistakePos) {
				firstMistakePos = value.pos;
				firstMistake = index;
			}
		}
	});
 
	if (typeof firstMistakePos !== 'undefined')	{
		//console.log(autoHintPos+firstMistakePos+OCRMistakes[firstMistake]['preoffset']);
		textarea.selectionStart = autoHintPos+firstMistakePos+OCRMistakes[firstMistake]['preoffset'];
		//console.log(textarea.selectionStart+OCRMistakes[firstMistake]['length']+OCRMistakes[firstMistake]['postoffset']);
		textarea.selectionEnd = textarea.selectionStart+OCRMistakes[firstMistake]['length']+OCRMistakes[firstMistake]['postoffset'];
		autoHintPos = textarea.selectionEnd;
 
		textarea.focus();
	}
	else if (autoHintPos!==0 && isRecursiveCall===false)	{
		autoHintPos=0;
		autoHint(true);
	}
};

$( '#wpTextbox1' ).on( 'wikiEditor-toolbar-doneInitialSections', function () {
    InitializeAutoHinter();
} );