tworzenie instalatora oraz bbcodes

0

Witam mam 2 następujące problemy:

  1. Muszę stworzyć prosty instalator programu. Po przejrzeniu sieci i forum zainstalowałem NSIS oraz stworzyłem przykładową instalkę. Niestety nie działa na WIN XP. Wydaje mi się że popełniam jakiś błąd między kompilacją a tworzeniem instalki. Do tej pory nie miałem okazji tworzyć cały program od 0 aż do stworzenia wersji którą można uruchomić na innym komputerze a jedynie pisanie jakiś modułów czy klas. Dlatego mam luki w tej dziedzinie. Program jest gotowy tylko mój problem jest taki co teraz zrobić żeby można było ten program uruchomić na innym komputerze. Działam na VS 2008.

2.Jak najprościej wyświetlić bbcode? tzn mam gotowy post zapisany w bbcode i po wywołaniu jakiegoś zdarzenia wyświetla mi się widok tego postu jaki będzie wyświetlany na forum..

0
  1. CO TO ZNACZY "NIE DZIAŁA"????
  2. BBCODE tu nie działa
0

z 1 problemem już sobie poradziłem

w 2 źle się wyraziłem. miałem namyśli obsługe bbcode w c#

0

co do 2 to musisz sobie napisać wyświetlenie takiego textu sam albo poszukać gotowców. Z tego co mi wiadomo to nie ma gotowej metody do tego

1

2: parsujesz sobie post, najlepiej jakimś regexem i podmieniasz bb code: [b]bold text[/b] na html: <b>bold text</b>
Do wyświetlenia w WebBrowserze.

0

tzn mam na myśli operacje w 2 strone.
Gość wpisuje zawartość posta a na zewnątrz wychodzi post w bbcodzie odpowiednio z formatowany.

zastanawiam się nad tym żeby po prostu wygląd posta wyświetlał się w przybliżeniu tego co będzie widoczne już na forum. tzn rozdzielić na 2 części. po wciśnięciu przycisku "pokaż" użytkownik widzi tak ogólnie jak będzie to wyglądać a dopiero po naciśnięciu generuj bbcode będzie dostawał gotowy kod do wklejenia.

głownie chodzi o to żeby program był w miare prosty i lekki. niestety dużo osób które być może będzie korzystać z tego programu ma uczulenie na całego .NETa..

1

Takie moje rozwiązanie (napisane teraz przez jakieś 30 minut pewnie).

Ogólnie to napisałem prosty parser i podmieniacz do bb-codes. 'jądro' konwertera wygląda tak:

        public BbCodeConverter()
        {
            this.CreateRules(
                BbCodeRule.Bold,
                BbCodeRule.Image,
                BbCodeRule.Italic,
                BbCodeRule.Underline);
        }

Gdzie BbCodeRule to zdefiniowane zasady podmieniania. Na przykład taka:

public static readonly BbCodeRule Image = new BbCodeRule("img", "<img src={0} alt=\":(\" />");

ogólnie {0} to tekst znajdujący się pomiędzy znakami bb-code czyli np. [b]ten tekst[/b]. Można by to bardzo łatwo rozszerzyć np. o składnie [quote=username]...[/quote] tak żeby tekst po = był dopasowywany do {1} ale tego nie zrobiłem.

Samo podmienianie jest trochę magicznie ale się nie starałem hamować ;)

        public string Convert(string input)
        {
            string pattern = @"\[(?<bbId>\w+)\](?<text>.*)\[/\k<bbId>\]";
            Regex regex = new Regex(pattern, RegexOptions.Multiline);

            bool anyReplaced = true;
            while (anyReplaced)
            {
                anyReplaced = false;
                input = regex.Replace(input, (match) =>
                {
                    anyReplaced = true;
                    string foundId = match.Groups["bbId"].Value;
                    if (rules.ContainsKey(foundId))
                    {
                        return rules[foundId].Format(match.Groups["text"].Value);
                    }
                    return "";
                });
            }

            return input;
        }

Pętla while byłaby niepotrzebna gdyby nie zagnieżdżone bb-cody - w takim wypadku jedno przejście nie wystarczy bo wewnętrzne zostaną pominięte.
Jeśli nie rozumiesz regexów to nic dziwnego bo wyglądają kosmicznie, ale się naucz bo to naprawdę przydatna rzecz.

I to w sumie wszystko... Został jeszcze tylko banalny kod obsługi buttona:

 private void button1_Click(object sender, EventArgs e)
        {
            string input = textBox1.Text;

            string output = converter.Convert(input);

            webBrowser1.DocumentText = output;
            textBox2.Text = output;
        }

Mam nadzieję że pomogłem, pozdrawiam.

projekt: MinimalBbCode.zip

skrinszot: Przechwytywanie.PNG

jeśli znajdziesz jakieś bugi których nie będziesz w stanie poprawić to pisz, nie testowałem dokładnie więc mogą się kryć wszędzie (to zresztą chyba pierwszy raz kiedy regex pisany z palca zadziałał od razu a to podejrzane)

1 użytkowników online, w tym zalogowanych: 0, gości: 1