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;