Kate fails with IF/ELSE/ENDIFs in Fortran 90

X <[email protected]> Mon, 27 Nov 2023 12:22:21 +0000 (UTC)
Newsgroups gmane.comp.kde.devel.kwrite
Message-ID <[email protected]>
Hello Kate developers,Nicest  editor in the world! 
But has one big problem!
1) Here i specifically made the example for you where you can train Kate and fix this annoying bug with Fortran texts.
I have numerous, numerous, millions places where it always fail!!!
Load the file, click on IF, THEN END IF and you will not find ~50% of matched If/Endifs which should be marked in yellow. Kate just miserably miss themOnly simple and short IF/EndIF blocks always work. 

Please fix! 
Here is the demo text attached
Please confirm when you fix it!
2) Would be nice if you had usual forum where we can discuss the bug and features.The options you have  (mailing lists, chat) are ...how to say ... kind of inconvenient. No feedback from other users. 
Also, where we can send the suggestions ?

Thanks you very muchDan
ifendif.f90 (text/x-fortran, 11.6 KB)
!=================================================================================
   Integer function ReadTrajectData ()



        ionCurr= ionSpecieNo


!        temporally
         if(ionCurr.ne.ionNumberToPlotDataFor) goto 1000


!        if(iCellNoToTraceParticles (ionSpecieNo).LT.0.OR.iCellNoToTraceParticles (ionSpecieNo).GT.nAxialSlices) goto 1000
!        iCellNoToTraceParticlesBcurr = iCellNoToTraceParticlesB(ionSpecieNo)
!        if(iCellNoToTraceParticlesB(ionSpecieNo).LT.0.OR.iCellNoToTraceParticlesB(ionSpecieNo).GT.nAxialSlices) goto 1000



          iStndrdOneDataLineDim = 9
!	  if(kPlotTrajectories.eq.1) then
!           iAddT=1 ! standard line OneDataLine dimens=9
!          iStndrdOneDataLineDim = 10
!          endif




            if(kDebugCheckpoint.eq.20.and.ionCurr.eq.0) then
               aaaaaa = 0
               kDebugCheckpoint = 0
            endif
            if(kDebugCheckpoint.eq.21.and.ionCurr.eq.1) then
               aaaaaa = 1
               kDebugCheckpoint = 0
            endif
            if(kDebugCheckpoint.eq.22.and.ionCurr.eq.2) then
               aaaaaa = 2
               kDebugCheckpoint = 0
            endif
            if(kDebugCheckpoint.eq.23.and.ionCurr.eq.3) then
               aaaaaa = 3
               kDebugCheckpoint = 0
            endif
            if(kDebugCheckpoint.eq.24.and.ionCurr.eq.4) then
               aaaaaa = 4
               kDebugCheckpoint = 0
            endif




          IF (iTimeNo.eq.1) THEN

	    if(nOfTrajectories.gt.nTrajMax) nOfTrajectories = nTrajMax
	    if(nOfTrajectories.le.0) nOfTrajectories = 1

	    iddd = abs(iCellNoToTraceParticles (ionSpecieNo)-iCellNoToTraceParticlesB(ionSpecieNo))
	    if(iddd.eq.0) then
              nMaxTakesOfThisAxCell = 1
	    else
	      nMaxTakesOfThisAxCell = nOfTrajectories/ &
              abs(iCellNoToTraceParticles (ionSpecieNo)-iCellNoToTraceParticlesB(ionSpecieNo))
	    endif

! ...Selected particles From File
	    if(kTrackParticlesManuallyFromFile.eq.0) Then


	    if(nMaxTakesOfThisAxCell.lt.1) then
	     nMaxTakesOfThisAxCell = 1
	    endif

	    if(kDistribHomogenAmongIncludCells.eq.1.and.k_selectHighestEnergyParticle.eq.0) then
	      if(iCellsTaken(iaxcell).gt.nMaxTakesOfThisAxCell) goto 1000
	    endif

            if(iaxcell.lt.iCellNoToTraceParticles (ionSpecieNo)) goto 1000
            if(iaxcell.gt.iCellNoToTraceParticlesB(ionSpecieNo)) goto 1000

	    if(kStartEnergyMustBeLargerThanThis.eq.1.and.OneDataLine(7)&
            .lt.DoNotPlot_Traj_WithEnergy_LessThanMeV)           goto 1000

	    Rcurr = sqrt(OneDataLine(2)**2+OneDataLine(3)**2)
	    if(Rcurr.lt.RminToTraceParticles)                    goto 1000
	    if(Rcurr.gt.RmaxToTraceParticles)                    goto 1000


	    x2 = OneDataLine(2)
	    y2 = OneDataLine(3)
            AzimAng_Rad = atan2(y2,x2) ! y/x
	    if(y2.gt.0.) then
              iAzimAng_Deg = AzimAng_Rad * 180./pi + 1
	    else if(y2.eq.0.) then
              iAzimAng_Deg = 181
            else
              iAzimAng_Deg = 361 + AzimAng_Rad * 180./pi
            endif

	    itraj = iAzimAng_Deg/360. * nOfTrajectories
            if(itraj.gt.nOfTrajectories) itraj=nOfTrajectories
            if(itraj.lt.1) itraj=1

	    If(k_selectHighestEnergyParticle.eq.1) then

	      nAxialParticleLoaded_traj (itraj,ionSpecieNo) = iaxcell
