taT4Nix | Transform HTML to WIKI using GNU sed

Recently, I have joined the forums – http://unix.stackexchange.com/ where I came across the following question;

http://unix.stackexchange.com/questions/11448/how-to-convert-a-href-http-xy-comxy-a-to-http-xy-com-xy

In simple words, this is what was required;

<a href="something">sometext</a>
# transforms into the following wiki markup
[something sometext]

Here’s what I feel should be done using GNU sed;

sed -r 's,<a\s+href=\"([^>]*)\">([^<]*)</a>,[\1 \2],g'

The curve-brackets helps in grouping pattern-matching data, which is then used-by back-references (eg. \1, \2, etc.)
So, in our scenario, we could identify two logical groups;

  1. Data between ‘<a href=”‘ and ‘”>’
  2. Data between ‘”>’ and ‘</a>’

Once groups are identified, using sed back-references, one can format it the way particular wiki markup requires.

Project NbCreole

http://kenai.com/projects/nbcreole

Folks,

I have setup this project at Kenai DOT com, you may click the image above to get directed to the project website. Currently, features enabled are Wiki, Chatroom (using Pidgin/NetBeans IDE), Mailing lists and Issue Tracker.

Today, I have just added the sources for the NetBeans Project (Java Application) created using the sources provided by the Eclipse Project (XmlCreator), hosted at Sourceforge. I have made some changes in few classes and have created an Ant Task, as discussed yesterday.

This project is close to my heart and main objective is to create a suite of modules that could integrate into the NetBeans IDE. I am not sure about the timeline, however I will keep blogging about the same over this blog. Also, I’m not looking for new members for the project.

However, I’m more keen on learning the technologies that will help me complete the objective. Technologies will comprise of ANTLR, NetBeans Platform, Java, XML, XSLT, etc. Anyways, you’re welcome to join the mailing lists and provide comments/suggestions.

Update: As of July 2010, this project has been scrapped.

Wiki to XML using Ant

Folks,

I have been working hard for the past few days, so that I could write an Ant task that could simplify the task of converting WikiCreole Markup to XML format. This conversion was made possible due to the efforts of Martin Junghans and Dirk Riehle. They did research on this subject. As a result, they created an EBNF grammar and an XML interchange format (Creole 1.0).

Brief History

A fried of mine had checkout the sources from SourceForge, this year. Firstly, he used ANTLR to generate the Lexer and Parser files from given grammar file, using a system that had atleast 2 GB RAM.

He re-used the code and made few new classes, just for the sake of running the project and checking the workflow. It worked, sample files having wikicreole markup content were converted to XML format using the XML Schema, defined in Riehle’s and Martin’s second research paper.

CreoleTask

As I want to create support for the same in the NetBeans IDE. The NetBeans IDE makes good use of Ant and Maven, so I wanted to create a task of my own that will take care of the necessary classes that are required to make it possible to convert Wiki to XML. Today, I spent time learning about writing Ant Tasks and this is what I got;

public class CreoleTask extends Task {

 private String gLoc = "creole10.g";
 private String wikipage;

 @Override
 public void execute() throws BuildException {
   ParserHandler ph = new ParserHandler(new Grammar(gLoc));
   if (wikipage == null) {
     throw new BuildException("File not found..");
   }
   wikipage = wikipage.replace('/', '\\');
   log("Importing wikipage " + this.wikipage);
   ph.parseWp(this.wikipage);
 }

 public void setWikipage(String wikipage) {
   this.wikipage = wikipage;
 }
}

Now, what I need is the JAR that contains CreoleTask.class. So, I created a Java Application using NetBeans IDE and opened its build.xml;

<project name="CreoleAnt" default="default" basedir=".">
    <description>Builds, tests, and runs the project CreoleAnt.</description>
    <import file="nbproject/build-impl.xml"/>
</project>

This file contains comments as well;

There exist several targets which are by default empty and which can be used for execution of your tasks. These targets are usually executed before and after some main targets.

I have done this before, i.e. I override an empty target to deploy war file on build. Today, I overriden target -post-jar and added the following;

    <property name="wiki.dir" value="${basedir}/wikipages"/>    

    <target name="-post-jar" depends="-init-project">
        <antcall target="-xml-to-creole"/>
    </target>

    <target name="-xml-to-creole">
        <taskdef name="creole" classname="creole.ant.CreoleTask"
        classpath="${dist.jar}"/>
        <creole wikipage="${wiki.dir}/description"/>
    </target>

As you can see, I added a dependency on target -init-project, that’s because I wanted to reuse the property created in project.properties by NetBeans IDE. In my case, I reused¬† dist.jar property and created new one, wiki.dir. So, I have kept few samples in wikipages directory under the basedir, i.e. project’s root directory. Now, I define a task with the name creole which maps to CreoleTask.

Attribute wikipage maps to setter method of private variable wikipage. Its not a bean class, so its not necessary that the setter method relates to the private members. As shown above, I have passed ${wiki.dir}/description.txt as parameter to the setter method and that’s used by execute method. This method is overriden to run your own code. Its called automatically by Ant, whenever there’s tag present for the defined task.

Its just the beginning, exploration continues!

<property name=”wiki.dir” value=”${basedir}/wikipages”/><target name=”-post-jar” depends=”-init-project”>
<antcall target=”-creole-to-html”/>
</target><target name=”-xml-to-creole”>
<taskdef name=”creole” classname=”creole.ant.CreoleTask”
classpath=”${dist.jar}”/>
<creole wikipage=”${wiki.dir}/description”/>
</target>

WikiCreole, XML and NetBeans IDE

Aug 25, 2008

I had asked a simple question to the NetBeans Community, Are you fed up of using Wiki? Feedback I got was good, if not great. Almost everyone was in favor of the plug in, I wanted to create that would enable editing wikis within NetBeans IDE.

Sep 03, 2008

Just a week later, I thought of sharing some ideas and information, I had by discussing with people on IRC, mailing lists, surfing the web and by reflecting on my experiences working with Multiview editors, not necessarily in NetBeans IDE.

Today,

I just wanted to tell you that, I have researched about the project idea, sporadically for the past 1 year. However, I am once again interested in creating such plugin that would enable you to edit wikis within the NetBeans IDE.

So, stay tuned to this blog for more updates on the project. You may read the above blogs for history of the project, which has not even started yet.

Blog Series (Contd…)
This is the 3rd part of the blog series initiated last year at http://nbguru.wordpress.com/