\item[F9:] Report to the user or maintainer when a source has been changed
too much for successful crawling.
- This requirement was also present in the original requirements and hasn't
+ This requirement was also present in the original requirements and has not
changed. When the crawler fails to crawl a source, this can be due to any
reason, a message is sent to the people using the program so that they can
edit or remove the faulty crawler. This is a crucial component because the
\begin{figure}[H]
\label{appoverview}
\centering
- \scalebox{0.7}{
- \digraph[]{graph111}{
- rankdir=LR;
- node [shape="rectangle",fontsize=10,nodesep=0.7,ranksep=0.75,width=1];
- User -> System
- User -> Source
- System -> Crawler
- Crawler -> Source
- }
- }
+ \includegraphics[width=\linewidth]{appoverview.eps}
+ \strut\\
\caption{Overview of the application}
\end{figure}
+
\subsection{Frontend}
\subsubsection{General description}
The frontend is a web interface to the backend applications that allow the user
server periodically calls the XML output from the backend to process it.
\begin{figure}[H]
- \caption{The landing page of the frontend}
\label{frontendfront}
\includegraphics[scale=0.75,natheight=160,natwidth=657]{frontendfront.png}
+ \caption{The landing page of the frontend}
\end{figure}
\subsubsection{Edit/Remove crawler}
become highlighted and by doing this for several entries the program will have
enough information to crawl the feed as shown in Figure~\ref{addcrawl}
-\begin{figure}
- \label{addcrawl}
- \caption{Example of a pattern in the add crawler component}
+\begin{figure}[H]
+ \label{frontendfront}
+ \includegraphics[width=0.7\linewidth,natheight=1298,natwidth=584]{crawlerpattern.png}
+ \caption{A pattern selection of three entries}
\end{figure}
\subsubsection{Test crawler}
\section{Application overview}
+The backend consists of several processing steps before a crawler specification
+is ready.
+
+\begin{figure}[H]
+ \label{dawg1}
+ \centering
+ \includegraphics[width=\linewidth]{backend.eps}
+ \strut\\
+ \caption{Backend overview}
+\end{figure}
+
\section{Internals of the crawler generation module}
Data marked by the user is in principle just raw html data that contains a
table with for every RSS feed entry a table row. Within the html the code
-severel markers are placed to make the parsing more easy and removing the need
+several markers are placed to make the parsing more easy and removing the need
of an advanced HTML parser. When the user presses submit a http POST request is
prepared to send all the gathered data to the backend to get processed. The
sending does not happen asynchronously, so the user has to wait for the data to
thesis:
head -50 scheme.xsd > scheme1.xsd
tail -n +49 scheme.xsd > scheme2.xsd
+ dot -Teps appoverview.dot > appoverview.eps
+ dot -Teps backend.dot > backend.eps
latex -shell-escape thesis.tex > log.txt
bibtex thesis.aux >> log.txt
latex -shell-escape thesis.tex >> log.txt
clean:
- rm -vf *.{aux,bbl,blg,dvi,log,out,toc,dot,ps,pyg} log.txt scheme[12].xsd
+ rm -vf *.{aux,bbl,blg,dvi,log,out,toc,ps,pyg} log.txt scheme[12].xsd
clobber: clean
rm -vf *.pdf
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: %3
+%%Pages: 1
+%%BoundingBox: 36 36 641 154
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+ dup dup findfont dup length dict begin
+ { 1 index /FID ne { def }{ pop pop } ifelse
+ } forall
+ /Encoding EncodingVector def
+ currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+ dup 1 exch div /InvScaleFactor exch def
+ scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage { % i j npages
+ /npages exch def
+ /j exch def
+ /i exch def
+ /str 10 string def
+ npages 1 gt {
+ gsave
+ coordfont setfont
+ 0 0 moveto
+ (\() show i str cvs show (,) show j str cvs show (\)) show
+ grestore
+ } if
+} bind def
+
+/set_font {
+ findfont exch
+ scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext { % width text
+ /text exch def
+ /width exch def
+ gsave
+ width 0 gt {
+ [] 0 setdash
+ text stringwidth pop width exch sub text length div 0 text ashow
+ } if
+ grestore
+} def
+
+/boxprim { % xcorner ycorner xsize ysize
+ 4 2 roll
+ moveto
+ 2 copy
+ exch 0 rlineto
+ 0 exch rlineto
+ pop neg 0 rlineto
+ closepath
+} bind def
+
+/ellipse_path {
+ /ry exch def
+ /rx exch def
+ /y exch def
+ /x exch def
+ matrix currentmatrix
+ newpath
+ x y translate
+ rx ry scale
+ 0 0 1 0 360 arc
+ setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+ [ % layer color sequence - darkest to lightest
+ [0 0 0]
+ [.2 .8 .8]
+ [.4 .8 .8]
+ [.6 .8 .8]
+ [.8 .8 .8]
+ ]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+ layercolorseq curlayer 1 sub layerlen mod get
+ aload pop sethsbcolor
+ /nodecolor {nopcolor} def
+ /edgecolor {nopcolor} def
+ /graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+ /myupper exch def
+ /mylower exch def
+ curlayer mylower lt
+ curlayer myupper gt
+ or
+ {invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+ userdict (<<) cvn ([) cvn load put
+ userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 641 154
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 605 118 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% User
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+27 92 26.95 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+14 88.3 moveto 26 (User) alignedtext
+grestore
+% Frontend
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+132 92 42.37 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+107.5 88.3 moveto 49 (Frontend) alignedtext
+grestore
+% User->Frontend
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 54.48 92 moveto
+62.8 92 71.13 92 79.45 92 curveto
+stroke
+0 0 0 edgecolor
+newpath 79.61 95.5 moveto
+89.61 92 lineto
+79.61 88.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 79.61 95.5 moveto
+89.61 92 lineto
+79.61 88.5 lineto
+closepath stroke
+grestore
+% Backend
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+251 92 41.39 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+227 88.3 moveto 48 (Backend) alignedtext
+grestore
+% Frontend->Backend
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 174.3 92 moveto
+182.68 92 191.06 92 199.43 92 curveto
+stroke
+0 0 0 edgecolor
+newpath 199.65 95.5 moveto
+209.65 92 lineto
+199.65 88.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 199.65 95.5 moveto
+209.65 92 lineto
+199.65 88.5 lineto
+closepath stroke
+grestore
+% Crawler
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+425 92 38.49 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+403 88.3 moveto 44 (Crawler) alignedtext
+grestore
+% Backend->Crawler
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 292.68 92 moveto
+317.8 92 349.91 92 376.21 92 curveto
+stroke
+0 0 0 edgecolor
+newpath 376.34 95.5 moveto
+386.34 92 lineto
+376.34 88.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 376.34 95.5 moveto
+386.34 92 lineto
+376.34 88.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+301 98.8 moveto 76 (Crawler spec.) alignedtext
+grestore
+% Database
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+555 92 42.35 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+530 88.3 moveto 50 (Database) alignedtext
+grestore
+% Crawler->Database
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 463.65 92 moveto
+475.7 92 489.2 92 502.05 92 curveto
+stroke
+0 0 0 edgecolor
+newpath 502.18 95.5 moveto
+512.18 92 lineto
+502.18 88.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 502.18 95.5 moveto
+512.18 92 lineto
+502.18 88.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+472.05 98.8 moveto 31 (XML) alignedtext
+grestore
+% Source
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+425 18 35.15 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+406 14.3 moveto 38 (Source) alignedtext
+grestore
+% Crawler->Source
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 419.16 73.94 moveto
+418.28 65.6 418.04 55.36 418.44 46 curveto
+stroke
+0 0 0 edgecolor
+newpath 421.94 46.17 moveto
+419.17 35.94 lineto
+414.96 45.66 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 421.94 46.17 moveto
+419.17 35.94 lineto
+414.96 45.66 lineto
+closepath stroke
+grestore
+% Source->Frontend
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 394.05 26.51 moveto
+350.66 37.05 269.29 56.87 200 74 curveto
+192.61 75.83 184.77 77.78 177.14 79.68 curveto
+stroke
+0 0 0 edgecolor
+newpath 176.14 76.32 moveto
+167.28 82.14 lineto
+177.83 83.11 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 176.14 76.32 moveto
+167.28 82.14 lineto
+177.83 83.11 lineto
+closepath stroke
+grestore
+% Source->Crawler
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 430.83 35.94 moveto
+431.72 44.26 431.96 54.49 431.56 63.86 curveto
+stroke
+0 0 0 edgecolor
+newpath 428.07 63.71 moveto
+430.84 73.94 lineto
+435.05 64.21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 428.07 63.71 moveto
+430.84 73.94 lineto
+435.05 64.21 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
--- /dev/null
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.36.0 (20140111.2315)
+%%Title: %3
+%%Pages: 1
+%%BoundingBox: 36 36 914 152
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+ dup dup findfont dup length dict begin
+ { 1 index /FID ne { def }{ pop pop } ifelse
+ } forall
+ /Encoding EncodingVector def
+ currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+ dup 1 exch div /InvScaleFactor exch def
+ scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage { % i j npages
+ /npages exch def
+ /j exch def
+ /i exch def
+ /str 10 string def
+ npages 1 gt {
+ gsave
+ coordfont setfont
+ 0 0 moveto
+ (\() show i str cvs show (,) show j str cvs show (\)) show
+ grestore
+ } if
+} bind def
+
+/set_font {
+ findfont exch
+ scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext { % width text
+ /text exch def
+ /width exch def
+ gsave
+ width 0 gt {
+ [] 0 setdash
+ text stringwidth pop width exch sub text length div 0 text ashow
+ } if
+ grestore
+} def
+
+/boxprim { % xcorner ycorner xsize ysize
+ 4 2 roll
+ moveto
+ 2 copy
+ exch 0 rlineto
+ 0 exch rlineto
+ pop neg 0 rlineto
+ closepath
+} bind def
+
+/ellipse_path {
+ /ry exch def
+ /rx exch def
+ /y exch def
+ /x exch def
+ matrix currentmatrix
+ newpath
+ x y translate
+ rx ry scale
+ 0 0 1 0 360 arc
+ setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+ [ % layer color sequence - darkest to lightest
+ [0 0 0]
+ [.2 .8 .8]
+ [.4 .8 .8]
+ [.6 .8 .8]
+ [.8 .8 .8]
+ ]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+ layercolorseq curlayer 1 sub layerlen mod get
+ aload pop sethsbcolor
+ /nodecolor {nopcolor} def
+ /edgecolor {nopcolor} def
+ /graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+ /myupper exch def
+ /mylower exch def
+ curlayer mylower lt
+ curlayer myupper gt
+ or
+ {invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+ userdict (<<) cvn ([) cvn load put
+ userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 914 152
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 878 116 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% q0
+% HTML data
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+146 18 53.09 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+113 14.3 moveto 66 (HTML data) alignedtext
+grestore
+% q0->HTML data
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 54.26 18 moveto
+62.66 18 72.35 18 82.2 18 curveto
+stroke
+0 0 0 edgecolor
+newpath 82.48 21.5 moveto
+92.48 18 lineto
+82.48 14.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 82.48 21.5 moveto
+92.48 18 lineto
+82.48 14.5 lineto
+closepath stroke
+grestore
+% q1
+% Table rows
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+288 47 50.09 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+257.5 43.3 moveto 61 (Table rows) alignedtext
+grestore
+% HTML data->Table rows
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 192.07 27.34 moveto
+205.45 30.11 220.22 33.17 234.05 36.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 233.42 39.48 moveto
+243.92 38.08 lineto
+234.84 32.62 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 233.42 39.48 moveto
+243.92 38.08 lineto
+234.84 32.62 lineto
+closepath stroke
+grestore
+% Dictionary
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+730 44 48.19 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+701 40.3 moveto 58 (Dictionary) alignedtext
+grestore
+% HTML data->Dictionary
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 193.18 9.55 moveto
+220.39 5.28 255.54 1 287 1 curveto
+287 1 287 1 613 1 curveto
+641.75 1 672.16 12.76 694.62 23.98 curveto
+stroke
+0 0 0 edgecolor
+newpath 693.25 27.21 moveto
+703.73 28.72 lineto
+696.48 21 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 693.25 27.21 moveto
+703.73 28.72 lineto
+696.48 21 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+376.5 4.8 moveto 97 (Description fields) alignedtext
+grestore
+% Node lists
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+425 90 46.29 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+397.5 86.3 moveto 55 (Node lists) alignedtext
+grestore
+% Table rows->Node lists
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 326.25 58.86 moveto
+342.56 64.06 361.84 70.2 378.95 75.65 curveto
+stroke
+0 0 0 edgecolor
+newpath 378.14 79.07 moveto
+388.73 78.77 lineto
+380.27 72.4 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 378.14 79.07 moveto
+388.73 78.77 lineto
+380.27 72.4 lineto
+closepath stroke
+grestore
+% Table rows->Dictionary
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 338.19 46.66 moveto
+420.19 46.11 584.38 44.99 671.55 44.39 curveto
+stroke
+0 0 0 edgecolor
+newpath 671.81 47.89 moveto
+681.79 44.32 lineto
+671.77 40.89 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 671.81 47.89 moveto
+681.79 44.32 lineto
+671.77 40.89 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+492 48.8 moveto 70 (Original text) alignedtext
+grestore
+% Dawg
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+612 90 31.7 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+595.5 86.3 moveto 33 (Dawg) alignedtext
+grestore
+% Node lists->Dawg
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 471.26 90 moveto
+501.36 90 540.59 90 569.82 90 curveto
+stroke
+0 0 0 edgecolor
+newpath 570.1 93.5 moveto
+580.1 90 lineto
+570.1 86.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 570.1 93.5 moveto
+580.1 90 lineto
+570.1 86.5 lineto
+closepath stroke
+grestore
+% Dawg->Dictionary
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 638.46 79.91 moveto
+652.49 74.34 670.27 67.29 686.35 60.91 curveto
+stroke
+0 0 0 edgecolor
+newpath 688.1 63.99 moveto
+696.1 57.05 lineto
+685.52 57.48 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 688.1 63.99 moveto
+696.1 57.05 lineto
+685.52 57.48 lineto
+closepath stroke
+grestore
+% Dictionary->q1
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 778.4 44 moveto
+787.53 44 796.96 44 805.67 44 curveto
+stroke
+0 0 0 edgecolor
+newpath 805.88 47.5 moveto
+815.88 44 lineto
+805.88 40.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 805.88 47.5 moveto
+815.88 44 lineto
+805.88 40.5 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF