/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.karaf.shell.impl.console.commands.help.wikidoc;
import java.io.PrintStream;
import org.apache.karaf.shell.support.ansi.SimpleAnsi;
import org.apache.karaf.shell.support.table.ShellTable;
/**
* Translates the Wiki tags to Ansi escape sequences to display them on the console
*/
public class AnsiPrintingWikiVisitor implements WikiVisitor {
private PrintStream out;
private int maxSize;
private StringBuilder sb = new StringBuilder();
private String indent;
public AnsiPrintingWikiVisitor(PrintStream out, int maxSize) {
this.out = out;
this.maxSize = maxSize;
}
@Override
public void startPara(int size) {
indent = "";
while (size-- > 0) {
indent += " ";
}
}
@Override
public void endPara() {
if (sb.length() > 0) {
ShellTable table = new ShellTable().noHeaders().separator("").size(maxSize - 1);
table.column("").maxSize(indent.length());
table.column("").wrap();
table.addRow().addContent(indent, sb.toString());
table.print(out);
sb.setLength(0);
} else {
out.println();
}
}
@Override
public void heading(int level, String header) {
sb.append(SimpleAnsi.INTENSITY_BOLD)
.append(header)
.append(SimpleAnsi.INTENSITY_NORMAL);
}
@Override
public void link(String target, String title) {
sb.append(SimpleAnsi.COLOR_YELLOW)
.append(target)
.append(SimpleAnsi.COLOR_DEFAULT);
}
@Override
public void enumeration(String text) {
sb.append(" * ")
.append(SimpleAnsi.COLOR_CYAN)
.append(text)
.append(SimpleAnsi.COLOR_DEFAULT)
.append(" ");
}
@Override
public void text(String text) {
sb.append(text);
}
@Override
public void bold(boolean on) {
if (on) {
sb.append(SimpleAnsi.INTENSITY_BOLD);
} else {
sb.append(SimpleAnsi.INTENSITY_NORMAL);
}
}
}