Михаиллл
Михаиллл19 января 2019 г. 5:08

Как документ RTF конвертировать в HTML

Qt, rtf, HTML, CONVERT

Добрый день.
Как документ RTF конвертировать в HTML?
Могу его открыть и прочитать так:

    QString file = QFileDialog::getOpenFileName(0, "Выберете резюме hh.ru", "", "*.rtf");
    if(!file.isEmpty())
    {
        QFile sFile(file);
        if(sFile.open(QFile::ReadOnly | QFile::Text)){
            QTextStream in(&sFile);
            //QTextDocument textDocument;
            //textDocument = in.readAll().toHtmlEscaped();
            QString text = in.readAll();
            sFile.close();

            ui->ResumeHHTextEdit->setHtml(text);
            qDebug()<<text;
        }
    }

Тут Есть подходящая библиотека. Вот , наверно, нужный dll.
Itenso.Rtf.Converter.Html.dll Itenso.Rtf.Converter.Html.dll
Но не могу его дабавить его к проекту как библиотеку, проект требует только формат .lib

Еще тут есть проект. Но не пойму, как еого использовать.
Помогите пожалуйста.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

26
Михаиллл
  • 19 января 2019 г. 5:41

хотя как динамическая Itenso.Rtf.Converter.Html.dll подключается

    Михаиллл
    • 19 января 2019 г. 10:41

    Нашел тут код конвертации:

    var
      W: Variant;
    begin
      W := CreateOleObject('Word.Application');
      W.Documents.Open('e:\test.rtf',False,False);
      W.ActiveDocument.SaveAs('e:\test.html',wdFormatHTML);
      W.ActiveDocument.CLose;
      W.Quit;
      W := UnAssigned;
    

    но это видимо синтаксис VS.
    Помогите пожалуйста переписать под QT.
    Наверно это будет примерно так:

     QString resumeFileName = QFileDialog::getOpenFileName(0, "Выберете резюме hh.ru", "", "*.rtf");
        QString saveFile = "C:/Users/MS/Downloads/Test.html";
            if(!resumeFileName.isEmpty())
            {
                  QAxObject   wordApplication("Word.Application");
                  QAxObject *documents = wordApplication.querySubObject("Documents");              
                  //QAxObject *document = documents->querySubObject("Open(const QString&, bool)", resumeFileName, true);
                  QAxObject *document = documents->querySubObject("Open(const QVariant&, bool)", resumeFileName, true);
                  QAxObject *words = document->querySubObject("Words");
                  words->querySubObject("Тут запрос конвертации");
    
                  document->dynamicCall("Close (boolean)", false);
               } 
    
    
      Михаиллл
      • 19 января 2019 г. 11:23

      извиняюсь, код на делфи, но подход наверно правильный.

        Evgenii Legotckoi
        • 19 января 2019 г. 13:08

        Добрый день.

        Я с ActiveX на Вы полностью до незнакомства. Но если поясните кое-какие моменты, то возможно у меня будет идея, которая вас натолкнёт на нужное русло. Поэтому вопрос такой.

        А Вы нашли вообще способ сохранять файлы через QAxObject? Дело в том, что тот код на Дельфи-то конечно отражает алгоритм, но библиотеки-то разные?

        Впрочем, если смотреть на то, что вы имеете, то возможно, для запроса конвертации нужно записать что-то подобное.

        words->querySubObject("SaveAs('e:\test.html', wdFormatHTML)");
        

        Но не знаю, у вас уже есть какие-нибудь примеры сохранение через QAxObject?

          Михаиллл
          • 20 января 2019 г. 8:33

          Так тоже не работает, но наверно что то похожее должно заработать.
          Что то похожее я видел тут и тут .
          Как я понял этот вариант должен работать через библиотеки Word. Запрос querySubObject должен вызвать нужную функцию.

            Михаиллл
            • 20 января 2019 г. 8:35

            Еще я видиле библиотеки на java и C#, которые могут также конывертировать. Не знаете ли вы, можно ли их использовать?

              Evgenii Legotckoi
              • 21 января 2019 г. 2:40

              Бибилотеки Java и С# можно использовать, если они будут добавлены в самостоятельную программу, которая будет работать в консольном режиме. Тогда через QProcess можно будет вызывать данную программу и выполнять конвертирование.

              Я бы попытался по возможности распарсить получаемый текст, если там удаётся извлечь хоть что-то, что походит на сколько-нибудь структурированные данные. Конечно, придётся с регулярками повозиться.

                Михаиллл
                • 21 января 2019 г. 3:11

                Похоже я нашел решение на с++
                Тут автор описывает про магическое превращение через буфер обмена средствами Word.
                Вот
                7925-Rtf2HtmlProj.zip 7925-Rtf2HtmlProj.zip
                Вот код автора:

                // Rtf2Html.cpp : Defines the entry point for the console application. 
                // 
                #include "stdafx.h" 
                #include "Rtf2Html2.h" 
                #include "afxhtml.h" 
                
                CWinApp theApp;  // Win32 App with MFC support 
                
                CRichEditCtrl g_ctlRichEdit;  // the two controls 
                CHtmlEditCtrl g_ctlEditHtml; 
                
                // This is needed to load the RichEdit control from a file 
                static DWORD CALLBACK  
                MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) 
                { 
                   CFile* pFile = (CFile*) dwCookie; 
                   *pcb = pFile->Read(pbBuff, cb); 
                   return 0; 
                } 
                
                void LoadRtfFile( LPCTSTR pszFilename ) 
                { 
                    wchar_t szFilter[] = L"RTF files (*.rtf)|*.rtf;|" 
                                         L"All Files (*.*)|*.*||"; 
                    CFileDialog dlg(TRUE,0,pszFilename,6,szFilter ); 
                    if ( dlg.DoModal()!=IDOK ) { 
                        return; 
                    } 
                    CFile cf( dlg.GetPathName(),CFile::modeRead ); 
                
                    // CFile cf( pszFilename,CFile::modeRead ); 
                    EDITSTREAM es; 
                    es.dwCookie = (DWORD)&cf; 
                    es.pfnCallback = MyStreamInCallback;  
                    g_ctlRichEdit.StreamIn( SF_RTF, es ); // load from the file 
                } 
                
                int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) 
                { 
                    AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0); 
                    AfxInitRichEdit2(); // needed for using CRichEditCtrl 
                
                    CWnd* pWnd = CWnd::GetDesktopWindow(); 
                    CRect r(0,0,200,200); 
                
                    g_ctlRichEdit.Create( ES_MULTILINE, r, pWnd, 1111); 
                    g_ctlEditHtml.Create( 0,0, r, pWnd, 2222 ); 
                
                    LoadRtfFile( argv[1] );     // read the RTF file into the ctrl  
                    g_ctlRichEdit.SetSel(0,-1); // select all in the RTF ctrl 
                    g_ctlRichEdit.Copy();       // copy to clipboard 
                    g_ctlEditHtml.Paste();      // paste into the Html Edit ctrl 
                    g_ctlEditHtml.SaveAs( L"C:\\temp\\test.html");  // save HTML 
                
                    return 0; 
                }
                

                Не могли бы вы мне помочь адаптировать это под QT

                  Evgenii Legotckoi
                  • 21 января 2019 г. 3:38

                  Call back функцию (MyStreamInCallback) можно так и копировать в проект на Qt, также функцию LoadRtfFile можно так и копировать.

                  Думаю, что здесь особо адаптировать-то нечего, просто добавить в проект на Qt все те функции, а код в _tmain вынести в какой-нибудь слот.

                    Михаиллл
                    • 21 января 2019 г. 6:16
                    • (ред.)

                    Попробовал, но QT выдает много ошибок, говорит что не знает : LPCTSTR, CFileDialog, CFile, EDITSTREAM и т.д.
                    Для того, чтобы это испраить, видимо нужны какие то файлы из MSVC.

                    Так же нашел библиотеку, скомпилированную на C# .
                    Там же и примеры на C#.
                    Вот документация по этой библиотеке.
                    Подключил эту библиотеку.
                    Пробую воспользоваться этой библиотекой, пока выходит так:

                    typedef void (*MyPrototype)(QString);
                        MyPrototype OpenDocx = (MyPrototype) rtf2HtmlLib.resolve("OpenDocx");
                        MyPrototype ToHtml = (MyPrototype) rtf2HtmlLib.resolve("ToHtml"); 
                    

                    Помогите пожалуйста разобраться с этим

                      Михаиллл
                      • 21 января 2019 г. 6:50

                      Для решения этой задачи нужно как-то использовать функцию

                      public string ConvertFileToString(
                          string inputFileName
                      )
                      Public Function ConvertFileToString ( _
                          inputFileName As String _
                      ) As String
                      

                      вот только она не статичная и не понятно как создать объект нужного класса

                        Evgenii Legotckoi
                        • 21 января 2019 г. 7:35

                        Ну не цепляются C# библиотеки в C++ коде, обратное возможно.

                          Михаиллл
                          • 21 января 2019 г. 9:48

                          Скажите пожалуйста, что же делать с ошибками незнания: LPCTSTR, CFileDialog, CFile, EDITSTREAM и прочего

                            Evgenii Legotckoi
                            • 21 января 2019 г. 9:53
                            • (ред.)

                            Это всё из MFC, нужно заменять на QFileDialog, QFile и т.д. Или подключать соответствующие библиотеки из WinAPI, что априори плохая мысль, если используется Qt. . Не работал с теми библиотеками, только с Qt.

                            Делать это строчка, за строчкой. А не сразу наскоком.

                              Михаиллл
                              • 21 января 2019 г. 11:24

                              Нашел ссылку на древние типы данных , а тут нынешние их аналоги.
                              Но все равно каое что непоня:
                              что такое : LPCTSTR, CALLBACK (наверно QDialig),IDOK, EDITSTREAM, TCHAR
                              Код у меня получился (не доработанный) такой:

                              #ifndef RTFTOHTML_H
                              #define RTFTOHTML_H
                              
                              #include <QFile>
                              #include <QDialog>
                              // Rtf2Html.cpp : Defines the entry point for the console application. 
                              // 
                              //#include "stdafx.h" 
                              //#include "Rtf2Html2.h" 
                              //#include "afxhtml.h" 
                              
                              //CWinApp theApp;  // Win32 App with MFC support 
                              
                              //CRichEditCtrl g_ctlRichEdit;  // the two controls 
                              //CHtmlEditCtrl g_ctlEditHtml; 
                              
                              // This is needed to load the RichEdit control from a file 
                              static int CALLBACK  
                               MyStreamInCallback(int dwCookie, char pbBuff, long long cb, long long *pcb) 
                              { 
                                 QFile* pFile = (QFile*) dwCookie; 
                                 *pcb = pFile->Read(pbBuff, cb); 
                                 return 0; 
                              } 
                              
                              void LoadRtfFile( LPCTSTR pszFilename ) 
                              { 
                                  wchar_t szFilter[] = L"RTF files (*.rtf)|*.rtf;|" 
                                                       L"All Files (*.*)|*.*||"; 
                                  QFileDialog dlg(true,0,pszFilename,6,szFilter ); 
                                  if ( dlg.DoModal()!=IDOK ) { 
                                      return; 
                                  } 
                                  QFile cf( dlg.GetPathName(),QFile::modeRead ); 
                              
                                  // QFile cf( pszFilename,QFile::modeRead ); 
                                  EDITSTREAM es; 
                                  es.dwCookie = (int)&cf; 
                                  es.pfnCallback = MyStreamInCallback;  
                                  g_ctlRichEdit.StreamIn( SF_RTF, es ); // load from the file 
                              } 
                              
                              int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) 
                              { 
                                  AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0); 
                                  AfxInitRichEdit2(); // needed for using CRichEditCtrl 
                              
                                  CWnd* pWnd = CWnd::GetDesktopWindow(); 
                                  CRect r(0,0,200,200); 
                              
                                  g_ctlRichEdit.Create( ES_MULTILINE, r, pWnd, 1111); 
                                  g_ctlEditHtml.Create( 0,0, r, pWnd, 2222 ); 
                              
                                  LoadRtfFile( argv[1] );     // read the RTF file into the ctrl  
                                  g_ctlRichEdit.SetSel(0,-1); // select all in the RTF ctrl 
                                  g_ctlRichEdit.Copy();       // copy to clipboard 
                                  g_ctlEditHtml.Paste();      // paste into the Html Edit ctrl 
                                  g_ctlEditHtml.SaveAs( L"C:\\temp\\test.html");  // save HTML 
                              
                                  return 0; 
                              }
                              
                              #endif // RTFTOHTML_H
                              
                              

                              помогите пожалуйста до конца разобраться с ним.
                              И скажите пожалуйста , почему не стоит использовать WinAPI, при работе с QT?

                                Михаиллл
                                • 22 января 2019 г. 3:54

                                Тут нашел
                                rtftohtml_win32.zip rtftohtml_win32.zip . Похоже она скомпилированна на С++.
                                Подключил библиотеку как динамическую.
                                Теперь пытаюсь воспользоваться методом

                                char * ConvertString(char * rtfBuf, char * htmlBuf, struct convertOptions opt) 
                                

                                Пока заготовка такая

                                typedef void (*MyPrototype)(QString);
                                    MyPrototype ConvertRtfFileToString = (MyPrototype) rtf2HtmlLib.resolve("ConvertString");
                                    QString text;
                                    text = ConvertRtfFileToString("C:/Users/MS/Desktop/Резюме/резюме/отправила - 3334709 - Дмитрий.rtf");
                                

                                Но выдает ошибку: no viable overloaded '='
                                Помогите пожалуйста воспользоваться этим методом.

                                  Evgenii Legotckoi
                                  • 22 января 2019 г. 4:06
                                  • (ред.)

                                  Там в примерах в архиве есть пример определения сигнатуры функции.

                                  typedef int (* cfunc)(char * rtffile, char *outfolder, struct convertOptions);
                                  cfunc ConvertFile;
                                  

                                  То есть сигнатура только так может объявляться. Вам нужно передать имя файла, каталог, где он находится и структуру настроек. Иначе никак. Передача QString туда никак не подойдёт.

                                  Думаю, что в документации там есть информация о параметрах в той структуре настроек.

                                    Михаиллл
                                    • 22 января 2019 г. 11:02

                                    В документации она не описанна, только в примере:

                                    struct convertOptions
                                    {
                                        int  htmlType;           //0-XHTML, 1- HTML, 2-HTML+CSS
                                        char title[120];         //Page title   
                                        char extension[10];      //for example, ".html"
                                        char fontFace[50];       //for example, "Arial" or "Times New Roman"
                                        char fontSize[10];       //for example ,"10"
                                        int  preserveImages;     //0-no, 1 - yes 
                                        int  preserveFontFace;   //0-no, 1 - yes 
                                        int  preserveFontSize;   //0-no, 1 - yes 
                                        int  preserveFontColor;  //0-no, 1 - yes 
                                        int  preserveHyperlinks;    //0-no, 1 - yes
                                        int  tableBorders;       //0-invisble, 1 - visible
                                        int  encoding;           /* Windows_1250=0, Windows_1251=1, Windows_1252=2, Windows_1253=3,
                                                                    Windows_1254=4, Windows_1255=5, Windows_1256=6, Windows_1257=7,
                                                                    Windows_1258=8, ISO_8859_1=9,   ISO_8859_2=10,  ISO_8859_3=11,
                                                                    ISO_8859_4=12,  ISO_8859_5=13,  ISO_8859_6=14,  ISO_8859_7=15,
                                                                    ISO_8859_8=16,  ISO_8859_9=17,  KOI8_R=18,      UTF_8=19    */
                                        int  htmlParts;          //0-html Complete, 1 - only between <body>..</body>
                                        char imageFolder[500];   //folder where image will be stored
                                        char cssStyleName[120];  //style name, for example "ts"
                                        int  fontSizesType;      //0-normal sizes, 1 - medium sizes, 2 - big sizes, 3 - huge sizes
                                        char imageSubfolder[120];//will create subfolder for storing images, if ""-empty string then images will be strored in 'image_folder' 
                                        int  hyperlinkTarget;    //0 - no target, 1 - target="_blank",  2 - _self, 3 - _parent, 4 - _top
                                        int  cssStartNumber;     //number for style name, like a .tsN (.ts1 or .ts100)
                                        char Serial[12];
                                    };
                                    

                                    На этой строчке

                                    ConvertFile=(cfunc)GetProcAddress(rtf2HtmlLib,"ConvertFile");
                                    

                                    Выдает ошибку : no matching function for call to 'GetProcAddress'

                                    попробовал сделать так и программа зависла

                                    ypedef int (* cfunc)(char * rtffile, char *outfolder, struct convertOptions);
                                        cfunc ConvertFile;
                                    
                                    
                                        int ret;
                                        char rtffile[_MAX_PATH];
                                        char outfolder[_MAX_PATH];
                                    
                                        //load library
                                        //HINSTANCE rtf2HtmlLib=LoadLibrary("Sautinsoft.RTFToHTML.Win32.dll");
                                    
                                        /*if(rtf2HtmlLib==NULL)
                                        {
                                          printf("Unable to load library\n");
                                          getchar();
                                          //return 0;
                                        }*/
                                        //ConvertFile=(cfunc)GetProcAddress(rtf2HtmlLib,"ConvertFile");
                                    
                                        //typedef void (*MyPrototype)(QString *rtfFile, QString *outFolder, struct convertOptions);
                                        //MyPrototype ConvertFile = (MyPrototype) rtf2HtmlLib.resolve("ConvertFile");
                                    
                                    
                                        /*if (ConvertFile==NULL)
                                        {
                                            printf("Can't load function.\n");
                                            FreeLibrary((HMODULE)rtf2HtmlLib);
                                            getchar();
                                            //return 0;
                                        }*/
                                        //
                                        printf("Please enter rtf file (example: d:\\my.rtf):\n");
                                        gets(rtffile);
                                        printf("Please enter output folder (example : d:\\temp):\n");
                                        gets(outfolder);
                                    
                                        //set conversion params
                                        struct convertOptions ct;
                                        ct.cssStartNumber=1;
                                        strcpy(ct.cssStyleName,"ts");
                                        ct.encoding=9;
                                        strcpy(ct.extension,".htm");
                                        strcpy(ct.fontFace,"Verdana");
                                        strcpy(ct.fontSize,"10");
                                        ct.htmlType=1;
                                        ct.preserveFontColor=1;
                                        ct.preserveFontFace=1;
                                        ct.preserveFontSize=1;
                                        ct.preserveImages=1;
                                        ct.preserveHyperlinks=1;
                                        ct.tableBorders=1;
                                        ct.htmlParts=0; //only between <body>...</body>
                                        strcpy(ct.title,"My Page");
                                        strcpy(ct.imageFolder,"D:\\");
                                        strcpy(ct.imageSubfolder,"test.files");
                                        ct.hyperlinkTarget=0;
                                        strcpy(ct.Serial,"Serial number");
                                    
                                    
                                        ret=ConvertFile("C:/Users/MS/Desktop/Резюме/резюме/отправила - 3334709 - Дмитрий.rtf","C:/Users/MS/Desktop/Резюме/резюме",ct);
                                    
                                        switch(ret)
                                        {
                                            case -1 : puts("Check your serial number");break;
                                            case 0 : puts("Conversion completed");break;
                                            case 2 : puts("Not enough memory"); break;
                                            case 3 : puts("Can't open output file"); break;
                                            case 4 : puts("Can't open input file"); break;
                                            case 5 : puts("The input file has zerow length"); break;
                                            default: break;
                                        }
                                        //flushall
                                        getchar();
                                    

                                    Помогите пожалуйста разобраться с этой библиотекой

                                      Evgenii Legotckoi
                                      • 22 января 2019 г. 13:19

                                      Только если на выходных гляну, у самого своих проектов до кучи, чтобы разбираться в рабочие дни с незнакомой библиотекой.

                                        Михаиллл
                                        • 23 января 2019 г. 2:54
                                        • (ред.)

                                        Зарание спасибо.
                                        А еще на эту тему можно будет сделать статью. Это контент будет уникальным.

                                          Evgenii Legotckoi
                                          • 25 января 2019 г. 7:03
                                          • (ред.)

                                          А вы случаем ту библиотеку не планируете подключать в приложение на Андроид?

                                          И вообще использовать ActiveX на андроиде?

                                            Михаиллл
                                            • 25 января 2019 г. 7:25

                                            нет, не планирую

                                              Михаиллл
                                              • 25 января 2019 г. 8:44
                                              • Ответ был помечен как решение.

                                              вот именно так работает конвертация:

                                              QVariant fileFormat(0x0000000A);     //Saving as filtered html
                                                  QString resumeFileName; //= QFileDialog::getOpenFileName(0, "Выберете резюме hh.ru", "", "*.rtf");
                                                  resumeFileName = "C:\\Users\\MS/Downloads\\Абсент.docx";
                                                  QString saveFile = "C:\\Users\\MS/Downloads\\Test.html";
                                                      if(!resumeFileName.isEmpty())
                                                      {
                                                            QAxObject   wordApplication("Word.Application");
                                                            QAxObject *documents = wordApplication.querySubObject("Documents");
                                              
                                                            QAxObject *document = documents->querySubObject("Open(const QVariant&, bool)", resumeFileName, true);
                                                            document->querySubObject("SaveAs(const QVariant&,const QVariant)", saveFile, fileFormat);
                                              
                                              
                                                            document->dynamicCall("Close (boolean)", false);
                                              
                                              
                                              
                                                            qDebug()<<resumeFileName;
                                                      }
                                              

                                              конвертирует через ворд

                                                Evgenii Legotckoi
                                                • 25 января 2019 г. 8:45

                                                Я вас поздравляю. Приятно наблюдать за прогрессом.

                                                  Evgenii Legotckoi
                                                  • 25 января 2019 г. 8:48
                                                  • (ред.)

                                                  Пожалуй, я тогда не буду заниматься той библиотекой. Всё равно она какая-то мутная на первый взгляд.

                                                    Михаиллл
                                                    • 25 января 2019 г. 11:05

                                                    и еще в конце нужно дописать для закрытия процесса (иначе будет в памяти висеть):

                                                    wordApplication.dynamicCall("Quit()");
                                                    

                                                      Комментарии

                                                      Только авторизованные пользователи могут публиковать комментарии.
                                                      Пожалуйста, авторизуйтесь или зарегистрируйтесь
                                                      AD

                                                      C++ - Тест 004. Указатели, Массивы и Циклы

                                                      • Результат:50баллов,
                                                      • Очки рейтинга-4
                                                      m
                                                      • molni99
                                                      • 26 октября 2024 г. 8:37

                                                      C++ - Тест 004. Указатели, Массивы и Циклы

                                                      • Результат:80баллов,
                                                      • Очки рейтинга4
                                                      m
                                                      • molni99
                                                      • 26 октября 2024 г. 8:29

                                                      C++ - Тест 004. Указатели, Массивы и Циклы

                                                      • Результат:20баллов,
                                                      • Очки рейтинга-10
                                                      Последние комментарии
                                                      i
                                                      innorwall15 ноября 2024 г. 10:27
                                                      Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
                                                      i
                                                      innorwall15 ноября 2024 г. 5:26
                                                      Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
                                                      i
                                                      innorwall15 ноября 2024 г. 3:03
                                                      Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
                                                      i
                                                      innorwall14 ноября 2024 г. 19:42
                                                      Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
                                                      Сейчас обсуждают на форуме
                                                      i
                                                      innorwall14 ноября 2024 г. 11:39
                                                      добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
                                                      i
                                                      innorwall11 ноября 2024 г. 18:55
                                                      Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                                                      9
                                                      9Anonim25 октября 2024 г. 16:10
                                                      Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                                                      ИМ
                                                      Игорь Максимов3 октября 2024 г. 11:05
                                                      Реализация навигации по разделам Спасибо Евгений!

                                                      Следите за нами в социальных сетях