Skip to content

Commit

Permalink
fix linter errors
Browse files Browse the repository at this point in the history
  • Loading branch information
NovemLinguae committed May 12, 2024
1 parent 5172ea3 commit 1fd152e
Showing 1 changed file with 61 additions and 59 deletions.
120 changes: 61 additions & 59 deletions SpeciesHelper/modules/ConvertToSpeciesBox.js
Original file line number Diff line number Diff line change
@@ -1,48 +1,48 @@
export class ConvertToSpeciesBox {
convert(wikicode2) {
convert( wikicode2 ) {
// remove {{Italic title}}, 'DISPLAYTITLE', 'Lowercase title'
wikicode2 = wikicode2.replace(/\{\{(?:Italic title|DISPLAYTITLE|Lowercase title)[^}]*\}\}\n?/gsi, '');
wikicode2 = wikicode2.replace( /\{\{(?:Italic title|DISPLAYTITLE|Lowercase title)[^}]*\}\}\n?/gsi, '' );

// Convert {{Taxobox or {{Automatic taxobox to {{Speciesbox
wikicode2 = wikicode2.replace(/(?<=\{\{)(?:Taxobox|Automatic taxobox)(?=[\s\n}])/i, 'Speciesbox');
wikicode2 = wikicode2.replace( /(?<=\{\{)(?:Taxobox|Automatic taxobox)(?=[\s\n}])/i, 'Speciesbox' );

// handle extinct species
let hasExtinctTemplate = wikicode2.match(/(\|\s*species\s*=\s*)\{\{Extinct\}\}/i);
let hasDagger = wikicode2.match(/(\|\s*species\s*=\s*)†/i);
let hasExtinctParameter = wikicode2.match(/\|\s*extinct\s*=/i);
if ( (hasExtinctTemplate || hasDagger) && ! hasExtinctParameter ) {
const hasExtinctTemplate = wikicode2.match( /(\|\s*species\s*=\s*)\{\{Extinct\}\}/i );
const hasDagger = wikicode2.match( /(\|\s*species\s*=\s*)†/i );
const hasExtinctParameter = wikicode2.match( /\|\s*extinct\s*=/i );
if ( ( hasExtinctTemplate || hasDagger ) && !hasExtinctParameter ) {
// add |extinct=yes
wikicode2 = this._addToSpeciesBox(wikicode2, '| extinct = yes\n');
wikicode2 = this._addToSpeciesBox( wikicode2, '| extinct = yes\n' );
}
// delete dagger
wikicode2 = wikicode2.replace(/(\|\s*genus\s*=\s*)†/i, '$1');
wikicode2 = wikicode2.replace(/(\|\s*species\s*=\s*)†/i, '$1');
wikicode2 = wikicode2.replace( /(\|\s*genus\s*=\s*)†/i, '$1' );
wikicode2 = wikicode2.replace( /(\|\s*species\s*=\s*)†/i, '$1' );
// delete {{Extinct}}
wikicode2 = wikicode2.replace(/(\|\s*genus\s*=\s*)\{\{Extinct\}\}/i, '$1');
wikicode2 = wikicode2.replace(/(\|\s*species\s*=\s*)\{\{Extinct\}\}/i, '$1');
wikicode2 = wikicode2.replace( /(\|\s*genus\s*=\s*)\{\{Extinct\}\}/i, '$1' );
wikicode2 = wikicode2.replace( /(\|\s*species\s*=\s*)\{\{Extinct\}\}/i, '$1' );

// genus: remove italics and wikilinks
// | genus = ''[[Semicassis]]'' -> | genus = Semicassis
// | genus = '''''Semicassis''''' -> | genus = Semicassis
wikicode2 = wikicode2.replace(/(\|\s*genus\s*=\s*)'*\[*([^|}'\]]*)(?:\|[^|}'\]]*)?\]*'* *$/im, '$1$2');
wikicode2 = wikicode2.replace( /(\|\s*genus\s*=\s*)'*\[*([^|}'\]]*)(?:\|[^|}'\]]*)?\]*'* *$/im, '$1$2' );

// species: remove bold, italic, wikilinks, and beginning initial
// | species = '''''S. faurotis''''' -> | species = faurotis
// | species = '''''Semicassis faurotis''''' -> | species = faurotis
// | species = [[moreauviae]] -> | species = moreauviae
wikicode2 = wikicode2.replace(/(\|\s*species\s*=\s*)\[*'*(?:[A-Za-z.]+ )?([^'|}\]]*)'*\]* */is, '$1$2');
wikicode2 = wikicode2.replace( /(\|\s*species\s*=\s*)\[*'*(?:[A-Za-z.]+ )?([^'|}\]]*)'*\]* */is, '$1$2' );

