From 7eafb4b1c430500877f7694238ca7da960edfe88 Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Thu, 14 Apr 2022 08:51:23 -0700 Subject: [PATCH 1/9] [somethin g.com, ] --- new_markdown.md | 2 ++ test-file.md | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 new_markdown.md diff --git a/new_markdown.md b/new_markdown.md new file mode 100644 index 000000000..e188a8a31 --- /dev/null +++ b/new_markdown.md @@ -0,0 +1,2 @@ +[Link](somethin g.com) +[Link]( ) \ No newline at end of file diff --git a/test-file.md b/test-file.md index 0f9fbc913..40760ea0d 100644 --- a/test-file.md +++ b/test-file.md @@ -1,4 +1,4 @@ # Title [link1](https://something.com) -[link2](some-thing.html) +[link2](some-thing.html) \ No newline at end of file From eb3398b3176a5f714e44e57ac791fb382b6a6bb1 Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Thu, 21 Apr 2022 08:06:46 -0700 Subject: [PATCH 2/9] commit --- MarkdownParse.java | 9 +++++++++ new_markdown.md | 3 +-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/MarkdownParse.java b/MarkdownParse.java index 5ebf83aba..0bef8e43f 100644 --- a/MarkdownParse.java +++ b/MarkdownParse.java @@ -1,9 +1,11 @@ //https://howtodoinjava.com/java/io/java-read-file-to-string-examples/ +import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; +import java.util.*; public class MarkdownParse { @@ -11,6 +13,13 @@ public static ArrayList getLinks(String markdown) { ArrayList toReturn = new ArrayList<>(); // find the next [, then find the ], then find the (, then read link upto next ) int currentIndex = 0; + File test = new File("new_markdown.md"); + Scanner scnr = new Scanner(test); + int counter; + if (scnr.hasNextLine() == false){ + + } + while(currentIndex < markdown.length()) { int openBracket = markdown.indexOf("[", currentIndex); int closeBracket = markdown.indexOf("]", openBracket); diff --git a/new_markdown.md b/new_markdown.md index e188a8a31..f8f746343 100644 --- a/new_markdown.md +++ b/new_markdown.md @@ -1,2 +1 @@ -[Link](somethin g.com) -[Link]( ) \ No newline at end of file +[Link](somethingtem t.com) From 525e7a3cd00234fac487ba0787e3a7b185eea327 Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Thu, 21 Apr 2022 08:08:19 -0700 Subject: [PATCH 3/9] testfiles --- new_markdown.md => test-file1.md | 0 test-file2 | 1 + test-file3 | 1 + 3 files changed, 2 insertions(+) rename new_markdown.md => test-file1.md (100%) create mode 100644 test-file2 create mode 100644 test-file3 diff --git a/new_markdown.md b/test-file1.md similarity index 100% rename from new_markdown.md rename to test-file1.md diff --git a/test-file2 b/test-file2 new file mode 100644 index 000000000..c89cf7757 --- /dev/null +++ b/test-file2 @@ -0,0 +1 @@ +Link(somethingtem t.com) \ No newline at end of file diff --git a/test-file3 b/test-file3 new file mode 100644 index 000000000..269808d6f --- /dev/null +++ b/test-file3 @@ -0,0 +1 @@ +[Link]() \ No newline at end of file From 39f047506e88a8eeb5a44d188419b47081f0074b Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Thu, 21 Apr 2022 08:28:26 -0700 Subject: [PATCH 4/9] commands javac -cp ".;lib\junit-4.13.2.jar;lib\hamcrest-core-1.3.jar" MarkdownParseTest.java java -cp ".;lib/junit-4.13.2.jar;lib/hamcrest-core-1.3.jar" org.junit.runner.JUnitCore MarkdownParseTest --- MarkdownParse.java | 20 +++++++++++--------- MarkdownParseTest.java | 9 +++++++++ test-file2 => test-file2.md | 0 test-file3 => test-file3.md | 0 4 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 MarkdownParseTest.java rename test-file2 => test-file2.md (100%) rename test-file3 => test-file3.md (100%) diff --git a/MarkdownParse.java b/MarkdownParse.java index 0bef8e43f..a4a2337ce 100644 --- a/MarkdownParse.java +++ b/MarkdownParse.java @@ -1,11 +1,10 @@ //https://howtodoinjava.com/java/io/java-read-file-to-string-examples/ -import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.*; +import java.util.Scanner; public class MarkdownParse { @@ -13,21 +12,23 @@ public static ArrayList getLinks(String markdown) { ArrayList toReturn = new ArrayList<>(); // find the next [, then find the ], then find the (, then read link upto next ) int currentIndex = 0; - File test = new File("new_markdown.md"); - Scanner scnr = new Scanner(test); - int counter; - if (scnr.hasNextLine() == false){ + Scanner scnr = new Scanner(markdown); - } - - while(currentIndex < markdown.length()) { + while(scnr.hasNextLine()) { int openBracket = markdown.indexOf("[", currentIndex); int closeBracket = markdown.indexOf("]", openBracket); int openParen = markdown.indexOf("(", closeBracket); int closeParen = markdown.indexOf(")", openParen); + + if (openBracket < 0 || closeBracket < 0 || openParen < 0 || closeParen < 0) { + break; + } + toReturn.add(markdown.substring(openParen + 1, closeParen)); currentIndex = closeParen + 1; + scnr.nextLine(); } + scnr.close(); return toReturn; } @@ -37,6 +38,7 @@ public static void main(String[] args) throws IOException { Path fileName = Path.of(args[0]); String content = Files.readString(fileName); ArrayList links = getLinks(content); + System.out.println("here is the link:"); System.out.println(links); } } diff --git a/MarkdownParseTest.java b/MarkdownParseTest.java new file mode 100644 index 000000000..9a608500e --- /dev/null +++ b/MarkdownParseTest.java @@ -0,0 +1,9 @@ +import static org.junit.Assert.*; +import org.junit.*; + +public class MarkdownParseTest { + @Test + public void addition(){ + assertEquals(2,1+1); + } +} diff --git a/test-file2 b/test-file2.md similarity index 100% rename from test-file2 rename to test-file2.md diff --git a/test-file3 b/test-file3.md similarity index 100% rename from test-file3 rename to test-file3.md From 03b9b2094f7bf545ecd09ba2450da4a6fbf85cc4 Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Mon, 2 May 2022 20:42:11 -0700 Subject: [PATCH 5/9] markdown --- MarkdownParse.java | 1 - MarkdownParseTest.java | 40 ++++++++++++++++++++++++++++++++++++++++ test-file2.md | 2 +- test-file3.md | 2 +- 4 files changed, 42 insertions(+), 3 deletions(-) diff --git a/MarkdownParse.java b/MarkdownParse.java index a4a2337ce..4fc83a1d4 100644 --- a/MarkdownParse.java +++ b/MarkdownParse.java @@ -38,7 +38,6 @@ public static void main(String[] args) throws IOException { Path fileName = Path.of(args[0]); String content = Files.readString(fileName); ArrayList links = getLinks(content); - System.out.println("here is the link:"); System.out.println(links); } } diff --git a/MarkdownParseTest.java b/MarkdownParseTest.java index 9a608500e..388b11512 100644 --- a/MarkdownParseTest.java +++ b/MarkdownParseTest.java @@ -1,9 +1,49 @@ import static org.junit.Assert.*; import org.junit.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.io.IOException; +import java.util.ArrayList; + public class MarkdownParseTest { + @Test public void addition(){ assertEquals(2,1+1); } + + @Test + public void testgetLinks() throws IOException { + ArrayList toReturn = new ArrayList<>(); + toReturn.add("https://something.com"); + toReturn.add("some-thing.html"); + Path fileName = Path.of("test-file.md"); + String content = Files.readString(fileName); + assertEquals(toReturn, MarkdownParse.getLinks(content)); + } + @Test + public void test1getLinks() throws IOException { + ArrayList toReturn = new ArrayList<>(); + toReturn.add("somethingtem t.com"); + Path fileName = Path.of("test-file1.md"); + String content = Files.readString(fileName); + assertEquals(toReturn, MarkdownParse.getLinks(content)); + } + @Test + public void test2getLinks() throws IOException { + ArrayList toReturn = new ArrayList<>(); + toReturn.add("somethingting.com"); + Path fileName = Path.of("test-file2.md"); + String content = Files.readString(fileName); + assertEquals(toReturn, MarkdownParse.getLinks(content)); + } + @Test + public void test3getLinks() throws IOException { + ArrayList toReturn = new ArrayList<>(); + toReturn.add(" "); + Path fileName = Path.of("test-file3.md"); + String content = Files.readString(fileName); + assertEquals(toReturn, MarkdownParse.getLinks(content)); + } } diff --git a/test-file2.md b/test-file2.md index c89cf7757..e088392df 100644 --- a/test-file2.md +++ b/test-file2.md @@ -1 +1 @@ -Link(somethingtem t.com) \ No newline at end of file +[Link](somethingting.com) \ No newline at end of file diff --git a/test-file3.md b/test-file3.md index 269808d6f..8b4ec7fe5 100644 --- a/test-file3.md +++ b/test-file3.md @@ -1 +1 @@ -[Link]() \ No newline at end of file +[Link]( ) \ No newline at end of file From add23eba4d2d90adadb96216d15709d664ef83cb Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Mon, 2 May 2022 21:00:46 -0700 Subject: [PATCH 6/9] markdown --- MarkdownParse.java | 2 +- test-file4.md | 3 +++ test-file5.md | 7 +++++++ test-file6.md | 3 +++ test-file7.md | 1 + test-file8.md | 2 ++ 6 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test-file4.md create mode 100644 test-file5.md create mode 100644 test-file6.md create mode 100644 test-file7.md create mode 100644 test-file8.md diff --git a/MarkdownParse.java b/MarkdownParse.java index 4fc83a1d4..0d6afe552 100644 --- a/MarkdownParse.java +++ b/MarkdownParse.java @@ -20,7 +20,7 @@ public static ArrayList getLinks(String markdown) { int openParen = markdown.indexOf("(", closeBracket); int closeParen = markdown.indexOf(")", openParen); - if (openBracket < 0 || closeBracket < 0 || openParen < 0 || closeParen < 0) { + if (openBracket < 0 || closeBracket < 0 || openParen > 0 || closeParen > 0) { break; } diff --git a/test-file4.md b/test-file4.md new file mode 100644 index 000000000..083728b57 --- /dev/null +++ b/test-file4.md @@ -0,0 +1,3 @@ +# title + +[]link goes here! diff --git a/test-file5.md b/test-file5.md new file mode 100644 index 000000000..03d95aa8f --- /dev/null +++ b/test-file5.md @@ -0,0 +1,7 @@ +# title + +[stuff] + +paragraph + +(page.com) \ No newline at end of file diff --git a/test-file6.md b/test-file6.md new file mode 100644 index 000000000..18e1f6ff3 --- /dev/null +++ b/test-file6.md @@ -0,0 +1,3 @@ +# title + +![link](page.com) \ No newline at end of file diff --git a/test-file7.md b/test-file7.md new file mode 100644 index 000000000..23f9c68a7 --- /dev/null +++ b/test-file7.md @@ -0,0 +1 @@ +)[ \ No newline at end of file diff --git a/test-file8.md b/test-file8.md new file mode 100644 index 000000000..8ed07127a --- /dev/null +++ b/test-file8.md @@ -0,0 +1,2 @@ +[](a link on the first line) +[ \ No newline at end of file From bac99a2c0f96d935754ee8b643394e5744be4434 Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Mon, 2 May 2022 22:16:45 -0700 Subject: [PATCH 7/9] minus one --- MarkdownParse.java | 4 ++-- images/java_bug.png | Bin 0 -> 17061 bytes 2 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 images/java_bug.png diff --git a/MarkdownParse.java b/MarkdownParse.java index 0d6afe552..49011a4d6 100644 --- a/MarkdownParse.java +++ b/MarkdownParse.java @@ -20,11 +20,11 @@ public static ArrayList getLinks(String markdown) { int openParen = markdown.indexOf("(", closeBracket); int closeParen = markdown.indexOf(")", openParen); - if (openBracket < 0 || closeBracket < 0 || openParen > 0 || closeParen > 0) { + if (openBracket < 0 || closeBracket < 0 || openParen < 0 || closeParen < 0) { break; } - toReturn.add(markdown.substring(openParen + 1, closeParen)); + toReturn.add(markdown.substring(openParen - 1, closeParen)); currentIndex = closeParen + 1; scnr.nextLine(); } diff --git a/images/java_bug.png b/images/java_bug.png new file mode 100644 index 0000000000000000000000000000000000000000..7ee775f8fe4effabd2603aa8829c8dc94eb44b28 GIT binary patch literal 17061 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 literal 0 HcmV?d00001 From 06d5ed1256f13b9158211d2213c1b3d56a7181ea Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Mon, 16 May 2022 16:21:11 -0700 Subject: [PATCH 8/9] Update MarkdownParse.java --- MarkdownParse.java | 81 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 73 insertions(+), 8 deletions(-) diff --git a/MarkdownParse.java b/MarkdownParse.java index 49011a4d6..dc20d0fad 100644 --- a/MarkdownParse.java +++ b/MarkdownParse.java @@ -1,4 +1,39 @@ +// //https://howtodoinjava.com/java/io/java-read-file-to-string-examples/ + +// import java.io.IOException; +// import java.nio.file.Files; +// import java.nio.file.Path; +// import java.util.ArrayList; +// import java.util.Scanner; + +// public class MarkdownParse { + +// public static ArrayList getLinks(String markdown) { +// ArrayList toReturn = new ArrayList<>(); +// // find the next [, then find the ], then find the (, then read link upto next ) +// int currentIndex = 0; +// Scanner scnr = new Scanner(markdown); + +// while(scnr.hasNextLine()) { +// int openBracket = markdown.indexOf("[", currentIndex); +// int closeBracket = markdown.indexOf("]", openBracket); +// int openParen = markdown.indexOf("(", closeBracket); +// int closeParen = markdown.indexOf(")", openParen); + +// if (openBracket < 0 || closeBracket < 0 || openParen < 0 || closeParen < 0) { +// break; +// } + +// toReturn.add(markdown.substring(openParen - 1, closeParen)); +// currentIndex = closeParen + 1; +// scnr.nextLine(); +// } +// scnr.close(); + +// return toReturn; +// } //https://howtodoinjava.com/java/io/java-read-file-to-string-examples/ +//https://github.com/natsukiromero/markdown-parser/blob/main/MarkdownParse.java import java.io.IOException; import java.nio.file.Files; @@ -10,30 +45,52 @@ public class MarkdownParse { public static ArrayList getLinks(String markdown) { ArrayList toReturn = new ArrayList<>(); - // find the next [, then find the ], then find the (, then read link upto next ) - int currentIndex = 0; Scanner scnr = new Scanner(markdown); - + // find the next [, then find the ], then find the (, then read link up + // to next ) + int currentIndex = 0; while(scnr.hasNextLine()) { int openBracket = markdown.indexOf("[", currentIndex); int closeBracket = markdown.indexOf("]", openBracket); int openParen = markdown.indexOf("(", closeBracket); int closeParen = markdown.indexOf(")", openParen); - if (openBracket < 0 || closeBracket < 0 || openParen < 0 || closeParen < 0) { + // to handle case where one of them loops over the file again + if (openBracket < 0 || closeBracket < 0 || openParen < 0 || + closeParen < 0) { break; } - - toReturn.add(markdown.substring(openParen - 1, closeParen)); + //check to make sure link is not an image + Boolean isImage = false; + if(openBracket != 0) { + String type = markdown.substring(openBracket - 1, openBracket); + isImage = type.equals("!"); + } + + //check that link follows format []() + int format = openParen - closeBracket; + Boolean linkFollowsFormat = true; + if(format != 1) { + linkFollowsFormat = false; + } + + // check that link is a valid link + String link = markdown.substring(openParen + 1, closeParen); + Boolean linkHasSpace = link.contains(" "); + Boolean linkHasBrackets = link.contains("["); + if(isImage == false && linkHasSpace == false && linkFollowsFormat == + true && !(link.isEmpty()) && linkHasBrackets == false) { + + toReturn.add(link); + } + currentIndex = closeParen + 1; scnr.nextLine(); } scnr.close(); - return toReturn; } - public static void main(String[] args) throws IOException { Path fileName = Path.of(args[0]); String content = Files.readString(fileName); @@ -41,3 +98,11 @@ public static void main(String[] args) throws IOException { System.out.println(links); } } + +// public static void main(String[] args) throws IOException { +// Path fileName = Path.of(args[0]); +// String content = Files.readString(fileName); +// ArrayList links = getLinks(content); +// System.out.println(links); +// } +// } From f92eeaba1c97f2e69e5b9c384c8a2223c68a136d Mon Sep 17 00:00:00 2001 From: JISOLPARK <92129615+JISOLPARK@users.noreply.github.com> Date: Sun, 22 May 2022 23:24:00 -0700 Subject: [PATCH 9/9] snippet tests --- MarkdownParseTest.java | 32 ++++++++++++++++++++++++++++++++ snippet1.md | 7 +++++++ snippet2.md | 5 +++++ snippet3.md | 24 ++++++++++++++++++++++++ 4 files changed, 68 insertions(+) create mode 100644 snippet1.md create mode 100644 snippet2.md create mode 100644 snippet3.md diff --git a/MarkdownParseTest.java b/MarkdownParseTest.java index 388b11512..a4a3d5d77 100644 --- a/MarkdownParseTest.java +++ b/MarkdownParseTest.java @@ -46,4 +46,36 @@ public void test3getLinks() throws IOException { String content = Files.readString(fileName); assertEquals(toReturn, MarkdownParse.getLinks(content)); } + @Test + public void testSnippet1() throws IOException{ + ArrayList expected = new ArrayList<>(); + expected.add("'google.com"); + MarkdownParse snippet1 = new MarkdownParse(); + Path fileName = Path.of("snippet1.md"); + String content = Files.readString(fileName); + ArrayList actual = snippet1.getLinks(fileName); + assertEquals(expected,actual); + } + @Test + public void testSnippet2() throws IOException{ + ArrayList expected = new ArrayList<>(); + expected.add("a.com"); + expected.add("a,com(())"); + expected.add("example.com"); + MarkdownParse snippet2 = new MarkdownParse(); + Path fileName = Path.of("snippet2.md"); + String content = Files.readString(fileName); + ArrayList actual = snippet2.getLinks(fileName); + assertEquals(expected,actual); + } + @Test + public void testSnippet3() throws IOException{ + ArrayList expected = new ArrayList<>(); + expected.add("https://sites.google.com/eng.ucsd.edu/cse-15l-spring-2022/schedule"); + MarkdownParse snippet3 = new MarkdownParse(); + Path fileName = Path.of("snippet3.md"); + String content = Files.readString(fileName); + ArrayList actual = snippet3.getLinks(fileName); + assertEquals(expected,actual); + } } diff --git a/snippet1.md b/snippet1.md new file mode 100644 index 000000000..1019d16bb --- /dev/null +++ b/snippet1.md @@ -0,0 +1,7 @@ +`[a link`](url.com) + +[another link](`google.com)` + +[`cod[e`](google.com) + +[`code]`](ucsd.edu) \ No newline at end of file diff --git a/snippet2.md b/snippet2.md new file mode 100644 index 000000000..3fb8eb27e --- /dev/null +++ b/snippet2.md @@ -0,0 +1,5 @@ +[a [nested link](a.com)](b.com) + +[a nested parenthesized url](a.com(())) + +[some escaped \[ brackets \]](example.com) \ No newline at end of file diff --git a/snippet3.md b/snippet3.md new file mode 100644 index 000000000..940b2cab9 --- /dev/null +++ b/snippet3.md @@ -0,0 +1,24 @@ +[this title text is really long and takes up more than +one line + +and has some line breaks]( + https://www.twitter.com +) + +[this title text is really long and takes up more than +one line]( +https://sites.google.com/eng.ucsd.edu/cse-15l-spring-2022/schedule +) + + +[this link doesn't have a closing parenthesis](github.com + +And there's still some more text after that. + +[this link doesn't have a closing parenthesis for a while](https://cse.ucsd.edu/ + + + +) + +And then there's more text \ No newline at end of file