Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрая подсветка готова, Надо потестить 
:(
    Опции темы
Sardar
Дата 7.8.2004, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 6
Всего: 317



Пару дней назад переписывался с neutrino о подсветке, я тогда сидел за плотной теорией. Вдруг все заспешили модернизировать форум, ну и я решил побыстрому написать biggrin.gif . Таблицы автомата генерил с помощью утилиты flex.

Это подсветка Java, по идее очень быстрая, 4кб кода за 63мс ИЕ, 120мс Мозилла, Опера - на моей машине. Весит мало <=10кб, но мало расшаренного кода, так что для каждого языка придется тащить 8-10кб таблиц.
Задача повставлять Java код и увидеть Internal error... или "Сообщите модератору..." красными буквами. Все найденные баги постить сюда.
Стили были предуманны в полном бреду в 2:00 ночи, Cheba сделает крассивые. Кто хочет открывает сорцы и пишет свои стили.

Сейчас в подсветке основные ключевые слова, стандартные обьекты и т.п. можно в любой момент добавить.

Тестим: http://files.vingrad.ru/Sardar/JavaParserR.htm smile.gif

Тестовые страницы: http://polygon.septima.com.ua/highlight/test_page.htm - вставляем код, жмем кнопку.
Страница форума: http://files.vingrad.ru/Sardar/highlighter/index.php.htm - просто смотрим и постим сюда результаты.



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Wowa
Дата 7.8.2004, 05:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 79
Всего: 290



Работает, действительно, очень быстро.
PM WWW   Вверх
sergejzr
Дата 7.8.2004, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 35
Всего: 360



Теперь надо было бы проверить в "реальных" условиях smile.gif

----------------------------------------------------
вот это не подсветилось совсем sad.gif
Код
A (A other)
{
  field1 = other.getField1();
  field2 = other.getField2();
 ...
}


http://forum.vingrad.ru/index.php?act=ST&f...ndpost&p=193915
---------------------------------------------------------------------------------
Извиняюсь! Там и нечему подсвечиваться smile.gif



Вот на это ушло 2 секунды на ИЕ и 1 секунда на Мозилле.
Код
import java.util.*;
import java.io.*;
import java.text.*;

class Main
{
  static LinkedList list_;
  static final String FILENAME = "angajati.data";

  static void writeFile() {
      try {
          ObjectOutput out = new ObjectOutputStream(
              new FileOutputStream(FILENAME));
          out.writeObject(list_);
      } catch (IOException e) {
          System.out.println(e);
      }
  }

  static void readFile() {
      try {
          ObjectInput input = new ObjectInputStream(
              new FileInputStream(FILENAME));
          Object tmp = input.readObject();
          /*
            if (tmp.getClass().toString() != "LinkedList")
            throw new IOException("Wrong file, dude.");
          */
          list_ = (LinkedList)tmp;
      } catch (IOException e) {
          System.out.println("!!! Caught IO exception !!!");
          System.out.println(e);
      } catch (ClassNotFoundException e) {
          System.out.println("!!! Caught ClassNotFoundException exception !!!");
          System.out.println(e);
      }
  }

  static void menuDisplay() {
      if (list_.size() == 0) {
          System.out.println("Nu sunt angajati -- bankrupt.");
          return;
      }
      ListIterator i = list_.listIterator(0);
      while (i.hasNext()) {
          Angajat a = (Angajat)i.next();
          System.out.println(a. function toString() { [native code] } toString());
      }
  }

  static void menuAdd() {
      try {
          BufferedReader dis = new BufferedReader(
              new InputStreamReader(System.in));
          Angajat a = new Angajat();

          System.out.print("Cod: ");
          a.setCod(dis.readLine());

          System.out.print("Nume: ");
          a.setNume(dis.readLine());

          System.out.print("Salar: ");
          a.setSalar(dis.readLine());

          // System.out.print("Data: ");
          // DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
          // a.setData(df.parse(dis.readLine()));

          System.out.print("Adresa: ");
          a.setAdresa(dis.readLine());

          System.out.print("Telefon: ");
          a.setTelefon(dis.readLine());

          list_.add(a);
          System.out.println("-- angajatul " + a.getNume() + " a fost adaugat");
      } catch (IOException e) {
          System.out.println("!!! IOException !!!");
          System.out.println(e);
      }
  }

  static void menuModify() {
      menuDisplay();
      try {
          BufferedReader dis = new BufferedReader(
              new InputStreamReader(System.in));
          System.out.println("Ce angajat modific? index: ");
          int index = Integer.parseInt(dis.readLine());
          Angajat a = (Angajat)list_.get(index);

          System.out.print("Cod: [" + a.getCod() + "] ");
          String str = dis.readLine();
          if (str.0length() > 0) a.setCod(str);

          System.out.print("Nume: [" + a.getNume() + "] ");
          str = dis.readLine();
          if (str.0length() > 0) a.setNume(str);

          System.out.print("Salar: [" + a.getSalar() + "] ");
          str = dis.readLine();
          if (str.0length() > 0) a.setSalar(str);

          // System.out.print("Data: [" + a.getData() + "] ");
          // DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
          // a.setData(df.parse(dis.readLine()));

          System.out.print("Adresa: [" + a.getAdresa() + "] ");
          str = dis.readLine();
          if (str.0length() > 0) a.setAdresa(str);

          System.out.print("Telefon: [" + a.getTelefon() + "] ");
          str = dis.readLine();
          if (str.0length() > 0) a.setTelefon(str);

          System.out.println("-- dosarul lui " + a.getNume() + " a fost modificat");
      } catch (IOException e) {
          System.out.println("!!! IOException !!!");
          System.out.println(e);
      }
  }

  static void menuSearch() {
      String src;
      try {
          BufferedReader dis = new BufferedReader(
              new InputStreamReader(System.in));
          System.out.println("Ce sir caut? (case sensitive): ");
          src = dis.readLine();
          ListIterator i = list_.listIterator(0);
          while (i.hasNext()) {
              Angajat a = (Angajat)i.next();
              if ( (a.getNume().indexOf(src) != -1) ||
                   (a.getCod().indexOf(src) != -1)) {
                  System.out.println(a);
                  return;
              }
          }
      } catch (IOException e) {
          System.out.println("!!! IOException !!!");
          System.out.println(e);
      }
      if (list_.size() == 0) {
          System.out.println("Nu sunt angajati -- bankrupt.");
          return;
      }
  }

  public static void showMenu() {
      while (true) {
          System.out.println("");
          System.out.println("1. Listeaza");
          System.out.println("2. Adauga");
          System.out.println("3. Modifica");
          System.out.println("4. Cauta");
          System.out.println("q. Iesire");

          try {
              int c = System.in.read();
              System.in.skip(1);

              switch (c) {
                case '1':
                  menuDisplay();
                  break;
                case '2':
                  menuAdd();
                  break;
                case '3':
                  menuModify();
                  break;
                case '4':
                  menuSearch();
                  break;
                case 'q':
                  return;
              }
          } catch (IOException e) {
              System.out.println(e);
          }
      }
  }

  public static void main(String argv[]) {
      readFile();
      showMenu();
      writeFile();
  }
};


Если в коде присутствуют ошибки (я для теста попробовал вставить вместо ява-кода яваскрипт), то время достигает 13 секунд на подсветку кода аналогичной длинны ...

Если хочешь, можно сделать что нибудь вроде http://www.iwi-iuk.org:8081/cgi-bin/vingra...ad.ru/index.php для тестов smile.gif
Для этого необходимо, чтобы твой код разбирался с форматом ХТМЛ (о чём мы уже говорили).
Стили очень понравились smile.gif

Это сообщение отредактировал(а) sergej.z - 7.8.2004, 11:12


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Sardar
Дата 7.8.2004, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 6
Всего: 317



Нашел причину тормознутости ИЕ: у него медленные массивы. Решу использованием строк.
Левый код может быть медленным - тратиться много не нужных переходов, можно ускорить, но тогда таблицы будут гораздо больше. Под вечер перепишу код, вся подсветка стент быстрее.

Заметте что она находит не закрытые коментарии и строки и предупреждает об этом smile.gif

sergej.zp подсветка работает с HTML кодом, правда решил предварительным приведением к тексту, иначе разраслись бы таблицы переходов.
У меня твой код подсветился: ИЕ:203мс, Мозилла:297мс


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
p0s0l
Дата 7.8.2004, 12:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 1
Всего: 112



В опере код sergej.z - за 1,5 с



--------------------
С уважением, г-н Посол.
PM   Вверх
Wowa
Дата 7.8.2004, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 79
Всего: 290



IE: 1,41s
PM WWW   Вверх
Cheba
Дата 7.8.2004, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 5
Всего: 62



У меня в Мозилле код от sergej.z подсвечивается за 150-250 мс. 9КБ исходника - примерно 1,200 мс. Да и то из-за его кривости. smile.gif
Добавлено @ 14:21
Sardar, у тебя слова, которые должны быть keywords не подсвечивабтся почему-то. Я работаю с тем скриптом, который ты мне прислал.
PM MAIL ICQ   Вверх
Sardar
Дата 7.8.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 6
Всего: 317



Переписал код, теперь юзаю строки а не массивы как таблицы. Мысль была что строка это массив char, а не хешь таблица. Задумка удалась, увеличение скорости в два раза, за то Мозилла присела - падение скорости в 2 раза bored.gif

Cheba возьми скрипт отсюда.

Всем кто тестирует: кидайте всякий мусор, надо получить Internal error, если ошибки не будет, то подсветка готова.

Тестируем с массивами(медленная в ИЕ): http://files.vingrad.ru/Sardar/JavaParserR.htm
Тестируем с строками(медленная в Мозилле): http://files.vingrad.ru/Sardar/JavaParserR2.htm


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Wowa
Дата 7.8.2004, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 79
Всего: 290



У меня скорость в ИЕ осталась почти прежней.
PM WWW   Вверх
Cheba
Дата 7.8.2004, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 5
Всего: 62



Так. Я сделал три стиля для Явы. Прикрутил селектор стилля.
Все это и много другое smile.gif можно посмотреть здесь: http://polygon.septima.com.ua/highlight/

Для тех, у кого скорость не сильно большая: Не нужно перезагружать страницу после выбора стиля. Немножко подождит и все будет пучком. smile.gif
PM MAIL ICQ   Вверх
Sardar
Дата 7.8.2004, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 6
Всего: 317



Cheba классно сделанно, мне понравился Mello. Зря ты назвал файлы -ie и -moz народ может не понять smile.gif Все скрипты работают во всех браузерах(кроме древних), просто одни работают в некоторых быстрее и то не на всех машинах.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Cheba
Дата 7.8.2004, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pointless one
***


Профиль
Группа: Vingrad developer
Сообщений: 1777
Регистрация: 27.11.2003
Где: /dev/null

Репутация: 5
Всего: 62



Цитата(Sardar @ 7.8.2004, 16:21)
Зря ты назвал файлы -ie и -moz народ может не понять smile.gif Все скрипты работают во всех браузерах(кроме древних), просто одни работают в некоторых быстрее и то не на всех машинах.

Это и подразумевалось. Просто нужно было их как-то различать.

Еслибы скрипт умел еще и имена функций выделять, то было бы вообще красиво. smile.gif

PM MAIL ICQ   Вверх
Wowa
Дата 7.8.2004, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 79
Всего: 290



Теперь надо выяснить какую подстветку внедрять в форум. У нас есть 2 практически законченные подстветки.

PM WWW   Вверх
Sardar
Дата 7.8.2004, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 6
Всего: 317



Цитата(Cheba)
Еслибы скрипт умел еще и имена функций выделять, то было бы вообще красиво.

Непроблема, сейчас сделаю. Всем у кого есть пожелания на счет подсветки конкретного языка: сразу договариватесь что нужно smile.gif , что бы потом не править код.
Цитата
Теперь надо выяснить какую подстветку внедрять в форум. У нас есть 2 практически законченные подстветки.

Мне кажется эта самая быстрая и возможно самая навороченная(с теоретической точки зрения еще и самая правильная smile.gif ). Её можно поставить после всех тестов.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Wowa
Дата 7.8.2004, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 79
Всего: 290



Цитата(Sardar @ 7.8.2004, 16:18)
Мне кажется эта самая быстрая и возможно самая навороченная(с теоретической точки зрения еще и самая правильная  ). Её можно поставить после всех тестов.

Интересно ее бы потестить не на отдельной странице, а на странице с форумом и сообщениями.
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Обсуждение форума | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.