スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

ソースコードに色を付けてHTMLってのをWYSIWYGで

ソースコードに色を付けてHTMLってのをWYSIWYGで出来ればいいのにな。

ホームページビルダーみたいなWebエディターだとこういう機能ないんだよな。

ソースコードに色を付けてHTML変換するツールはあるけど
ソースコードに間違えがあって修正するときとか面倒だ。

ホームページビルダーでintと打ち込むと自動的に青いintに書き変わるとか。
で、さらに続けてa文字を打ち込んでintaになると自動的に黒いintaに書き変わる。

JavaScriptで色をつけるのあるけどWYSIWYGじゃない。

ブログの機能として存在するといいなあ。

あと問題なのはTABなんだよね。
HTMLにするとTABはあきらめることになる。
スポンサーサイト
  1. 2009/01/27(火) 20:33:43|
  2. ソースをHTMLにする
  3. | コメント:0

CSharpToHTMLを改造するぞう

前回
http://wclrp.blog90.fc2.com/blog-entry-35.html

バグ発見。

よく見ると
<div class="source"></span>



オリジナルのを勝手に改造しています。
どうやらオリジナルにある現象なのか。
いまさら気がついた。

同じ内容でもついたりつかなかったりする。
逆に</span>が足りなかったりする。
前回の状態に影響されているのかな。

実はよく理解してなくて改行の処理とかを探して<BR>を付けないようにしたりしている改造なので、どう直していいかわからん。
しばらく放置します。
本当は全部を作り直して俺の好みのものに改造できたらいいんですけど、根性が足りなくて。
  1. 2007/11/21(水) 11:37:25|
  2. ソースをHTMLにする
  3. | トラックバック:0
  4. | コメント:0

CSharpToHTMLを改造するぞう

さっきの記事を載せようとして不便だったので
CSharpToHTMLをブログ用に改造してみる。

急いで改造したので問題あるかも。

CStringA ImeNu[] = {
    "http://ime.nu/http://",
    "http://ime.nu/",
    "http://nun.nu/?http://",
};


上記を入力するとHTMLを生成しブラウザを起動するのが
従来のCSharpToHTMLである。

入力の改行が自動で<BR>になるのでBRがいらない(このブログは設定でBRを自動にするか指定できる)。というか存在すると二重に改行してしまう。
<PRE>もPREによる改行と自動のBRが入るので二重に改行してしまう。

それにブログに書き込むのだからHTML,BODYとかいらない。
そしてこのブログにはCSSが設定済みである。
そこでブラウザ起動をなくし、右にブログに書き込みようの結果を表示するようにした。

改造した部分の一部を示す。
レジストリに新しい機能を使うかどうかのチェックボックスを記録するとか、GUI画面については省く。




Ctrl+Aでテキストボックス全体選択できるようにしたいな。そうすればCtrl+A Ctrl+Cでコピーが楽になる。

private static void filter(System.IO.TextReader reader, System.IO.TextWriter writer)
{
    if(brMode)
    {
        writer.Write("<div class=\"source\">");
    }
    else
    {
        header(writer);
    }
    if (OnProgressStep != null)
        OnProgressStep();
    while (reader.Peek() > -1)
    {
        bool preMode2 = preMode;
        bool brMode2 = !preMode;
        if(brMode) preMode2 = false;
        if(brMode) brMode2 = false;
        writer.WriteLine(ToHTML.filter(reader.ReadLine(), preMode2, brMode2));
        if (OnProgressStep != null)
            OnProgressStep();
    }
    if(brMode)
    {
        writer.WriteLine("</div>");
    }
    else
    {
        writer.WriteLine(ToHTML.end());
        footer(writer);
    }
    if (OnProgressStep != null)
        OnProgressStep();
}


public static string filter(string text, bool preMode, bool brMode)
{
    text            = TABtoSpace(text);
    text            = TrimEnd(text);

    System.Collections.ArrayList tokens = TokenBuilder.toTokens(text);

    string newText  = string.Empty;

    foreach (TokenBuilder.Token token in tokens)
    {
        for (int index = 0; index <= token.text.Length; index++)
        {
            State oldState  = state;
            state           = state.getState(token, index);
            if (state.isChange && !oldState.GetType().Equals(state.GetType()))
            {
                newText += oldState.closeText();
                newText += state   .openText ();
            }
            newText += toHTML(token.text, index, preMode);
        }
    }
    if (state.lineEnd())
    {
        State oldState  = state;
        state           = state.getState();
        if (state.isChange && !oldState.GetType().Equals(state.GetType()))
        {
            newText += oldState.closeText();
            newText += state   .openText ();
        }
    }
    //wclrp newText += "<br>";
    //if (! preMode) newText += "<br>";
    if (brMode) newText += "<br>";
    return newText;
}


        public static void filter(System.Windows.Forms.TextBox inBox, System.Windows.Forms.TextBox outBox)
        {
            string[] texts = inBox.Text.Split(new char[] {'\n'});


            if (OnProgressMin != null)
                OnProgressMin(0);
            if (OnProgressMax != null)
                OnProgressMax(texts.Length + 1 + 1);

            System.IO.TextReader reader = textReader(inBox.Text);
            System.IO.TextWriter writer = new System.IO.StringWriter();
            try
            {
                filter(reader, writer);
                writer.Close();
            }
            finally
            {
                reader.Close();
            }
            outBox.Text = writer.ToString();
        }

  1. 2007/11/13(火) 00:56:23|
  2. ソースをHTMLにする
  3. | トラックバック:0
  4. | コメント:0

