home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 16 / CD_ASCQ_16_0994.iso / news / 4611 / fw16d.ins / SOURCE / CLASSES / TTEXT.PRG < prev    next >
Text File  |  1994-05-30  |  4KB  |  136 lines

  1. // FiveWin Text editing Class
  2. // FiveWin Editing tools
  3.  
  4. // Warning: Under construction. Not available yet!
  5.  
  6. #include "FiveWin.ch"
  7.  
  8. static lRegistered := .f.
  9.  
  10. //----------------------------------------------------------------------------//
  11.  
  12. CLASS TText FROM TWBrowse
  13.  
  14.    DATA    aLines, cKeyWords, aKeyColors
  15.    DATA    cFileName
  16.    DATA    cOperators, nOperators
  17.  
  18.    METHOD  New( nTop, nLeft, nWidth, nHeight, cFileName, oWnd ) CONSTRUCTOR
  19.    METHOD  Load( cFileName )
  20.  
  21.    METHOD  DrawLine( nRow, nClrBack )
  22.  
  23.    METHOD  DrawSelect() INLINE ::DrawLine( ::nRowPos, ::nClrBackFocus )
  24.  
  25. ENDCLASS
  26.  
  27. //----------------------------------------------------------------------------//
  28.  
  29. METHOD New( nTop, nLeft, nWidth, nHeight, cFileName, oWnd ) CLASS TText
  30.  
  31.    Super:New( nTop, nLeft, nWidth, nHeight, { || { "" } }, { "Editing" },;
  32.               { 300 }, oWnd )
  33.  
  34.    ::cKeyWords  = "function  " + ;
  35.                   "MENU      " + ;
  36.                   "MENUITEM  " + ;
  37.                   "#include  " + ;
  38.                   "BRUSH     " + ;
  39.                   "nil       " + ;
  40.                   "local     " + ;
  41.                   "REDEFINE  " + ;
  42.                   "if        " + ;
  43.                   "endif     " + ;
  44.                   "else      "
  45.  
  46.    ::cOperators = "+-/:==%(){}@"
  47.    ::aKeyColors = { CLR_HRED, CLR_HCYAN, CLR_HBLUE, CLR_YELLOW, CLR_WHITE,;
  48.                     CLR_HGREEN, CLR_YELLOW, CLR_HRED, CLR_YELLOW,;
  49.                     CLR_YELLOW, CLR_YELLOW }
  50.    ::nOperators = CLR_WHITE
  51.  
  52.    ::Load( cFileName )
  53.    ::SetArray( ::aLines )
  54.    ::bLine = { || { ::aLines[ ::nAt ] } }
  55.  
  56. return nil
  57.  
  58. //----------------------------------------------------------------------------//
  59.  
  60. METHOD DrawLine( nRow, nClrBack ) CLASS TText
  61.  
  62.    local cWord
  63.    local nOffset := 0, nAt
  64.    local cTextLine := ::aLines[ ::nAt ]
  65.    local nCol := 0
  66.    local nChrHeight
  67.    local lString := .f.
  68.  
  69.    DEFAULT ::nChrHeight := ::nGetChrHeight(),;
  70.            nClrBack := ::nClrPane,;
  71.            nRow := ::nRowPos
  72.  
  73.    nChrHeight = ::nChrHeight()
  74.    SetBkColor( ::GetDC(), nClrBack )
  75.  
  76.    if ::oFont != nil
  77.       SelectObject( ::hDC, ::oFont:hFont )
  78.    endif
  79.  
  80.    while ! Empty( cWord := cStrWord( cTextLine, @nOffset ) )
  81.       do case
  82.          case lString
  83.               SetTextColor( ::hDC, CLR_HMAGENTA )
  84.               if At( '"', cWord ) != 0
  85.                  lString = .f.
  86.               endif
  87.  
  88.          case SubStr( LTrim( cWord ), 1, 1 ) >= "0" .and. ;
  89.               SubStr( LTrim( cWord ), 1, 1 ) <= "9"
  90.               SetTextColor( ::hDC, CLR_HCYAN )
  91.  
  92.          case SubStr( LTrim( cWord ), 1, 1 ) == '"'
  93.               SetTextColor( ::hDC, CLR_HMAGENTA )
  94.               lString = .t.
  95.  
  96.          case ( nAt := At( PadR( LTrim( cWord ), 10 ), ::cKeyWords ) ) != 0
  97.               SetTextColor( ::hDC, ::aKeyColors[ Int( nAt / 10 ) + 1 ] )
  98.  
  99.          case At( LTrim( cWord ), ::cOperators ) != 0
  100.               SetTextColor( ::hDC, ::nOperators )
  101.  
  102.          otherwise
  103.               SetTextColor( ::hDC, ::nClrText )
  104.       endcase
  105.       TextOut( ::hDC, nRow * nChrHeight, nCol, cWord )
  106.       nCol += GetTextWidth( ::hDC, cWord )
  107.    end
  108.    TextOut( ::hDC, nRow * nChrHeight, nCol, Space( 200 ) )
  109.  
  110.    ::ReleaseDC()
  111.  
  112. return nil
  113.  
  114. //----------------------------------------------------------------------------//
  115.  
  116. METHOD Load( cFileName ) CLASS TText
  117.  
  118.    local hFile, cLine
  119.  
  120.    ::aLines    = {}
  121.    ::cFileName = cFileName
  122.  
  123.    if File( cFileName )
  124.       hFile = FOpen( cFileName )
  125.       while lGetTextLine( hFile, @cLine )
  126.          AAdd( ::aLines, cLine )
  127.       end
  128.       FClose( hFile )
  129.    else
  130.       MsgInfo( "Text Object: I don't find that file!" )
  131.    endif
  132.  
  133. return nil
  134.  
  135. //----------------------------------------------------------------------------//
  136.