!///////////////////////////////////////////////////////////////////////////////
!// Copyright (c) 2000-2019 Ericsson Telecom AB                               //
!//                                                                           //
!// All rights reserved. This program and the accompanying materials          //
!// are made available under the terms of the Eclipse Public License v2.0     //
!// which accompanies this distribution, and is available at                  //
!// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html                                 //
!///////////////////////////////////////////////////////////////////////////////
! Preferences file for NEdit
!
! Install with
!			 nedit -import <name of this file>
! 
! Updates for nedit to show profiler info for TTCN3 file.
!
! Usage:
!   Before the profiler info could be shown in nedit the
!   Profiler information has to be generated by the
!   TitanSim Profiler tool.
!   If the profiler info is successfully generated a
!   TTCN3Profiler.prof file should be present in the build
!   directory.
!   Now for any TTCN files the profiler info can be shown
!   by pressing the <Alt>-<Shift>-F keys or
!   by selecting the Macro/ShowProfiler from the menu.
!   A new file will be generated and opened automatically.
!   This file contains a number before each line meaning
!   how long that line was executed in microseconds. The lines
!   are shown in different colors according to this number.
!   The numbers are followed by the actual source code
!   copied from the original file.
!
!   Since the generated file has a .log extension, all
!   generated files are removed by "make clean".
!
!   Note, that highlightPatterns, languageModes and styles
!   are the same as in ShowCoverage.pats

nedit.macroCommands: \
	ShowProfiler:Shift+Alt+F::: {\n\
		shell_command( "gawk -f profiler2nedit.awk TTCN3Profiler.prof "$file_name" > "$file_name"3prof.log","" )\n\
		open($file_name"3prof.log")\n\
		\n\
		lineNumber=$line\n\
		command = "nc -noask -line " lineNumber " " $file_name"3prof.log"\n\
		shell_command( command,"")\n\
	}
nedit.highlightPatterns: \
	TTCN3Cov:1:0{\n\
		Coverage0:"^[ ]*[0]{1}[ ]*:[ ]*":"$"::Coverage::\n\
		Coverage1:"^[ ]*[1-9]{1}[ ]*:[ ]*":"$"::Coverage1::\n\
		Coverage2:"^[ ]*[0-9]{2}[ ]*:[ ]*":"$"::Coverage2::\n\
		Coverage3:"^[ ]*[0-9]{3}[ ]*:[ ]*":"$"::Coverage3::\n\
		Coverage4:"^[ ]*[0-9]{4}[ ]*:[ ]*":"$"::Coverage4::\n\
		Coverage5:"^[ ]*[0-9]{5}[ ]*:[ ]*":"$"::Coverage5::\n\
		Coverage6:"^[ ]*[0-9]{6}[ ]*:[ ]*":"$"::Coverage6::\n\
		Coverage7:"^[ ]*[0-9]{7}[ ]*:[ ]*":"$"::Coverage7::\n\
		Coverage8:"^[ ]*[0-9]{8,}[ ]*:[ ]*":"$"::Coverage8::\n\
	}
nedit.languageModes: 	\
	TTCN3Cov:ttcn3cov:"^[ ]*[0..9]:[ ]+":::8:2:".,/\\`'!|@#%^&*()=+{}[]"":;<>?~-":
nedit.styles: 	\
	Coverage:black/grey:Plain\n\
	Coverage1:black/green:Plain\n\
	Coverage2:black/yellow:Plain\n\
	Coverage3:black/orange:Plain\n\
	Coverage4:black/red:Plain\n\
	Coverage5:lightgreen/purple:Plain\n\
	Coverage6:yellow/blue:Plain\n\
	Coverage7:orange/darkblue:Plain\n\
	Coverage8:darkred/cyan:Plain
