mirror of
https://gitlab.easter-eggs.com/ee/ldapsaisie.git
synced 2024-11-22 18:09:06 +01:00
LSformat : Full support format in JS and improve substr
This commit is contained in:
parent
245094e078
commit
bbf7087572
3 changed files with 119 additions and 28 deletions
|
@ -28,7 +28,9 @@ Lorsque le paramètre <varname>B</varname> est défini,
|
||||||
<varname>A</varname> correspond au rang du premier caractère à partir duquel la
|
<varname>A</varname> correspond au rang du premier caractère à partir duquel la
|
||||||
chaîne de substitution sera découpée et <varname>B</varname> le nombre maximum
|
chaîne de substitution sera découpée et <varname>B</varname> le nombre maximum
|
||||||
de caractères à extraire. Le signe de <varname>B</varname> influera comme expliqué
|
de caractères à extraire. Le signe de <varname>B</varname> influera comme expliqué
|
||||||
dans le premier cas.
|
dans le premier cas. Si <varname>B</varname> vaut zéro, la totalité de la longeur
|
||||||
|
de la chaîne sera retournée en tenant compte de <varname>A</varname> pour le rang
|
||||||
|
du premier caractère.
|
||||||
</para>
|
</para>
|
||||||
<para>Les paramètres <emphasis>!</emphasis> ou <emphasis>_</emphasis> permettre respectivement de forcer la mise en majuscule ou en minuscule de la valeur de substitution.</para>
|
<para>Les paramètres <emphasis>!</emphasis> ou <emphasis>_</emphasis> permettre respectivement de forcer la mise en majuscule ou en minuscule de la valeur de substitution.</para>
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,19 @@
|
||||||
*/
|
*/
|
||||||
function getFData($format,$data,$meth=NULL) {
|
function getFData($format,$data,$meth=NULL) {
|
||||||
$unique=false;
|
$unique=false;
|
||||||
|
/*
|
||||||
|
* Format : %{[key name][:A][:B][! ou _][~]}
|
||||||
|
*
|
||||||
|
* Extracted fields
|
||||||
|
* - 1 : key name
|
||||||
|
* - 2 : :A
|
||||||
|
* - 3 : A
|
||||||
|
* - 4 : :B
|
||||||
|
* - 5 : B
|
||||||
|
* - 6 : "-"
|
||||||
|
* - 7 : ! or _
|
||||||
|
* - 8 : ~
|
||||||
|
*/
|
||||||
$expr="%[{(]([A-Za-z0-9]+)(\:(-?[0-9])+)?(\:(-?[0-9]+))?(-)?(\!|\_)?(~)?[})]";
|
$expr="%[{(]([A-Za-z0-9]+)(\:(-?[0-9])+)?(\:(-?[0-9]+))?(-)?(\!|\_)?(~)?[})]";
|
||||||
if(!is_array($format)) {
|
if(!is_array($format)) {
|
||||||
$format=array($format);
|
$format=array($format);
|
||||||
|
@ -138,6 +151,16 @@ function _getFData_extractAndModify($data,$ch) {
|
||||||
$l=$ch[5];
|
$l=$ch[5];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ($ch[5]==0) {
|
||||||
|
if ($ch[3]<0) {
|
||||||
|
$s=strlen((string)$data)-(-1*$ch[3]);
|
||||||
|
$l=strlen((string)$data);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$s=$ch[3];
|
||||||
|
$l=strlen((string)$data);
|
||||||
|
}
|
||||||
|
}
|
||||||
else {
|
else {
|
||||||
$s=0;
|
$s=0;
|
||||||
$l=$ch[3];
|
$l=$ch[3];
|
||||||
|
|
|
@ -43,7 +43,21 @@ function LSdebug(arguments) {
|
||||||
* @retval string The formatted string
|
* @retval string The formatted string
|
||||||
*/
|
*/
|
||||||
function getFData(format,data,meth) {
|
function getFData(format,data,meth) {
|
||||||
var getMotif = new RegExp('%\{(([A-Za-z0-9]+)(\:(-?[0-9])+)?(\:(-?[0-9])+)?)\}');
|
/*
|
||||||
|
* Format : %{[key name][:A][:B][! ou _][~]}
|
||||||
|
*
|
||||||
|
* Extracted fields
|
||||||
|
* - 1 : full string in %{}
|
||||||
|
* - 2 : key name
|
||||||
|
* - 3 : :A
|
||||||
|
* - 4 : A
|
||||||
|
* - 5 : :B
|
||||||
|
* - 6 : B
|
||||||
|
* - 7 : "-"
|
||||||
|
* - 8 : ! or _
|
||||||
|
* - 9 : ~
|
||||||
|
*/
|
||||||
|
var getMotif = new RegExp('%\{(([A-Za-z0-9]+)(\:(-?[0-9])+)?(\:(-?[0-9])+)?)(-)?(\!|\_)?(~)?\}');
|
||||||
var find=1;
|
var find=1;
|
||||||
var val="";
|
var val="";
|
||||||
if(($type(data)=='object') || ($type(data)=='array')) {
|
if(($type(data)=='object') || ($type(data)=='array')) {
|
||||||
|
@ -51,20 +65,7 @@ function getFData(format,data,meth) {
|
||||||
while (find) {
|
while (find) {
|
||||||
var ch = getMotif.exec(format);
|
var ch = getMotif.exec(format);
|
||||||
if ($type(ch)) {
|
if ($type(ch)) {
|
||||||
if($type(ch[4])) {
|
val=_getFData_extractAndModify(data[ch[2]],ch);
|
||||||
if ($type(ch[6])) {
|
|
||||||
var s=ch[4];
|
|
||||||
var l=ch[6];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var s=0;
|
|
||||||
var l=ch[4];
|
|
||||||
}
|
|
||||||
var val=data[ch[2]].substr(s,l);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
val=data[ch[2]];
|
|
||||||
}
|
|
||||||
format=format.replace(new RegExp('%\{'+ch[1]+'\}'),val);
|
format=format.replace(new RegExp('%\{'+ch[1]+'\}'),val);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -92,19 +93,9 @@ function getFData(format,data,meth) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if($type(ch[4])&&ch[4]!="") {
|
val=_getFData_extractAndModify(val,ch);
|
||||||
if ($type(ch[6])&&ch[6]!="") {
|
|
||||||
var s=ch[4];
|
|
||||||
var l=ch[6];
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var s=0;
|
|
||||||
var l=ch[4];
|
|
||||||
}
|
|
||||||
val=val.substr(s,l);
|
|
||||||
}
|
|
||||||
|
|
||||||
format=format.replace(new RegExp('%\{'+ch[1]+'\}'),val);
|
format=format.replace(new RegExp('%\{'+ch[1]+'[\:0-9\!\_\~\-]*\}'),val);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
find=0;
|
find=0;
|
||||||
|
@ -112,9 +103,84 @@ function getFData(format,data,meth) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if(($type(data)=='string')) {
|
||||||
|
while (find) {
|
||||||
|
var ch = getMotif.exec(format);
|
||||||
|
if ($type(ch)) {
|
||||||
|
val=_getFData_extractAndModify(data,ch)
|
||||||
|
format=format.replace(new RegExp('%\{'+ch[1]+'[\:0-9\!\_\~\-]*\}'),val);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
find=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return format;
|
return format;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function _getFData_extractAndModify(data,ch) {
|
||||||
|
console.log(ch);
|
||||||
|
var val=data;
|
||||||
|
// If A
|
||||||
|
if($type(ch[4])) {
|
||||||
|
ch[4]=parseInt(ch[4]);
|
||||||
|
var s=0;
|
||||||
|
var l=data.length;
|
||||||
|
if ($type(ch[6])) {
|
||||||
|
ch[6]=parseInt(ch[6]);
|
||||||
|
// With A and B
|
||||||
|
if (ch[6]==0) {
|
||||||
|
// If B == 0
|
||||||
|
ch[6]=data.length;
|
||||||
|
}
|
||||||
|
if (ch[4]>0) {
|
||||||
|
// A > 0
|
||||||
|
s=ch[4];
|
||||||
|
l=ch[6];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// A < 0
|
||||||
|
s=data.length+ch[4];
|
||||||
|
if (ch[6]<0) {
|
||||||
|
// B < 0
|
||||||
|
l=data.length-s+ch[6];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// B > 0
|
||||||
|
l=ch[6];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Only A
|
||||||
|
if (ch[4]>0) {
|
||||||
|
// A > 0
|
||||||
|
s=0;
|
||||||
|
l=ch[4];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// A < 0
|
||||||
|
s=data.length+ch[4];
|
||||||
|
l=data.length;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
console.log("s = " + s + " / l = " + l);
|
||||||
|
val=data.substr(s,l);
|
||||||
|
}
|
||||||
|
// Upper or Lower case
|
||||||
|
if (ch[8]=='!') {
|
||||||
|
val=val.toUpperCase();
|
||||||
|
}
|
||||||
|
else if (ch[8]=='_') {
|
||||||
|
val=val.toLowerCase();
|
||||||
|
}
|
||||||
|
// Strip accents
|
||||||
|
if (ch[9]=='~') {
|
||||||
|
val=replaceAccents(val);
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete accentuated characters in a string
|
* Delete accentuated characters in a string
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in a new issue