je cherche à convertir un texte du type "fran%C3%A7ais" vers
"français", pour cela j'ai trouver un bout de code qui semble faire ce
que j'ai besoin mais je n'arrive pas à le faire fonctionner (je
debute)
int
UTF8Toisolat1(unsigned char* out, int outlen, unsigned char* in, int
*inlen)
{
unsigned char* outstart= out;
unsigned char* outend= out+outlen;
unsigned char* inend= in+*inlen;
unsigned char c;
while (in < inend) {
c= *in++;
if (c < 0x80) {
if (out >= outend) return -1;
*out++= c;
}
else if (in == inend) {
*inlen -= 1;
break;
}
else if (((c & 0xFC) == 0xC0) && ((*in & 0xC0) == 0x80)) {
/* a two byte utf-8 and can be encoding as isolate1 */
*out++= ((c & 0x03) << 6) | (*in++ & 0x3F);
}
else return -2;
/* TODO : some should be represent as "&#x____;" */
}
return out-outstart;
}
Mais c'est pour t'expliquer que la difficulté de ton problème n'est pas vraiment bordée, donc parfois il faut savoir être humble, et accepter de penser que d'autres ayant déjà trimmé, on peut peut-être leur faire la faveur de réutiliser leur travail.
Un préalable à tout développement est une utilisation intensive de Google.
Juste un petit bémol, attention à la légalité de ce qu'on fait quand on récupère du code...
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Harpo <trashcan@hotmail.com> writes:
Antoine Leca wrote:
Mais c'est pour t'expliquer
que la difficulté de ton problème n'est pas vraiment bordée, donc
parfois il faut savoir être humble, et accepter de penser que d'autres
ayant déjà trimmé, on peut peut-être leur faire la faveur de
réutiliser leur travail.
Un préalable à tout développement est une utilisation intensive de
Google.
Juste un petit bémol, attention à la légalité de ce qu'on
fait quand on récupère du code...
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
Mais c'est pour t'expliquer que la difficulté de ton problème n'est pas vraiment bordée, donc parfois il faut savoir être humble, et accepter de penser que d'autres ayant déjà trimmé, on peut peut-être leur faire la faveur de réutiliser leur travail.
Un préalable à tout développement est une utilisation intensive de Google.
Juste un petit bémol, attention à la légalité de ce qu'on fait quand on récupère du code...
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Jean-Marc
"Jean-Marc Bourguet" a écrit dans le message de news:
Harpo writes:
Antoine Leca wrote:
Mais c'est pour t'expliquer que la difficulté de ton problème n'est pas vraiment bordée, donc parfois il faut savoir être humble, et accepter de penser que d'autres ayant déjà trimmé, on peut peut-être leur faire la faveur de réutiliser leur travail.
Un préalable à tout développement est une utilisation intensive de Google.
Juste un petit bémol, attention à la légalité de ce qu'on fait quand on récupère du code...
Hello,
attention aussi quand on développe pour cretaines personnes. Les banques par exemple nous font jurer sur l'honneur que tout notre code est propriétaire et nous imposent de ne pas utiliser de bibliothèques openSource. Par exemple, impossible d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.
Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des crash inexplicables de LibXML (justement) sous Solaris alors que le même programme avec les mêmes données de test en entrée fonctionnait sans problèmes sous Windows et AIX.
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
"Jean-Marc Bourguet" <jm@bourguet.org> a écrit dans le message de
news:87vf5sdyz9.fsf@news.bourguet.org...
Harpo <trashcan@hotmail.com> writes:
Antoine Leca wrote:
Mais c'est pour t'expliquer
que la difficulté de ton problème n'est pas vraiment bordée, donc
parfois il faut savoir être humble, et accepter de penser que d'autres
ayant déjà trimmé, on peut peut-être leur faire la faveur de
réutiliser leur travail.
Un préalable à tout développement est une utilisation intensive de
Google.
Juste un petit bémol, attention à la légalité de ce qu'on
fait quand on récupère du code...
Hello,
attention aussi quand on développe pour cretaines personnes.
Les banques par exemple nous font jurer sur l'honneur que tout
notre code est propriétaire et nous imposent de ne pas
utiliser de bibliothèques openSource. Par exemple, impossible
d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.
Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des
crash inexplicables de LibXML (justement) sous Solaris alors que le
même programme avec les mêmes données de test en entrée fonctionnait
sans problèmes sous Windows et AIX.
--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
"Jean-Marc Bourguet" a écrit dans le message de news:
Harpo writes:
Antoine Leca wrote:
Mais c'est pour t'expliquer que la difficulté de ton problème n'est pas vraiment bordée, donc parfois il faut savoir être humble, et accepter de penser que d'autres ayant déjà trimmé, on peut peut-être leur faire la faveur de réutiliser leur travail.
Un préalable à tout développement est une utilisation intensive de Google.
Juste un petit bémol, attention à la légalité de ce qu'on fait quand on récupère du code...
Hello,
attention aussi quand on développe pour cretaines personnes. Les banques par exemple nous font jurer sur l'honneur que tout notre code est propriétaire et nous imposent de ne pas utiliser de bibliothèques openSource. Par exemple, impossible d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.
Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des crash inexplicables de LibXML (justement) sous Solaris alors que le même programme avec les mêmes données de test en entrée fonctionnait sans problèmes sous Windows et AIX.
-- Jean-marc "There are only 10 kind of people those who understand binary and those who don't."
Harpo
Jean-Marc Bourguet wrote:
Un préalable à tout développement est une utilisation intensive de Google.
Juste un petit bémol, attention à la légalité de ce qu'on fait quand on récupère du code...
Merci de le souligner. C'est un problème très important, je n'y pense pas assez du fait que je n'utilise que des logiciels libres et ne fais (quand je veux) que des logiciels libres, je n'ai donc pas ce problème. Je ne me sens pas le droit de faire un logiciel non libre à partir d'un logiciel libre ou l'inverse, c'est du piratage. Mais si je trouve des concepts qui peuvent être bons, j'essaye de les intégrer à mes connaissances et éventuellement il en sort quelque chose (si je veux).
Sinon il faudrait verser des royalties à un cro-magnon à chaque fois qu'on fait du feu, je n'irais jamais lui voler une allumette, il me la donne ou il ne me la donne pas c'est son problème, il s'agit de quelque chose de concret, mais ça me foutrait mal qu'il porte plainte parce que je frotte des silex ! Une chose concrete comme une allumette n'existe qu'en tant qu'instance. Le concept sous-jacent appartient à tous ceux qui sont capable de le concevoir.
A partir du moment où quelqu'un me montre son feu, il m'en *donne* le concept, s'il ne veut pas le me donner, qu'il reste s'enfumer au fond de sa caverne. Ce n'est en tout cas pas demain que je vais acheter une abstraction ! Autant essayer de vendre un frigo à un Inuit qui n'a pas l'électricité.
-- Patrick. http://patrick.davalan.free.fr/
Jean-Marc Bourguet wrote:
Un préalable à tout développement est une utilisation intensive de
Google.
Juste un petit bémol, attention à la légalité de ce qu'on
fait quand on récupère du code...
Merci de le souligner.
C'est un problème très important, je n'y pense pas assez du fait que je
n'utilise que des logiciels libres et ne fais (quand je veux) que des
logiciels libres, je n'ai donc pas ce problème.
Je ne me sens pas le droit de faire un logiciel non libre à partir d'un
logiciel libre ou l'inverse, c'est du piratage. Mais si je trouve des
concepts qui peuvent être bons, j'essaye de les intégrer à mes
connaissances et éventuellement il en sort quelque chose (si je veux).
Sinon il faudrait verser des royalties à un cro-magnon à chaque fois
qu'on fait du feu, je n'irais jamais lui voler une allumette, il me la
donne ou il ne me la donne pas c'est son problème, il s'agit de quelque
chose de concret, mais ça me foutrait mal qu'il porte plainte parce que
je frotte des silex !
Une chose concrete comme une allumette n'existe qu'en tant qu'instance.
Le concept sous-jacent appartient à tous ceux qui sont capable de le
concevoir.
A partir du moment où quelqu'un me montre son feu, il m'en *donne* le
concept, s'il ne veut pas le me donner, qu'il reste s'enfumer au fond
de sa caverne. Ce n'est en tout cas pas demain que je vais acheter une
abstraction !
Autant essayer de vendre un frigo à un Inuit qui n'a pas l'électricité.
Un préalable à tout développement est une utilisation intensive de Google.
Juste un petit bémol, attention à la légalité de ce qu'on fait quand on récupère du code...
Merci de le souligner. C'est un problème très important, je n'y pense pas assez du fait que je n'utilise que des logiciels libres et ne fais (quand je veux) que des logiciels libres, je n'ai donc pas ce problème. Je ne me sens pas le droit de faire un logiciel non libre à partir d'un logiciel libre ou l'inverse, c'est du piratage. Mais si je trouve des concepts qui peuvent être bons, j'essaye de les intégrer à mes connaissances et éventuellement il en sort quelque chose (si je veux).
Sinon il faudrait verser des royalties à un cro-magnon à chaque fois qu'on fait du feu, je n'irais jamais lui voler une allumette, il me la donne ou il ne me la donne pas c'est son problème, il s'agit de quelque chose de concret, mais ça me foutrait mal qu'il porte plainte parce que je frotte des silex ! Une chose concrete comme une allumette n'existe qu'en tant qu'instance. Le concept sous-jacent appartient à tous ceux qui sont capable de le concevoir.
A partir du moment où quelqu'un me montre son feu, il m'en *donne* le concept, s'il ne veut pas le me donner, qu'il reste s'enfumer au fond de sa caverne. Ce n'est en tout cas pas demain que je vais acheter une abstraction ! Autant essayer de vendre un frigo à un Inuit qui n'a pas l'électricité.
-- Patrick. http://patrick.davalan.free.fr/
Jean-Marc Bourguet
"Jean-Marc" writes:
attention aussi quand on développe pour cretaines personnes. Les banques par exemple nous font jurer sur l'honneur que tout notre code est propriétaire et nous imposent de ne pas utiliser de bibliothèques openSource. Par exemple, impossible d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.
Les contraintes contractuelles sont encore une autre chose. Si elles sont stupides tant pis pour celui qui les impose.
Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des crash inexplicables de LibXML (justement) sous Solaris alors que le même programme avec les mêmes données de test en entrée fonctionnait sans problèmes sous Windows et AIX.
Ce genre de problemes se trouve partout, dans le proprietaire comme dans le libre. Vu que libXML doit faire du traitement de characteres, une idee comme ca: char est signe sous Solaris et non signe sous AIX. Est-ce que par hasard il serait aussi non signe sous Windows et que libXML se sert de char pour indexer des tableaux?
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
attention aussi quand on développe pour cretaines personnes.
Les banques par exemple nous font jurer sur l'honneur que tout
notre code est propriétaire et nous imposent de ne pas
utiliser de bibliothèques openSource. Par exemple, impossible
d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.
Les contraintes contractuelles sont encore une autre chose. Si elles
sont stupides tant pis pour celui qui les impose.
Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des
crash inexplicables de LibXML (justement) sous Solaris alors que le
même programme avec les mêmes données de test en entrée fonctionnait
sans problèmes sous Windows et AIX.
Ce genre de problemes se trouve partout, dans le proprietaire comme
dans le libre. Vu que libXML doit faire du traitement de characteres,
une idee comme ca: char est signe sous Solaris et non signe sous AIX.
Est-ce que par hasard il serait aussi non signe sous Windows et que
libXML se sert de char pour indexer des tableaux?
A+
--
Jean-Marc
FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc
Site de usenet-fr: http://www.usenet-fr.news.eu.org
attention aussi quand on développe pour cretaines personnes. Les banques par exemple nous font jurer sur l'honneur que tout notre code est propriétaire et nous imposent de ne pas utiliser de bibliothèques openSource. Par exemple, impossible d'utiliser LibXML. Nous avons du redévelooper GetTag, SetTag etc.
Les contraintes contractuelles sont encore une autre chose. Si elles sont stupides tant pis pour celui qui les impose.
Attention aussi aux bibliothèques OpenSource. Exemple: j'ai eu des crash inexplicables de LibXML (justement) sous Solaris alors que le même programme avec les mêmes données de test en entrée fonctionnait sans problèmes sous Windows et AIX.
Ce genre de problemes se trouve partout, dans le proprietaire comme dans le libre. Vu que libXML doit faire du traitement de characteres, une idee comme ca: char est signe sous Solaris et non signe sous AIX. Est-ce que par hasard il serait aussi non signe sous Windows et que libXML se sert de char pour indexer des tableaux?
A+
-- Jean-Marc FAQ de fclc: http://www.isty-info.uvsq.fr/~rumeau/fclc Site de usenet-fr: http://www.usenet-fr.news.eu.org
Antoine Leca
En <news:427fa907$0$3106$, Harpo va escriure:
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un mauvais argument,
Définit « gros », s'il te plaît.
iconv()/libiconv est souvent une seule fonction; le fait que le binaire soit gros provient des nombreuses tables embarquées (et avec les objects dynamiques, certains s'ingénient à en rajouter toujours plus, au motif que cela peut toujours servir à quelqu'un).
À l'opposé, la bibliothèque standard est une grosse bibliothèque probablement à tous les points de vue. Mais il est difficile de résister à son utilisation.
surtout si on n'y est pas linké statiquement.
Que veux-tu dire ?
C'est aussi très instructif de voir la manière dont d'autres ont résolu des problèmes.
Oui, si tu as le temps de l'étudier.
Antoine
En <news:427fa907$0$3106$8fcfb975@news.wanadoo.fr>, Harpo va escriure:
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un
mauvais argument,
Définit « gros », s'il te plaît.
iconv()/libiconv est souvent une seule fonction; le fait que le binaire soit
gros provient des nombreuses tables embarquées (et avec les objects
dynamiques, certains s'ingénient à en rajouter toujours plus, au motif que
cela peut toujours servir à quelqu'un).
À l'opposé, la bibliothèque standard est une grosse bibliothèque
probablement à tous les points de vue. Mais il est difficile de résister à
son utilisation.
surtout si on n'y est pas linké statiquement.
Que veux-tu dire ?
C'est aussi très instructif de voir la manière dont d'autres ont
résolu des problèmes.
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un mauvais argument,
Définit « gros », s'il te plaît.
iconv()/libiconv est souvent une seule fonction; le fait que le binaire soit gros provient des nombreuses tables embarquées (et avec les objects dynamiques, certains s'ingénient à en rajouter toujours plus, au motif que cela peut toujours servir à quelqu'un).
À l'opposé, la bibliothèque standard est une grosse bibliothèque probablement à tous les points de vue. Mais il est difficile de résister à son utilisation.
surtout si on n'y est pas linké statiquement.
Que veux-tu dire ?
C'est aussi très instructif de voir la manière dont d'autres ont résolu des problèmes.
Oui, si tu as le temps de l'étudier.
Antoine
Harpo
Antoine Leca wrote:
En <news:427fa907$0$3106$, Harpo va escriure:
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un mauvais argument,
Définit « gros », s'il te plaît.
La grosseur est une notion relative, je suis un peu moins gros que Carlos mais plus que je ne l'ai été. Et en hiver c'est pire.
iconv()/libiconv est souvent une seule fonction; le fait que le binaire soit gros provient des nombreuses tables embarquées (et avec les objects dynamiques, certains s'ingénient à en rajouter toujours plus, au motif que cela peut toujours servir à quelqu'un).
Merci pour cette information, elle pourra se révéler précieuse.
À l'opposé, la bibliothèque standard est une grosse bibliothèque probablement à tous les points de vue. Mais il est difficile de résister à son utilisation.
surtout si on n'y est pas linké statiquement.
Que veux-tu dire ?
Rien d'extraordinaire. Un programme linké statiquement occupe sur un support la place des fichiers objets avec lequel il est linké, il peut être dommage d'occuper 1 MB juste pour scanner un URI, ce qui peut se faire en 100 fois moins de place, enfin au pif.
C'est aussi très instructif de voir la manière dont d'autres ont résolu des problèmes.
Oui, si tu as le temps de l'étudier.
C'est une question de stratégie. Il faut différencier le script qui doit tourner pour midi (et qui aura le sort de ce qui se trouve sur /tmp) et une application qui demande des semaines, des mois voire des années. Pour ma part, je pense qu'un programme est quasiment terminé lorsqu'il ne reste plus qu'à l'écrire.
-- Patrick. http://patrick.davalan.free.fr/
Antoine Leca wrote:
En <news:427fa907$0$3106$8fcfb975@news.wanadoo.fr>, Harpo va escriure:
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un
mauvais argument,
Définit « gros », s'il te plaît.
La grosseur est une notion relative, je suis un peu moins gros que
Carlos mais plus que je ne l'ai été. Et en hiver c'est pire.
iconv()/libiconv est souvent une seule fonction; le fait que le
binaire soit gros provient des nombreuses tables embarquées (et avec
les objects dynamiques, certains s'ingénient à en rajouter toujours
plus, au motif que cela peut toujours servir à quelqu'un).
Merci pour cette information, elle pourra se révéler précieuse.
À l'opposé, la bibliothèque standard est une grosse bibliothèque
probablement à tous les points de vue. Mais il est difficile de
résister à son utilisation.
surtout si on n'y est pas linké statiquement.
Que veux-tu dire ?
Rien d'extraordinaire. Un programme linké statiquement occupe sur un
support la place des fichiers objets avec lequel il est linké, il peut
être dommage d'occuper 1 MB juste pour scanner un URI, ce qui peut se
faire en 100 fois moins de place, enfin au pif.
C'est aussi très instructif de voir la manière dont d'autres ont
résolu des problèmes.
Oui, si tu as le temps de l'étudier.
C'est une question de stratégie.
Il faut différencier le script qui doit tourner pour midi (et qui aura
le sort de ce qui se trouve sur /tmp) et une application qui demande
des semaines, des mois voire des années. Pour ma part, je pense qu'un
programme est quasiment terminé lorsqu'il ne reste plus qu'à l'écrire.
Sinon, le fait d'utiliser une grosse bibliothèque est typiquement un mauvais argument,
Définit « gros », s'il te plaît.
La grosseur est une notion relative, je suis un peu moins gros que Carlos mais plus que je ne l'ai été. Et en hiver c'est pire.
iconv()/libiconv est souvent une seule fonction; le fait que le binaire soit gros provient des nombreuses tables embarquées (et avec les objects dynamiques, certains s'ingénient à en rajouter toujours plus, au motif que cela peut toujours servir à quelqu'un).
Merci pour cette information, elle pourra se révéler précieuse.
À l'opposé, la bibliothèque standard est une grosse bibliothèque probablement à tous les points de vue. Mais il est difficile de résister à son utilisation.
surtout si on n'y est pas linké statiquement.
Que veux-tu dire ?
Rien d'extraordinaire. Un programme linké statiquement occupe sur un support la place des fichiers objets avec lequel il est linké, il peut être dommage d'occuper 1 MB juste pour scanner un URI, ce qui peut se faire en 100 fois moins de place, enfin au pif.
C'est aussi très instructif de voir la manière dont d'autres ont résolu des problèmes.
Oui, si tu as le temps de l'étudier.
C'est une question de stratégie. Il faut différencier le script qui doit tourner pour midi (et qui aura le sort de ce qui se trouve sur /tmp) et une application qui demande des semaines, des mois voire des années. Pour ma part, je pense qu'un programme est quasiment terminé lorsqu'il ne reste plus qu'à l'écrire.
-- Patrick. http://patrick.davalan.free.fr/
Charlie Gordon
"Julien" wrote in message news:
bonjour
je cherche à convertir un texte du type "fran%C3%A7ais" vers "français", pour cela j'ai trouver un bout de code qui semble faire ce que j'ai besoin mais je n'arrive pas à le faire fonctionner (je debute)
Je ne vois pas de probleme dans le code ci-dessous, bien que la sémantique ne soit pas très claire : Je suppose que inlen est le nombre de bytes à convertir en entrée, et reçoit en sortie le nombre qui ont été effectivement convertis, sauf en cas d'erreur.
En revanche la question me semble mal posée : "fran%C3%A7ais" ne contient pas de caractères non ASCII, elle a été encodée comme une URL ou les caractères non compris dans le jeu de base sont remplacés par leur conversion par %02d .
Serait-ce là ton problème ?
Chqrlie.
int UTF8Toisolat1(unsigned char* out, int outlen, unsigned char* in, int *inlen)
/* a two byte utf-8 and can be encoding as isolate1 */ *out++= ((c & 0x03) << 6) | (*in++ & 0x3F); } else return -2; /* TODO : some should be represent as "&#x____;" */ } return out-outstart; }
est-ce que quelqu'un pourrait m'aider ?
"Julien" <novalid@nospam.nospam> wrote in message
news:t6es71tpj1ha51tor1h492bf2el11e1ald@4ax.com...
bonjour
je cherche à convertir un texte du type "fran%C3%A7ais" vers
"français", pour cela j'ai trouver un bout de code qui semble faire ce
que j'ai besoin mais je n'arrive pas à le faire fonctionner (je
debute)
Je ne vois pas de probleme dans le code ci-dessous, bien que la sémantique ne
soit pas très claire : Je suppose que inlen est le nombre de bytes à convertir
en entrée, et reçoit en sortie le nombre qui ont été effectivement convertis,
sauf en cas d'erreur.
En revanche la question me semble mal posée : "fran%C3%A7ais" ne contient pas de
caractères non ASCII, elle a été encodée comme une URL ou les caractères non
compris dans le jeu de base sont remplacés par leur conversion par %02d .
Serait-ce là ton problème ?
Chqrlie.
int
UTF8Toisolat1(unsigned char* out, int outlen, unsigned char* in, int
*inlen)
/* a two byte utf-8 and can be encoding as isolate1 */
*out++= ((c & 0x03) << 6) | (*in++ & 0x3F);
}
else return -2;
/* TODO : some should be represent as "&#x____;" */
}
return out-outstart;
}
je cherche à convertir un texte du type "fran%C3%A7ais" vers "français", pour cela j'ai trouver un bout de code qui semble faire ce que j'ai besoin mais je n'arrive pas à le faire fonctionner (je debute)
Je ne vois pas de probleme dans le code ci-dessous, bien que la sémantique ne soit pas très claire : Je suppose que inlen est le nombre de bytes à convertir en entrée, et reçoit en sortie le nombre qui ont été effectivement convertis, sauf en cas d'erreur.
En revanche la question me semble mal posée : "fran%C3%A7ais" ne contient pas de caractères non ASCII, elle a été encodée comme une URL ou les caractères non compris dans le jeu de base sont remplacés par leur conversion par %02d .
Serait-ce là ton problème ?
Chqrlie.
int UTF8Toisolat1(unsigned char* out, int outlen, unsigned char* in, int *inlen)
/* a two byte utf-8 and can be encoding as isolate1 */ *out++= ((c & 0x03) << 6) | (*in++ & 0x3F); } else return -2; /* TODO : some should be represent as "&#x____;" */ } return out-outstart; }