File : marks-scanners-fixed.adb


-- Marks.Scanners.Fixed (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.Fixed is


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

      First : constant Natural := First_Visible (Line);
      -- Line(First_Vis) is the first non-whitespace character.
      -- Zero if the Line is pure whitespace.

   begin

      if First = 0 then
         -- A blank line.

         Markable := False;

      else

         Markable := not Begins_By (
            Prefix => Scanner.Comment_Prefix.all,
            Text   => Line(First .. Line'Last));

         if   not Markable
         and then Begins_By (
            Prefix => Scanner.Mark_Prefix.all,
            Text   => Line(First .. Line'Last))
         then
            -- This is a mark line.

            Find_Properties_And_Names (
               Text => Line(First + Scanner.Mark_Prefix'Length .. Line'Last),
               Quit => Scanner.Mark_Suffix.all);

         end if;

      end if;

   end Scan;


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

      Chosen := Option = Scanner.Option.all;
      Valid  := Chosen;

   end Handle_Option;


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

      return To_Lower (Suffix) = Scanner.File_Suffix.all;

   end Suffix_Chooses_Me;


end Marks.Scanners.Fixed;