Kódrészlet a levlistából, avagy text – html konverzió

Az elmúlt hosszú hétvége szabad perceit leginkább a levlista archívum kódjainak reszelésével töltöttem. Azt hiszem most már kezd valahogy kinézni (persze ez még korántsem jó, millió dolog hiányzik, de már használható). Ennek kapcsán egy érdekes dologba futottam bele. Meg kell jeleníteni a text formátumú levelek levéltörzsét, a formázás megtartásával. Ez eredetileg egy egyszerű feladatnak tűnt, hiszen a html tud egy olyat, hogy egy <pre> tag-be beöntöm a formázott text-et és azt megjeleníti az eredeti formázás megtartásával. Arra kell mindösszesen figyelni, hogy a szövegben ne maradjanak html tag-ek, spec. spec karakterek. A szükséges konverziót ugyanakkor ASP-ben (ja, még nem is mondtam, ASP-ben írogatom a dolgot) a Server.HTMLEncode metódus el is végzi.
Meg is írtam a kódot a fentiekből, hátradőltem, majd rájöttem, hogy ez így sehogy sem lesz jó. A gond az, hogy a be nem tördelt szövegek vízszintesen kilógnak az ablakból és lapozni kell.
El kezdtem keresegélni. Ráment egy-két órám, hogy rájöjjek, sehogy sem tudom a <pre> tag-et rávenni, hogy a beépített nowrap működéséről szokjon le.
Keresgéltem még más megoldásokat is, de nem jutottam semmire. Így kénytelen-kelletlen írtam egy saját szövegformázót.
Íme:
function Text2HTML(text,tabstop)
{
    var retvalue,i,j,k;
    retvalue = "";
    j=1;
    for(i=0;i<text.length;i++)
    {
        switch(text.charCodeAt(i))
        {
            case 0x3C:  // <
                retvalue += "&lt;";
                break;
            case 0x3E:  // >
                retvalue += "&gt;";
                break;
            case 0x26:  // &
                retvalue += "&amp;";
                break;
            case 0x22:  // "
                retvalue += "&quot;";
                break;
            case 0x0D:  // CR
                if(text.charCodeAt(i+1) == 0x0A) i++;
                retvalue += "<br>";
                j=0;
                break;
            case 0x0A:  // LF
                if(text.charCodeAt(i+1) == 0x0A) i++;
                retvalue += "<br>";
                j=0;
                break;
            case 0x20:  // Space
                if((text.charCodeAt(i+1) == 0x20) || (text.charCodeAt(i+1) == 0x09))
                    retvalue += "&nbsp;";
                else
                    retvalue += " ";
                break;
            case 0x09:  // Tab
                for(k=0;k<((tabstop-1)-(j%tabstop));k++)
                    retvalue += "&nbsp;";
                if((text.charCodeAt(i+1) == 0x20) || (text.charCodeAt(i+1) == 0x09))
                    retvalue += "&nbsp;";
                else
                    retvalue += " ";
                break;
            default:
                if(text.charCodeAt(i) >= 0x80)
                    retvalue += "&#" + text.charCodeAt(i).toString() + ";";
                else
                    retvalue += text.charAt(i);
                break;
        }
        j++;
    }
    return retvalue;
}
 
 
 
 
 
Kategória: Computers and Internet | Közvetlen link a könyvjelzőhöz.

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s