Format Page

 

 

Dette projekt er inspireret af den obligatoriske opgave, jeg skulle løse på første år af datalogi-studiet (DAT1), tilbage i 1985/86.

Der skal laves en simpel applikation der kan formatere tekst, så det ser "pænt ud". Hvad det vil sige, uddybes i det følgende.

 

Formateringskoder

Input er givet som en tekstfile (UTF-8), der indeholder den tekst der skal formateres, samt en række formateringskoder der beskriver hvordan teksten skal formateres. Alle formateringskoder består af et ord i tuborg-paranteser. Det antages at denne type paranteser ikke optræder i den tekst der skal formateres, og disse derfor entydigt angiver, at der er tale om formateringskoder. Koderne kan inddeles i to grupper:

 

Margin

Kode Betydning
{center} Centrerer den efterfølgende tekst på linien
{left} Venstrestiller den efterfølgende tekst på linien
{right} Højrestiller den efterfølgende tekst på linien
{align} Formaterer den efterfølgende tekst med lige højremargin
Ved {center} kan man antage at den efterfølgende tekst ikke vil overstige bredden på siden. Ved {align} skal den sidste linie i en række af linier venstrestilles - mao. før et linieskift.
Centrering af tekst, højrestilling af tekst eller en lige højremargin, opnås ved at indsætte mellemrum i linien. Al tekst formateres ud fra den betragtning, at den vises med en mono spaced font (dvs. en font; hvor alle bogstaver har samme bredde).

 

Linieskift

Kode Betydning
{newline} Der laves et linieskift
{paragraph} Afslutter den igangværende linie, og laver en indrykining på tre tegn i næste linie

 

 

 

Eksempel

Antag at der er givet følgende input:

{center}
DET BRITISKE RIGE
{newline}

{align}
{paragraph}
18de Oktober 1865 døde Lord Palmerston. Det liberale Ministerium, hvis Chef han var, havde ved Valget den foregaaende Juli faaet sit Folketingsflertal forøget med ca. 25 Kandidater. De liberale havde, med en mindre Afbrydelse, siddet ved Roret siden 1855. Tilsyneladende medførte Førsteministerens Død ingen større politisk Forandring. Hans Plads overtoges af den anden gamle liberale Stormand, Lord John Russell. Ministeriets største Kraft, William Gladstone, vedblev at være Finansminister; desuden overtog han Ledelsen af Folketinget.

{paragraph}
Alligevel betegner Palmerston's Forsvinden fra det politiske Liv et Tidsskifte i England.

Så skal output være følgende (her vist med mono spaced font)
                               DET BRITISKE RIGE
		
   18de  Oktober  1865 døde Lord Palmerston. Det liberale Ministerium, hvis Chef
han  var,  havde  ved  Valget  den  foregaaende Juli faaet sit Folketingsflertal
forøget  med  ca.  25  Kandidater.  De liberale havde, med en mindre Afbrydelse,
siddet ved Roret siden 1855. Tilsyneladende medførte Førsteministerens Død ingen
større  politisk  Forandring.  Hans  Plads overtoges af den anden gamle liberale
Stormand,  Lord  John  Russell.  Ministeriets  største Kraft, William Gladstone,
vedblev at være Finansminister; desuden overtog han Ledelsen af Folketinget.
   Alligevel   betegner   Palmerston's  Forsvinden  fra  det  politiske  Liv  et
Tidsskifte i England.

 

Start-projekt

Der er lavet et startprojekt i Java, henholdvis C#, som danner udgangspunkt for løsning af opgaven, idet man selv kan vælge om opgaven skal løses i Java eller C#.
I dette projekt arbejdes der videre fra metoden formatPage i klassen: Main. (tilsvarende metoden FormatPage, i klassen Program, i C#-udgaven).
Filen: 'Det Britiske Rige.txt', placeres i roden af C-drevet (den anvendes af startprojektet som testfile). Filen indeholder en længere udgave af ovenstående eksempel. Der er også to jpg-filer, der viser s.6-9 fra "Hovedtræk af Verdenshistorien fra 1866 til vore dage", H. Aschenhoug & Co., 1922. — så man kan se hvor teksten stammer fra.
Lav selv en test af de formateringskoder der ikke anvendes i denne fil.

 

Hints

Gennemløb array'et af tokens, idet der hele tiden opbygges en linie i en StringBuffer (StringBuilder i C#-udgaven). Hver gang der ikke er mere plads i StringBuffer'en formateres linien og den føjes til output'et, som man opbygger i result-StringBuffer'en.
Lav en række metoder der tager en StringBuffer som parameter (sammen med width), og returerer en string, der er formateringen af den linie, der var i StringBuffer'en. Lave en for hver af de fire måder hvorpå en linie kan formateres.

 

Filer

Det Britiske Rige.txt
Side 6-7 (jpg)
Side 8-9 (jpg)

Start-projekt (Java)
Vejledende løsning (Java)

Start-projekt (C#)
Vejledende løsning (C#)