Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [Prog] text-naar-html-prog (https://forum.scholieren.com/showthread.php?t=1156311)

dragonstorm 15-04-2005 19:44

text-naar-html-prog
 
ik heb een miniprog geschreven dat een text naar html converteert

het ondersteund *geen* formatting, en ik ben de laatste om te beweren dat 'm perfect is, maar hij werkt wel :)
k ben van plan meer features toe te voegen

hij is geschreven in C

het staat op
html_maker.c

je hebt de volgende file nodig om de zooi te compileren:
parser.h


waarom ik dit hier post...
niet om te horen dat 'm zo geweldig is iig, want dat is 'm niet :)

eerder zodat andere mense t in konden zien, en verbeteringen/bugs opnoemen, zodat k er ook nog wat van kan leren :)

licensie? doe maar iets van GPL ofzo :)

freyk 15-04-2005 19:48

ik wil het best wel voor je testen,..maar zou je hem dan ff zelf willen compileren?

dragonstorm 15-04-2005 20:33

nee :)
ik wil mss wel over m'n hart strijken en linux-x86 binary maken, maar een windows binary is me teveel werk :)
(hier kom ik mss nog wel op terug)

installeer
a): een OS dat *wel* met een c compiler komt :)
b): een C compiler en/of IDE, zoals dev c++ .

voor de grappenmakers die t willen testen:
(binary file) < (input file) > (output file)

bvb.
a.out < command.txt > command.html

dit is de simpelste I/O die je kunt krijgen, maar ik weet eigenlijk niet hoe een fatsoenlijke file I/O op te zetten :) hulp daarmee is gewaardeerd

en ja, ik weet dat je main een aantal argumenten mee kunt geven, die je als file pointers kunt gebruiken, maar ik heb hier alleen maar problemen mee gehad

edit:
linux x86 binary

gecompileerd tegen slackware 10.1, zou moeten werken op ieder redelijk modern systeem :)

Enlightenment 15-04-2005 21:22

Schattig. :)

dragonstorm 15-04-2005 22:52

toegevoegde feature!

hij ondersteund nu fatsoenlijk spaties!
ik weet het, want k heb t geprobeerd ;)

mvg
bart

eddie 16-04-2005 09:31

Citaat:

dragonstorm schreef op 15-04-2005 @ 20:33 :
nee :)
ik wil mss wel over m'n hart strijken en linux-x86 binary maken, maar een windows binary is me teveel werk :)
(hier kom ik mss nog wel op terug)

Fijn. Dan niet. Doei. :)

dragonstorm 16-04-2005 14:47

whatever.... :O


bugfix!
hij zou 'm eerst verkeerd parsen als je er 2 < achter elkaar zet, maar dat is bij deze gefixed

McMotion 16-04-2005 16:21

paar opmerkingen:

- goed dat je het opdeelt in allerlei functies enzo, maar dat is niet per definitie leesbaarder - als je hetzelfde kan doen in 10 regels code dan zou ik het gewoon in één functie zetten (y) ik vind je functies ook niet echt logisch
- probeer implementatiecode in je headerfiles te voorkomen
- gebruik geen nederlands en engels door elkaar voor je functies enzo :p
- ik denk dat je het in dit geval zonder dynamische geheugenallocatie afkan.. dat scheelt een hoop gedoe en kan een boel kutbugs voorkomen

dragonstorm 16-04-2005 17:19

ok, bedankt :)
Citaat:


- goed dat je het opdeelt in allerlei functies enzo, maar dat is niet per definitie leesbaarder - als je hetzelfde kan doen in 10 regels code dan zou ik het gewoon in één functie zetten (y) ik vind je functies ook niet echt logisch
De functie van de functies is tweeledig, enerzijds moeten ze de string naar de hulpstring copieren, en anderzijds moeten ze aangeven hoevel karakters erbij komen. Daarom is het wel enigzins handig om hiervoor een functie te hebben.
Maar je hebt gelijk, helemaal optimaal is het niet.

Citaat:


- ik denk dat je het in dit geval zonder dynamische geheugenallocatie afkan.. dat scheelt een hoop gedoe en kan een boel kutbugs voorkomen
Vreemd maar waar; dit is niet zo. Ik snap er zelf ook niets van - als ik in plaats van

Code:

d = calloc(a, sizeof(char));
Code:

char d[a];
zou zetten, dan zou dat dezelfde effect moeten opleveren, of niet? vreemd maar waar - dit is dus blijkbaar niet zo. Bij het parsen van 'n textfile (de betreffende C file, om precies te zijn) krijg ik allemaal rare errors na de functie newline. ik snap er eerlijk gezegd he-le-maal niets van :)

en nog iets. de code voor 'n tab is toch \t?

bedankt iig :)

edit:

toch een windows binary! :)
http://home.kabelfoon.nl/~bwiegm/test.exe

en: hoe maak ik in vredesnaam redelijk netjes een tab in dat ding :S... k zie nog wel :)

dragonstorm 16-04-2005 20:53

m'n eerste baby is nu officieel dood :)
en t is veel simpeler geworden:

Code:

#include <stdio.h>

void makehtml();

main()
{
      makehtml();     
}

