File : marks-scanners-c.adb


-- Marks.Scanners.C (body)
--
-- Copyright (c) 2009 Tidorum Ltd.
--
-- This file is part of Find_Marks.
--
-- Find_Marks is free software: you can redistribute it and/or modify
-- it under the terms of the GNU General Public License as published by
-- the Free Software Foundation, either version 3 of the License, or
-- (at your option) any later version.
--
-- This program is distributed in the hope that it will be useful,
-- but WITHOUT ANY WARRANTY; without even the implied warranty of
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-- GNU General Public License for more details.
--
-- You should have received a copy of the GNU General Public License
-- along with this program.  If not, see <http://www.gnu.org/licenses/>.


package body Marks.Scanners.C is


   Prefix : constant String := "/**Mark";
   --
   -- The prefix that signals a mark line.


   -- overriding
   procedure Scan (
      Line     : in     String;
      Scanner  : in out C_Scanner_T;
      Markable :    out Boolean)
   is

      First : constant Natural := First_Visible (Line);
      -- The first non-whitespace character.

   begin

      if First = 0 then
         -- A blank line.

         Markable := False;

      else

         Markable := not Begins_By ("/*", Line(First .. Line'Last));

         if   not Markable
         and then Begins_By (Prefix, Line(First .. Line'Last)) then
            -- A mark line.

            Find_Properties_And_Names (
               Text => Line (First + Prefix'Length .. Line'Last),
               Quit => "*/");

         end if;

      end if;

   end Scan;


   -- overriding
   procedure Handle_Option (
      Option  : in     String;
      Scanner : in out C_Scanner_T;
      Valid   :    out Boolean;
      Chosen  :    out Boolean)
   is
   begin

     Chosen := Option = "-c";
     Valid  := Chosen;

   end Handle_Option;


   -- overriding
   function Suffix_Chooses_Me (
      Suffix  : String;
      Scanner : C_Scanner_T)
   return Boolean
   is
   begin

      return To_Lower (Suffix) = "c";

   end Suffix_Chooses_Me;


   Scanner : aliased C_Scanner_T;
   --
   -- The C-code scanner.


begin

   Register (Scanner'Access);

end Marks.Scanners.C;