From 514afef0c403fbd2302f3a160d5bef22b553b7a9 Mon Sep 17 00:00:00 2001 From: Pritpal Bedi Date: Thu, 9 Aug 2012 18:02:00 +0000 Subject: [PATCH] 2012-08-09 10:41 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbide/edit.prg + Included: qtcore; qtgui; qtnetwork; functions list to be properly cased while writing the code. ; QUESTION: .hbx files contain upper-cased function list, the only exception is harbour.hbx where functions are properly cased. Is there a way to get .hbx(es) with properly cased functions ? --- harbour/ChangeLog | 10 + harbour/contrib/hbide/edit.prg | 322 ++++++++++++++++++++------------- 2 files changed, 204 insertions(+), 128 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 2bb5e85d82..c45d611adc 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -16,6 +16,16 @@ The license applies to all entries newer than 2009-04-28. */ +2012-08-09 10:41 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) + * contrib/hbide/edit.prg + + Included: qtcore; qtgui; qtnetwork; functions list to be + properly cased while writing the code. + + ; QUESTION: .hbx files contain upper-cased function list, + the only exception is harbour.hbx where functions are + properly cased. Is there a way to get .hbx(es) with + properly cased functions ? + 2012-08-08 19:56 UTC-0800 Pritpal Bedi (bedipritpal@hotmail.com) * contrib/hbide/edit.prg + Implemented: auto insertions of statements closing structure. diff --git a/harbour/contrib/hbide/edit.prg b/harbour/contrib/hbide/edit.prg index 094636acdd..807681b17a 100644 --- a/harbour/contrib/hbide/edit.prg +++ b/harbour/contrib/hbide/edit.prg @@ -2227,7 +2227,7 @@ METHOD IdeEdit:insertText( cText ) /* called via qDocument:contentsChange(*/ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) - LOCAL cProto, nRows, nCols + LOCAL cProto, nRows, nCols, nCol LOCAL cPWord, cPPWord, nPostn, nLine, nLPrev, nLPrevPrev, nCPrev, nCPrevPrev, nOff, cCased LOCAL cCWord := "" LOCAL cRest := "" @@ -2237,11 +2237,8 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) nPostn := qCursor:position() nLine := qCursor:blockNumber() - IF qCursor:columnNumber() > 0 - qCursor:movePosition( QTextCursor_Left, QTextCursor_KeepAnchor, 1 ) - cCWord := qCursor:selectedText() - qCursor:clearSelection() - qCursor:setPosition( nPostn ) + IF ( nCol := nPostn - qCursor:block():position() ) > 0 + cCWord := SubStr( qCursor:block():text(), nCol, 1 ) ENDIF IF qCursor:movePosition( QTextCursor_EndOfLine, QTextCursor_KeepAnchor ) .AND. qCursor:position() > nPostn @@ -2253,7 +2250,7 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) qCursor:movePosition( QTextCursor_PreviousWord, QTextCursor_MoveAnchor, 1 ) nLPrev := qCursor:blockNumber() IF nLPrev == nLine - nCPrev := qCursor:columnNumber() + nCPrev := qCursor:position() - qCursor:block():position() qCursor:select( QTextCursor_WordUnderCursor ) cPWord := qCursor:selectedText() qCursor:clearSelection() @@ -2262,7 +2259,7 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) qCursor:movePosition( QTextCursor_PreviousWord, QTextCursor_MoveAnchor, 2 ) nLPrevPrev := qCursor:blockNumber() IF nLPrevPrev == nLine - nCPrevPrev := qCursor:columnNumber() + nCPrevPrev := qCursor:position() - qCursor:block():position() qCursor:select( QTextCursor_WordUnderCursor ) cPPWord := qCursor:selectedText() ELSE @@ -2272,7 +2269,7 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) qCursor:clearSelection() qCursor:setPosition( nPostn ) -// HB_TRACE( HB_TR_ALWAYS, "PP=", cPPWord, "P=", cPWord, "C=", cCWord, "R=", cRest ) + //HB_TRACE( HB_TR_ALWAYS, "PP<", cPPWord, "> P<", cPWord, "> C<", cCWord, "> R<", cRest, ">" ) qCursor:beginEditBlock() @@ -2285,33 +2282,35 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) qCursor:setPosition( nPostn ) ENDIF - #if 0 + #if 0 /* CONFIGURABLE */ ELSEIF cPWord == ":=" .AND. cCWord == "=" .AND. nAdded == 1 qCursor:insertText( " " ) #endif - ELSEIF cPWord == "(" .AND. hbide_isHarbourFunction( cPPWord, @cCased ) - IF .T. - qCursor:movePosition( QTextCursor_PreviousWord, QTextCursor_MoveAnchor, 2 ) - qCursor:select( QTextCursor_WordUnderCursor ) - qCursor:removeSelectedText() - qCursor:insertText( cCased ) - qCursor:setPosition( nPostn ) - #if 0 + ELSEIF cCWord == "(" .AND. hbide_isHarbourFunction( cPPWord, @cCased ) + hbide_replaceWord( qCursor, 2, cCased, nPostn ) + #if 0 /* CONFIGURABLE */ IF cCWord == "(" .AND. nAdded == 1 - qCursor:insertText( " " ) + qCursor:insertText( " )" ) ENDIF - #endif - ENDIF + #endif + qCursor:setPosition( nPostn ) + + ELSEIF cCWord == "(" .AND. hbide_isQtFunction( cPPWord, @cCased ) + hbide_replaceWord( qCursor, 2, cCased, nPostn ) + #if 0 /* CONFIGURABLE */ + IF cCWord == "(" .AND. nAdded == 1 + qCursor:insertText( " )" ) + ENDIF + #endif + qCursor:setPosition( nPostn ) ELSEIF ( cPWord == "(" .OR. cCWord == " " ) .AND. hbide_isUserFunction( cPPWord, @cCased ) /* User dictionaries : base work */ - IF .T. - qCursor:movePosition( QTextCursor_PreviousWord, QTextCursor_MoveAnchor, 2 ) - qCursor:select( QTextCursor_WordUnderCursor ) - qCursor:removeSelectedText() - qCursor:insertText( cCased ) - qCursor:setPosition( nPostn ) - ENDIF + qCursor:movePosition( QTextCursor_PreviousWord, QTextCursor_MoveAnchor, 2 ) + qCursor:select( QTextCursor_WordUnderCursor ) + qCursor:removeSelectedText() + qCursor:insertText( cCased ) + qCursor:setPosition( nPostn ) ELSEIF cCWord == " " .AND. cPPWord != "#" .AND. hbide_isHarbourKeyword( cPWord ) IF ! ::oINI:lSupressHbKWordsToUpper @@ -2398,6 +2397,18 @@ METHOD IdeEdit:reformatLine( nPos, nDeleted, nAdded ) /*----------------------------------------------------------------------*/ +STATIC FUNCTION hbide_replaceWord( qCursor, nWord, cWord, nPostn ) + + qCursor:movePosition( QTextCursor_PreviousWord, QTextCursor_MoveAnchor, nWord ) + qCursor:select( QTextCursor_WordUnderCursor ) + qCursor:removeSelectedText() + qCursor:insertText( cWord ) + qCursor:setPosition( nPostn ) + + RETURN NIL + +/*----------------------------------------------------------------------*/ + STATIC FUNCTION hbide_appendCase( qCursor, nIndent, nCurPos ) LOCAL i LOCAL nCases := 3 /* CONFIGURABLE */ @@ -2917,15 +2928,17 @@ FUNCTION hbide_isStartingKeyword( cWord, oIde ) IF empty( s_b_ ) IF ! oIde:oINI:lReturnAsBeginKeyword s_b_ := { ; - 'function' => NIL,; - 'class' => NIL,; - 'method' => NIL } + 'function' => NIL,; + 'procedure' => NIL,; + 'class' => NIL,; + 'method' => NIL } ELSE s_b_ := { ; - 'function' => NIL,; - 'class' => NIL,; - 'return' => NIL,; - 'method' => NIL } + 'function' => NIL,; + 'procedure' => NIL,; + 'class' => NIL,; + 'return' => NIL,; + 'method' => NIL } ENDIF ENDIF @@ -2939,14 +2952,18 @@ FUNCTION hbide_isMinimumIndentableKeyword( cWord, oIde ) IF empty( s_b_ ) IF ! oIde:oINI:lReturnAsBeginKeyword s_b_ := { ; - 'local' => NIL,; - 'static' => NIL,; - 'return' => NIL,; + 'local' => NIL,; + 'static' => NIL,; + 'return' => NIL,; + 'private' => NIL,; + 'public' => NIL,; 'default' => NIL } ELSE s_b_ := { ; - 'local' => NIL,; - 'static' => NIL,; + 'local' => NIL,; + 'private' => NIL,; + 'public' => NIL,; + 'static' => NIL,; 'default' => NIL } ENDIF ENDIF @@ -2957,24 +2974,24 @@ FUNCTION hbide_isMinimumIndentableKeyword( cWord, oIde ) FUNCTION hbide_isIndentableKeyword( cWord, oIde ) STATIC s_b_ := { ; - 'if' => NIL,; - 'else' => NIL,; - 'elseif' => NIL,; - 'docase' => NIL,; - 'case' => NIL,; + 'if' => NIL,; + 'else' => NIL,; + 'elseif' => NIL,; + 'docase' => NIL,; + 'case' => NIL,; 'otherwise' => NIL,; - 'do' => NIL,; - 'while' => NIL,; - 'switch' => NIL,; - 'for' => NIL,; - 'next' => NIL,; - 'begin' => NIL,; - 'sequence' => NIL,; - 'try' => NIL,; - 'catch' => NIL,; - 'always' => NIL,; - 'recover' => NIL,; - 'finally' => NIL } + 'do' => NIL,; + 'while' => NIL,; + 'switch' => NIL,; + 'for' => NIL,; + 'next' => NIL,; + 'begin' => NIL,; + 'sequence' => NIL,; + 'try' => NIL,; + 'catch' => NIL,; + 'always' => NIL,; + 'recover' => NIL,; + 'finally' => NIL } HB_SYMBOL_UNUSED( oIde ) @@ -2984,63 +3001,63 @@ FUNCTION hbide_isIndentableKeyword( cWord, oIde ) FUNCTION hbide_harbourKeywords() STATIC s_b_ := { ; - 'function' => NIL,; - 'procedure' => NIL,; - 'thread' => NIL,; - 'return' => NIL,; - 'request' => NIL,; - 'static' => NIL,; - 'local' => NIL,; - 'default' => NIL,; - 'if' => NIL,; - 'else' => NIL,; - 'elseif' => NIL,; - 'endif' => NIL,; - 'end' => NIL,; - 'endswitch' => NIL,; - 'docase' => NIL,; - 'case' => NIL,; - 'endcase' => NIL,; - 'otherwise' => NIL,; - 'switch' => NIL,; - 'do' => NIL,; - 'while' => NIL,; - 'enddo' => NIL,; - 'exit' => NIL,; - 'for' => NIL,; - 'each' => NIL,; - 'next' => NIL,; - 'step' => NIL,; - 'to' => NIL,; - 'class' => NIL,; - 'endclass' => NIL,; - 'method' => NIL,; - 'data' => NIL,; - 'var' => NIL,; - 'destructor' => NIL,; - 'inline' => NIL,; - 'setget' => NIL,; - 'assign' => NIL,; - 'access' => NIL,; - 'inherit' => NIL,; - 'init' => NIL,; - 'create' => NIL,; - 'virtual' => NIL,; - 'message' => NIL,; - 'begin' => NIL,; - 'sequence' => NIL,; - 'try' => NIL,; - 'catch' => NIL,; - 'always' => NIL,; - 'recover' => NIL,; - 'with' => NIL,; - 'replace' => NIL,; + 'function' => NIL,; + 'procedure' => NIL,; + 'thread' => NIL,; + 'return' => NIL,; + 'request' => NIL,; + 'static' => NIL,; + 'local' => NIL,; + 'default' => NIL,; + 'if' => NIL,; + 'else' => NIL,; + 'elseif' => NIL,; + 'endif' => NIL,; + 'end' => NIL,; + 'endswitch' => NIL,; + 'docase' => NIL,; + 'case' => NIL,; + 'endcase' => NIL,; + 'otherwise' => NIL,; + 'switch' => NIL,; + 'do' => NIL,; + 'while' => NIL,; + 'enddo' => NIL,; + 'exit' => NIL,; + 'for' => NIL,; + 'each' => NIL,; + 'next' => NIL,; + 'step' => NIL,; + 'to' => NIL,; + 'class' => NIL,; + 'endclass' => NIL,; + 'method' => NIL,; + 'data' => NIL,; + 'var' => NIL,; + 'destructor' => NIL,; + 'inline' => NIL,; + 'setget' => NIL,; + 'assign' => NIL,; + 'access' => NIL,; + 'inherit' => NIL,; + 'init' => NIL,; + 'create' => NIL,; + 'virtual' => NIL,; + 'message' => NIL,; + 'begin' => NIL,; + 'sequence' => NIL,; + 'try' => NIL,; + 'catch' => NIL,; + 'always' => NIL,; + 'recover' => NIL,; + 'with' => NIL,; + 'replace' => NIL,; 'hb_symbol_unused' => NIL,; - 'error' => NIL,; - 'handler' => NIL,; - 'loop' => NIL,; - 'in' => NIL,; - 'nil' => NIL } + 'error' => NIL,; + 'handler' => NIL,; + 'loop' => NIL,; + 'in' => NIL,; + 'nil' => NIL } RETURN s_b_ /*----------------------------------------------------------------------*/ @@ -3053,21 +3070,27 @@ FUNCTION hbide_isHarbourKeyword( cWord, oIde ) /*----------------------------------------------------------------------*/ -FUNCTION hbide_isHarbourFunction( cWord, cCased ) - LOCAL s, a_ - STATIC s_b_ +STATIC FUNCTION hbide_addInList( hHash, aList ) + LOCAL s + FOR EACH s IN aList + IF ! empty( s ) + s := alltrim( s ) + hHash[ s ] := s + ENDIF + NEXT + + RETURN NIL + +/*----------------------------------------------------------------------*/ + +FUNCTION hbide_isHarbourFunction( cWord, cCased ) + + STATIC s_b_ IF empty( s_b_ ) s_b_:= {=>} hb_hCaseMatch( s_b_, .f. ) - - a_:= __hb_extern_get_exception_list( hbide_getHarbourHbx() ) - FOR EACH s IN a_ - IF ! empty( s ) - s := alltrim( s ) - s_b_[ s ] := s - ENDIF - NEXT + hbide_addInList( s_b_, hbide_getHarbourFunctions( hbide_getHarbourHbx() ) ) ENDIF IF cWord $ s_b_ cCased := s_b_[ cWord ] @@ -3078,10 +3101,29 @@ FUNCTION hbide_isHarbourFunction( cWord, cCased ) /*----------------------------------------------------------------------*/ -FUNCTION hbide_isUserFunction( cWord, cCased ) - LOCAL s, a_, aDict, oDict - STATIC s_b_ +STATIC FUNCTION hbide_isQtFunction( cWord, cCased ) + STATIC s_b_ + IF empty( s_b_ ) + s_b_:= {=>} + hb_hCaseMatch( s_b_, .f. ) + hbide_addInList( s_b_, hbide_getQtFunctions( hbide_getQtCoreFilelist() ) ) + hbide_addInList( s_b_, hbide_getQtFunctions( hbide_getQtGuiFilelist() ) ) + hbide_addInList( s_b_, hbide_getQtFunctions( hbide_getQtNetworkFilelist() ) ) + ENDIF + IF cWord $ s_b_ + cCased := s_b_[ cWord ] + RETURN .T. + ENDIF + + RETURN .f. + +/*----------------------------------------------------------------------*/ + +STATIC FUNCTION hbide_isUserFunction( cWord, cCased ) + LOCAL s, a_, aDict, oDict + + STATIC s_b_ IF empty( s_b_ ) s_b_:= {=>} hb_hCaseMatch( s_b_, .f. ) @@ -3106,7 +3148,7 @@ FUNCTION hbide_isUserFunction( cWord, cCased ) /*----------------------------------------------------------------------*/ /* Pulled from harbour/bin/find.hb and adopted for file as buffer */ -STATIC FUNCTION __hb_extern_get_exception_list( cFile ) +STATIC FUNCTION hbide_getHarbourFunctions( cFile ) LOCAL pRegex LOCAL tmp LOCAL aDynamic := {} @@ -3122,9 +3164,33 @@ STATIC FUNCTION __hb_extern_get_exception_list( cFile ) /*----------------------------------------------------------------------*/ +STATIC FUNCTION hbide_getQtFunctions( cBuffer ) + LOCAL pRegex + LOCAL tmp + LOCAL aDynamic := {} + + IF ! Empty( cBuffer ) .AND. ; + ! Empty( pRegex := hb_regexComp( "^([a-zA-Z0-9_]*.qth)$", .T., .T. ) ) + FOR EACH tmp IN hb_regexAll( pRegex, StrTran( cBuffer, Chr( 13 ) ),,,,, .T. ) + AAdd( aDynamic, StrTran( tmp[ 1 ], ".qth" ) ) + NEXT + ENDIF + + RETURN aDynamic + +/*----------------------------------------------------------------------*/ #pragma -km+ FUNCTION hbide_getHarbourHbx() #pragma __binarystreaminclude "harbour.hbx" | RETURN %s +FUNCTION hbide_getQtGuiFilelist() + #pragma __binarystreaminclude "../hbqt/qtgui/qth/filelist.hbm" | RETURN %s + +FUNCTION hbide_getQtCoreFilelist() + #pragma __binarystreaminclude "../hbqt/qtcore/qth/filelist.hbm" | RETURN %s + +FUNCTION hbide_getQtNetworkFilelist() + #pragma __binarystreaminclude "../hbqt/qtnetwork/qth/filelist.hbm" | RETURN %s + /*----------------------------------------------------------------------*/