Кресты / Говнокод #24904 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
#include<iostream>
#include<fstream>
#include<vector>
using namespace std;

string rec(const string str, char c){return str;}

void cer(){}

main(){
	string s,d="Text",a;
	ifstream fin;
	vector<string> mas;
fin.open("test.txt");
//if (fin.is_open()) cout<<"1";else	cout<<"0";
while(fin>>s)
	{bool f=0;
		for(int i=0; i<s.size(); ++i)
			if (s[i]==d[0])
				{
					f=1;
					for (int j=0; j<s.size()&&j<d.size(); ++j)
						if (d[j]!=s[i+j]) f=0;
					if (f)
						{
							a.clear();
							for (int j=0; j<i; ++j)
								a=a+s[j];
							a=a+"Hi";
							for (int j=i; j<s.size(); ++j)
								a=a+s[j];
						}
				}
			
			if (f)	{mas.push_back("\n");mas.push_back(a);mas.push_back("\n");}
			else mas.push_back(s);
			s=rec(s,'0');
	}
	ofstream fout;
fout.open("output.txt");
for (int i=0; i<mas.size(); ++i) fout<<mas[i]<<"\t";
}

ДД всем просветленным.
Есть код на С++ , который нормально компилируется и меняет текст в указанном файле. Вопрос: как его использовать для изменения данных при парсинге сайта. По логике Tokenizer передает лексемы в Parser для дальнейшего построения DOM. Значит надо добавить подобный код в Tokenizer, чтобы он передавал уже исправленные данные. Но на практике Tokenizer работает с Buffer(nsHtml5Tokenizer::tokenizeBuffer( nsHtml5UTF16Buffer* buffer)), причем с логическим(bool), а код для строчки из файла.
Как вариант добавить в сам Parser(nsHtml5Parser::Parse(const nsAString& aSourceBuffer, void* aKey, const nsACString& ContentType, bool aLastCall, nsDTDMode aMode) , но не могу разобраться как это сделать.
При компиляции вылетает куча ошибок.
Использованные файлы: nsHtml5Parser.cpp и nsHtml5Tokenizer.cpp, FireFox(версия 47), компилятор MSVS2013.

Запостил: DrAli DrAli, (Updated )

Комментарии (24) RSS

    • Еще затык в том, что Мозила, хоть и написана на С++, но такой код конкретно не пропускает. Нужны объявления всех функций и переменных, инициализация и тп. А также использование указателей, потому как, по другому она не понимает.
      Ответить
    • замечательно,
      как это реализовать?
      вот по железякам - это ко мне, а прописать код- нужна помощь
      Ответить
      • Ты же хотел в nsHtml5Parser::Parse код добавить, а один из его аргументов: const nsAString& aSourceBuffer, и ты в нём хочешь подменить текст, как я понял; так вот тот ссылко, что я кинул, это описание метода класса nsAString для замены подстроки, его и используй.
        Вот тута описание класса:
        https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Glue_classes/nsAString/

        Дальше сам, на этом я закончился и началась моя лень, всё. Я C++-то тольком не знаю, а тут ещё и фаерфокс, много тысяч строк и какие-то левые либы с какими то абсратыми классами.
        Ответить
        • понял правильно, мне надо чтобы при загрузке js скриптов сайта менялась часть текста скрипта. Сделать это можно через изменения кода браузера с последующей компиляцией. Но для меня это сложная задача. Заканчивай свою лень - пора двигаться в светлое будущее
          Ответить
          • Не обязательно изменять код браузера. Можно сделать прокси-сервер, который будет менять часть текстов скриптов.
            Ответить
        • как это можно использовать в моем случае
          NS_METHOD SetBlah(const nsAString &aBlah);
             nsresult MyCode()
             {
               nsresult rv;
          
               nsStringContainer sc;
               rv = NS_StringContainerInit(sc);
               if (NS_FAILED(rv))
                 return rv;
          
               const char16_t kData[] = {'x','y','z','\0'};
               rv = NS_StringSetData(sc, kData, sizeof(kData)/2 - 1);
               if (NS_SUCCEEDED(rv))
                 rv = SetBlah(sc);
          
               NS_StringContainerFinish(sc);
               return rv;
             }
          Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8