#To edit and compare internal_properties, use WINDEV integrated tools. #Internal properties refer to the properties of controls in windows, reports, etc. info : name : CMasterDocument major_version : 30 minor_version : 0 type : 4 description : "" subtype : 0 options : 256 class : identifier : 0x181e75ae0232e2b5 internal_properties : HwAAAB4AAAD+1kTo6KJy2WQU0Y4fbFD6aQ7NWfD4KKkN7Ml67nIqLXIRxJ1vjfJ1 code_elements : type_code : 10 p_codes : - code : |1+ /* Copyright 2025 Alexandre Leclerc. MPL 2.0. See https://mozilla.org/MPL/2.0/. */ // Handling Master Document for working with subtitles. CMasterDocument est une Classe m_sFilename est une chaîne // Filename of the Master Document m_sContent est une chaine // Content of the master document (RAW) // m_cSubtitles est un CSubtitle dynamique // Subtitle (and timecode) management linked to the Master Document fin type : 131072 procedures : - name : Constructeur procedure_id : 1737955896433304245 type_code : 27 code : |1+ procédure Constructeur() m_cSubtitles = allouer un CSubtitle type : 589824 - name : Destructeur procedure_id : 1737955896433369781 type_code : 28 code : |1+ procédure Destructeur() type : 655360 - name : LoadFromFile procedure_id : 1737990320672223412 type_code : 12 code : |1+ // Résumé : // Paramètres : // sFilename (chaîne ANSI) : // Valeur de retour : // Aucune // procédure LoadFromFile(sFilename est une chaine) : booléen LF est une chaine = Caract(10) SI PAS fFichierExiste(sFilename) ALORS ErreurDéclenche(101,"File does not exist.") RENVOYER Faux FIN // Validate file format SI PAS sFilename ~] ".tcmd" ALORS ErreurDéclenche(102,"This is not an supported format (.tcmd).") RENVOYER Faux FIN // Open file content m_sContent = UTF8VersChaîne(fChargeTexte(sFilename)) SI m_sContent = "" _ET_ ErreurDétectée ALORS Erreur(ErreurInfo(errComplet)) RENVOYER Faux FIN m_sFilename = sFilename m_cSubtitles = allouer un CSubtitle // Load the header as JSON. The very first line of the document is the JSON document that contains all the Master Document data. si m_sContent[[1 a 6]] = "JSON: " alors j est un Buffer n est un entier = Position(m_sContent,crlf) si n > 0 alors j = m_sContent[[7 a n-1]] m_sContent[[1 à n+1]] = "" Désérialise(m_cSubtitles.m_tabContent,j,psdJSON) SI ErreurDétectée ALORS ErreurPropage("Unable to retrieve Master Document header information.") RENVOYER Faux FIN sinon ErreurDéclenche(110,"Unable to retrieve Master Document header information.") renvoyer faux fin // Rebuild the subtitles from the header information m_cSubtitles.ContentFromNumberedText(m_sContent) renvoyer vrai FIN // Load the header as YAML (more advanced format) si m_sContent[[1 à 4]] = "---" + LF ALORS y est un YAML n est un entier = Position(m_sContent, LF + "---" + LF) SI n > 0 ALORS y = m_sContent[[5 À n-1]] SI y.type ~= "tcmd" ALORS SI y.version = 1 ALORS m_sContent[[1 À n+4]] = "" m_cSubtitles.TimecodesFromYAML(y.timecodes) SI ErreurDétectée ALORS ErreurPropage("Unable to retrieve Master Document header information.") RENVOYER Faux FIN // Rebuild the subtitles from the header information m_cSubtitles.ContentFromNumberedText(m_sContent,Faux,Vrai) renvoyer vrai FIN FIN fin FIN ErreurDéclenche(103,"Master Document version is not supported.") RENVOYER Faux type : 458752 - name : SaveToFile procedure_id : 1737990342147130569 type_code : 12 code : |1+ // Résumé : // Paramètres : // sFilename (chaîne ANSI) : // sTCMDVersion (chaîne ANSI - valeur par défaut="1.0") : File version (proto, format) to use to save the document. // Valeur de retour : // booléen : // // _sFilename : procédure SaveToFile(sFilename est une chaine = m_sFilename, sTCMDVersion est une chaine = "1.0") LF est une chaine = caract(10) // Build content to save b est un buffer serialise(m_cSubtitles.m_tabContent,b,psdJSON) si ErreurDétectée ALORS ErreurPropage("Unable to save timecodes") RENVOYER Faux FIN si m_sContent = "" alors m_sContent = m_cSubtitles.ContentToNumberedText(CSubtitle.tfParagraphOnTimestampBreak) FIN sContent est une chaîne si sTCMDVersion = "0.1" alors sContent = "JSON: " + b + LF + m_sContent sinon si sTCMDVersion = "1.0" alors y est un yaml y.type = "tcmd" y.version..Valeur = sTCMDVersion sContent = "---" sContent += [LF] + y..FormatYAML // The way WinDev encodes YAML arrays and sequences is too lengthy (one line per item). There is actually no option to // ask for a mode "compact" mode on these types. So we will create our YAML output to save space for the timecode. // (Something like y.timecodes[1]..Compact = True would have been nice. Anything under "Compact" whould be so. y.timecodes..Compact = True, etc.) sContent += [LF] + "timecodes: " + LF + m_cSubtitles.TimecodesToYAMLSequenceOfCompactMappings() // End of header part, and content sContent += [LF] + "---" sContent += [LF] + m_sContent FIN retour = fSauveTexte(sFilename,ChaîneVersUTF8(sContent)) si retour alors m_sFilename = sFilename FIN type : 458752 - name : Export procedure_id : 1738247984690075702 type_code : 12 code : |1+ // Résumé : Export the master document to the desired format. // Paramètres : // sFilename (chaîne ANSI) : Filename to export to. Extension of the file will determine the format used. // Valeur de retour : // booléen : True if succesful, otherwise false with error. // procédure Export(sFilename est une chaine) : booléen // If in MasterDocument mode, make sure the latest data is in the subtitle class si m_sFilename <> "" alors m_cSubtitles.ContentFromNumberedText(m_sContent) FIN selon fExtraitChemin(sFilename,fExtension) CAS ".srt": RENVOYER m_cSubtitles.ExportToSRT(sFilename) cas ".sbv": renvoyer m_cSubtitles.ExportToSBV(sFilename) AUTRE CAS: ErreurDéclenche(101,chaineconstruit("File extension not supported (%1).",fextraitchemin(sFilename,fExtension))) FIN renvoyer faux type : 458752 procedure_templates : [] property_templates : [] code_parameters : internal_properties : HwAAAB4AAAB7MB8NZB5rGUbyk77+IjQnJ74vm430Ar3yq0zmP05sGBBw0ur17uG6ZWry original_name : Classe1 resources : string_res : identifier : 0x181e758f022f67f7 internal_properties : HwAAAB4AAAA809Qj/IAi+r8QXyrnW7sarQeYORCUjKBkmMeTFexSj5AuvTfTUpN0Eg== custom_note : internal_properties : HwAAAB4AAADnl3uxgA6ylw4vtqUKEOJQD3VAAOKeNUmhPNojcRFoDpHEcUyYAw==