- Possibility to transform the ER Diagram into an image, to save it or print using canvas

- FIxed bugs with the ER Diagram Zoom
- Added messages when running the project
- Inteligence to ask for new verbs and property tipes, to add them to the language and learn with the developer
Esse commit está contido em:
felipenmoura
2010-03-20 19:52:10 +00:00
commit 20ed84a7be
9 arquivos alterados com 452 adições e 250 exclusões
+18 -7
Ver Arquivo
@@ -213,7 +213,7 @@
}else{
if(trim($this->currentLine) != '')
{
$this->messages[]= Array(3, "Expression with no known verb:<br/><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"" . $this->currentLine."\"</i>");
$this->messages[]= Array(3, "Expression with no known verb:<img src='images/engine.gif' align='right' style='cursor:poniter;' alt='Specify the verb manually' title='Specify the verb manually' onclick='Mind.Project.AddVerb(event, this);'/><br/><i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\"" . $this->currentLine."\"</i>");
$this->warnings++;
}
}
@@ -273,7 +273,7 @@
{
$sharp= $this->quantifiers['max']['max'];
}else{
$this->messages[]= Array(2, "No quantifier found in <i>\"".$originalSentences[$i]."\"</i><br/>Multiple relation(N) was assumed");
$this->messages[]= Array(2, "No quantifier found in <i>\"".$originalSentences[$i]."\"</i><br/>I will assume a multiple relation(N) here");
$curExpression[1]= str_replace($this->quantifierId, $this->quantifierId.$this->quantifiers['max']['max'], $curExpression[1]);
$sharp= $this->quantifiers['max']['max'];
@@ -297,6 +297,7 @@
$rels= Array(); // final array of valid relations
$tables= Array();
while($rel= current($this->relations))
{
if(isset($this->relations[$rel->rightTable.'|'.$rel->leftTable]) && $rel->max== 'n')
@@ -326,7 +327,7 @@
else{
}
$this->messages[]= Array(2, "Relation n/n between \"".$rel->leftTable."\" and \"".$rel->rightTable."\". A new table, \"".$tmpTable."\", was created to link them.");
$this->messages[]= Array(2, "Relation n/n between \"".$rel->leftTable."\" and \"".$rel->rightTable."\". I have to create a new table, \"".$tmpTable."\", to link them.");
$tables[$tmpTable]->addForeignKey($rel->leftTable);
$tables[$tmpTable]->addForeignKey($rel->rightTable);
@@ -353,7 +354,7 @@
if(sizeof($tables) == 0)
{
$this->messages[]= Array(0, "There are no entities in your project!");
$this->messages[]= Array(2, "Is the project running on the correct idiom?");
$this->messages[]= Array(2, "Is the project running with the correct idiom?");
$this->messages[]= Array(2, "You can check if you haven't forgoten any \".\" or \";\" in the end of any line.");
$this->errors++;
}else{
@@ -364,7 +365,7 @@
{
if(!isset($tables[$table->name]) && $table->name != $this->theWebMindLanguageTempTable)
{
$this->messages[]= Array(3, '"'.$table->name.'" has no relation with any other entity. It\'s going to be ignored and will NOT create any output');
$this->messages[]= Array(3, '"'.$table->name.'" has no relation with any other entity. I will ignore it and will not create any "floating" table for it, or any output.');
$this->warnings++;
}
next($this->tables);
@@ -485,8 +486,7 @@
$this->processedWML= '';
$this->tmpSentences= '';
$this->debug['status']= 1;
/* $this->messages[]= Array(4, "Finished at ".(date('m/d/Y H:i:s')).' - User: '.$_SESSION['user']['login'].'<br/>'.
" &nbsp; &nbsp; &nbsp; ".$project->lang.' &nbsp; &nbsp; &nbsp; '. sizeof($this->tables)." tables &nbsp; &nbsp; &nbsp; ".sizeof($this->sentences).' sentences').' &nbsp; &nbsp; &nbsp; in '; */
// messaging the end of the action, with its status
if($this->warnings == 0 && $this->errors == 0)
$this->messages[]= Array(1, "Final Status: Finished with no errors");
elseif($this->errors == 0)
@@ -551,6 +551,17 @@
$leftTable= $this->filter(trim($mindExp[0]));
$rightTable= $this->filter(trim($mindExp[sizeof($mindExp)-1]));
if($pos = strpos($rightTable,':'))
{
$newTmpName= substr($rightTable, 0, $pos);
$tmpType= substr($rightTable, $pos+1, strpos($rightTable, '(') - ($pos+1));
$this->messages[]= Array(3, "Entity \"".$rightTable."\" renamed to \"".$newTmpName."\".".
"<img src='images/engine.gif' align='right' style='cursor:poniter;' alt='Add \"".$tmpType."\" as a type' title='Add \"".$tmpType."\" as a type'".
" onclick='Mind.Project.AddType(event, \"".$tmpType."\", ".JSON_encode($this->types).");'/>".
"<br/>I believe it should be a property, right? But I couldn't identify the type \"".$tmpType."\"!");
$rightTable= $newTmpName;
$this->warnings++;
}
if($leftTable == $rightTable) // entity that points to itself
{
if(in_array(trim($this->quantifiers['max']['min']), $mindExp))
@@ -0,0 +1,49 @@
<?php
include('../../config/mind.php');
include('../../'.$_MIND['framework']);
include('../../'.$_MIND['header']);
?><?php
$file= $_MIND['rootDir'].$_MIND['languageDir'].'/'.$_SESSION['current']['lang'].'/'.$_SESSION['current']['lang'].'.xml';
if(!$xmlLang= simplexml_load_file($file))
{
trigger_error(E_USER_ERROR, "Failed trying to access the dictionary!");
exit;
}
if(isset($_POST['newVerb']) && isset($_POST['verbType']))
{
$parent= null;
switch($_POST['verbType'])
{
case 'm':
{
$parent= $xmlLang->obligation;
break;
}
case 'px':
{
$parent= $xmlLang->belongs;
break;
}
default:
{
$parent= $xmlLang->verbs;
}
}
$curVerb= $parent->addChild('verb');
$curVerb['value']= strip_tags(addslashes($_POST['newVerb']));
file_put_contents($file, $xmlLang->asXML());
exit;
}
if(isset($_POST['newType']) && isset($_POST['type']))
{
//$child= $xmlLang->types->$_POST['type']->addChild(strip_tags(addslashes($_POST['newType'])));
$child= $xmlLang->XPath("types/type[@value='".$_POST['type']."']");
if(isset($child[0]))
{
$substantive= $child[0]->addChild('substantive');
$substantive['value']= strip_tags(addslashes($_POST['newType']));
file_put_contents($file, $xmlLang->asXML());
}
exit;
}
?>
+11
Ver Arquivo
@@ -540,6 +540,17 @@
</div>
</form>
</div>
<div id='debugBalloon'
style='display:none;'>
<img src='images/del.gif'
align='right'
onclick="Mind.Project.CloseBalloons()"/>
<div class='balloon'>
<br/>
</div>
<div class='tip'>
</div>
</div>
<canvas id='oCanvas' width='600' height='400'></canvas>
<div id='mindEditorSearch'
style='display:none;'>
+52 -14
Ver Arquivo
@@ -673,7 +673,6 @@ Mind.ERD= {
var strDataURI = oCanvas.toDataURL("image/jpeg");
var ctx = document.getElementById("oCanvas").getContext("2d");
var c= 0;
var leftEst = -1;
var lessLeft= -1;
var toppEst = -1;
@@ -681,7 +680,6 @@ Mind.ERD= {
for(i in this.shownTables)
{
c+= 16;
if(leftEst == -1 || leftEst > this.shownTables[i].OO.offsetLeft)
leftEst= this.shownTables[i].OO.offsetLeft;
if(toppEst == -1 || toppEst > this.shownTables[i].OO.offsetTop)
@@ -703,16 +701,11 @@ Mind.ERD= {
ctx.clearRect(0, 0, w, h);
// drawing the tables
ctx.font= "16px Tahoma";
var l=0, t= 0;
var tW=200, tH= 200;
for(i in this.shownTables)
{
l= this.shownTables[i].OO.offsetLeft - leftEst;
t= this.shownTables[i].OO.offsetTop - toppEst;
tW= this.shownTables[i].OO.offsetWidth;
tH= this.shownTables[i].OO.offsetHeight;
ctx.fillRect(l,t,tW,tH);
}
var c= 0;
// first, the relations
var links= Mind.ERD.mapAreaContainer.getElementsByTagName('DIV');
for(var i= 0, j= links.length; i<j; i++)
{
@@ -722,6 +715,53 @@ Mind.ERD= {
tH= links[i].offsetHeight;
ctx.fillRect(l,t,tW,tH);
}
// then, the tables
for(i in this.shownTables)
{
ctx.fillStyle = "black";
l= this.shownTables[i].OO.offsetLeft - leftEst;
t= this.shownTables[i].OO.offsetTop - toppEst+10;
tW= this.shownTables[i].OO.offsetWidth;
tH= this.shownTables[i].OO.offsetHeight-10;
ctx.fillRect(l,t,tW,tH);
ctx.clearRect(l+1,t+1,tW-2,tH-2);
ctx.textAlign= 'center';
ctx.fillStyle = "red";
ctx.font= "16px Tahoma";
ctx.fillText(this.shownTables[i].name, l+(tW/2), t+15);
ctx.fillStyle = "black";
obj= Mind.Project.knowledge.tables[this.shownTables[i].name];
ctx.textAlign= 'left';
t+= 2;
if(obj.attributes)
{
ctx.moveTo(l,t+18);
ctx.lineTo(l+tW,t+18);
ctx.stroke();
t+= 4;
c= 0;
for(var att in obj.attributes)
{
c+= 22;
ctx.fillText(obj.attributes[att].name, l+3, t+10+c);
}
}
if(obj.foreignKeys.length > 0)
{
ctx.moveTo(l,t+c+16);
ctx.lineTo(l+tW,t+c+16);
ctx.stroke();
for(fk in obj.foreignKeys)
{
c+= 22;
ctx.fillText(obj.foreignKeys[fk][0], l+3, t+10+c);
}
}
}
//alert(links.length);
//ctx.fillText(leftEst+' : '+toppEst, 10, 10);
@@ -747,18 +787,16 @@ Mind.ERD= {
ctx.fillText("Sample String", 400, 50);
*/
if(document.getElementById('tmpCanvas'))
document.getElementById('tmpCanvas').parentNode.removeChild(document.getElementById('tmpCanvas'));
if(w > 900)
w= 900;
if(h > 700)
h= 700;
Mind.tmpShownData= Mind.Dialog.ShowData("<div id='tmpCanvas' style='border:solid 1px #999;'></div>",
Mind.tmpShownData= Mind.Dialog.ShowData("<div id='tmpCanvas'></div>",
'ER Diagram', w+40, h+60, true);
var image= Canvas2Image.saveAsPNG(document.getElementById('oCanvas'), true);
document.getElementById('tmpCanvas').appendChild(image);
ctx.clearRect(0, 0, 99999, 99999);
}
};
+63
Ver Arquivo
@@ -413,6 +413,7 @@ Mind.Project= {
Mind.AjaxHandler.Capture(XMLHttpRequest);
}
});
Mind.Project.CloseBalloons();
},
/* output methods */
MountTree: function(oList){
@@ -850,5 +851,67 @@ Mind.Project= {
},
SeeCurrentProjectFiles: function(){
this.SeeCurrentUserFiles(true);
},
CloseBalloons: function(){
document.getElementById('debugBalloon').style.display= 'none';
},
AddTypeSave: function(newType){
var type= document.getElementById('addTypeSel').value;
Mind.Utils.SetLoad(true, 'Saving type');
Mind.Project.CloseBalloons();
$.ajax({
url: Mind.Properties.path+'/add_to_dictionary.php',
type: 'POST',
data: 'newType='+ newType+'&type='+document.getElementById('addTypeSel').value,
success: function(ret){
Mind.Project.Run();
},
error : function(XMLHttpRequest, textStatus, errorThrown){
Mind.AjaxHandler.Capture(XMLHttpRequest);
}
});
},
AddType: function(event, o, options){
var balloon= document.getElementById('debugBalloon');
var content= balloon.getElementsByTagName('DIV')[0];
content.innerHTML = "<nobr>Choose the type this word represents<nobr/><br/>";
var opts= "";
for(var i=0, j=options.length; i<j; i++)
{
opts+= "<option value='"+options[i]+"'>"+options[i]+"</option>";
}
content.innerHTML+= "<div style='text-align:right;'><select id='addTypeSel'>"+opts+"</select> <img src='"+Mind.Properties.imagesPath+"/bt_play_over.gif' onclick='Mind.Project.AddTypeSave(\""+o+"\")' align='right'></div>";
balloon.style.display= '';
balloon.style.left= event.clientX - balloon.offsetWidth;
balloon.style.top= event.clientY - balloon.offsetHeight;
},
AddVerbOnkeyUp: function (event, o){
if(event.keyCode==13 && o.value.replace(/ /g, '') != '')
{
Mind.Project.CloseBalloons();
Mind.Utils.SetLoad(true, 'Adding verb');
$.ajax({
url: Mind.Properties.path+'/add_to_dictionary.php',
type: 'POST',
data: 'newVerb='+ o.value+'&verbType='+document.getElementById('addVerbSel').value,
success: function(ret){
Mind.Project.Run();
},
error : function(XMLHttpRequest, textStatus, errorThrown){
Mind.AjaxHandler.Capture(XMLHttpRequest);
}
});
; }
},
AddVerb: function(event, o){
var balloon= document.getElementById('debugBalloon');
var content= balloon.getElementsByTagName('DIV')[0];
content.innerHTML = "<nobr>Type the verb and press enter<nobr/><br/>";
content.innerHTML+= "<select id='addVerbSel'><option value='p'>Possessive/Action</option><option value='m'>Mandatory</option><option value='px'>Possibility</option></select>";
content.innerHTML+= "<input id='addVerbIpt' type='text' class='iptText' style='width:100%; font-size:12px;' onkeyup='Mind.Project.AddVerbOnkeyUp(event, this);'/>";
balloon.style.display= '';
balloon.style.left= event.clientX - balloon.offsetWidth;
balloon.style.top= event.clientY - balloon.offsetHeight;
document.getElementById('addVerbIpt').select();
}
};
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 3.6 KiB

+34 -4
Ver Arquivo
@@ -153,9 +153,8 @@ body{
{
padding:2px;
padding-left:20px;
background-color: #e0e0ff;
background-color: #e9e9ff;
border-bottom: solid 1px #66a;
border-top: solid 1px #66a;
font-size:11px;
background-image:url(css_images/debug-tip.png);
background-repeat:no-repeat;
@@ -167,7 +166,6 @@ body{
padding-left:20px;
background-color: #ffffb0;
border-bottom: solid 1px #773;
border-top: solid 1px #773;
font-size:11px;
background-image:url(css_images/debug-alert.png);
background-repeat:no-repeat;
@@ -178,10 +176,42 @@ body{
padding:2px;
padding-left:20px;
background-color: #ffe0e0;
border-bottom: solid 1px #f66;
border-top: solid 1px #f66;
border-bottom: solid 1px #f66;
font-size:11px;
background-image:url(css_images/debug-fail.png);
background-repeat:no-repeat;
background-position:3px 2px;
}
#debugBalloon .balloon
{
-moz-border-radius: 8px;
-webkit-border-radius: 8px;
border: solid 1px #74bada;
padding:4px;
background-color: #fff;
}
#debugBalloon .tip
{
background-image:url(css_images/tip-arrow.png);
background-position:right;
background-repeat:no-repeat;
height: 20px;
position:relative;
top: -1px;
}
#debugBalloon>img
{
position:relative;
top:-7px;
left:4px;
cursor:pointer;
}
#debugBalloon
{
position:absolute;
left: 10px;
top:500px;
z-index:99999;
}
Arquivo binário não exibido.

Depois

Largura:  |  Altura:  |  Tamanho: 220 B

+225 -225
Ver Arquivo
@@ -1,268 +1,268 @@
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml version="1.0" encoding="ISO-8859-1"?>
<mindLanguage>
<verbs>
<verb value='tem' />
<verb value='teem' />
<verb value='têm' />
<verb value='possuem' />
<verb value='terá' />
<verb value='terão' />
<verb value='terao' />
<verb value='possui' />
<verb value='possuem' />
<verb value='conta com' />
<verb value='contam com' />
<verb value='faz' />
<verb value='fazem' />
<verb value='usa' />
<verb value='usam' />
<verb value='pertence a' />
<verb value="tem"/>
<verb value="teem"/>
<verb value="têm"/>
<verb value="possuem"/>
<verb value="terá"/>
<verb value="terão"/>
<verb value="terao"/>
<verb value="possui"/>
<verb value="possuem"/>
<verb value="conta com"/>
<verb value="contam com"/>
<verb value="faz"/>
<verb value="fazem"/>
<verb value="usa"/>
<verb value="usam"/>
<verb value="pertence a"/>
</verbs>
<belongs>
<verb value='pode ser' />
<verb value='pode ter' />
<verb value='pode possuir' />
<verb value='podem ser' />
<verb value='podem possuir' />
<verb value='podem ter' />
<verb value='poderão ser' />
<verb value='poderão possuir' />
<verb value='poderão ter' />
<verb value='poderá ser' />
<verb value='poderá possuir' />
<verb value='poderá ter' />
<verb value='poderao ser' />
<verb value='poderao ter' />
<verb value='podera ser' />
<verb value='podera ter' />
<verb value="pode ser"/>
<verb value="pode ter"/>
<verb value="pode possuir"/>
<verb value="podem ser"/>
<verb value="podem possuir"/>
<verb value="podem ter"/>
<verb value="poderão ser"/>
<verb value="poderão possuir"/>
<verb value="poderão ter"/>
<verb value="poderá ser"/>
<verb value="poderá possuir"/>
<verb value="poderá ter"/>
<verb value="poderao ser"/>
<verb value="poderao ter"/>
<verb value="podera ser"/>
<verb value="podera ter"/>
</belongs>
<obligation>
<verb value='é' />
<verb value='são' />
<verb value='será' />
<verb value='serão' />
<verb value="é"/>
<verb value="são"/>
<verb value="será"/>
<verb value="serão"/>
</obligation>
<types>
<type value='char'>
<substantive value='caractere' />
<substantive value='char' />
<substantive value='caracteres' />
<substantive value='letras' />
<substantive value='letra' />
<substantive value='booleano' />
<substantive value='boolean' />
<substantive value='bool' />
<substantive value='alpha' />
<type value="char">
<substantive value="caractere"/>
<substantive value="char"/>
<substantive value="caracteres"/>
<substantive value="letras"/>
<substantive value="letra"/>
<substantive value="booleano"/>
<substantive value="boolean"/>
<substantive value="bool"/>
<substantive value="alpha"/>
</type>
<type value='varchar'>
<substantive value='varchar' />
<substantive value='caractere variante' />
<substantive value='caracteres variantes' />
<substantive value='campo' />
<substantive value='input' />
<substantive value='entrada' />
<substantive value='string' />
<substantive value='descrição' />
<substantive value='descricao' />
<type value="varchar">
<substantive value="varchar"/>
<substantive value="caractere variante"/>
<substantive value="caracteres variantes"/>
<substantive value="campo"/>
<substantive value="input"/>
<substantive value="entrada"/>
<substantive value="string"/>
<substantive value="descrição"/>
<substantive value="descricao"/>
</type>
<type value='text'>
<substantive value='text' />
<substantive value='texto livre' />
<substantive value='texto' />
<substantive value='conteúdo' />
<substantive value='conteudo' />
<substantive value='textarea' />
<type value="text">
<substantive value="text"/>
<substantive value="texto livre"/>
<substantive value="texto"/>
<substantive value="conteúdo"/>
<substantive value="conteudo"/>
<substantive value="textarea"/>
</type>
<type value='password'>
<substantive value='password' />
<substantive value='pwd' />
<substantive value='senha' />
<substantive value='chave secreta' />
<substantive value='chave' />
<type value="password">
<substantive value="password"/>
<substantive value="pwd"/>
<substantive value="senha"/>
<substantive value="chave secreta"/>
<substantive value="chave"/>
</type>
<type value='file'>
<substantive value='file' />
<substantive value='arquivo' />
<substantive value='blob' />
<substantive value='bytea' />
<substantive value='binário' />
<substantive value='binario' />
<substantive value='lo' />
<substantive value='imagem' />
<substantive value='gráfico' />
<substantive value='grafico' />
<substantive value='doc' />
<substantive value='pdf' />
<substantive value='spreedsheet' />
<type value="file">
<substantive value="file"/>
<substantive value="arquivo"/>
<substantive value="blob"/>
<substantive value="bytea"/>
<substantive value="binário"/>
<substantive value="binario"/>
<substantive value="lo"/>
<substantive value="imagem"/>
<substantive value="gráfico"/>
<substantive value="grafico"/>
<substantive value="doc"/>
<substantive value="pdf"/>
<substantive value="spreedsheet"/>
</type>
<type value='smallint'>
<substantive value='smallint' />
<substantive value='tiny int' />
<type value="smallint">
<substantive value="smallint"/>
<substantive value="tiny int"/>
</type>
<type value='int'>
<substantive value='int' />
<substantive value='inteiro' />
<substantive value='integer' />
<substantive value='numérico' />
<substantive value='numerico' />
<substantive value='numero' />
<substantive value='número' />
<type value="int">
<substantive value="int"/>
<substantive value="inteiro"/>
<substantive value="integer"/>
<substantive value="numérico"/>
<substantive value="numerico"/>
<substantive value="numero"/>
<substantive value="número"/>
</type>
<type value='bigint'>
<substantive value='bigint' />
<type value="bigint">
<substantive value="bigint"/>
</type>
<type value='real'>
<substantive value='float' />
<substantive value='real' />
<substantive value='floating' />
<substantive value='valor' />
<substantive value='dinheiro' />
<substantive value='percento' />
<substantive value='percentagem' />
<substantive value='fração' />
<substantive value='fracao' />
<type value="real">
<substantive value="float"/>
<substantive value="real"/>
<substantive value="floating"/>
<substantive value="valor"/>
<substantive value="dinheiro"/>
<substantive value="percento"/>
<substantive value="percentagem"/>
<substantive value="fração"/>
<substantive value="fracao"/>
</type>
<type value='time'>
<substantive value='date' />
<substantive value='data\/hora' />
<substantive value='data e hora' />
<substantive value='data hora' />
<substantive value='datahora' />
<substantive value='data' />
<substantive value='tempo' />
<substantive value='horário' />
<substantive value='horario' />
<substantive value='timestamp' />
<substantive value='calendário' />
<substantive value='calendario' />
<type value="time">
<substantive value="date"/>
<substantive value="data\/hora"/>
<substantive value="data e hora"/>
<substantive value="data hora"/>
<substantive value="datahora"/>
<substantive value="data"/>
<substantive value="tempo"/>
<substantive value="horário"/>
<substantive value="horario"/>
<substantive value="timestamp"/>
<substantive value="calendário"/>
<substantive value="calendario"/>
</type>
</types>
<required>
<adjective value='obrigatório' />
<adjective value='obrigatorio' />
<adjective value='não nulo' />
<adjective value='nao nulo' />
<adjective value='not null' />
<adjective value='requerido' />
<adjective value='necessário' />
<adjective value='necessario' />
<adjective value='required' />
<adjective value='needed' />
<adjective value="obrigatório"/>
<adjective value="obrigatorio"/>
<adjective value="não nulo"/>
<adjective value="nao nulo"/>
<adjective value="not null"/>
<adjective value="requerido"/>
<adjective value="necessário"/>
<adjective value="necessario"/>
<adjective value="required"/>
<adjective value="needed"/>
</required>
<unique>
<adjective value='unique' />
<adjective value='único' />
<adjective value='unico' />
<adjective value="unique"/>
<adjective value="único"/>
<adjective value="unico"/>
</unique>
<especialchars>
<char value='á' />
<char value='é' />
<char value='í' />
<char value='ó' />
<char value='ú' />
<char value='à' />
<char value='è' />
<char value='ì' />
<char value='ò' />
<char value='ù' />
<char value='ã' />
<char value='õ' />
<char value='ü' />
<char value='ä' />
<char value='ë' />
<char value='ï' />
<char value='ö' />
<char value='ü' />
<char value='â' />
<char value='ê' />
<char value='î' />
<char value='ô' />
<char value='û' />
<char value='ç' />
<char value=' ' />
<char value="á"/>
<char value="é"/>
<char value="í"/>
<char value="ó"/>
<char value="ú"/>
<char value="à"/>
<char value="è"/>
<char value="ì"/>
<char value="ò"/>
<char value="ù"/>
<char value="ã"/>
<char value="õ"/>
<char value="ü"/>
<char value="ä"/>
<char value="ë"/>
<char value="ï"/>
<char value="ö"/>
<char value="ü"/>
<char value="â"/>
<char value="ê"/>
<char value="î"/>
<char value="ô"/>
<char value="û"/>
<char value="ç"/>
<char value=" "/>
</especialchars>
<fixedchars>
<char value='a' />
<char value='e' />
<char value='i' />
<char value='o' />
<char value='u' />
<char value='a' />
<char value='e' />
<char value='i' />
<char value='o' />
<char value='u' />
<char value='a' />
<char value='o' />
<char value='u' />
<char value='a' />
<char value='e' />
<char value='i' />
<char value='o' />
<char value='u' />
<char value='a' />
<char value='e' />
<char value='i' />
<char value='o' />
<char value='u' />
<char value='c' />
<char value='_' />
<char value="a"/>
<char value="e"/>
<char value="i"/>
<char value="o"/>
<char value="u"/>
<char value="a"/>
<char value="e"/>
<char value="i"/>
<char value="o"/>
<char value="u"/>
<char value="a"/>
<char value="o"/>
<char value="u"/>
<char value="a"/>
<char value="e"/>
<char value="i"/>
<char value="o"/>
<char value="u"/>
<char value="a"/>
<char value="e"/>
<char value="i"/>
<char value="o"/>
<char value="u"/>
<char value="c"/>
<char value="_"/>
</fixedchars>
<quantifiersId>
<world value='ou então' />
<world value='ou entao' />
<world value='ou' />
<world value='até' />
<world value='ate' />
<world value="ou então"/>
<world value="ou entao"/>
<world value="ou"/>
<world value="até"/>
<world value="ate"/>
</quantifiersId>
<quantifiers>
<min>
<min>
<quantifier value='0' />
<quantifier value='zero' />
<quantifier value='nenhum' />
<quantifier value='nenhuma' />
<quantifier value='ou não' />
<quantifier value='ou nao' />
<quantifier value="0"/>
<quantifier value="zero"/>
<quantifier value="nenhum"/>
<quantifier value="nenhuma"/>
<quantifier value="ou não"/>
<quantifier value="ou nao"/>
</min>
<max>
<quantifier value='1' />
<quantifier value='um' />
<quantifier value='uma' />
<quantifier value="1"/>
<quantifier value="um"/>
<quantifier value="uma"/>
</max>
</min>
<max>
<min>
<quantifier value='uma' />
<quantifier value='1' />
<quantifier value='um único' />
<quantifier value='um unico' />
<quantifier value='uma única' />
<quantifier value='uma unica' />
<quantifier value='um' />
<quantifier value="uma"/>
<quantifier value="1"/>
<quantifier value="um único"/>
<quantifier value="um unico"/>
<quantifier value="uma única"/>
<quantifier value="uma unica"/>
<quantifier value="um"/>
</min>
<max>
<quantifier value='n' />
<quantifier value='m' />
<quantifier value='muitos' />
<quantifier value='muitas' />
<quantifier value='muito' />
<quantifier value='muita' />
<quantifier value='vários' />
<quantifier value='várias' />
<quantifier value='varios' />
<quantifier value='varias' />
<quantifier value='diversos' />
<quantifier value='diversas' />
<quantifier value='infinitos' />
<quantifier value='infinitas' />
<quantifier value='alguns' />
<quantifier value='algumas' />
<quantifier value='uns' />
<quantifier value='umas' />
<quantifier value='mais' />
<quantifier value='infinitamente' />
<quantifier value="n"/>
<quantifier value="m"/>
<quantifier value="muitos"/>
<quantifier value="muitas"/>
<quantifier value="muito"/>
<quantifier value="muita"/>
<quantifier value="vários"/>
<quantifier value="várias"/>
<quantifier value="varios"/>
<quantifier value="varias"/>
<quantifier value="diversos"/>
<quantifier value="diversas"/>
<quantifier value="infinitos"/>
<quantifier value="infinitas"/>
<quantifier value="alguns"/>
<quantifier value="algumas"/>
<quantifier value="uns"/>
<quantifier value="umas"/>
<quantifier value="mais"/>
<quantifier value="infinitamente"/>
</max>
</max>
</quantifiers>
</mindLanguage>
</mindLanguage>