// if genus and binomial but no species, add species
let hasGenus = wikicode2.match(/\|\s*genus\s*=\s*([A-Za-z \(\)]+?)\s*[\n|}]/);
let hasSpecies = wikicode2.match(/\|\s*species\s*=\s*([A-Za-z \(\)]+?)\s*[\n|}]/);
let hasBinomial = wikicode2.match(/\|\s*binomial\s*=\s*'{0,5}([A-Za-z\(\)]+?) ([A-Za-z\(\)]+?)'{0,5}\s*[\n|}]/);
if ( hasBinomial && hasGenus && ! hasSpecies ) {
let species = hasBinomial[2];
wikicode2 = wikicode2.replace(/(\|\s*genus\s*=\s*([A-Za-z \(\)]+?))([\n|}])/, `$1\n| species = ${species}$3`);
const hasGenus = wikicode2.match( /\|\s*genus\s*=\s*([A-Za-z ()]+?)\s*[\n|}]/ );
let hasSpecies = wikicode2.match( /\|\s*species\s*=\s*([A-Za-z ()]+?)\s*[\n|}]/ );
const hasBinomial = wikicode2.match( /\|\s*binomial\s*=\s*'{0,5}([A-Za-z()]+?) ([A-Za-z()]+?)'{0,5}\s*[\n|}]/ );
if ( hasBinomial && hasGenus && !hasSpecies ) {
const species = hasBinomial[ 2 ];
wikicode2 = wikicode2.replace( /(\|\s*genus\s*=\s*([A-Za-z ()]+?))([\n|}])/, `$1\n| species = ${ species }$3` );
}

// TODO: copy/paste this list: https://en.wikipedia.org/wiki/Wikipedia:Automated_taxobox_system/checked_ranks
let removeParametersList = [
const removeParametersList = [
'binomial',
'classis',
'color',
Expand Down Expand Up @@ -79,88 +79,90 @@ export class ConvertToSpeciesBox {
'unranked_phylum',
'unranked_regnum',
'unranked_superfamilia',
'unranked_superphylum',
'unranked_superphylum'
];
for ( let parameter of removeParametersList ) {
let regex = new RegExp('\\|\\s*' + parameter + '\\s*=.*?\\n(?=[|}])', 'is');
wikicode2 = wikicode2.replace(regex, '');
for ( const parameter of removeParametersList ) {
const regex = new RegExp( '\\|\\s*' + parameter + '\\s*=.*?\\n(?=[|}])', 'is' );
wikicode2 = wikicode2.replace( regex, '' );
}

// remove all blank parameters, but only in this taxobox
// 1) tidies the code, 2) helps prevent duplicate |authority= parameters
wikicode2 = this._removeBlankParametersFromFirstTemplate('speciesbox', wikicode2);
wikicode2 = this._removeBlankParametersFromFirstTemplate( 'speciesbox', wikicode2 );

// rename binomial_authority, species_authority, and type_species_authority to authority
wikicode2 = wikicode2.replace(/(\|\s*)binomial_(authority\s*=)/is, '$1$2');
wikicode2 = wikicode2.replace(/(\|\s*)type_species_(authority\s*=)/is, '$1$2');
wikicode2 = wikicode2.replace(/(\|\s*)species_(authority\s*=)/is, '$1$2');
wikicode2 = wikicode2.replace( /(\|\s*)binomial_(authority\s*=)/is, '$1$2' );
wikicode2 = wikicode2.replace( /(\|\s*)type_species_(authority\s*=)/is, '$1$2' );
wikicode2 = wikicode2.replace( /(\|\s*)species_(authority\s*=)/is, '$1$2' );

// remove |name= if it contains the latin name. leave alone if non-latin name
hasSpecies = wikicode2.match(/\|\s*species\s*=\s*([A-Za-z \(\)]+?)\s*[\n|}]/);
hasSpecies = wikicode2.match( /\|\s*species\s*=\s*([A-Za-z ()]+?)\s*[\n|}]/ );
if ( hasGenus && hasSpecies ) {
let genus = this._regExEscape(hasGenus[1]);
let species = this._regExEscape(hasSpecies[1]);
let regex = new RegExp("\\|\\s*name\\s*=\\s*\\[*'*" + genus + ' ' + species + "'*\\]*\\s*(?=[\\n|}])", 'i');
wikicode2 = wikicode2.replace(regex, '');
const genus = this._regExEscape( hasGenus[ 1 ] );
const species = this._regExEscape( hasSpecies[ 1 ] );
const regex = new RegExp( "\\|\\s*name\\s*=\\s*\\[*'*" + genus + ' ' + species + "'*\\]*\\s*(?=[\\n|}])", 'i' );
wikicode2 = wikicode2.replace( regex, '' );
}

return wikicode2;
}

