getList() {
+ if(currentBlock != null) {
+ blocks.add(currentBlock);
+ }
+ currentBlock = null;
+ return blocks;
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/BlockType.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/BlockType.java
new file mode 100644
index 0000000..40b95ac
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/BlockType.java
@@ -0,0 +1,158 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+/**
+ *
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ */
+
+enum BlockType {
+
+ H1("Heading 1", true),
+ H2("Heading 2", true),
+ H3("Heading 3", true),
+ H4("Heading 4", true),
+ H5("Heading 5", true),
+ H6("Heading 6", true),
+ LIST("List", false),
+ BLANK("Blank line", true),
+ P("Paragraph", false),
+ TABLE("Table", false),
+ PARSER("Parser", false),
+ HR("Horizontal rule", false),
+ CONTENT("Content", false),
+ COMMENT("Comment", false);
+
+ private String description;
+ private boolean oneLined;
+
+ BlockType(String string, boolean oneLined) {
+ this.description = string;
+ this.oneLined = oneLined;
+ }
+
+ static BlockType getBlockType(String line) {
+ if(line.isEmpty()) {
+ return BlockType.BLANK;
+ }
+ if(lineIsH1(line)) {
+ return BlockType.H1;
+ }
+ if(lineIsH2(line)) {
+ return BlockType.H2;
+ }
+ if(lineIsH3(line)) {
+ return BlockType.H3;
+ }
+ if(lineIsH4(line)) {
+ return BlockType.H4;
+ }
+ if(lineIsH5(line)) {
+ return BlockType.H5;
+ }
+ if(lineIsH6(line)) {
+ return BlockType.H6;
+ }
+ if(lineIsList(line)) {
+ return BlockType.LIST;
+ }
+
+ if(lineIsTable(line)) {
+ return BlockType.TABLE;
+ }
+ if(lineIsParser(line)) {
+ return BlockType.PARSER;
+ }
+ if(lineIsHR(line)) {
+ return BlockType.HR;
+ }
+ if(lineIsComment(line)) {
+ return BlockType.COMMENT;
+ }
+
+ return BlockType.P;
+ }
+
+ private static boolean lineIsH1(String line) {
+ return line.startsWith(WikiMarks.HEADING1_START);
+ }
+
+ private static boolean lineIsH2(String line) {
+ return line.startsWith(WikiMarks.HEADING2_START);
+ }
+
+ private static boolean lineIsH3(String line) {
+ return line.startsWith(WikiMarks.HEADING3_START);
+ }
+
+ private static boolean lineIsH4(String line) {
+ return line.startsWith(WikiMarks.HEADING4_START);
+ }
+
+ private static boolean lineIsH5(String line) {
+ return line.startsWith(WikiMarks.HEADING5_START);
+ }
+
+ private static boolean lineIsH6(String line) {
+ return line.startsWith(WikiMarks.HEADING6_START);
+ }
+
+ private static boolean lineIsList(String line) {
+ line = " " + line.trim();
+ return line.startsWith(WikiMarks.UNORDERED_LIST) || line.startsWith(WikiMarks.ORDERED_LIST);
+ }
+
+ private static boolean lineIsTable(String line) {
+ return line.startsWith(WikiMarks.TABLE_BORDER);
+ }
+
+ private static boolean lineIsParser(String line) {
+ return line.startsWith(WikiMarks.PARSER_START);
+ }
+
+ private static boolean lineIsHR(String line) {
+ return line.startsWith(WikiMarks.HORIZONTAL_RULE_4);
+ }
+
+ private static boolean lineIsComment(String line) {
+ return line.startsWith(WikiMarks.COMMENT_LINE_BEGINNING);
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public boolean isOneLined() {
+ return this.oneLined;
+ }
+
+ public static boolean isIn(BlockType blockType, BlockType... blockTypes) {
+ for (BlockType e : blockTypes) {
+ if(e == blockType) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/HtmlTags.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/HtmlTags.java
new file mode 100644
index 0000000..c60e5bd
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/HtmlTags.java
@@ -0,0 +1,117 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+/**
+ * Here goes the description of this class.
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ */
+public class HtmlTags {
+
+ /**
+ * Logger for this class.
+ */
+ private static final org.nanoboot.powerframework.log.Logger LOG = org.nanoboot.powerframework.log.Logger.getLogger(HtmlTags.class);
+
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ static final String B_START = "";
+ public static final String B_END = "";
+ public static final String I_START = "";
+ public static final String I_END = "";
+ public static final String U_START = "";
+ public static final String U_END = "";
+ public static final String COLOURED_START = "";
+ public static final String COLOURED_END = "";
+ public static final String BACKGROUND_HIGHLIGHTED_START = "";
+ public static final String BACKGROUND_HIGHLIGHTED_END = "";
+ public static final String SUPER_SCRIPT_START = "";
+ public static final String SUPER_SCRIPT_END = "";
+ public static final String SUB_SCRIPT_START = "";
+ public static final String SUB_SCRIPT_END = "";
+ public static final String MONOSPACE_START = "";
+ public static final String MONOSPACE_SCRIPT_END = "";
+ public static final String STROKE_START = "";
+ public static final String STROKE_END = "";
+ public static final String SMALLER_START = "";
+ public static final String SMALLER_END = "";
+ public static final String LARGER_START = "";
+ public static final String LARGER_END = "";
+ public static final String LINK = "%s";
+ public static final String EMBED_IMG = "
";
+ public static final String SIZE_START = "";
+ public static final String SIZE_END = "";
+
+ public static final String H1_START = "";
+ public static final String H1_END = "
";
+ public static final String H2_START = "";
+ public static final String H2_END = "
";
+ public static final String H3_START = "";
+ public static final String H3_END = "
";
+ public static final String H4_START = "";
+ public static final String H4_END = "
";
+ public static final String H5_START = "";
+ public static final String H5_END = "
";
+ public static final String H6_START = "";
+ public static final String H6_END = "
";
+
+ public static final String OL_START = "";
+ public static final String OL_END = "
";
+ public static final String UL_START = "";
+ public static final String UL_END = "
";
+ public static final String LI_START = "";
+ public static final String LI_END = "";
+ public static final String P_START = "";
+ public static final String P_END = "
";
+
+ public static final String TABLE_START = "";
+ public static final String TABLE_END = "
";
+ public static final String TR_START = "";
+ public static final String TR_END = "
";
+ public static final String TH_START = "";
+ public static final String TH_END = " | ";
+ public static final String TD_START = "";
+ public static final String TD_END = " | ";
+
+ public static final String HR4 = "
";
+ public static final String HR5 = "
";
+ public static final String HR6 = "
";
+ public static final String HR7 = "
";
+ public static final String HR8 = "
";
+ public static final String HR9 = "
";
+ public static final String HR10 = "
";
+
+ public static final String COMMENT_TEMPLATE = "";
+
+ /**
+ * Constructor
+ *
+ * Not meant to be instantiated.
+ */
+ private HtmlTags() {
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/Macro.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/Macro.java
new file mode 100644
index 0000000..d7d9fed
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/Macro.java
@@ -0,0 +1,63 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+/**
+ * Here goes the description of this class.
+ *
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ */
+
+public class Macro {
+
+ /**
+ * Logger for this class.
+ */
+ private static final org.nanoboot.powerframework.log.Logger LOG = org.nanoboot.powerframework.log.Logger.getLogger(Macro.class);
+
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ /**
+ * Field description
+ */
+ private String content;
+ private final String value;
+
+ /**
+ * Constructor
+ *
+ * Constructor description
+ */
+ public Macro(String content, TextProcessorI processor) {
+ this.content = content;
+ this.value = processor.process(content);
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/StringSource.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/StringSource.java
new file mode 100644
index 0000000..2b23885
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/StringSource.java
@@ -0,0 +1,75 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+/**
+ * Here goes the description of this class.
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ *
+ */
+public class StringSource {
+
+ /**
+ * Logger for this class.
+ */
+ private static final org.nanoboot.powerframework.log.Logger LOG = org.nanoboot.powerframework.log.Logger.getLogger(StringSource.class);
+
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ /**
+ * Field description
+ */
+ private String string;
+ private int position = 0;
+
+ /**
+ * Constructor
+ *
+ */
+ public StringSource(String string) {
+ this.string = string;
+ }
+
+ public char getNext() {
+ return string.charAt(position++);
+ }
+
+ public char getLast() {
+ if(position - 1 == 0) {
+ return ' ';
+ }
+ return string.charAt(position - 1);
+ }
+
+ public boolean hasNext() {
+ return position <= string.length() - 1;
+ }
+
+ public char get(int number) {
+ return string.charAt(position + number);
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/TextFormatter.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/TextFormatter.java
new file mode 100644
index 0000000..e560e48
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/TextFormatter.java
@@ -0,0 +1,81 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+/**
+ * Here goes the description of this class.
+ *
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ *
+ */
+public class TextFormatter {
+
+ /**
+ * Logger for this class.
+ */
+ private static final org.nanoboot.powerframework.log.Logger LOG = org.nanoboot.powerframework.log.Logger.getLogger(TextFormatter.class);
+
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ /**
+ * Field description
+ */
+ private String name;
+
+ /**
+ * Constructor
+ *
+ * Not meant to be instantiated.
+ */
+ private TextFormatter() {
+ }
+
+ public static String format(String text) {
+ StringSource stringSource = new StringSource(text);
+ StringBuilder out = new StringBuilder();
+ StringBuilder buffer = new StringBuilder();
+ while (stringSource.hasNext()) {
+ char ch = stringSource.getNext();
+
+ if(ch == '[' && stringSource.getLast() == '[') {
+ ch = stringSource.getNext();
+ while (!(ch == ']' && stringSource.get(1) == ']')) {
+ buffer.append(ch);
+ if(!stringSource.hasNext()) {
+ break;
+ }
+ ch = stringSource.getNext();
+ }
+ out.append(buffer.toString());
+ buffer.delete(0, buffer.length());
+ };
+
+ }
+
+ return out.toString();
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/TextProcessorI.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/TextProcessorI.java
new file mode 100644
index 0000000..8d44412
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/TextProcessorI.java
@@ -0,0 +1,34 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+/**
+ *
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ */
+public interface TextProcessorI {
+
+ public String process(String text);
+
+ public String getName();
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiException.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiException.java
new file mode 100644
index 0000000..f825fda
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiException.java
@@ -0,0 +1,53 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+import org.nanoboot.powerframework.core.PowerException;
+
+/**
+ * Here goes the description of this class.
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ *
+ */
+public class WikiException extends PowerException {
+
+ /**
+ * Logger for this class.
+ */
+ private static final org.nanoboot.powerframework.log.Logger LOG = org.nanoboot.powerframework.log.Logger.getLogger(WikiException.class);
+
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ /**
+ * Field description
+ */
+ private String name;
+
+ public WikiException(String messageIn) {
+ super(messageIn);
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiMarks.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiMarks.java
new file mode 100644
index 0000000..df0d2ba
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiMarks.java
@@ -0,0 +1,108 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+/**
+ * Here goes the description of this class.
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ *
+ */
+public class WikiMarks {
+
+ /**
+ * Logger for this class.
+ */
+ private static final org.nanoboot.powerframework.log.Logger LOG = org.nanoboot.powerframework.log.Logger.getLogger(WikiMarks.class);
+
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ public static final String BOLD = "\\*\\*";
+ public static final String ITALIC = "//";
+ public static final String UNDERLINED = "__";
+ public static final String COLOURED = "$$";
+ public static final String BACKGROUND_HIGHLIGHTED = "##";
+ public static final String SUPERSCRIPT = "^";
+ public static final String SUBSCRIPT = ",,";
+ public static final String MONOSPACE = "`";
+ public static final String STROKE = "--";
+ public static final String SMALLER_START = "~-";
+ public static final String SMALLER_END = "-~";
+ public static final String LARGER_START = "~+";
+ public static final String LARGER_END = "+~";
+
+ public static final String LINK_START = "[[";
+ public static final String LINK_END = "]]";
+ public static final String EMBED_START = "{{";
+ public static final String EMBED_END = "}}";
+ public static final String SIZE = "&&";
+
+ public static final String MACRO_START = "<<";
+ public static final String MACRO_END = ">>";
+
+ public static final String PARSER_START = "{{{";
+ public static final String PARSER_END = "}}}";
+
+ public static final String HEADING1_START = "= ";
+ public static final String HEADING2_START = "== ";
+ public static final String HEADING3_START = "=== ";
+ public static final String HEADING4_START = "==== ";
+ public static final String HEADING5_START = "===== ";
+ public static final String HEADING6_START = "====== ";
+ public static final String HEADING1_END = " =";
+ public static final String HEADING2_END = " ==";
+ public static final String HEADING3_END = " ===";
+ public static final String HEADING4_END = " ====";
+ public static final String HEADING5_END = " =====";
+ public static final String HEADING6_END = " ======";
+ public static final String UNORDERED_LIST = " *";
+ public static final String ORDERED_LIST = " 1.";
+ public static final String TABLE_BORDER = " || ";
+ public static final String TABLE_COLOURED = "$$$";
+ public static final String TABLE_BACKGROUND_HIGHLIGHTED = "###";
+
+ public static final String HORIZONTAL_RULE_4 = "----";
+ public static final String HORIZONTAL_RULE_5 = "-----";
+ public static final String HORIZONTAL_RULE_6 = "------";
+ public static final String HORIZONTAL_RULE_7 = "-------";
+ public static final String HORIZONTAL_RULE_8 = "--------";
+ public static final String HORIZONTAL_RULE_9 = "---------";
+ public static final String HORIZONTAL_RULE_10 = "----------";
+ public static final String COMMENT_LINE_BEGINNING = "####";
+
+ /**
+ * Field description
+ */
+ private String name;
+
+ /**
+ * Constructor
+ *
+ * Not meant to be instantiated.
+ */
+ private WikiMarks() {
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiParser.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiParser.java
new file mode 100644
index 0000000..149771f
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/WikiParser.java
@@ -0,0 +1,192 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.regex.Pattern;
+import org.nanoboot.powerframework.utils.StringUtils;
+
+/**
+ * Here goes the description of this class.
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ *
+ */
+public class WikiParser {
+
+ /**
+ * Logger for this class.
+ */
+ //private static final org.nanoboot.powerframework.logging.Logger LOG = org.nanoboot.powerframework.logging.Logger.getLogger(WikiParser.class);
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ /**
+ * Field description
+ */
+ private static TextProcessorI linkProcessor;
+ private static final Map macroProcessorsList = new HashMap<>();
+
+ /**
+ * Constructor
+ *
+ * Not meant to be instantiated.
+ */
+ public static void setLinkProcessor(TextProcessorI linkProcessorIn) {
+ linkProcessor = linkProcessorIn;
+ }
+
+ public String convertWiki(String wikiText) {
+ System.out.println("Converting wiki text:\n\n"+wikiText);
+ ArrayList blocks = splitWikiTextToBlocks(wikiText);
+ StringBuilder stringBuilder = new StringBuilder();
+ for (Block block : blocks) {
+ System.out.println("\n====================\n"+block.getBlockType()+"\n\n");
+ String html = block.toHtml();
+ System.out.println(block.getOrig());
+ System.out.println("VVVVVVVVVVVVVVVVVVVV");
+System.out.println(html);
+ stringBuilder.append(html).append('\n').append('\n');
+ }
+ String string = stringBuilder.toString();
+ return string;
+ }
+
+ public void setStyle(String string) {
+
+ }
+
+ public void addMacroProcessor(TextProcessorI macroProcessor) {
+ macroProcessorsList.put(macroProcessor.getName(), macroProcessor);
+ }
+
+ public TextProcessorI getMacroProcessor(String macroName) {
+ return macroProcessorsList.get(macroName);
+ }
+
+ @Deprecated
+ public static String convert(String wikiText) {
+
+ //System.err.println("\n\n\nWIKI" + "\n{\n" + wikiText + "\n}######$$$");
+ while (true) {
+ if(wikiText.contains(WikiMarks.BOLD)) {
+ wikiText = wikiText.replaceFirst(WikiMarks.BOLD, HtmlTags.B_START);
+ //System.err.println(String.format("Replacing %s by %s", BOLD, B_START));
+ }
+ if(wikiText.contains(WikiMarks.BOLD)) {
+ wikiText = wikiText.replaceFirst(WikiMarks.BOLD, HtmlTags.B_END);
+ //System.err.println(String.format("Replacing %s by %s", BOLD, B_END));
+ }
+
+ if(!wikiText.contains(WikiMarks.BOLD)) {
+ break;
+ }
+ }
+
+ while (true) {
+
+ if(wikiText.contains(WikiMarks.ITALIC)) {
+ wikiText = wikiText.replaceFirst(WikiMarks.ITALIC, HtmlTags.I_START);
+ //System.err.println(String.format("Replacing %s by %s", ITALIC, I_START));
+ }
+ if(wikiText.contains(WikiMarks.ITALIC)) {
+ wikiText = wikiText.replaceFirst(WikiMarks.ITALIC, HtmlTags.I_END);
+ //System.err.println(String.format("Replacing %s by %s", ITALIC, I_END));
+ }
+ if(!wikiText.contains(WikiMarks.ITALIC)) {
+ break;
+ }
+ }
+ StringBuilder stringBuilder = new StringBuilder();
+
+ ArrayList blocks = splitWikiTextToBlocks(wikiText);
+
+// StringBuilder stringBuilder2 = new StringBuilder("Adding block\n\n");
+// for (Block block : blocks) {
+// stringBuilder2.append("\n###{\n").append(block.toHtml()).append("\n}\n");
+// }
+ //System.err.println(stringBuilder2);
+// try {
+// Thread.sleep(10000);
+// } catch (InterruptedException ex) {
+// Logger.getLogger(WikiParser.class.getName()).log(Level.SEVERE, null, ex);
+// }
+ for (Block block : blocks) {
+ String html = block.toHtml();
+
+ stringBuilder.append(html).append('\n').append('\n');
+ }
+ String string = stringBuilder.toString();
+ //System.out.println("Wiki convertor returned\n\n\n{\n" + string + "\n}\n\n\n");
+ return string;
+ }
+
+ @Deprecated
+ private String processText(String text) {
+ StringSource stringSource = new StringSource(text);
+ StringBuilder out = new StringBuilder();
+ StringBuilder buffer = new StringBuilder();
+ while (stringSource.hasNext()) {
+ char ch = stringSource.getNext();
+
+ if(ch == '[' && stringSource.getLast() == '[') {
+ ch = stringSource.getNext();
+ while (!(ch == ']' && stringSource.get(1) == ']')) {
+ buffer.append(ch);
+ if(!stringSource.hasNext()) {
+ break;
+ }
+ ch = stringSource.getNext();
+ }
+ out.append(buffer.toString());
+ buffer.delete(0, buffer.length());
+ };
+
+ }
+
+ return out.toString();
+ }
+
+ @Deprecated
+ public static void replaceOccurences(StringBuilder stringBuilder, String what, String replacement) {
+ Pattern.compile(what).matcher(stringBuilder).replaceAll(replacement);
+ }
+
+ public static ArrayList splitWikiTextToBlocks(String wikiText) {
+ BlockList blockList = new BlockList();
+
+ ArrayList blocks;
+ String[] lines = StringUtils.toLines(wikiText);
+
+ for (String line : lines) {
+ blockList.addLine(line);
+ }
+ blocks = blockList.getList();
+
+ return blocks;
+ }
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/convertors/ListConvertor.java b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/convertors/ListConvertor.java
new file mode 100644
index 0000000..124c680
--- /dev/null
+++ b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/convertors/ListConvertor.java
@@ -0,0 +1,89 @@
+
+///////////////////////////////////////////////////////////////////////////////////////////////
+// power-framework: Java library with many purposes of usage.
+// Copyright (C) 2016-2022 the original author or authors.
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation;
+// version 2.1 of the License only.
+//
+// This library 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
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+///////////////////////////////////////////////////////////////////////////////////////////////
+
+package org.nanoboot.powerframework.wiki.convertors;
+
+import org.nanoboot.powerframework.core.PowerObject;
+
+/**
+ * Here goes the description of this class.
+ *
+ * @author Robert Vokac
+ * @since 0.0.0
+ *
+ */
+public class ListConvertor extends PowerObject {
+
+ /**
+ * Logger for this class.
+ */
+ private static final org.nanoboot.powerframework.log.Logger LOG = org.nanoboot.powerframework.log.Logger.getLogger(ListConvertor.class);
+
+ /**
+ * Constant description
+ */
+ private static final String CONSTANT = "constant";
+
+ /**
+ * Field description
+ */
+ private String name;
+
+ /**
+ * Constructor
+ *
+ * Not meant to be instantiated.
+ */
+ private ListConvertor() {
+ }
+
+ /**
+ * Constructor
+ *
+ * Constructor description
+ *
+ * @param nameIn
+ */
+ public ListConvertor(String nameIn) {
+ this.name = nameIn;
+ }
+
+ /**
+ * Setter for name.
+ *
+ * @param nameIn
+ */
+ public void setName(String nameIn) {
+ LOG.traceStartOfMethod(this, "setName", "name", name);
+ this.name = nameIn;
+ }
+
+ /**
+ * Getter for name.
+ *
+ * @return name
+ */
+ public String getName() {
+ LOG.traceStartOfMethod(this, "getName");
+ return this.name;
+ }
+
+
+}
diff --git a/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/macroprocessors/.gitkeep b/power-wiki/src/main/java/org/nanoboot/powerframework/wiki/macroprocessors/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/power-wiki/src/main/resources/.gitkeep b/power-wiki/src/main/resources/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/power-wiki/src/test/java/org/nanoboot/powerframework/wiki/.gitkeep b/power-wiki/src/test/java/org/nanoboot/powerframework/wiki/.gitkeep
new file mode 100644
index 0000000..e69de29