#To edit and compare internal_properties, use WINDEV integrated tools. #Internal properties refer to the properties of controls in windows, reports, etc. info : name : CSubtitleEntry major_version : 30 minor_version : 0 type : 4 description : "" subtype : 0 options : 256 class : identifier : 0x181e7a40056cbb40 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/. */ // Contains an SRT entry CSubtitleEntry est une Classe m_nID est un entier // ID of this subtitle entry (if not SRT format, a unique ID must be generated) m_duTimecodeStart est une durée // Timecode start point for this entry m_duTimecodeEnd est une durée // Timecode end point for this entry m_sText est une chaine // Text of the subtitle // m__bTimecodeNotContinuous est un booléen // If this timecode relative to it's predecessor is not continuous m__sSpeaker est une chaine // Give the opportunity to identify a speaker for this timecode fin ETimecodeFormat est une énumération tfSRT tfSVB fin ETimecodePart est une combinaison tpStart tpEnd fin type : 131072 procedures : - name : Constructeur procedure_id : 1737960921599228736 type_code : 27 code : |1+ procédure Constructeur() type : 589824 - name : Destructeur procedure_id : 1737960921599294272 type_code : 28 code : |1+ procédure Destructeur() type : 655360 - name : TextAsSingleLine procedure_id : 1737960921599359808 type_code : 12 code : |1+ // Résumé : Will return the m_sText value as a single line. If there are CRLF, they will be replaced by a space, and make sure there are no double spaces while doing so. // Paramètres : // Aucun // Valeur de retour : // chaîne ANSI : m_sText value as a single line. // procédure TextAsSingleLine() : chaine sContent est une chaîne POUR TOUTE CHAÎNE s DE m_sText SÉPARÉE PAR RC sContent += [" "] + s FIN renvoyer sContent type : 458752 - name : TimecodeDuration procedure_id : 1737960921599425344 type_code : 12 code : |1+ // Résumé : // Paramètres : // Aucun // Valeur de retour : // durée : // procédure TimecodeDuration() : durée renvoyer m_duTimecodeEnd - m_duTimecodeStart type : 458752 - name : MergeWith procedure_id : 1737960921599490880 type_code : 12 code : |1+ // Résumé : // Paramètres : // e (CSRTEntry dynamique) : // Valeur de retour : // Aucune // procédure MergeWith(e est un CSubtitleEntry dynamique) si m_duTimecodeStart < e.m_duTimecodeStart ALORS // This entry comes first m_sText += [rc] + e.m_sText m_dutimecodeend = e.m_duTimecodeEnd SINON // The provided entry comes first m_sText = e.m_sText + [rc] + m_sText m_duTimecodeStart = e.m_duTimecodeStart FIN type : 458752 - name : SplitTextInLines procedure_id : 1737960921599556416 type_code : 12 code : |1+ // Résumé : Will split the text on multiple lines so that the maximum number of characters is not exceeded (as best as possible). // Paramètres : // nMaxCharPerLine (entier - valeur par défaut=60) : Maximum number of characters there should be on a line. // Valeur de retour : // Aucune // procédure SplitTextInLines(nMaxCharPerLine est un entier = 60) nSize est un entier = Taille(m_sText) // Try to split the sentence as much as possible in the center, if necessary SI nSize > nMaxCharPerLine ALORS // We split in equal parts, respecting the maximum number of characters per line: nParts est un entier = ArrondiSupérieur(nSize / nMaxCharPerLine) nSection est un entier = nSize / nParts sTextToSplit est une chaîne = sansespace( Remplace(m_sText, RC, " ") ) m_sText = "" i est un entier TANTQUE sTextToSplit <> "" // Find a nice spot to cut roughly at the n point SI nParts > 1 ALORS i = Position(sTextToSplit," ", nSection) SINON i = 0 FIN // Make the cut on the point found SI i = 0 ALORS m_sText += [RC] + SansEspace(sTextToSplit) sTextToSplit = "" SINON m_sText += [RC] + SansEspace(sTextToSplit[[ À i]]) sTextToSplit[[ À i]] = "" FIN nParts-- FIN FIN type : 458752 - name : TimecodeToString procedure_id : 1737960921599621952 type_code : 12 code : |1+ // Résumé : Returns timecode as a string in the desired format // Paramètres : // eFormat (CSRTEntry.ETimecodeFormat) : Format to use // ePart (CSRTEntry.ETimeCodePart) : Parts of the timecode to return. If both parts are returned (default), the proper separator will be added. // Valeur de retour : // chaîne ANSI : String representing the timecode // procédure TimecodeToString(eFormat est un ETimecodeFormat, ePart est une ETimecodePart = tpStart+tpEnd) : chaine sFormat est une chaîne sSep est une chaîne selon eFormat CAS tfSRT sFormat = "HH:MM:SS,CCC" sSep = " --> " CAS tfSVB sFormat = "HH:MM:SS.CCC" sSep = "," FIN si ePart = tpStart+tpEnd alors RENVOYER DuréeVersChaîne(m_duTimecodeStart,sFormat) + sSep + DuréeVersChaîne(m_duTimecodeEnd,sFormat) SINON si ePart = tpStart RENVOYER DuréeVersChaîne(m_duTimecodeStart,sFormat) SINON si ePart = tpEnd RENVOYER DuréeVersChaîne(m_duTimecodeEnd,sFormat) sinon renvoyer "" FIN type : 458752 - name : TimecodeFromString procedure_id : 1737960921599687488 type_code : 12 code : |1+ // Résumé : Load timecode values from a string. // Paramètres : // eFormat (CSRTEntry.ETimecodeFormat) : Format of the string // sTimecode (chaîne ANSI) : Timecode value as string in the specified format // Valeur de retour : // Aucune // procédure TimecodeFromString(eFormat est un ETimecodeFormat, sTimecode est une chaine) sFormat est une chaine sSep est une chaîne SELON eFormat CAS tfSRT sFormat = "HH:MM:SS,LLL" sSep = " --> " CAS tfSVB sFormat = "HH:MM:SS.LLL" sSep = "," // Some timecode entries are not properly formated (like the ones from YouTube miss a leading digit "0:00:00.000" instead of "00:00:00.000") // If this is the case, we must add the missing leading "0" SI sTimecode[[2]] = ":" ALORS sTimecode[[1]] = "0" + sTimecode[[1]] FIN n est un entier = position(sTimecode,",") SI sTimecode[[n+2]] = ":" ALORS sTimecode[[n+1]] = "0" + sTimecode[[n+1]] FIN FIN m_duTimecodeStart = chaineversdurée( ExtraitChaîne(sTimecode,1,sSep), sFormat ) m_duTimecodeEnd = chaineversdurée( ExtraitChaîne(sTimecode,2,sSep), sFormat ) type : 458752 properties : - name : p_sText identifier : 0x181e7a40056dbb40 type_code : 103 p_codes : - code : |1- procédure publique p_sText() : chaîne ANSI renvoyer m_sText type : 1966080 - code : |1+ procédure publique p_sText(Valeur est chaîne ANSI) m_sText = Valeur SplitTextInLines() type : 2031616 template_refs : [] - name : p_hTimecodeStart identifier : 0x1821482d0218227f type_code : 103 p_codes : - code : |1- procédure publique p_hTimecodeStart() : Heure renvoyer DuréeVersChaîne(m_duTimecodeStart,"HHMMSSCCC") type : 1966080 - code : |1- procédure publique p_hTimecodeStart(Valeur est Heure) m_duTimecodeStart=ChaîneVersDurée(Valeur,"HHMMSSLLL") type : 2031616 template_refs : [] - name : p_hTimecodeEnd identifier : 0x18214839022b5130 type_code : 103 p_codes : - code : |1- procédure publique p_hTimecodeEnd() : Heure renvoyer DuréeVersChaîne(m_duTimecodeEnd,"HHMMSSCCC") type : 1966080 - code : |1- procédure publique p_hTimecodeEnd(Valeur est Heure) m_duTimecodeEnd=ChaîneVersDurée(Valeur,"HHMMSSLLL") type : 2031616 template_refs : [] procedure_templates : [] property_templates : [] code_parameters : internal_properties : HwAAAB4AAAB7MB8NZB5rGUbyk77+IjQnJ74vm430Ar3yq0zmP05sGBBw0ur17uG6ZWry original_name : Classe1 resources : string_res : identifier : 0x17e5b2180962b198 internal_properties : HwAAAB4AAAA809Qj/IAi+r8QXyrnW7sarQeYORCUjKBkmMeTFexSj5AuvTfTUpN0Eg== custom_note : internal_properties : HwAAAB4AAADnl3uxgA6ylw4vtqUKEOJQD3VAAOKeNUmhPNojcRFoDpHEcUyYAw== associated_test : name : TEST_CSubtitleEntry.wxt