Построение на сообщении Varkhan, что определенный для Pentium собственный код добился бы большего успеха:
jBLAS: этапный альфой проект с обертками JNI для Атласа: http://www.jblas.org .
MTJ: Другой такой проект: http://code.google.com/p/matrix-toolkits-java/
Для Markdown -> HTML , есть Showdown
Сам StackOverflow использует язык Markdown для вопросов и ответов; вы пытались посмотреть, как это работает?
Ну, похоже, что он использует PageDown , который доступен по лицензии MIT
Вопрос Есть ли хорошая библиотека или элемент управления Markdown Javascript? и ответы на него тоже могут помочь :-)
Полный редактор - это, конечно, не совсем то, о чем вы просили; но они должны использовать какую-то функцию для преобразования кода Markdown в HTML; и, в зависимости от лицензии этих редакторов, вы можете повторно использовать эту функцию ...
На самом деле, если вы внимательно посмотрите на Showdown, в его исходном коде (файл showdown.js) , вы найдете эту часть комментария:
//
// Showdown usage:
//
// var text = "Markdown *rocks*.";
//
// var converter = new Showdown.converter();
// var html = converter.makeHtml(text);
//
// alert(html);
//
// Note: move the sample code to the bottom of this
// file before uncommenting it.
//
Это не синтаксис jQuery, но его довольно легко интегрировать в ваше приложение; -)
О Textile, кажется, что что-то найти немного сложнее полезно: - (
С другой стороны, HTML -> Markdown,
Этот вопрос показался мне интригующим, поэтому я решил начать что-нибудь (только заменяет сильные
и курсив
теги уценки). Потратив час на попытки разработать решение с использованием регулярных выражений, я сдался и получил следующее, которое, кажется, работает хорошо. Тем не менее, его, безусловно, можно оптимизировать, и я не уверен, насколько устойчивым в реальном мире он будет в этой форме:
function mdToHtml(str) {
var tempStr = str;
while(tempStr.indexOf("**") !== -1) {
var firstPos = tempStr.indexOf("**");
var nextPos = tempStr.indexOf("**",firstPos + 2);
if(nextPos !== -1) {
var innerTxt = tempStr.substring(firstPos + 2,nextPos);
var strongified = '<strong>' + innerTxt + '</strong>';
tempStr = tempStr.substring(0,firstPos) + strongified + tempStr.substring(nextPos + 2,tempStr.length);
//get rid of unclosed '**'
} else {
tempStr = tempStr.replace('**','');
}
}
while(tempStr.indexOf("*") !== -1) {
var firstPos = tempStr.indexOf("*");
var nextPos = tempStr.indexOf("*",firstPos + 1);
if(nextPos !== -1) {
var innerTxt = tempStr.substring(firstPos + 1,nextPos);
var italicized = '<i>' + innerTxt + '</i>';
tempStr = tempStr.substring(0,firstPos) + italicized + tempStr.substring(nextPos + 2,tempStr.length);
//get rid of unclosed '*'
} else {
tempStr = tempStr.replace('*','');
}
}
return tempStr;
}
Тестовый код:
var s = "This would be *italicized* text and this would be **bold** text, This would be *italicized* text and this would be **bold** text, This would be *italicized* text and this would be **bold** text";
alert(mdToHtml(s));
Вывод:
This would be <i>italicized</i>text and this would be <strong>bold</strong> text, This would be <i>italicized</i>text and this would be <strong>bold</strong> text, This would be <i>italicized</i>text and this would be <strong>bold</strong> text
РЕДАКТИРОВАТЬ: Новое в версии V 0.024 - Автоматическое удаление незакрытых тегов уценки
Здесь вы можете найти, казалось бы, очень хорошую реализацию Textile на языке Javascript, и ещё одну там (может быть, не очень хорошую, но у неё есть хорошая страница с примером преобразования в вашем стиле).
Примечание: есть ошибка в первой реализации, на которую я сделал ссылку: горизонтальные столбики отображаются некорректно. Чтобы исправить ее, можно добавить в файл следующий код.
for(i=0;i<lines.length;i++) {
// Add code :Start
if (lines[i].match(/\s*-{4,}\s*/)){
html+="<hr/>\n";
continue;
}
// Add code :End
if (lines[i].indexOf("[") == 0) {continue;}
//...
Легко использовать Showdown с jQuery или без него . Вот пример jQuery:
// See http://mathiasbynens.be/notes/showdown-javascript-jquery for a plain JavaScript version as well
$(function() {
// When using more than one `textarea` on your page, change the following line to match the one you’re after
var $textarea = $('textarea'),
$preview = $('<div id="preview" />').insertAfter($textarea),
converter = new Showdown.converter();
$textarea.keyup(function() {
$preview.html(converter.makeHtml($textarea.val()));
}).trigger('keyup');
});