CSharpToHTMLを改造するぞう

前に(といっても今日のことだが)以下の改造をした。
  • PREモードのとき、スペースはスペースのまま。
  • PREモードではないとき、スペースは&nbsp;に書き換える。

これに以下を追加しよう
  • PREモードのときでも、スペースは&nbsp;に書き換える。

これがちょっとてこずった。
プログラムのほとんどがstaticでできていた。
プログラムの構造をよくわからずに改造しているので合っているかわからないがどうにかできた。
モードを増やしたいがまだ判らないのでチェックボックスでbool型nbspModeにした。

改造方法

以下のようにダイアログの改造して、ソースからpreModeを検索してそれをnbspModeに置き換えたものを追加した。
CSharpToHTML_01


if (!preMode)
        newText = "&nbsp;";
else if (CtoHTML.nbspMode) //wclrp
        newText = "&nbsp;";
else
    newText  = " ";
break;

上記以外にも色々改造したが、説明しきれない。
それに漏れがあるかもしれない。


今後、改造したいことはたくさんある。
  • Webブラウザで確認しない
  • HTMLを一緒にリアルタイムで表示
  • 掲示板用に行頭と連続スペースだけ&nbsp;にする
  • 掲示板用に色つけなどの機能は無効にする
  1. 2007/02/10(土) 16:47:10|
  2. ソースをHTMLにする
  3. | トラックバック:0
  4. | コメント:0

CSharpToHTMLを改造するぞう

PREなモードではBRをつけないように修正した。

//newText += "<br>";
if (! preMode) newText += "<br>";
  1. 2007/02/10(土) 14:42:03|
  2. ソースをHTMLにする
  3. | トラックバック:0
  4. | コメント:0

CSharpToHTMLを改造するぞう

俺の能力では新規作成は無理と簡単にあきらめて(かなり期間を要したが)改造してみることにしよう。

それ以前に既に誰か改造していないのだろうか。
Javaで新たに作ったという話は見つけた。

誰か教えてくれ~
その前にここを知っている人が少ないだろうな

翔ソフトウェア (Sho's)の中の人と連絡取るべきだろうか。



PREじゃないモードのとき行頭のスペースを&nbsp;に書き換えないのを修正した。
private static string toHTML(string text, int index, bool preMode)
{
    string newText = string.Empty;
    if (index < text.Length)
    {
        switch (text[index])
        {
            case ' ' :
                // if (!preMode && index > 0 && text[index - 1] == ' ')
                if (!preMode)
                        newText = "&nbsp;";
                else
                    newText  = " ";
                break;
            case '&' : newText  = "&amp;"    ; break;
            case '<' : newText  = "&lt;"     ; break;
            case '>' : newText  = "&gt;"     ; break;
            case '\"': newText  = "&quot;"   ; break;
            default  : newText += text[index]; break;
        }
    }
    return newText;
}
  1. 2007/02/10(土) 12:35:15|
  2. ソースをHTMLにする
  3. | トラックバック:0
  4. | コメント:0

ソースをHTMLにする

C++のソースをHTMLにしたい。
ありそうで、なかなかいいのが見つからない。

ブログにソースの一部を載せたいので、C++ソースファイルで入力してHTMLファイルで出力するタイプは面倒だ。
改行に<BR>はいらない。
などなど

こういうこと言うと、じゃあお前が作れよってことになる。
ブログを書くのが目的であり、そのためのツールに何日もかけるのは正直しんどい。
それに俺は数時間で作れるものしか出来ない。
ちょいと暇なときに小さいプログラムを書くぐらいしか出来ないものでして。数日なんてかけられないんですよ。しばらく放置したら、自分のプログラムでさえチンプンカンプンです。

ソースつきで高機能なCSharpToHTMLをだいぶ前に見つけたことがあります。
でもC#なんだよなあ。
でもちょっと動作が期待するものと違うんだよなあ。
バージョンは1.02と書いてあります。

CSharpToHTMLのWebサイトは一部を残して見つからない。削除されたのかな?
2003.06.27 Ver.1.02が最後らしい。

本当は自分がメインに使うC++にしたいんだけど無理なんで、これを改造してみることにした。

話が長くなるので一旦書き込み終わりとする。
  1. 2007/02/10(土) 12:21:12|
  2. ソースをHTMLにする
  3. | トラックバック:0
  4. | コメント:0
次のページ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。