import GPS, gps_utils

# This plug-in parses and creates BookMarks at lines like:
# pragma Title ("Parse and create");
# A menu is added to parse the current source file:
#    /Navigate/Pragma Title->Mark

# FILE        : title.py
# LAST UPDATE : 20150112
# COPYRIGHT   : (c) Pascal Pignard 2015 (except parts with named authors)
# LICENCE     : CeCILL V2 (http://www.cecill.info)
# CONTACT     : http://blady.pagesperso-orange.fr

# Cursor position saved, from Emmanuel Briot
@gps_utils.with_save_excursion
def create_bookmark_at_location(loc, name):
   loc.buffer().current_view().goto(loc)
   bm = GPS.Bookmark.create(name)
   bm.filename = loc.buffer().current_view().title()
   return bm

@gps_utils.interactive(name='convert pragma Title into Mark',
                       menu='/Navigate/Pragma Title->Mark')
def parse():
   #print "Parse02"
   source = GPS.EditorBuffer.get()
   view = source.current_view()
   #print "view title", view.title()
   for bm in GPS.Bookmark.list():
      if "filename" in dir(bm):
         #print "filename", bm.filename
         if bm.filename == view.title():
            bm.delete()
            #print bm, "deleted"
   start = source.beginning_of_buffer()
   pragma_loc = start.search("pragma[\ \t\n\r\f]*title", regexp=True, dialog_on_failure=False)
   while pragma_loc != None:
      #print pragma_loc
      pragma_name = pragma_loc[0].search('pragma[\ \t\n\r\f]*title[\ \t\n\r\f]*[(][\ \t\n\r\f]*"[^"\n\r]*"', regexp=True, dialog_on_failure=False)
      #print pragma_name
      if pragma_name != None:
         pragma_mark_name = source.get_chars(pragma_name[0], pragma_name[1]-2)
         pragma_mark_name = pragma_mark_name[pragma_mark_name.find('"')+1:]
         #print pragma_mark_name
         bm = create_bookmark_at_location(pragma_name[0], pragma_mark_name)
         #print bm, "created"
         start = pragma_name[1]
      else:
         start = pragma_loc[1]
      pragma_loc = start.search("pragma[\ \t\n\r\f]*title", regexp=True, dialog_on_failure=False)

#parse()
