├── .gitattributes ├── LICENSE ├── README.md ├── badphrases.dat ├── badphrases.rc ├── badphrases.res ├── extra ├── icon │ ├── 128.png │ ├── 16.png │ ├── 24.png │ ├── 256.png │ ├── 32.png │ ├── 40.png │ ├── 48.png │ ├── 512.png │ ├── 64.png │ ├── 72.png │ ├── 80.png │ ├── 96.png │ ├── FS.ico │ └── fasubrip.icns ├── repo-clone-use-lowecase.gif └── screenshots │ ├── fasubrip-fedora.gif │ ├── fasubrip-kubuntu.gif │ ├── fasubrip-macos-catalina.gif │ ├── fasubrip-macos-sierra.gif │ ├── fasubrip-peppermint.gif │ └── fasubrip-win10.gif ├── fasubrip.ico ├── fasubrip.lpi ├── fasubrip.lpr ├── fasubrip.res ├── releases ├── macos unidentified developer note.txt ├── make release.sh └── qt5 runtime dependency note.txt ├── uabout.lfm ├── uabout.pas ├── umain.lfm └── umain.pas /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | {one line to give the program's name and a brief idea of what it does.} 635 | Copyright (C) 2017 {name of author} 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | FaSubrip Copyright (C) 2017 m-audio91 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FaSubrip 2 | ![Image of FaSubrip](https://github.com/m-audio91/FaSubrip/raw/master/extra/icon/128.png) 3 | ![screenshot of FaSubrip on Windows 10](https://github.com/m-audio91/FaSubrip/raw/master/extra/screenshots/fasubrip-win10.gif) 4 | 5 | v1.2.3 6 | 7 | FaSubrip autodetects and converts encoding of Farsi (Persian) subrip files. with additional functionalities. 8 | 9 | [**Download Latest Version - دانلود جدیدترین نسخه**](https://github.com/m-audio91/FaSubrip/releases) 10 | [**Screenshots - تصاویر محیط برنامه**](https://github.com/m-audio91/FaSubrip/wiki) 11 | [**آموزش کامپایل از روی سورس برای برنامه نویسان - Compilation guide for programers**](https://github.com/m-audio91/FaSubrip/wiki/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84-%D8%B3%D9%88%D8%B1%D8%B3-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87) 12 | 13 | Copyright (C) 2016-2021 Mohammadreza Bahrami, m.audio91 [AT] gmail.com -------------------------------------------------------------------------------- /badphrases.dat: -------------------------------------------------------------------------------- 1 | [startofbadphrases] 2 | گائید 3 | گایید 4 | گایدم 5 | به گا 6 | بهگا 7 | به‌گا 8 | بهگا 9 | بگا 10 | به گات 11 | به‌گات 12 | بگات 13 | به گاتون 14 | به‌گاتون 15 | بهگاتون 16 | بگاتون 17 | به گاش 18 | به‌گاش 19 | بهگاش 20 | بگاش 21 | به گاشون 22 | به‌گاشون 23 | بهگاشون 24 | بگاشون 25 | به گام 26 | به‌گام 27 | بهگام 28 | بگام 29 | به گامون 30 | به‌گامون 31 | بهگامون 32 | بگامون 33 | بگام 34 | بگات 35 | بگاش 36 | به گارفت 37 | به‌گارفت 38 | بهگارفت 39 | بگارفت 40 | بگائی 41 | بگایی 42 | ننت رو بگا 43 | ننتو بگا 44 | ننش رو بگا 45 | ننشو بگا 46 | ننت رو میگا 47 | ننتو میگا 48 | ننش رو میگا 49 | ننشو میگا 50 | ننتون رو میگا 51 | ننتونو میگا 52 | ننشون رو میگا 53 | ننشونو میگا 54 | ننشون رو بگا 55 | ننشونو بگا 56 | جند 57 | جنده 58 | جنده‌ 59 | جنده 60 | جنده‌ 61 | جنده! 62 | "جنده 63 | جنده ‌منده‌ 64 | مادرجن 65 | درتو میز 66 | درتو بز 67 | درتونو بز 68 | درتون رو بز 69 | در خودتو بز 70 | در خودتونو بز 71 | در خودتون رو بز 72 | حرومزاده 73 | حروم‌زاده 74 | حرام زاده 75 | حرام‌زاده 76 | حرامزاده 77 | حرومــــز 78 | حروم‌ز 79 | حرومی 80 | حرامی 81 | مادر به خطا 82 | مادربه خطا 83 | مادربه‌خطا 84 | مادربهخطا 85 | مادرقحبه 86 | مادر قحبه 87 | مادرقهبه 88 | مادر قهبه 89 | ننه قحبه 90 | ننه‌قحبه 91 | ننهقحبه 92 | ننه قهبه 93 | ننه‌قهبه 94 | ننهقهبه 95 | با مادرت بخواب 96 | با مادرت بخاب 97 | با مادرت میخواب 98 | با مادرت میخاب 99 | با خواهرت بخواب 100 | با خواهرت بخاب 101 | با خواهرت میخواب 102 | با خواهرت میخاب 103 | با زنت میخواب 104 | با زنت میخاب 105 | با همسرت میخواب 106 | با همسرت میخاب 107 | با شوهرت میخواب 108 | با شوهرت میخاب 109 | مادرکس 110 | خوارکس 111 | خوارکص 112 | خوارکث 113 | خارکس 114 | خارکص 115 | خارکث 116 | پتیاره 117 | پطیاره 118 | بی ناموس 119 | بی‌ناموس 120 | بیناموس 121 | دیّوث 122 | دیوث 123 | دیّوس 124 | دیوس 125 | دیّوص 126 | دیوص 127 | کُس 128 | كُص 129 | کُث 130 | کص 131 | كس‌ت 132 | کصکش 133 | کثکش 134 | كس كش 135 | كس‌کش 136 | كص‌کش 137 | كسكش 138 | کثکش 139 | کث‌کش 140 | کث کش 141 | کس ننه 142 | کس‌ننه 143 | کسننه 144 | کث ننه 145 | کثننه 146 | کثننه 147 | کص ننه 148 | کص‌ننه 149 | کصننه 150 | پفیوز 151 | جاکش 152 | کیر 153 | کیری 154 | کیری‌ 155 | کیری 156 | ‌کیری 157 | کیرم 158 | کیرت 159 | کیرش 160 | کیرمو 161 | کیرشو 162 | کیرتو 163 | کیرمونو 164 | کیرشونو 165 | کیرتونو 166 | ‌کله کیری 167 | کله‌کیری 168 | کیری میری 169 | کیری‌میری 170 | کیریمیری 171 | کیری پیری 172 | کیری‌پیری 173 | کیر‌پیری 174 | شومبول 175 | دودول 176 | سرش رو بخ 177 | سرشرو بخ 178 | سرشو بخ 179 | سرشوبخ 180 | ساک بز 181 | ساکبز 182 | ساک میز 183 | ساک زد 184 | ساک زن 185 | ساک نز 186 | ساک‌ز 187 | ساکزن 188 | ساک و لیس 189 | ساک‌ولیس 190 | ساکولیس 191 | سکس 192 | سکس 193 | سکسی 194 | سکسی 195 | مَنی 196 | لاشی 197 | بکُن 198 | بُکن 199 | چاقال 200 | راست کرد 201 | راست‌کرد 202 | راستکرد 203 | راست نکرد 204 | راست شد 205 | راست‌شد 206 | راستشد 207 | راست نشد 208 | سوراخ کو 209 | سولاخ کو 210 | سوراخی 211 | سولاخی 212 | لاپایی 213 | ننتو 214 | لاش رو باز ک 215 | لاشو باز ک 216 | لاشو بازک 217 | لاشو واز ک 218 | لاشو وازک 219 | لاشو وا ک 220 | لاشو واک 221 | جق 222 | جغ 223 | جقی 224 | جغی 225 | جلق 226 | جلغ 227 | کف دستی 228 | کف‌دستی 229 | کفدستی 230 | مادر* 231 | مادر * 232 | ننه * 233 | آبش اومد 234 | آبش میاد 235 | آبش داره می 236 | آبش می آد 237 | آبش می‌آد 238 | آبش بیاد 239 | آبم داره می 240 | آبم اومد 241 | آبم میاد 242 | آبم بیاد 243 | آبت داره می 244 | آبت رو بریز 245 | آبترو بریز 246 | آبتو بریز 247 | آبت رو بپاش 248 | آبترو بپاش 249 | آبتو بپاش 250 | آبم رو بریز 251 | آبمرو بریز 252 | آبمو بریز 253 | آبم رو بپاش 254 | آبمرو بپاش 255 | آبمو بپاش 256 | آبم رو می 257 | آبمرو می 258 | آبمو می 259 | پریود 260 | ارضا 261 | حشری 262 | تناسل 263 | آلتم 264 | آلتت 265 | آلتش 266 | التم 267 | التمو 268 | التت 269 | التش 270 | آلت 271 | انگشت كن 272 | خایه 273 | خایه‌ 274 | خایه ها 275 | خایمو 276 | خایتو 277 | خایشو 278 | کونی 279 | کونیا 280 | کیونیا 281 | بچّه کونی 282 | بچه کونی 283 | بچه‌کونی 284 | بچهکونی 285 | از کون 286 | کیونی 287 | کونیم 288 | کونی هست 289 | کونده 290 | کیونده 291 | کون‌ده 292 | کیون‌ده 293 | تو کون‌ت 294 | توکون‌ت 295 | تو کونت 296 | توکونت 297 | مادرخراب 298 | مادر خراب 299 | اسپرم 300 | زنمش زمین 301 | زنمشون زمین 302 | زنمت زمین 303 | زنمتون زمین 304 | کوبمش زمین 305 | کوبمشون زمین 306 | کوبمت زمین 307 | کوبتون زمین 308 | فاحشه 309 | هرزه 310 | همجنس گرا 311 | همجنس‌گرا 312 | همجنسگرا 313 | همجنس باز 314 | همجنس‌باز 315 | همجنسباز 316 | پورن 317 | کاندوم 318 | کاندم 319 | سوزاک 320 | تخمم 321 | تخمت 322 | تخمش 323 | تخم هام 324 | تخم هات 325 | تخم هاش 326 | تخم‌هام 327 | تخم‌هات 328 | تخم‌هاش 329 | تخمهام 330 | تخمهات 331 | تخمهاش 332 | تخمام 333 | تخمات 334 | تخماش 335 | تخم حروم 336 | تخم‌حروم 337 | تخمحروم 338 | تخم حرام 339 | تخم‌حرام 340 | تخمحرام 341 | [endofbadphrases] 342 | [startofmorebadphrases] 343 | کس کلک 344 | كس‌کلک 345 | کس شر 346 | کس و شعر 347 | کسشر 348 | کسشعر 349 | کس شعر 350 | كس‌شعر 351 | كس‌شر 352 | كس‌شِر 353 | کص و شعر 354 | کصشر 355 | کصشعر 356 | کص شعر 357 | كص‌شعر 358 | كص‌شر 359 | كص‌شِر 360 | کسمغز 361 | کس‌مغز 362 | کس مغز 363 | کصمغز 364 | کص‌مغز 365 | کص مغز 366 | کثمغز 367 | کث‌مغز 368 | کث مغز 369 | کسمخ 370 | کس‌مخ 371 | کس مخ 372 | کصمخ 373 | کص‌مخ 374 | کص مخ 375 | کثمخ 376 | کث‌مخ 377 | کث مخ 378 | کسخل 379 | كس‌خل 380 | کس خل 381 | کثخل 382 | كث‌خل 383 | کصخل 384 | كص‌خل 385 | کس میخ 386 | کس‌میخ 387 | کسمشنگ 388 | كس‌مشنگ 389 | کس مشنگ 390 | لخت ش 391 | پستون 392 | سوتين 393 | نزدیکی کنم 394 | نزدیکی کنی 395 | نزدیکی کنه 396 | درت بذار=گمشو 397 | درتو بذار=گمشو 398 | درت رو بذار=گمشو 399 | در خودت بذار=گمشو 400 | در خودتو بذار=گمشو 401 | در خودت رو بذار=گمشو 402 | پشمام=پرام 403 | پشمات=پرات 404 | پشماش=پراش 405 | پشمم=چیم 406 | پشمت=چیت 407 | پشمش=چیش 408 | تخمی= مزخرف 409 | گُه=چیز 410 | شاش=بار 411 | ان تو ان=شلوغ پلوغ 412 | ان‌توان=شلوغ پلوغ 413 | انتو‌ان=شلوغ پلوغ 414 | ممه ها=چیزا 415 | ممه‌ها=چیزا 416 | ممهها=چیزا 417 | ويسكي=نوشیدنی 418 | ودکا=نوشیدنی 419 | وُدکا=نوشیدنی 420 | وودکا=موشیدنی 421 | شراب=نوشیدنی 422 | مشروب=نوشیدنی 423 | مارتینی=نوشیدنی 424 | رید= گند زد 425 | میریدی=گند میزدی 426 | میریدم=گند میزدم 427 | میریدن=گند میزدن 428 | داشت میرید=داشت گند میزد 429 | کون لق=مردشور 430 | تجاوز= حمله 431 | مادرسگ=حمال 432 | مادر سگ =حمال 433 | ننه سگ-حمال 434 | ننه‌سگ-حمال 435 | ننهسگ-حمال 436 | سگ ننه=جمال 437 | سگ‌ننه=جمال 438 | پدر سگ=جمال 439 | پدرسگ=حمال 440 | پدسگ=حمال 441 | پدسّگ=حمال 442 | [endofmorebadphrases] -------------------------------------------------------------------------------- /badphrases.rc: -------------------------------------------------------------------------------- 1 | badphrases RCDATA badphrases.dat -------------------------------------------------------------------------------- /badphrases.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/badphrases.res -------------------------------------------------------------------------------- /extra/icon/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/128.png -------------------------------------------------------------------------------- /extra/icon/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/16.png -------------------------------------------------------------------------------- /extra/icon/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/24.png -------------------------------------------------------------------------------- /extra/icon/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/256.png -------------------------------------------------------------------------------- /extra/icon/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/32.png -------------------------------------------------------------------------------- /extra/icon/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/40.png -------------------------------------------------------------------------------- /extra/icon/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/48.png -------------------------------------------------------------------------------- /extra/icon/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/512.png -------------------------------------------------------------------------------- /extra/icon/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/64.png -------------------------------------------------------------------------------- /extra/icon/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/72.png -------------------------------------------------------------------------------- /extra/icon/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/80.png -------------------------------------------------------------------------------- /extra/icon/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/96.png -------------------------------------------------------------------------------- /extra/icon/FS.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/FS.ico -------------------------------------------------------------------------------- /extra/icon/fasubrip.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/icon/fasubrip.icns -------------------------------------------------------------------------------- /extra/repo-clone-use-lowecase.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/repo-clone-use-lowecase.gif -------------------------------------------------------------------------------- /extra/screenshots/fasubrip-fedora.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/screenshots/fasubrip-fedora.gif -------------------------------------------------------------------------------- /extra/screenshots/fasubrip-kubuntu.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/screenshots/fasubrip-kubuntu.gif -------------------------------------------------------------------------------- /extra/screenshots/fasubrip-macos-catalina.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/screenshots/fasubrip-macos-catalina.gif -------------------------------------------------------------------------------- /extra/screenshots/fasubrip-macos-sierra.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/screenshots/fasubrip-macos-sierra.gif -------------------------------------------------------------------------------- /extra/screenshots/fasubrip-peppermint.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/screenshots/fasubrip-peppermint.gif -------------------------------------------------------------------------------- /extra/screenshots/fasubrip-win10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/extra/screenshots/fasubrip-win10.gif -------------------------------------------------------------------------------- /fasubrip.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/fasubrip.ico -------------------------------------------------------------------------------- /fasubrip.lpi: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | <Scaled Value="True"/> 13 | <UseAppBundle Value="False"/> 14 | <ResourceType Value="res"/> 15 | <UseXPManifest Value="True"/> 16 | <XPManifest> 17 | <DpiAware Value="True"/> 18 | </XPManifest> 19 | <Icon Value="0"/> 20 | </General> 21 | <VersionInfo> 22 | <UseVersionInfo Value="True"/> 23 | <AutoIncrementBuild Value="True"/> 24 | <MajorVersionNr Value="1"/> 25 | <MinorVersionNr Value="2"/> 26 | <RevisionNr Value="4"/> 27 | <BuildNr Value="31"/> 28 | <StringTable Comments="http://mohammadrezab.blogsky.com" CompanyName="MohammadReza Bahrami" FileDescription="FaSubrip: autodetects and converts encoding of farsi (persian) subrip files. with additional functionalities." InternalName="FaSubrip" LegalCopyright="MohammadReza Bahrami" OriginalFilename="fasubrip" ProductName="FaSubrip" ProductVersion="1.2.4.0"/> 29 | </VersionInfo> 30 | <BuildModes Count="8"> 31 | <Item1 Name="Debug" Default="True"/> 32 | <Item2 Name="Release"> 33 | <CompilerOptions> 34 | <Version Value="11"/> 35 | <PathDelim Value="\"/> 36 | <Target> 37 | <Filename Value="fasubrip"/> 38 | </Target> 39 | <SearchPaths> 40 | <IncludeFiles Value="$(ProjOutDir)"/> 41 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 42 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 43 | </SearchPaths> 44 | <CodeGeneration> 45 | <SmartLinkUnit Value="True"/> 46 | <Optimizations> 47 | <OptimizationLevel Value="3"/> 48 | </Optimizations> 49 | </CodeGeneration> 50 | <Linking> 51 | <Debugging> 52 | <GenerateDebugInfo Value="False"/> 53 | </Debugging> 54 | <LinkSmart Value="True"/> 55 | <Options> 56 | <Win32> 57 | <GraphicApplication Value="True"/> 58 | </Win32> 59 | </Options> 60 | </Linking> 61 | </CompilerOptions> 62 | </Item2> 63 | <Item3 Name="Release Win32"> 64 | <MacroValues Count="1"> 65 | <Macro1 Name="LCLWidgetType" Value="win32"/> 66 | </MacroValues> 67 | <CompilerOptions> 68 | <Version Value="11"/> 69 | <PathDelim Value="\"/> 70 | <Target> 71 | <Filename Value="fasubrip-$(TargetCPU)-$(TargetOS)"/> 72 | </Target> 73 | <SearchPaths> 74 | <IncludeFiles Value="$(ProjOutDir)"/> 75 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 76 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 77 | </SearchPaths> 78 | <CodeGeneration> 79 | <SmartLinkUnit Value="True"/> 80 | <TargetCPU Value="i386"/> 81 | <TargetOS Value="win32"/> 82 | <Optimizations> 83 | <OptimizationLevel Value="3"/> 84 | </Optimizations> 85 | </CodeGeneration> 86 | <Linking> 87 | <Debugging> 88 | <GenerateDebugInfo Value="False"/> 89 | </Debugging> 90 | <LinkSmart Value="True"/> 91 | <Options> 92 | <Win32> 93 | <GraphicApplication Value="True"/> 94 | </Win32> 95 | </Options> 96 | </Linking> 97 | </CompilerOptions> 98 | </Item3> 99 | <Item4 Name="Release Linux32"> 100 | <MacroValues Count="1"> 101 | <Macro2 Name="LCLWidgetType" Value="gtk2"/> 102 | </MacroValues> 103 | <CompilerOptions> 104 | <Version Value="11"/> 105 | <PathDelim Value="\"/> 106 | <Target> 107 | <Filename Value="fasubrip-$(TargetCPU)-$(TargetOS)"/> 108 | </Target> 109 | <SearchPaths> 110 | <IncludeFiles Value="$(ProjOutDir)"/> 111 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 112 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 113 | </SearchPaths> 114 | <CodeGeneration> 115 | <SmartLinkUnit Value="True"/> 116 | <TargetCPU Value="i386"/> 117 | <TargetOS Value="linux"/> 118 | <Optimizations> 119 | <OptimizationLevel Value="3"/> 120 | </Optimizations> 121 | </CodeGeneration> 122 | <Linking> 123 | <Debugging> 124 | <GenerateDebugInfo Value="False"/> 125 | </Debugging> 126 | <LinkSmart Value="True"/> 127 | <Options> 128 | <Win32> 129 | <GraphicApplication Value="True"/> 130 | </Win32> 131 | </Options> 132 | </Linking> 133 | </CompilerOptions> 134 | </Item4> 135 | <Item5 Name="Release Linux64"> 136 | <MacroValues Count="1"> 137 | <Macro2 Name="LCLWidgetType" Value="gtk2"/> 138 | </MacroValues> 139 | <CompilerOptions> 140 | <Version Value="11"/> 141 | <PathDelim Value="\"/> 142 | <Target> 143 | <Filename Value="fasubrip-$(TargetCPU)-$(TargetOS)"/> 144 | </Target> 145 | <SearchPaths> 146 | <IncludeFiles Value="$(ProjOutDir)"/> 147 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 148 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 149 | </SearchPaths> 150 | <CodeGeneration> 151 | <SmartLinkUnit Value="True"/> 152 | <TargetCPU Value="x86_64"/> 153 | <TargetOS Value="linux"/> 154 | <Optimizations> 155 | <OptimizationLevel Value="3"/> 156 | </Optimizations> 157 | </CodeGeneration> 158 | <Linking> 159 | <Debugging> 160 | <GenerateDebugInfo Value="False"/> 161 | </Debugging> 162 | <LinkSmart Value="True"/> 163 | <Options> 164 | <Win32> 165 | <GraphicApplication Value="True"/> 166 | </Win32> 167 | </Options> 168 | </Linking> 169 | </CompilerOptions> 170 | </Item5> 171 | <Item6 Name="Release Darwin64"> 172 | <MacroValues Count="1"> 173 | <Macro3 Name="LCLWidgetType" Value="cocoa"/> 174 | </MacroValues> 175 | <CompilerOptions> 176 | <Version Value="11"/> 177 | <PathDelim Value="\"/> 178 | <Target> 179 | <Filename Value="fasubrip-$(TargetCPU)-$(TargetOS)"/> 180 | </Target> 181 | <SearchPaths> 182 | <IncludeFiles Value="$(ProjOutDir)"/> 183 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 184 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 185 | </SearchPaths> 186 | <Conditionals Value="// to support older MacOS versions 187 | LinkerOptions += ' -WM10.7';"/> 188 | <CodeGeneration> 189 | <SmartLinkUnit Value="True"/> 190 | <TargetCPU Value="x86_64"/> 191 | <TargetOS Value="darwin"/> 192 | <Optimizations> 193 | <OptimizationLevel Value="3"/> 194 | </Optimizations> 195 | </CodeGeneration> 196 | <Linking> 197 | <Debugging> 198 | <GenerateDebugInfo Value="False"/> 199 | </Debugging> 200 | <LinkSmart Value="True"/> 201 | <Options> 202 | <Win32> 203 | <GraphicApplication Value="True"/> 204 | </Win32> 205 | </Options> 206 | </Linking> 207 | </CompilerOptions> 208 | </Item6> 209 | <Item7 Name="Release Linux64Qt5"> 210 | <MacroValues Count="1"> 211 | <Macro4 Name="LCLWidgetType" Value="qt5"/> 212 | </MacroValues> 213 | <CompilerOptions> 214 | <Version Value="11"/> 215 | <PathDelim Value="\"/> 216 | <Target> 217 | <Filename Value="fasubrip-$(TargetCPU)-$(TargetOS)-Qt5"/> 218 | </Target> 219 | <SearchPaths> 220 | <IncludeFiles Value="$(ProjOutDir)"/> 221 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 222 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)-Qt5"/> 223 | </SearchPaths> 224 | <CodeGeneration> 225 | <SmartLinkUnit Value="True"/> 226 | <TargetCPU Value="x86_64"/> 227 | <TargetOS Value="linux"/> 228 | <Optimizations> 229 | <OptimizationLevel Value="3"/> 230 | </Optimizations> 231 | </CodeGeneration> 232 | <Linking> 233 | <Debugging> 234 | <GenerateDebugInfo Value="False"/> 235 | </Debugging> 236 | <LinkSmart Value="True"/> 237 | <Options> 238 | <Win32> 239 | <GraphicApplication Value="True"/> 240 | </Win32> 241 | </Options> 242 | </Linking> 243 | </CompilerOptions> 244 | </Item7> 245 | <Item8 Name="Release ARM7-HF-Linux"> 246 | <MacroValues Count="1"> 247 | <Macro2 Name="LCLWidgetType" Value="gtk2"/> 248 | </MacroValues> 249 | <CompilerOptions> 250 | <Version Value="11"/> 251 | <PathDelim Value="\"/> 252 | <Target> 253 | <Filename Value="fasubrip-$(TargetCPU)-$(TargetOS)"/> 254 | </Target> 255 | <SearchPaths> 256 | <IncludeFiles Value="$(ProjOutDir)"/> 257 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 258 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 259 | </SearchPaths> 260 | <CodeGeneration> 261 | <SmartLinkUnit Value="True"/> 262 | <TargetProcessor Value="ARMV7"/> 263 | <TargetCPU Value="arm"/> 264 | <TargetOS Value="linux"/> 265 | <Optimizations> 266 | <OptimizationLevel Value="3"/> 267 | </Optimizations> 268 | </CodeGeneration> 269 | <Linking> 270 | <Debugging> 271 | <GenerateDebugInfo Value="False"/> 272 | </Debugging> 273 | <LinkSmart Value="True"/> 274 | <Options> 275 | <Win32> 276 | <GraphicApplication Value="True"/> 277 | </Win32> 278 | </Options> 279 | </Linking> 280 | </CompilerOptions> 281 | </Item8> 282 | <SharedMatrixOptions Count="4"> 283 | <Item1 ID="714763086769" Modes="Release Win32" Type="IDEMacro" MacroName="LCLWidgetType" Value="win32"/> 284 | <Item2 ID="470355515500" Modes="Release Linux32,Release Linux64,Release ARM7-HF-Linux" Type="IDEMacro" MacroName="LCLWidgetType" Value="gtk2"/> 285 | <Item3 ID="162149294469" Modes="Release Darwin64" Type="IDEMacro" MacroName="LCLWidgetType" Value="cocoa"/> 286 | <Item4 ID="293044981887" Modes="Release Linux64Qt5" Type="IDEMacro" MacroName="LCLWidgetType" Value="qt5"/> 287 | </SharedMatrixOptions> 288 | </BuildModes> 289 | <PublishOptions> 290 | <Version Value="2"/> 291 | <DestinationDirectory Value="$(ProjPath)\published\releases\1.2.4"/> 292 | <CompressFinally Value="False"/> 293 | <UseFileFilters Value="True"/> 294 | <FileFilter Value="*.(res)"/> 295 | </PublishOptions> 296 | <RunParams> 297 | <FormatVersion Value="2"/> 298 | <Modes Count="1"> 299 | <Mode0 Name="default"/> 300 | </Modes> 301 | </RunParams> 302 | <RequiredPackages Count="2"> 303 | <Item1> 304 | <PackageName Value="LazControls"/> 305 | </Item1> 306 | <Item2> 307 | <PackageName Value="LCL"/> 308 | </Item2> 309 | </RequiredPackages> 310 | <Units Count="3"> 311 | <Unit0> 312 | <Filename Value="fasubrip.lpr"/> 313 | <IsPartOfProject Value="True"/> 314 | <UnitName Value="FaSubrip"/> 315 | </Unit0> 316 | <Unit1> 317 | <Filename Value="umain.pas"/> 318 | <IsPartOfProject Value="True"/> 319 | <ComponentName Value="FaSubripMain"/> 320 | <HasResources Value="True"/> 321 | <ResourceBaseClass Value="Form"/> 322 | </Unit1> 323 | <Unit2> 324 | <Filename Value="uabout.pas"/> 325 | <IsPartOfProject Value="True"/> 326 | <ComponentName Value="FaSubripAbout"/> 327 | <HasResources Value="True"/> 328 | <ResourceBaseClass Value="Form"/> 329 | </Unit2> 330 | </Units> 331 | </ProjectOptions> 332 | <CompilerOptions> 333 | <Version Value="11"/> 334 | <PathDelim Value="\"/> 335 | <Target> 336 | <Filename Value="fasubrip"/> 337 | </Target> 338 | <SearchPaths> 339 | <IncludeFiles Value="$(ProjOutDir)"/> 340 | <OtherUnitFiles Value="..\codecutils;..\commonutils"/> 341 | <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> 342 | </SearchPaths> 343 | <Parsing> 344 | <SyntaxOptions> 345 | <IncludeAssertionCode Value="True"/> 346 | </SyntaxOptions> 347 | </Parsing> 348 | <CodeGeneration> 349 | <Checks> 350 | <IOChecks Value="True"/> 351 | <RangeChecks Value="True"/> 352 | <OverflowChecks Value="True"/> 353 | <StackChecks Value="True"/> 354 | </Checks> 355 | <VerifyObjMethodCallValidity Value="True"/> 356 | </CodeGeneration> 357 | <Linking> 358 | <Debugging> 359 | <DebugInfoType Value="dsDwarf2Set"/> 360 | <UseHeaptrc Value="True"/> 361 | <TrashVariables Value="True"/> 362 | <UseExternalDbgSyms Value="True"/> 363 | </Debugging> 364 | <Options> 365 | <Win32> 366 | <GraphicApplication Value="True"/> 367 | </Win32> 368 | </Options> 369 | </Linking> 370 | </CompilerOptions> 371 | </CONFIG> 372 | -------------------------------------------------------------------------------- /fasubrip.lpr: -------------------------------------------------------------------------------- 1 | program FaSubrip; 2 | { FaSubrip: autodetects and converts encoding of farsi (persian) subrip files. 3 | with additional functionalities. 4 | 5 | Copyright (C) 2019 Mohammadreza Bahrami m.audio91@gmail.com 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. 19 | } 20 | 21 | {$mode objfpc}{$H+} 22 | 23 | uses 24 | {$IFDEF UNIX}{$IFDEF UseCThreads} 25 | cthreads, 26 | {$ENDIF}{$ENDIF} 27 | Interfaces, // this includes the LCL widgetset 28 | Classes, Forms, SysUtils, lazcontrols, umain, uabout 29 | { you can add units after this }; 30 | {$ifdef FPC_CROSSCOMPILING} 31 | {$ifdef Linux} 32 | // for most versions of Linux in case of linking errors 33 | {$linklib libc_nonshared.a} 34 | {$IFDEF CPUARM} 35 | // for GUI on RPi[1,2,3] with Arch Linux in case of linking errors 36 | // {$linklib GLESv2} 37 | {$ENDIF} 38 | {$endif} 39 | {$endif} 40 | 41 | var 42 | i: Word; 43 | 44 | {$R *.res} 45 | 46 | begin 47 | Application.Scaled:=True; 48 | Application.Title:='FaSubrip'; 49 | RequireDerivedFormResource:=True; 50 | {$IFDEF LCLQt5} 51 | Application.BidiMode := bdRightToLeft; 52 | {$ENDIF} 53 | Application.Initialize; 54 | Application.CreateForm(TFaSubripMain, FaSubripMain); 55 | {$ifndef darwin} 56 | if Application.ParamCount < 1 then 57 | FaSubripMain.FAutoRun := False 58 | else 59 | begin 60 | SetLength(FaSubripMain.FInputFiles, Application.ParamCount); 61 | for i := 1 to Application.ParamCount do 62 | FaSubripMain.FInputFiles[i-1] := Application.Params[i]; 63 | FaSubripMain.FAutoRun := True; 64 | end; 65 | {$endif} 66 | Application.CreateForm(TFaSubripAbout, FaSubripAbout); 67 | DefaultFormatSettings.DecimalSeparator:='.'; 68 | Application.Run; 69 | end. 70 | 71 | -------------------------------------------------------------------------------- /fasubrip.res: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/m-audio91/FaSubrip/c46f4e13d656d5035ad7315e9a63e35f46a6c99d/fasubrip.res -------------------------------------------------------------------------------- /releases/macos unidentified developer note.txt: -------------------------------------------------------------------------------- 1 | Unfortunately I can't afford apple developer license. so I can't sign my application bundles. If you get "unknown developer" or "unidentified developer" errors you still can right click on the bundle and click Open, then you should be able to open the application. ty. متاسفانه اینجانب حاضر به پرداخت هزینه برای تهیه اکانت توسعه دهنده اپل نیستم بنابراین نمی توانم باندل مک برنامه های خودم را امضا کنم. در نتیجه در زمان اجرای آنها با دابل کلیک با خطای "توسعه دهند ناشناخته" اپل مواجه خواهید شد. برای حل این مشکل باید روی باندل کلیک راست کرده و گزینه open را انتخاب نمایید تا به شما اجازه باز کردن را بدهد ممکن است چندبار مجبور به انجام اینکار بشوید با تشکر -------------------------------------------------------------------------------- /releases/make release.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/bash 2 | # first compile for every target and then run this scipt to get the zip file. 3 | # note: this script uses relative paths. so it is necessary to open the Terminal in the same folder as this script. 4 | 5 | name="fasubrip" 6 | namec="FaSubrip" 7 | ver="1.2.3" 8 | archive="$name""_v$ver""_cross_platform" 9 | hashfile="./$ver/$archive.hash.txt" 10 | lin32bin="$name-i386-linux" 11 | lin64bin="$name-x86_64-linux" 12 | lin64qt5bin="$name-x86_64-linux-Qt5" 13 | winbin="$name-i386-win32.exe" 14 | macosbin="$name-x86_64-darwin" 15 | arm7bin="$name-arm-linux" 16 | qt5note="qt5 runtime dependency note.txt" 17 | macosnote="macos unidentified developer note.txt" 18 | 19 | echo start 20 | rm -r ./$ver 21 | mkdir ./$ver 22 | touch $hashfile 23 | echo $archive >> $hashfile 24 | echo SHA256 valuse are calculated using sha256sum utility in default mode >> $hashfile 25 | echo "" >> $hashfile 26 | 27 | #gui 28 | if [ -f "../$lin32bin" ]; then 29 | mkdir -p ./$ver/linux32/icon 30 | cp ../$lin32bin ./$ver/linux32/$name 31 | cp ../extra/icon/*.png ./$ver/linux32/icon 32 | sha256sum ./$ver/linux32/$name >> $hashfile 33 | fi 34 | if [ -f "../$lin64bin" ]; then 35 | mkdir -p ./$ver/linux64/icon 36 | cp ../$lin64bin ./$ver/linux64/$name 37 | cp ../extra/icon/*.png ./$ver/linux64/icon 38 | sha256sum ./$ver/linux64/$name >> $hashfile 39 | fi 40 | if [ -f "../$lin64qt5bin" ]; then 41 | mkdir -p ./$ver/linux64-qt5/icon 42 | cp ../$lin64qt5bin ./$ver/linux64-qt5/$name 43 | cp ../extra/icon/*.png ./$ver/linux64-qt5/icon 44 | cp "./$qt5note" "./$ver/linux64-qt5/$qt5note" 45 | sha256sum ./$ver/linux64-qt5/$name >> $hashfile 46 | fi 47 | if [ -f "../$winbin" ]; then 48 | mkdir -p ./$ver/windows 49 | cp ../$winbin ./$ver/windows/$namec.exe 50 | sha256sum ./$ver/windows/$namec.exe >> $hashfile 51 | fi 52 | if [ -f "../$macosbin" ]; then 53 | mkdir -p ./$ver/macos 54 | cp -r ../$namec.app ./$ver/macos/$namec.app 55 | cp ../$macosbin ./$ver/macos/$namec.app/Contents/MacOS/$namec 56 | cp "./$macosnote" "./$ver/macos/$macosnote" 57 | sha256sum ./$ver/macos/$namec.app/Contents/MacOS/$namec >> $hashfile 58 | fi 59 | if [ -f "../$arm7bin" ]; then 60 | mkdir -p ./$ver/arm7/icon 61 | cp ../$arm7bin ./$ver/arm7/$name 62 | cp ../extra/icon/*.png ./$ver/arm7/icon 63 | sha256sum ./$ver/arm7/$name >> $hashfile 64 | fi 65 | 66 | #final output 67 | cd ./$ver 68 | zip -r ./$archive.zip ./linux32 ./linux64 ./linux64-qt5 ./windows ./macos ./arm7 69 | rm -r ./linux32 ./linux64 ./linux64-qt5 ./windows ./macos ./arm7 70 | 71 | echo done 72 | 73 | -------------------------------------------------------------------------------- /releases/qt5 runtime dependency note.txt: -------------------------------------------------------------------------------- 1 | برای اجرای نسخه کیوت۵ نصب پکیجی که در زیر آمده لازم است. این پکیج تنها روی توزیع های اصلی و بروز (اوبونتو ۲۰+ و فدورا ۳۲+) و زیرتوزیع های اصلی آنها موجود است. 2 | The following dependency is needed to run Qt5 version. available only in main distros with recent versions (Ubunto 20+, Fedora32+ etc). 3 | Using your distros repository - 4 | 5 | Fedora, Mageia... - sudo dnf install qt5pas <enter> 6 | Ubuntu, Debian... - sudo apt install libqt5pas1 <enter> 7 | -------------------------------------------------------------------------------- /uabout.lfm: -------------------------------------------------------------------------------- 1 | object FaSubripAbout: TFaSubripAbout 2 | Left = 310 3 | Height = 97 4 | Top = 250 5 | Width = 360 6 | AutoSize = True 7 | BorderIcons = [biSystemMenu] 8 | BorderStyle = bsSingle 9 | Caption = 'پشتیبانی' 10 | ClientHeight = 97 11 | ClientWidth = 360 12 | OnCreate = FormCreate 13 | OnShow = FormShow 14 | Position = poMainFormCenter 15 | object Header: TPanel 16 | Left = 0 17 | Height = 96 18 | Top = 0 19 | Width = 360 20 | Align = alTop 21 | AutoSize = True 22 | BevelOuter = bvNone 23 | ClientHeight = 96 24 | ClientWidth = 360 25 | Color = 4342338 26 | Constraints.MinWidth = 360 27 | Font.Color = clWhite 28 | ParentColor = False 29 | ParentFont = False 30 | TabOrder = 0 31 | object Logo: TImage 32 | Left = 8 33 | Height = 80 34 | Top = 8 35 | Width = 344 36 | Align = alTop 37 | AutoSize = True 38 | BorderSpacing.Around = 8 39 | Center = True 40 | Picture.Data = { 41 | 1754506F727461626C654E6574776F726B47726170686963FC13000089504E47 42 | 0D0A1A0A0000000D49484452000000500000005008060000008E11F2AD000000 43 | 0970485973000049D1000049D10105FCAB950000001974455874536F66747761 44 | 7265007777772E696E6B73636170652E6F72679BEE3C1A000013894944415478 45 | 9CDD9C797455D5BDC73FFB9C3B24B9190849C8CD9C00210C62800281002ADAA7 46 | 0C6D55B4825AFBDAFA6AEBEAA8ABB50FA93EFA10C1DA7959BB6A97EDAB5D0C5A 47 | 153A80A0568A9044206A98210C996742E6E10EE7ECF747C225F7DE73939B7003 48 | E277ADAC75EFD9637E77EFFDFBFDBEBFDF3E826B84AAC25F842BC2B100A9CFD4 49 | 113942CA1C84C801128668DA24E19422E56904A5123E928417A6E53FDE7335E6 50 | ED0B713507AB2ADC385D41BF5BC2ADC03CC01AA2AE7B810F40BCA74B7D5BFA82 51 | 35C742D4EF90187501961DFCA9DDACB9EE478A2F0333467BBC7E7C0CBC6256E4 52 | 96C4796B1A4673A0511360C5BE0DE34D26F93D297904081BAD7186800BD82A74 53 | 6D7DCAC2A74E8FC600211760CDFE75395255D722F922A086BAFF114293F09A50 54 | 599B9AF76469283B0E99006B8BD746E80ECB1A043F002CC1B673B975AA1B3AA9 55 | 6FEEA6AEA98B868B3DF43ADC389C3A3D0E3700E15613568B4298D544E2D87092 56 | 126C24C5DB484DB4615295E14CD381E07929C39E0D95D2098900AB8AD62F1552 57 | BC08640653BFACA69D23679A3979BE85B3556D385DDA88C6B59855B2D3639892 58 | 15CBF4EC38B252A2836A27A14C221F4DCF5FB37B44030FC01509B0B8F8F766BB 59 | A3792382C786EAABB9AD97828FEB2828A9A3EE42F7950C1B10C9093616CC4862 60 | C18C24C6C60CA9E0A544FCACC13276CDECD9DF708D74CC110BB0E6E03369D2AD 61 | 6E05993F68BDC64E76ECABA0E8703D9A2E473ADCB02004CC9996C8DDB78E2765 62 | 9C6DA8EA874CAAB6D29EF754D988C61A49A3CA820D731421773088D1DBD4D2C3 63 | D65D67283ED188BC3A72F3C32541AE5A924DFC98410D81464511CB92E7ADFE70 64 | D8630CB74175C1865BA590DB04181E389AA6F3AF83D5BCFECE397A9D233BDB42 65 | 0D8B5965F9A20C3E7F73E6604AA74B47DE33DC73715802AC2E78F65E049B08A0 66 | 656B9BBA7861EB51AA1B3A87D3ED55439A3D926FAD9C4E7242C06DED94523C90 67 | B660F51BC1F619B400AB0B36DC8A903B09E07E1594D4F1E7BF9F1A9555171369 68 | 61D5926CC6A7C6D0D3EBE6ED0F2A292CA91F515F16B3CA43CB2771F3EC944055 69 | 5C3AF2F3C1AEC4A004D87FE6BD0744FA9649099B769EE6EDA2AA60BA02202136 70 | 9CB937247ABE77763BD9FB616DC0FA4F3EFC19B2D3C7A0AA7DD3ED7568FC6AD3 71 | 614E9CBF18F498BE58B2209DFB97642384A1083A14216F499EBFE6A3A1FA310D 72 | 55A1AE6843A626E50E0C84A7693A2FBD7982A2C3C35B0DC9093656DC96D5F745 73 | 08DADA07176046729447780016B3C284B4982B12E0AE824ADA3B9D7C7DC55454 74 | FF73314A976267CDC167E6A4CCFDF1A02B635033BEB8F8F7664DCAAD18685B4D 75 | D3F9F5E623C316DE25B8DC12B349C5AC2A43EE83E65687D777A74BA7BCB67D44 76 | E30E44E1E17A7EBDF9089AA61B15274AB7BAB5B8F8F7E6C1FA1854807647F346 77 | 20CFF7B9949297B79FA4E4F485614D78A47879FB093ABA5DF43A34DC9ACEFB1F 78 | D570F44C7348FA2E397D8197DE3C11C0D492F949AE0BEB066B1F700B5715AD5F 79 | 8AE431A3B24D3B4BD9FF71DDF0667A053857D5C6779FDB475C8C958E6E173DBD 80 | EE90F65F74B89E319116EE5F3AC9AF4C4AF1446DC186F79217AC7EDBA8ADA100 81 | AB0A7F118EECFD2D069BABE848FDB014C6952221369CBB6FCD2277523CB67033 82 | 3DBD6EEA9BBBD9B9BF22A446FA5B0595A42745B16046926F91D0857CA9B678ED 83 | D4E4D96BFD7C50C32D2C64EF8F0564F93EAFBFD0CDFFFDED5468661C04A64F8C 84 | 63FD77E6919F9B4494CD82A2086C116626A4C5F05F2BA6B2FEDBF31913152A52 85 | 1BFEFCF753D43675191565684ECB8F8C0AFC0458B37F5D4E3F25E5054D93FC66 86 | CB110FC534DA181B13C6771E984E98454551FCB54CB8D5445242044F3D321BB3 87 | 6958945640F43A355E7CF598A15211F0A3AA0FD665FB3EF71B590AF52718781A 88 | 3BF6955F550F63E9820C2FC1389C1A5DBD6E2F435D5504D19116962DCA0CD9B8 89 | 95F51DEC2A343CA2AC429A9EF67DE825C0CA82751310DCEB5BA9B9AD977FBC5F 90 | 1EB2490683DC9C3854A56F7ABD0E8D7FEC2DE7977F29E1D5DD67710CD80556B3 91 | CA6D7353433AF6B6F7CED1D462C0B74A79BFEF2AF412A010CA9318D0F09B7796 92 | E2B8CAC4802DECB27E339914761755525AD1CABF0E54B169D719AF95680B5389 93 | B6054D820F09A74BE7AF6F9F352A5215A9FE70E0038F00CB0EFED42E105FF26D 94 | 51D3D849F189C6904D2E58740D3055DC6E8D07974EE23FE6A5B1784E2AB63093 95 | 97F6756992C4B8F0908E7FE05883A1429192FFAC2F787EDCA5EF9E9FD9ACB91F 96 | C0E0ECFBFBDEF26BC2E79D2E6F65DCD870142108B39AB8654E0A2EB78EA6E908 97 | 2130A9DE8AC5163EA8C3306C4809FF7CBF9C47EE99E65B647109E7FDC0AF61E0 98 | 16963CE45BB3B9AD9783474735AC1A106FEDAFC0E5F2D68666535F60C96A51BD 99 | FC572120CC12FA0060D1E17A2EB6F5FA3D17882F5FFAAC0054ECDF380D83A077 100 | C1C775578586570CAC90DAA62E5E7CED183D0E373DFDDAD7E9D20CE7A30A81D5 101 | 3A242F326C68BAA4D0D8D79F5559B0FE06E8DFC22645BFC7484C011A5F3124D2 102 | CBC5890CB0FD3E3ED5C4F77FBA9F9CCC31845B4D84594D44849988B0AA2C5D94 103 | E9D9C68A2AB09A4727045D5052C7E76ECAF47BAE20EE028E9900FA7355BC5056 104 | D31EC82ABF62389C3A0337A794705B5E2AE7ABDBE9EA71F99DB9358DDEF348B7 105 | 47A269D22340B726E9EE1D71606D50D434765151D74146529477816031F08CA9 106 | 6CCFDA300C18972321623B8C50DBD4856580916CB5A8ACBC3D1BAB45452271BB 107 | 25BA6E4831017D02B75A2EB75780D3E52DA336DFA3679AFD0508F95585BF0857 108 | CC56F3020C72574E9E1FBD09757439395DD6827B80CB14665511021421B098FB 109 | 9445A0BFF00136A2D3A571E844234D2DFE877DA81080B80D137ACF3C45C02CDF 110 | 12B7A673B6AA6DD42604F0E25F8F515EDB418F430346A6A81C4E8DD2CA565EDE 111 | 7632B493F3416945ABD78FED8160964947E4F8BAEA55F59D234EB708169DDD2E 112 | D6BD54CCF4ECB1DC343385F1A9D1C48FB1F6D92443C0EDD6A9BDD0C5CEFD9514 113 | 1DAE478EB2A1EA74E9D43476F96D63A1881C9380C9BE0DEA4729F5C217524A8E 114 | 943673A474F4CEDB50A1FE42B7FF3928658E02F8D1B075174647FB5ECF3074EB 115 | 10390A10EF5BD070F19AA41B7FA2D1682C93040503DA3ED431874F030210C946 116 | 4E149F989C964F12022D2A43015E6DEEEF7A40A04535620F3CDD1E456AA28DD8 117 | E8309C6E8DB60E2767ABDA0CD98BC1F0F0DD5348B74771BEBA9D3FFF2370C02A 118 | CD1EE9479ABADC3AAD1D0E9ADB1C5E718CE58B32997B431F65F7F3574A68EF72 119 | 0E6B4EC381A100AD83504309B1E17CE3DE694CCA18E35726A5E44C651BCFFCA1 120 | 38E80924C5DBC84A89A67B8873F7AEC5E399336D9C61594FAF9B5D85956CDF53 121 | 869492B831619E745FA380D44810882E331460A0CA568BCA7F7FED3324C486A1 122 | 693A078E355255DF81D9A492911CC98C4909A4D9FD7CC690E3D0F146A49444DB 123 | 2C64A7C7101E66E2EE5BC7D3E370B3ABA0920F8ED45355DF17000B15C930D07D 124 | 1C08137D7E94D7CF1411A0F28C9C781262FBDCE6D7DF3DCF8E7DE55EE5B1D156 125 | 56DC36012104CB16660070B6B295D315AD9E3A9F99320E7B7C049D3D2EF616D7 126 | F88D91373D91599313D0A5A4F878231F9E6CF2ABF3C2D6231EC6262B259A9F3C 127 | 3A1780F937DAD95550E9F53FB8DC92E9D971A4DBA370BA34DEF9A08AC959B12C 128 | 9C9984C5AC72F27C0B7B8B6BD087F06602C84437096890601FF834312EC2B093 129 | 81B47994CD9FC36B6977F0F2B6132842B0F28E89006CDF73DE4B80F37313997B 130 | 4322B54D5D5E02B4859B79EC4B339839F9B259BA6046129BDF2AF508C5086535 131 | ED385D3A16B3E2D9AE53C7C7B2E2B609401FB33D7BEA3816CF49A1ABC78D3D3E 132 | 82CFE6A57AD2DAE64D4F64625A0C7F78F378C03100C68D358CB9D42920FD2E9E 133 | D8E38D053830236AD9C20C7EF2E85CEEFDEC04664E8E0FB8C48345527C04B54D 134 | 5DFCFC951236BF55EAD17AF7DC3681706BE0337972562C16739F31515ADE1AB0 135 | 1E4078988AC5ACF09BCD4779E98DE3B4B4F7657D2D9A95644457F9CCCF20AB55 136 | 506A42528AE0A6212B03E7ABDBF977710DB7F4677766A5447B0E6B975BE7A393 137 | 4D6CDA594A7BE7F0B5DED9AA365EDD7D0680C3A57D41F39577F4718413D3BC15 138 | D67DB767A32A82B83156664DEE532C4D2D3D43C6AE3BBA5C5ECC4D7B97931F7C 139 | 7926D0B76A2BEA3A02B6355C54529E3121F05B81698991582DAAA13DF8C7ED27 140 | 397EEE2237CD4A2627730C967E2ADD6C52C89B9E486672143FFEED8141FF9160 141 | 70B2EC321FE97BE763F9A20CAFEFA7CA5AF8ED6BC768EBF0CE231C0AA7068C11 142 | 3726705834CCA2926A745D42526AD2857248F81CA0AA2AC84E8FE1D859E30CD0 143 | 03471B3870B4015511A4264672C3C4B12C5D9841B4CD42625C0437665F3EC786 144 | 7915CB03877320D9EA7D3CFCEEB56358CC0A0F7D2E078B5925799C0DB33A7C73 145 | C5ED96E852A20881D51C789ED919638CB2585154F580D2DB622BA2EFBEAD1726 146 | 67C6FA35488A8F401D605769BAA4A2AE831DFB2AD8FEDEE57B2A0315CC48E3B5 147 | E3C65E26C97D8DF383C71BD8FB61ADC7F08EB659F8DE83B99EB3305824F4C79D 148 | 019ADB02AFDEA9E3FD650174775D8C38A4642FFBAE0341916F696E8E1F49C3C2 149 | 99493CFD8D39CCC889F70C0C7DE7D5E4ACCBE7D4F9EA363ABB5D9EC12F19E671 150 | 31610135FC40A8AAE0F6F9E9401F3B7E3A8072D8F7511DFFEED7E41949513C7C 151 | F7D421FBBE0421E00B375FCEE03B5C1A38DB367792BF2C80C2EC65DF75F4ED0D 152 | 29F6805C3CB03423298A947191D4347A676465A544F3F84333E8EA7151DDD089 153 | D3A5939E14454C649F9BF5EFE21ACA6B3B385FDDCE8D93E2488C8BE0573F5C48 154 | 6B87137B5C380E9771B068425A0CDF7F3097B64E273999633C77397617560DEA 155 | 8AFDE59FA7C9488A222B259AF937DAA9A80DAC08A26C669EF8CA2CDA3A1D6426 156 | 477BAE81151DA9A7ACC638E73ACD1E496AA25F7E3D08F6403F992015F756A3C6 157 | F9B9895EDF0F1D6F646F710DED5D4E6CE1667232FB6E49C6445A686AE9E12F3B 158 | 4EF3A7BFF569B9ADBBCFD0DCBFF56CE166AC16959FBD52C2B1B3C6EC735D5317 159 | 568BCAE239292427D89012DE3D50CDEBEF1826F978E072EBBCB0F5285D3D7DAE 160 | E07D774C64EAF8B186751D4E9DE6D61EE64C1B47CA381B9A26D973A89A3FBC71 161 | 2260FFF9B97E19AB00084D7B030678203585CF1E92307B60A59676078FFF7C3F 162 | 9AE66FA547DB2CC44459B09A555A3B1C5C68F52711CC2685D4C4481445505ED3 163 | 1E5496C3D8182BE3C646507FA19BD6616AD540F8EA9D53583C2785B64E27DFD9 164 | F83EAA22888DB6D2D5E31E3461545505BFFCC142A32CD883A9F94FE6C1005F58 165 | C2267C04181B6D65416E12EF7FE47F87A3BDCB3924CBE172EB01B746205C6C73 166 | 707190033D14D07469F883FB62E1CC64C3146229D974E9B3476D99A4793306DA 167 | 78D9A28C6002659F3A2842B07C61865151AF49638BA7DEA50FF6053F6C44F227 168 | DFDAC90936F26E48F47D7C5DA1B0A48E3FFDED145B779D09BA4DDE8D89C6DE87 169 | 907F4CBAE9490FC3E16538994CDAF380DFA1B06A49F6A8A48F5D2D9CAE6865CF 170 | A16A0A4A82BBDB126E35B1EA0EBF7C7200B749D17F36F0819700ED794F950978 171 | CDB7D5D89830EE5C3C7E1853BEBE71E7E22C62A30DAF4F6CF1BDD9EE67BABB35 172 | F1140667E192FCF421198B4F033293A3B8637E9A51518F2AC4E059FA00198B56 173 | 9F97523EE7FB5C5505DF5E357D506AE97A479845E5D1FBA61BFABD203624CD5F 174 | 5DEEFBD4D87914E1CF01E77D1F27C645F0B5BB827797AE377CE5CE29241973A1 175 | E75C0EC7F3460586024CCB7FBC4791E251C0CFEFCA9B9EE8A1EB3F4D58BE2883 176 | FC5CBB51912E84F866D6E2B586866340FA2279C1EAB7859086525F79C7446E9A 177 | 953CB2997E02313FD7CE7DB74F342E946C4C99BFFADD406D07E57FEACCF14F81 178 | 3F532384E0AB774EF68A5F5CAF9839399E47564C0D74F5BF20C5E9FC9FC1DA0F 179 | E963D4163C93A10BE500E0674D6B9ACECBDB4F5ED5BBC3A1C4C299493C7CD714 180 | 43A521A05EE84A5EF2C2FF0E1CD122C8974ED416AD9FA549B1C7E85D31524A5E 181 | DD7D969DFB2B829EF82701CB176570DFED130D579E847605714B4AFEEA8F87EA 182 | 27682FB7AA68C32D42CA5D0478EDC9A1E30DBCBCEDE4901906D71AE156135FF9 183 | C264E61B2B0C00A750E4E752E6AD792798FE86451354153DBB4248361340880D 184 | CD3DBCB0F5C8A0D1AD6B89CCE428BEB572FA60ACB8430A1E489BFFE49BC1F639 185 | FC573FED5FBF18456C03628CCA2FBDFAE98D77CFF527905F7B582D2ACB1666F0 186 | 859BB3BC5E9FE2834E458A7B02BD1B2110464454D5146E9829916F61A0582EA1 187 | A5DDC1D6DD67F8E048FD357DF9D8FC1BEDAC5A923DE8AB0104D4835816CC9967 188 | D07664A8DDBF315D57E496A15E7F5777A19B9DFBCAD95F5267C86C8F065455B0 189 | 704612CB176506CCB218800245571E184ADB06C21551A572CF5A536D98F91929 190 | C51343F5D5D2EEA0F0701D0525F5A3F6EA80347B24F9B949E4E7DA03B12903A1 191 | 837C2EC5E17A5A2C5E3B62CD1712AEB9B660C3EDBA90BF0382E2BCAAEA3B395C 192 | 7A8193652D9456B48E382336CCA2929D31862959B1CCC889378E9E19E39C10E2 193 | 9B837918C12264647DFF9BC99F9052FE0808FAFAB8A6E9543776517FA19BBA0B 194 | 5D3434F7D0E370E3706A1E932822ACEF8E70B8D5843D3E027B5C04F6F8085213 195 | 23BD02FD41A007C40697C3F17C20DF76B80879B4A362DF86F12645FEAF14ACE4 196 | 0A5288430C37B04515E269234AEA4A306AE1A2BAA20D993AF23129F93AC35891 197 | 218603784D2ADABAB4794F051F101906463DDE565FF0FC3817AE5542F0203077 198 | B4C7EBC74129D964D2D8323000341AB8AA01CBEA03CF4E42175F44CAC5C07C60 199 | E84499E0D00D1421780F85D743FDB6F2C170CD22BEC78FAFB5C47684CDD5352D 200 | 0FC1241093E8BBB73714D1580B94822C15883342E7404BACF3C0B4696B47EF2E 201 | C320F87FB16A50F15804A8860000000049454E44AE426082 202 | } 203 | end 204 | end 205 | object LinksBox: TPanel 206 | Left = 0 207 | Height = 1 208 | Top = 96 209 | Width = 360 210 | Align = alTop 211 | AutoSize = True 212 | BevelOuter = bvNone 213 | ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize 214 | ChildSizing.EnlargeVertical = crsHomogenousSpaceResize 215 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 216 | ChildSizing.ControlsPerLine = 1 217 | Color = clForm 218 | ParentColor = False 219 | TabOrder = 1 220 | end 221 | end 222 | -------------------------------------------------------------------------------- /uabout.pas: -------------------------------------------------------------------------------- 1 | unit uabout; 2 | { FaSubrip: autodetects and converts encoding of farsi (persian) subrip files. 3 | with additional functionalities. 4 | 5 | Copyright (C) 2016-2021 Mohammadreza Bahrami m.audio91@gmail.com 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. 19 | } 20 | 21 | {$mode objfpc}{$H+} 22 | 23 | interface 24 | 25 | uses 26 | Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, 27 | uUrlLabel, CommonGUIUtils; 28 | 29 | type 30 | 31 | { TFaSubripAbout } 32 | 33 | TFaSubripAbout = class(TForm) 34 | Header: TPanel; 35 | Logo: TImage; 36 | LinksBox: TPanel; 37 | procedure FormCreate(Sender: TObject); 38 | procedure FormShow(Sender: TObject); 39 | private 40 | MailUrlL: TUrlLabelEx; 41 | ContactUrlL: TUrlLabelEx; 42 | IssuesUrlL: TUrlLabelEx; 43 | UpdatesUrlL: TUrlLabelEx; 44 | end; 45 | 46 | var 47 | FaSubripAbout: TFaSubripAbout; 48 | 49 | implementation 50 | 51 | {$R *.lfm} 52 | 53 | const 54 | MailUrl = 'mailto:maudio91@gmail.com'; 55 | ContactUrl = 'http://mohammadrezab.blogsky.com'; 56 | IssuesUrl = 'https://github.com/m-audio91/FaSubrip/issues'; 57 | UpdatesUrl = 'https://github.com/m-audio91/FaSubrip/releases/latest'; 58 | 59 | resourcestring 60 | rsMail = 'ایمیل'; 61 | rsBlog = 'بلاگ'; 62 | rsIssueReporting = 'گزارش خطا در گیت هاب'; 63 | rsUpdatesCaption = 'دریافت نسخه جدید'; 64 | 65 | { TFaSubripAbout } 66 | 67 | procedure TFaSubripAbout.FormCreate(Sender: TObject); 68 | begin 69 | UpdatesUrlL := TUrlLabelEx.Create(Self); 70 | with UpdatesUrlL do 71 | begin 72 | Parent := LinksBox; 73 | Alignment := taCenter; 74 | Caption := rsUpdatesCaption; 75 | URL := UpdatesUrl; 76 | ShowHint := True; 77 | HighlightColor := clHighlight; 78 | end; 79 | IssuesUrlL := TUrlLabelEx.Create(Self); 80 | with IssuesUrlL do 81 | begin 82 | Parent := LinksBox; 83 | Alignment := taCenter; 84 | Caption := rsIssueReporting; 85 | URL := IssuesUrl; 86 | HighlightColor := clHighlight; 87 | end; 88 | MailUrlL := TUrlLabelEx.Create(Self); 89 | with MailUrlL do 90 | begin 91 | Parent := LinksBox; 92 | Alignment := taCenter; 93 | Caption := rsMail; 94 | URL := MailUrl; 95 | HighlightColor := clHighlight; 96 | end; 97 | ContactUrlL := TUrlLabelEx.Create(Self); 98 | with ContactUrlL do 99 | begin 100 | Parent := LinksBox; 101 | Alignment := taCenter; 102 | Caption := rsBlog; 103 | URL := ContactUrl; 104 | HighlightColor := clHighlight; 105 | end; 106 | end; 107 | 108 | procedure TFaSubripAbout.FormShow(Sender: TObject); 109 | begin 110 | CheckDisplayInScreen(Self); 111 | end; 112 | 113 | 114 | end. 115 | 116 | -------------------------------------------------------------------------------- /umain.lfm: -------------------------------------------------------------------------------- 1 | object FaSubripMain: TFaSubripMain 2 | Left = 500 3 | Height = 414 4 | Top = 218 5 | Width = 582 6 | AllowDropFiles = True 7 | BorderIcons = [biSystemMenu, biMinimize] 8 | BorderStyle = bsSingle 9 | Caption = 'FaSubrip v1.2.4' 10 | ClientHeight = 414 11 | ClientWidth = 582 12 | DefaultMonitor = dmPrimary 13 | OnActivate = FormActivate 14 | OnCreate = FormCreate 15 | OnDropFiles = FormDropFiles 16 | OnShow = FormShow 17 | ParentFont = True 18 | SessionProperties = 'AppendEncodingToFileName.State;ArabicCharsToFarsi.State;CensorshipLevel.ItemIndex;EndingPunctuations.ItemIndex;Left;OpenDlg.InitialDir;OutFileEncoding.ItemIndex;PhrasesCensorship.State;PhrasesCensorshipFile.Text;ReplaceSourceFile.State;StripHTMLFontTags.State;StripHTMLStyleTags.State;Top;EnglishNumbers.State' 19 | object Header: TPanel 20 | Left = 0 21 | Height = 30 22 | Top = 0 23 | Width = 582 24 | Align = alTop 25 | AutoSize = True 26 | BevelOuter = bvNone 27 | ChildSizing.EnlargeHorizontal = crsHomogenousChildResize 28 | ChildSizing.EnlargeVertical = crsHomogenousChildResize 29 | ChildSizing.ShrinkHorizontal = crsHomogenousChildResize 30 | ChildSizing.ShrinkVertical = crsHomogenousChildResize 31 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 32 | ChildSizing.ControlsPerLine = 1 33 | ClientHeight = 30 34 | ClientWidth = 582 35 | Color = 4342338 36 | Font.Color = clWhite 37 | ParentBidiMode = False 38 | ParentColor = False 39 | ParentFont = False 40 | TabOrder = 3 41 | object Description: TLabel 42 | Left = 8 43 | Height = 17 44 | Top = 4 45 | Width = 566 46 | BidiMode = bdRightToLeft 47 | BorderSpacing.Left = 8 48 | BorderSpacing.Top = 4 49 | BorderSpacing.Right = 8 50 | Caption = 'نرم افزاری رایگان برای حل مشکل نمایش بصورت حروف پرت در زیرنویس های SRT فارسی' 51 | Font.Color = clWhite 52 | ParentBidiMode = False 53 | ParentColor = False 54 | ParentFont = False 55 | end 56 | object HeaderLinks: TPanel 57 | Left = 8 58 | Height = 1 59 | Top = 25 60 | Width = 566 61 | BorderSpacing.Left = 8 62 | BorderSpacing.Top = 4 63 | BorderSpacing.Right = 8 64 | BorderSpacing.Bottom = 4 65 | BevelOuter = bvNone 66 | Font.Color = clWhite 67 | ParentFont = False 68 | TabOrder = 0 69 | end 70 | end 71 | object OpenSubsContainer: TPanel 72 | Left = 8 73 | Height = 27 74 | Top = 33 75 | Width = 566 76 | Align = alTop 77 | Alignment = taRightJustify 78 | AutoSize = True 79 | BorderSpacing.Left = 8 80 | BorderSpacing.Top = 3 81 | BorderSpacing.Right = 8 82 | BevelOuter = bvNone 83 | BidiMode = bdRightToLeft 84 | ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize 85 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 86 | ChildSizing.ControlsPerLine = 1 87 | ClientHeight = 27 88 | ClientWidth = 566 89 | Color = clForm 90 | Font.Color = 4342338 91 | ParentBidiMode = False 92 | ParentColor = False 93 | ParentFont = False 94 | TabOrder = 0 95 | object OpenSubs: TButton 96 | Left = 220 97 | Height = 27 98 | Hint = 'با این دکمه زیرنویس (های) خود را باز کنید.'#13#10'همچنین می توانید از فایل اکسپلورر بکشید (شان) و روی صفحه فاسابریپ رها کنید'#13#10'بعلاوه می توانید بدون باز کردن فاسابریپ، از فایل اکسپلورر بکشید (شان) و روی آیکون فاسابریپ رها کنید اما این مورد تنها مخصوص سیستم عامل ویندوز می باشد'#13#10'توجه: User Account Control در سیستم عامل ویندوز ممکن است مانع کشیدن و رها کردن بشود!'#10'بعلاوه می توانید از طریق خط فرمان یا ترمینال بصورت زیر زیرنویس خود را پردازش کنید:'#10'fasubrip SUBTITLE' 99 | Top = 0 100 | Width = 127 101 | AutoSize = True 102 | Caption = 'بازکنید زیرنویس ها را' 103 | OnClick = OpenSubsClick 104 | ParentFont = False 105 | ParentShowHint = False 106 | TabOrder = 0 107 | end 108 | object DragNotifierL: TLabel 109 | Left = 0 110 | Height = 27 111 | Top = 0 112 | Width = 131 113 | Align = alLeft 114 | Caption = 'یا بکشید و اینجا رها کنید' 115 | Font.Color = 4342338 116 | Layout = tlCenter 117 | ParentColor = False 118 | ParentFont = False 119 | end 120 | end 121 | object OptionalSettings: TDividerBevel 122 | Left = 16 123 | Height = 17 124 | Top = 60 125 | Width = 550 126 | Align = alTop 127 | BorderSpacing.Left = 16 128 | BorderSpacing.Right = 16 129 | Font.Style = [fsBold] 130 | ParentFont = False 131 | end 132 | object SettingsNotifier: TPanel 133 | Left = 8 134 | Height = 17 135 | Top = 77 136 | Width = 566 137 | Align = alTop 138 | AutoSize = True 139 | BorderSpacing.Left = 8 140 | BorderSpacing.Right = 8 141 | BorderSpacing.Bottom = 8 142 | BevelOuter = bvNone 143 | ClientHeight = 17 144 | ClientWidth = 566 145 | Color = clForm 146 | Font.Color = 4342338 147 | ParentColor = False 148 | ParentFont = False 149 | TabOrder = 1 150 | object SettingsNotifierL: TLabel 151 | Left = 518 152 | Height = 17 153 | Top = 0 154 | Width = 48 155 | Align = alRight 156 | Alignment = taCenter 157 | Caption = 'تنظیمات' 158 | Font.Color = 4342338 159 | Layout = tlCenter 160 | ParentColor = False 161 | ParentFont = False 162 | end 163 | object SettingsShow: TSpeedButton 164 | Left = 502 165 | Height = 17 166 | Hint = 'نمایش/مخفی کردن تنظیمات' 167 | Top = 0 168 | Width = 16 169 | Align = alRight 170 | AutoSize = True 171 | Flat = True 172 | Font.Color = 4342338 173 | Images = Imgs 174 | ImageIndex = 0 175 | OnClick = SettingsShowClick 176 | ParentFont = False 177 | end 178 | object SettingsHelps: TSpeedButton 179 | Left = 486 180 | Height = 17 181 | Hint = 'راهنمای تنظیمات فاسابریپ' 182 | Top = 0 183 | Width = 16 184 | Align = alRight 185 | AutoSize = True 186 | Flat = True 187 | Font.Color = 4342338 188 | Images = Imgs 189 | ImageIndex = 2 190 | OnClick = SettingsHelpsClick 191 | ParentFont = False 192 | end 193 | end 194 | object SettingContainersGrid: TPanel 195 | Left = 8 196 | Height = 251 197 | Top = 102 198 | Width = 566 199 | Align = alTop 200 | Alignment = taRightJustify 201 | AutoSize = True 202 | BorderSpacing.Left = 8 203 | BorderSpacing.Top = 3 204 | BorderSpacing.Right = 8 205 | BevelOuter = bvNone 206 | BidiMode = bdRightToLeft 207 | ChildSizing.EnlargeHorizontal = crsHomogenousSpaceResize 208 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 209 | ChildSizing.ControlsPerLine = 1 210 | ClientHeight = 251 211 | ClientWidth = 566 212 | Color = clForm 213 | ParentBidiMode = False 214 | ParentColor = False 215 | TabOrder = 4 216 | object Container1: TPanel 217 | Left = 0 218 | Height = 84 219 | Top = 0 220 | Width = 566 221 | Align = alTop 222 | AutoSize = True 223 | BevelOuter = bvNone 224 | ClientHeight = 84 225 | ClientWidth = 566 226 | TabOrder = 0 227 | object SubContainer1: TPanel 228 | Left = 307 229 | Height = 84 230 | Hint = 'object EnglishNumbers: TCheckBox'#10' Left = 260'#10' Height = 21'#10' Top = 0'#10' Width = 21'#10' TabOrder = 0'#10'end'#10 231 | Top = 0 232 | Width = 259 233 | Align = alRight 234 | AutoSize = True 235 | BevelOuter = bvNone 236 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 237 | ChildSizing.ControlsPerLine = 2 238 | ClientHeight = 84 239 | ClientWidth = 259 240 | TabOrder = 0 241 | object StripHTMLFontTags: TCheckBox 242 | Left = 238 243 | Height = 21 244 | Top = 0 245 | Width = 21 246 | TabOrder = 0 247 | end 248 | object StripHTMLFontTagsL: TLabel 249 | Left = 0 250 | Height = 21 251 | Hint = 'فعال کردن این گزینه منجر به حذف تگ های <font .....> و </font> می شود. این تگ ها در اکثر پلیرهای کامپیوتری عمل می کنند اما پخش کننده های سخت افزاری (تلوزیون و بلوری و..) و گوشی یا مستقیما خود تگ را نشان می دهند یا در بهترین حالت فقط نشان نمی دهند. پس در نتیجه حذفشان ضرری ایجاد نمی کند.' 252 | Top = 0 253 | Width = 238 254 | Caption = 'حذف برچسب های HTML رنگ و اندازه قلم' 255 | ParentColor = False 256 | end 257 | object StripHTMLStyleTags: TCheckBox 258 | Left = 238 259 | Height = 21 260 | Top = 21 261 | Width = 21 262 | TabOrder = 1 263 | end 264 | object StripHTMLStyleTagsL: TLabel 265 | Left = 0 266 | Height = 21 267 | Hint = 'فعال کردن این گزینه منجر به حذف تگ های Italic ،Bold و Underline مانند <i></b> و غیره می شود. این تگ ها در اکثر پلیرهای کامپیوتری عمل می کنند اما پخش کننده های سخت افزاری و گوشی یا مستقیما خود تگ را نشان می دهند یا در بهترین حالت فقط نشان نمی دهند. پس در نتیجه حذفشان ضرری ایجاد نمی کند.' 268 | Top = 21 269 | Width = 238 270 | Caption = 'حذف برچسب های HTML حالات متن' 271 | ParentColor = False 272 | end 273 | object ArabicCharsToFarsi: TCheckBox 274 | Left = 238 275 | Height = 21 276 | Top = 42 277 | Width = 21 278 | TabOrder = 2 279 | end 280 | object ArabicCharsToFarsiL: TLabel 281 | Left = 0 282 | Height = 21 283 | Hint = 'با فعال کردن این گزینه حروف ''ك'' و ''ي'' عربی در صورت موجود بودن با نسخه فارسی خودشان جایگزین خواهند شد و در صورت غیرفعال بودن عربی خواهند ماند.'#13#10'اگر مشاهده کردید در نرم افزار پخش کننده تان این دو حرف در زیرنویس خروجی بصورت علامت سوال یا مربع و امثال آن دیده می شوند موقعیت این گزینه را تغییر داده و مجددا امتحان کنید. همچنین برخی فونت ها از حالت فارسی این دو حرف پشتیبانی نمی کنند.'#10'هنگامی که با کدگذاری ANSI WINDOWS-1256 خروجی می گیرید این گزینه بطور اجباری غیر فعال می گردد زیرا نسخه فارسی این دو حرف در این کدگذاری تعریف نشده اند.' 284 | Top = 42 285 | Width = 238 286 | Caption = 'ی و ک فارسی' 287 | ParentColor = False 288 | end 289 | object EnglishNumbers: TCheckBox 290 | Left = 238 291 | Height = 21 292 | Top = 63 293 | Width = 21 294 | TabOrder = 3 295 | end 296 | object EnglishNumbersL: TLabel 297 | Left = 0 298 | Height = 21 299 | Hint = 'اعداد در رایانه ممکنه به دو شکل فارسی باشند. یا انگلیسی هستند و فقط فارسی نمایش داده می شوند (بنا به تنظیمات سیستم عامل یا فونت نمایش). یا واقعا فارسی تایپ و ذخیره شده اند. با توجه به اینکه استفاده از اعداد فارسی در زیرنویس های فارسی فیلم های روز مرسوم شده اما این اعداد فقط در کدگذاری یونیکد تعریف شده هستند لذا با این گزینه می توان این اعداد را در صورت وجود با انگلیسی جایگزین کرد (اگر مشکل علامت سوال شدن اعداد را دارید). این عمل برای خروجی ANSI بطور اجباری توسط فاسابریپ اتفاق خواهد افتاد!' 300 | Top = 63 301 | Width = 238 302 | Caption = 'اعداد انگلیسی' 303 | ParentColor = False 304 | end 305 | end 306 | end 307 | object Container2: TPanel 308 | Left = 0 309 | Height = 52 310 | Top = 84 311 | Width = 566 312 | Align = alTop 313 | AutoSize = True 314 | BevelOuter = bvNone 315 | ClientHeight = 52 316 | ClientWidth = 566 317 | TabOrder = 1 318 | object SubContainer2: TPanel 319 | Left = 162 320 | Height = 52 321 | Top = 0 322 | Width = 404 323 | Align = alRight 324 | AutoSize = True 325 | BevelOuter = bvNone 326 | ChildSizing.HorizontalSpacing = 2 327 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 328 | ChildSizing.ControlsPerLine = 2 329 | ClientHeight = 52 330 | ClientWidth = 404 331 | TabOrder = 0 332 | object SubtitleDelayL: TLabel 333 | Left = 202 334 | Height = 27 335 | Hint = 'با استفاده از این دکمه می توانید زمان پخش زیرنویس خود را عقب بکشید یا جلو ببرید تا با فیلمتان هماهنگ شود. عدد منفی یعنی جلو می کشید (زودتر پخش می شود). عدد مثبت یعنی عقب می اندازید (دیرتر پخش می شود) . این تنظیم یکبار مصرف است. یعنی برای جلوگیری از اشتباهات سهوی این عدد پس از هر بار خروجی گرفتن صفر می شود و باید مجددا (بسته به نیاز زیرنویس های بعدی) تنظیم شود. البته برای تبدیل های گروهی روی کل گروه اعمال می شود بعد صفر می شود.' 336 | Top = 0 337 | Width = 202 338 | Caption = 'جلو عقب کردن زمان پخش' 339 | ParentColor = False 340 | end 341 | object SubtitleDelay: TBitBtn 342 | Left = 0 343 | Height = 27 344 | Top = 0 345 | Width = 200 346 | AutoSize = True 347 | Caption = ': 0' 348 | Images = Imgs 349 | ImageIndex = 4 350 | OnClick = SubtitleDelayClick 351 | ParentBidiMode = False 352 | TabOrder = 0 353 | end 354 | object EndingPunctuationsL: TLabel 355 | Left = 202 356 | Height = 25 357 | Hint = 'یکی از مشکلات شایع برخی نرم افزارها با زبان فارسی مشکل نمایش کامل راست به چپ هست که حتی اگر متن به درستی نمایش داده شود باز علایمی مانند نقطه و علامت سوال و غیره که در انتهای خط تایپ شده اند در هنگام نمایش در ابتدای خط نمایش داده می شوند. کاری که این گزینه می کند این است که فقط علایم انتهای خطوط را به ابتدای خط منتقل می کند یا بلعکس تا شاید در زمان نمایش در پخش کننده های مذکور در جایی که باید نمایش داده بشوند. همچنین امکان حذف جدا یا همه علایم ابتدایی و انتهایی نیز گنجانده شده.'#10'تذکر: '#10'این عملیات قابلیت برگشت ندارد لذا درصورت لزوم یک نسخه کپی از زیرنویس اصلی نگه دارید. این گزینه عمدتا برای خروجی های ویندوز-۱۲۵۶ و دو یونیکدی که در نامشان no Right-To-Left Mark دارند قرار داده شده.' 358 | Top = 27 359 | Width = 202 360 | Caption = 'علایم نگارشی ابتدا و انتهای سطور را' 361 | Layout = tlCenter 362 | ParentColor = False 363 | end 364 | object EndingPunctuations: TComboBox 365 | Left = 0 366 | Height = 25 367 | Top = 27 368 | Width = 200 369 | Constraints.MinWidth = 200 370 | ItemHeight = 0 371 | ItemIndex = 0 372 | Items.Strings = ( 373 | 'تغییر نده' 374 | 'منتقل کن به ابتدای سطر' 375 | 'منتقل کن به انتهای سطر' 376 | 'تنها از ابتدای سطر حذف کن' 377 | 'تنها از انتهای سطر حذف کن' 378 | 'حذف کن' 379 | ) 380 | ParentBidiMode = False 381 | ParentColor = True 382 | Style = csDropDownList 383 | TabOrder = 1 384 | Text = 'تغییر نده' 385 | end 386 | end 387 | end 388 | object Container3: TPanel 389 | Left = 0 390 | Height = 21 391 | Top = 136 392 | Width = 566 393 | Align = alTop 394 | AutoSize = True 395 | BevelOuter = bvNone 396 | ClientHeight = 21 397 | ClientWidth = 566 398 | TabOrder = 2 399 | object SubContainer3: TPanel 400 | Left = 407 401 | Height = 21 402 | Top = 0 403 | Width = 159 404 | Align = alRight 405 | AutoSize = True 406 | BevelOuter = bvNone 407 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 408 | ChildSizing.ControlsPerLine = 2 409 | ClientHeight = 21 410 | ClientWidth = 159 411 | TabOrder = 0 412 | object PhrasesCensorship: TCheckBox 413 | Left = 138 414 | Height = 21 415 | Top = 0 416 | Width = 21 417 | TabOrder = 0 418 | end 419 | object PhrasesCensorshipL: TLabel 420 | Left = 0 421 | Height = 21 422 | Hint = 'با فعال کردن این گزینه فاسابریپ دسته ای از کلمات و عبارات ناشایست عامیانه فارسی (تقریبا اکثر آنها) را که بطور داخلی برایش تعریف شده سانسور می کند. به این معنی که با چند ستاره ***** جایگزین می کند. گزینه [حساس] حاوی عبارات معمولی تری می باشد و شامل تمام عبارات گزینه [در حد متعارف] که عبارت ناشایست و دشنام ها را پوشش می دهد هم می شود. چنانچه نیاز داشته باشید امکان اضافه کردن فایل حاوی عبارات شحصی قرار داده شده که می توانید شخصا اقدام به تعریف عبارت مدنظر خود کنید.'#10'طریقه تهیه:'#13#10'مثلا تو سیستم عامل ویندوز'#13#10'نت پد رو باز کنید'#13#10'File > Save As'#13#10'رو بزنید و پائین دیالوگ باز شده'#13#10'Encoding > UTF-8'#13#10'رو انتخاب کنید و در مسیر دلخواه ذخیره کنید'#13#10'بعد عبارات مدنظر خودتون رو هر کدام "در یک خط جدید" وارد کنید و ذخیره کنید و وارد فاسابریپ کنید'#10'و گزینه [شخصی - طبق فایل روبرو] رو هم انتخاب کنید.'#13#10'مثال:'#13#10'عبارت1'#13#10'عبارت2'#13#10'عبارت3'#13#10#13#10'توی سیستم عامل های دیگه ویرایشگر متن رو خودتون پیدا کنید ولی دقت کنید که فایل رو بدون پسوند ذخیره نکنید چون نمی تونید با فاسابریپ بازش کنید همچنین با فرمت فایل متنی ساده باشه نه فایل آفیس و...'#13#10#13#10'جایگزینی بجای سانسور:'#13#10'اگر می خواهید عبارتی که دستی اضافه می کنید بجای سانسور شدن با عبارت دیگری مثلا شکل دیگری از آن عبارت جایگزین بشود کافیست آن را نوشته سپس یک مساوی = نوشته و بعد عبارت جایگزین را بنویسید.'#13#10'مثال:'#13#10'filth=fi**h'#13#10'کثافت=چرک'#13#10'نکته: هر لغتی که اول نوشتید با لغتی که بعد از تایپ مساوی نوشتید جایگزین می شود. نگران نمایش راست به چپ عبارات فارسی نباشید. در مثال بالا کلمه filth با fi**h جایگزین می شود و کثافت با چرک. همچنین اگر تنها یک مساوی = بگذارید و بعد از آن دیگر هیچ چیزی تایپ نکنید مثل'#10'filth='#10'عبارت مد نظرتان در صورت یافته شدن فقط حذف می شود. یعنی هرچی filth هست حذف می شود.'#10#10'درصورت نیاز فایل عبارات داخلی فاسابریپ نیز از آدرس زیر قابل دانلود هست'#10'(فایل متنی badphrases.dat):'#10'https://github.com/m-audio91/FaSubrip' 423 | Top = 0 424 | Width = 138 425 | Caption = 'سانسور عبارات نامناسب' 426 | ParentColor = False 427 | end 428 | end 429 | end 430 | object Container4: TPanel 431 | Left = 0 432 | Height = 26 433 | Top = 157 434 | Width = 566 435 | Align = alTop 436 | AutoSize = True 437 | BevelOuter = bvNone 438 | ClientHeight = 26 439 | ClientWidth = 566 440 | TabOrder = 3 441 | object SubContainer4: TPanel 442 | Left = 186 443 | Height = 26 444 | Top = 0 445 | Width = 380 446 | Align = alRight 447 | AutoSize = True 448 | BevelOuter = bvNone 449 | ChildSizing.HorizontalSpacing = 2 450 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 451 | ChildSizing.ControlsPerLine = 2 452 | ClientHeight = 26 453 | ClientWidth = 380 454 | TabOrder = 0 455 | object CensorshipLevel: TComboBox 456 | Left = 180 457 | Height = 26 458 | Top = 0 459 | Width = 200 460 | Constraints.MinWidth = 200 461 | ItemHeight = 0 462 | ItemIndex = 0 463 | Items.Strings = ( 464 | 'در حد متعارف' 465 | 'حساس' 466 | 'شخصی - طبق فایل روبرو' 467 | ) 468 | ParentBidiMode = False 469 | ParentColor = True 470 | Style = csDropDownList 471 | TabOrder = 0 472 | Text = 'در حد متعارف' 473 | end 474 | object PhrasesCensorshipFile: TFileNameEdit 475 | Left = 0 476 | Height = 26 477 | Hint = 'فایل حاوی عبارات اضافی برای حذف یا جایگزینی' 478 | Top = 0 479 | Width = 178 480 | DialogOptions = [ofReadOnly, ofFileMustExist, ofEnableSizing, ofViewDetail] 481 | Filter = 'فایل متنی ساده حاوی عبارات|*.txt;*.dat' 482 | FilterIndex = 0 483 | DefaultExt = 'txt' 484 | HideDirectories = False 485 | ButtonWidth = 23 486 | Constraints.MinWidth = 178 487 | NumGlyphs = 1 488 | Images = Imgs 489 | ImageIndex = 3 490 | Flat = True 491 | Color = clForm 492 | MaxLength = 0 493 | ParentBidiMode = False 494 | TabOrder = 1 495 | OnKeyDown = PhrasesCensorshipFileKeyDown 496 | end 497 | end 498 | end 499 | object Container5: TPanel 500 | Left = 0 501 | Height = 25 502 | Top = 184 503 | Width = 566 504 | Align = alTop 505 | AutoSize = True 506 | BorderSpacing.Top = 1 507 | BevelOuter = bvNone 508 | ClientHeight = 25 509 | ClientWidth = 566 510 | TabOrder = 4 511 | object SubContainer5: TPanel 512 | Left = 207 513 | Height = 25 514 | Top = 0 515 | Width = 359 516 | Align = alRight 517 | AutoSize = True 518 | BevelOuter = bvNone 519 | ChildSizing.HorizontalSpacing = 2 520 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 521 | ChildSizing.ControlsPerLine = 2 522 | ClientHeight = 25 523 | ClientWidth = 359 524 | TabOrder = 0 525 | object OutFileEncodingL: TLabel 526 | Left = 202 527 | Height = 25 528 | Hint = 'با توجه به اینکه اصل فاسابریپ تبدیل زیرنویس به UTF-8 هست تا نیازی به تغییر System Locale نباشد دلیل خاصی برای تغییر این گزینه وجود ندارد مگر اینکه خواسته باشید زیرنویس خروجی را در نرم افزاری یا پخش کننده سخت افزاری باز کنید که مثلا تنها از ANSI پشتیبانی می کند.که برای آن منظور این گزینه قرار داده شده. دو مورد از این نرم افزار ها که به ذهنم می رسد TxtToVobSub و نرم افزار Subtitle Creator هستند. در مورد UTF-16 هم به همین صورت.' 529 | Top = 0 530 | Width = 157 531 | Caption = 'کدگذاری حروف فایل خروجی' 532 | Layout = tlCenter 533 | ParentColor = False 534 | end 535 | object OutFileEncoding: TComboBox 536 | Left = 0 537 | Height = 25 538 | Top = 0 539 | Width = 200 540 | Constraints.MinWidth = 200 541 | ItemHeight = 0 542 | ItemIndex = 0 543 | Items.Strings = ( 544 | 'UTF-8' 545 | 'UTF-8 - no Right-To-Left mark' 546 | 'ANSI WINDOWS-1256' 547 | 'Unicode (UTF-16 LE)' 548 | 'Unicode (UTF-16 LE) - no Right-To-Left mark' 549 | ) 550 | ParentBidiMode = False 551 | ParentColor = True 552 | Style = csDropDownList 553 | TabOrder = 0 554 | Text = 'UTF-8' 555 | end 556 | end 557 | end 558 | object Container6: TPanel 559 | Left = 0 560 | Height = 42 561 | Top = 209 562 | Width = 566 563 | Align = alTop 564 | AutoSize = True 565 | BevelOuter = bvNone 566 | ClientHeight = 42 567 | ClientWidth = 566 568 | TabOrder = 5 569 | object SubContainer6: TPanel 570 | Left = 285 571 | Height = 42 572 | Top = 0 573 | Width = 281 574 | Align = alRight 575 | AutoSize = True 576 | BevelOuter = bvNone 577 | ChildSizing.Layout = cclLeftToRightThenTopToBottom 578 | ChildSizing.ControlsPerLine = 2 579 | ClientHeight = 42 580 | ClientWidth = 281 581 | TabOrder = 0 582 | object AppendEncodingToFileName: TCheckBox 583 | Left = 260 584 | Height = 21 585 | Top = 0 586 | Width = 21 587 | Checked = True 588 | State = cbChecked 589 | TabOrder = 0 590 | end 591 | object AppendEncodingToFileNameL: TLabel 592 | Left = 0 593 | Height = 21 594 | Hint = 'فعال کردن این گزینه صرفا برای شناسایی کدگذاری از نام فایل بعدا توسط خودتان مفید می باشد'#13#10'مثلا خروجی'#13#10'test.srt'#13#10'در حالت عادی'#13#10'test_FaSubrip.srt'#13#10'می باشد که با فعال کردن این گزینه و یو تی اف 8 بودن کدگذاری انتخابی خروجی می شود'#13#10'test_UTF-8.srt' 595 | Top = 0 596 | Width = 260 597 | Caption = 'افزودن نام کدگذاری انتخابی به نام فایل خروجی' 598 | ParentColor = False 599 | end 600 | object ReplaceSourceFile: TCheckBox 601 | Left = 260 602 | Height = 21 603 | Top = 21 604 | Width = 21 605 | TabOrder = 1 606 | end 607 | object ReplaceSourceFileL: TLabel 608 | Left = 0 609 | Height = 21 610 | Hint = 'در صورت فعال بودن این گزینه فایل جدیدی برای خروجی ایجاد نمی گردد. فایل خروجی روی فایل ورودی بازنویسی می گردد.' 611 | Top = 21 612 | Width = 260 613 | Caption = 'ذخیره مستقیم روی فایل اصلی' 614 | ParentColor = False 615 | end 616 | end 617 | end 618 | end 619 | object Footer: TPanel 620 | Left = 8 621 | Height = 1 622 | Top = 357 623 | Width = 566 624 | Align = alTop 625 | AutoSize = True 626 | BorderSpacing.Left = 8 627 | BorderSpacing.Top = 4 628 | BorderSpacing.Right = 8 629 | BorderSpacing.Bottom = 4 630 | BevelOuter = bvNone 631 | Color = clForm 632 | Font.Color = clGrayText 633 | ParentColor = False 634 | ParentFont = False 635 | TabOrder = 2 636 | end 637 | object SaveDlg: TSaveDialog 638 | Title = 'محل و نام زیرنویس خروجی را انتخاب کنید' 639 | DefaultExt = '.srt' 640 | Filter = 'زیرنویس های Subrip|*.srt' 641 | FilterIndex = 0 642 | Options = [ofOverwritePrompt, ofEnableSizing, ofViewDetail] 643 | Left = 24 644 | Top = 72 645 | end 646 | object IniProps: TIniPropStorage 647 | StoredValues = <> 648 | OnRestoringProperties = IniPropsRestoringProperties 649 | Left = 80 650 | Top = 72 651 | end 652 | object SaveDirDlg: TSelectDirectoryDialog 653 | Title = 'پوشه ای که حاوی فایل های خروجی خواهد شد' 654 | Options = [ofPathMustExist, ofEnableSizing, ofViewDetail] 655 | Left = 136 656 | Top = 72 657 | end 658 | object OpenDlg: TOpenDialog 659 | Title = 'زیرنویس (های) خود را انتخاب کنید' 660 | DefaultExt = '.srt' 661 | Filter = 'زیرنویس های Subrip|*.srt' 662 | Options = [ofReadOnly, ofAllowMultiSelect, ofFileMustExist, ofEnableSizing, ofViewDetail] 663 | Left = 192 664 | Top = 72 665 | end 666 | object Imgs: TImageList 667 | Height = 12 668 | Scaled = True 669 | Width = 12 670 | Left = 256 671 | Top = 72 672 | Bitmap = { 673 | 4C7A050000000C0000000C000000BE0200000000000078DA6360200D383A3A6E 674 | 737272FA4F0C86AABD47AC7A905A7D7DFD0062D51B1A1A0681DCE4ECECBC8E90 675 | 5AA09ACD303F181818C800C53EE151FF455656560ED9DF40BBF2F0B8A3083D9C 676 | 040505998072A7B0A83F272020C0822D6C1515158D80F27F90D4FE55525232C5 677 | 171F8181817D30F57676769308C51FD06E1EA0DAAB407C0DC8E62526CE454545 678 | C19858408A7AA87BAE11EB1E52FC4B4A78921A5FA4A40752D31B29E9D9C8C8C8 679 | 9794FC426A7E04E2ADA4E477063201308CD9817EC9059A7312883F43F149A058 680 | 21306E38D0D482C2F3A2877FD0FF94D629FF0BE66C00E3A4C6FEFF6E5E3E20B7 681 | 5C04A981C62B3B58AD5FE0FFFA1D57FEB71D7B82826B369F05EAF106E9B904D4 682 | C306B40F1CAF8975DD7035C94D13FF67F6CD87F3634A1BC1FE85BA179C663C7C 683 | 03FEA7B64DFD1F57D90A964BA8E984AB8F2EAE8385D109A8BF50C20DA2F63158 684 | 6DD98AFDFF5DDCDC61729FD1D5876514C2CD2D9CB7F9BFABBB07B2599FA0E107 685 | 1703D9DD72F8C1FFEA8DA791CD85BB07E65F18F6F0F5FF1F915BFEDF3F3A115B 686 | FAC901C513907D0126963D7131D82DCD07EEA0ABBF080C7B36E4F802892735F4 687 | 81D557AE3B86ACF6022CBE90E218141739D030FB04C527806E2804B901A60E28 688 | 7614DD9DC07CEF802B9DE148BB0748548F2BFD1F2145FD28A6093E42427C1D46 689 | 4B6FE0F2C72734EA8B7748C41758F90394432F7FA4617920A6A4019E1F63CB9A 690 | C0E67A06863C00A981956BC8F925B979125C3DA8BC4072CF79507E41CF8F78D4 691 | 83F2632ED00F2789550FCA3F7E91715F70A9AFDF71F97F647E155CCE373CFA0B 692 | 282C90D527D6766394A1D9939640D5C77E462F7F40383CABF87FF5A6D370F559 693 | 1316C1E48E43C31C236E5C5CDDFE27D6F7FE2F5EBCE3BF3BB04C028901EB5150 694 | F9C306AA938988DFF3FCFCFC6C48F1751E9F5A587CC100502F2B307CB34061E6 695 | 1316FDD93B38FC33B4FCC987990B0200208BE4EE 696 | } 697 | BitmapAdv = { 698 | 4C69030000004C7A050000000F0000000F000000820400000000000078DAED58 699 | 6F4C556518472FB52BE323F7725D9B01F17F8D2E5C56492DFE9CFB4F22491450 700 | 2E48FE997A5311212A35F012918E0FDAB215CB9CD5565BA1E20C19D30ACBCC72 701 | ADB1B9B91229403FA4AD4F2514654FBFE778CEF1DCC3817BEEA18F9EEDD939E7 702 | 3DEFEFBEEFFB3CBFE7F93DBB3131E62FA7D3B93C3737B71F36188D01B7A2A4A4 703 | E457189930C60D9AC40EA6A7A73F8CFB78B4D88C8C8C47F8CC2E97AB06EFB70C 704 | E2FE1504619FECAFF8F8F8588C7D63107B21313171A1DADFC5C5C54F60FCB748 705 | D89C9C1CB7C562098B556C6CECFC828282AE08D801CCB3E8C51A7BB1E0FBD00C 706 | B88B29292919B371253B3BBB14F3FED1E06E61BC3C12CFE2E2E2D86FA734D84F 707 | 317E8F119E1615153D84F923724C3233335D46390E3FCE47CC6B81BB09EBE2F7 708 | 68F3242929691EFC6A2AC7CC62D3D2D20A7C3EDF407E7E7E201ADC5C7C85F50E 709 | 32468E11F87AC808CE2C37E6C249E4C2333A6B2A6B63EF07F47073C941AFD77B 710 | D448EE638D5EABD51A2FE3F2F2F25699A9395959592EBC8F9AA975B8BF1BC59A 711 | 6A7B7F2EB51D676FC5FD8F68B1C0B5C5FC4F97CD665B20E57CBFA4157FC1AEF3 712 | 3BC6EB17E2D2C3391C8EFB0B0B0B8F71ADF0F897D0D3ABD753F5B3CD54B13648 713 | 6EAF8FF73989D85CC0BC451ADC227C1BE6736CEC7A9B3ACE8CD0AB5F5F53ACFD 714 | B31F696D683F79973CC9BF319C9A9AFAB8C4FF053837AF47959BB653E7576361 715 | 38D95EF972946A5B42B2AFAEE17C569CA30ECF133CF662CF59656EC39B1FD18A 716 | 0D0DB4ED60AF32F6D289EF143FA39EC87E11DFCB036B682B30BC6F5F593979FC 717 | A5B4E5C0870A76D7F16FD5713A09BBAA8E9BE0F188C6CF1BF6BC85BDFE2CE23A 718 | CF8E51FDCE3D6A2CC7E14F6DDCBDA56514DC775859AFE38B9FC4B34AFE966D12 719 | 76438BADDCD4482F7F3EAC60EB77ED2541706BB9F58BB4EFB0F1E5EB37536BFF 720 | 107C3E4E8DEF1C27C1EDD1E3649FDACFB2C9DCA85813147DA6C767F449B5E085 721 | 1DBF11D62F049A77D3EE818B143A7589B61F3AA1879D043D6DCC0FDC155E89FE 722 | DDDB7DC74F67AE6871C3D08CC7B41A22C7AB726323854E5F425C46C538A9D703 723 | 1F17CFC3A5934756892FECBF31297E9C477D38DF6A9CCFA1A9AD47F0ED6F9D33 724 | BD11296767C0B1FD0E3F38226067AC2BD8676F72727248CFA0CDC526EB1C7363 725 | D42CF6AEDDB508DCEA99251F66C37DACCD5FB50EA2064CA1AE72FE9E445E73FE 726 | EAEA20D71DF491DCEBDC2CAB0A5043F711DA79EC3CB57C709A9EAAAEBDAD831E 727 | CFD0030F3A9D5A1CBE5D96F753D3D44A9DE7AE2A354BA561B20E2E96F51ABA1B 728 | D65B059ADAC234B0AEA55D7BDE71BBDD6ED5ABCF06B0627D86BFFAB5E346B05C 729 | FFB43AA8876DE8EE818E79A7ED7BE5D617A67C654BC3B1CD6DD374BFB5EF7B5A 730 | D7FE1AB93DB77F63E596E7A7DC3EFF8D124108C3566F7E0EBA39320DCFFD046B 731 | 94A8593EFF753D1D64F32F5D46EB3A5E479FF2C31D7D19BC228E4B733E917460 732 | 6226EE716F13DCFF1EED387A8E566DDBA1F673807510CFE767E32EEB7D694595 733 | D24BF05AE88F6C527F759F9A5711EC3274EF51352F996706FE3398609C9E0E26 734 | 2424DC8B1EBE468AFB5855B049CC23EE0F70BE3AECD3AE9EFF1FE8BC1F684C7A 735 | 050000001200000012000000A80500000000000078DAED587B4C53671467832C 736 | 732151B205045D26092660B2FDE104C444A0AD055A5A29A5201B20E3517C803A 737 | B1A0E29487AF654B349BC9B2E8101435EA1C3E321F30D85C26986D7F2C7B80DB 738 | 04876E59962CD9144BB6B98DB3DFB9BBB75CCBBDB4D0BB7F166F72D2AFF77EE7 739 | D773CE771EBFDEA0206DAE3973E63C1D1D1DED82D4431A2629ACE302C6333A9D 740 | AE4BAFD7DF83D014E51E30BAF1391400862443292929B5F8FC3D008C3F60CFC6 741 | 59B3663D85756700385DB367CF8EE6582356467CFF6E0A18B7A09B219D595858 742 | D8238B162DDA3D591CE8BC0ADD47E5E7EF7038C22719F31FE3E2E2662AE5527C 743 | 7CBC1DCF6FFB8171272121215F2D2761E3E30683E120F6FD3901C65F90C33366 744 | CC78420D2724242408B62661DFF509706EC4C6C62663EF43BE6A65FEFCF92BB0 745 | FF6F058C513CABF2B7E6222323A741E78A02CED5A8A8A8D0C9D4AFD3E9CC84DE 746 | CF328C5F929292B226DB07424343A7416F1BF4EFB260DD807B8F4DA5A7E04C22 747 | 513BAB58B08E0AA43F415F90402F2D70D817D1AFD553F54BAB386B71EE5AE561 748 | A075A1559D6AD537B4E8635AF455ADFABC1673E7495CC8FB8B81CE419C8F0BEB 749 | DF029DCB5AF104B68B3103E42D5D228FDA10288F0AFA0F2EAE19E47B786262A2 750 | 09B6B6C2E67EC8B028BC6E451E67226722B1F761351CD49F0E7B4FB29EC16824 751 | B33D97B20A4A0431D91C6458B284E3E1C6199F462EEB9430E6CE9D9BCAB5CCBD 752 | C156ECA417DF3A4B9BDFE9A197CE7D2AC8E6533DB4E68D1364C97D4EE81F90C1 753 | 98989814B92FC0668C4183318D0A6B9BA8B1EB6BDAD5FB83A2D45FFA82F2AB6A 754 | 24DB6E4057CF18F03502769EE2DFB02E2B800DBD5E7A5F527DC757F7DDDB70F8 755 | 1299B31D925D2739A6889B598C23D95F5841DB3FBCE1D95FDD7A9EECA5AB6859 756 | A58BB69CFDC473BFA1B39F6C456552FE0C2F5CB8D0045B0E49399566B65069E3 757 | 5EAA39D64DEB9BCF0AF1E5FBB6A272AA6BBF3A86D3D147B6C232792EB640AE79 758 | E7A831C34C6926B3B036DBF304BB76F57C2F60ECC4E7BAFDED94B1345BAED327 759 | F9A424D6658554DDF2EE7DB1D9DCDE4BD9C515A43718EEEB8F6A381C4717E229 760 | E9EFFCE826D51C7D0F76D8947EF336F2B65F09279B637E79D083E36AEB204B5E 761 | 815AADB25FAD4ACF2CC881DAE3976907ECD87AFE33CA5BBDC1DB178FC09666D4 762 | 9259C937C312A310636B7E91F0C9DF556C195EB0604106722802EBB7C59C1AF3 763 | 6BB9936A8E7452DD998F85BCCB295DAD84318ABC39C17928AF0BF99EE2BADD63 764 | 31BE728B4A1BF628CED679F3E6E9E4B3956B4EC412EC7A7EFD164F9C9BDEFF56 765 | A83BB91D9001D4768A52CD8B7671DFB8936ECDA2E59B7650F98E7DB47CE37632 766 | 65D9250C3784FB46AAAF3EC6F522E67A9F986377C4F541C4D4CCFCD39B27E0CC 767 | F6E2F988CA599C81CE4C7F7AE904182CBF228E363F717CCD958B1AE1F8921131 768 | 3681E2705D8C6881F3401EC8FF5046B4A82F1F7DCC5F8C3D6AFC509C8FFD98E5 769 | 6E7014B7C80F5BD073A5BEAACA0F657D7E383DD34A85AE06AA7CED08A48D8A6A 770 | 1B293D73E9BF7DDE6038F7EC62BD43851F26CBE78E0D73B0B1FB1BCF0C6BFAE0 771 | BA30F3057F309FD32D593F6156252BF143B9DF76CCCF9D22E791C4E15CE31D9F 772 | 01E8268BF188409CC6CD653F71782E8FE38753C0F1F00491B75300382C078173 773 | CD5F1CE6A0CCB19578546EC55A37F31BEF673965C0F1E2E0CCCF2B5F6F23AB8C 774 | 97F17F077BC94A37CED26DB2E58CB7A76425B8D89022A767BC82EAAD1E3E0BDB 775 | 87D5F821F38B8A97DF14389D1256D5BEA3DEFCB045AD768CE91994555842EB0E 776 | 9C0697BAE9C160CE9FBF76937C6FB3C8518627AA45E686B915EBA8FAD005DA76 777 | E1735AF1CA7E81FB4BDC59E487E1624D8DFAAA6DD402E59457C939F4686A6AEA 778 | F1E9D3A74BFC70B18F772C6A32C0EF5E828383E5FC90EB74C01FBB64FC70B1CA 779 | FFCA649CDF31F93B17FE3F926E592AC7B8CBF5C83EA8F51FB68FDFEB70DC38D7 780 | F93C73CA2AEFA287F0BBB63EE6ED7866423C22E4BEF0F50F476BC31E4C7A0500 781 | 000018000000180000006C0500000000000078DAED5ADB6F1455186F343E1913 782 | 5F7CD07AFD0B7CA831314D935E764B6F946EDB6D17DA024A59DBBD175A5AA9F4 783 | 422F3411D30851AE221A794008909816BCA5C152E4C5881865B109972EF1CDC4 784 | 82A40F2D1CBF6F73B6CC9C3933E7CC740E51B3937CE9EECE99DF9CF9EEDF6F9A 785 | 93F3DF3E0A0B0B5F2B2E2EBE02F20084B82488F50BC5FED9455C5610FB4F85F8 786 | 88BD5B21FEEEFCFCFCA7E06FCA6DEC9292923F40FF4FA38DE1BBCF6DFCA2A2A2 787 | 3AAD1FC1FDCEB8883FC9FAA9D7EB7D0E7EFFCB05EC7BA5A5A5AFF06201CE255C 788 | D0FB56B3581B1818780CD65C5A89BFE7E5E53D6115CF60975761DDA203ECFBB0 789 | F737647206AC1D7780BF473627817D9E84F5379CF8BAEC017AAA70EAEBB2075C 790 | 7BDA89AFCB1E123161EAEB369E21E1C4D7650F8B9810FABA0D5BE73131B104F2 791 | BA9B7514EE1104CC3B207741DA54D46ABFDFFF384A4EF678E4FA419B52DBFEED 792 | B67D55FAA7EAF852991F54E73795F959657D515D1F55D67795FD89EAFE4A657F 793 | A8BABF95F47547FDB91D5FB71B13767DDD6E4CA89EEF1EC17C7A5921FE655A9B 794 | 70CEBEAF821FF83FF7231E8FE745D05F0C7CED1C3C6F92F60E2849FA5B14D738 795 | E06C9E87EB0FD03E41983741BE90AD931877748F993821550D4D2410DD46D677 796 | 0FA5A531DC452A6A1BD8FB606FE4B3C206AC2D5A9EA9B96B90BCFBE58F64F4E2 797 | 6DAE741F3F4FEA5B233ABF81FD7598E4669FD64743E39F9AE2EA64264536F68E 798 | B1F76860EAED0B5A9D3475F6CB616BEE51FB661BABAB5CCDDE3FD1EA7BC7C44F 799 | 068C91E95B64EBD149D2F9F9D76404F0D8F3894367D8FC7938E383AC9F0C7E77 800 | 4D8F3D3347EADE6A5F3EDFF6FE11033EEE89B1F712EA05F61B677D6E5DA2970C 801 | 7CF3DBF2B59B473FD49D0FEEDA67C0EF33E2A344689CF0F237A9A86B2455FEB5 802 | BADFEB3747C9F0F7370CF8E1BDC7B8750C6456366FAD8DF590E1E99B06ECC16F 803 | 93A412F6C2B926496D2DC4DED0BB2BED27066CB015E33BAC1FDD95D937CF2FD1 804 | A6AB1B9BADAE9D07F95D84BFFDF42503F6F6533F90B26A9FE8B9AF829F9EB55C 805 | 03761EB9704B878D3630D1372B13986345EB5A87F792FEAF7E4DC7D5F0F9EB60 806 | 8B31D91E25C48B2F976409F33CCD9B1F5BDA37DA4D62FB4E90F8C15324BCE798 807 | C8A61939A8AD27667E54591F30F825DA5B807D07FB5926F7D7F07A088C57D677 808 | 307EAD7A07C0AA37A95D1DEC7B0CDF86A0011F739345AD4C0866239F4E57E09F 809 | F10327977D74686A96B46CDBC9D509EC6F8DE4FC954BEBFBA26C7D0779C96E1F 810 | 41EB5A84E6C1AB9A7C829F27610FE18C0F5AF40B95B0F6B6689F1027850E67F4 811 | 94642C4E39C4978E4927CF6073E69952896F53522AE63AE679E754E267252B59 812 | C94A56FED59252595F680D4B29AA5DE522FE07E78F0CFFD318EA5CF0BF1D5FD0 813 | F03F11ECC11CD4FC5C1EFFE30FC659BE64B93F843EEE65196CDAA7EB6681B6F7 814 | 0EC3CCF57006C35E37347E54771F6F59F98396EE9D8302EC386F06188299CBC0 815 | 77CCCCC18CEF619EA504F51EB3D83797A3D4EE5D2B1EAF97DB4FC33DAA59BECD 816 | 6ACEB6896F988FE0FB112B5F73808F72C88CFF71093F3D9FA23D44B1E2101F39 817 | 9EB0901F58013EE507669DE2B7430C945654595D9B6CEEEC5B08C07C6E85CFE3 818 | F3B4B32A72AE6C2C04225DC8C32EA0404EB1C41FBD981272943D27A649F99ADA 819 | 87F8B0E740B4E71E7CBE26D2CF3B272F48F1A0C1B1FDF6F91F0DC7D1C7E145B5 820 | B2D1C8DB4CD0F956EE9D10F80B723F38C3B3D8FD67AF10CFAA32F69A763A43DB 821 | E27F50CFD18F8EEBECCEF191C5CCEC8D5CAE931A55B3BE35CDE5AEEBE8E5D5AF 822 | FDDA7A42FF77C5ADFA385F5050F02C53B3CA5DE2C930C7AF36E122622B7C4F85 823 | D746057C47B5435DCD433EAB92A9C1A0BB6760ED072CFF53B729446A5A36F1F6 824 | FC19AB6F1BEF91C219FEA769CB8E743EA1FCCF04F29B22FEE71FF8EE94D8 825 | } 826 | end 827 | object ImgsLight: TImageList 828 | Height = 12 829 | Scaled = True 830 | Width = 12 831 | Left = 304 832 | Top = 72 833 | Bitmap = { 834 | 4C7A050000000C0000000C000000B20200000000000078DA6360200DB41D7BB2 835 | 0D88FF1389B7B51D7F728F68F540B5A953D60610AB3E79F2AA20909BDA8F3D59 836 | 47D8ECA79B617E702CAC94018A7DC2A3FE8B7B4A8E1CB2BF53A7ACCEC3A53E65 837 | CAEA22F4705232B16202CA9DC2A2FE9C82BE390BB6B075492A3402CAFF4152FB 838 | D729A5D8145F7CB45E7DDD0753DF7DE2DE2442F1A76864C903547B1518D6D714 839 | 0D2D788989732D2D0730261690A21EEC1EA05B88750F29FE25253C498D2F52D2 840 | 03A9E98D94F49C367D8D2F29F985D4FC08B4672B29F99D814C008C7BB6D4296B 841 | 7281769E049AF319829F9E4C99B6BA50D1D092034DAD3450EE0250CDF3D4A9AB 842 | EB9C938B0281382865EAEA36A0D87BA09BCF83D480E3D5C8921DA616688E24BA 843 | BD891B77AA02E53E80F42881DD008957A0B91520790707078696D30F9A975E79 844 | 9D032F038F3F9D03550373EFFFD6634F37274FDE540ED3DF7AF4713F3CCD1E7F 845 | B6001A6727A07E4309B7D62BAFFB5574CD18C1E96AEA2A2BA0D877A8DC272CEA 846 | B7C2CC4D990A8EFBAF48729F406186ACBE79F1A652905AA7820A4E20FF1BAA59 847 | 4F4F00C33717CDFC13C0F4B70A84D1DD09F46F0E289E807E3E071303867B2452 848 | DD809C76CE2B1A58B0C1E30B18BE78D4C3E30B1EC70696AC40FBB2406E848603 849 | C86F278062F93073A1661C457727D00E073CF517B6747E8024F5B8F11112D58F 850 | 62EA6352E2E030BCFC079613E0BC0BC9CFE780F40568F9930B4AF338CA9FFF1D 851 | C79FCC5333366654D07760ECDFFF7A16349F632B7FC0764E3879A309660E309D 852 | D62295E7D0F2670D4ABD82533DACFC39F6E424B1EAA1E5CF715CEA81E5A34CFB 853 | B1672B90CA87D3407C16597DC7B127F330EAC2A9AB534072ED60B7A0963FE0F2 854 | EDF8D38D8E2925EAF0726BDAEA0C68BE3B8EA5FC81E19F4BAEBCEE02FAC115C8 855 | 7E85ABFCC15377612D7F70608CF2071C17E0F00586D9F1A76780E65D82963F39 856 | C8E50F002094EBCE 857 | } 858 | BitmapAdv = { 859 | 4C69030000004C7A050000000F0000000F000000520400000000000078DA6360 860 | 201F244F59159C3275F53620DE4F0A06EA0B693BF6E43510FF2703BF6E3FFE64 861 | 3F397A41FA822A7ACC80EC47A4EA0D28EF3207F93975CAAA2820FF2F91FAFEB5 862 | 1D7FD6070B2F49152D16A0D80922F59ED275F1974409EF459BEC80E26F09E9CD 863 | 9CB6D48593870725AE3878F898CA379CEEC2AFF7E90EA03A666C71ADEBE2C30C 864 | 54730187DECBAEE915EAF8D24A48759F1750DD1F347D7F836BFAFD09A5335139 865 | 6550B8ED42D3BB47445E859598741A356B997EDBF1A777617192D435D598D834 866 | CEC6C9C594397B530C50DF5760FAE902F149CD270E0E098C1C1C3C64E53172F5 867 | FA143458F5EF7FBD236BF6E66852F45112566DA79FCF06A779587E3BF6782E31 868 | FAC84D1B94A4C9B20D2713B0D809B7BBF5C893C958CB3C0AF260DBA9676B892A 869 | A78E3D5E2F282103D70C2C7322C9297382AB7B8C81FC07E49475ED279E2E20C1 870 | 4E64BCA8ED389965FB7150D9FEB416C8FE42AADED6A38FEB18A804B41DBD38D2 871 | A76F8801BA671BB04C04D5153FDB8F3D7909646F4D9BB93ECEC82B4C129B3EA0 872 | B85CE381BBA038FE0AF5C3A9D6634F3603E98340FC1D829F9E04AA9345D70794 873 | BB05F2474CC7DC122D3B776E6479205FB0E5C6DB76A0DE4F2075DE058D96E0F4 874 | EFE8CDD904B10F14069B8165130B3677591516B1B75C7A35175AC63FD27500F9 875 | 6F7D2C90FF0D94966DA3D25540EA6C6C6C18BA0F9E8F0695B5EB6EBC0D86A7BF 876 | A96BD460E19C31633D285CB642F9CF5B8F3DAD0B289F181154D11D0AF5C3E796 877 | A38F93E0F965DA5A6D44FC3EDD020D4FE4B8FB05C41F4079B1FBC0C32A3D471F 878 | 0E903E550B07D6DA5DD72623A97B040D43F4B8FF1052DD9FA3E0E0000D2B0FAE 879 | B6A38F417EFD81A406A4EF1516BDDB140D2DF8606EADDF776B227A99008B7774 880 | BD150B364D94909000EB2BD97F5E18EA0FF4FA740B30BDC440C31959EE0E10EF 881 | 47C218E91918CED1865EA16240F67164F184BE25358A8696A2308C45EF3723CF 882 | 105148BA0A9586A52B100EA9E92F40298F50F3DE2DAF82460B6479503A83C517 883 | 1EBDDFBCF31B2C98989919D1D39D8EBD0F5BC6CCF551A07000AA7B088D135078 884 | 6E01FA2F16E84E313433D700F16F2CE5C21482750F367D10FC19180E1204F4E2 885 | 2C5780EDD5F5CEC9450D5871529123996DD8FFE494CBA3781413858F3E598D27 886 | 3FE0C3AB50DA57C0FA055C4F20EAC10D90740BAE076340E513AE7AB0E920B85E 887 | FA06D47B63E2A9EB11C0B24ABF74FD4307A0DE6BD0F2F038BE7A1084BB8F3F58 888 | A46A64062F574AE6EC9F87E4565CF52018F79EBCBD50CDD818AE17587ECD412B 889 | 9BA1F5E08658F4F299B05E683D780C142EA8E2C4E8C5510F62D31B83568F41EB 890 | C1A74B81F80DB2387A5881804B72B172D9BA93ADA0F60BD4CFCB81F8019676DD 891 | 5160FC6094913C42A2A07ED761683D781F5B3D082D9F5FE42CDADD18503B4518 892 | A6D72E3E9B17D43E80CA6FC6510F22E38F5BEFBCCF0496D58685CB0F2E27540F 893 | 62C1DFA165EA2F42F520813628DE7A100FC6590F82D21924BD40EBC1E34FD741 894 | F311A81E8C86B9130600518A4D264C7A05000000120000001200000065050000 895 | 0000000078DAED587B4C1B751C2F335B60B0C964F250CC4A136286D115E6228F 896 | 8004DC044AA25B01B73F4C9C2D2C2C83F1F6313649585B16B444338CCB644089 897 | 33E33575D1AD85A9649496B1A93159358A738E1EE0A6DBBA41145FF8F95DAFE5 898 | 68EEFAE0CE7FCC9A7CB28EFB7D3F77DFF7A7279188F3C97AB1F2D16C55550DF0 899 | 1AD01020884D0D381ED38ED807813F80F92582D89E05AE08E070E14AD3C8541D 900 | FEFD5D00C7DCC1E18997D28A8AD7E1BB4900CF604AA12A8EC43A5B55B919FFFF 901 | 31700EEA2AE29CE3CA992C3179455D9F5517284F4D9FB5599A941ACCCEFFCE8F 902 | 4D9101C67C72EF3BC7A2B96AA9BCDDB80DD76FF9E18FA3ACC3B49DAF26651B53 903 | 2274A3D4319CFDD30BCF5F9AE10983549EBC968F2778D56A49417D4B0ACE7EEF 904 | 85E7B2F2557D4670E8AA205FBD527CB87B17CEFFCDC1F18FBAB5778FBF3DB731 905 | B7300436C31C3C9644C5736181F46FE3E48C0276D7591C37DE1CFDE69940E740 906 | 4CFC232175FDA307607F87A0B6DFD2101D9FB0722933252E3125A6B1EBEB5202 907 | 7C7F40C87C924AE534847EC4E021BE307EED5EAA5F62C5598CBC8B558742FB42 908 | AC3E156B6E8831C7C498AB62CD7931F64EDA76F543F8DB69A17BB0696CB206DF 909 | 7F13BA97C5D2095A0B4574CB9C40DD3298ADAE263AAA5AA88E92FC079FE0B0D5 910 | 41985791E51D03B91A8BBD0379B5E1996F3B41D9742354FB9E2E531E99DB38BB 911 | 8C8F4759DF92A919B17733B6C4EF9F802F19D8496F013388E949F4F3935C1C8A 912 | BD0D19B8E70F643600D6B24EE356DC570E3CCC20A9CC607C1ED7BE739EA1C689 913 | 0DDB177067321C73E88F2331F109117CCF5C6A1E8BD57C317DD2F96CD4386C33 914 | 987844E92CF61EFA1E16BBED2955953BF6D24D9B82B28A2B62B7EDAE8DCECCCC 915 | A4FF162E954A545D1F6DC1F9ABC44687383031CD63E2310F5F3AD7C4C4DE43CE 916 | CBE57289C1FC558EC63A31A41F9DFC105CEB17FAB13A12311A637AEC76B9C194 917 | E3CC8BB3A610E3138DE76EE6A71496A6A615A95271AF5EE6DA79768D64A96BA2 918 | 3516EAC2821D997D746E17CD6066D7905C3948CDBFF2FE709E74C313749EC363 919 | 6297A95B7B0A6137EDB6B1D82F3167F9E6820DFB27FF41D97AF72C2E6B3FB301 920 | 76568F3DE0F0C24366CB66973D9E6379996180D4D734C75907875F345A2F4E7D 921 | BEB3F2E550568EB2F01CDF72DE137E915AE79C99EF0DF44A614FEFF9C7535768 922 | 2F4C35F1ECB47970B4A15F725D79F700D9C99758B8C6E3BFA3DC60CC894B4C26 923 | 7BA29BC993FB7A6D9FF528E293E042716BCF61AEFDAA354F9C201CA4A695F5FA 924 | 74CF1D8ADC6AD9FD40660D473EC7614BF785479F8EBB9ECB070F3933AEA86848 925 | E7EA41D273E03A0EDC825FE7D8B30FBC9F311C77E04B8F729F3EDDC71C5B4BFA 926 | 454BD7BABB4E1D4C6EDB10D35CC4238AED0BF9A0AE5A706E96A72E3E006FB43F 927 | B39497C3899B05F5FA67FDE4F1B5574E8BC4E30BB35A331D9B7951B8C4E1B98B 928 | BBF8BF6156C45E15C2358B59A8E798AB5144CBB0F4A11173F12C4B1FE6BAF60C 929 | DF2C22BA8CD154642FDE68B65E6E2BAA7FBD44B9EFAD5D07CDD78F82EB57E65A 930 | B7D23F7D38DF048DB8637FF37D21616192E0D070C90B15EFDEFBC6D035F3C2DE 931 | F1AA0FDD7EE35986F24B4A16695BEC9E41CF3DE8D287B224963E0C98875B1F2E 932 | 81C7AD0FF1BD832B9FFEF3F0EA436F3C8738DFE962D7A286FAB97E8371F1409F 933 | DF7F6864AA049A97ADCBA047A94F803380DD9387E47D8BAA6A0D578D24298A22 934 | 0E986C9DAEDF7088F5293EBF481DC20F5D96BA5AC6F9EEA2B547E58F3E74F78E 935 | 85BAA87ABBAF40AED8B1DCC591985FB472FF80AD9BC5E34D1FB241DE5318CF4F 936 | CE3C8D5A5987DAAB65BD77F0AA0F7940B4E7A788C5CFFEEA433FDF03F8D4873E 937 | E0531FEA681F2976BCA6805F16FD06802F7EE8C3C845FAD0429D423E0659FA30 938 | 876B8EFD0B181952A24C7A050000001800000018000000B50400000000000078 939 | DAED5949681441148DBB228A220AEE513C8A1EDCF026DE5C71C1A3170FE2AEE8 940 | 453C059C254171C945A251505061625010A3283A62A6BB27A26014F783C954F5 941 | 242001333107CDD2FE3FDD893DD5CB54F57489CA347CD2A4BB5EF5FC7A7FA957 942 | 1515FFF615496596C754FA1A6C10CC08C910EB8D85DD1A222E6B88DD2511BF2B 943 | AED1D3B2F011BB26F57512DC1309F8D9AAE49729B8C671956C0DFDDB15B2DDCE 944 | A3A84AEE8486ADD22696A735A9CC2C78F62D04FCDE932D9D0BDC62019E1D2915 945 | 3FAAD0635EB156651823E19D74297CAF7BF1628C5F3C5737D3A5F05E5F00EC81 946 | 984257F3E40C78F7AC30BEA2D7F2E6A453AD9D1361CC97205CE7BD6229B23E28 947 | D7B9E750C9ED205CE7BD3862C293EBFCBFC13B26FCB8CE7BF9C44451AEF35EF1 948 | 7476191313FD1195AC0CB38EC23AEE06DC1C580FE4F53D326A7522618C42AB28 949 | 5F7FDC3FB8A6B8B660DFC35E5F99FC941D5F32F383ECFC26333FCBAC2FB2EBA3 950 | CCFA2EB33F91DD5FC9EC0F65F7B73C5C0FDA9F8B705D342602705D282664EFEF 951 | 64EF4F631A7D250D1FB0ADDAD49A8F3F09FAC0FFDC8F54A7B2F3A21A391853F5 952 | 0710331FB077C8F70FF97BFC9F7E20F25C9F2BACD9A8647654A575D82770E54D 953 | 9526E25A47255FEECF6EB1FA9CE1B5B2BEBD11E734E7CDE79236669E5C4CD337 954 | FB61475572B89047A43EAE92459EDFA29155F0DEE3C21A400EF97CF7802D47ED 955 | E6EE8F34FD7CC11CCCEFA849D339853E21F5A23D18E4FD66BBAF30DFDBFC72D9 956 | 3E3FCEE7C078FB762C70695D5CA16B0DC318E1E2AB6D857546BF34C44186272A 957 | 3B16F120D69FFCAEE54E1F237F98F5EEC7EF34F96D9B572577224A767E55D218 958 | 3D3C56C9AC60F2CA09161F6B96A356AAFA7E8893FB1EBCEEB3EAC253586BC5F6 959 | FF4790D7C73BB9A7EF72C96FF7A0A7F82890B712B54D9FC7397CDF42A7B9D528 960 | 2B6E72BCFD13F2C4E1F7E6F6A9F03CE5312EC7899F70DFD37454423CBFF31997 961 | E3F14F54C92C76F83B4D96C0B3CE227DC4079FF51D8AB56E96EFE82718FB89A3 962 | 7EDDC31C5BE4BD76179F2FE4EB51F47D98BF39F3B0A8F50DE501CC373EEFBD04 963 | 5FEC60AD989E8F79DC5E4F7C7874D7A3171EF45BB3E8B3B699057C80DCE5E127 964 | 51FC8188A66F721D0379CBA54F11C11FC07CE65B1FA13630BEE2C427DDF07723 965 | 570D7ED631DDAA497D9CF5FD1AEB6FAEFD35E66FC8B1D8CF03C67BABC6F5E4EF 966 | 317680DF6EB5A8605D15BA01DEA7C57B61B226A0BEC07B36920C882FD0CF8BFF 967 | 06C1984F4AC6173122635F5758F368462A7ED9CA56B6B295ED6F3622B5BE9835 968 | 8CC8C0C69E564CFF2137A21ABD55AAFE63F66D79CDA09FF9A6878C5E6298EF90 969 | 7AECF103EA3FB88F3A6AD7C5716F6FEECD4BD57F4C3BA392096E67792EFB056E 970 | FDC76E5E9A3E3CFBE9DA4F17D57F4AC277E83FE0DF2B7E5C0B80EFA7FF84823F 971 | A4FF587B2E43027E31FDA7647C5EFDC7131FE2C2EFCC06E31CF6D917E0BE2108 972 | 7EFEFC43E99C017CBCE8B2868DE09BEB96F9FAC82DBE3CCEA075DBB806F8FEAB 973 | 9CFAD811CEF3D6E3E2FA8FC505C89BC5CE7A01EF5C00FDC76E3F70DF5D95EE9A 974 | ECD0DC4D9DA797C1DF1B50FFD1C1AF3BEDBA960B4778F51F3F6B31E313391258 975 | FF096042FA8FF039B0A0FE23841D40FFE1F609AFFE83B501F3B78BBF9260CF59 976 | 9EE4CF65C2D07F30CF68F4A688FEF30B375AAED7 977 | } 978 | end 979 | end 980 | -------------------------------------------------------------------------------- /umain.pas: -------------------------------------------------------------------------------- 1 | unit umain; 2 | { FaSubrip: autodetects and converts encoding of farsi (persian) subrip files. 3 | with additional functionalities. 4 | 5 | Copyright (C) 2016-2021 Mohammadreza Bahrami m.audio91@gmail.com 6 | 7 | This program is free software: you can redistribute it and/or modify 8 | it under the terms of the GNU General Public License as published by 9 | the Free Software Foundation, either version 3 of the License, or 10 | (at your option) any later version. 11 | 12 | This program is distributed in the hope that it will be useful, 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | GNU General Public License for more details. 16 | 17 | You should have received a copy of the GNU General Public License 18 | along with this program. If not, see <http://www.gnu.org/licenses/>. 19 | } 20 | 21 | {$mode objfpc}{$H+}{$modeswitch arrayoperators+} 22 | 23 | interface 24 | 25 | uses 26 | Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, EditBtn, 27 | LCLType, StdCtrls, IniPropStorage, ExtCtrls, Buttons, ComCtrls, 28 | LazUTF8, LConvEncoding, uUrlLabel, LazFileUtils, DividerBevel, uabout, 29 | CommonGUIUtils, CommonStrUtils, CommonFileUtils, uSimpleHelp, uNumeditFloat, 30 | uTimeSlice, uSubripFile; 31 | 32 | type 33 | 34 | { TFaSubripMain } 35 | 36 | TFaSubripMain = class(TForm) 37 | AppendEncodingToFileName: TCheckBox; 38 | EndingPunctuationsL: TLabel; 39 | EndingPunctuations: TComboBox; 40 | CensorshipLevel: TComboBox; 41 | ArabicCharsToFarsiL: TLabel; 42 | AppendEncodingToFileNameL: TLabel; 43 | Container1: TPanel; 44 | EnglishNumbers: TCheckBox; 45 | EnglishNumbersL: TLabel; 46 | ImgsLight: TImageList; 47 | SubContainer5: TPanel; 48 | Container6: TPanel; 49 | SubContainer6: TPanel; 50 | SubContainer1: TPanel; 51 | Container2: TPanel; 52 | SubContainer2: TPanel; 53 | Container3: TPanel; 54 | SubContainer3: TPanel; 55 | Container4: TPanel; 56 | SubContainer4: TPanel; 57 | Container5: TPanel; 58 | SettingContainersGrid: TPanel; 59 | ReplaceSourceFileL: TLabel; 60 | PhrasesCensorshipL: TLabel; 61 | StripHTMLFontTagsL: TLabel; 62 | StripHTMLStyleTagsL: TLabel; 63 | Imgs: TImageList; 64 | SettingsNotifierL: TLabel; 65 | SettingsNotifier: TPanel; 66 | ReplaceSourceFile: TCheckBox; 67 | OutFileEncodingL: TLabel; 68 | OutFileEncoding: TComboBox; 69 | OpenSubs: TButton; 70 | PhrasesCensorship: TCheckBox; 71 | Description: TLabel; 72 | OpenDlg: TOpenDialog; 73 | OpenSubsContainer: TPanel; 74 | SaveDirDlg: TSelectDirectoryDialog; 75 | ArabicCharsToFarsi: TCheckBox; 76 | Header: TPanel; 77 | SettingsShow: TSpeedButton; 78 | SettingsHelps: TSpeedButton; 79 | StripHTMLStyleTags: TCheckBox; 80 | StripHTMLFontTags: TCheckBox; 81 | IniProps: TIniPropStorage; 82 | PhrasesCensorshipFile: TFileNameEdit; 83 | SaveDlg: TSaveDialog; 84 | Footer: TPanel; 85 | DragNotifierL: TLabel; 86 | HeaderLinks: TPanel; 87 | OptionalSettings: TDividerBevel; 88 | SubtitleDelay: TBitBtn; 89 | SubtitleDelayL: TLabel; 90 | procedure FormActivate(Sender: TObject); 91 | procedure IniPropsRestoringProperties(Sender: TObject); 92 | procedure PhrasesCensorshipFileKeyDown(Sender: TObject; var Key: Word; 93 | Shift: TShiftState); 94 | procedure FormCreate(Sender: TObject); 95 | procedure FormShow(Sender: TObject); 96 | procedure FormDropFiles(Sender: TObject; const FileNames: array of String); 97 | procedure OpenSubsClick(Sender: TObject); 98 | procedure SettingsHelpsClick(Sender: TObject); 99 | procedure SettingsShowClick(Sender: TObject); 100 | procedure SubtitleDelayClick(Sender: TObject); 101 | private 102 | FHelpWindow: TSimpleHelp; 103 | FSrt: String; 104 | FDelay: Double; 105 | FBatchMode: Boolean; 106 | FBatchOutDir: String; 107 | FInputFile: String; 108 | FMaxHeight: Integer; 109 | FMinHeight: Integer; 110 | FCollapsed: Boolean; 111 | function OutputEncoding: String; 112 | function OutputSuffix: String; 113 | function OutputDirValid(const Dir: String): Boolean; 114 | procedure DoRun; 115 | procedure ProcessSubtitle; 116 | function TryReadSubtitle: Boolean; 117 | procedure ClearUnicodeSpecificChars(var S: String); 118 | procedure SwapArabicChars(var S: String); 119 | procedure ReplaceFarsiNums(var S: String); 120 | procedure ApplyDelay(var S: String); 121 | procedure StripHTMLTags(var S: String); 122 | procedure CensorPhrases(var S: String); 123 | procedure CorrectEndingPunctuations(var S: String); 124 | procedure PromptExport; 125 | procedure ExportSubtitle(const Subtitle: String); 126 | procedure SupportUrlClick(Sender: TObject); 127 | public 128 | SupportUrlL: TCustomUrlLabel; 129 | LicenseUrlL: TUrlLabelEx; 130 | FInputFiles: array of String; 131 | FAutoRun: Boolean; 132 | published 133 | property Collapsed: Boolean read FCollapsed write FCollapsed; 134 | end; 135 | 136 | TIntegerDict = record 137 | s, 138 | e: Integer; 139 | end; 140 | 141 | TIntegerDictArray = array of TIntegerDict; 142 | 143 | var 144 | FaSubripMain: TFaSubripMain; 145 | 146 | implementation 147 | 148 | {$R *.lfm} 149 | {$R badphrases.res} 150 | 151 | const 152 | LicenseUrl = 'https://www.gnu.org/licenses/gpl-3.0.en.html'; 153 | SourceUrl = 'https://github.com/m-audio91/FaSubrip'; 154 | LicenseCaption = 'GNU GPL 3.0'; 155 | HTMLTags: array[0..11] of String = ('<i>', '</i>', '{i}', '{/i}', '<b>', 156 | '</b>', '{b}', '{/b}', '<u>', '</u>', '{u}', '{/u}'); 157 | HTMLFontTagOpen = '<font'; 158 | HTMLFontTagClose = '</font>'; 159 | HTMLTagEnd = '>'; 160 | CensorMask = '*****'; 161 | wFaSubed = '_FaSubrip'; 162 | extSrt = '.srt'; 163 | BadPhrasesResName = 'BADPHRASES'; 164 | BadPhrasesStartMarker = '[startofbadphrases]'; 165 | BadPhrasesEndMarker = '[endofbadphrases]'; 166 | MoreBadPhrasesStartMarker = '[startofmorebadphrases]'; 167 | MoreBadPhrasesEndMarker = '[endofmorebadphrases]'; 168 | ArabicChars: array[0..1] of String = ('ك', 'ي'); 169 | FarsiChars: array[0..1] of String = ('ک', 'ی'); 170 | FarsiNums: array[0..9] of String = ('۰','۱','۲','۳','۴','۵','۶','۷','۸','۹'); 171 | EnglishNums: array[0..9] of String = ('0','1','2','3','4','5','6','7','8','9'); 172 | UnicodeBOMs: array[0..4] of String = (UTF8BOM, UTF16BEBOM, UTF16LEBOM, UTF32BEBOM, 173 | UTF32LEBOM); 174 | UnicodeDirectionControllers: array[0..11] of String = (#$E2#$80#$8F, 175 | #$D8#$9C, #$E2#$80#$8E, #$E2#$80#$AA, #$E2#$80#$AB, #$E2#$80#$AD, 176 | #$E2#$80#$AC, #$E2#$80#$AE, #$E2#$81#$A6, #$E2#$81#$A7, #$E2#$81#$A8, 177 | #$E2#$81#$A9); 178 | CommonPunctuations: array[0..9] of String = ('!',',','.',':',';', 179 | '?','‚','؟','؛','،'); 180 | 181 | resourcestring 182 | rsAllDone = 'عملیات انجام شد'; 183 | rsSelectOutDir = 'پوشه ای برای قرار دادن فایل های خروجی انتخاب کنید'; 184 | rsLicenseHint = 'فاسابریپ و متن آن تحت این مجوز برای عموم منتشر گردیده است' 185 | +LineEnding + 'متن برنامه و طریقه کامپایل آن در آدرس زیر موجود است' 186 | +LineEnding + SourceUrl; 187 | rsDirIsNotWritable = 'محل انتخابی برای خروجی قابلیت نوشتن ندارد'; 188 | rsError = 'خطا'; 189 | rsSupport = 'پشتیبانی'; 190 | rsProcessSettings = 'تنظیمات پردازش زیرنویس'; 191 | rsOutputFileSettings = 'تنظیمات ذخیره خروجی'; 192 | rsDelayHint = '(-) عدد منفی یعنی زودتر پخش می شود.'+LineEnding+ 193 | '(+) عدد مثبت یعنی دیرتر پخش می شود.'+LineEnding+ 194 | 'S.mmm ثانیه ممیز هزارم ثانیه'; 195 | 196 | { TFaSubripMain } 197 | 198 | procedure TFaSubripMain.FormCreate(Sender: TObject); 199 | begin 200 | DefaultMacOSMenu(Self); 201 | SupportUrlL := TCustomUrlLabel.Create(Self); 202 | with SupportUrlL do 203 | begin 204 | Parent := HeaderLinks; 205 | Caption := rsSupport; 206 | Align := alRight; 207 | Font.Color := $0086C6E4; 208 | OnClick := @SupportUrlClick; 209 | end; 210 | LicenseUrlL := TUrlLabelEx.Create(Self); 211 | with LicenseUrlL do 212 | begin 213 | Parent := Footer; 214 | Align := alLeft; 215 | Caption := LicenseCaption; 216 | URL := LicenseUrl; 217 | ShowHint := True; 218 | Hint := rsLicenseHint; 219 | HighlightColor := clHighlight; 220 | end; 221 | Collapsed := True; 222 | FDelay := 0; 223 | end; 224 | 225 | procedure TFaSubripMain.PhrasesCensorshipFileKeyDown(Sender: TObject; var Key: Word; 226 | Shift: TShiftState); 227 | begin 228 | if Key = VK_RETURN then (Sender as TFileNameEdit).RunDialog; 229 | end; 230 | 231 | procedure TFaSubripMain.IniPropsRestoringProperties(Sender: TObject); 232 | begin 233 | SessionProperties := SessionProperties+';Collapsed'; 234 | end; 235 | 236 | procedure TFaSubripMain.FormShow(Sender: TObject); 237 | begin 238 | {$ifdef darwin} 239 | SubContainer2.BorderSpacing.Right := 6; 240 | SubContainer4.BorderSpacing.Right := 6; 241 | SubContainer5.BorderSpacing.Right := 6; 242 | OpenSubsContainer.Color := clDefault; 243 | SettingsNotifier.Color := clDefault; 244 | SettingContainersGrid.Color := clDefault; 245 | Footer.Color := clDefault; 246 | {$endif} 247 | AutoSize := True; 248 | FMaxHeight := Height; 249 | with SettingContainersGrid do 250 | begin 251 | Self.Constraints.MinWidth := Width+BorderSpacing.Left+BorderSpacing.Right; 252 | Visible := False; 253 | end; 254 | FMinHeight := Height; 255 | if not Collapsed then 256 | SettingsShowClick(SettingsShow); 257 | {$ifndef darwin} 258 | if FAutoRun then 259 | begin 260 | DoRun; 261 | Close; 262 | end; 263 | {$endif} 264 | CheckDisplayInScreen(Self); 265 | end; 266 | 267 | procedure TFaSubripMain.FormActivate(Sender: TObject); 268 | begin 269 | if HasDarkBackgroundColor(Self) then 270 | begin 271 | SettingsShow.Images := ImgsLight; 272 | SettingsHelps.Images := ImgsLight; 273 | SubtitleDelay.Images := ImgsLight; 274 | PhrasesCensorshipFile.Images := ImgsLight; 275 | DragNotifierL.Font.Color := clDefault; 276 | SettingsNotifierL.Font.Color := clDefault; 277 | end; 278 | OnActivate := nil; 279 | end; 280 | 281 | procedure TFaSubripMain.FormDropFiles(Sender: TObject; 282 | const FileNames: array of String); 283 | var 284 | i: Integer; 285 | begin 286 | FInputFiles := nil; 287 | SetLength(FInputFiles, Length(FileNames)); 288 | for i := 0 to High(FileNames) do 289 | FInputFiles[i] := FileNames[i]; 290 | DoRun; 291 | end; 292 | 293 | procedure TFaSubripMain.OpenSubsClick(Sender: TObject); 294 | var 295 | i: Integer; 296 | begin 297 | if OpenDlg.Execute then 298 | begin 299 | FInputFiles := nil; 300 | SetLength(FInputFiles, OpenDlg.Files.Count); 301 | for i := 0 to OpenDlg.Files.Count-1 do 302 | FInputFiles[i] := OpenDlg.Files[i]; 303 | DoRun; 304 | end; 305 | end; 306 | 307 | procedure TFaSubripMain.SettingsShowClick(Sender: TObject); 308 | var 309 | h: Integer; 310 | begin 311 | SettingContainersGrid.Visible := SettingContainersGrid.Visible = False; 312 | case SettingContainersGrid.Visible of 313 | True: begin 314 | h := FMaxHeight; 315 | SettingsShow.ImageIndex:= 1; 316 | end; 317 | False: begin 318 | h := FMinHeight; 319 | SettingsShow.ImageIndex:= 0; 320 | end; 321 | end; 322 | Collapsed := not SettingContainersGrid.Visible; 323 | {$ifdef linux} 324 | Constraints.MinHeight := h; 325 | Constraints.MaxHeight := h; 326 | AdjustSize; 327 | {$endif} 328 | end; 329 | 330 | procedure TFaSubripMain.SubtitleDelayClick(Sender: TObject); 331 | var 332 | ne: TNumEditFloat; 333 | begin 334 | ne := TNumEditFloat.Create(nil); 335 | try 336 | ne.HeaderText := SubtitleDelayL.Caption +LineEnding +rsDelayHint; 337 | ne.DecimalPlaces := 3; 338 | ne.Value := FDelay; 339 | ne.Increment := 0.1; 340 | if ne.ShowModal = mrOK then 341 | FDelay := ne.Value; 342 | finally 343 | SubtitleDelay.Caption := ': '+FDelay.ToString; 344 | ne.Free; 345 | end; 346 | end; 347 | 348 | function TFaSubripMain.OutputEncoding: String; 349 | begin 350 | Result := 'UTF-8'; 351 | if String(OutFileEncoding.Text).Contains('ANSI') then 352 | Result := 'ANSI' 353 | else if String(OutFileEncoding.Text).Contains('UTF-16') then 354 | Result := 'UTF-16'; 355 | end; 356 | 357 | function TFaSubripMain.OutputSuffix: String; 358 | begin 359 | Result := EmptyStr; 360 | if String(OutFileEncoding.Text).Contains('mark') then 361 | Result := 'noRTL'; 362 | if String(OutFileEncoding.Text).Contains('ANSI') then 363 | Result := '(1256)'; 364 | Result := OutputEncoding+Result; 365 | end; 366 | 367 | function TFaSubripMain.OutputDirValid(const Dir: String): Boolean; 368 | begin 369 | Result := TryDirectoryIsWritable(Dir); 370 | if not Result then 371 | ShowError(rsDirIsNotWritable, rsError); 372 | end; 373 | 374 | procedure TFaSubripMain.DoRun; 375 | var 376 | AFile: String; 377 | begin 378 | OpenDlg.InitialDir := ExtractFilePath(FInputFiles[0]); 379 | if High(FInputFiles) > 0 then 380 | begin 381 | FBatchMode := True; 382 | if ReplaceSourceFile.State = cbChecked then 383 | FBatchOutDir := IncludeTrailingPathDelimiter(OpenDlg.InitialDir) 384 | else 385 | begin 386 | ShowMessage(rsSelectOutDir); 387 | SaveDirDlg.InitialDir := OpenDlg.InitialDir; 388 | if not SaveDirDlg.Execute then 389 | begin 390 | FBatchMode := False; 391 | Exit; 392 | end; 393 | FBatchOutDir := SaveDirDlg.FileName; 394 | end; 395 | if not OutputDirValid(FBatchOutDir) then Exit; 396 | for AFile in FInputFiles do 397 | begin 398 | FInputFile := AFile; 399 | ProcessSubtitle; 400 | end; 401 | ShowMessage(rsAllDone); 402 | FBatchMode := False; 403 | end 404 | else 405 | begin 406 | FBatchMode := False; 407 | FInputFile := FInputFiles[0]; 408 | if OutputDirValid(OpenDlg.InitialDir) then 409 | ProcessSubtitle; 410 | end; 411 | FDelay := 0; 412 | SubtitleDelay.Caption := ': '+FDelay.ToString; 413 | end; 414 | 415 | procedure TFaSubripMain.ProcessSubtitle; 416 | begin 417 | if not LowerCase(ExtractFileExt(FInputFile)).Equals(extSrt) then Exit; 418 | if not TryReadSubtitle then Exit; 419 | ClearUnicodeSpecificChars(FSrt); 420 | SwapArabicChars(FSrt); 421 | ReplaceFarsiNums(FSrt); 422 | ApplyDelay(FSrt); 423 | StripHTMLTags(FSrt); 424 | CensorPhrases(FSrt); 425 | CorrectEndingPunctuations(FSrt); 426 | if FBatchMode then 427 | ExportSubtitle(GenFileName(FInputFile, EmptyStr, extSrt, True, FBatchOutDir, true)) 428 | else 429 | PromptExport; 430 | end; 431 | 432 | function TFaSubripMain.TryReadSubtitle: Boolean; 433 | var 434 | bs: TBytesStream; 435 | Enc: TEncoding; 436 | sl: TStringList; 437 | SrtEnc: String; 438 | begin 439 | Result := False; 440 | Enc := Default(TEncoding); 441 | bs := TBytesStream.Create; 442 | sl := TStringList.Create; 443 | try 444 | bs.LoadFromFile(FInputFile); 445 | bs.Position := 0; 446 | SrtEnc := GuessEncoding(PChar(bs.Bytes)); 447 | if SrtEnc = 'ucs2be' then 448 | begin 449 | sl.DefaultEncoding := Enc.BigEndianUnicode; 450 | sl.LoadFromStream(bs, Enc.BigEndianUnicode); 451 | FSrt := sl.Text; 452 | end 453 | else if SrtEnc = 'ucs2le' then 454 | FSrt := UTF16ToUTF8(PWideChar(bs.Bytes), bs.Size div SizeOf(WideChar)) 455 | else if (' cp1252 cp1256 ISO-8859-1 ').Contains(SrtEnc) then 456 | FSrt := ConvertEncoding(PChar(bs.Bytes), EncodingCP1256, EncodingUTF8) 457 | else 458 | begin 459 | sl.DefaultEncoding := Enc.UTF8; 460 | sl.LoadFromStream(bs, Enc.UTF8); 461 | FSrt := sl.Text; 462 | end; 463 | finally 464 | bs.Free; 465 | sl.Free; 466 | end; 467 | Result := not IsEmptyStr(FSrt); 468 | end; 469 | 470 | procedure TFaSubripMain.ClearUnicodeSpecificChars(var S: String); 471 | var 472 | c: String; 473 | begin 474 | for c in UnicodeBOMs do 475 | DeleteAllOccurrences(c, S); 476 | if OutputSuffix.Contains('noRTL') 477 | or OutputSuffix.Contains('ANSI') then 478 | for c in UnicodeDirectionControllers do 479 | DeleteAllOccurrences(c, S); 480 | end; 481 | 482 | procedure TFaSubripMain.SwapArabicChars(var S: String); 483 | begin 484 | if OutputEncoding.Equals('ANSI') then 485 | ArabicCharsToFarsi.State := cbUnchecked; 486 | if ArabicCharsToFarsi.State <> cbChecked then 487 | S := ReplaceStrings(S, FarsiChars, ArabicChars) 488 | else 489 | S := ReplaceStrings(S, ArabicChars, FarsiChars); 490 | end; 491 | 492 | procedure TFaSubripMain.ReplaceFarsiNums(var S: String); 493 | begin 494 | if OutputEncoding.Equals('ANSI') then 495 | EnglishNumbers.State := cbChecked; 496 | if EnglishNumbers.State = cbChecked then 497 | S := ReplaceStrings(s, FarsiNums, EnglishNums); 498 | end; 499 | 500 | procedure TFaSubripMain.ApplyDelay(var S: String); 501 | var 502 | sa: TStringArray; 503 | ts: TTimeSlice; 504 | i,j: Integer; 505 | begin 506 | if FDelay=0 then Exit; 507 | ts.Initialize(DefaultSubripTimeSliceFormat); 508 | sa := S.Split(LineEndings); 509 | j := 0; 510 | repeat 511 | i := FindInArray(sa, ts.TimeSliceFormat.SliceSep, j); 512 | if i>=0 then 513 | begin 514 | ts.ValueAsString := sa[i]; 515 | if ts.Valid then 516 | begin 517 | ts.Delay := FDelay; 518 | ts.Value := ts.ValueWithDelay; 519 | sa[i] := ts.ValueAsString; 520 | end; 521 | end; 522 | j := i+1; 523 | until i<0; 524 | S := S.Join(LineEnding,sa); 525 | end; 526 | 527 | procedure TFaSubripMain.StripHTMLTags(var S: String); 528 | var 529 | ATag: String; 530 | begin 531 | if StripHTMLStyleTags.State = cbChecked then 532 | begin 533 | for ATag in HTMLTags do 534 | DeleteAllOccurrences(ATag, S); 535 | end; 536 | if StripHTMLFontTags.State = cbChecked then 537 | begin 538 | DeleteAllOccurrencesVL(HTMLFontTagOpen, HTMLTagEnd, S); 539 | DeleteAllOccurrences(HTMLFontTagClose, S); 540 | end; 541 | end; 542 | 543 | procedure TFaSubripMain.CensorPhrases(var S: String); 544 | var 545 | rs: TResourceStream; 546 | sl: TStringList; 547 | sa: TStringArray; 548 | i,j: Cardinal; 549 | Enc: TEncoding; 550 | begin 551 | if PhrasesCensorship.State <> cbChecked then Exit; 552 | i := CensorshipLevel.ItemIndex; 553 | if i = 2 then 554 | begin 555 | if IsEmptyStr(PhrasesCensorshipFile.Text) then Exit; 556 | if not FileExists(PhrasesCensorshipFile.Text) then Exit; 557 | if not FileIsText(PhrasesCensorshipFile.Text) then Exit; 558 | end; 559 | Enc := Default(TEncoding); 560 | sl := TStringList.Create; 561 | sa := nil; 562 | try 563 | case i of 564 | 0..1: begin 565 | rs := TResourceStream.Create(HInstance, BadPhrasesResName, RT_RCDATA); 566 | sl.LoadFromStream(rs, Enc.UTF8); 567 | rs.Free; 568 | for j := sl.IndexOf(BadPhrasesStartMarker)+1 569 | to sl.IndexOf(BadPhrasesEndMarker)-1 do 570 | sa := sa+[sl.Strings[j]]; 571 | if i = 1 then 572 | begin 573 | for j := sl.IndexOf(MoreBadPhrasesStartMarker)+1 574 | to sl.IndexOf(MoreBadPhrasesEndMarker)-1 do 575 | sa := sa+[sl.Strings[j]]; 576 | end; 577 | end; 578 | 2: begin 579 | sl.LoadFromFile(PhrasesCensorshipFile.Text, Enc.UTF8); 580 | sa := StringListToArray(sl); 581 | end; 582 | end; 583 | sl.AddStrings(sa,True); 584 | sl.Duplicates := TDuplicates.dupIgnore; 585 | for i := 0 to High(sa) do 586 | begin 587 | sl.Add(ReplaceStrings(sa[i], ArabicChars, FarsiChars)); 588 | sl.Add(ReplaceStrings(sa[i], FarsiChars, ArabicChars)); 589 | end; 590 | s := NoChainedSpaces(s); 591 | for i := 0 to sl.Count-1 do 592 | begin 593 | if (sl.Values[sl.Names[i]] <> EmptyStr) then 594 | S := S.Replace(sl.Names[i], sl.Values[sl.Names[i]]) 595 | else if sl[i].EndsWith('=') then 596 | S := S.Replace(sl[i].Remove(sl[i].Length-1), EmptyStr) 597 | else 598 | DeleteAllOccurrences(sl[i], S, CensorMask); 599 | end; 600 | finally 601 | sl.Free; 602 | end; 603 | end; 604 | 605 | procedure TFaSubripMain.CorrectEndingPunctuations(var S: String); 606 | var 607 | sa: TStringArray; 608 | i,j,sCount,eCount: Integer; 609 | r: String; 610 | d: TIntegerDictArray; 611 | begin 612 | if EndingPunctuations.ItemIndex < 1 then Exit; 613 | sa := S.Split(LineEndings); 614 | SetLength(d, Length(sa)); 615 | for j := Low(sa) to High(sa) do 616 | begin 617 | sCount := 0; 618 | repeat 619 | i := UTF8Copy(sa[j],sCount+1,1).IndexOfAny(CommonPunctuations); 620 | if i>-1 then 621 | Inc(sCount); 622 | until i<0; 623 | d[j].s := sCount; 624 | r := UTF8ReverseString(sa[j]); 625 | eCount := 0; 626 | repeat 627 | i := UTF8Copy(r,eCount+1,1).IndexOfAny(CommonPunctuations); 628 | if i>-1 then 629 | Inc(eCount); 630 | until i<0; 631 | d[j].e := eCount; 632 | end; 633 | for i := Low(sa) to High(sa) do 634 | begin 635 | j := UTF8Length(sa[i]); 636 | case EndingPunctuations.ItemIndex of 637 | 1: sa[i] := UTF8RightStr(sa[i],d[i].e) 638 | +UTF8LeftStr(sa[i],j-d[i].e); 639 | 2: sa[i] := UTF8RightStr(sa[i],j-d[i].s) 640 | +UTF8LeftStr(sa[i],d[i].s); 641 | 3: sa[i] := UTF8RightStr(sa[i],j-d[i].s); 642 | 4: sa[i] := UTF8LeftStr(sa[i],j-d[i].e); 643 | 5: sa[i] := UTF8Copy(sa[i],d[i].s+1,j-(d[i].s+d[i].e)); 644 | end; 645 | end; 646 | S := S.Join(LineEnding,sa); 647 | end; 648 | 649 | procedure TFaSubripMain.PromptExport; 650 | begin 651 | if ReplaceSourceFile.State <> cbChecked then 652 | begin 653 | with SaveDlg do 654 | begin 655 | InitialDir := OpenDlg.InitialDir; 656 | if AppendEncodingToFileName.State = cbChecked then 657 | FileName := 658 | GenFileName(FInputFile, '_'+OutputSuffix, extSrt, False) 659 | else 660 | FileName := GenFileName(FInputFile, wFaSubed, extSrt, False); 661 | if Execute then 662 | begin 663 | if not LowerCase(ExtractFileExt(FileName)).Equals(extSrt) then 664 | FileName := FileName + extSrt; 665 | if OutputDirValid(ExtractFilePath(FileName)) then 666 | ExportSubtitle(FileName); 667 | end; 668 | end; 669 | end 670 | else 671 | begin 672 | if OutputDirValid(OpenDlg.InitialDir) then 673 | ExportSubtitle(FInputFile); 674 | end; 675 | end; 676 | 677 | procedure TFaSubripMain.ExportSubtitle(const Subtitle: String); 678 | var 679 | sl: TStringList; 680 | Enc: TEncoding; 681 | Sub: String; 682 | begin 683 | Sub := Subtitle; 684 | if FInputFile.Equals(Sub) and FileExists(Sub) then 685 | DeleteFile(Sub); 686 | if AppendEncodingToFileName.State = cbChecked then 687 | begin 688 | if not Sub.EndsWith(OutputSuffix+extSrt) then 689 | Sub := GenFileName(Sub, '_'+OutputSuffix); 690 | end; 691 | Enc := Default(TEncoding); 692 | sl := TStringList.Create; 693 | try 694 | case OutputEncoding of 695 | 'UTF-8':begin 696 | sl.DefaultEncoding := Enc.UTF8; 697 | sl.Text := FSrt; 698 | sl.TextLineBreakStyle := DefaultTextLineBreakStyle; 699 | sl.SaveToFile(Sub, Enc.UTF8); 700 | end; 701 | 'ANSI':begin 702 | sl.DefaultEncoding := Enc.ANSI; 703 | sl.Text := ConvertEncoding(FSrt, EncodingUTF8, EncodingCP1256); 704 | sl.TextLineBreakStyle := tlbsCRLF; 705 | sl.SaveToFile(Sub,True); 706 | end; 707 | 'UTF-16':begin 708 | sl.DefaultEncoding := Enc.Unicode; 709 | sl.Text := FSrt; 710 | sl.TextLineBreakStyle := DefaultTextLineBreakStyle; 711 | sl.SaveToFile(Sub, Enc.Unicode); 712 | end; 713 | end; 714 | finally 715 | sl.Free; 716 | end; 717 | end; 718 | 719 | procedure TFaSubripMain.SupportUrlClick(Sender: TObject); 720 | begin 721 | FaSubripAbout.ShowModal; 722 | end; 723 | 724 | procedure TFaSubripMain.SettingsHelpsClick(Sender: TObject); 725 | begin 726 | if not Assigned(FHelpWindow) then 727 | begin 728 | FHelpWindow := TSimpleHelp.Create(Self); 729 | with FHelpWindow do 730 | begin 731 | BiDiModeContents := bdRightToLeft; 732 | Title := SettingsHelps.Hint; 733 | MaxLineLength := 120; 734 | AddSection(''); 735 | AddCollapsible(OpenSubs.Caption,OpenSubs.Hint); 736 | AddSection(rsProcessSettings); 737 | AddCollapsible(StripHTMLFontTagsL.Caption,StripHTMLFontTagsL.Hint); 738 | AddCollapsible(StripHTMLStyleTagsL.Caption,StripHTMLStyleTagsL.Hint); 739 | AddCollapsible(ArabicCharsToFarsiL.Caption,ArabicCharsToFarsiL.Hint); 740 | AddCollapsible(EnglishNumbersL.Caption,EnglishNumbersL.Hint); 741 | AddCollapsible(SubtitleDelayL.Caption,SubtitleDelayL.Hint); 742 | AddCollapsible(EndingPunctuationsL.Caption,EndingPunctuationsL.Hint); 743 | AddCollapsible(PhrasesCensorshipL.Caption,PhrasesCensorshipL.Hint); 744 | AddSection(rsOutputFileSettings); 745 | AddCollapsible(OutFileEncodingL.Caption,OutFileEncodingL.Hint); 746 | AddCollapsible(AppendEncodingToFileNameL.Caption,AppendEncodingToFileNameL.Hint); 747 | AddCollapsible(ReplaceSourceFileL.Caption,ReplaceSourceFileL.Hint); 748 | end; 749 | end; 750 | FHelpWindow.Show; 751 | end; 752 | 753 | end. 754 | 755 | --------------------------------------------------------------------------------