! VHDL Smart Indent Macros ! ! Contributed by Matthijs van Aalten ! ! In NEdit Version 5.0.1 and beyond, load this pattern by starting nedit with: ! ! nedit -import ! ! Then, check that the macros work properly, and choose Save Defaults from the ! Preferences menu. The smart-indent macros will now be incorporated into ! your own .nedit file, so the next time you start NEdit, you will no longer ! need to use -import. ! ! In version 5.0, without -import, you must edit your .nedit file by hand and ! add the contents of each resource below to the corresponding list in your ! .nedit file. Be sure to separate new entries with \n, and continue resource ! strings by escaping all newlines within a resource value with \ (backslash), ! leaving only the last line of the resource value not ending in \. ! nedit.smartIndentInit: VHDL: $VHDL_indent = 2\n\ \n\ define contain_string {\n\ linestart = search("^", $cursor, "regex", "backward")\n\ currentline = get_range(linestart, $cursor)\n\ foundpoint = search_string(currentline, $1, 0, "regex")\n\ if ((foundpoint != -1) && (search_string(currentline, "<" $1 ">", 0, "regex") != -1))\n\ if (search_string(get_range(linestart, linestart+foundpoint), "--", 0) == -1) {\n\ return foundpoint\n\ } else {\n\ return -1\n\ }\n\ else\n\ return -1\n\ }\n\ \n\ define current_indent {\n\ return search_string($1, "[^ \\t]", 0, "regex")\n\ }\n\ \n\ define search_back {\n\ level = $2\n\ for (i = $1; i >= 0; i--) {\n\ # Search for an "IF" statement:\n\ if ((search_string(get_range(i, i+$3), $4, 0, "regex") != -1) &&\\\n\ (search_string(get_range(i-1, i+$3+1), "<" $4 ">", 0, "regex") != -1) &&\\\n\ (search_string(get_range(i-4, i+$3), "[eE][nN][dD][ \\t]" $4, 0, "regex") == -1)) {\n\ # First check for a comment:\n\ linestart = search("^", i, "regex", "backward")\n\ if (search_string(get_range(linestart, i), "--", 0) == -1) {\n\ # If current nesting-level = 0: select, else decrease nesting-level:\n\ if (level == 0) {\n\ return i\n\ break\n\ } else\n\ level = level - 1\n\ }\n\ } else {\n\ # If "END IF" is found: increase current nesting-level:\n\ if (search_string(get_range(i, i+$3+4), "[eE][nN][dD][ \\t]" $4, 0, "regex") != -1) {\n\ # First check for a comment:\n\ linestart = search("^", i, "regex", "backward")\n\ if (search_string(get_range(linestart, i), "--", 0) == -1)\n\ level = level + 1\n\ }\n\ }\n\ }\n\ return 0\n\ }\n\ \n\ define do_indent {\n\ linestart = search("^", $cursor, "regex", "backward")\n\ matching = search_back($cursor, $1, $2, $3, $4)\n\ matchingstart = search("^", matching, "regex", "backward")\n\ matchingend = search("[^ \\t]", matchingstart, "regex")\n\ oldindent = get_range(matchingstart, matchingend)\n\ textstart = search("[^ \\t]", linestart, "regex")\n\ if ($5 == "indent")\n\ for (d = 0; d < $VHDL_indent; d++)\n\ oldindent = " " oldindent\n\ replace_range(linestart, textstart, oldindent)\n\ return $4 + matchingend - matchingstart\n\ }\n\ \n\ define get_if_indent {\n\ matching = search_back($cursor, $1, $2, $3, $4)\n\ matchingstart = search("^", matching, "regex", "backward")\n\ matchingend = search("[^ \\t]", matchingstart, "regex")\n\ return matchingend - matchingstart\n\ }\n\ \n\ define ReturnIndent {\n\ linestart = search("^", $cursor, "regex", "backward")\n\ currentline = get_range(linestart, $cursor)\n\ if (contain_string("[eE][nN][dD][ \\t][iI][fF]") != -1) {\n\ return do_indent(-1, 2, "[iI][fF]", 0, "noindent")\n\ } else if (contain_string("[eE][nN][dD][ \\t][cC][aA][sS][eE]") != -1) {\n\ return do_indent(-1, 4, "[cC][aA][sS][eE]", 0, "noindent")\n\ } else if (contain_string("[eE][nN][dD][ \\t][lL][oO][oO][pP]") != -1) {\n\ return do_indent(-1, 4, "[lL][oO][oO][pP]", 0, "noindent")\n\ } else if ((contain_string("[eE][lL][sS][eE]") != -1) ||\\\n\ (contain_string("[eE][lL][sS][iI][fF]") != -1)) {\n\ return do_indent(0, 2, "[iI][fF]", $VHDL_indent, "noindent")\n\ } else if (contain_string("[eE][nN][dD]") != -1) {\n\ return do_indent(0, 5, "[bB][eE][gG][iI][nN]", 0, "noindent")\n\ } else if ((contain_string("[wW][hH][eE][nN]") != -1) &&\\\n\ (contain_string("=\\>") != -1)) {\n\ return do_indent(0, 4, "[cC][aA][sS][eE]", $VHDL_indent + $VHDL_indent, "indent")\n\ } else if ((contain_string("[tT][hH][eE][nN]") != -1) &&\\\n\ (contain_string("[iI][fF]") == -1)) {\n\ return $VHDL_indent + get_if_indent(0, 2, "[iI][fF]", 0)\n\ } else if ((contain_string("[bB][eE][gG][iI][nN]") != -1) ||\\\n\ (contain_string("[cC][aA][sS][eE]") != -1) ||\\\n\ (contain_string("[lL][oO][oO][pP]") != -1) ||\\\n\ (contain_string("[iI][fF]") != -1)) {\n\ return $VHDL_indent + current_indent(currentline)\n\ } else {\n\ return current_indent(currentline)\n\ }\n\ }\n\ \n\ \n\ \n\ --End-of-Macro--\n\ return ReturnIndent()\n\ --End-of-Macro--\n\ --End-of-Macro--