!	      nAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) + 1

	      if(E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).lt.OneDataLine(7)) then
	        nOfInitialTrajFound  = nOfInitialTrajFound + 1

                nOfInitialTrajByIonFound(ionSpecieNo) = nOfInitialTrajByIonFound(ionSpecieNo) + 1

	        E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo) =  OneDataLine(7)
                XYZMxMyMzE_traj    (1:7,itraj,ionSpecieNo,iTimeNo) = OneDataLine(1:7)

!               if(kAxialParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).le.0) then
                 iParticleNumber_traj    (1,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+1))
                 iParticleNumber_traj    (2,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+2))
                 kAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) = 1 ! iTimeNo
!                XYZMxMyMzE_traj    (1:7,itraj,ionSpecieNo,iTimeNo) = OneDataLine(1:7)
!               endif ! if(kAxialParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).le.0) then
	        iCellsTaken(iaxcell) = iCellsTaken(iaxcell) + 1
	      endif ! if(E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).lt.OneDataLine(7)) then

            Else ! if(k_selectHighestEnergyParticle.eq.1) then

	      nAxialParticleLoaded_traj (itraj,ionSpecieNo) = iaxcell
!	      nAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) + 1

              if(kAxialParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).le.0) then
	        nOfInitialTrajFound   = nOfInitialTrajFound    + 1
                nOfInitialTrajByIonFound(ionSpecieNo) = nOfInitialTrajByIonFound(ionSpecieNo) + 1

                iParticleNumber_traj    (1,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+1))
                iParticleNumber_traj    (2,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+2))
                kAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) = 1 ! iTimeNo
                XYZMxMyMzE_traj    (1:7,itraj,ionSpecieNo,iTimeNo)    = OneDataLine(1:7)
	  	E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo)  =  OneDataLine(7)
	        iCellsTaken(iaxcell) = iCellsTaken(iaxcell) + 1
              endif

	    endIf !  if(k_selectHighestEnergyParticle.eq.1) then

!.......Tracking manually set particles

	    Else  ! if(kTrackParticlesManuallyFromFile.eq.0) then

            if(kAllParticlesForTracAreRead == 1) goto 5000
            open(unit=622,file=InitFileForTrackingSelected,status='old', err=690)

            DO i=1,nTrajMax
              read(622,'(a)',err=695,end=680) CommentForManualTrackFile
              read(622,'(1p, 11e15.8,7i6)',err=695,end=680) OneDataLine, ionSpecieNo, iaxcell, iParticleNo
              ionSpecieNo2 = ionSpecieNo

	    if(kDistribHomogenAmongIncludCells.eq.1.and.k_selectHighestEnergyParticle.eq.0) then
	      if(iCellsTaken(iaxcell).gt.nMaxTakesOfThisAxCell) goto 1000
	    endif

            if(iaxcell.lt.iCellNoToTraceParticles (ionSpecieNo)) goto 1000
            if(iaxcell.gt.iCellNoToTraceParticlesB(ionSpecieNo)) goto 1000

	    if(kStartEnergyMustBeLargerThanThis.eq.1.and.OneDataLine(7)&
            .lt.DoNotPlot_Traj_WithEnergy_LessThanMeV)           goto 1000

	    Rcurr = sqrt(OneDataLine(2)**2+OneDataLine(3)**2)
	    if(Rcurr.lt.RminToTraceParticles)                    goto 1000
	    if(Rcurr.gt.RmaxToTraceParticles)                    goto 1000


	    x2 = OneDataLine(2)
	    y2 = OneDataLine(3)
            AzimAng_Rad = atan2(y2,x2) ! y/x
	    if(y2.gt.0.) then
              iAzimAng_Deg = AzimAng_Rad * 180./pi + 1
	    else if(y2.eq.0.) then
              iAzimAng_Deg = 181
            else
              iAzimAng_Deg = 361 + AzimAng_Rad * 180./pi
            endif

	    itraj = iAzimAng_Deg/360. * nOfTrajectories
            if(itraj.gt.nOfTrajectories) itraj=nOfTrajectories
            if(itraj.lt.1) itraj=1

	    If(k_selectHighestEnergyParticle.eq.1) then

	      nAxialParticleLoaded_traj (itraj,ionSpecieNo) = iaxcell
