HEX
Server: Apache
System: Linux pdx1-shared-a1-38 6.6.104-grsec-jammy+ #3 SMP Tue Sep 16 00:28:11 UTC 2025 x86_64
User: mmickelson (3396398)
PHP: 8.1.31
Disabled: NONE
Upload Files
File: //usr/share/jed/lib/idl.sl
% idl mode

$1 = "IDL";
create_syntax_table ($1);

define_syntax (";", "", '%', $1);
define_syntax ("([{", ")]}", '(', $1);
define_syntax ('"', '"', $1);
define_syntax ('\'', '"', $1);
%define_syntax ('\\', '\\', $1);
define_syntax ("$0-9a-zA-Z_", 'w', $1);        % words
define_syntax ("-+0-9a-fA-F.xXL", '0', $1);   % Numbers
define_syntax (",.?:", ',', $1);
define_syntax ("%-+/&*=<>|!~^", '+', $1);
define_syntax ('@', '#', $1);

set_syntax_flags ($1, 1);	       %  case insensitive

% These are IDL reserved words

() = define_keywords ($1, "$", 1);
() = define_keywords ($1, "doeqgegtifleltneofor", 2);
() = define_keywords ($1, "andendformodnotproxor", 3);
() = define_keywords ($1, "caseelsegotothen", 4);
() = define_keywords ($1, "beginendifuntilwhile", 5);
() = define_keywords ($1, "commonendforendrependwhirepeatreturn", 6);
() = define_keywords ($1, "endcaseendelse", 7);
() = define_keywords ($1, "endwhilefunctionon_error", 8);
() = define_keywords ($1, "endrepeat", 9);
() = define_keywords ($1, "on_ioerror", 10);

()=define_keywords_n ($1,"abscoseofexpfixhdrmaxminsintan", 3, 1);
()=define_keywords_n ($1,"alogplotsavesizesortsqrtstopuniqwset", 4, 1);
()=define_keywords_n ($1,"closefloatflooropenropenwplotsprintranksreadfreadsreadurebinspawntotalwherewshow", 5, 1);
()=define_keywords_n ($1,"alog10dblarrdoublefinitefltarrindgenintarrlonarrprintfstrarrstringstrlenstrmidstrposstrputwriteuwindow", 6, 1);
()=define_keywords_n ($1,"defsysvdindgenexecutefindgenget_lunintegerrandomnrandomustr_sepstretchstrtrim", 7, 1);
()=define_keywords_n ($1,"findfilefree_lunn_params", 8, 1);
()=define_keywords_n ($1,"histogramimaginaryreplicatestrupcasetranspose", 9, 1);
()=define_keywords_n ($1,"n_elementsstrlowcasestrmessage", 10, 1);
()=define_keywords_n ($1,"keyword_setstrcompress", 11, 1);

% idl indentation routines

define idl_find_effective_eol ()
{
   bol ();
   while (ffind_char (';'))
     {
	go_right_1 ();
	if (parse_to_point () == -2)
	  {
	     go_left_1 ();
	     return;
	  }
     }
   eol ();
}

define idl_beginning_of_statement ()
{
   variable n = 0;
   bol_skip_white ();

   if (looking_at ("pro ") or looking_at ("function "))
     {
	return 0;
     }

   while (up_1 ())
     {
	idl_find_effective_eol (); bskip_white ();
	ifnot (blooking_at ("$"))
	  {
#iffalse
	     if (bolp ())
	       {
		  skip_white ();
		  if (looking_at_char (';')) continue;
	       }
#endif
	     go_down_1 ();
	     break;
	  }
	n++;
     }
   bol_skip_white ();
   return n;
}

define idl_indent_to (col)
{
   push_spot ();
   bol_skip_white ();
   if (col != what_column ())
     {
	col--;
	bol_trim ();
	whitespace (col);
     }
   pop_spot ();
}

define idl_looking_at_block (word, begin)
{
   ifnot (looking_at (word)) return 0;
   EXIT_BLOCK
     {
	pop_spot ();
     }

   push_spot ();
   go_right (strlen (word));
   ifnot (re_looking_at ("[^a-z0-9A-Z_]"))
     return 0;

   if (ffind (begin)) return 1;
   do
     {
	idl_find_effective_eol ();
	bskip_white ();
	ifnot (blooking_at ("$")) break;
     }
   while (down (1));
   bol ();
   return ffind(begin);
}

define idl_is_block_beginnning ()
{
   push_spot ();
   bol_skip_white ();
   variable ret;
   if (idl_looking_at_block ("if", " begin")
       || idl_looking_at_block ("while", " begin")
       || idl_looking_at_block ("else ", " begin")
       || idl_looking_at_block ("for", " begin")
       || idl_looking_at_block ("case", " of")
       || idl_looking_at_block ("endif else", " begin")
       || idl_looking_at_block ("repeat", " begin")
       || looking_at ("function ")
       || looking_at ("pro "))
     ret = 1;
   else
     {
	idl_find_effective_eol ();
	bskip_chars ("$ \t");
	ret = blooking_at ("BEGIN") && bfind(":");
     };
   pop_spot ();
   return ret;
}

custom_variable ("Idl_Indent_Amount", 2);
define idl_indent_line ()
{
   variable len = 0, extra_indent = 0;
   variable word;

   push_spot ();
   EXIT_BLOCK
     {
	pop_spot ();
	idl_indent_to (len + extra_indent);
	push_mark ();
	bskip_white ();
	pop_mark (not(bolp ()), skip_white ());
     }

   if (idl_beginning_of_statement ())
     {
	push_mark ();
	pop_spot ();
	push_spot ();
	bol ();
	if (1 == find_matching_delimiter (')'))
	  {
	     len = what_column ();
	     pop_mark_0 ();
	     len++;
	     return;
	  }
	pop_mark_1 ();
	if (looking_at ("pro ") or looking_at ("function "))
	  {
	     () = ffind_char (' ');
	     skip_white ();
	  }
	skip_chars ("A-Za-z$_!");
	len = what_column () + Idl_Indent_Amount;
	return;
     }

   if (looking_at_char ('@')) return;

   if (looking_at ("end")) extra_indent = -Idl_Indent_Amount;
   else if (looking_at ("else"))
     {
	go_right (4); skip_white ();
	if (not(looking_at_char (':')))
	  {
	     extra_indent = -Idl_Indent_Amount;
	  }
     }

   ifnot (up_1 ())
     {
	len = 0;
	return;
     }

   do
     {
	bol_skip_white ();
	ifnot (eolp () or looking_at_char (';') or looking_at_char ('@'))
	  break;
     }
   while (up_1 ());
   () = idl_beginning_of_statement ();
   len = what_column ();

   if (idl_is_block_beginnning ())
     {
	len += Idl_Indent_Amount;
     }
}

define idl_newline_and_indent ()
{
   if (idl_is_block_beginnning ()) idl_indent_line ();
   bskip_white ();
   if (blooking_at (",")) insert (" $");
   newline ();
   idl_indent_line ();
}

$1 = "IDL";
ifnot (keymap_p ($1))
{
   make_keymap ($1);
   definekey ("newline_and_indent", "\r", $1);
   definekey ("indent_line", "\t", $1);
}

define idl_mode ()
{
   variable idl = "IDL";
   set_mode (idl, 0);
   use_syntax_table (idl);
   use_keymap (idl);
   set_buffer_hook ("indent_hook", "idl_indent_line");
   set_buffer_hook ("newline_indent_hook", "idl_newline_and_indent");
   run_mode_hooks ("idl_mode_hook");
}