Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [REQ] Konwersja formatowania RTF -> HTML
Konnekt | Forum > Developerzy > Tworzenie wtyczek
hao
Poszukiwany / Poszukiwana chętny(a) do napisania _szybkiego_ kodu konwertującego zawartość standardowej kontrolki RichEdit na kod HTML. Napisane w C/C++, czyste WinAPI... W nagrodę gloria i chwała, oraz znacznie szybsze ukazanie się nowej wersji kIEview!

RichEdit posiada możliwość szybkiego wyciągania zawartości w formacie RTF, więc może być też po prostu konwerter RTF->HTML ...

Najlepiej w postaci funkcji
CODE
std::string rtfToHtml(HWND hwnd);
skolima
Jak rozumiem trzymać powinien się JEPów, czyli żadnych <b> czy <font size=... Całe formatowanie oparte na <span style="..."> i poprawny xhtml. Czy się może mylę?

Właśnie spytałem google, o o tym sądzą. Odpowiedź brzmi 250-350$ za gotowy komponent. Czy ci ludzie [---] całkowicie?
Olórin
Najlepiej wygląda to smile.gif))
http://www.gnu.org/software/unrtf/unrtf.html#TOCdownloading
Ten zdaje sie zamieniać znaki specjalne na encje, no i w źródełku tagi html można łatwo będzie zmienić na "poprawne" (plik html.c)


Pare innych linków
http://www.math.utah.edu/~beebe/support/rtf2html/rtf2html.c
http://www.w3.org/Tools/HTMLGeneration/rtf2html.html
http://prdownloads.sourceforge.net/back-en...?use_mirror=ovh
hao
Generalnie zamiast span - b, i, u, font byłyby bardziej wskazane... Po prostu GG.dll tylko takie obsługuje smile.gif
Olórin
Ale JEP-0071 przewiduje jedynie takie znaczniki: http://www.jabber.org/jeps/jep-0071.html#def-text
skolima
Czyli krótka piłka : potrzebne są obie wersje tongue.gif
riddle
Z punktu widzenia poprawnosci <b> i <i> - mogą one byc, bo zwykle chcemy cos podkreslic i pogrubic a nie zaakcentowac waznosc... przynajmniej jesli chodzi o IM to liczy sie tylko wyglad. Błędem jest mówić, że w XHTML nalezy tylko strong i em uzywac, aczkolwiek (i to slowo moglo by zostac potraktowane strongiem) bylo by milo gdyby byly uzyte.

(Zdaje sobie sprawe, ze malo co pomagam takim postem, tylko chcialem zauwazyc ze czasem po prostu z tymi standardami nie nalezy przesadzac - znacznik font moze (zwlaszcza w IM) byc uzyty, bo nie wystepuje on 200x dla kazdego paragrafu i nie robi z wiadomosci tag-zupy)
Olórin
No ale jednak twórcy XHTML-IM nie przewidzieli b,i,u czy font, pasowałoby więc się dostosować smile.gif
hao
OK, więc ustalmy że niech będzie przez <span> ... Właśnie modyfikuję gg.dll i przy okazji przeniosę go na Stamina.lib
KoSiarzPL
Przysiadlem dzisiaj na jakies 6 godzin i wymyslilem to co jest w zalaczniku. Do poprawki jest jeszcze ley ukosnik i reagowanie na zamkniety "tag". To pojdzie raz dwa.
Troszke gorzej jest z wybranym kolorem i nazwa czcionki ale da sie to tez w miare szybko zrobic.

Problem jest tylko w tym ze jest to napisane w c#.

Zrobcie mozliwosc dodawania zalacznikow z rozszezeniem "ace".

[Edit]
usunalem zalacznik.
Olórin
Sądze że z C# powino sie dać do C++ przerobić dość prosto smile.gif)) Ale narazie to działa tak średnio.... patrz: załącznik (ucięło znaczną część treści)

OT: Lepiej dodawaj .zip smile.gif za używanie rar mi sie kiedys tu dostało tongue.gif

Załączniki

KoSiarzPL
W koncu siedzialem nad tym tylko 6h i wiem ze sporo jeszcze zostalo do zrobienia smile.gif Na razie dziala to tak ze zaklada iz jedna linijka jest pisana tym samym stylem. Wpisz kilka linijek i dla kazdej zmien styl i zobaczysz ze juz prawie dobrze dziala smile.gif (nie wylancza tylko wczesniej wlaczonych atrybutow ale to dzisiaj chyba zrobie)
KoSiarzPL
Ok prawie gotowy juz konwertor, jeszcze pozostalo tylko uwzglednic kroj czcionki i pewnie dalej lewy ukosnik szwankuje ale to zrobie pewnie wieczorem.
Olórin
No teraz to wypas biggrin.gif

Aha, konwertuj bold nie do ogólnego font, a do font-weight:bold;, tak samo italic (do font-style) smile.gif A jeżeli coś jest nie ustawione to najlepiej wogóle pominąć smile.gif)
KoSiarzPL
musi tak byc bo by sie zamotalo z zaginezdzaniem. Trzeba by bylo kombinowac a tak dla kazdej zmiany czcionki jest tworzony nowy font i nie ma problemu. Jak juz pozniej bedzie wszystko dzialac bedzie mozna zastanowic sie nad jakims pakowaniem tych danych formatujacych, by sie nie powtarzaly. Np. wyniesc color czcionki do oddzielnego "style".

[Edit]
Ostateczna werjsa juz jest gotowa jeszce tylko kosmetyczne zmiany.
KoSiarzPL
Ok to chyba ostateczna wersja, potestujcie i zobaczcie czy wszystko gra.

[Edit]
zalacznik usuniety
skolima
Jeden myk :