!	      nAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) + 1

	      if(E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).lt.OneDataLine(7)) then
	        nOfInitialTrajFound  = nOfInitialTrajFound + 1
                nOfInitialTrajByIonFound(ionSpecieNo) = nOfInitialTrajByIonFound(ionSpecieNo) + 1

	        E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo) =  OneDataLine(7)
                XYZMxMyMzE_traj    (1:7,itraj,ionSpecieNo,iTimeNo) = OneDataLine(1:7)


                 iParticleNumber_traj    (1,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+1))
                 iParticleNumber_traj    (2,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+2))
                 kAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) = 1 ! iTimeNo


	        iCellsTaken(iaxcell) = iCellsTaken(iaxcell) + 1
	      endif ! if(E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).lt.OneDataLine(7)) then

            Else ! if(k_selectHighestEnergyParticle.eq.1) then

	      nAxialParticleLoaded_traj (itraj,ionSpecieNo) = iaxcell
              if(kAxialParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).le.0) then
	        nOfInitialTrajFound   = nOfInitialTrajFound    + 1
                nOfInitialTrajByIonFound(ionSpecieNo) = nOfInitialTrajByIonFound(ionSpecieNo) + 1
                iParticleNumber_traj    (1,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+1))
                iParticleNumber_traj    (2,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+2))
                kAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) = 1 ! iTimeNo
                XYZMxMyMzE_traj    (1:7,itraj,ionSpecieNo,iTimeNo)    = OneDataLine(1:7)
	  	E_max_ParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo)  =  OneDataLine(7)
	        iCellsTaken(iaxcell) = iCellsTaken(iaxcell) + 1
              endif

	    endIf !  if(k_selectHighestEnergyParticle.eq.1) then
            ENDDO !  i=1,100000

680         close(622,err=5000)
            kAllParticlesForTracAreRead = 1
            call window_update@(nOfInitialTrajByIonFound(:))
	    goto 5000

!...errors
690         Print*,'Sound 89356 Error opening file=', trim(InitFileForTrackingSelected)
            call sound@(2000,2)
            goto 5000

695         Print*,'Sound 89336 Error reading file=', trim(InitFileForTrackingSelected)
            call sound@(2000,2)
            close(622,err=5000)

5000        continue
            EndIf ! 	    if(kTrackParticlesManuallyFromFile.eq.0) then

!................ other times ......................
          ELSE  if(iTimeNo.gt.1) then

            do itraj=1, nOfTrajectories
            if(iParticleNumber_traj(1,itraj,ionSpecieNo,1).eq.nint(OneDataLine(iStndrdOneDataLineDim+1)).and. &
               iParticleNumber_traj(2,itraj,ionSpecieNo,1).eq.nint(OneDataLine(iStndrdOneDataLineDim+2)) ) then

              if(kAxialParticleLoaded_traj(itraj,ionSpecieNo,iTimeNo).eq.0) then

	      nAxialParticleLoaded_traj (itraj,ionSpecieNo) = iaxcell
!	      nAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) + 1


                iParticleNumber_traj    (1,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+1))
                iParticleNumber_traj    (2,itraj,ionSpecieNo,iTimeNo) = nint(OneDataLine(iStndrdOneDataLineDim+2))
!               kAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) = iTimeNo
                kAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) = kAxialParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo)+ 1
                XYZMxMyMzE_traj    (1:7,itraj,ionSpecieNo,iTimeNo)    = OneDataLine(1:7)
	        E_max_ParticleLoaded_traj (itraj,ionSpecieNo,iTimeNo) = OneDataLine(7)
	      else
                if(nTimesInThisPlace01.lt.100) then
                nTimesInThisPlace01 = nTimesInThisPlace01 + 1
	          call sound@(5000,1)
                  Print*,'Sound 33871   ',  &
                  nint(OneDataLine(iStndrdOneDataLineDim+1)), nint(OneDataLine(iStndrdOneDataLineDim+2))
                endif
              endif
            endif

	    ENDDO !  DO i=1,100000


	  ENDIF ! IF (iTimeNo.eq.1) THEN



1000   continue

      ReadTrajectData = 2
   end function

!====================================================================