home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / OL.LZH / IDOL.LZH / BUFFER.IOL < prev    next >
Text File  |  1991-07-18  |  3KB  |  133 lines

  1. class buffer(public filename,text,index)
  2.   # read a buffer in from a file
  3.   method read()
  4.     f := open(self.filename,"r") | fail
  5.     self$erase()
  6.     every put(self.text,!f)
  7.     close(f)
  8.     return
  9.   end
  10.   # write a buffer out to a file
  11.   method write()
  12.     f := open(self.filename,"w") | fail
  13.     every write(f,!self.text)
  14.     close(f)
  15.   end
  16.   # insert a line at the current index
  17.   method insert(s)
  18.     if self.index = 1 then {
  19.       push(self.text,s)
  20.     } else if self.index > *self.text then {
  21.       put(self.text,s)
  22.     } else {
  23.       self.text := self.text[1:self.index]|||[s]|||self.text[self.index:0]
  24.     }
  25.     self.index +:= 1
  26.     return
  27.   end
  28.   # delete a line at the current index
  29.   method delete()
  30.     if self.index > *self.text then fail
  31.     rv := self.text[self.index]
  32.     if self.index=1 then pull(self.text)
  33.     else if self.index = *self.text then pop(self.text)
  34.     else self.text := self.text[1:self.index]|||self.text[self.index+1:0]
  35.     return rv
  36.   end
  37.   # move the current index to an arbitrary line
  38.   method goto(l)
  39.     if (1 <= l) & (l <= *self.text+1) then return self.index := l
  40.   end
  41.   # return the current line and advance the current index
  42.   method forward()
  43.     if self.index > *self.text then fail
  44.     rv := self.text[self.index]
  45.     self.index +:= 1
  46.     return rv
  47.   end
  48.   # place the buffer's text into a contiguously allocated list
  49.   method linearize()
  50.     tmp := list(*self.text)
  51.     every i := 1 to *tmp do tmp[i] := self.text[i]
  52.     self.text := tmp
  53.   end
  54.   method erase()
  55.     self.text     := [ ]
  56.     self.index    := 1
  57.   end
  58.   method size()
  59.     return *(self.text)
  60.   end
  61. initially
  62.   if \ (self.filename) then {
  63.     if not self$read() then self$erase()
  64.   } else {
  65.     self.filename := "*scratch*"
  66.     self.erase()
  67.   }
  68. end
  69.  
  70.  
  71. class buftable : buffer()
  72.   method read()
  73.     self$buffer.read()
  74.     tmp := table()
  75.     every line := !self.text do
  76.       line ? { tmp[tab(many(&ucase++&lcase))] := line | fail }
  77.     self.text := tmp
  78.     return
  79.   end
  80.   method lookup(s)
  81.     return self.text[s]
  82.   end
  83. end
  84.  
  85.  
  86. class bibliography : buftable()
  87. end
  88.  
  89.  
  90. class spellChecker : buftable(parentSpellChecker)
  91.   method spell(s)
  92.     return \ (self.text[s]) | (\ (self.parentSpellChecker))$spell(s)
  93.   end
  94. end
  95.  
  96.  
  97. class dictentry(word,pos,etymology,definition)
  98.   method decode(s) # decode a dictionary entry into its components
  99.     s ? {
  100.       self.word       := tab(upto(';'))
  101.       move(1)
  102.       self.pos        := tab(upto(';'))
  103.       move(1)
  104.       self.etymology  := tab(upto(';'))
  105.       move(1)
  106.       self.definition := tab(0)
  107.     }
  108.   end
  109.   method encode()  # encode a dictionary entry into a string
  110.     return self.word||";"||self.pos||";"||self.etymology||";"||self.definition
  111.   end
  112. initially
  113.   if /self.pos then {
  114.     # constructor was called with a single string argument
  115.     self$decode(self.word)
  116.   }
  117. end
  118.  
  119. class dictionary : buftable()
  120.   method read()
  121.     self$buffer.read()
  122.     tmp := table()
  123.     every line := !self.text do
  124.       line ? { tmp[tab(many(&ucase++&lcase))] := dictentry(line) | fail }
  125.     self.text := tmp
  126.   end
  127.   method write()
  128.     f := open(b.filename,"w") | fail
  129.     every write(f,(!self.text)$encode())
  130.     close(f)
  131.   end
  132. end
  133.