<span style="font-family: Microsoft Sans Seri, sans-serif;"> -> z nazwy czcionki łyknięte końcowe f.
Olórin
I nazwa czcionki powinna być w cudzysłowu.... (szczególnie przy wielowyrazowych nazwach).
KoSiarzPL
Fakt zapomnialem o cudzyslowiach. Blad z ucieta nazwa fontu tez poprawiony. Przy okazji pocwiczylem sobie tworzenie ruchomych suwakow w oknie hehe.

Nowa wersja:

[edit]
zalacznik usuniety
hao
Przydałoby się jeszcze sam kod konwertujący mieć w C++ :]

No i ograniczyć ilość styli w spanie przez zagnieżdżanie...
Olórin
Korsiarz - zamieść kod źródłowy w załączniku, spróbujemy przerobić do C++ smile.gif
KoSiarzPL
QUOTE(hao @ 20.06.2005 - 11:20)
No i ograniczyć ilość styli w spanie przez zagnieżdżanie...

Powiem tak, jesli tekst po konwersji ma byc uzywany tylko do wyswietlania w kieview to upraszczanie skladni na razie mozna odlozyc na pozniej i zajac sie czyms istotniejszym. Jesli zas ten tekst ma byc wysylany przez siec to faktycznie moze byc to potrzebne do ograniczenia transferu. Zauwazcie jednak ze nikt nie uzywa w jednej wiadomosci wiecej niz dwoch styli, wiec tych "<span>" nie bedzie wcale tak duzo. Nie robilem wiekszych optymalizacji bo nie wiedzialem do czego to ma dokladnie sluzyc smile.gif
Zagniezdzanie moglbym pewnie zrobic w dzien, gora dwa.

QUOTE(Olórin)
Korsiarz - zamieść kod źródłowy w załączniku, spróbujemy przerobić do C++

Oczywiscie, opatrze tylko kod potrzebnymi komentarzami i moze pozbede sie z jednej, dwoch nadmiarowych zmiennych. Staralem sie nie uzywac niczego co moglo by byc scisle zwiazane z C# wiec sama konwersja nie powinna sprawiac problemow. Moglbym nawet sam to zrobic ale zajme sie chyba czyms nowym, co najwyzej chetnie zobacze kod w C++ i przeanalizuje.
KoSiarzPL
Tak wiec w zalaczniku jest nowa wersja programu jak i kod zrodlowy (niewielkie zmiany, mam nadzieje ze nic sie nie popsulo bo nie testowalem, na 99,999% nic sie nie zmienilo w dzialaniu).
Da sie to wszystko jeszcze przyspieszyc kosztem czytelnosci kodu. Miejscem gdzie nalezy szukac przyspieszenia jest zmniejszenie ilosci tworzonych obiektow klasy string. Kazda, najmniejsza modyfikacja obiektu string, tworzy nowy obiekt zamias go modyfikowac.

[edit]
zalacznik usuniety
Ryan
Underline nigdy nie jest zamykany (każdy tag po tagu z underline jest underline). Rozwiązanie:
zamienić:
CODE

if (fraza == "ul")
{
underline = true;
}

na:
CODE

if (fraza == "ul")
{
underline = true;
}
else if (fraza == "ulnone")
{
underline = false;
}
KoSiarzPL
Ups nie wiem kiedy ta linijka sie usunela. Zaraz wrzuce poprawiona wersje. Aha no i jak, mam przerabiac to c++ czy ktos sie tym zajmie, bo nie dostaje zadnych informacji od hao ktory poprosil o pomoc.
hao
Obserwuje temat wink.gif Poza doczącą się tutaj dyskusją nie ma żadnych zakulisowych rozgrywek, więc jeżeli nikt nie zgłosił się tutaj na chętnego i czujesz się na siłach to bylibyśmy wdzięczni smile.gif
KoSiarzPL
Ok przerobilem kod na C++. Nie gwarantuje ze on dziala poniewaz nie przeprowadzalem ZADNYCH testow.

[edit]
zalacznik usuniety
Olórin
Dołącz wszystkie pliki projektu (*.rc, *.h,*.sln,*.vcproj,...) bo nie można skompilować smile.gif
arct!c
teraz pozostaje nam tylko czekac na kIEview - dlugo to zajmie ?smile.gif
KoSiarzPL
Ok tak wiez wrzucal caly projekt w Cpp jak rowniez C# z naniesiona poprawka na "ulnone".
hao
Trzeba by teraz zrobić zestaw testów na różnych danych wejściowych...

Bardzo dobrze mi się robi na CPPUnit... Szybko prosto i ładnie i z linii poleceń. Po każdej zmianie w kodzie uruchamiasz taki projekt i szybko namierzasz problemy...

Będzie o tym dzisiaj/jutro na moim blogu wink.gif
nix
QUOTE(hao @ 13.06.2005 - 19:38)
Generalnie zamiast span - b, i, u, font byłyby bardziej wskazane... Po prostu GG.dll tylko takie obsługuje smile.gif
*
QUOTE(hao @ 14.06.2005 - 11:16)
OK, więc ustalmy że niech będzie przez <span> ... Właśnie modyfikuję gg.dll i przy okazji przeniosę go na Stamina.lib
*

wiec w jakim formacie ma byc?
CODE
<b><i><u><font color="#...">
czy
CODE
<span style="font-weight: bold; font-style: italic; text-decoration: underline; color: #ff0000;">

napisalem swoja klase konwertujaca (dziala w obu trybach), nie podobal mi sie kod ktory byl umieszczony w tym watku (sorry)

w gg.dll dziala <span> czy nie? lepiej wysylac w <span> czy <b> itd?
hao
W gg.dll działa b i u. Wg specyfikacji Jabbera bodajże powinno się wysyłać span? W razie czego mogę dodać to do gg.dll...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2012 Invision Power Services, Inc.