<?xml version="1.0" encoding="UTF-8"?>
 <!-- This is for extracting the first definition of a word from wiktionary, that can be used in a cross site manner. Consider: 
 http://en.wiktionary.org/w/api.php?action=parse&prop=text&page=word&format=xml&xslt=MediaWiki:extractFirst.xsl 


AVVISO URGENTE: OGNI CAMBIAMENTO APPORTATO A QUESTA PAGINA, AVRÀ EFFETTO IN OGNI PROGETTO CHE UTILIZZA LO SCRIPT PER LE DEFINIZIONI DA WIKIZIONARIO. PRIMA DI EFFETTUARE DELLE MODIFICHE CONTROLLARE BENE CHE TALE MODIFICA SIA CORRETTA ED ASTENERSI SE NON SI È SICURI DI QUELLO CHE SI STA FACENDO

-->
 <xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method='html'/>
 <!-- for translation. Also see JS -->
 <xsl:variable name="dir">ltr</xsl:variable>
 <xsl:variable name="more">» Altro</xsl:variable>
 <xsl:variable name="error">Errore: </xsl:variable>
 <xsl:variable name="copyright"> © <a href="http://it.wiktionary.org/wiki/">Wikizionario</a>. Rilasciato sotto la licenza  <a href="http://creativecommons.org/licenses/by-sa/3.0/deed.it" rel="license copyright">CC-BY-SA 3.0 </a></xsl:variable>
 <xsl:variable name="contentLang" select="'it'"/> <!-- make sure quoted-->
<!-- END XSLT VARIABLES TO TRANSLATE. SEE JS as well -->

<!-- other variables. DO NOT TRANSLATE THESE -->
 <xsl:variable name="pageName" select="concat('http://', $contentLang, '.wiktionary.org')"/>
<!-- end xslt constants -->
 <xsl:template match="/">

 <html dir="{$dir}" lang="{$contentLang}" xml:lang="{$contentLang}">
 <head>
 <meta name="generator" content="Wiktionary Extract XSLT 1.08-EN"/>
 <base target='_blank' href="{$pageName}" />
<title> Wiktionary extract</title>
 
 <style>
 #wordThisIsFor { font-weight:bold;}
 a.wtif1  { color: black; text-decoration: none;}
 a.wtif1:hover {text-decoration: underline;}
 .disambig-see-also, .disambig-see-also-2 {display:inline;}
 #container {background-color:white; padding: 0.5em; border: solid black thin;}
 a.new {color: red;}
 #error {color: red;font-size:larger;}
 </style>
 <script type='text/javascript'>
 /*<![CDATA[*/
 function setup () {
 //Stuff to translate:
 //some of the lang names were using google translate.
 var preferLang = {'en': 'Inglese', 'fr': 'Francese', 'de': 'Tedesco', 'nl': 'Olandese', it: 'Italiano', es: 'Spagnola', pt: 'Portoghese', ja: 'Giapponese', pl: 'Polacco', ru: 'Russo', 'qqqAny': null}; //for now.
 var extractSeeAlso = /<table class=\"bandeau-voir\"[^>]*>[\s\S]*?([\s\S]*?[\s\S]*?)<\/td>[\s\S]*?<\/table>/; 
 var see_also_process = function (sa) {
  return sa[1].replace(/<a[^>]*><img[^>]*\/><\/a>/, '');
 }
 var createLink = '» Crea'; // text only.
 var not_found = "La definizione del termine $1 non è stata trovata";
 var request_link_text = " » Richiedila";  //have a leading space.
//END stuff to translate (there is one more translation block below)

 //Stuff not to translate in general (setup).

 var rd = location.search.match(/\&rd\=([^&]*)/); //is this from redirect. + converts to numeric.
 rd = rd ? (+rd[1] + 1) : 1; //redirection level.
 var showWord = 0; //default to not showing. 0 = none, 1 = bold, 2 = bold link.
 var showWordRaw = location.search.match(/\&showWord\=([^&]*)/);
 showWordRaw = showWordRaw ? showWordRaw[1] : 'none';
 if (showWordRaw !== "none") {
  showWord++;
 }
 if (showWordRaw === "link") {
  showWord++;
 }
 var numbDfn = location.search.match(/\&count\=([^&]*)/); //count. + converts to numeric.
 numbDfn = numbDfn ? (+numbDfn[1]) : 1; //default to 
 var loc = encodeURIComponent(decodeURIComponent(location.search.match(/\&page\=([^&]*)/)[1]))
 var pageURL = '/w/index.php?title=' + loc
 var src = document.getElementById('src');
 var display = document.getElementById('word-list');
 var escWord = decodeURIComponent(loc).replace(/&/, '&amp;').replace(/>/, '&lt;').replace(/</, '&gt;');
 //note: wordEsc does not escape quotes. DO NOT PUT AS ATTRIBUTE VALUE
 var preferLangCode = location.search.match(/\&lang\=([^&]*)/);
 if (preferLangCode) { preferLangCode = preferLangCode[1]; }
 else {preferLangCode = 'qqqAny';}
 src.normalize();
 var html = src.firstChild.data;
 var def = html //may be redefined later.

  //stuff you might need to translate, but hopefully won't
  var subSectRegex = new RegExp('<h2>[^<]*?(<span[^<]*?<a[^<]*?<\/a[^<]*?</span[^<]*?)?<span class="mw-headline" id="' + preferLang[preferLangCode] + '"[^>]*>[\\s\\S]*$');
  var extractCurLangName = /<span [^>]*?class="mw-headline"[^>]*>(?:\s?<a\s[^>]*?class="image"[^>]*>[\s\S]*?<\/a>\s?)?([\s\S]*?)<\/span>/; //first subexpression
  //End stuff you hopefully won't need to translate.
 
 try {
  //this assumes attribute order doesn't change!!!
  html = html.replace(/<div id="toctitle">[\s\S]*?<\/div>/, '');
  if (preferLangCode && preferLang[preferLangCode]) {
   try {
    //strip off all definitions before tagret lang.
    var subSect = html.match(subSectRegex)[0];
    if (subSect.match(/<ol>[\s\S]*?<li>/)) {
     //if it has content
     def = subSect;
    }
   } catch (e) { /*alert(e)*/}
  } 
  var lang = def.match(extractCurLangName)[1];
  var intro = "(" + lang + ") ";
  if (showWord)  intro = '<a href="' + pageURL + '" id="wordThisIsFor" class="wtif' + showWord + '" >' + escWord + "</a> " + intro ;

  var definitions_matched;
  //FIXME: in both cases the extraction method does not properly strip nested divs. This results in image thumbnails being left behind
  if (numbDfn === 1) {
  definitions_matched = def.match(/<ol>[\s\S]*?<\/ol>/)[0].replace(/<dl>[\s\S]*?<\/dl>/g, '').replace(/<div[^>]*>[\s\S]*?<\/div>/g, '').replace(/<\/div>/g, '').replace(/<ul>[\s\S]*?<\/ul>/g, '').replace(/<a href="(#[^"]*)">/g, '<a href="' + pageURL + '$1">').match(/<li>([\s\S]*?)<\/li>/);
  display.innerHTML = intro +  definitions_matched[1];
  } else {
   //this use not well supported...
   definitions_matched = def.match(/<ol>[\s\S]*?<\/ol>/)[0].replace(/<dl>[\s\S]*?<\/dl>/g, '').replace(/<div[^>]*>[\s\S]*?<\/div>/g, '').replace(/<\/div>/g, '').replace(/<ul>[\s\S]*?<\/ul>/g, '').replace(/<a href="(#[^"]*)">/g, '<a href="' + pageURL + '$1">').match(/<li>([\s\S]*?)<\/li>/g);
   var tmp = intro + ' <ul>';
   for (var i = 0; i < numbDfn && i < definitions_matched.length; i++) {
    tmp += definitions_matched[i];
   }
   display.innerHTML = tmp + '</ul>';
  }
 }
 catch (e) {
  //alert(e)
  //page does not exist, not well formed, these regexs suck, etc

  display.appendChild(document.createTextNode(not_found.replace("$1", decodeURIComponent(loc))));
  document.getElementById('more-link').firstChild.data = createLink;

  //add request this article link. this is IT specific
  var more = document.getElementById('more-link');
  var requestLink = document.createElement("a");
  requestLink.appendChild(document.createTextNode(request_link_text));
 requestLink.href= 'http://it.wiktionary.org/w/index.php?title=Wikizionario:Feedback&action=edit&editintro=Wiktionary:Feedback/DictionaryLookupHoverEditIntro&section=new&preload=Wiktionary:Feedback/DictionaryLookupHoverPreload&preloadtitle=[[:' + loc + ']]';
  more.parentNode.insertBefore(requestLink, more.nextSibling)

  if (rd < 9) { //arbitrary to prevent infinite loops
   //make sure don't have loops.
   var newLoc; //this should not be urlEncoded.
   var remAlt = false;
   var dLoc = decodeURIComponent(loc);

   newLoc = dLoc.charAt(0).toLowerCase() + dLoc.substring(1, loc.length);
   //try some other redirections.

   if (newLoc === dLoc) newLoc = dLoc.toLowerCase();
   if (newLoc === dLoc && location.search.match(/\&alt\=([^&]*)/)) {
    newLoc = decodeURIComponent(location.search.match(/\&alt\=([^&]*)/)[1]);
    remAlt = true;
   }
   
   if (newLoc !== dLoc) { //redir
    var newURL = location.href.replace(/(^[\s\S]*?\&page\=)[^&]*([\s\S]*$)/, '$1'+ encodeURIComponent(newLoc) + '$2');
    newURL = newURL.replace(/&rd\=[^&]*/, ''); //strip old redirect header.
    if (remAlt) {
     location.href.replace(/&alt\=[^&]*/, '');
    }
    location = newURL + '&rd=' + rd;
   }
  }
 }
 var sa = html.match(extractSeeAlso);
 if(sa) {
  document.getElementById('see-also').innerHTML = ' (' + see_also_process(sa) + ')' ;
 }
 document.getElementById('more-link').href= pageURL;
 
}

 /*]]>*/
 </script>
</head>
 <body onload='setup()'>
 <div id='container'>
 <div id='word-list'><xsl:apply-templates select='api/error'/></div>
 <div><a id='more-link'><xsl:value-of select="$more"/></a> <span id='see-also'/> <small id="copyright-notice"> <xsl:copy-of select="$copyright"/></small>
 </div>  
 </div>
 <div id='src' style='display:None'>
  <xsl:value-of select='api/parse/text'/>
 </div>
 </body>
 </html>

 </xsl:template>
 <xsl:template match='api/error'>
 <span id='error'><b><xsl:value-of select="$error"/></b> <xsl:value-of select='@info'/></span>
 </xsl:template>

 </xsl:stylesheet>