Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
93
Task/Strip-block-comments/Ada/strip-block-comments.adb
Normal file
93
Task/Strip-block-comments/Ada/strip-block-comments.adb
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
with Ada.Strings.Fixed;
|
||||
with Ada.Strings.Unbounded;
|
||||
with Ada.Text_IO;
|
||||
with Ada.Command_Line;
|
||||
|
||||
procedure Strip is
|
||||
use Ada.Strings.Unbounded;
|
||||
procedure Print_Usage is
|
||||
begin
|
||||
Ada.Text_IO.Put_Line ("Usage:");
|
||||
Ada.Text_IO.New_Line;
|
||||
Ada.Text_IO.Put_Line (" strip <file> [<opening> [<closing>]]");
|
||||
Ada.Text_IO.New_Line;
|
||||
Ada.Text_IO.Put_Line (" file: file to strip");
|
||||
Ada.Text_IO.Put_Line (" opening: string for opening comment");
|
||||
Ada.Text_IO.Put_Line (" closing: string for closing comment");
|
||||
Ada.Text_IO.New_Line;
|
||||
end Print_Usage;
|
||||
|
||||
Opening_Pattern : Unbounded_String := To_Unbounded_String ("/*");
|
||||
Closing_Pattern : Unbounded_String := To_Unbounded_String ("*/");
|
||||
Inside_Comment : Boolean := False;
|
||||
|
||||
function Strip_Comments (From : String) return String is
|
||||
use Ada.Strings.Fixed;
|
||||
Opening_Index : Natural;
|
||||
Closing_Index : Natural;
|
||||
Start_Index : Natural := From'First;
|
||||
begin
|
||||
if Inside_Comment then
|
||||
Start_Index :=
|
||||
Index (Source => From, Pattern => To_String (Closing_Pattern));
|
||||
if Start_Index < From'First then
|
||||
return "";
|
||||
end if;
|
||||
Inside_Comment := False;
|
||||
Start_Index := Start_Index + Length (Closing_Pattern);
|
||||
end if;
|
||||
Opening_Index :=
|
||||
Index
|
||||
(Source => From,
|
||||
Pattern => To_String (Opening_Pattern),
|
||||
From => Start_Index);
|
||||
if Opening_Index < From'First then
|
||||
return From (Start_Index .. From'Last);
|
||||
else
|
||||
Closing_Index :=
|
||||
Index
|
||||
(Source => From,
|
||||
Pattern => To_String (Closing_Pattern),
|
||||
From => Opening_Index + Length (Opening_Pattern));
|
||||
if Closing_Index > 0 then
|
||||
return From (Start_Index .. Opening_Index - 1) &
|
||||
Strip_Comments
|
||||
(From (
|
||||
Closing_Index + Length (Closing_Pattern) .. From'Last));
|
||||
else
|
||||
Inside_Comment := True;
|
||||
return From (Start_Index .. Opening_Index - 1);
|
||||
end if;
|
||||
end if;
|
||||
end Strip_Comments;
|
||||
|
||||
File : Ada.Text_IO.File_Type;
|
||||
begin
|
||||
if Ada.Command_Line.Argument_Count < 1
|
||||
or else Ada.Command_Line.Argument_Count > 3
|
||||
then
|
||||
Print_Usage;
|
||||
return;
|
||||
end if;
|
||||
if Ada.Command_Line.Argument_Count > 1 then
|
||||
Opening_Pattern := To_Unbounded_String (Ada.Command_Line.Argument (2));
|
||||
if Ada.Command_Line.Argument_Count > 2 then
|
||||
Closing_Pattern :=
|
||||
To_Unbounded_String (Ada.Command_Line.Argument (3));
|
||||
else
|
||||
Closing_Pattern := Opening_Pattern;
|
||||
end if;
|
||||
end if;
|
||||
Ada.Text_IO.Open
|
||||
(File => File,
|
||||
Mode => Ada.Text_IO.In_File,
|
||||
Name => Ada.Command_Line.Argument (1));
|
||||
while not Ada.Text_IO.End_Of_File (File => File) loop
|
||||
declare
|
||||
Line : constant String := Ada.Text_IO.Get_Line (File);
|
||||
begin
|
||||
Ada.Text_IO.Put_Line (Strip_Comments (Line));
|
||||
end;
|
||||
end loop;
|
||||
Ada.Text_IO.Close (File => File);
|
||||
end Strip;
|
||||
22
Task/Strip-block-comments/Crystal/strip-block-comments.cr
Normal file
22
Task/Strip-block-comments/Crystal/strip-block-comments.cr
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
def strip_comments (s, start_delim = "/*", end_delim = "*/")
|
||||
s.gsub(/#{Regex.escape(start_delim)}.*?#{Regex.escape(end_delim)}/m, "")
|
||||
end
|
||||
|
||||
puts strip_comments <<-EOF
|
||||
/**
|
||||
* Some comments
|
||||
* longer comments here that we can parse.
|
||||
*
|
||||
* Rahoo
|
||||
*/
|
||||
function subroutine() {
|
||||
a = /* inline comment */ b + c ;
|
||||
}
|
||||
/*/ <-- tricky comments */
|
||||
|
||||
/**
|
||||
* Another comment.
|
||||
*/
|
||||
function something() {
|
||||
}
|
||||
EOF
|
||||
30
Task/Strip-block-comments/R/strip-block-comments.r
Normal file
30
Task/Strip-block-comments/R/strip-block-comments.r
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
test_code <- "/**
|
||||
* Some comments
|
||||
* longer comments here that we can parse.
|
||||
*
|
||||
* Rahoo
|
||||
*/
|
||||
function subroutine() {
|
||||
a = /* inline comment */ b + c ;
|
||||
}
|
||||
/*/ <-- tricky comments */
|
||||
|
||||
/**
|
||||
* Another comment.
|
||||
*/
|
||||
function something() {
|
||||
}"
|
||||
|
||||
#Backslashes need to be handled first, then other special regex characters
|
||||
specialchars <- c("\\","*","^","+",".","!","?","(",")","[","]","{","}","$","|")
|
||||
|
||||
strip_comments <- function(s, opener, closer){
|
||||
for(char in specialchars){
|
||||
opener <- gsub(char, paste0("\\", char), opener, fixed=TRUE)
|
||||
closer <- gsub(char, paste0("\\", char), closer, fixed=TRUE)
|
||||
}
|
||||
regexp <- paste0(opener, ".*?", closer)
|
||||
gsub(regexp, "", s)
|
||||
}
|
||||
|
||||
cat(strip_comments(test_code, "/*", "*/"))
|
||||
Loading…
Add table
Add a link
Reference in a new issue