Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/MarkdownService.java')
-rw-r--r--org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/MarkdownService.java148
1 files changed, 148 insertions, 0 deletions
diff --git a/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/MarkdownService.java b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/MarkdownService.java
new file mode 100644
index 00000000..788585f8
--- /dev/null
+++ b/org.eclipse.egit.github.core/src/org/eclipse/egit/github/core/service/MarkdownService.java
@@ -0,0 +1,148 @@
+/******************************************************************************
+ * Copyright (c) 2012 GitHub Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Kevin Sawicki (GitHub Inc.) - initial API and implementation
+ *****************************************************************************/
+package org.eclipse.egit.github.core.service;
+
+import static org.eclipse.egit.github.core.client.IGitHubConstants.CHARSET_UTF8;
+import static org.eclipse.egit.github.core.client.IGitHubConstants.SEGMENT_MARKDOWN;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.egit.github.core.IRepositoryIdProvider;
+import org.eclipse.egit.github.core.client.GitHubClient;
+
+/**
+ * Service to request Markdown text to be rendered as HTML
+ *
+ * @see <a href="http://developer.github.com/v3/markdown/">GitHub Markdown API
+ * documentation</a>
+ */
+public class MarkdownService extends GitHubService {
+
+ /**
+ * GitHub-flavored Markdown mode
+ */
+ public static final String MODE_GFM = "gfm";
+
+ /**
+ * Default Markdown mode
+ */
+ public static final String MODE_MARKDOWN = "markdown";
+
+ /**
+ * Create Markdown service
+ */
+ public MarkdownService() {
+ super();
+ }
+
+ /**
+ * Create Markdown service for client
+ *
+ * @param client
+ */
+ public MarkdownService(final GitHubClient client) {
+ super(client);
+ }
+
+ private String readStream(final InputStream stream) throws IOException {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(
+ stream, CHARSET_UTF8));
+ try {
+ StringBuilder output = new StringBuilder();
+ char[] buffer = new char[8192];
+ int read;
+ while ((read = reader.read(buffer)) != -1)
+ output.append(buffer, 0, read);
+ return output.toString();
+ } finally {
+ try {
+ reader.close();
+ } catch (IOException ignored) {
+ // Ignored
+ }
+ }
+ }
+
+ /**
+ * Get stream of HTML for given Markdown text scoped to given repository
+ * context
+ *
+ * @param repo
+ * @param text
+ * @return stream of HTML
+ * @throws IOException
+ */
+ public InputStream getRepositoryStream(final IRepositoryIdProvider repo,
+ final String text) throws IOException {
+ String context = getId(repo);
+
+ Map<String, String> params = new HashMap<String, String>(3, 1);
+ params.put("context", context);
+ params.put("text", text);
+ params.put("mode", MODE_GFM);
+
+ return client.postStream(SEGMENT_MARKDOWN, params);
+ }
+
+ /**
+ * Get HTML for given Markdown text scoped to given repository context
+ *
+ * @param repo
+ * @param text
+ * @return HTML
+ * @throws IOException
+ */
+ public String getRepositoryHtml(final IRepositoryIdProvider repo,
+ final String text) throws IOException {
+ return readStream(getRepositoryStream(repo, text));
+ }
+
+ /**
+ * Get stream of HTML for given Markdown text
+ * <p>
+ * Use {@link #getRepositoryStream(IRepositoryIdProvider, String)} if you
+ * want the Markdown scoped to a specific repository.
+ *
+ * @param text
+ * @param mode
+ * @return stream of HTML
+ * @throws IOException
+ */
+ public InputStream getStream(final String text, final String mode)
+ throws IOException {
+ Map<String, String> params = new HashMap<String, String>(2, 1);
+ params.put("text", text);
+ params.put("mode", mode);
+
+ return client.postStream(SEGMENT_MARKDOWN, params);
+ }
+
+ /**
+ * Get HTML for given Markdown text
+ * <p>
+ * Use {@link #getRepositoryHtml(IRepositoryIdProvider, String)} if you want
+ * the Markdown scoped to a specific repository.
+ *
+ * @param text
+ * @param mode
+ * @return HTML
+ * @throws IOException
+ */
+ public String getHtml(final String text, final String mode)
+ throws IOException {
+ return readStream(getStream(text, mode));
+ }
+}

Back to the top