1. C++ / Говнокод #24904

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    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, 12 Октября 2018

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

    • Переведи на "PHP".
      Ответить
    • curl "https://example.com/" | app > output.txt
      Ответить
      • не догнал
        Ответить
      • можешь на примере этого кода своять?
        Ответить
      • Еще затык в том, что Мозила, хоть и написана на С++, но такой код конкретно не пропускает. Нужны объявления всех функций и переменных, инициализация и тп. А также использование указателей, потому как, по другому она не понимает.
        Ответить
    • https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Glue_classes/nsAString/Replace
      Ответить
      • замечательно,
        как это реализовать?
        вот по железякам - это ко мне, а прописать код- нужна помощь
        Ответить
        • Ты же хотел в 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;
               }
            Ответить
            • Я хз, для меня это китайска грамоьа.
              Ответить

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