_regExEscape(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
_regExEscape( string ) {
return string.replace( /[.*+?^${}()|[\]\\]/g, '\\$&' ); // $& means the whole matched string
}

_addToSpeciesBox(wikicode2, textToAdd) {
return wikicode2.replace(/(\{\{Speciesbox\s*\n)/i, '$1' + textToAdd);
_addToSpeciesBox( wikicode2, textToAdd ) {
return wikicode2.replace( /(\{\{Speciesbox\s*\n)/i, '$1' + textToAdd );
}

/**
* @param templateName Needle. A template name, case insensitive. So for example, to find {{Speciesbox}}, you'd input speciesbox with no braces.
* @param wikicode Haystack. A bunch of wikicode.
*/
_removeBlankParametersFromFirstTemplate(templateName, wikicode) {
let thirds = this._isolateFirstTemplate(templateName, wikicode);
_removeBlankParametersFromFirstTemplate( templateName, wikicode ) {
const thirds = this._isolateFirstTemplate( templateName, wikicode );
// eliminate blank parameters without enters at the end of the line
thirds[1] = thirds[1].replace(/\|[^=]*=[ \t]*(?=\|)/g, '');
thirds[ 1 ] = thirds[ 1 ].replace( /\|[^=]*=[ \t]*(?=\|)/g, '' );
// eliminate blank parameters with enters at the end of the line
thirds[1] = thirds[1].replace(/\|[^=\]\n]*=[ \t]*\n(?=\}|\|)/g, '');
return thirds.join('');
thirds[ 1 ] = thirds[ 1 ].replace( /\|[^=\]\n]*=[ \t]*\n(?=\}|\|)/g, '' );
return thirds.join( '' );
}

_indexOfCaseInsensitive(needle, haystack) {
return haystack.search(new RegExp(this._regExEscape(needle), "i"));
_indexOfCaseInsensitive( needle, haystack ) {
return haystack.search( new RegExp( this._regExEscape( needle ), 'i' ) );
}

/**
* @returns {string[]} [preTemplateText, templateText, postTemplateText]
* @return {string[]} [preTemplateText, templateText, postTemplateText]
*/
_isolateFirstTemplate(needle, haystack) {
_isolateFirstTemplate( needle, haystack ) {
// isolate first template needle that is found
let templateWikicodeStartPos = this._indexOfCaseInsensitive('{{' + needle, haystack);
const templateWikicodeStartPos = this._indexOfCaseInsensitive( '{{' + needle, haystack );

// if not found
if ( templateWikicodeStartPos === -1 ) {
return [haystack, '', ''];
return [ haystack, '', '' ];
}

let nestingCount = 0;
let i = 0;
for ( i = templateWikicodeStartPos; i < haystack.length; i++ ) {
let nextTwo = haystack.slice(i, i + 2);
if ( nextTwo == '{{' ) {
const nextTwo = haystack.slice( i, i + 2 );
if ( nextTwo === '{{' ) {
nestingCount++;
} else if ( nextTwo == '}}' ) {
} else if ( nextTwo === '}}' ) {
nestingCount--;
}

if ( nestingCount === 0 ) break;
if ( nestingCount === 0 ) {
break;
}
}
let templateWikicodeEndPos = i + 2;
let thirds = [];
thirds[0] = haystack.slice(0, templateWikicodeStartPos);
thirds[1] = haystack.slice(templateWikicodeStartPos, templateWikicodeEndPos);
thirds[2] = haystack.slice(templateWikicodeEndPos);
const templateWikicodeEndPos = i + 2;
const thirds = [];
thirds[ 0 ] = haystack.slice( 0, templateWikicodeStartPos );
thirds[ 1 ] = haystack.slice( templateWikicodeStartPos, templateWikicodeEndPos );
thirds[ 2 ] = haystack.slice( templateWikicodeEndPos );
return thirds;
}
}
}

0 comments on commit 1fd152e

Please sign in to comment.