void makehtml()
{
    char c,d = '\0';
    while ((c = getchar()) != EOF)
    {
          switch (c)
          {
                  case '>':
                      printf("&#62;");
                      break;
                  case '<':
                      printf("&#60;");
                      break;
                  case '\n':
                      printf("<br />");
                      break;
                  case ' ':
                      if (d == ' ')
                          printf("&nbsp;");
                      else
                          putchar(' ');
                      break;
                  default:
                          putchar(c);
          }
          d = c;
    }
}

in vergelijking met het origineel is dit veel korter :cool:

de reden dat t origineel zo ingewikkeld was, komt doordat ik eigenlijk een heel ander systeem in gedachten had :)

eddie 16-04-2005 22:20

gelukkig gebruik je wel duidelijke namen voor je variabelen zodat ook een ander weet waar ze voor staan...

Enniewees... ik zal die windows binary eens proberen.

dragonstorm 16-04-2005 23:56

Citaat:

eddie schreef op 16-04-2005 @ 22:20 :
gelukkig gebruik je wel duidelijke namen voor je variabelen zodat ook een ander weet waar ze voor staan...

Enniewees... ik zal die windows binary eens proberen.

gelukkig dat er ook zo verdomde veel variabelen gebruikt worden, dat zoiets hoofdzaak word :P

btw, de windows binary is achterhaald - de nieuwstee versie ondersteund tabs :) en de windows versie nog niet

McMotion 17-04-2005 00:19

Citaat:

dragonstorm schreef op 16-04-2005 @ 20:53 :
m'n eerste baby is nu officieel dood :)
en t is veel simpeler geworden:

Code:

#include <stdio.h>

void makehtml();

main()
{
      makehtml();     
}

void makehtml()
{
    char c,d = '\0';
    while ((c = getchar()) != EOF)
    {
          switch (c)
          {
                  case '>':
                      printf("&#62;");
                      break;
                  case '<':
                      printf("&#60;");
                      break;
                  case '\n':
                      printf("<br />");
                      break;
                  case ' ':
                      if (d == ' ')
                          printf("&nbsp;");
                      else
                          putchar(' ');
                      break;
                  default:
                          putchar(c);
          }
          d = c;
    }
}

in vergelijking met het origineel is dit veel korter :cool:

de reden dat t origineel zo ingewikkeld was, komt doordat ik eigenlijk een heel ander systeem in gedachten had :)

precies zoals ik in gedachten had.. geen dynamische geheugenallocatie :D(y) (dit werkt ook nog eens veel efficienter als je een textfile van 1 gig om wil zetten naar html.. niet dat dat snel zal gebeuren maar ok :p) onhandig trouwens dat dit forum niet bij het weergeven van posts niet al alle &'s door &amp; vervangt (n) nu lijkt het alsof je voor elke > weer een > wegschrijft ipv &amp;#62;

GVR 17-04-2005 13:06

Citaat:

eddie schreef op 16-04-2005 @ 22:20 :
gelukkig gebruik je wel duidelijke namen voor je variabelen zodat ook een ander weet waar ze voor staan...
Jup, c is de standaard letter voor char en d is een logisch gevolg.

dragonstorm 17-04-2005 16:22

Citaat:

McMotion schreef op 17-04-2005 @ 00:19 :
precies zoals ik in gedachten had.. geen dynamische geheugenallocatie :D(y) (dit werkt ook nog eens veel efficienter als je een textfile van 1 gig om wil zetten naar html.. niet dat dat snel zal gebeuren maar ok :p) onhandig trouwens dat dit forum niet bij het weergeven van posts niet al alle &'s door &amp; vervangt (n) nu lijkt het alsof je voor elke > weer een > wegschrijft ipv &amp;#62;
*grijnst*

de huidige versie ondersteunt dat iig wel :)
*en ook de laatste versie, voorlopig*

het enige wat ik een beetje jammer vind is dat op deze manier geen support voor formatting in te bouwen is op een relatief schone manier, en dat kon de andere versie weer wel :) maar never mind

McMotion 17-04-2005 19:30

hoe bedoel je?

dragonstorm 17-04-2005 19:48

voor het invoeren van opmaak, zul je html tags moeten maken

dus zullen er weer opmaaktags in het tekstbestand moeten staan,
zoals \b en \b0 in rtf, of in vbcode :)
omdat dit systeem maar 2 karakters heeft, word het domweg onmogelijk tags te herkennen zonder meer karakters toe te voegen, niet een goede manier. Met een al-dan-niet-dynamisch-gealloceerde array is dit veel makkelijker :)
maar van de andere kant, zo afgrijselijk belangrijk is dat ook niet :)

McMotion 17-04-2005 21:47

ja maar dan is het ook geen (plain)text data meer :) althans, zo interpreteer je het dan niet... en je kan best simpele tags interpreteren, bijvoorbeeld als je alle tags laat beginnen met een \, bijvoorbeeld \b voor bold, \u voor underline en \\ om een backslash mee aan te geven... dan loop je gewoon alle tekens door zoals je nu doet, en in het geval van een backslash lees je nóg een teken uit die je als speciale tag interpreteert... als je echt een rtf reader wil maken dan komt er véél meer bij kijken maar zelfs dan kan je het beste teken voor teken inlezen


Alle tijden zijn GMT +1. Het is nu 13:58.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.