First commit of the tools related to the Synonymous Dictionary.

ALso, fixed the bug with the codding tool.
Added tool to download the generated project as a .zip file.
Some changes to the "View>Current Project Files" tool

Affected issues:
- 25: Synonymouse dictionary
- 32: Change the "Explore Files" label
- 33: Missing the end character in the codding tool
Esse commit está contido em:
felipenmoura
2010-04-04 05:57:55 +00:00
commit feb3a7090b
7 arquivos alterados com 325 adições e 57 exclusões
+1 -1
Ver Arquivo
@@ -1,2 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<root><defaultIdiom value="pt-BR"/><defaultDBMS value="PostgreSQL"/><lookForUpdate value="never"/><actionWithNewVersion value="1"/><actionWithNewSubVersion value="1"/><actionWithNewUpdates value="1"/></root>
<root><defaultIdiom value="pt-BR"/><defaultDBMS value="PostgreSQL"/><lookForUpdate value="never"/><actionWithNewVersion value="-1"/><actionWithNewSubVersion value="-1"/><actionWithNewUpdates value="-1"/><useGlobalSynDic>on</useGlobalSynDic><useLocalSynDic>on</useLocalSynDic><addAutomatically>global</addAutomatically><reportDecisions>on</reportDecisions><reportDoubts>on</reportDoubts></root>
+144 -5
Ver Arquivo
@@ -15,6 +15,7 @@
public $relations= Array();
public $DDL;
public $processedWML;
public $currentOptions= null;
private $currentLineNumber;
private $currentLine;
public $sentences;
@@ -23,9 +24,10 @@
public $errors= 0;
public $globalAttributeList= Array();
public $status= 1;
public $synonymous= Array();
public $debug= Array();
public $subTypes = Array();
// this table will be created, and then discarted
// this table will be created on the memory, but will be discarted in the end of the process
public $theWebMindLanguageTempTable= 'theWebMindLanguageTempTable';
// supported types
public $types = Array('char',
@@ -131,11 +133,29 @@
}
/**
* This method simply prepares the output messages to log
* @author Felipe Nascimento
* @name log
* @param Int $level
* @param String $msg
* @return void
*/
private function log($level, $msg)
{
$this->currentOptions;
if($level=='2' && $this->currentOptions['reportDecisions'] !='on')
{
return false;
}
if($level=='3' && $this->currentOptions['reportDoubts'] !='on')
{
return false;
}
$this->messages[]= Array($level, $msg);
}
/**
* This method has the responsability to understand (interpret) the code... this is the core
* @author Felipe Nascimento
@@ -145,7 +165,7 @@
*/
private function process($project)
{
// again, we will use the global _MIND to have all the properties and methods as a singleton
// again, we will use the global _MIND to have all the properties and methods as a singleton
GLOBAL $_MIND;
// lets log each step
$this->log(4, "Starting...");
@@ -161,11 +181,13 @@
$this->especialChars= $lang->especialChars;
$this->fixedChars= $lang->fixedChars;
$project->wml= preg_replace('/\r/', '', $project->wml);
// identifying structures / subTypess
// e.g.: $sex:char(1, {F=Female|M=Male}).
$regExp= '\$\w[a-z0-9_]+:\w.+\)';
$this->sentences= preg_match_all('/'.$regExp.'/i', $project->wml, $matches);
// if there are subtypes, we will create a temp table to keep them
// we have to log it, too, and then parse it, as it was a simple attribute
if(sizeof($matches[0]) > 0)
@@ -174,6 +196,7 @@
$matches= $matches[0];
$this->log(4, "Identifying subtypes...");
// here, we will use all the identified subtypes, replacing with them in
// the lines where they were being used
for($i=0; $i<sizeof($matches); $i++)
@@ -187,6 +210,33 @@
}
}
// here, we're about to identify the definitions, for synonymous
// its rules are just like this: user=users, usuarios.
$regExp= '\@\w+=[\w \,]+[\.|\;|$]';
$x= preg_match_all('/'.$regExp.'/i', $project->wml, $matches);
// if we got some matching pattern
if(sizeof($matches[0]) > 0)
{
$this->log(4, "Treating synonymous...");
$matches= $matches[0];
for($i=0; $i<sizeof($matches); $i++)
{
$cur= explode('=', $matches[$i]);
$cur[1]= explode(',', $cur[1]);
$mainWord= $this->filter(substr($cur[0], 1));
for($j=0, $k= sizeof($cur[1]); $j<$k; $j++)
{
// I know this is a confusing line. It cleans the name of any synonymous, to not fill our dictionary with trash.
// Also, this is a faster way to use, afterwards. It's gonna be better for our performance.
$this->synonymous[$this->filter(trim($cur[1][$j]))]= trim($mainWord);
}
// we have to avoid this expression, to not be interpreted afterwards
$project->wml= str_replace($matches[$i], '', $project->wml);
}
}
$this->log(4, "Analysing expressions...");
// here, we gotta parse our prepared sentences
// from now on, $this->sentences will be an array with each expression, already patternized
@@ -606,8 +656,79 @@
" warning(s) and ".$this->errors.' error(s)</b>');
}
$this->debug['messages']= $this->messages;
$this->saveCurrentDictionary();
return $this;
}
/**
* This function will saves the current synonymous dictionary to the local ORthe global one
* @author Felipe Nascimento
* @name saveCurrentDictionary
* @return boolean
*/
private function saveCurrentDictionary()
{
if(!isset($this->currentOptions['addAutomatically']))
return true;
GLOBAL $_MIND;
// yes, I do know it could be implemented in a different way, but, once it's gonna run only once each time
// you run the project, I prefered to write just like this, to let it more "readable"
if($this->currentOptions['addAutomatically'] == 'global')
{
$file= $_MIND['rootDir'].$_MIND['languageDir'].'/'.$this->lang.'/synonymous.json';
$f= fopen($file, 'w+');
if(file_put_contents($file, JSON_encode($this->synonymous)))
return true;
else
return false;
}elseif($this->currentOptions['addAutomatically'] == 'local')
{
$file= $_MIND['rootDir'].$_MIND['publishDir'].'/'.$this->projectName.'/mind/synonymous.json';
$f= fopen($file, 'w+');
if(file_put_contents($file, JSON_encode($this->synonymous)))
return true;
else
return false;
}
}
/**
* This function will load the synonymous of this project, only. Depending on the set options;
* @author Felipe Nascimento
* @name loadLocalDictionary
* @return void
*/
private function loadLocalDictionary()
{
GLOBAL $_MIND;
$file= $_MIND['rootDir'].$_MIND['publishDir'].'/'.$this->projectName.'/mind/synonymous.json';
if($this->currentOptions['useGlobalSynDic'] == 'on' && file_exists($file))
{
$syn= JSON_decode(file_get_contents($file), true);
if(is_array($syn))
$this->synonymous= array_merge($syn, $this->synonymous);
}
}
/**
* This function will load the global synonymous dictionary if Mind should do so, depending on the set options;
* @author Felipe Nascimento
* @name loadGlobalDictionary
* @return void
*/
private function loadGlobalDictionary()
{
GLOBAL $_MIND;
$file= $_MIND['rootDir'].$_MIND['languageDir'].'/'.$this->lang.'/synonymous.json';
if($this->currentOptions['useGlobalSynDic'] == 'on' && file_exists($file))
{
$syn= JSON_decode(file_get_contents($file), true);
if(is_array($syn))
$this->synonymous= array_merge($syn, $this->synonymous);
}
}
/**
* This is the constructor
@@ -618,12 +739,20 @@
* @param [Project Object]
* @return MindProcessor Object
*/
public function __construct($project=false) // obj of project
public function __construct($project=false)
{
// if no project has been received, we simply return the new empty Object
GLOBAL $_MIND;
$this->currentOptions= $_MIND['fw']->loadOptions();
// if no project has been received, we simply return the new empty Object
if(!$project){
return $this;
}
$this->lang= $project->lang;
$this->projectName= $project->name;
$this->loadGlobalDictionary();
$this->loadLocalDictionary();
// if a project Object has been sent to this method, then process it and return its result
return $this->process($project);
@@ -713,6 +842,12 @@
// and the left word is the secont entity
$rightTable= $this->filter(trim($mindExp[sizeof($mindExp)-1]));
// let's, first, see if any of these entities should be replaced by any synonymous
if(isset($this->synonymous[$leftTable]))
$leftTable= $this->synonymous[$leftTable];
if(isset($this->synonymous[$rightTable]))
$rightTable= $this->synonymous[$rightTable];
/*
* if the name of right table has a ":" it means it is probably an attribute
* wrote with some mistake
@@ -730,7 +865,6 @@
// anyways... we will fix the name to a valid one
$rightTable= $newTmpName;
$this->warnings++;
//continue;
}
// here, we find those entities which point to themselves
if($leftTable == $rightTable)
@@ -847,6 +981,11 @@
$mindExp= explode(trim($this->verbId), $mindExp);
// firstly, we gotta create the left table, if it does not exist
$leftTable= $this->filter(trim($mindExp[0]));
// we here, will check if this entity may not be replaced by a synonymous
if(isset($this->synonymous[$leftTable]))
$leftTable= $this->synonymous[$leftTable];
if(!isset($this->tables[$leftTable]))
{
$this->tables[$leftTable]= new Table($leftTable);
+55 -19
Ver Arquivo
@@ -9,13 +9,28 @@
{
if(isset($_GET['projectdirtoshow']))
{
$original_dir= $_MIND['publishDir'].'/'.$p.'/root';
$userDir= $_MIND['publishDir'].'/'.$p.'/root';
$original_dir= $_MIND['publishDir'].'/'.$p.'/root/';
$userDir= $_MIND['publishDir'].'/'.$p.'/root/';
}else{
$userDir= $_MIND['userDir'].'/'.$_SESSION['user']['login'].'/temp/'.$p.'/root';
$userDir= $_MIND['userDir'].'/'.$_SESSION['user']['login'].'/temp/'.$p.'/root/';
$original_dir= $userDir;
}
if(isset($_GET['zip']))
{
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$p.'.zip"');
header('Content-Transfer-Encoding: binary');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Pragma: no-cache');
$path= str_replace(basename($_SERVER['SCRIPT_FILENAME']), '', $_SERVER['SCRIPT_FILENAME']);
$from= 'cd '.$path.'; cd '.$_MIND['rootDir'].'; cd '.$original_dir.'../;';
$ret= exec($from.' zip -r mind/'.$p.'.zip root/');
readfile($_MIND['rootDir'].$original_dir.'../mind/'.$p.'.zip');
exit;
}
if(isset($_GET['f']))
{
if(file_exists($_GET['f']))
@@ -88,7 +103,7 @@
if($ext == 'inc') // I should tell you ... do NOT use .inc files ... even though, if you wan to... ok
$ext= 'php';
if($ext == 'txt')
if($ext == 'txt' || $ext == 'json')
$ext= 'plain';
if($ext == 'ini')
@@ -208,7 +223,6 @@
$d = dir($dir);
$tmpDir;
//echo $curVersion['date'].'<hr>';
while (false !== ($entry = $d->read()))
{
@@ -216,7 +230,6 @@
{
$tmpDir= str_replace($userDir, '', $dir.'/'.$entry);
$pos= sizeof(explode('/', $tmpDir)) -4;
//echo $entry;
if(is_dir($dir.'/'.$entry))
{
$id= "files_explorer_".$pos.basename($tmpDir).rand(0,9999);
@@ -245,15 +258,43 @@
<a href='<?php echo $original_dir; ?>'
target='_quot'
style='text-decoration:none;padding:0px; margin:0px;'>
<div style='border-bottom:solid 1px #666;
<div style='border:solid 1px #666;
background-color:#e0e0e0;
cursor:pointer;'
cursor:pointer;
height:20px;
margin:1px;'
onmouseover="this.style.backgroundColor= '#f0f0f0'"
onmouseout="this.style.backgroundColor= '#e0e0e0'">
Explore Files
See it Running
</div>
</a>
<div style='padding:2px;'>
<a href='<?php echo $_SERVER['PHP_SELF'].'?zip=1&p='.$p; ?>'
target='downloadFrame'
style='text-decoration:none;padding:0px; margin:0px;'>
<div style='border:solid 1px #666;
background-color:#e0e0e0;
cursor:pointer;
height:20px;
margin:1px;'
onmouseover="this.style.backgroundColor= '#f0f0f0'"
onmouseout="this.style.backgroundColor= '#e0e0e0'">
Download current
</div>
</a>
<a href="JavaScript: $('#addressHereTreeDiv').toggle(); void(0);"
style='text-decoration:none;padding:0px; margin:0px;'>
<div style='border:solid 1px #666;
background-color:#e0e0e0;
cursor:pointer;
height:20px;
margin:1px;'
onmouseover="this.style.backgroundColor= '#f0f0f0'"
onmouseout="this.style.backgroundColor= '#e0e0e0'">
Files Tree
</div>
</a>
<div style='padding:2px;'
id='addressHereTreeDiv'>
<?php
throughDir($_MIND['rootDir'].$userDir);
?>
@@ -274,6 +315,10 @@
src="about:blanc">
</iframe>
</div>
<iframe id='downloadFrame'
name='downloadFrame'
style='display:none;'>
</iframe>
<script>
var showCurrentCodeOf= function(file){
@@ -289,14 +334,5 @@
});
</script>
<?php
//header("Location: ".$addr);
//echo $addr;
}
?>
+79 -3
Ver Arquivo
@@ -16,12 +16,13 @@ Mind.Dialog.CloseModal();
$op= $_MIND['fw']->loadOptions();
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>"
mthod='POST'
method='POST'
onsubmit="return false"
id='optionsForm'>
<ul>
<li><a href="#optionsForm_tab1">Laytout</a></li>
<li><a href="#optionsForm_tab2">Updates</a></li>
<li><a href="#optionsForm_tab3">I.Q.</a></li>
</ul>
<div id="optionsForm_tab1">
<table>
@@ -123,7 +124,7 @@ Mind.Dialog.CloseModal();
<tr>
<td>
Check for updates<br/>
<select name='lookForUpdate' onchange="optionsFormChangeUpdate(this)">
<select name='lookForUpdate' id='mindOptionsLookForUpdate' onchange="optionsFormChangeUpdate(this)">
<option value='1'
<?php
if($op['lookForUpdate'] == 1)
@@ -243,6 +244,38 @@ Mind.Dialog.CloseModal();
</tbody>
</table>
</div>
<div id="optionsForm_tab3">
<input type='checkbox'
<?php if(isset($op['useGlobalSynDic']) && $op['useGlobalSynDic'] == 'on') echo "checked='checked'" ?>
name='useGlobalSynDic'/>
Use Global Synonimous<br/>
&nbsp;&nbsp;&nbsp;&nbsp;
<input type='checkbox'
name='addAutomatically'
id='addAutomatically1'
value='global'
<?php if(isset($op['addAutomatically']) && $op['addAutomatically'] == 'global') echo "checked='checked'" ?> />
Add new synonymous automatically<br/>
<input type='checkbox'
<?php if(isset($op['useLocalSynDic']) && $op['useLocalSynDic'] == 'on') echo "checked='checked'" ?>
name='useLocalSynDic'/>
Use Project Synonimous<br/>
&nbsp;&nbsp;&nbsp;&nbsp;
<input type='checkbox'
name='addAutomatically'
id='addAutomatically2'
value='local'
<?php if(isset($op['addAutomatically']) && $op['addAutomatically'] == 'local') echo "checked='checked'" ?> />
Add new synonymous automatically<br/>
<input type='checkbox'
<?php if(isset($op['reportDecisions']) && $op['reportDecisions'] == 'on') echo "checked='checked'" ?>
name='reportDecisions' />
Report decisions<br/>
<input type='checkbox'
<?php if(isset($op['reportDoubts']) && $op['reportDoubts'] == 'on') echo "checked='checked'" ?>
name='reportDoubts' />
Report doubts<br/>
</div>
</form>
<script>
function optionsFormChangeUpdate(o)
@@ -257,5 +290,48 @@ Mind.Dialog.CloseModal();
$(function() {
$("#optionsForm").tabs();
optionsFormChangeUpdate(document.getElementById('mindOptionsLookForUpdate'));
var iq= $('#optionsForm_tab3');
var gSynDic= iq.find("[name=useGlobalSynDic]");
var lSynDic= iq.find('[name=useLocalSynDic]');
if(!gSynDic.is(':checked'))
{
document.getElementById('addAutomatically1').disabled= 'disabled';
document.getElementById('addAutomatically1').checked= false;
}
if(!lSynDic.is(':checked'))
{
document.getElementById('addAutomatically2').disabled= 'disabled';
document.getElementById('addAutomatically2').checked= false;
}
$('#addAutomatically2').bind('click', function(){
if(this.checked)
document.getElementById('addAutomatically1').checked= false;
});
$('#addAutomatically1').bind('click', function(){
if(this.checked)
document.getElementById('addAutomatically2').checked= false;
});
gSynDic.bind('click', function(){
if(this.checked)
{
document.getElementById('addAutomatically1').removeAttribute('disabled');
}else{
document.getElementById('addAutomatically1').setAttribute('disabled', 'disabled');
}
})
lSynDic.bind('click', function(){
if(this.checked)
{
document.getElementById('addAutomatically2').removeAttribute('disabled');
}else{
document.getElementById('addAutomatically2').setAttribute('disabled', 'disabled');
}
})
});
</script>
</script>
+36 -18
Ver Arquivo
@@ -91,14 +91,14 @@
function getEncoded($n)
{
$n= utf8_decode($n);
$n= addslashes(strip_tags(preg_replace('/[\!\@\#\$\%\¨\&\*\(\)\\_\-\=\+\^\~\,\.\{\[\]\}\?\"\']\;\/\:/', '', $n)));
$n= preg_replace('/[áâãà]/i', 'a', $n);
$n= preg_replace('/[éêèë]/i', 'e', $n);
$n= preg_replace('/[íìîï]/i', 'i', $n);
$n= preg_replace('/[óòõôö]/i', 'o', $n);
$n= preg_replace('/[úùûü]/i', 'u', $n);
$n= preg_replace('/ç/i', 'c', $n);
$n= preg_replace('/ñ/i', 'n', $n);
$n= addslashes(strip_tags(preg_replace('/[\!\@\#\$\%\\&\*\(\)\\_\-\=\+\^\~\,\.\{\[\]\}\?\"\']\;\/\:/', '', $n)));
$n= preg_replace('/[]/i', 'a', $n);
$n= preg_replace('/[]/i', 'e', $n);
$n= preg_replace('/[]/i', 'i', $n);
$n= preg_replace('/[]/i', 'o', $n);
$n= preg_replace('/[]/i', 'u', $n);
$n= preg_replace('//i', 'c', $n);
$n= preg_replace('//i', 'n', $n);
$n= preg_replace('/^[0-9]/', '_', $n);
return $n;
}
@@ -133,7 +133,6 @@
echo "Mind.Dialog.ShowError(".JSON_encode($_MIND['fw']->errorOutput(8))."); ";
if(!$flag)
exit;
//return $this->output;
}
function loadExternal()
{
@@ -357,7 +356,7 @@
public function fixName($str)
{
return preg_replace("[^a-zA-Z0-9_]", "", strtr($str, "áàãâéêíóôõúüçÁÀÃÂÉÊÍÓÔÕÚÜÇ ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
return preg_replace("[^a-zA-Z0-9_]", "", strtr($str, " ", "aaaaeeiooouucAAAAEEIOOOUUC_"));
}
function getSavedERDList($p)
@@ -446,6 +445,22 @@
else
$xml->actionWithNewUpdates['value']= '-1';
// for I.Q. Options
if(isset($ar['useGlobalSynDic']))
$xml->addChild('useGlobalSynDic', $ar['useGlobalSynDic']);
if(isset($ar['useLocalSynDic']))
$xml->addChild('useLocalSynDic', $ar['useLocalSynDic']);
if(isset($ar['addAutomatically']))
$xml->addChild('addAutomatically', $ar['addAutomatically']);
if(isset($ar['askForVerbs']))
$xml->addChild('askForVerbs', $ar['askForVerbs']);
if(isset($ar['askForTypes']))
$xml->addChild('askForTypes', $ar['askForTypes']);
if(isset($ar['reportDecisions']))
$xml->addChild('reportDecisions', $ar['reportDecisions']);
if(isset($ar['reportDoubts']))
$xml->addChild('reportDoubts', $ar['reportDoubts']);
$_MIND['fw']->saveXML($xml, $opXML);
}
@@ -460,6 +475,15 @@
$opts['actionWithNewVersion'] = (string)$op->actionWithNewVersion['value'];
$opts['actionWithNewSubVersion']= (string)$op->actionWithNewSubVersion['value'];
$opts['actionWithNewUpdates'] = (string)$op->actionWithNewUpdates['value'];
$opts['useGlobalSynDic'] = (string)$op->useGlobalSynDic;
$opts['useLocalSynDic'] = (string)$op->useLocalSynDic;
$opts['addAutomatically'] = (string)$op->addAutomatically;
$opts['askForVerbs'] = (string)$op->askForVerbs;
$opts['askForTypes'] = (string)$op->askForTypes;
$opts['reportDecisions'] = (string)$op->reportDecisions;
$opts['reportDoubts'] = (string)$op->reportDoubts;
return $opts;
}
public function getThemes()
@@ -507,16 +531,10 @@
break;
}
}
// exit;
}
$_MIND['fw']= new Mind();
$_MIND['fw']->loadExternal();
set_error_handler('errorHandle');
/*$u= new User();
$u->name('Felipe Nascimento');
$u->pwd('pqp');
$u->login('felipe');
$u->email('felipe@thewebmind.org');
$u->save();*/
set_error_handler('errorHandle');
?>
+9 -10
Ver Arquivo
@@ -87,7 +87,7 @@ Mind.MindEditor= {
},
filterCaracters: function(v)
{
v= v.replace(/[\"\'@#$%&\(\)\[\]\{\}\+\=\§]/ig, '');
v= v.replace(/[\"\'@#$%&\(\)\[\]\{\}\+\=\]/ig, '');
if(!isNaN(v.substring(0,1)))
v= '_'+v;
return v;
@@ -208,7 +208,7 @@ Mind.MindEditor= {
SetUserConfig : function(){
// Tamanho da fonte
Mind.MindEditor.SetSize(Mind.Theme.userConfig.fontSize);
//Marca como selecionado a opção armazenada
//Marca como selecionado a opo armazenada
if(document.getElementById("font_size_select"))
{
var comboFontSize = document.getElementById("font_size_select");
@@ -225,7 +225,7 @@ Mind.MindEditor= {
// Cor de Fundo
document.getElementById('bgToChangeOnEditor').style.backgroundColor = Mind.Theme.userConfig.backgroundColor;
// Ajusta a posição do painel esquerdo
// Ajusta a posio do painel esquerdo
Mind.Panel["left"].Size(Mind.Theme.userConfig.leftPanelPos);
Mind.Panel["right"].Size(parseInt(document.body.clientWidth) - parseInt(Mind.Theme.userConfig.rightPanelPos));
Mind.Panel["bottom"].Size(parseInt(document.body.clientHeight) - parseInt(Mind.Theme.userConfig.bottomPanelPos));
@@ -251,7 +251,6 @@ Mind.MindEditor= {
{
$('#mindEditorTool [guia=true]').css('display', 'none');
var h= e.offsetHeight;
//e.style.display= 'none';
setTimeout(function(){
$(e).animate({
top:e.offsetTop + e.offsetHeight - 2,
@@ -262,7 +261,7 @@ Mind.MindEditor= {
});
}, 200);
return;
} // else, show it
}
e.style.display= '';
var h= e.offsetHeight;
var c= document.getElementById('mindEditor').value;
@@ -302,16 +301,16 @@ Mind.MindEditor= {
return;
if(rel == '1/1')
{
str+= l+ ' '+ Mind.Project.attributes['verb']+ ' 1 '+ r+ '\n';
str+= l+ ' '+ Mind.Project.attributes['verb']+ ' 1 '+ r+ '.\n';
str+= r+ ' '+ Mind.Project.attributes['verb']+ ' 1 '+ l;
}else if(rel == 'n/n')
{
str+= l+ ' '+ Mind.Project.attributes['verb']+ ' n '+ r+ '\n';
str+= l+ ' '+ Mind.Project.attributes['verb']+ ' n '+ r+ '.\n';
str+= r+ ' '+ Mind.Project.attributes['verb']+ ' n '+ l;
}else{
str+= l+ ' '+ Mind.Project.attributes['verb']+ ' '+ rel.substring(2,3)+ ' '+ r;
}
document.getElementById('mindEditor').value+= str;
document.getElementById('mindEditor').value+= str+'.';
Mind.MindEditor.Typing(document.getElementById('mindEditor').value, false);
document.getElementById('mindEditorToolForm').reset();
document.getElementById('mindEditorTool_Entities_left').focus();
@@ -364,7 +363,7 @@ Mind.MindEditor= {
if(comment.replace(/ /g, '') != '')
str+= ' // '+ comment;
}
document.getElementById('mindEditor').value+= str;
document.getElementById('mindEditor').value+= str+'.';
Mind.MindEditor.Typing(document.getElementById('mindEditor').value, false);
document.getElementById('mindEditorToolForm').reset();
document.getElementById('mindEditorTool_Attribute_entity').focus();
@@ -408,7 +407,7 @@ Mind.MindEditor= {
if(comment.replace(/ /g, '') != '')
str+= ' // '+ comment;
document.getElementById('mindEditor').value= str+ '\n'+ document.getElementById('mindEditor').value;
document.getElementById('mindEditor').value= str+ '.\n'+ document.getElementById('mindEditor').value;
Mind.MindEditor.Typing(document.getElementById('mindEditor').value, false);
document.getElementById('mindEditorToolForm').reset();
document.getElementById('mindEditorTool_subtype_name').focus();
+1 -1
Ver Arquivo
@@ -17,7 +17,7 @@
<verb value="usa"/>
<verb value="usam"/>
<verb value="pertence a"/>
<verb value="ganha"/></verbs>
<verb value="ganha"/><verb value="ministra"/></verbs>
<belongs>
<verb value="pode ser"/>
<verb value="pode ter"/>