You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: triangle.m
    path of file: ./repos/gptoolbox/wrappers
    
    the code of the file until where you have to start completion: function [TV,TF,TN,VV,VE,VRP,VRD] = triangle(varargin)
  % TRIANGLE interface to the Triangle Program.
  %
  % [TV,TF,TN] = triangle(filename,options)  Triangulates file in filename
  % [TV,TF,TN] = triangle(V,options)  Triangulates convex hull of given points
  % [TV,TF,TN] = triangle(V,F,options)  Refine an existing mesh
  % [TV,TF,TN] = triangle(V,E,H,options)  Triangulates a planar straight line graph
  %
  % Inputs:
  %   filename  triangulates existing .poly or .node file
  %   V  #V by 3 constrained points of triangulation
  %   F  #F by 3 list of triangle indices
  %   E  #E by 2 list of constraint edge indices
  %   H  #H by 2 hole points
  %   options
  %     'Quiet' Don't display command/output {true}
  %     'Quality'  Quality mesh generation with no angles smaller than 20
  %       degrees. An alternate minimum angle may be specified after the `q'.
  %     'MaxArea'  Imposes a maximum triangle area constraint. A fixed area 
  %       constraint (that applies to every triangle) may be specified, or a 
  %       list of #F area constraints (negative area means triangle is left 
  %       unconstrained)
  %     'ConstrainRefine' only if refining an existing mesh, means that edges
  %       should not be eliminated. Can specify edges after this option,
  %       otherwise all edges of existing mesh are used.

    
function [TV,TF,TN,VV,VE,VRP,VRD] = triangle(varargin)
  % TRIANGLE interface to the Triangle Program.
  %
  % [TV,TF,TN] = triangle(filename,options)  Triangulates file in filename
  % [TV,TF,TN] = triangle(V,options)  Triangulates convex hull of given points
  % [TV,TF,TN] = triangle(V,F,options)  Refine an existing mesh
  % [TV,TF,TN] = triangle(V,E,H,options)  Triangulates a planar straight line graph
  %
  % Inputs:
  %   filename  triangulates existing .poly or .node file
  %   V  #V by 3 constrained points of triangulation
  %   F  #F by 3 list of triangle indices
  %   E  #E by 2 list of constraint edge indices
  %   H  #H by 2 hole points
  %   options
  %     'Quiet' Don't display command/output {true}
  %     'Quality'  Quality mesh generation with no angles smaller than 20
  %       degrees. An alternate minimum angle may be specified after the `q'.
  %     'MaxArea'  Imposes a maximum triangle area constraint. A fixed area 
  %       constraint (that applies to every triangle) may be specified, or a 
  %       list of #F area constraints (negative area means triangle is left 
  %       unconstrained)
  %     'ConstrainRefine' only if refining an existing mesh, means that edges
  %       should not be eliminated. Can specify edges after this option,
  %       otherwise all edges of existing mesh are used.
  %     'NoBoundarySteiners' Prohibits the insertion of Steiner points on
  %       the mesh boundary. 
  %     'NoEdgeSteiners' prohibits insertion of Steiner points on any segment, 
  %       including internal segments.
  %     'MaxSteiners' specifies max number of allowed Steiner points.
  %     'Flags' specifies flags string explicitly
  % Outputs:
  %   TV  #TV by 2 list of mesh vertices
  %   TF  #TF by 3 list of triangle indices
  %   TN  #TN by 3 list of triangle neighbors
  %   VV  #VV by 2 list of voronoi vertices
  %   VE  #VE by 2 list of voronoi internal edges
  %   VRP  #VRP by 1 list of voronoi infinite ray start points
  %   VRD  #VRP by 2 list of voronoi infinite direction unit vectors
  %
  % Note: In the command line program, Triangle, you can specify that you want
  % to refine an existing mesh AND constrain the triangulation. I'm not sure
  % what this means exactly as far as how the inputs used. It is not yet
  % supported here.
  %
  % Copyright 2011, Alec Jacobson (jacobson@inf.ethz.ch)
  %
  % See also: delaunay, DelaunayTri
  %

  % default values
  quality = -1;
  max_area = -1;
  no_boundary_steiners = false;
  no_edge_steiners = false;
  max_steiners = -1;
  quiet = true;
  % possible actions are:
  %   'TriangulatePoly'
  %   'RefineMesh'
  triangulate_poly = false;
  triangulate_existing = false;
  refine_mesh = false;
  neighbors = nargout >= 3;
  voronoi = nargout >= 4;
  flags = '';

  % parse inputs
  if nargin >=1 && ischar(varargin{1})
    filename = varargin{1};
    % strip file extension to get prefix
    if ~isempty(regexp(filename,'\.poly$'))
      prefix = regexprep(filename,'\.poly$','');
      triangulate_poly = true;
    elseif ~isempty(regexp(filename,'\.node$'))
      prefix = regexprep(filename,'\.node$','');
    else
      prefix = file_name;
    end