Compare commits
211 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f0c7df619 | |||
| 41e9f86d1d | |||
| f3bee22ae7 | |||
| 0923ca9880 | |||
| abef9ac3f9 | |||
| 966adf6821 | |||
| 99d8a021c6 | |||
| 6f379ca291 | |||
| 326f8532f6 | |||
| 63a9c3943c | |||
| 8bf108be2e | |||
| 20fa4cb41d | |||
| 16c9e776b2 | |||
| 866ee50498 | |||
| 018887163f | |||
| 0ad2f6b847 | |||
| a5222719b0 | |||
| d1f5ab37d9 | |||
| 5c0ab50d22 | |||
| f2a824e2ef | |||
| 7e30c7ee0a | |||
| 31e85a14c2 | |||
| a9dfb15d14 | |||
| a1f0fbaa19 | |||
| 52083b2be9 | |||
| 40d481b72f | |||
| 6985e14737 | |||
| 5e567f040b | |||
| 6a1873be1a | |||
| 8add50b930 | |||
| a9c4b72bb0 | |||
| e52eb6fead | |||
| 01b37552f6 | |||
| ea31af9bc2 | |||
| e5a3cff41e | |||
| 70881c90a4 | |||
| 607a1acc00 | |||
| 53ffeed805 | |||
| 0ae0bf4c0d | |||
| 8f40cf2da5 | |||
| 08dba61bd9 | |||
| 41fce3426d | |||
| 057ea1ea2c | |||
| 8baaa7654f | |||
| 14bf26efd6 | |||
| 8ad281048b | |||
| 1b169672ba | |||
| 4b4c3b73a3 | |||
| 9270013b9a | |||
| 0f618bc54f | |||
| 06979f6ade | |||
| b4ff687efe | |||
| 5c5408a490 | |||
| 492cacca02 | |||
| 1fabbf4976 | |||
| 87bf27a7bb | |||
| 1af96ca83c | |||
| 41f1124052 | |||
| cd33c95cc9 | |||
| c5adab69df | |||
| ce980ddb2c | |||
| 09b25592b6 | |||
| d78d035402 | |||
| 79fe07c44b | |||
| 91f69320fc | |||
| 56eeec5b94 | |||
| 22a9900fad | |||
| 282676a653 | |||
| d72bf5e411 | |||
| 83ca8571f0 | |||
| d42c73389a | |||
| 8bb870a5c5 | |||
| 3013bab470 | |||
| 55d3d1fe40 | |||
| a8f3a64d64 | |||
| 4d320baaa2 | |||
| 9deb0a3759 | |||
| 8fff014801 | |||
| 98b85feab3 | |||
| fec0c06576 | |||
| 97d5a4a753 | |||
| 8679023013 | |||
| 1e0293e6a0 | |||
| fe32eb3149 | |||
| 01f536fc69 | |||
| ce9e41f1bf | |||
| 6390253c45 | |||
| 328d176365 | |||
| fccb1e76cb | |||
| e98e37aec0 | |||
| 7001b18315 | |||
| 5a01bccdad | |||
| f42aa482f3 | |||
| 48708bf46b | |||
| 348b9c33be | |||
| 298595ac8e | |||
| 7dbe133be8 | |||
| 4912e024c6 | |||
| 2505e07ab0 | |||
| 982acd905a | |||
| 3baa13fc88 | |||
| 871abf17d7 | |||
| 72fb8332e5 | |||
| 30662cda80 | |||
| e5f5ce0352 | |||
| a1325997af | |||
| 96a92e7894 | |||
| 532fae9cf1 | |||
| b65965869c | |||
| 0498b77b72 | |||
| 93c4da4259 | |||
| 037ce66e1c | |||
| 5dd5b3b4eb | |||
| 67872949f1 | |||
| 54999085ad | |||
| bc2065041f | |||
| 8321cd4a7f | |||
| 32f295d33a | |||
| e5f6d76726 | |||
| 619485cd5f | |||
| 27a20774ae | |||
| bd77fad010 | |||
| a3e09f09a0 | |||
| b3e1022338 | |||
| 93c87209f7 | |||
| 4f01e83fb9 | |||
| bbe63fb04f | |||
| 10a6c01e6a | |||
| 42619ec25c | |||
| 0d780e24d7 | |||
| 154cde899e | |||
| 9272f013b6 | |||
| ffbe29151b | |||
| 88abd4a30a | |||
| 689e680258 | |||
| 95b5cf4da8 | |||
| e61c798146 | |||
| a2b8da104b | |||
| cf35745027 | |||
| d45ae50925 | |||
| 9f750d8706 | |||
| a674fa2a10 | |||
| 76f9ed2ac0 | |||
| 7e27fbf968 | |||
| 712e0f00f9 | |||
| fcebe42b31 | |||
| d845c7b357 | |||
| 262694e6aa | |||
| d829d14393 | |||
| 6fe1487ac2 | |||
| 9e3149b984 | |||
| 08ac3e484b | |||
| 3c2054e3b2 | |||
| d438b764d6 | |||
| d2550f31d7 | |||
| 226fb7ded0 | |||
| e820270f5d | |||
| 8f5046a5a9 | |||
| eba56d7fb2 | |||
| 39e76d7249 | |||
| 6ba17709fd | |||
| 223e7b6cf0 | |||
| a687b678f5 | |||
| 659cd40846 | |||
| dbd7cc05dd | |||
| ce14610ec2 | |||
| bae6f8551d | |||
| d368c98744 | |||
| 27dab57802 | |||
| e73c81ccc6 | |||
| 90d1edb3c9 | |||
| 8f5231ff81 | |||
| abe4b61f79 | |||
| 6e649e3548 | |||
| 7e6972f5c4 | |||
| fdc0cef96b | |||
| 9213472a67 | |||
| f122fa4b8b | |||
| db2e8038e2 | |||
| 8aa234c790 | |||
| 36f4bb2048 | |||
| c9ffdaf1f2 | |||
| fe9af97b34 | |||
| 4a9efc0cab | |||
| 4185bbd0b3 | |||
| 05f91a70d2 | |||
| 58e8413e79 | |||
| 498dfd5cbb | |||
| 99cd6a3b91 | |||
| a74578635b | |||
| b36dd59710 | |||
| 2f7c9328ad | |||
| 8ed3b8e009 | |||
| 7a613e6b7b | |||
| 9f16b1457e | |||
| ba5951eddd | |||
| 32d0153dc7 | |||
| 160b2eb1f6 | |||
| e7e2f4a505 | |||
| 9ce4be18be | |||
| 4bcec62df0 | |||
| 68f1f37064 | |||
| ce8a034d6d | |||
| 6d38f66fc7 | |||
| 1dede9828f | |||
| 59f276dac0 | |||
| e877db4b48 | |||
| 3455b1a78b | |||
| 4bc6cb9a84 | |||
| 60c6555d7e | |||
| bca06bf124 |
@@ -79,7 +79,6 @@ renpy/vc_version.py
|
||||
doc-web
|
||||
|
||||
sphinx/source/inc
|
||||
sphinx/source/keywords.py
|
||||
sphinx/source/thequestion.rst
|
||||
tutorial/game/tutorial_director.rpy
|
||||
launcher/theme
|
||||
|
||||
@@ -76,10 +76,11 @@ Then, install pygame_sdl2 by running the following commands::
|
||||
python setup.py install_headers
|
||||
popd
|
||||
|
||||
Next, set RENPY_DEPS_INSTALL To a \::-separated list of paths containing the
|
||||
dependencies, and RENPY_CYTHON to the name of the cython command::
|
||||
Next, set RENPY_DEPS_INSTALL To a \:-separated (\;-separated on Windows)
|
||||
list of paths containing the dependencies, and RENPY_CYTHON to the name
|
||||
of the cython command::
|
||||
|
||||
export RENPY_DEPS_INSTALL="/usr::/usr/lib/x86_64-linux-gnu/"
|
||||
export RENPY_DEPS_INSTALL="/usr:/usr/lib/x86_64-linux-gnu/"
|
||||
export RENPY_CYTHON=cython
|
||||
|
||||
Finally, use setup.py in the Ren'Py ``module`` directory to compile and
|
||||
|
||||
@@ -19,3 +19,17 @@ Translation to the Russian language. Most of translation provided by Project
|
||||
Gardares, especially Ria-kon.
|
||||
|
||||
* Project Gardares <guardares@gmail.com>
|
||||
|
||||
Malay
|
||||
---------
|
||||
|
||||
Translation to the Malay language. This will be translated to both writing
|
||||
systems used in Malay, namely the Latin-based Rumi script system and the
|
||||
Arabic-based Jawi script system, to provide compatibility in some areas where
|
||||
there is still exist Malay people who still cannot read their language in the
|
||||
newer Rumi script system, or refused to use it. The translation is being made
|
||||
as general and native as possible to cover the entire region that uses Malay
|
||||
language, this means native words take precedence over loanwords if and only if
|
||||
both native and loanwords exist and both are suitable in the context of use.
|
||||
|
||||
* Muhammad Nur Hidayat (MNH48) <translation@mnh48.moe>
|
||||
|
||||
@@ -11,7 +11,6 @@ from renpy import version_tuple # @UnresolvedImport
|
||||
SOURCE = [
|
||||
"/home/tom/ab/renpy",
|
||||
"/home/tom/ab/android/",
|
||||
"/home/tom/ab/android/python-for-android",
|
||||
"/home/tom/ab/ripe/renios",
|
||||
"/home/tom/ab/renpy-deps",
|
||||
"/home/tom/ab/pygame_sdl2",
|
||||
|
||||
@@ -47,12 +47,13 @@ def main():
|
||||
raise Exception("Not running with python optimization.")
|
||||
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("version")
|
||||
ap.add_argument("version", nargs="?")
|
||||
ap.add_argument("--fast", action="store_true")
|
||||
ap.add_argument("--pygame", action="store", default=None)
|
||||
ap.add_argument("--no-rapt", action="store_true")
|
||||
ap.add_argument("--variant", action="store")
|
||||
ap.add_argument("--sign", action="store_true")
|
||||
ap.add_argument("--sign", action="store_true", default=True)
|
||||
ap.add_argument("--nosign", action="store_false", dest="sign")
|
||||
|
||||
args = ap.parse_args()
|
||||
|
||||
@@ -66,6 +67,9 @@ def main():
|
||||
# file has changed, bump it by 1.
|
||||
import renpy
|
||||
|
||||
if args.version is None:
|
||||
args.version = ".".join(str(i) for i in renpy.version_tuple[:-1]) # @UndefinedVariable
|
||||
|
||||
match_version = ".".join(str(i) for i in renpy.version_tuple[:2]) # @UndefinedVariable
|
||||
|
||||
s = subprocess.check_output([ "git", "describe", "--tags", "--dirty", "--match", "start-" + match_version ])
|
||||
@@ -103,6 +107,9 @@ def main():
|
||||
if args.variant:
|
||||
destination += "-" + args.variant
|
||||
|
||||
if os.path.exists(os.path.join(destination, "checksums.txt")):
|
||||
raise Exception("The checksums.txt file exists.")
|
||||
|
||||
print("Version {} ({})".format(args.version, full_version))
|
||||
|
||||
# Perhaps autobuild.
|
||||
|
||||
@@ -122,7 +122,7 @@ define gui.namebox_height = None
|
||||
define gui.namebox_borders = Borders(5, 5, 5, 5)
|
||||
|
||||
## If True, the background of the namebox will be tiled, if False, the background
|
||||
## if the namebox will be scaled.
|
||||
## of the namebox will be scaled.
|
||||
define gui.namebox_tile = False
|
||||
|
||||
|
||||
|
||||
@@ -904,13 +904,15 @@ screen history():
|
||||
|
||||
label h.who:
|
||||
style "history_name"
|
||||
substitute False
|
||||
|
||||
## Take the color of the who text from the Character, if set.
|
||||
if "color" in h.who_args:
|
||||
text_color h.who_args["color"]
|
||||
|
||||
$ what = renpy.filter_text_tags(h.what, allow=gui.history_allow_tags)
|
||||
text what
|
||||
text what:
|
||||
substitute False
|
||||
|
||||
if not _history_list:
|
||||
label _("The dialogue history is empty.")
|
||||
|
||||
@@ -28,7 +28,7 @@ init python:
|
||||
ANDROID_OK = 5
|
||||
|
||||
NO_RAPT_TEXT = _("To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher.")
|
||||
NO_JDK_TEXT = _("An x86 Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}download and install the JDK{/a}, then restart the Ren'Py launcher.")
|
||||
NO_JDK_TEXT = _("A Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}download and install the JDK{/a}, then restart the Ren'Py launcher.")
|
||||
NO_SDK_TEXT = _("RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this.")
|
||||
NO_KEY_TEXT = _("RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore.")
|
||||
NO_CONFIG_TEXT = _("The current project has not been configured. Use \"Configure\" to configure it before building.")
|
||||
@@ -45,10 +45,11 @@ init python:
|
||||
BUILD_AND_INSTALL_TEXT = _("Builds the Android package, and installs it on an Android device connected to your computer.")
|
||||
BUILD_INSTALL_AND_LAUNCH_TEXT = _("Builds the Android package, installs it on an Android device connected to your computer, then launches the app on your device.")
|
||||
|
||||
CONNECT_TEXT = _("Connects to an Android device running ADB in TCP/IP mode.")
|
||||
DISCONNECT_TEXT = _("Disconnects from an Android device running ADB in TCP/IP mode.")
|
||||
LOGCAT_TEXT = _("Retrieves the log from the Android device and writes it to a file.")
|
||||
|
||||
DEBUG_TEXT = _("Selects the Debug build, which can be accessed through Android Studio. Changing between debug and release builds requires an uninstall from your device.")
|
||||
RELEASE_TEXT = _("Selects the Release build, which can be uploaded to stores. Changing between debug and release builds requires an uninstall from your device.")
|
||||
|
||||
|
||||
import subprocess
|
||||
import re
|
||||
@@ -83,6 +84,8 @@ init python:
|
||||
import rapt.interface
|
||||
|
||||
rapt.plat.renpy = True
|
||||
rapt.plat.translate = __
|
||||
|
||||
else:
|
||||
rapt = None
|
||||
|
||||
@@ -95,11 +98,9 @@ init python:
|
||||
return ANDROID_NO_RAPT
|
||||
if renpy.windows and not "JAVA_HOME" in os.environ:
|
||||
return ANDROID_NO_JDK
|
||||
if not os.path.exists(rapt.plat.path("android-sdk/platforms/" + rapt.plat.target)):
|
||||
if not os.path.exists(rapt.plat.adb):
|
||||
return ANDROID_NO_SDK
|
||||
if not os.path.exists(rapt.plat.path("android.keystore")):
|
||||
return ANDROID_NO_KEY
|
||||
if not os.path.exists(rapt.plat.path("local.properties")):
|
||||
if not os.path.exists(rapt.plat.path("project/local.properties")):
|
||||
return ANDROID_NO_KEY
|
||||
if not os.path.exists(os.path.join(project.current.path, ".android.json")):
|
||||
return ANDROID_NO_CONFIG
|
||||
@@ -268,6 +269,10 @@ init python:
|
||||
rapt.build.build(rapt_interface, dist, command, launch=launch, finished=finished)
|
||||
|
||||
|
||||
def android_build_argument(cmd):
|
||||
return cmd + project.current.data["android_build"]
|
||||
|
||||
|
||||
|
||||
# The android support can stick unicode into os.environ. Fix that.
|
||||
init 100 python:
|
||||
@@ -362,6 +367,20 @@ screen android:
|
||||
|
||||
has vbox
|
||||
|
||||
hbox:
|
||||
spacing 15
|
||||
|
||||
textbutton _("Debug"):
|
||||
action SetDict(project.current.data, "android_build", "Debug")
|
||||
hovered tt.Action(DEBUG_TEXT)
|
||||
|
||||
textbutton _("Release"):
|
||||
action SetDict(project.current.data, "android_build", "Release")
|
||||
hovered tt.Action(RELEASE_TEXT)
|
||||
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
textbutton _("Install SDK & Create Keys"):
|
||||
action AndroidIfState(state, ANDROID_NO_SDK, Jump("android_installsdk"))
|
||||
hovered tt.Action(INSTALL_SDK_TEXT)
|
||||
@@ -397,14 +416,6 @@ screen android:
|
||||
|
||||
has vbox
|
||||
|
||||
textbutton _("Remote ADB Connect"):
|
||||
action AndroidIfState(state, ANDROID_OK, Jump("android_connect"))
|
||||
hovered tt.Action(CONNECT_TEXT)
|
||||
|
||||
textbutton _("Remote ADB Disconnect"):
|
||||
action AndroidIfState(state, ANDROID_OK, Jump("android_disconnect"))
|
||||
hovered tt.Action(DISCONNECT_TEXT)
|
||||
|
||||
textbutton _("Logcat"):
|
||||
action AndroidIfState(state, ANDROID_NO_KEY, Jump("logcat"))
|
||||
hovered tt.Action(LOGCAT_TEXT)
|
||||
@@ -469,74 +480,20 @@ label android_configure:
|
||||
|
||||
label android_build:
|
||||
|
||||
$ android_build([ 'release' ], opendir=True)
|
||||
$ android_build([ android_build_argument("assemble") ], opendir=True)
|
||||
|
||||
jump android
|
||||
|
||||
|
||||
label android_build_and_install:
|
||||
|
||||
$ android_build([ 'release', 'install' ])
|
||||
$ android_build([ android_build_argument("install") ])
|
||||
|
||||
jump android
|
||||
|
||||
label android_build_install_and_launch:
|
||||
|
||||
$ android_build([ 'release', 'install' ], launch=True)
|
||||
|
||||
jump android
|
||||
|
||||
|
||||
label android_connect:
|
||||
|
||||
python hide:
|
||||
|
||||
if persistent.connect_address is not None:
|
||||
address = persistent.connect_address
|
||||
else:
|
||||
address = ""
|
||||
|
||||
while True:
|
||||
address = interface.input(
|
||||
_("Remote ADB Address"),
|
||||
_("Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."),
|
||||
default=address,
|
||||
cancel=Jump("android"),
|
||||
)
|
||||
|
||||
address = address.strip()
|
||||
|
||||
try:
|
||||
host, port = address.split(":")
|
||||
except:
|
||||
interface.error(_("Invalid remote ADB address"), _("The address must contain one exactly one ':'."), label=None)
|
||||
continue
|
||||
|
||||
if " " in host:
|
||||
interface.error(_("Invalid remote ADB address"), _("The host may not contain whitespace."), label=None)
|
||||
continue
|
||||
|
||||
try:
|
||||
int(port)
|
||||
except:
|
||||
interface.error(_("Invalid remote ADB address"), _("The port must be a number."), label=None)
|
||||
continue
|
||||
|
||||
break
|
||||
|
||||
persistent.connect_address = address
|
||||
|
||||
rapt_interface = MobileInterface("android")
|
||||
rapt.build.connect(rapt_interface, address)
|
||||
|
||||
jump android
|
||||
|
||||
label android_disconnect:
|
||||
|
||||
python hide:
|
||||
|
||||
rapt_interface = MobileInterface("android")
|
||||
rapt.build.disconnect(rapt_interface)
|
||||
$ android_build([android_build_argument("install") ], launch=True)
|
||||
|
||||
jump android
|
||||
|
||||
@@ -556,7 +513,7 @@ init python:
|
||||
def android_build_command():
|
||||
ap = renpy.arguments.ArgumentParser()
|
||||
ap.add_argument("android_project", help="The path to the project directory.")
|
||||
ap.add_argument("ant_commands", help="Commands to pass to ant. (Try 'release' 'install'.)", nargs='+')
|
||||
ap.add_argument("gradle_commands", help="Commands to pass to gradle. (Try 'installDebug' or 'assembleRelease'.)", nargs='+')
|
||||
ap.add_argument("--launch", action="store_true", help="Launches the app after build and install compete.")
|
||||
ap.add_argument("--destination", "--dest", default=None, action="store", help="The directory where the packaged files should be placed.")
|
||||
|
||||
@@ -564,7 +521,7 @@ init python:
|
||||
|
||||
p = project.Project(args.android_project)
|
||||
|
||||
android_build(args.ant_commands, p=p, gui=False, launch=args.launch, destination=args.destination)
|
||||
android_build(args.gradle_commands, p=p, gui=False, launch=args.launch, destination=args.destination)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
|
||||
# This file contains strings used by RAPT, so the Ren'Py translation framework
|
||||
# can find them. It's automatically generated by rapt/update_translations.py, and
|
||||
# hence should not be changed by hand.
|
||||
|
||||
init python hide:
|
||||
__("{} is not a directory.")
|
||||
__("{} does not contain a Ren'Py game.")
|
||||
__("Run configure before attempting to build the app.")
|
||||
__("Google Play support is enabled, but build.google_play_key is not defined.")
|
||||
__("Updating project.")
|
||||
__("Creating assets directory.")
|
||||
__("Creating expansion file.")
|
||||
__("Packaging internal data.")
|
||||
__("I'm using Gradle to build the package.")
|
||||
__("Uploading expansion file.")
|
||||
__("The build seems to have failed.")
|
||||
__("Launching app.")
|
||||
__("The build seems to have succeeded.")
|
||||
__("The armeabi-v7a version works on most phones on tablets, while the x86_64 version works on the simulator and chromebooks.")
|
||||
__("What is the full name of your application? This name will appear in the list of installed applications.")
|
||||
__("What is the short name of your application? This name will be used in the launcher, and for application shortcuts.")
|
||||
__("What is the name of the package?\n\nThis is usually of the form com.domain.program or com.domain.email.program. It may only contain ASCII letters and dots. It must contain at least one dot.")
|
||||
__("The package name may not be empty.")
|
||||
__("The package name may not contain spaces.")
|
||||
__("The package name must contain at least one dot.")
|
||||
__("The package name may not contain two dots in a row, or begin or end with a dot.")
|
||||
__("Each part of the package name must start with a letter, and contain only letters, numbers, and underscores.")
|
||||
__("{} is a Java keyword, and can't be used as part of a package name.")
|
||||
__("What is the application's version?\n\nThis should be the human-readable version that you would present to a person. It must contain only numbers and dots.")
|
||||
__("The version number must contain only numbers and dots.")
|
||||
__("What is the version code?\n\nThis must be a positive integer number, and the value should increase between versions.")
|
||||
__("The numeric version must contain only numbers.")
|
||||
__("How would you like your application to be displayed?")
|
||||
__("In landscape orientation.")
|
||||
__("In portrait orientation.")
|
||||
__("In the user's preferred orientation.")
|
||||
__("Which app store would you like to support in-app purchasing through?")
|
||||
__("Google Play.")
|
||||
__("Amazon App Store.")
|
||||
__("Both, in one app.")
|
||||
__("Neither.")
|
||||
__("Would you like to create an expansion APK?")
|
||||
__("No. Size limit of 100 MB on Google Play, but can be distributed through other stores and sideloaded.")
|
||||
__("Yes. 2 GB size limit, but won't work outside of Google Play. (Read the documentation to get this to work.)")
|
||||
__("Do you want to allow the app to access the Internet?")
|
||||
__("Do you want to automatically update the generated project?")
|
||||
__("Yes. This is the best choice for most projects.")
|
||||
__("No. This may require manual updates when Ren'Py or the project configuration changes.")
|
||||
__("Unknown configuration variable: {}")
|
||||
__("I'm compiling a short test program, to see if you have a working JDK on your system.")
|
||||
__("I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Without a working JDK, I can't continue.")
|
||||
__("The version of Java on your computer does not appear to be JDK 8, which is the only version supported by the Android SDK. If you need to install JDK 8, you can download it from:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nYou can also set the JAVA_HOME environment variabe to use a different version of Java.")
|
||||
__("The JDK is present and working. Good!")
|
||||
__("The Android SDK has already been unpacked.")
|
||||
__("Do you accept the Android SDK Terms and Conditions?")
|
||||
__("I'm downloading the Android SDK. This might take a while.")
|
||||
__("I'm extracting the Android SDK.")
|
||||
__("I've finished unpacking the Android SDK.")
|
||||
__("I'm about to download and install the required Android packages. This might take a while.")
|
||||
__("I was unable to accept the Android licenses.")
|
||||
__("I was unable to install the required Android packages.")
|
||||
__("I've finished installing the required Android packages.")
|
||||
__("You set the keystore yourself, so I'll assume it's how you want it.")
|
||||
__("You've already created an Android keystore, so I won't create a new one for you.")
|
||||
__("I can create an application signing key for you. Signing an application with this key allows it to be placed in the Android Market and other app stores.\n\nDo you want to create a key?")
|
||||
__("I will create the key in the android.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\n\You also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of android.keystore, and keep it in a safe place?")
|
||||
__("Please enter your name or the name of your organization.")
|
||||
__("Could not create android.keystore. Is keytool in your path?")
|
||||
__("I've finished creating android.keystore. Please back it up, and keep it in a safe place.")
|
||||
__("It looks like you're ready to start packaging games.")
|
||||
@@ -56,7 +56,10 @@ init python:
|
||||
|
||||
try:
|
||||
# Open the URL.
|
||||
self.urlfile = urllib2.urlopen(url)
|
||||
|
||||
import ssl
|
||||
context = ssl.create_default_context(purpose=ssl.Purpose.SERVER_AUTH, cafile=renpy.loader.transfn("cacert.pem"))
|
||||
self.urlfile = urllib2.urlopen(url, context=context)
|
||||
|
||||
t = threading.Thread(target=self.thread)
|
||||
t.daemon = True
|
||||
|
||||
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 77 B |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 83 B |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 57 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 687 B After Width: | Height: | Size: 433 B |
|
Before Width: | Height: | Size: 96 B After Width: | Height: | Size: 78 B |
|
Before Width: | Height: | Size: 106 B After Width: | Height: | Size: 78 B |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
@@ -84,7 +84,8 @@ init -1 python:
|
||||
|
||||
self.info_msg = ""
|
||||
|
||||
with open(self.filename, "w"):
|
||||
with open(self.filename, "w") as f:
|
||||
f.write(renpy.version() + "\n")
|
||||
pass
|
||||
|
||||
def log(self, msg):
|
||||
|
||||
@@ -286,6 +286,7 @@ init python:
|
||||
pass
|
||||
|
||||
build.classify_renpy("rapt/**", "rapt")
|
||||
build.executable("rapt/prototype/gradlew")
|
||||
|
||||
build.classify_renpy("renios/prototype/base/", None)
|
||||
build.classify_renpy("renios/prototype/prototype.xcodeproj/*.xcworkspace/", None)
|
||||
@@ -366,6 +367,7 @@ init python:
|
||||
build.classify_renpy("module/pysdlsound/", "source")
|
||||
build.classify_renpy("module/pysdlsound/*.py", "source")
|
||||
build.classify_renpy("module/pysdlsound/*.pyx", "source")
|
||||
build.classify_renpy("module/fribidi-src/**", "source")
|
||||
|
||||
# all-platforms binary.
|
||||
build.classify_renpy("lib/**/_renpysteam*", None)
|
||||
|
||||
@@ -131,6 +131,7 @@ init python in project:
|
||||
data.setdefault("packages", [ "pc", "mac" ])
|
||||
data.setdefault("add_from", True)
|
||||
data.setdefault("force_recompile", True)
|
||||
data.setdefault("android_build", "Release")
|
||||
|
||||
if "renamed_all" not in data:
|
||||
dp = data["packages"]
|
||||
|
||||
@@ -138,7 +138,7 @@ translate arabic strings:
|
||||
new "## حجم الخط الذي يحيط بصندوق اسم الشخصية, الاحجام بالترتيب هي اليسار, الأعلى, اليمين, و الأسفل."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## عندما يتم اختيار True سيتم تكرار الخلفية حتى تغطي الصندوق, عند اختيار False سيتم تمديد الصورة لتغطي الصندوق."
|
||||
|
||||
# gui.rpy:132
|
||||
|
||||
@@ -138,8 +138,8 @@ translate finnish strings:
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
@@ -138,7 +138,7 @@ translate french strings:
|
||||
new "## Les bordures de la zone contenant le nom du personnage dans l’ordre suivant gauche, haut, droite, bas."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## Si « True » (vrai), l’arrière plan de zone du nom sera en mosaïque, si « False »(faux), l’arrière plan de la zone du nom sera mis à l’échelle."
|
||||
|
||||
# gui.rpy:132
|
||||
|
||||
@@ -138,8 +138,8 @@ translate german strings:
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
@@ -138,8 +138,8 @@ translate greek strings:
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
@@ -138,7 +138,7 @@ translate indonesian strings:
|
||||
new "## Tepi kotak bersisi urutan nama karakter, di kiri, atas, kanan, bawah."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## Jika Benar, latar dari kotaknama akan di beri judul, jika Salah, latar dari kotaknama akan di ukur ulang."
|
||||
|
||||
# gui.rpy:132
|
||||
|
||||
@@ -138,7 +138,7 @@ translate italian strings:
|
||||
new "## I bordi del riquadro che contiene il nome del personaggio, in questo ordine: sinistro, superiore, destro, inferiore."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## Se 'True', lo sfondo di namebox sarà tassellato (ripetuto come una piastrella). Se 'False' sarà invece scalato."
|
||||
|
||||
# gui.rpy:132
|
||||
|
||||
@@ -142,7 +142,7 @@ translate japanese strings:
|
||||
new "## ネームボックスのボーダーのサイズ。左、上、右、下の順で指定します。ボックスのサイズは、その中に表示されるキャラクター名のサイズから更にボーダー分拡張したサイズになります。"
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## True に設定すると、ネームボックスの背景画像をスケーリングではなくタイリングで表示します。"
|
||||
|
||||
# gui.rpy:132
|
||||
|
||||
@@ -3,155 +3,155 @@ translate korean strings:
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Monday"
|
||||
new "{#weekday}Monday"
|
||||
new "{#weekday}월요일"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Tuesday"
|
||||
new "{#weekday}Tuesday"
|
||||
new "{#weekday}화요일"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Wednesday"
|
||||
new "{#weekday}Wednesday"
|
||||
new "{#weekday}수요일"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Thursday"
|
||||
new "{#weekday}Thursday"
|
||||
new "{#weekday}목요일"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Friday"
|
||||
new "{#weekday}Friday"
|
||||
new "{#weekday}금요일"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Saturday"
|
||||
new "{#weekday}Saturday"
|
||||
new "{#weekday}토요일"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Sunday"
|
||||
new "{#weekday}Sunday"
|
||||
new "{#weekday}일일"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Mon"
|
||||
new "{#weekday_short}Mon"
|
||||
new "{#weekday_short}월"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Tue"
|
||||
new "{#weekday_short}Tue"
|
||||
new "{#weekday_short}화"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Wed"
|
||||
new "{#weekday_short}Wed"
|
||||
new "{#weekday_short}수"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Thu"
|
||||
new "{#weekday_short}Thu"
|
||||
new "{#weekday_short}목"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Fri"
|
||||
new "{#weekday_short}Fri"
|
||||
new "{#weekday_short}금"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sat"
|
||||
new "{#weekday_short}Sat"
|
||||
new "{#weekday_short}토"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sun"
|
||||
new "{#weekday_short}Sun"
|
||||
new "{#weekday_short}일"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}January"
|
||||
new "{#month}January"
|
||||
new "{#month}1월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}February"
|
||||
new "{#month}February"
|
||||
new "{#month}2월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}March"
|
||||
new "{#month}March"
|
||||
new "{#month}3월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}April"
|
||||
new "{#month}April"
|
||||
new "{#month}4월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}May"
|
||||
new "{#month}May"
|
||||
new "{#month}5월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}June"
|
||||
new "{#month}June"
|
||||
new "{#month}6월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}July"
|
||||
new "{#month}July"
|
||||
new "{#month}7월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}August"
|
||||
new "{#month}August"
|
||||
new "{#month}8월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}September"
|
||||
new "{#month}September"
|
||||
new "{#month}9월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}October"
|
||||
new "{#month}October"
|
||||
new "{#month}10월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}November"
|
||||
new "{#month}November"
|
||||
new "{#month}11월"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}December"
|
||||
new "{#month}December"
|
||||
new "{#month}12월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jan"
|
||||
new "{#month_short}Jan"
|
||||
new "{#month_short}1월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Feb"
|
||||
new "{#month_short}Feb"
|
||||
new "{#month_short}2월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Mar"
|
||||
new "{#month_short}Mar"
|
||||
new "{#month_short}3월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Apr"
|
||||
new "{#month_short}Apr"
|
||||
new "{#month_short}4월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}May"
|
||||
new "{#month_short}May"
|
||||
new "{#month_short}5월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jun"
|
||||
new "{#month_short}Jun"
|
||||
new "{#month_short}6월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jul"
|
||||
new "{#month_short}Jul"
|
||||
new "{#month_short}7월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Aug"
|
||||
new "{#month_short}Aug"
|
||||
new "{#month_short}8월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Sep"
|
||||
new "{#month_short}Sep"
|
||||
new "{#month_short}9월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Oct"
|
||||
new "{#month_short}Oct"
|
||||
new "{#month_short}10월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Nov"
|
||||
new "{#month_short}Nov"
|
||||
new "{#month_short}11월"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Dec"
|
||||
new "{#month_short}Dec"
|
||||
new "{#month_short}12월"
|
||||
|
||||
# 00action_file.rpy:235
|
||||
old "%b %d, %H:%M"
|
||||
@@ -187,7 +187,7 @@ translate korean strings:
|
||||
|
||||
# 00gui.rpy:233
|
||||
old "Are you sure you want to end the replay?"
|
||||
new "Are you sure you want to end the replay?"
|
||||
new "리플레이를 종료하겠습니까?"
|
||||
|
||||
# 00gui.rpy:234
|
||||
old "Are you sure you want to begin skipping?"
|
||||
@@ -199,7 +199,7 @@ translate korean strings:
|
||||
|
||||
# 00gui.rpy:236
|
||||
old "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
new "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
new "다음 선택지가 나타날 때까지 본 적이 없는 대사까지 모두 스킵하겠습니까?"
|
||||
|
||||
# 00keymap.rpy:250
|
||||
old "Saved screenshot as %s."
|
||||
@@ -207,15 +207,15 @@ translate korean strings:
|
||||
|
||||
# 00library.rpy:142
|
||||
old "Self-voicing disabled."
|
||||
new "Self-voicing disabled."
|
||||
new "대사 읽기를 끕니다."
|
||||
|
||||
# 00library.rpy:143
|
||||
old "Clipboard voicing enabled. "
|
||||
new "Clipboard voicing enabled. "
|
||||
new "대사 복사하기를 켭니다. "
|
||||
|
||||
# 00library.rpy:144
|
||||
old "Self-voicing enabled. "
|
||||
new "Self-voicing enabled. "
|
||||
new "대사 읽기를 켭니다. "
|
||||
|
||||
# 00library.rpy:179
|
||||
old "Skip Mode"
|
||||
@@ -223,7 +223,7 @@ translate korean strings:
|
||||
|
||||
# 00library.rpy:262
|
||||
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
new "이 프로그램은 MIT 라이선스와 GNU 라이선스를 포함한 여러 가지 라이선스의 적용을 받는 오픈소스 소프트웨어를 포함하고 있습니다. {a=https://www.renpy.org/l/license}이곳{/a}에서 포함된 모든 소프트웨어와 그 소스코드를 확인할 수 있습니다."
|
||||
|
||||
# 00preferences.rpy:422
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
@@ -239,7 +239,7 @@ translate korean strings:
|
||||
|
||||
# 00iap.rpy:217
|
||||
old "Contacting App Store\nPlease Wait..."
|
||||
new "Contacting App Store\nPlease Wait..."
|
||||
new "앱스토어와 통신 중\n잠시만 기다려주십시오..."
|
||||
|
||||
# 00updater.rpy:367
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
|
||||
@@ -23,7 +23,7 @@ translate korean strings:
|
||||
|
||||
# 00gltest.rpy:93
|
||||
old "Enable"
|
||||
new "Enable"
|
||||
new "활성"
|
||||
|
||||
# 00gltest.rpy:109
|
||||
old "Changes will take effect the next time this program is run."
|
||||
@@ -91,27 +91,27 @@ translate korean strings:
|
||||
|
||||
# 00gamepad.rpy:32
|
||||
old "Select Gamepad to Calibrate"
|
||||
new "Select Gamepad to Calibrate"
|
||||
new "보정할 게임패드 선택"
|
||||
|
||||
# 00gamepad.rpy:35
|
||||
old "No Gamepads Available"
|
||||
new "No Gamepads Available"
|
||||
new "사용 가능한 게임패드가 없습니다."
|
||||
|
||||
# 00gamepad.rpy:54
|
||||
old "Calibrating [name] ([i]/[total])"
|
||||
new "Calibrating [name] ([i]/[total])"
|
||||
new "[name]를 보정 중입니다. ([i]/[total])"
|
||||
|
||||
# 00gamepad.rpy:58
|
||||
old "Press or move the [control!r] [kind]."
|
||||
new "Press or move the [control!r] [kind]."
|
||||
new "[control!r] [kind]를 누르거나 이동합니다."
|
||||
|
||||
# 00gamepad.rpy:66
|
||||
old "Skip (A)"
|
||||
new "Skip (A)"
|
||||
new "스킵 (A)"
|
||||
|
||||
# 00gamepad.rpy:69
|
||||
old "Back (B)"
|
||||
new "Back (B)"
|
||||
new "뒤로 (B)"
|
||||
|
||||
# _errorhandling.rpym:495
|
||||
old "Open Traceback"
|
||||
@@ -123,11 +123,11 @@ translate korean strings:
|
||||
|
||||
# _errorhandling.rpym:499
|
||||
old "Copy to Clipboard"
|
||||
new "Copy to Clipboard"
|
||||
new "클립보드로 복사"
|
||||
|
||||
# _errorhandling.rpym:501
|
||||
old "Copies the traceback.txt file to the clipboard."
|
||||
new "Copies the traceback.txt file to the clipboard."
|
||||
new "traceback.txt 파일을 클립보드로 복사합니다."
|
||||
|
||||
# _errorhandling.rpym:519
|
||||
old "An exception has occurred."
|
||||
@@ -175,5 +175,5 @@ translate korean strings:
|
||||
|
||||
# _errorhandling.rpym:612
|
||||
old "Copies the errors.txt file to the clipboard."
|
||||
new "Copies the errors.txt file to the clipboard."
|
||||
new "errors.txt 파일을 클립보드로 복사합니다."
|
||||
|
||||
|
||||
@@ -3,409 +3,409 @@ translate korean strings:
|
||||
|
||||
# gui.rpy:2
|
||||
old "## Initialization"
|
||||
new "## Initialization"
|
||||
new "## 초기화"
|
||||
|
||||
# gui.rpy:5
|
||||
old "## The init offset statement causes the init code in this file to run before init code in any other file."
|
||||
new "## The init offset statement causes the init code in this file to run before init code in any other file."
|
||||
new "## 이 파일에서 init offset 문을 사용하면 이 파일의 init 코드가 다른 파일의 init 코드보다 먼저 실행됩니다."
|
||||
|
||||
# gui.rpy:9
|
||||
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
new "## gui.init의 호출은 스타일을 합리적인 기본값으로 재설정하고, 게임의 너비(width)와 높이(height)를 설정합니다."
|
||||
|
||||
# gui.rpy:21
|
||||
old "## Colors"
|
||||
new "## Colors"
|
||||
new "## 색상"
|
||||
|
||||
# gui.rpy:23
|
||||
old "## The colors of text in the interface."
|
||||
new "## The colors of text in the interface."
|
||||
new "## 인터페이스에서 글자의 색상입니다."
|
||||
|
||||
# gui.rpy:25
|
||||
old "## An accent color used throughout the interface to label and highlight text."
|
||||
new "## An accent color used throughout the interface to label and highlight text."
|
||||
new "## 강조 색상은 레이블(label)과 강조된 글자로 인터페이스 전체에서 사용됩니다."
|
||||
|
||||
# gui.rpy:29
|
||||
old "## The color used for a text button when it is neither selected nor hovered."
|
||||
new "## The color used for a text button when it is neither selected nor hovered."
|
||||
new "## 텍스트 버튼(text button)이 선택(selected)됐거나 커서를 올리지(hovered) 않았을 때 사용됩니다."
|
||||
|
||||
# gui.rpy:32
|
||||
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
|
||||
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
|
||||
new "## 작은(small) 색상은 같은 효과를 내기 위해 더 밝거나 어두워야 하는 작은 글자에 사용됩니다."
|
||||
|
||||
# gui.rpy:36
|
||||
old "## The color that is used for buttons and bars that are hovered."
|
||||
new "## The color that is used for buttons and bars that are hovered."
|
||||
new "## 버튼(button)과 막대(bar)에 커서를 올렸을 때(hovered) 사용됩니다."
|
||||
|
||||
# gui.rpy:39
|
||||
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
|
||||
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
|
||||
new "## 텍스트 버튼(text button)에 선택됐지만(selected) 포커스되지(focused) 않았을 때 사용됩니다. 버튼(button)은 현재 화면이거나 설정값인 경우 선택됨(selected)이 됩니다."
|
||||
|
||||
# gui.rpy:43
|
||||
old "## The color used for a text button when it cannot be selected."
|
||||
new "## The color used for a text button when it cannot be selected."
|
||||
new "## 텍스트 버튼(text button)이 선택되지(selected) 않았을 때 사용됩니다."
|
||||
|
||||
# gui.rpy:46
|
||||
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
|
||||
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
|
||||
new "## 채워지지 않은 빈 막대(bar)에 사용됩니다. 이것은 바로 사용되지 않지만, 막대(bar) 이미지 파일이 재생성됐을 때 사용됩니다."
|
||||
|
||||
# gui.rpy:51
|
||||
old "## The colors used for dialogue and menu choice text."
|
||||
new "## The colors used for dialogue and menu choice text."
|
||||
new "## 대사(dialogue)와 선택지(menu choice)의 글자에서 사용됩니다."
|
||||
|
||||
# gui.rpy:56
|
||||
old "## Fonts and Font Sizes"
|
||||
new "## Fonts and Font Sizes"
|
||||
new "## 글자와 글자 크기"
|
||||
|
||||
# gui.rpy:58
|
||||
old "## The font used for in-game text."
|
||||
new "## The font used for in-game text."
|
||||
new "## 인-게임 글자에 사용됩니다."
|
||||
|
||||
# gui.rpy:61
|
||||
old "## The font used for character names."
|
||||
new "## The font used for character names."
|
||||
new "## 캐릭터의 이름에 사용됩니다."
|
||||
|
||||
# gui.rpy:64
|
||||
old "## The font used for out-of-game text."
|
||||
new "## The font used for out-of-game text."
|
||||
new "## 인터페이스에 사용됩니다."
|
||||
|
||||
# gui.rpy:67
|
||||
old "## The size of normal dialogue text."
|
||||
new "## The size of normal dialogue text."
|
||||
new "## 일반 대사의 글자 크기입니다."
|
||||
|
||||
# gui.rpy:70
|
||||
old "## The size of character names."
|
||||
new "## The size of character names."
|
||||
new "## 캐릭터 이름의 글자 크기입니다."
|
||||
|
||||
# gui.rpy:73
|
||||
old "## The size of text in the game's user interface."
|
||||
new "## The size of text in the game's user interface."
|
||||
new "## 게임의 유저 인터페이스에서 글자의 크기입니다."
|
||||
|
||||
# gui.rpy:76
|
||||
old "## The size of labels in the game's user interface."
|
||||
new "## The size of labels in the game's user interface."
|
||||
new "## 게임의 유저 인터페이스에서 레이블(label)들의 글자 크기입니다."
|
||||
|
||||
# gui.rpy:79
|
||||
old "## The size of text on the notify screen."
|
||||
new "## The size of text on the notify screen."
|
||||
new "## 통지(notify) 화면의 글자 크기입니다."
|
||||
|
||||
# gui.rpy:82
|
||||
old "## The size of the game's title."
|
||||
new "## The size of the game's title."
|
||||
new "## 게임의 타이틀(title) 글자의 크기입니다."
|
||||
|
||||
# gui.rpy:86
|
||||
old "## Main and Game Menus"
|
||||
new "## Main and Game Menus"
|
||||
new "## 메인과 게임 메뉴들"
|
||||
|
||||
# gui.rpy:88
|
||||
old "## The images used for the main and game menus."
|
||||
new "## The images used for the main and game menus."
|
||||
new "## 이미지들은 메인(main)과 게임 메뉴(game menu)에 사용됩니다."
|
||||
|
||||
# gui.rpy:92
|
||||
old "## Should we show the name and version of the game?"
|
||||
new "## Should we show the name and version of the game?"
|
||||
new "## 게임의 이름과 버전을 보여줘야 할까요?"
|
||||
|
||||
# gui.rpy:96
|
||||
old "## Dialogue"
|
||||
new "## Dialogue"
|
||||
new "## 대사"
|
||||
|
||||
# gui.rpy:98
|
||||
old "## These variables control how dialogue is displayed on the screen one line at a time."
|
||||
new "## These variables control how dialogue is displayed on the screen one line at a time."
|
||||
new "## 이러한 변수들은 한 번에 한 줄의 대사가 어떻게 화면에 표시되는지 제어합니다."
|
||||
|
||||
# gui.rpy:101
|
||||
old "## The height of the textbox containing dialogue."
|
||||
new "## The height of the textbox containing dialogue."
|
||||
new "## 대사를 포함하는 텍스트 박스의 높이입니다."
|
||||
|
||||
# gui.rpy:104
|
||||
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
|
||||
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
|
||||
new "## 화면에 텍스트박스를 세로로 배치합니다. 0.0은 최상단, 0.5는 중앙, 그리고 1.0은 최하단입니다."
|
||||
|
||||
# gui.rpy:109
|
||||
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
|
||||
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
|
||||
new "## 말하는 캐릭터의 이름을 텍스트 박스를 기준으로 배치합니다. 이것은 좌측이나 최상단으로부터 전체 픽셀값의 숫자가 되거나, 0.5로 중앙이 될 수 있습니다."
|
||||
|
||||
# gui.rpy:114
|
||||
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## 캐릭터들의 이름을 수평으로 정렬합니다. 이것은 0.0으로 좌측 정렬, 0.5로 중앙, 그리고 1.0으로 우측 정렬될 수 있습니다."
|
||||
|
||||
# gui.rpy:118
|
||||
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
|
||||
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
|
||||
new "## 캐릭터들의 이름이 들어 있는 박스의 너비, 높이, 그리고 테두리입니다. 혹은 그것을 None으로 자동 설정할 수 있습니다."
|
||||
|
||||
# gui.rpy:123
|
||||
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
new "## 캐릭터의 이름이 들어 있는 박스의 테두리를 좌측, 상단, 우측, 하단의 순서로 정합니다."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## 만약 참(True)이면, 네임박스의 배경은 바둑판식으로 배열(tiled)될 것이고, 거짓(False)이면, 네임박스의 배경은 채워질(scaled) 것입니다."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
new "## 텍스트박스에서 대사의 위치입니다. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
# gui.rpy:138
|
||||
old "## The maximum width of dialogue text, in pixels."
|
||||
new "## The maximum width of dialogue text, in pixels."
|
||||
new "## 픽셀값에서 대사의 최대 너비입니다."
|
||||
|
||||
# gui.rpy:141
|
||||
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## 대사 글자의 수평 정렬입니다. 이것은 0.0으로 좌측 정렬, 0.5로 중앙, 그리고 1.0으로 우측 정렬이 될 수 있습니다."
|
||||
|
||||
# gui.rpy:146
|
||||
old "## Buttons"
|
||||
new "## Buttons"
|
||||
new "## 버튼들"
|
||||
|
||||
# gui.rpy:148
|
||||
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
new "## 이러한 변수들은 GUI/버튼에서 이미지 파일들과 함께 어떻게 버튼이 표시되는지 제어합니다."
|
||||
|
||||
# gui.rpy:151
|
||||
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
new "## 픽셀값에서 버튼의 너비와 높이입니다. 만약 None이면, 렌파이가 크기를 계산합니다."
|
||||
|
||||
# gui.rpy:155
|
||||
old "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
new "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
new "## 좌측, 상단, 우측, 하단의 순서에서 버튼의 테두리 값입니다."
|
||||
|
||||
# gui.rpy:158
|
||||
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
new "## 만약 참(True)이면, 배경 이미지는 바둑판식으로 배열(tiled)될 것입니다. 만약 거짓(False)이면, 배경 이미지는 선으로 채워질(scaled) 것입니다."
|
||||
|
||||
# gui.rpy:162
|
||||
old "## The font used by the button."
|
||||
new "## The font used by the button."
|
||||
new "## 버튼에 사용된 글자의 폰트입니다."
|
||||
|
||||
# gui.rpy:165
|
||||
old "## The size of the text used by the button."
|
||||
new "## The size of the text used by the button."
|
||||
new "## 버튼에 사용된 글자의 크기입니다."
|
||||
|
||||
# gui.rpy:179
|
||||
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
|
||||
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
|
||||
new "## 이러한 변수는 다른 종류의 버튼 설정을 덮어씌웁니다. 사용 가능한 버튼의 종류와, 각각 무엇을 위해 사용하는지는 gui 문서를 확인해주세요."
|
||||
|
||||
# gui.rpy:183
|
||||
old "## These customizations are used by the default interface:"
|
||||
new "## These customizations are used by the default interface:"
|
||||
new "## 이러한 사용자 지정은 기본 인터페이스에 사용됩니다:"
|
||||
|
||||
# gui.rpy:198
|
||||
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
|
||||
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
|
||||
new "## 당신은 또한 설정된 이름의 변수를 추가함으로써 당신만의 커스텀을 추가할 수 있습니다. 예를 들어, 다음 행의 주석 표시를 제거하여 탐색(navigation) 버튼의 너비를 설정할 수 있습니다."
|
||||
|
||||
# gui.rpy:205
|
||||
old "## Choice Buttons"
|
||||
new "## Choice Buttons"
|
||||
new "## 선택 버튼들"
|
||||
|
||||
# gui.rpy:207
|
||||
old "## Choice buttons are used in the in-game menus."
|
||||
new "## Choice buttons are used in the in-game menus."
|
||||
new "## 선택 버튼은 인-게임 메뉴에 사용됩니다."
|
||||
|
||||
# gui.rpy:220
|
||||
old "## File Slot Buttons"
|
||||
new "## File Slot Buttons"
|
||||
new "## 파일 슬롯 버튼"
|
||||
|
||||
# gui.rpy:222
|
||||
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
|
||||
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
|
||||
new "## 파일 슬롯 버튼은 버튼의 특별한 종류입니다. 그것은 썸네일 이미지나 저장 슬롯의 콘텐츠를 설명하는 글자를 포함합니다. GUI/버튼에서 저장 슬롯은 버튼의 다른 종류와 같은 이미지 파일을 사용합니다."
|
||||
|
||||
# gui.rpy:226
|
||||
old "## The save slot button."
|
||||
new "## The save slot button."
|
||||
new "## 저장 슬롯 버튼입니다."
|
||||
|
||||
# gui.rpy:234
|
||||
old "## The width and height of thumbnails used by the save slots."
|
||||
new "## The width and height of thumbnails used by the save slots."
|
||||
new "## 저장 슬롯에 사용되는 썸네일의 너비와 높이입니다."
|
||||
|
||||
# gui.rpy:238
|
||||
old "## The number of columns and rows in the grid of save slots."
|
||||
new "## The number of columns and rows in the grid of save slots."
|
||||
new "## 저장 슬롯의 그리드(grid)에서 행(rows)과 열(columns)의 갯수입니다."
|
||||
|
||||
# gui.rpy:243
|
||||
old "## Positioning and Spacing"
|
||||
new "## Positioning and Spacing"
|
||||
new "## 위치와 간격"
|
||||
|
||||
# gui.rpy:245
|
||||
old "## These variables control the positioning and spacing of various user interface elements."
|
||||
new "## These variables control the positioning and spacing of various user interface elements."
|
||||
new "## 이러한 변수들은 다양한 사용자 인터페이스 요소들의 위치와 간격을 제어합니다."
|
||||
|
||||
# gui.rpy:248
|
||||
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
new "## 화면의 왼쪽을 기준으로 하는 네비게이션 버튼의 왼쪽 위치입니다."
|
||||
|
||||
# gui.rpy:252
|
||||
old "## The vertical position of the skip indicator."
|
||||
new "## The vertical position of the skip indicator."
|
||||
new "## 스킵 표시기(skip indicator)의 수직 위치입니다."
|
||||
|
||||
# gui.rpy:255
|
||||
old "## The vertical position of the notify screen."
|
||||
new "## The vertical position of the notify screen."
|
||||
new "## 통지(notify) 스크린의 수직 위치입니다."
|
||||
|
||||
# gui.rpy:258
|
||||
old "## The spacing between menu choices."
|
||||
new "## The spacing between menu choices."
|
||||
new "## 선택지의 메뉴 선택 간의 간격입니다."
|
||||
|
||||
# gui.rpy:261
|
||||
old "## Buttons in the navigation section of the main and game menus."
|
||||
new "## Buttons in the navigation section of the main and game menus."
|
||||
new "## 메인과 게임 메뉴에서 네비게이션 섹션의 버튼들 간의 간격입니다."
|
||||
|
||||
# gui.rpy:264
|
||||
old "## Controls the amount of spacing between preferences."
|
||||
new "## Controls the amount of spacing between preferences."
|
||||
new "## 환경 설정들 간의 간격을 제어합니다."
|
||||
|
||||
# gui.rpy:267
|
||||
old "## Controls the amount of spacing between preference buttons."
|
||||
new "## Controls the amount of spacing between preference buttons."
|
||||
new "## 환경 설정 버튼들 사이의 간격을 제어합니다."
|
||||
|
||||
# gui.rpy:270
|
||||
old "## The spacing between file page buttons."
|
||||
new "## The spacing between file page buttons."
|
||||
new "## 파일 페이지 버튼들 간의 간격입니다."
|
||||
|
||||
# gui.rpy:273
|
||||
old "## The spacing between file slots."
|
||||
new "## The spacing between file slots."
|
||||
new "## 파일 슬롯들 간의 간격입니다."
|
||||
|
||||
# gui.rpy:277
|
||||
old "## Frames"
|
||||
new "## Frames"
|
||||
new "## 프레임들"
|
||||
|
||||
# gui.rpy:279
|
||||
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
new "## 이러한 변수들은 오버레이되거나 창이 없을 때 보여지는 사용자 인터페이스 구성 요소들을 포함하는 프레임을 제어합니다."
|
||||
|
||||
# gui.rpy:282
|
||||
old "## Generic frames that are introduced by player code."
|
||||
new "## Generic frames that are introduced by player code."
|
||||
new "## 플레이어 코드에 의해 소개되는 일반 프레임."
|
||||
|
||||
# gui.rpy:285
|
||||
old "## The frame that is used as part of the confirm screen."
|
||||
new "## The frame that is used as part of the confirm screen."
|
||||
new "## 프레임은 확인(confirm) 화면의 일부로 사용됩니다."
|
||||
|
||||
# gui.rpy:288
|
||||
old "## The frame that is used as part of the skip screen."
|
||||
new "## The frame that is used as part of the skip screen."
|
||||
new "## 프레임은 스킵(skip) 화면의 일부로 사용됩니다."
|
||||
|
||||
# gui.rpy:291
|
||||
old "## The frame that is used as part of the notify screen."
|
||||
new "## The frame that is used as part of the notify screen."
|
||||
new "## 프레임은 통지(notify) 화면의 일부로 사용됩니다."
|
||||
|
||||
# gui.rpy:294
|
||||
old "## Should frame backgrounds be tiled?"
|
||||
new "## Should frame backgrounds be tiled?"
|
||||
new "## 프레임 배경들은 바둑판식으로 배열해야 할까요?"
|
||||
|
||||
# gui.rpy:298
|
||||
old "## Bars, Scrollbars, and Sliders"
|
||||
new "## Bars, Scrollbars, and Sliders"
|
||||
new "## 막대, 스크롤바, 슬라이더"
|
||||
|
||||
# gui.rpy:300
|
||||
old "## These control the look and size of bars, scrollbars, and sliders."
|
||||
new "## These control the look and size of bars, scrollbars, and sliders."
|
||||
new "## 이러한 설정은 막대와 스크롤바, 그리고 슬라이더의 보여지는 것과 크기를 제어합니다."
|
||||
|
||||
# gui.rpy:302
|
||||
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
|
||||
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
|
||||
new "## 기본 GUI는 슬라이더와 세로 스크롤바만 사용합니다. 다른 모든 막대들은 창작자가 작성한 코드에서 사용됩니다."
|
||||
|
||||
# gui.rpy:305
|
||||
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
new "## 수평 막대, 스크롤바, 슬라이더의 높이. 수직 막대, 스크롤바, 슬라이더의 너비."
|
||||
|
||||
# gui.rpy:311
|
||||
old "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
new "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
new "## 막대 이미지가 바둑판식 배열돼야 하면 참(True)입니다. 선으로 채워져야 한다면 거짓(False)입니다."
|
||||
|
||||
# gui.rpy:316
|
||||
old "## Horizontal borders."
|
||||
new "## Horizontal borders."
|
||||
new "## 수평 테두리입니다."
|
||||
|
||||
# gui.rpy:321
|
||||
old "## Vertical borders."
|
||||
new "## Vertical borders."
|
||||
new "## 수직 테두리입니다."
|
||||
|
||||
# gui.rpy:326
|
||||
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
new "## GUI에서 스크롤할 수 없는 스크롤 막대로 뭘 할 수 있나요? \"hide\"로 그것들을 숨기고, None은 그것들을 보여줍니다."
|
||||
|
||||
# gui.rpy:331
|
||||
old "## History"
|
||||
new "## History"
|
||||
new "## 다시보기"
|
||||
|
||||
# gui.rpy:333
|
||||
old "## The history screen displays dialogue that the player has already dismissed."
|
||||
new "## The history screen displays dialogue that the player has already dismissed."
|
||||
new "## 다시보기 화면은 사용자가 이미 확인한 다이얼로그를 표시합니다."
|
||||
|
||||
# gui.rpy:335
|
||||
old "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
new "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
new "## 렌파이가 보관할 다시보기의 블록 갯수입니다."
|
||||
|
||||
# gui.rpy:338
|
||||
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
new "## 다시보기 화면 항목의 높이를 지정하거나 None으로 하여 높이를 성능에 맡길 수 있습니다."
|
||||
|
||||
# gui.rpy:342
|
||||
old "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
new "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
new "## 말하는 캐릭터의 이름을 나타내는 레이블의 위치, 너비, 그리고 정렬입니다."
|
||||
|
||||
# gui.rpy:349
|
||||
old "## The position, width, and alignment of the dialogue text."
|
||||
new "## The position, width, and alignment of the dialogue text."
|
||||
new "## 대사 글자의 위치, 너비, 그리고 정렬입니다."
|
||||
|
||||
# gui.rpy:356
|
||||
old "## NVL-Mode"
|
||||
new "## NVL-Mode"
|
||||
new "## NVL-모드"
|
||||
|
||||
# gui.rpy:358
|
||||
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
new "## NVL-모드 화면은 NVL-모드 캐릭터들에 의한 대화를 화면에 표시합니다."
|
||||
|
||||
# gui.rpy:360
|
||||
old "## The borders of the background of the NVL-mode background window."
|
||||
new "## The borders of the background of the NVL-mode background window."
|
||||
new "## NVL-모드 배경 창에서 배경의 테두리입니다."
|
||||
|
||||
# gui.rpy:363
|
||||
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
new "## NVL-모드 항목의 높이입니다. 이것을 None으로 설정하면 항목들은 동적으로 높이를 조정합니다."
|
||||
|
||||
# gui.rpy:367
|
||||
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
new "## gui.nvl_height 값이 None일 때 NVL-모드 항목들, 그리고 NVL-모드 항목들과 NVL-모드 메뉴간의 간의 간격입니다."
|
||||
|
||||
# gui.rpy:384
|
||||
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
new "## nvl_thought 글자의 위치, 너비, 정렬(nvl_narrator 캐릭터에 의해 표시되는 글자)입니다."
|
||||
|
||||
# gui.rpy:391
|
||||
old "## The position of nvl menu_buttons."
|
||||
new "## The position of nvl menu_buttons."
|
||||
new "## NVL 메뉴 버튼의 위치입니다."
|
||||
|
||||
# gui.rpy:403
|
||||
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
new "## 이것은 휴대전화와 태블릿에서 쉽게 터지할 수 있도록 빠른(Quick) 버튼들의 크기를 크게 합니다."
|
||||
|
||||
# gui.rpy:409
|
||||
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
new "## 이것은 휴대전화에서 다양한 GUI 요소들의 크기와 간격을 쉽게 보일 수 있도록 변경합니다."
|
||||
|
||||
# gui.rpy:413
|
||||
old "## Font sizes."
|
||||
new "## Font sizes."
|
||||
new "## 글자 크기들."
|
||||
|
||||
# gui.rpy:421
|
||||
old "## Adjust the location of the textbox."
|
||||
new "## Adjust the location of the textbox."
|
||||
new "## 텍스트박스의 위치를 조정합니다."
|
||||
|
||||
# gui.rpy:427
|
||||
old "## Change the size and spacing of items in the game menu."
|
||||
new "## Change the size and spacing of items in the game menu."
|
||||
new "## 게임 메뉴에서 항목들의 크기와 간격을 변경합니다."
|
||||
|
||||
# gui.rpy:436
|
||||
old "## File button layout."
|
||||
new "## File button layout."
|
||||
new "## 파일 버튼 레이아웃."
|
||||
|
||||
# gui.rpy:440
|
||||
old "## NVL-mode."
|
||||
new "## NVL-mode."
|
||||
new "## NVL-모드."
|
||||
|
||||
# gui.rpy:456
|
||||
old "## Quick buttons."
|
||||
new "## Quick buttons."
|
||||
new "## 빠른(Quick) 버튼들."
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ translate korean strings:
|
||||
|
||||
# android.rpy:50
|
||||
old "Retrieves the log from the Android device and writes it to a file."
|
||||
new "Retrieves the log from the Android device and writes it to a file."
|
||||
new "안드로이드 기기와 쓰여진 파일로부터 로그를 검색합니다."
|
||||
|
||||
# android.rpy:240
|
||||
old "Copying Android files to distributions directory."
|
||||
@@ -195,7 +195,7 @@ translate korean strings:
|
||||
|
||||
# android.rpy:544
|
||||
old "Retrieving logcat information from device."
|
||||
new "Retrieving logcat information from device."
|
||||
new "기기로부터 로그캣 정보를 검색합니다."
|
||||
|
||||
# choose_directory.rpy:73
|
||||
old "Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."
|
||||
@@ -231,7 +231,7 @@ translate korean strings:
|
||||
|
||||
# consolecommand.rpy:84
|
||||
old "The command is being run in a new operating system console window."
|
||||
new "The command is being run in a new operating system console window."
|
||||
new "커맨드가 새로운 운영체제 콘솔 창에서 실행 중입니다."
|
||||
|
||||
# distribute.rpy:443
|
||||
old "Scanning project files..."
|
||||
@@ -259,19 +259,19 @@ translate korean strings:
|
||||
|
||||
# distribute.rpy:1050
|
||||
old "Unpacking the Macintosh application for signing..."
|
||||
new "Unpacking the Macintosh application for signing..."
|
||||
new "서명을 위해 매킨토시 애플리케이션을 압축해제하는 중입니다..."
|
||||
|
||||
# distribute.rpy:1060
|
||||
old "Signing the Macintosh application..."
|
||||
new "Signing the Macintosh application..."
|
||||
new "매킨토시 애플리케이션을 서명하는 중입니다..."
|
||||
|
||||
# distribute.rpy:1082
|
||||
old "Creating the Macintosh DMG..."
|
||||
new "Creating the Macintosh DMG..."
|
||||
new "매킨토시 DMG를 생성하는 중입니다..."
|
||||
|
||||
# distribute.rpy:1091
|
||||
old "Signing the Macintosh DMG..."
|
||||
new "Signing the Macintosh DMG..."
|
||||
new "매킨토시 DMG에 서명하는 중입니다..."
|
||||
|
||||
# distribute.rpy:1248
|
||||
old "Writing the [variant] [format] package."
|
||||
@@ -523,23 +523,23 @@ translate korean strings:
|
||||
|
||||
# gui7.rpy:236
|
||||
old "Select Accent and Background Colors"
|
||||
new "Select Accent and Background Colors"
|
||||
new "강조와 배경 색상 선택"
|
||||
|
||||
# gui7.rpy:250
|
||||
old "Please click on the color scheme you wish to use, then click Continue. These colors can be changed and customized later."
|
||||
new "Please click on the color scheme you wish to use, then click Continue. These colors can be changed and customized later."
|
||||
new "원하는 색상 스키마를 선택하고 다음을 누르세요. 이러한 색상과 사용자 지정은 나중에 변경할 수 있습니다."
|
||||
|
||||
# gui7.rpy:294
|
||||
old "{b}Warning{/b}\nContinuing will overwrite customized bar, button, save slot, scrollbar, and slider images.\n\nWhat would you like to do?"
|
||||
new "{b}Warning{/b}\nContinuing will overwrite customized bar, button, save slot, scrollbar, and slider images.\n\nWhat would you like to do?"
|
||||
new "{b}경고g{/b}\n계속하면 사용자 지정된 막대, 버튼, 저장 슬롯, 스크롤바, 그리고 슬라이더 이미지들을 덮어씌웁니다.\n\n무엇을 하고 싶으세요?"
|
||||
|
||||
# gui7.rpy:294
|
||||
old "Choose new colors, then regenerate image files."
|
||||
new "Choose new colors, then regenerate image files."
|
||||
new "새로운 색상을 선택하면 이미지 파일들이 재생성됩니다."
|
||||
|
||||
# gui7.rpy:294
|
||||
old "Regenerate the image files using the colors in gui.rpy."
|
||||
new "Regenerate the image files using the colors in gui.rpy."
|
||||
new "gui.rpy에서 사용하는 색상으로 이미지 파일 재생성."
|
||||
|
||||
# gui7.rpy:314
|
||||
old "PROJECT NAME"
|
||||
@@ -563,15 +563,15 @@ translate korean strings:
|
||||
|
||||
# gui7.rpy:341
|
||||
old "What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."
|
||||
new "What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."
|
||||
new "프로젝트에서 어떤 해상도를 사용하나요? 렌파이가 창을 위아래로 확장 할 수 있지만, 이것은 창의 초기 크기, 에셋이 그려지는 크기, 애셋이 가장 선명하게 될 크기입니다.\n\n1280x720의 기본값은 적절한 절충안입니다."
|
||||
|
||||
# gui7.rpy:389
|
||||
old "Creating the new project..."
|
||||
new "Creating the new project..."
|
||||
new "새 프로젝트를 만드는 중..."
|
||||
|
||||
# gui7.rpy:391
|
||||
old "Updating the project..."
|
||||
new "Updating the project..."
|
||||
new "프로젝트 업데이트중..."
|
||||
|
||||
# interface.rpy:107
|
||||
old "Documentation"
|
||||
@@ -735,27 +735,27 @@ translate korean strings:
|
||||
|
||||
# itch.rpy:60
|
||||
old "The built distributions could not be found. Please choose 'Build' and try again."
|
||||
new "The built distributions could not be found. Please choose 'Build' and try again."
|
||||
new "빌드된 배포판을 찾을 수 없습니다. '빌드'를 선택하고 다시 시도하세요."
|
||||
|
||||
# itch.rpy:91
|
||||
old "No uploadable files were found. Please choose 'Build' and try again."
|
||||
new "No uploadable files were found. Please choose 'Build' and try again."
|
||||
new "업로드가능한 파일이 없습니다. '빌드'를 선택하고 다시 시도하세요."
|
||||
|
||||
# itch.rpy:99
|
||||
old "The butler program was not found."
|
||||
new "The butler program was not found."
|
||||
new "집사(butler) 프로그램이 없습니다."
|
||||
|
||||
# itch.rpy:99
|
||||
old "Please install the itch.io app, which includes butler, and try again."
|
||||
new "Please install the itch.io app, which includes butler, and try again."
|
||||
new "집사(butler)를 포함한 itch.io 앱을 설치하고 다시 시도하세요."
|
||||
|
||||
# itch.rpy:108
|
||||
old "The name of the itch project has not been set."
|
||||
new "The name of the itch project has not been set."
|
||||
new "itch 프로젝트의 이름이 설정되지 않았습니다."
|
||||
|
||||
# itch.rpy:108
|
||||
old "Please {a=https://itch.io/game/new}create your project{/a}, then add a line like \n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5} to options.rpy."
|
||||
new "Please {a=https://itch.io/game/new}create your project{/a}, then add a line like \n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5} to options.rpy."
|
||||
new "{a=https://itch.io/game/new}프로젝트를 만드세요{/a}, 그리고 options.rpy에 다음과 같은 라인을 작성하세요: \n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5}."
|
||||
|
||||
# mobilebuild.rpy:109
|
||||
old "{a=%s}%s{/a}"
|
||||
@@ -827,23 +827,23 @@ translate korean strings:
|
||||
|
||||
# new_project.rpy:38
|
||||
old "New GUI Interface"
|
||||
new "New GUI Interface"
|
||||
new "새로운 GUI 인터페이스"
|
||||
|
||||
# new_project.rpy:48
|
||||
old "Both interfaces have been translated to your language."
|
||||
new "Both interfaces have been translated to your language."
|
||||
new "모든 인터페이스는 귀하의 언어로 번역됐습니다."
|
||||
|
||||
# new_project.rpy:50
|
||||
old "Only the new GUI has been translated to your language."
|
||||
new "Only the new GUI has been translated to your language."
|
||||
new "새로운 GUI만 귀하의 언어로 번역됐습니다."
|
||||
|
||||
# new_project.rpy:52
|
||||
old "Only the legacy theme interface has been translated to your language."
|
||||
new "Only the legacy theme interface has been translated to your language."
|
||||
new "레거시 테마 인터페이스가 귀하의 언어로 번역됐습니다."
|
||||
|
||||
# new_project.rpy:54
|
||||
old "Neither interface has been translated to your language."
|
||||
new "Neither interface has been translated to your language."
|
||||
new "어느 인터페이스도 귀하의 언어로 번역되지 않았습니다."
|
||||
|
||||
# new_project.rpy:63
|
||||
old "The projects directory could not be set. Giving up."
|
||||
@@ -851,11 +851,11 @@ translate korean strings:
|
||||
|
||||
# new_project.rpy:69
|
||||
old "Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."
|
||||
new "Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."
|
||||
new "어떤 인터페이스를 사용하고 싶으세요? 새로운 GUI는 현대적인 스타일로, 와이드 스크린과 휴대기기를 지원하며 쉽게 커스텀 가능합니다. 레거시 테마는 작업에 오래된 예제 코드가 필요할 수 있습니다.\n\n[language_support!t]\n\n의심스럽다면 새로운 GUI를 선택한 다음, 오른쪽 하단의 계속하기를 클릭하십시오."
|
||||
|
||||
# new_project.rpy:69
|
||||
old "Legacy Theme Interface"
|
||||
new "Legacy Theme Interface"
|
||||
new "레거시 테마 인터페이스"
|
||||
|
||||
# new_project.rpy:90
|
||||
old "Choose Project Template"
|
||||
@@ -991,11 +991,11 @@ translate korean strings:
|
||||
|
||||
# translations.rpy:63
|
||||
old "Translations: [project.current.name!q]"
|
||||
new "Translations: [project.current.name!q]"
|
||||
new "번역: [project.current.name!q]"
|
||||
|
||||
# translations.rpy:104
|
||||
old "The language to work with. This should only contain lower-case ASCII characters and underscores."
|
||||
new "The language to work with. This should only contain lower-case ASCII characters and underscores."
|
||||
new "작업할 언어. 소문자 ASCII 문자와 밑줄만 포함해야 합니다."
|
||||
|
||||
# translations.rpy:130
|
||||
old "Generate empty strings for translations"
|
||||
@@ -1003,19 +1003,19 @@ translate korean strings:
|
||||
|
||||
# translations.rpy:148
|
||||
old "Generates or updates translation files. The files will be placed in game/tl/[persistent.translate_language!q]."
|
||||
new "Generates or updates translation files. The files will be placed in game/tl/[persistent.translate_language!q]."
|
||||
new "번역 파일을 생성하거나 업데이트합니다. 파일들은 in game/tl/[persistent.translate_language!q]에 배치됩니다."
|
||||
|
||||
# translations.rpy:168
|
||||
old "Extract String Translations"
|
||||
new "Extract String Translations"
|
||||
new "문자열 번역 추출"
|
||||
|
||||
# translations.rpy:170
|
||||
old "Merge String Translations"
|
||||
new "Merge String Translations"
|
||||
new "문자열 번역 병합"
|
||||
|
||||
# translations.rpy:175
|
||||
old "Replace existing translations"
|
||||
new "Replace existing translations"
|
||||
new "기존 번역 대체"
|
||||
|
||||
# translations.rpy:176
|
||||
old "Reverse languages"
|
||||
@@ -1023,11 +1023,11 @@ translate korean strings:
|
||||
|
||||
# translations.rpy:180
|
||||
old "Update Default Interface Translations"
|
||||
new "Update Default Interface Translations"
|
||||
new "기본 인터페이스 번역 업데이트"
|
||||
|
||||
# translations.rpy:200
|
||||
old "The extract command allows you to extract string translations from an existing project into a temporary file.\n\nThe merge command merges extracted translations into another project."
|
||||
new "The extract command allows you to extract string translations from an existing project into a temporary file.\n\nThe merge command merges extracted translations into another project."
|
||||
new "추출 명령은 기존 프로젝트의 문자열 번역을 임시 파일로 추출 할 수 있습니다.\n\n병합 명령은 추출된 번역을 다른 프로젝트로 병합합니다."
|
||||
|
||||
# translations.rpy:224
|
||||
old "Ren'Py is generating translations...."
|
||||
@@ -1039,51 +1039,51 @@ translate korean strings:
|
||||
|
||||
# translations.rpy:248
|
||||
old "Ren'Py is extracting string translations..."
|
||||
new "Ren'Py is extracting string translations..."
|
||||
new "문자열 번역을 추출하고 있습니다..."
|
||||
|
||||
# translations.rpy:251
|
||||
old "Ren'Py has finished extracting [language] string translations."
|
||||
new "Ren'Py has finished extracting [language] string translations."
|
||||
new "[language] 문자열 번역 추출을 완료했습니다."
|
||||
|
||||
# translations.rpy:271
|
||||
old "Ren'Py is merging string translations..."
|
||||
new "Ren'Py is merging string translations..."
|
||||
new "문자열 번역을 병합하고 있습니다..."
|
||||
|
||||
# translations.rpy:274
|
||||
old "Ren'Py has finished merging [language] string translations."
|
||||
new "Ren'Py has finished merging [language] string translations."
|
||||
new "[language] 문자열 번역 병합을 완료했습니다."
|
||||
|
||||
# translations.rpy:282
|
||||
old "Updating default interface translations..."
|
||||
new "Updating default interface translations..."
|
||||
new "기본 인터페이스 번역을 업데이트하고 있습니다..."
|
||||
|
||||
# translations.rpy:306
|
||||
old "Extract Dialogue: [project.current.name!q]"
|
||||
new "Extract Dialogue: [project.current.name!q]"
|
||||
new "다이얼로그 추출: [project.current.name!q]"
|
||||
|
||||
# translations.rpy:322
|
||||
old "Format:"
|
||||
new "Format:"
|
||||
new "포맷:"
|
||||
|
||||
# translations.rpy:330
|
||||
old "Tab-delimited Spreadsheet (dialogue.tab)"
|
||||
new "Tab-delimited Spreadsheet (dialogue.tab)"
|
||||
new "탭으로 구분되는 스프레드시트 (dialogue.tab)"
|
||||
|
||||
# translations.rpy:331
|
||||
old "Dialogue Text Only (dialogue.txt)"
|
||||
new "Dialogue Text Only (dialogue.txt)"
|
||||
new "대사 글자만 (dialogue.txt)"
|
||||
|
||||
# translations.rpy:344
|
||||
old "Strip text tags from the dialogue."
|
||||
new "Strip text tags from the dialogue."
|
||||
new "텍스트 태그를 대사에서 제거합니다."
|
||||
|
||||
# translations.rpy:345
|
||||
old "Escape quotes and other special characters."
|
||||
new "Escape quotes and other special characters."
|
||||
new "따옴표와 기타 특수 문자를 제거합니다."
|
||||
|
||||
# translations.rpy:346
|
||||
old "Extract all translatable strings, not just dialogue."
|
||||
new "Extract all translatable strings, not just dialogue."
|
||||
new "모든 번역 가능한 문자열을 추출합니다."
|
||||
|
||||
# translations.rpy:374
|
||||
old "Ren'Py is extracting dialogue...."
|
||||
@@ -1091,7 +1091,7 @@ translate korean strings:
|
||||
|
||||
# translations.rpy:378
|
||||
old "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[persistent.dialogue_format] in the base directory."
|
||||
new "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[persistent.dialogue_format] in the base directory."
|
||||
new "대사 추출을 완료했습니다. 추출된 대사는 기본 디렉토리의 dialogue.[persistent.dialogue_format]에서 찾을 수 있습니다."
|
||||
|
||||
# updater.rpy:75
|
||||
old "Select Update Channel"
|
||||
|
||||
@@ -3,193 +3,193 @@ translate korean strings:
|
||||
|
||||
# options.rpy:1
|
||||
old "## This file contains options that can be changed to customize your game."
|
||||
new "## This file contains options that can be changed to customize your game."
|
||||
new "## 이 파일은 귀하의 게임 커스텀으로 변경될 수 있는 옵션을 포함합니다."
|
||||
|
||||
# options.rpy:4
|
||||
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
new "## 두 개의 '#' 표시로 시작되는 줄은 주석이며, 그것을 없애지 말아야 합니다. 한 개의 '#' 표시로 시작되는 줄은 주석 처리된 코드로 필요한 경우 제거해도 됩니다."
|
||||
|
||||
# options.rpy:10
|
||||
old "## Basics"
|
||||
new "## Basics"
|
||||
new "## 기본"
|
||||
|
||||
# options.rpy:12
|
||||
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
new "## 인간이 읽을 수 있는 게임의 이름. 기본 윈도우의 제목으로 사용되며, 인터페이스와 오류 보고에서 보여집니다."
|
||||
|
||||
# options.rpy:15
|
||||
old "## The _() surrounding the string marks it as eligible for translation."
|
||||
new "## The _() surrounding the string marks it as eligible for translation."
|
||||
new "## 문자열을 _()로 둘러 쌓으면 씌우면 번역의 대상으로 표시됩니다."
|
||||
|
||||
# options.rpy:17
|
||||
old "Ren'Py 7 Default GUI"
|
||||
new "Ren'Py 7 Default GUI"
|
||||
new "렌파이 7 기본 GUI"
|
||||
|
||||
# options.rpy:20
|
||||
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
new "## 위에 주어진 제목이 주 메뉴 화면에 표시되는지 결정합니다. 제목을 숨기려면 이것을 False로 설정하십시오."
|
||||
|
||||
# options.rpy:26
|
||||
old "## The version of the game."
|
||||
new "## The version of the game."
|
||||
new "## 게임의 버전입니다."
|
||||
|
||||
# options.rpy:31
|
||||
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
|
||||
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
|
||||
new "## 게임의 about 스크린에 배치되는 텍스트입니다. 단락 사이에 빈 줄을 넣으려면 \\n\\n를 적으십시오."
|
||||
|
||||
# options.rpy:37
|
||||
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
new "## 배포판의 실행 파일과 디렉토리에 사용되는 게임의 약식 이름. 이것은 ASCII 전용이어야 하며 공백, 콜론 또는 세미콜론을 포함해서는 안 됩니다."
|
||||
|
||||
# options.rpy:44
|
||||
old "## Sounds and music"
|
||||
new "## Sounds and music"
|
||||
new "## 음악과 음향"
|
||||
|
||||
# options.rpy:46
|
||||
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
new "## 이 세 가지 변수는 기본적으로 플레이어에 표시되는 믹서를 제어합니다. 이들 중 하나를 False로 설정하면 해당 믹서가 숨겨집니다."
|
||||
|
||||
# options.rpy:55
|
||||
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
new "## 사용자가 음향 또는 음성 채널에서 테스트 사운드를 재생할 수 있게 하려면 아래 줄의 주석을 제거하고 이를 사용하여 재생할 샘플 사운드를 설정하십시오."
|
||||
|
||||
# options.rpy:62
|
||||
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
new "## 플레이어가 주 메뉴에 있을 때 재생할 오디오 파일을 설정하려면 다음 줄의 주석 처리를 제거하십시오. 이 파일은 중지되거나 다른 파일이 재생 될 때까지 계속 재생합니다."
|
||||
|
||||
# options.rpy:69
|
||||
old "## Transitions"
|
||||
new "## Transitions"
|
||||
new "## 번역"
|
||||
|
||||
# options.rpy:71
|
||||
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
new "## 이러한 변수는 특정 이벤트가 발생할 때 사용되는 전환을 설정합니다. 각 변수는 전환으로 설정해야 하며, 전환을 사용하지 말아야 한다는 것을 나타내려면 None으로 설정해야 합니다."
|
||||
|
||||
# options.rpy:75
|
||||
old "## Entering or exiting the game menu."
|
||||
new "## Entering or exiting the game menu."
|
||||
new "## 게임 메뉴에 진입하거나 나갑니다."
|
||||
|
||||
# options.rpy:81
|
||||
old "## A transition that is used after a game has been loaded."
|
||||
new "## A transition that is used after a game has been loaded."
|
||||
new "## 게임이 로드된 후 사용되는 전환입니다."
|
||||
|
||||
# options.rpy:86
|
||||
old "## Used when entering the main menu after the game has ended."
|
||||
new "## Used when entering the main menu after the game has ended."
|
||||
new "## 게임 종료 후 주 메뉴에 진입할 때 사용됩니다."
|
||||
|
||||
# options.rpy:91
|
||||
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
new "## 게임을 시작할 때 사용되는 전환을 설정하는 변수가 없습니다. 대신, 초기 장면을 표시한 후 with 문을 사용하십시오."
|
||||
|
||||
# options.rpy:96
|
||||
old "## Window management"
|
||||
new "## Window management"
|
||||
new "## 창 관리"
|
||||
|
||||
# options.rpy:98
|
||||
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
new "## 이것은 대사 창이 표시됐을 때 제어합니다. 만약 \"show\"면, 그것은 상항 표시됩니다. 만약 \"hide\"면, 그것은 대사가 주어질 때만 표시됩니다. 만약 \"auto\"면, 창은 장면(scene) 문 앞에 숨겨져 대화 상자가 표시되면 다시 표시됩니다."
|
||||
|
||||
# options.rpy:103
|
||||
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
new "## 게임이 시작된 후에는 \"window show\", \"window hide\", 그리고 \"window auto\" 문을 사용하여 변경할 수 있습니다."
|
||||
|
||||
# options.rpy:109
|
||||
old "## Transitions used to show and hide the dialogue window"
|
||||
new "## Transitions used to show and hide the dialogue window"
|
||||
new "## 대화 창을 표시하고 숨기는 데 사용되는 전환"
|
||||
|
||||
# options.rpy:115
|
||||
old "## Preference defaults"
|
||||
new "## Preference defaults"
|
||||
new "## 환경설정 기본값"
|
||||
|
||||
# options.rpy:117
|
||||
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
new "## 기본 글자 속도를 제어합니다. 기본적으로, 0은 즉시이며 다른 숫자는 초당 입력 할 문자 수입니다."
|
||||
|
||||
# options.rpy:123
|
||||
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
new "## 기본 auto-forward 지연 시간입니다. 숫자가 클수록 대기 시간이 길어지며, 0 ~ 30이 유효한 범위가 됩니다."
|
||||
|
||||
# options.rpy:129
|
||||
old "## Save directory"
|
||||
new "## Save directory"
|
||||
new "## 세이브 디렉토리"
|
||||
|
||||
# options.rpy:131
|
||||
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
new "## 렌파이는 이 게임에 대한 저장 파일을 플랫폼 별로 배치합니다. 세이브 파일들은 여기에 있습니다:"
|
||||
|
||||
# options.rpy:134
|
||||
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
new "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
new "## 윈도우즈: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
|
||||
# options.rpy:136
|
||||
old "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
new "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
new "## 매킨토시: $HOME/Library/RenPy/<config.save_directory>"
|
||||
|
||||
# options.rpy:138
|
||||
old "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
new "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
new "## 리눅스: $HOME/.renpy/<config.save_directory>"
|
||||
|
||||
# options.rpy:140
|
||||
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
new "## 이것은 일반적으로 변경해서는 안 되며, 항상 표현형식이 아닌 정확한 문자열이어야 합니다."
|
||||
|
||||
# options.rpy:146
|
||||
old "## Icon ########################################################################'"
|
||||
new "## Icon ########################################################################'"
|
||||
new "## 아이콘 #######################################################################'"
|
||||
|
||||
# options.rpy:148
|
||||
old "## The icon displayed on the taskbar or dock."
|
||||
new "## The icon displayed on the taskbar or dock."
|
||||
new "## 작업 표시 줄 또는 독에 표시되는 아이콘."
|
||||
|
||||
# options.rpy:153
|
||||
old "## Build configuration"
|
||||
new "## Build configuration"
|
||||
new "## 빌드 구성"
|
||||
|
||||
# options.rpy:155
|
||||
old "## This section controls how Ren'Py turns your project into distribution files."
|
||||
new "## This section controls how Ren'Py turns your project into distribution files."
|
||||
new "## 이 섹션은 렌파이가 프로젝트를 배포 파일로 만드는 방법을 제어합니다."
|
||||
|
||||
# options.rpy:160
|
||||
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
new "## 다음 함수는 파일 패턴을 사용합니다. 파일 패턴은 대/소문자를 구분하지 않으며, /의 유무와 관계없이 기본 디렉터리의 상대 경로와 일치합니다. 여러 패턴이 일치하면 첫 번째 패턴이 사용됩니다."
|
||||
|
||||
# options.rpy:165
|
||||
old "## In a pattern:"
|
||||
new "## In a pattern:"
|
||||
new "## 패턴 있음:"
|
||||
|
||||
# options.rpy:167
|
||||
old "## / is the directory separator."
|
||||
new "## / is the directory separator."
|
||||
new "## / 는 디렉토리 구분 기호입니다."
|
||||
|
||||
# options.rpy:169
|
||||
old "## * matches all characters, except the directory separator."
|
||||
new "## * matches all characters, except the directory separator."
|
||||
new "## * 는 디렉토리 구분자를 제외한 모든 문자와 일치합니다."
|
||||
|
||||
# options.rpy:171
|
||||
old "## ** matches all characters, including the directory separator."
|
||||
new "## ** matches all characters, including the directory separator."
|
||||
new "## ** 는 디렉토리 구분자를 포함해 모든 문자와 일치합니다."
|
||||
|
||||
# options.rpy:173
|
||||
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
new "## 예를 들어, \"*.txt\" 는 기본 디렉토리의 txt 파일들과 일치하고, \"game/**.ogg\" 는 게임 디렉토리 또는 그 서브 디렉토리의 ogg 파일들과 일치하며, \"**.psd\" 는 프로젝트에서 모든 곳의 psd 파일들과 일치합니다."
|
||||
|
||||
# options.rpy:177
|
||||
old "## Classify files as None to exclude them from the built distributions."
|
||||
new "## Classify files as None to exclude them from the built distributions."
|
||||
new "## 파일을 None으로 분류하여 배포판으로부터 제외하십시오."
|
||||
|
||||
# options.rpy:185
|
||||
old "## To archive files, classify them as 'archive'."
|
||||
new "## To archive files, classify them as 'archive'."
|
||||
new "## 파일을 아카이브하려면 'archive'로 분류하십시오."
|
||||
|
||||
# options.rpy:190
|
||||
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
new "## 파일들의 매칭 문서 패턴은 맥앱(Mac App) 빌드에서 중복되므로 app 및 zip 파일에 모두 나타납니다."
|
||||
|
||||
# options.rpy:196
|
||||
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
|
||||
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
|
||||
new "## 확장 파일을 다운로드하고 인앱 구매를 수행하려면 Google Play 라이센스 키가 필요합니다. Google Play 개발자 콘솔의 \"서비스 및 API\"페이지에서 확인할 수 있습니다."
|
||||
|
||||
# options.rpy:203
|
||||
old "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
new "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
new "## itch.io 프로젝트와 연관된 사용자 이름과 프로젝트 이름이며 슬래시로 구분됩니다."
|
||||
|
||||
|
||||
@@ -3,23 +3,23 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:9
|
||||
old "## Styles"
|
||||
new "## Styles"
|
||||
new "## 스타일"
|
||||
|
||||
# screens.rpy:87
|
||||
old "## In-game screens"
|
||||
new "## In-game screens"
|
||||
new "## 게임내 스크린"
|
||||
|
||||
# screens.rpy:91
|
||||
old "## Say screen"
|
||||
new "## Say screen"
|
||||
new "## Say 스크린"
|
||||
|
||||
# screens.rpy:93
|
||||
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
new "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
new "## Say 스크린은 플레이어에게 대사를 출력할 때 씁니다. 화자 who와 대사 what, 두 개의 매개변수를 받습니다. (화자 이름이 없으면 who는 None일 수 있음)"
|
||||
|
||||
# screens.rpy:98
|
||||
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
new "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
new "## 이 스크린은 id \"what\"을 가진 텍스트 디스플레이어블을 생성해야 합니다. (이 디스플레이어블은 렌파이의 대사 출력에 필요합니다.) id \"who\" 와 id \"window\" 디스플레이블이 존재할 경우 관련 스타일 속성이 적용됩니다."
|
||||
|
||||
# screens.rpy:102
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
@@ -27,15 +27,15 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:169
|
||||
old "## Input screen"
|
||||
new "## Input screen"
|
||||
new "## Input 스크린"
|
||||
|
||||
# screens.rpy:171
|
||||
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
new "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
new "## 플레이어 입력을 받는 renpy.input을 출력할 때 쓰이는 스크린입니다. prompt 매개변수를 통해 입력 지문을 표시할 수 있습니다."
|
||||
|
||||
# screens.rpy:174
|
||||
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
new "## 이 스크린은 id \"input\"을 가진 input 디스플레이어블을 생성해야 합니다."
|
||||
|
||||
# screens.rpy:177
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#input"
|
||||
@@ -43,11 +43,11 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:205
|
||||
old "## Choice screen"
|
||||
new "## Choice screen"
|
||||
new "## Choice 스크린"
|
||||
|
||||
# screens.rpy:207
|
||||
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
new "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
new "## menu 명령어로 생성된 게임내 선택지를 출력하는 스크린입니다. 한 개의 매개변수 items를 받고, 이는 선택지 내용(caption)과 선택지 결과(action)이 있는 오브젝트가 들어있는 리스트입니다."
|
||||
|
||||
# screens.rpy:211
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
@@ -55,15 +55,15 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:221
|
||||
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
|
||||
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
|
||||
new "## True일 경우 narrator 캐릭터를 통해 지문을 표시합니다. False일 경우 지문이 비활성화 선택지로 표시됩니다."
|
||||
|
||||
# screens.rpy:244
|
||||
old "## Quick Menu screen"
|
||||
new "## Quick Menu screen"
|
||||
new "## Quick Menu 스크린"
|
||||
|
||||
# screens.rpy:246
|
||||
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
new "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
new "## 퀵메뉴는 게임 외 메뉴 접근성을 높여주기 위해 게임 내에 표시됩니다."
|
||||
|
||||
# screens.rpy:261
|
||||
old "Back"
|
||||
@@ -79,7 +79,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:264
|
||||
old "Auto"
|
||||
new "자동저장"
|
||||
new "자동진행"
|
||||
|
||||
# screens.rpy:265
|
||||
old "Save"
|
||||
@@ -99,23 +99,23 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:271
|
||||
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
new "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
new "## 플레이어가 UI(스크린)을 일부러 숨기지 않는 한 퀵메뉴가 게임 내에 오버레이로 출력되게 합니다."
|
||||
|
||||
# screens.rpy:291
|
||||
old "## Navigation screen"
|
||||
new "## Navigation screen"
|
||||
new "## Navigation 스크린"
|
||||
|
||||
# screens.rpy:293
|
||||
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
new "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
new "## 이 스크린은 메인메뉴와 게임외 메뉴에 포함되어 다른 메뉴로 이동하거나 게임을 시작/종료할 수 있게 합니다."
|
||||
|
||||
# screens.rpy:308
|
||||
old "Start"
|
||||
new "Start"
|
||||
new "시작하기"
|
||||
|
||||
# screens.rpy:316
|
||||
old "Load"
|
||||
new "Load"
|
||||
new "로드"
|
||||
|
||||
# screens.rpy:318
|
||||
old "Preferences"
|
||||
@@ -123,7 +123,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:322
|
||||
old "End Replay"
|
||||
new "End Replay"
|
||||
new "리플레이 끝내기"
|
||||
|
||||
# screens.rpy:326
|
||||
old "Main Menu"
|
||||
@@ -135,7 +135,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:332
|
||||
old "## Help isn't necessary or relevant to mobile devices."
|
||||
new "## Help isn't necessary or relevant to mobile devices."
|
||||
new "## 도움말 메뉴는 모바일 디바이스와 맞지 않아 불필요합니다."
|
||||
|
||||
# screens.rpy:333
|
||||
old "Help"
|
||||
@@ -143,7 +143,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:335
|
||||
old "## The quit button is banned on iOS and unnecessary on Android."
|
||||
new "## The quit button is banned on iOS and unnecessary on Android."
|
||||
new "## 종료 버튼은 iOS 규정에 어긋나고 안드로이드에는 불필요합니다."
|
||||
|
||||
# screens.rpy:336
|
||||
old "Quit"
|
||||
@@ -151,11 +151,11 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:350
|
||||
old "## Main Menu screen"
|
||||
new "## Main Menu screen"
|
||||
new "## Main Menu 스크린"
|
||||
|
||||
# screens.rpy:352
|
||||
old "## Used to display the main menu when Ren'Py starts."
|
||||
new "## Used to display the main menu when Ren'Py starts."
|
||||
new "## 렌파이가 시작할 때 메인메뉴를 출력합니다."
|
||||
|
||||
# screens.rpy:354
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
@@ -163,19 +163,19 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:369
|
||||
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
new "## use 명령어로 스크린 내에 다른 스크린을 불러옵니다. 메인 메뉴 스크린의 내용물은 navigation 스크린에 있습니다."
|
||||
|
||||
# screens.rpy:413
|
||||
old "## Game Menu screen"
|
||||
new "## Game Menu screen"
|
||||
new "## Game Menu 스크린"
|
||||
|
||||
# screens.rpy:415
|
||||
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
new "## 게임 메뉴의 기본 틀입니다. 매개변수 title로 스크린 제목을 정하고, 배경, 제목, 그리고 navigation 스크린을 출력합니다."
|
||||
|
||||
# screens.rpy:418
|
||||
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
new "## scroll 매개변수는, None, \"viewport\" 혹은 \"vpgrid\" 중 하나여야 합니다. transclude 명령어를 통해 다른 스크린을 이 스크린 내부에 불러옵니다."
|
||||
|
||||
# screens.rpy:476
|
||||
old "Return"
|
||||
@@ -183,43 +183,43 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:539
|
||||
old "## About screen"
|
||||
new "## About screen"
|
||||
new "## About 스크린"
|
||||
|
||||
# screens.rpy:541
|
||||
old "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
new "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
new "## 이 스크린은 게임과 렌파이 엔진 크레딧과 저작권 정보를 표시합니다."
|
||||
|
||||
# screens.rpy:544
|
||||
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
new "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
new "## 특별할 것이 없으므로 스크린을 새로 커스터마이징하여 만드는 예제이기도 합니다."
|
||||
|
||||
# screens.rpy:551
|
||||
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
new "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
new "## 이 use 명령어로 game_menu 스크린을 이 스크린 내에 불러옵니다. use 명령어 하위블럭(vbox 내용)은 game_menu 스크린 내 transclude 명령어가 있는 곳에 다시 불려집니다."
|
||||
|
||||
# screens.rpy:561
|
||||
# screens.rpy:561
|
||||
old "Version [config.version!t]\n"
|
||||
new "Version [config.version!t]\n"
|
||||
new "버젼 [config.version!t]\n"
|
||||
|
||||
# screens.rpy:563
|
||||
old "## gui.about is usually set in options.rpy."
|
||||
new "## gui.about is usually set in options.rpy."
|
||||
new "## gui.about 의 내용은 보통 options.rpy에 있습니다."
|
||||
|
||||
# screens.rpy:567
|
||||
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
new "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
new "{a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only] 으로 만들어진 게임.\n\n[renpy.license!t]"
|
||||
|
||||
# screens.rpy:570
|
||||
old "## This is redefined in options.rpy to add text to the about screen."
|
||||
new "## This is redefined in options.rpy to add text to the about screen."
|
||||
new "## options.rpy에서 규정된 내용이 about 스크린에 추가됩니다."
|
||||
|
||||
# screens.rpy:582
|
||||
old "## Load and Save screens"
|
||||
new "## Load and Save screens"
|
||||
new "## Load and Save 스크린"
|
||||
|
||||
# screens.rpy:584
|
||||
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
|
||||
new "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
|
||||
new "## 이 스크린은 세이브/로드에 쓰입니다. 거의 동일하기 때문에, file_slots 스크린을 불러와서 씁니다."
|
||||
|
||||
# screens.rpy:588
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
|
||||
@@ -227,23 +227,23 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:607
|
||||
old "Page {}"
|
||||
new "Page {}"
|
||||
new "{} 페이지"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Automatic saves"
|
||||
new "Automatic saves"
|
||||
new "자동 세이브"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Quick saves"
|
||||
new "Quick saves"
|
||||
new "퀵세이브"
|
||||
|
||||
# screens.rpy:613
|
||||
old "## This ensures the input will get the enter event before any of the buttons do."
|
||||
new "## This ensures the input will get the enter event before any of the buttons do."
|
||||
new "## input (페이지 제목을 플레이어가 수정할 수 있음)이 세이브/로드 버튼보다 먼저 엔터에 반응하도록 합니다."
|
||||
|
||||
# screens.rpy:629
|
||||
old "## The grid of file slots."
|
||||
new "## The grid of file slots."
|
||||
new "## 파일 슬롯 그리드."
|
||||
|
||||
# screens.rpy:649
|
||||
old "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
@@ -251,11 +251,11 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:649
|
||||
old "empty slot"
|
||||
new "empty slot"
|
||||
new "빈 슬롯"
|
||||
|
||||
# screens.rpy:657
|
||||
old "## Buttons to access other pages."
|
||||
new "## Buttons to access other pages."
|
||||
new "## 페이지 이동 버튼."
|
||||
|
||||
# screens.rpy:666
|
||||
old "<"
|
||||
@@ -263,11 +263,11 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:668
|
||||
old "{#auto_page}A"
|
||||
new "{#auto_page}A"
|
||||
new "{#auto_page}자동"
|
||||
|
||||
# screens.rpy:670
|
||||
old "{#quick_page}Q"
|
||||
new "{#quick_page}Q"
|
||||
new "{#quick_page}퀵"
|
||||
|
||||
# screens.rpy:676
|
||||
old ">"
|
||||
@@ -275,11 +275,11 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:711
|
||||
old "## Preferences screen"
|
||||
new "## Preferences screen"
|
||||
new "## Preferences 스크린"
|
||||
|
||||
# screens.rpy:713
|
||||
old "## The preferences screen allows the player to configure the game to better suit themselves."
|
||||
new "## The preferences screen allows the player to configure the game to better suit themselves."
|
||||
new "## Preferences 스크린에서는 각종 환경설정을 플레이어가 지정할 수 있습니다."
|
||||
|
||||
# screens.rpy:716
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
|
||||
@@ -299,35 +299,35 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:744
|
||||
old "Rollback Side"
|
||||
new "Rollback Side"
|
||||
new "롤백 클릭 옵션"
|
||||
|
||||
# screens.rpy:745
|
||||
old "Disable"
|
||||
new "Disable"
|
||||
new "비활성화"
|
||||
|
||||
# screens.rpy:746
|
||||
old "Left"
|
||||
new "Left"
|
||||
new "화면 왼쪽 클릭"
|
||||
|
||||
# screens.rpy:747
|
||||
old "Right"
|
||||
new "Right"
|
||||
new "화면 오른쪽 클릭"
|
||||
|
||||
# screens.rpy:752
|
||||
old "Unseen Text"
|
||||
new "Unseen Text"
|
||||
new "읽지 않은 텍스트까지 모두 스킵"
|
||||
|
||||
# screens.rpy:753
|
||||
old "After Choices"
|
||||
new "선택지 이후 스킵"
|
||||
new "선택지 이후에도 스킵"
|
||||
|
||||
# screens.rpy:754
|
||||
old "Transitions"
|
||||
new "화면 전환 효과"
|
||||
new "화면 전환 효과를 모두 스킵"
|
||||
|
||||
# screens.rpy:756
|
||||
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
new "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
new "## \"radio_pref\" 나 \"check_pref\" 를 추가하여 그 외에도 환경설정 항목을 추가할 수 있습니다."
|
||||
|
||||
# screens.rpy:767
|
||||
old "Text Speed"
|
||||
@@ -339,7 +339,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:778
|
||||
old "Music Volume"
|
||||
new "배경음 크기"
|
||||
new "배경음악 크기"
|
||||
|
||||
# screens.rpy:785
|
||||
old "Sound Volume"
|
||||
@@ -355,15 +355,15 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:806
|
||||
old "Mute All"
|
||||
new "Mute All"
|
||||
new "모두 음소거"
|
||||
|
||||
# screens.rpy:882
|
||||
old "## History screen"
|
||||
new "## History screen"
|
||||
new "## History 스크린"
|
||||
|
||||
# screens.rpy:884
|
||||
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
new "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
new "## 지난 대사록을 출력합니다. _history_list 에 저장된 대사 기록을 확인합니다."
|
||||
|
||||
# screens.rpy:888
|
||||
old "## https://www.renpy.org/doc/html/history.html"
|
||||
@@ -371,39 +371,39 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:894
|
||||
old "## Avoid predicting this screen, as it can be very large."
|
||||
new "## Avoid predicting this screen, as it can be very large."
|
||||
new "## 이 스크린은 내용이 아주 많을 수 있으므로 prediction을 끕니다."
|
||||
|
||||
# screens.rpy:905
|
||||
old "## This lays things out properly if history_height is None."
|
||||
new "## This lays things out properly if history_height is None."
|
||||
new "## history_height 이 None일 경우 레이아웃이 틀어지지 않게 합니다."
|
||||
|
||||
# screens.rpy:914
|
||||
old "## Take the color of the who text from the Character, if set."
|
||||
new "## Take the color of the who text from the Character, if set."
|
||||
new "## 화자 Character에 화자 색깔이 지정되어 있으면 불러옵니다."
|
||||
|
||||
# screens.rpy:921
|
||||
old "The dialogue history is empty."
|
||||
new "The dialogue history is empty."
|
||||
new "대사가 없습니다."
|
||||
|
||||
# screens.rpy:965
|
||||
old "## Help screen"
|
||||
new "## Help screen"
|
||||
new "## Help 스크린"
|
||||
|
||||
# screens.rpy:967
|
||||
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
new "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
new "## 입력장치의 기능을 설명합니다. 각 입력장치별 설정은 keyboard_help, mouse_help, gamepad_help 스크린을 각각 불러와서 출력합니다."
|
||||
|
||||
# screens.rpy:986
|
||||
old "Keyboard"
|
||||
new "Keyboard"
|
||||
new "키보드"
|
||||
|
||||
# screens.rpy:987
|
||||
old "Mouse"
|
||||
new "Mouse"
|
||||
new "마우스"
|
||||
|
||||
# screens.rpy:990
|
||||
old "Gamepad"
|
||||
new "Gamepad"
|
||||
new "게임패드"
|
||||
|
||||
# screens.rpy:1003
|
||||
old "Enter"
|
||||
@@ -411,7 +411,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1004
|
||||
old "Advances dialogue and activates the interface."
|
||||
new "Advances dialogue and activates the interface."
|
||||
new "대사 진행 및 UI (선택지 포함) 선택."
|
||||
|
||||
# screens.rpy:1007
|
||||
old "Space"
|
||||
@@ -419,23 +419,23 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1008
|
||||
old "Advances dialogue without selecting choices."
|
||||
new "Advances dialogue without selecting choices."
|
||||
new "대사를 진행하되 선택지는 선택하지 않음."
|
||||
|
||||
# screens.rpy:1011
|
||||
old "Arrow Keys"
|
||||
new "Arrow Keys"
|
||||
new "화살표 키"
|
||||
|
||||
# screens.rpy:1012
|
||||
old "Navigate the interface."
|
||||
new "Navigate the interface."
|
||||
new "UI 이동."
|
||||
|
||||
# screens.rpy:1015
|
||||
old "Escape"
|
||||
new "Escape"
|
||||
new "Esc"
|
||||
|
||||
# screens.rpy:1016
|
||||
old "Accesses the game menu."
|
||||
new "Accesses the game menu."
|
||||
new "게임 메뉴 불러옴."
|
||||
|
||||
# screens.rpy:1019
|
||||
old "Ctrl"
|
||||
@@ -443,7 +443,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1020
|
||||
old "Skips dialogue while held down."
|
||||
new "Skips dialogue while held down."
|
||||
new "누르고 있는 동안 대사를 스킵."
|
||||
|
||||
# screens.rpy:1023
|
||||
old "Tab"
|
||||
@@ -451,7 +451,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1024
|
||||
old "Toggles dialogue skipping."
|
||||
new "Toggles dialogue skipping."
|
||||
new "대사 스킵 토글."
|
||||
|
||||
# screens.rpy:1027
|
||||
old "Page Up"
|
||||
@@ -459,7 +459,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1028
|
||||
old "Rolls back to earlier dialogue."
|
||||
new "Rolls back to earlier dialogue."
|
||||
new "이전 대사로 롤백."
|
||||
|
||||
# screens.rpy:1031
|
||||
old "Page Down"
|
||||
@@ -467,91 +467,91 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1032
|
||||
old "Rolls forward to later dialogue."
|
||||
new "Rolls forward to later dialogue."
|
||||
new "이후 대사로 롤포워드."
|
||||
|
||||
# screens.rpy:1036
|
||||
old "Hides the user interface."
|
||||
new "Hides the user interface."
|
||||
new "UI를 숨김."
|
||||
|
||||
# screens.rpy:1040
|
||||
old "Takes a screenshot."
|
||||
new "Takes a screenshot."
|
||||
new "스크린샷 저장."
|
||||
|
||||
# screens.rpy:1044
|
||||
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
new "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
new "{a=https://www.renpy.org/l/voicing}대사 읽어주기 기능{/a} 토글."
|
||||
|
||||
# screens.rpy:1050
|
||||
old "Left Click"
|
||||
new "Left Click"
|
||||
new "클릭"
|
||||
|
||||
# screens.rpy:1054
|
||||
old "Middle Click"
|
||||
new "Middle Click"
|
||||
new "가운데 버튼이나 휠버튼 클릭"
|
||||
|
||||
# screens.rpy:1058
|
||||
old "Right Click"
|
||||
new "Right Click"
|
||||
new "우클릭"
|
||||
|
||||
# screens.rpy:1062
|
||||
old "Mouse Wheel Up\nClick Rollback Side"
|
||||
new "Mouse Wheel Up\nClick Rollback Side"
|
||||
new "휠 위로\n롤백 클릭"
|
||||
|
||||
# screens.rpy:1066
|
||||
old "Mouse Wheel Down"
|
||||
new "Mouse Wheel Down"
|
||||
new "휠 아래로"
|
||||
|
||||
# screens.rpy:1073
|
||||
old "Right Trigger\nA/Bottom Button"
|
||||
new "Right Trigger\nA/Bottom Button"
|
||||
new "오른쪽 트리거(RT)\nA버튼/아래 버튼"
|
||||
|
||||
# screens.rpy:1074
|
||||
old "Advance dialogue and activates the interface."
|
||||
new "Advance dialogue and activates the interface."
|
||||
new "대사 진행 및 UI (선택지 포함) 선택."
|
||||
|
||||
# screens.rpy:1078
|
||||
old "Roll back to earlier dialogue."
|
||||
new "Roll back to earlier dialogue."
|
||||
new "이전 대사로 롤백."
|
||||
|
||||
# screens.rpy:1081
|
||||
old "Right Shoulder"
|
||||
new "Right Shoulder"
|
||||
new "오른쪽 범퍼(RB)"
|
||||
|
||||
# screens.rpy:1082
|
||||
old "Roll forward to later dialogue."
|
||||
new "Roll forward to later dialogue."
|
||||
new "이후 대사로 롤포워드."
|
||||
|
||||
# screens.rpy:1085
|
||||
old "D-Pad, Sticks"
|
||||
new "D-Pad, Sticks"
|
||||
new "D-Pad, 아날로그 스틱"
|
||||
|
||||
# screens.rpy:1089
|
||||
old "Start, Guide"
|
||||
new "Start, Guide"
|
||||
new "스타스 버튼/가이드 버튼"
|
||||
|
||||
# screens.rpy:1090
|
||||
old "Access the game menu."
|
||||
new "Access the game menu."
|
||||
new "게임 메뉴 불러옴."
|
||||
|
||||
# screens.rpy:1093
|
||||
old "Y/Top Button"
|
||||
new "Y/Top Button"
|
||||
new "Y버튼/위 버튼"
|
||||
|
||||
# screens.rpy:1096
|
||||
old "Calibrate"
|
||||
new "Calibrate"
|
||||
new "조정"
|
||||
|
||||
# screens.rpy:1124
|
||||
old "## Additional screens"
|
||||
new "## Additional screens"
|
||||
new "## 그 외 스크린"
|
||||
|
||||
# screens.rpy:1128
|
||||
old "## Confirm screen"
|
||||
new "## Confirm screen"
|
||||
new "## Confirm 스크린"
|
||||
|
||||
# screens.rpy:1130
|
||||
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
new "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
new "## 게임 입력 관련 예/아니오 질문을 플레이어에게 할 때 이 스크린을 표시합니다."
|
||||
|
||||
# screens.rpy:1133
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
@@ -559,7 +559,7 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1137
|
||||
old "## Ensure other screens do not get input while this screen is displayed."
|
||||
new "## Ensure other screens do not get input while this screen is displayed."
|
||||
new "## 이 스크린이 출력 중일 때 다른 스크린과 상호작용할 수 없게 합니다."
|
||||
|
||||
# screens.rpy:1161
|
||||
old "Yes"
|
||||
@@ -571,15 +571,15 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1164
|
||||
old "## Right-click and escape answer \"no\"."
|
||||
new "## Right-click and escape answer \"no\"."
|
||||
new "## 우클릭과 esc는 '아니오'를 입력하는 것과 같습니다."
|
||||
|
||||
# screens.rpy:1191
|
||||
old "## Skip indicator screen"
|
||||
new "## Skip indicator screen"
|
||||
new "## Skip indicator 스크린"
|
||||
|
||||
# screens.rpy:1193
|
||||
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
new "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
new "## Skip_indicator 스크린은 스킵 중일 때 \"스킵 중\"을 표시하기 위해 출력됩니다."
|
||||
|
||||
# screens.rpy:1196
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
@@ -587,19 +587,19 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1208
|
||||
old "Skipping"
|
||||
new "Skipping"
|
||||
new "스킵 중"
|
||||
|
||||
# screens.rpy:1215
|
||||
old "## This transform is used to blink the arrows one after another."
|
||||
new "## This transform is used to blink the arrows one after another."
|
||||
new "## 이 transform으로 화살표를 순서대로 페이드인/페이드아웃합니다."
|
||||
|
||||
# screens.rpy:1247
|
||||
old "## Notify screen"
|
||||
new "## Notify screen"
|
||||
new "## Notify 스크린"
|
||||
|
||||
# screens.rpy:1249
|
||||
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
new "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
new "## Notify 스크린으로 플레이어에게 메시지를 출력합니다. (예를 들어 '퀵세이브 완료'나 '스크린샷 저장 완료')"
|
||||
|
||||
# screens.rpy:1252
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
@@ -607,11 +607,11 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1286
|
||||
old "## NVL screen"
|
||||
new "## NVL screen"
|
||||
new "## NVL 스크린"
|
||||
|
||||
# screens.rpy:1288
|
||||
old "## This screen is used for NVL-mode dialogue and menus."
|
||||
new "## This screen is used for NVL-mode dialogue and menus."
|
||||
new "## NVL모드 대사와 선택지를 출력합니다."
|
||||
|
||||
# screens.rpy:1290
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#nvl"
|
||||
@@ -619,25 +619,25 @@ translate korean strings:
|
||||
|
||||
# screens.rpy:1301
|
||||
old "## Displays dialogue in either a vpgrid or the vbox."
|
||||
new "## Displays dialogue in either a vpgrid or the vbox."
|
||||
new "## vpgrid나 vbox 내에 대사를 출력합니다."
|
||||
|
||||
# screens.rpy:1314
|
||||
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
|
||||
new "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
|
||||
new "## 선택지가 있을 경우, 선택지 출력. config.narrator_menu가 True일 경우 선택지가 비정상적으로 출력될 수 있습니다. (디폴트는 True입니다.)"
|
||||
|
||||
# screens.rpy:1344
|
||||
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
new "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
new "## 동시에 출력될 수 있는 NVL 대사의 최대치를 조정합니다."
|
||||
|
||||
# screens.rpy:1406
|
||||
old "## Mobile Variants"
|
||||
new "## Mobile Variants"
|
||||
new "## 모바일 버젼"
|
||||
|
||||
# screens.rpy:1413
|
||||
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
|
||||
new "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
|
||||
new "## 마우스가 없고 화면이 작을 가능성이 높으므로, 퀵메뉴 버튼의 크기를 키우고 가짓수를 줄입니다."
|
||||
|
||||
# screens.rpy:1429
|
||||
old "Menu"
|
||||
new "Menu"
|
||||
new "메뉴"
|
||||
|
||||
|
||||
@@ -0,0 +1,814 @@
|
||||
translate malay strings:
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Monday"
|
||||
new "{#weekday}Isnin"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Tuesday"
|
||||
new "{#weekday}Selasa"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Wednesday"
|
||||
new "{#weekday}Rabu"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Thursday"
|
||||
new "{#weekday}Khamis"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Friday"
|
||||
new "{#weekday}Jumaat"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Saturday"
|
||||
new "{#weekday}Sabtu"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Sunday"
|
||||
new "{#weekday}Ahad"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Mon"
|
||||
new "{#weekday_short}Isn"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Tue"
|
||||
new "{#weekday_short}Sel"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Wed"
|
||||
new "{#weekday_short}Rab"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Thu"
|
||||
new "{#weekday_short}Kha"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Fri"
|
||||
new "{#weekday_short}Jum"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sat"
|
||||
new "{#weekday_short}Sab"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sun"
|
||||
new "{#weekday_short}Aha"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}January"
|
||||
new "{#month}Januari"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}February"
|
||||
new "{#month}Februari"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}March"
|
||||
new "{#month}Mac"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}April"
|
||||
new "{#month}April"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}May"
|
||||
new "{#month}Mei"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}June"
|
||||
new "{#month}Jun"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}July"
|
||||
new "{#month}Julai"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}August"
|
||||
new "{#month}Ogos"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}September"
|
||||
new "{#month}September"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}October"
|
||||
new "{#month}Oktober"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}November"
|
||||
new "{#month}November"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}December"
|
||||
new "{#month}Disember"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jan"
|
||||
new "{#month_short}Jan"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Feb"
|
||||
new "{#month_short}Feb"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Mar"
|
||||
new "{#month_short}Mac"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Apr"
|
||||
new "{#month_short}Apr"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}May"
|
||||
new "{#month_short}Mei"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jun"
|
||||
new "{#month_short}Jun"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jul"
|
||||
new "{#month_short}Jul"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Aug"
|
||||
new "{#month_short}Ogo"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Sep"
|
||||
new "{#month_short}Sep"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Oct"
|
||||
new "{#month_short}Okt"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Nov"
|
||||
new "{#month_short}Nov"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Dec"
|
||||
new "{#month_short}Dis"
|
||||
|
||||
# 00action_file.rpy:237
|
||||
old "%b %d, %H:%M"
|
||||
new "%d %b, %H:%M"
|
||||
|
||||
# 00action_file.rpy:345
|
||||
old "Save slot %s: [text]"
|
||||
new "Simpan slot %s: [text]"
|
||||
|
||||
# 00action_file.rpy:421
|
||||
old "Load slot %s: [text]"
|
||||
new "Muatkan slot %s: [text]"
|
||||
|
||||
# 00action_file.rpy:466
|
||||
old "Delete slot [text]"
|
||||
new "Padam slot [text]"
|
||||
|
||||
# 00action_file.rpy:546
|
||||
old "File page auto"
|
||||
new "Halaman fail auto"
|
||||
|
||||
# 00action_file.rpy:548
|
||||
old "File page quick"
|
||||
new "Halaman fail cepat"
|
||||
|
||||
# 00action_file.rpy:550
|
||||
old "File page [text]"
|
||||
new "Halaman fail [text]"
|
||||
|
||||
# 00action_file.rpy:740
|
||||
old "Next file page."
|
||||
new "Halaman fail seterusnya."
|
||||
|
||||
# 00action_file.rpy:804
|
||||
old "Previous file page."
|
||||
new "Halaman fail sebelumnya."
|
||||
|
||||
# 00action_file.rpy:865
|
||||
old "Quick save complete."
|
||||
new "Simpan cepat selesai."
|
||||
|
||||
# 00action_file.rpy:883
|
||||
old "Quick save."
|
||||
new "Simpan cepat."
|
||||
|
||||
# 00action_file.rpy:902
|
||||
old "Quick load."
|
||||
new "Muat cepat."
|
||||
|
||||
# 00action_other.rpy:355
|
||||
old "Language [text]"
|
||||
new "Bahasa [text]"
|
||||
|
||||
# 00director.rpy:708
|
||||
old "The interactive director is not enabled here."
|
||||
new "Pengarah interaktif tidak dibolehkan di sini."
|
||||
|
||||
# 00director.rpy:1478
|
||||
old "⬆"
|
||||
new "⬆"
|
||||
|
||||
# 00director.rpy:1484
|
||||
old "⬇"
|
||||
new "⬇"
|
||||
|
||||
# 00director.rpy:1548
|
||||
old "Done"
|
||||
new "Selesai"
|
||||
|
||||
# 00director.rpy:1558
|
||||
old "(statement)"
|
||||
new "(kenyataan)"
|
||||
|
||||
# 00director.rpy:1559
|
||||
old "(tag)"
|
||||
new "(tag)"
|
||||
|
||||
# 00director.rpy:1560
|
||||
old "(attributes)"
|
||||
new "(atribut)"
|
||||
|
||||
# 00director.rpy:1561
|
||||
old "(transform)"
|
||||
new "(transformasi)"
|
||||
|
||||
# 00director.rpy:1586
|
||||
old "(transition)"
|
||||
new "(peralihan)"
|
||||
|
||||
# 00director.rpy:1598
|
||||
old "(channel)"
|
||||
new "(saluran)"
|
||||
|
||||
# 00director.rpy:1599
|
||||
old "(filename)"
|
||||
new "(nama fail)"
|
||||
|
||||
# 00director.rpy:1628
|
||||
old "Change"
|
||||
new "Tukar"
|
||||
|
||||
# 00director.rpy:1630
|
||||
old "Add"
|
||||
new "Tambah"
|
||||
|
||||
# 00director.rpy:1633
|
||||
old "Cancel"
|
||||
new "Batal"
|
||||
|
||||
# 00director.rpy:1636
|
||||
old "Remove"
|
||||
new "Buang"
|
||||
|
||||
# 00director.rpy:1671
|
||||
old "Statement:"
|
||||
new "Kenyataan:"
|
||||
|
||||
# 00director.rpy:1692
|
||||
old "Tag:"
|
||||
new "Tag:"
|
||||
|
||||
# 00director.rpy:1708
|
||||
old "Attributes:"
|
||||
new "Atribut:"
|
||||
|
||||
# 00director.rpy:1726
|
||||
old "Transforms:"
|
||||
new "Transformasi:"
|
||||
|
||||
# 00director.rpy:1745
|
||||
old "Behind:"
|
||||
new "Belakang:"
|
||||
|
||||
# 00director.rpy:1764
|
||||
old "Transition:"
|
||||
new "Peralihan"
|
||||
|
||||
# 00director.rpy:1782
|
||||
old "Channel:"
|
||||
new "Saluran:"
|
||||
|
||||
# 00director.rpy:1800
|
||||
old "Audio Filename:"
|
||||
new "Nama Fail Audio:"
|
||||
|
||||
# 00gui.rpy:370
|
||||
old "Are you sure?"
|
||||
new "Adakah anda pasti?"
|
||||
|
||||
# 00gui.rpy:371
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "Adakah anda ingin memadam simpanan ini?"
|
||||
|
||||
# 00gui.rpy:372
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "Adakah anda ingin menulis ganti simpanan anda?"
|
||||
|
||||
# 00gui.rpy:373
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "Pemuatan akan menghilangkan kemajuan yang belum disimpan.\nAdakah anda ingin memuatkan simpanan lain?"
|
||||
|
||||
# 00gui.rpy:374
|
||||
old "Are you sure you want to quit?"
|
||||
new "Adakah anda ingin keluar?"
|
||||
|
||||
# 00gui.rpy:375
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "Adakah anda pasti anda ingin kembali ke menu utama?\nAnda akan kehilangan kemajuan yang belum disimpan."
|
||||
|
||||
# 00gui.rpy:376
|
||||
old "Are you sure you want to end the replay?"
|
||||
new "Adakah anda ingin menamatkan ulang tayang ini?"
|
||||
|
||||
# 00gui.rpy:377
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "Adakah anda ingin memulakan langkauan?"
|
||||
|
||||
# 00gui.rpy:378
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "Adakah anda ingin melangkau ke pilihan seterusnya?"
|
||||
|
||||
# 00gui.rpy:379
|
||||
old "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
new "Adakah anda ingin melangkau dialog yang belum dilihat sehingga ke pilihan seterusnya?"
|
||||
|
||||
# 00keymap.rpy:258
|
||||
old "Failed to save screenshot as %s."
|
||||
new "Gagal menyimpan tangkap skrin sebagai %s."
|
||||
|
||||
# 00keymap.rpy:270
|
||||
old "Saved screenshot as %s."
|
||||
new "Tangkap skrin disimpan sebagai %s."
|
||||
|
||||
# 00library.rpy:146
|
||||
old "Self-voicing disabled."
|
||||
new "Penyuaraan sendiri dilumpuhkan."
|
||||
|
||||
# 00library.rpy:147
|
||||
old "Clipboard voicing enabled. "
|
||||
new "Penyuaraan papan keratan dibolehkan. "
|
||||
|
||||
# 00library.rpy:148
|
||||
old "Self-voicing enabled. "
|
||||
new "Penyuaraan sendiri dibolehkan. "
|
||||
|
||||
# 00library.rpy:150
|
||||
old "bar"
|
||||
new "bar"
|
||||
|
||||
# 00library.rpy:151
|
||||
old "selected"
|
||||
new "dipilih"
|
||||
|
||||
# 00library.rpy:152
|
||||
old "viewport"
|
||||
new "port pandang"
|
||||
|
||||
# 00library.rpy:153
|
||||
old "horizontal scroll"
|
||||
new "tatal melintang"
|
||||
|
||||
# 00library.rpy:154
|
||||
old "vertical scroll"
|
||||
new "tatal menegak"
|
||||
|
||||
# 00library.rpy:155
|
||||
old "activate"
|
||||
new "aktifkan"
|
||||
|
||||
# 00library.rpy:156
|
||||
old "deactivate"
|
||||
new "nyahaktifkan"
|
||||
|
||||
# 00library.rpy:157
|
||||
old "increase"
|
||||
new "naikkan"
|
||||
|
||||
# 00library.rpy:158
|
||||
old "decrease"
|
||||
new "turunkan"
|
||||
|
||||
# 00library.rpy:193
|
||||
old "Skip Mode"
|
||||
new "Mod Langkau"
|
||||
|
||||
# 00library.rpy:279
|
||||
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
new "Atur cara ini mengandungi perisian bebas di bawah beberapa lesen yang berbeza, termasuklah Lesen MIT dan Lesen Awam Am Lemah GNU. Senarai lengkap perisian, termasuk pautan ke kod sumber penuh, boleh dijumpai {a=https://www.renpy.org/l/license}di sini{/a}."
|
||||
|
||||
# 00preferences.rpy:207
|
||||
old "display"
|
||||
new "paparan"
|
||||
|
||||
# 00preferences.rpy:219
|
||||
old "transitions"
|
||||
new "peralihan"
|
||||
|
||||
# 00preferences.rpy:228
|
||||
old "skip transitions"
|
||||
new "langkau peralihan"
|
||||
|
||||
# 00preferences.rpy:230
|
||||
old "video sprites"
|
||||
new "peperi video"
|
||||
|
||||
# 00preferences.rpy:239
|
||||
old "show empty window"
|
||||
new "tunjukkan tetingkap kosong"
|
||||
|
||||
# 00preferences.rpy:248
|
||||
old "text speed"
|
||||
new "kelajuan tulisan"
|
||||
|
||||
# 00preferences.rpy:256
|
||||
old "joystick"
|
||||
new "kayu bedik"
|
||||
|
||||
# 00preferences.rpy:256
|
||||
old "joystick..."
|
||||
new "kayu bedik..."
|
||||
|
||||
# 00preferences.rpy:263
|
||||
old "skip"
|
||||
new "langkau"
|
||||
|
||||
# 00preferences.rpy:266
|
||||
old "skip unseen [text]"
|
||||
new "langkau [text] belum dilihat"
|
||||
|
||||
# 00preferences.rpy:271
|
||||
old "skip unseen text"
|
||||
new "langkau tulisan belum dilihat"
|
||||
|
||||
# 00preferences.rpy:273
|
||||
old "begin skipping"
|
||||
new "mula melangkau"
|
||||
|
||||
# 00preferences.rpy:277
|
||||
old "after choices"
|
||||
new "selepas pilihan"
|
||||
|
||||
# 00preferences.rpy:284
|
||||
old "skip after choices"
|
||||
new "langkau selepas pilihan"
|
||||
|
||||
# 00preferences.rpy:286
|
||||
old "auto-forward time"
|
||||
new "masa untuk gerak sendiri"
|
||||
|
||||
# 00preferences.rpy:300
|
||||
old "auto-forward"
|
||||
new "gerak sendiri"
|
||||
|
||||
# 00preferences.rpy:307
|
||||
old "Auto forward"
|
||||
new "Gerak sendiri"
|
||||
|
||||
# 00preferences.rpy:310
|
||||
old "auto-forward after click"
|
||||
new "gerak sendiri selepas klik"
|
||||
|
||||
# 00preferences.rpy:319
|
||||
old "automatic move"
|
||||
new "tetikus gerak sendiri"
|
||||
|
||||
# 00preferences.rpy:328
|
||||
old "wait for voice"
|
||||
new "tunggu suara"
|
||||
|
||||
# 00preferences.rpy:337
|
||||
old "voice sustain"
|
||||
new "biarkan suara"
|
||||
|
||||
# 00preferences.rpy:346
|
||||
old "self voicing"
|
||||
new "penyuaraan sendiri"
|
||||
|
||||
# 00preferences.rpy:355
|
||||
old "clipboard voicing"
|
||||
new "penyuaraan papan keratan"
|
||||
|
||||
# 00preferences.rpy:364
|
||||
old "debug voicing"
|
||||
new "penyuaraan nyahpepijat"
|
||||
|
||||
# 00preferences.rpy:373
|
||||
old "emphasize audio"
|
||||
new "menekankan audio"
|
||||
|
||||
# 00preferences.rpy:382
|
||||
old "rollback side"
|
||||
new "sisi untuk undur"
|
||||
|
||||
# 00preferences.rpy:392
|
||||
old "gl powersave"
|
||||
new "jimat tenaga gl"
|
||||
|
||||
# 00preferences.rpy:398
|
||||
old "gl framerate"
|
||||
new "kadar bingkai gl"
|
||||
|
||||
# 00preferences.rpy:401
|
||||
old "gl tearing"
|
||||
new "pengoyakan gl"
|
||||
|
||||
# 00preferences.rpy:413
|
||||
old "music volume"
|
||||
new "kekuatan muzik"
|
||||
|
||||
# 00preferences.rpy:414
|
||||
old "sound volume"
|
||||
new "kekuatan bunyi"
|
||||
|
||||
# 00preferences.rpy:415
|
||||
old "voice volume"
|
||||
new "kekuatan suara"
|
||||
|
||||
# 00preferences.rpy:416
|
||||
old "mute music"
|
||||
new "bisukan muzik"
|
||||
|
||||
# 00preferences.rpy:417
|
||||
old "mute sound"
|
||||
new "bisukan bunyi"
|
||||
|
||||
# 00preferences.rpy:418
|
||||
old "mute voice"
|
||||
new "bisukan suara"
|
||||
|
||||
# 00preferences.rpy:419
|
||||
old "mute all"
|
||||
new "bisukan semua"
|
||||
|
||||
# 00preferences.rpy:500
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "Penyuaraan papan keratan dibolehkan. Tekan 'shift+C' untuk melumpuhkannya."
|
||||
|
||||
# 00preferences.rpy:502
|
||||
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
new "Penyuaraan sendiri akan berkata \"[renpy.display.tts.last]\". Tekan 'alt+shift+V' untuk melumpuhkannya."
|
||||
|
||||
# 00preferences.rpy:504
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "Penyuaraan sendiri dibolehkan. Tekan 'v' untuk melumpuhkannya."
|
||||
|
||||
# _compat\gamemenu.rpym:198
|
||||
old "Empty Slot."
|
||||
new "Slot Kosong."
|
||||
|
||||
# _compat\gamemenu.rpym:355
|
||||
old "Previous"
|
||||
new "Sebelumnya"
|
||||
|
||||
# _compat\gamemenu.rpym:362
|
||||
old "Next"
|
||||
new "Seterusnya"
|
||||
|
||||
# _compat\preferences.rpym:428
|
||||
old "Joystick Mapping"
|
||||
new "Pemetaan Kayu Bedik"
|
||||
|
||||
# _developer\developer.rpym:38
|
||||
old "Developer Menu"
|
||||
new "Menu Pembangun"
|
||||
|
||||
# _developer\developer.rpym:43
|
||||
old "Interactive Director (D)"
|
||||
new "Pengarah Interaktif (D)"
|
||||
|
||||
# _developer\developer.rpym:45
|
||||
old "Reload Game (Shift+R)"
|
||||
new "Muat Semula Permainan (Shift+R)"
|
||||
|
||||
# _developer\developer.rpym:47
|
||||
old "Console (Shift+O)"
|
||||
new "Konsol (Shift+O)"
|
||||
|
||||
# _developer\developer.rpym:49
|
||||
old "Variable Viewer"
|
||||
new "Alat Pemboleh Ubah"
|
||||
|
||||
# _developer\developer.rpym:51
|
||||
old "Image Location Picker"
|
||||
new "Pemilih Kedudukan Imej"
|
||||
|
||||
# _developer\developer.rpym:53
|
||||
old "Filename List"
|
||||
new "Senarai Nama Fail"
|
||||
|
||||
# _developer\developer.rpym:57
|
||||
old "Show Image Load Log (F4)"
|
||||
new "Tunjukkan Log Pemuatan Imej (F4)"
|
||||
|
||||
# _developer\developer.rpym:60
|
||||
old "Hide Image Load Log (F4)"
|
||||
new "Sembunyikan Log Pemuatan Imej (F4)"
|
||||
|
||||
# _developer\developer.rpym:63
|
||||
old "Image Attributes"
|
||||
new "Atribut Imej"
|
||||
|
||||
# _developer\developer.rpym:90
|
||||
old "[name] [attributes] (hidden)"
|
||||
new "[name] [attributes] (disembunyikan)"
|
||||
|
||||
# _developer\developer.rpym:94
|
||||
old "[name] [attributes]"
|
||||
new "[name] [attributes]"
|
||||
|
||||
# _developer\developer.rpym:137
|
||||
old "Nothing to inspect."
|
||||
new "Tiada apa untuk diperiksa."
|
||||
|
||||
# _developer\developer.rpym:265
|
||||
old "Return to the developer menu"
|
||||
new "Kembali ke menu pembangun"
|
||||
|
||||
# _developer\developer.rpym:425
|
||||
old "Rectangle: %r"
|
||||
new "Segi empat: %r"
|
||||
|
||||
# _developer\developer.rpym:430
|
||||
old "Mouse position: %r"
|
||||
new "Kedudukan tetikus: %r"
|
||||
|
||||
# _developer\developer.rpym:435
|
||||
old "Right-click or escape to quit."
|
||||
new "Klik-kanan atau tekan butang Esc untuk keluar."
|
||||
|
||||
# _developer\developer.rpym:467
|
||||
old "Rectangle copied to clipboard."
|
||||
new "Segi empat disalin ke papan keratan."
|
||||
|
||||
# _developer\developer.rpym:470
|
||||
old "Position copied to clipboard."
|
||||
new "Kedudukan disalin ke papan keratan."
|
||||
|
||||
# _developer\developer.rpym:489
|
||||
old "Type to filter: "
|
||||
new "Tapisan: "
|
||||
|
||||
# _developer\developer.rpym:617
|
||||
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
|
||||
new "Tekstur: [tex_count] ([tex_size_mb:.1f] MB)"
|
||||
|
||||
# _developer\developer.rpym:621
|
||||
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
|
||||
new "Cache imej: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
|
||||
|
||||
# _developer\developer.rpym:631
|
||||
old "✔ "
|
||||
new "✔ "
|
||||
|
||||
# _developer\developer.rpym:634
|
||||
old "✘ "
|
||||
new "✘ "
|
||||
|
||||
# _developer\developer.rpym:639
|
||||
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
new "\n{color=#cfc}✔ imej diramal (baik){/color}\n{color=#fcc}✘ imej tidak diramal (buruk){/color}\n{color=#fff}Seret untuk gerakkannya.{/color}"
|
||||
|
||||
# _developer\inspector.rpym:38
|
||||
old "Displayable Inspector"
|
||||
new "Pemeriksa Boleh Papar"
|
||||
|
||||
# _developer\inspector.rpym:61
|
||||
old "Size"
|
||||
new "Saiz"
|
||||
|
||||
# _developer\inspector.rpym:65
|
||||
old "Style"
|
||||
new "Gaya"
|
||||
|
||||
# _developer\inspector.rpym:71
|
||||
old "Location"
|
||||
new "Kedudukan"
|
||||
|
||||
# _developer\inspector.rpym:122
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "Memeriksa Gaya [displayable_name!q]"
|
||||
|
||||
# _developer\inspector.rpym:139
|
||||
old "displayable:"
|
||||
new "boleh papar:"
|
||||
|
||||
# _developer\inspector.rpym:145
|
||||
old " (no properties affect the displayable)"
|
||||
new " (tiada sifat memberi kesan boleh papar)"
|
||||
|
||||
# _developer\inspector.rpym:147
|
||||
old " (default properties omitted)"
|
||||
new " (sifat lalai disingkirkan)"
|
||||
|
||||
# _developer\inspector.rpym:185
|
||||
old "<repr() failed>"
|
||||
new "<repr() gagal>"
|
||||
|
||||
# _layout\classic_load_save.rpym:170
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# _layout\classic_load_save.rpym:179
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
# 00iap.rpy:217
|
||||
old "Contacting App Store\nPlease Wait..."
|
||||
new "Menghubungi App Store\nSila tunggu..."
|
||||
|
||||
# 00updater.rpy:372
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "Pengemaskini Ren'Py tidak boleh digunakan di peranti mudah alih."
|
||||
|
||||
# 00updater.rpy:491
|
||||
old "An error is being simulated."
|
||||
new "Sebuah ralat sedang disimulasikan."
|
||||
|
||||
# 00updater.rpy:672
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "Sama ada projek ini tidak ada fungsi mengemaskini, atau fail status kemas kini telah dipadam."
|
||||
|
||||
# 00updater.rpy:686
|
||||
old "This account does not have permission to perform an update."
|
||||
new "Akaun ini tidak mempunyai kebenaran untuk mengemaskini."
|
||||
|
||||
# 00updater.rpy:689
|
||||
old "This account does not have permission to write the update log."
|
||||
new "Akaun ini tidak mempunyai kebenaran untuk menulis log kemas kini."
|
||||
|
||||
# 00updater.rpy:716
|
||||
old "Could not verify update signature."
|
||||
new "Tidak boleh mengesahkan tandatangan kemas kini."
|
||||
|
||||
# 00updater.rpy:991
|
||||
old "The update file was not downloaded."
|
||||
new "Fail kemas kini tidak dimuat turun."
|
||||
|
||||
# 00updater.rpy:1009
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "Fail kemas kini tidak mempunyai cerna yang betul - mungkin ia telah rosak."
|
||||
|
||||
# 00updater.rpy:1065
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "Ketika menyahpadat {}, terdapat jenis tidak diketahui {}."
|
||||
|
||||
# 00updater.rpy:1429
|
||||
old "Updater"
|
||||
new "Pengemaskini"
|
||||
|
||||
# 00updater.rpy:1440
|
||||
old "This program is up to date."
|
||||
new "Atur cara ini sudah pun dikemaskini."
|
||||
|
||||
# 00updater.rpy:1442
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] kini tersedia. Adakah anda ingin memasangkan ia?"
|
||||
|
||||
# 00updater.rpy:1444
|
||||
old "Preparing to download the updates."
|
||||
new "Membuat persediaan memuat turun kemas kini."
|
||||
|
||||
# 00updater.rpy:1446
|
||||
old "Downloading the updates."
|
||||
new "Sedang memuat turun kemas kini."
|
||||
|
||||
# 00updater.rpy:1448
|
||||
old "Unpacking the updates."
|
||||
new "Sedang menyahpadat kemas kini."
|
||||
|
||||
# 00updater.rpy:1452
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "Kemaskini telah dipasang. Atur cara akan dimulakan semula."
|
||||
|
||||
# 00updater.rpy:1454
|
||||
old "The updates have been installed."
|
||||
new "Kemas kini telah dipasang."
|
||||
|
||||
# 00updater.rpy:1456
|
||||
old "The updates were cancelled."
|
||||
new "Kemas kini telah dibatalkan."
|
||||
|
||||
# 00gallery.rpy:585
|
||||
old "Image [index] of [count] locked."
|
||||
new "Imej [index] daripada [count] dikunci."
|
||||
|
||||
# 00gallery.rpy:605
|
||||
old "prev"
|
||||
new "sebelumnya"
|
||||
|
||||
# 00gallery.rpy:606
|
||||
old "next"
|
||||
new "seterusnya"
|
||||
|
||||
# 00gallery.rpy:607
|
||||
old "slideshow"
|
||||
new "persembahan slaid"
|
||||
|
||||
# 00gallery.rpy:608
|
||||
old "return"
|
||||
new "kembali"
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
translate malay strings:
|
||||
|
||||
# 00console.rpy:255
|
||||
old "Press <esc> to exit console. Type help for help.\n"
|
||||
new "Tekan <esc> untuk keluar konsol. Taip help untuk bantuan.\n"
|
||||
|
||||
# 00console.rpy:259
|
||||
old "Ren'Py script enabled."
|
||||
new "Skrip Ren'Py dibolehkan."
|
||||
|
||||
# 00console.rpy:261
|
||||
old "Ren'Py script disabled."
|
||||
new "Skrip Ren'Py dilumpuhkan."
|
||||
|
||||
# 00console.rpy:496
|
||||
old "help: show this help"
|
||||
new "help: tunjukkan bantuan ini"
|
||||
|
||||
# 00console.rpy:501
|
||||
old "commands:\n"
|
||||
new "perintah:"
|
||||
|
||||
# 00console.rpy:511
|
||||
old " <renpy script statement>: run the statement\n"
|
||||
new " <kenyataan skrip renpy>: menjalankan kenyataan tersebut\n"
|
||||
|
||||
# 00console.rpy:513
|
||||
old " <python expression or statement>: run the expression or statement"
|
||||
new " <ungkapan atau kenyataan python>: menjalankan ungkapan atau kenyataan tersebut"
|
||||
|
||||
# 00console.rpy:521
|
||||
old "clear: clear the console history"
|
||||
new "clear: kosongkan sejarah konsol"
|
||||
|
||||
# 00console.rpy:525
|
||||
old "exit: exit the console"
|
||||
new "exit: keluar konsol"
|
||||
|
||||
# 00console.rpy:533
|
||||
old "load <slot>: loads the game from slot"
|
||||
new "load <slot>: memuatkan permainan daripada slot"
|
||||
|
||||
# 00console.rpy:546
|
||||
old "save <slot>: saves the game in slot"
|
||||
new "save <slot>: menyimpan permainan ke dalam slot"
|
||||
|
||||
# 00console.rpy:557
|
||||
old "reload: reloads the game, refreshing the scripts"
|
||||
new "reload: memuatkan semula permainan, menyegarkan semula skrip"
|
||||
|
||||
# 00console.rpy:565
|
||||
old "watch <expression>: watch a python expression"
|
||||
new "watch <ungkapan>: pantau ungkapan python"
|
||||
|
||||
# 00console.rpy:591
|
||||
old "unwatch <expression>: stop watching an expression"
|
||||
new "unwatch <ungkapan>: berhenti memantau ungkapan"
|
||||
|
||||
# 00console.rpy:622
|
||||
old "unwatchall: stop watching all expressions"
|
||||
new "unwatchall: bergenti memantau semua ungkapan"
|
||||
|
||||
# 00console.rpy:639
|
||||
old "jump <label>: jumps to label"
|
||||
new "jump <label>: lompat ke label"
|
||||
|
||||
@@ -0,0 +1,214 @@
|
||||
translate malay strings:
|
||||
|
||||
# 00gltest.rpy:70
|
||||
old "Renderer"
|
||||
new "Penerjemahan Grafik"
|
||||
|
||||
# 00gltest.rpy:74
|
||||
old "Automatically Choose"
|
||||
new "Pilih Secara Automatik"
|
||||
|
||||
# 00gltest.rpy:79
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "Paksa Penerjemah Angle/DirectX"
|
||||
|
||||
# 00gltest.rpy:83
|
||||
old "Force OpenGL Renderer"
|
||||
new "Paksa Penerjemah OpenGL"
|
||||
|
||||
# 00gltest.rpy:87
|
||||
old "Force Software Renderer"
|
||||
new "Paksa Penerjemah Perisian"
|
||||
|
||||
# 00gltest.rpy:93
|
||||
old "NPOT"
|
||||
new "NPOT"
|
||||
|
||||
# 00gltest.rpy:97
|
||||
old "Enable"
|
||||
new "Bolehkan"
|
||||
|
||||
# 00gltest.rpy:131
|
||||
old "Powersave"
|
||||
new "Jimat Tenaga"
|
||||
|
||||
# 00gltest.rpy:145
|
||||
old "Framerate"
|
||||
new "Kadar Bingkai"
|
||||
|
||||
# 00gltest.rpy:149
|
||||
old "Screen"
|
||||
new "Skrin"
|
||||
|
||||
# 00gltest.rpy:153
|
||||
old "60"
|
||||
new "60"
|
||||
|
||||
# 00gltest.rpy:157
|
||||
old "30"
|
||||
new "30"
|
||||
|
||||
# 00gltest.rpy:163
|
||||
old "Tearing"
|
||||
new "Pengoyakan"
|
||||
|
||||
# 00gltest.rpy:179
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "Penukaran akan menerima kesan apabila atur cara ini dijalankan semula."
|
||||
|
||||
# 00gltest.rpy:213
|
||||
old "Performance Warning"
|
||||
new "Amaran Prestasi"
|
||||
|
||||
# 00gltest.rpy:218
|
||||
old "This computer is using software rendering."
|
||||
new "Komputer ini menggunakan penerjemahan perisian."
|
||||
|
||||
# 00gltest.rpy:220
|
||||
old "This computer is not using shaders."
|
||||
new "Komputer ini tidak menggunakan pembayang."
|
||||
|
||||
# 00gltest.rpy:222
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "Komputer ini memaparkan grafik dengan perlahan."
|
||||
|
||||
# 00gltest.rpy:224
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "Komputer ini mempunyai masalah memaparkan grafik: [problem]."
|
||||
|
||||
# 00gltest.rpy:229
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "Pemacu grafiknya mungkin ketinggalan zaman atau tidak beroperasi dengan betul. Ini boleh menyebabkan paparan grafik yang perlahan atau tidak betul. Mengemaskini DirectX boleh membaiki masalah ini."
|
||||
|
||||
# 00gltest.rpy:231
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new "Pemacu grafiknya mungkin ketinggalan zaman atau tidak beroperasi dengan betul. Ini boleh menyebabkan paparan grafik yang perlahan atau tidak betul."
|
||||
|
||||
# 00gltest.rpy:236
|
||||
old "Update DirectX"
|
||||
new "Kemas Kini DirectX"
|
||||
|
||||
# 00gltest.rpy:242
|
||||
old "Continue, Show this warning again"
|
||||
new "Teruskan, Tunjukkan amaran ini lagi"
|
||||
|
||||
# 00gltest.rpy:246
|
||||
old "Continue, Don't show warning again"
|
||||
new "Teruskan, Jangan tunjukkan amaran sudah"
|
||||
|
||||
# 00gltest.rpy:264
|
||||
old "Updating DirectX."
|
||||
new "Sedang mengemaskini DirectX."
|
||||
|
||||
# 00gltest.rpy:268
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "Pemasangan web DirectX telah dimulakan. Ia mungkin bermula diminimumkan dalam bar tugas. Sila ikut arahan yang dipaparkan untuk memasang DirectX."
|
||||
|
||||
# 00gltest.rpy:272
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}Nota:{/b} Atur cara web Microsoft's DirectX selalunya akan memasangkan bar alat Bing. Jika anda tidak ingin bar alat ini, sila buang tanda di kotak yang berkenaan."
|
||||
|
||||
# 00gltest.rpy:276
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "Apabila pemasangan selesai, sila klik di bawah untuk memulakan semula atur cara ini."
|
||||
|
||||
# 00gltest.rpy:278
|
||||
old "Restart"
|
||||
new "Mula Semula"
|
||||
|
||||
# 00gamepad.rpy:32
|
||||
old "Select Gamepad to Calibrate"
|
||||
new "Pilih Pad Permainan untuk Ditentuukur"
|
||||
|
||||
# 00gamepad.rpy:35
|
||||
old "No Gamepads Available"
|
||||
new "Tiada Pad Permainan Tersedia"
|
||||
|
||||
# 00gamepad.rpy:54
|
||||
old "Calibrating [name] ([i]/[total])"
|
||||
new "Menentuukur [name] ([i]/[total])"
|
||||
|
||||
# 00gamepad.rpy:58
|
||||
old "Press or move the [control!r] [kind]."
|
||||
new "Tekan atau gerakkan [kind] [control!r]."
|
||||
|
||||
# 00gamepad.rpy:66
|
||||
old "Skip (A)"
|
||||
new "Langkau (A)"
|
||||
|
||||
# 00gamepad.rpy:69
|
||||
old "Back (B)"
|
||||
new "Kembali (B)"
|
||||
|
||||
# _errorhandling.rpym:528
|
||||
old "Open"
|
||||
new "Buka"
|
||||
|
||||
# _errorhandling.rpym:530
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "Buka fail traceback.txt dalam penyunting tulisan."
|
||||
|
||||
# _errorhandling.rpym:532
|
||||
old "Copy"
|
||||
new "Salin"
|
||||
|
||||
# _errorhandling.rpym:534
|
||||
old "Copies the traceback.txt file to the clipboard."
|
||||
new "Menyalin fail traceback.txt ke papan keratan."
|
||||
|
||||
# _errorhandling.rpym:561
|
||||
old "An exception has occurred."
|
||||
new "Telah berlakunya pengecualian ralat."
|
||||
|
||||
# _errorhandling.rpym:581
|
||||
old "Rollback"
|
||||
new "Undur"
|
||||
|
||||
# _errorhandling.rpym:583
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "Cuba untuk mengundur ke masa sebelumnya, membolehkan anda menyimpan atau memilih pilihan berbeza."
|
||||
|
||||
# _errorhandling.rpym:586
|
||||
old "Ignore"
|
||||
new "Abai"
|
||||
|
||||
# _errorhandling.rpym:590
|
||||
old "Ignores the exception, allowing you to continue."
|
||||
new "Abaikan pengecualian ralat, membolehkan anda untuk meneruskan."
|
||||
|
||||
# _errorhandling.rpym:592
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "Abaikan pengecualian ralat, membolehkan anda untuk meneruskan. Ini selalunya menimbulkan lebih banyak ralat."
|
||||
|
||||
# _errorhandling.rpym:596
|
||||
old "Reload"
|
||||
new "Muat Semula"
|
||||
|
||||
# _errorhandling.rpym:598
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "Memuatkan semula permainan daripada cakera, menyimpan dan memulihkan keadaan permainan jika boleh."
|
||||
|
||||
# _errorhandling.rpym:601
|
||||
old "Console"
|
||||
new "Konsol"
|
||||
|
||||
# _errorhandling.rpym:603
|
||||
old "Opens a console to allow debugging the problem."
|
||||
new "Membuka konsol untuk membolehkan penyahpepijatan masalah."
|
||||
|
||||
# _errorhandling.rpym:613
|
||||
old "Quits the game."
|
||||
new "Keluar permainan."
|
||||
|
||||
# _errorhandling.rpym:637
|
||||
old "Parsing the script failed."
|
||||
new "Penghuraian skrip telah gagal."
|
||||
|
||||
# _errorhandling.rpym:663
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "Buka fail errors.txt dalam penyunting tulisan."
|
||||
|
||||
# _errorhandling.rpym:667
|
||||
old "Copies the errors.txt file to the clipboard."
|
||||
new "Menyalin fail errors.txt ke papan keratan."
|
||||
|
||||
@@ -0,0 +1,434 @@
|
||||
translate malay strings:
|
||||
|
||||
# gui.rpy:2
|
||||
old "## Initialization"
|
||||
new "## Pengawalan"
|
||||
|
||||
# gui.rpy:5
|
||||
old "## The init offset statement causes the initialization statements in this file to run before init statements in any other file."
|
||||
new "## Kenyataan init offset dalam fail ini menyebabkan kenyataan dalam fail ini dijalankan sebelum sebarang kenyataan init dalam fail lain."
|
||||
|
||||
# gui.rpy:9
|
||||
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
new "## Memanggil gui.init menetapkan semula gaya ke nilai lalai yang wajar, dan menetapkan lebar dan tinggi permainan."
|
||||
|
||||
# gui.rpy:17
|
||||
old "## GUI Configuration Variables"
|
||||
new "## Pemboleh Ubah Tatarajah GUI"
|
||||
|
||||
# gui.rpy:21
|
||||
old "## Colors"
|
||||
new "## Warna"
|
||||
|
||||
# gui.rpy:23
|
||||
old "## The colors of text in the interface."
|
||||
new "## Warna tulisan dalam antara muka."
|
||||
|
||||
# gui.rpy:25
|
||||
old "## An accent color used throughout the interface to label and highlight text."
|
||||
new "## Warna aksen yang digunakan di seluruh antara muka untuk melabel dan menanda tulisan."
|
||||
|
||||
# gui.rpy:29
|
||||
old "## The color used for a text button when it is neither selected nor hovered."
|
||||
new "## Warna yang digunakan untuk butang tulisan apabila ia tidak dipilih mahupun dilalukan tetikus."
|
||||
|
||||
# gui.rpy:32
|
||||
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
|
||||
new "## Warna kecil itu digunakan untuk tulisan kecil, ia mestilah lebih terang/gelap untuk mencapai kesan yang sama."
|
||||
|
||||
# gui.rpy:36
|
||||
old "## The color that is used for buttons and bars that are hovered."
|
||||
new "## Warna yang digunakan untuk butang dan bar yang dilalukan tetikus."
|
||||
|
||||
# gui.rpy:39
|
||||
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
|
||||
new "## Warna yang digunakan untuk butang tulisan apabila ianya dipilih tetapi tidak difokuskan. Butang dipilih sekiranya ia skrin semasa atau nilai diutamakan."
|
||||
|
||||
# gui.rpy:43
|
||||
old "## The color used for a text button when it cannot be selected."
|
||||
new "## Warna yang digunakan untuk butang tulisan apabila ia tidak boleh dipilih."
|
||||
|
||||
# gui.rpy:46
|
||||
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
|
||||
new "## Warna digunakan untuk bahagian bar yang belum diisi. Warna ini tidak digunakan secara terus, tetapi digunakan ketika menjana semula fail imej bar."
|
||||
|
||||
# gui.rpy:51
|
||||
old "## The colors used for dialogue and menu choice text."
|
||||
new "## Warna yang digunakan untuk tulisan dialog dan pilihan menu."
|
||||
|
||||
# gui.rpy:56
|
||||
old "## Fonts and Font Sizes"
|
||||
new "## Fon dan Saiz Fon"
|
||||
|
||||
# gui.rpy:58
|
||||
old "## The font used for in-game text."
|
||||
new "## Fon yang digunakan untuk tulisan di dalam permainan."
|
||||
|
||||
# gui.rpy:61
|
||||
old "## The font used for character names."
|
||||
new "## Fon yang digunakan untuk nama-nama watak."
|
||||
|
||||
# gui.rpy:64
|
||||
old "## The font used for out-of-game text."
|
||||
new "## Fon yang digunakan untuk tulisan di luar permainan."
|
||||
|
||||
# gui.rpy:67
|
||||
old "## The size of normal dialogue text."
|
||||
new "## Saiz untuk tulisan dialog biasa."
|
||||
|
||||
# gui.rpy:70
|
||||
old "## The size of character names."
|
||||
new "## Saiz untuk nama-nama watak."
|
||||
|
||||
# gui.rpy:73
|
||||
old "## The size of text in the game's user interface."
|
||||
new "## Saiz tulisan dalam antara muka pengguna permainan."
|
||||
|
||||
# gui.rpy:76
|
||||
old "## The size of labels in the game's user interface."
|
||||
new "## Saiz label dalam antara muka pengguna permainan."
|
||||
|
||||
# gui.rpy:79
|
||||
old "## The size of text on the notify screen."
|
||||
new "## Saiz tulisan pada skrin pemberitahuan."
|
||||
|
||||
# gui.rpy:82
|
||||
old "## The size of the game's title."
|
||||
new "## Saiz tulisan tajuk permainan."
|
||||
|
||||
# gui.rpy:86
|
||||
old "## Main and Game Menus"
|
||||
new "## Menu Utama dan Permainan"
|
||||
|
||||
# gui.rpy:88
|
||||
old "## The images used for the main and game menus."
|
||||
new "## Imej yang digunakan untuk menu utama dan permainan."
|
||||
|
||||
# gui.rpy:93
|
||||
old "## Dialogue"
|
||||
new "## Dialog"
|
||||
|
||||
# gui.rpy:95
|
||||
old "## These variables control how dialogue is displayed on the screen one line at a time."
|
||||
new "## Pemboleh ubah ini mengawal bagaimana dialog dipaparkan di atas skrin sebaris pada sesuatu masa."
|
||||
|
||||
# gui.rpy:98
|
||||
old "## The height of the textbox containing dialogue."
|
||||
new "## Tinggi kotak tulisan yang mengandungi dialog."
|
||||
|
||||
# gui.rpy:101
|
||||
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
|
||||
new "## Peletakan menegak kotak tulisan di atas skrin. 0.0 di atas, 0.5 di tengah, dan 1.0 di bawah."
|
||||
|
||||
# gui.rpy:106
|
||||
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
|
||||
new "## Peletakan nama watak yang sedang bercakap, relatif kepada kotak tulisan. Nilai boleh jadi nombor bulat piksel dari kiri atau atas, atau 0.5 untuk di tengah."
|
||||
|
||||
# gui.rpy:111
|
||||
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## Penjajaran melintang nama watak. Ini boleh jadi 0.0 untuk penjajaran kiri, 0.5 untuk penjajaran tengah, dan 1.0 untuk penjajaran kanan."
|
||||
|
||||
# gui.rpy:115
|
||||
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
|
||||
new "## Lebar, tinggi, dan sempadan kotak yang mengandungi nama watak, atau None untuk menentukan saiz secara automatik."
|
||||
|
||||
# gui.rpy:120
|
||||
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
new "## Sempadan kotak yang mengandungi nama watak, mengikut susunan kiri, atas, kanan, bawah."
|
||||
|
||||
# gui.rpy:124
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## Jika ditetapkan kepada True, latar belakang kotak nama akan dijubinkan, jika False, latar belakang kotak nama akan dissesuaikan saiznya."
|
||||
|
||||
# gui.rpy:129
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
new "## Peletakan dialog relatif kepada kotak tulisan. Nilai boleh jadi nombor bulat piksel dari kiri atau atas dari kotak tulisan, atau 0.5 untuk di tengah."
|
||||
|
||||
# gui.rpy:135
|
||||
old "## The maximum width of dialogue text, in pixels."
|
||||
new "## Lebar maksimum tulisan dialog, dalam piksel."
|
||||
|
||||
# gui.rpy:138
|
||||
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## Penjajaran melintang tulisan dialog. Ini boleh jadi 0.0 untuk penjajaran kiri, 0.5 untuk penjajaran tengah, dan 1.0 untuk penjajaran kanan."
|
||||
|
||||
# gui.rpy:143
|
||||
old "## Buttons"
|
||||
new "## Butang"
|
||||
|
||||
# gui.rpy:145
|
||||
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
new "## Pemboleh ubah ini, beserta fail imej dalam gui/button, mengawal aspek mana butang akan dipaparkan."
|
||||
|
||||
# gui.rpy:148
|
||||
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
new "## Lebar dan tinggi butang, dalam piksel. Jika ditetapkan kepada None, Ren'Py akan mengira saiz sendiri."
|
||||
|
||||
# gui.rpy:152
|
||||
old "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
new "## Sempadan di setiap sisi butang, dalam susunan kiri, atas, kanan, bawah."
|
||||
|
||||
# gui.rpy:155
|
||||
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
new "## Jika ditetapkan kepada True, latar belakang imej akan dijubinkan. Jika False, latar belakang imej akan disesuaikan saiznya secara linear."
|
||||
|
||||
# gui.rpy:159
|
||||
old "## The font used by the button."
|
||||
new "## Fon yang digunakan pada butang."
|
||||
|
||||
# gui.rpy:162
|
||||
old "## The size of the text used by the button."
|
||||
new "## Saiz untuk tulisan yang digunakan pada butang."
|
||||
|
||||
# gui.rpy:165
|
||||
old "## The color of button text in various states."
|
||||
new "## Warna tulisan butang dalam pelbagai keadaan."
|
||||
|
||||
# gui.rpy:171
|
||||
old "## The horizontal alignment of the button text. (0.0 is left, 0.5 is center, 1.0 is right)."
|
||||
new "## Penjajaran melintang tulisan butang. (0.0 untuk kiri, 0.5 untuk tengah, 1.0 untuk kanan)."
|
||||
|
||||
# gui.rpy:176
|
||||
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
|
||||
new "## Pemboleh ubah ini mengatasi tetapan untuk pelbagai jenis butang. Sila lihat pendokumenan gui untuk pelbagai jenis butang yang ada, dan apa fungsi setiap satunya."
|
||||
|
||||
# gui.rpy:180
|
||||
old "## These customizations are used by the default interface:"
|
||||
new "## Pengubahsuaian ini digunakan di antara muka lalai:"
|
||||
|
||||
# gui.rpy:195
|
||||
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
|
||||
new "## Anda juga boleh menambah ubah suai anda sendiri, dengan menambah pemboleh ubah yang dinamakan dengan betul. Contohnya, anda boleh nyahkomen baris di bawah untuk menetapkan lebar butang navigasi."
|
||||
|
||||
# gui.rpy:202
|
||||
old "## Choice Buttons"
|
||||
new "## Butang Pilihan"
|
||||
|
||||
# gui.rpy:204
|
||||
old "## Choice buttons are used in the in-game menus."
|
||||
new "## Butang pilihan digunakan pada menu dalam permainan."
|
||||
|
||||
# gui.rpy:217
|
||||
old "## File Slot Buttons"
|
||||
new "## Butang Slot Fail"
|
||||
|
||||
# gui.rpy:219
|
||||
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
|
||||
new "## Butang slot fail ialah butang jenis istimewa. Ia mengandungi imej kecil, dan tulisan yang menerangkan kandungan slot simpanan. Sebuah slot simpanan menggunakan fail imej dalam gui/button, seperti butang-butang jenis lain."
|
||||
|
||||
# gui.rpy:223
|
||||
old "## The save slot button."
|
||||
new "## Butang slot simpan."
|
||||
|
||||
# gui.rpy:233
|
||||
old "## The width and height of thumbnails used by the save slots."
|
||||
new "## Lebar dan tinggi imej kecil yang digunakan di slot simpan."
|
||||
|
||||
# gui.rpy:237
|
||||
old "## The number of columns and rows in the grid of save slots."
|
||||
new "## Jumlah lajur dan baris dalam grid slot simpan."
|
||||
|
||||
# gui.rpy:242
|
||||
old "## Positioning and Spacing"
|
||||
new "## Peletakan dan Penjarakan"
|
||||
|
||||
# gui.rpy:244
|
||||
old "## These variables control the positioning and spacing of various user interface elements."
|
||||
new "## Pemboleh ubah ini mengawal peletakan dan penjarakan pelbagai unsur antara muka pengguna."
|
||||
|
||||
# gui.rpy:247
|
||||
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
new "## Kedudukan sisi kiri butang navigasi, relatif kepada sisi kiri skrin."
|
||||
|
||||
# gui.rpy:251
|
||||
old "## The vertical position of the skip indicator."
|
||||
new "## Kedudukan menegak penunjuk langkau."
|
||||
|
||||
# gui.rpy:254
|
||||
old "## The vertical position of the notify screen."
|
||||
new "## Kedudukan menegak skrin pemberitahuan."
|
||||
|
||||
# gui.rpy:257
|
||||
old "## The spacing between menu choices."
|
||||
new "## Penjarakan di antara pelbagai pilihan menu."
|
||||
|
||||
# gui.rpy:260
|
||||
old "## Buttons in the navigation section of the main and game menus."
|
||||
new "## Butang dalam bahagian navigasi di menu utama dan permainan."
|
||||
|
||||
# gui.rpy:263
|
||||
old "## Controls the amount of spacing between preferences."
|
||||
new "## Mengawal jumlah jarak di antara keutamaan."
|
||||
|
||||
# gui.rpy:266
|
||||
old "## Controls the amount of spacing between preference buttons."
|
||||
new "## Mengawal jumlah jarak di antara butang keutamaan."
|
||||
|
||||
# gui.rpy:269
|
||||
old "## The spacing between file page buttons."
|
||||
new "## Jarak di antara butang halaman fail."
|
||||
|
||||
# gui.rpy:272
|
||||
old "## The spacing between file slots."
|
||||
new "## Jarak di antara slot fail."
|
||||
|
||||
# gui.rpy:275
|
||||
old "## The position of the main menu text."
|
||||
new "## Kedudukan tulisan menu utama."
|
||||
|
||||
# gui.rpy:279
|
||||
old "## Frames"
|
||||
new "## Bingkai"
|
||||
|
||||
# gui.rpy:281
|
||||
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
new "## Pemboleh ubah ini mengawal rupa bingkai yang boleh mengandungi komponen antara muka apabila tindihan atas atau tetingkap tidak wujud."
|
||||
|
||||
# gui.rpy:284
|
||||
old "## Generic frames."
|
||||
new "## Bingkai umum."
|
||||
|
||||
# gui.rpy:287
|
||||
old "## The frame that is used as part of the confirm screen."
|
||||
new "## Bingkai yang digunakan sebagai sebahagian skrin pengesahan."
|
||||
|
||||
# gui.rpy:290
|
||||
old "## The frame that is used as part of the skip screen."
|
||||
new "## Bingkai yang digunakan sebagai sebahagian skrin langkau."
|
||||
|
||||
# gui.rpy:293
|
||||
old "## The frame that is used as part of the notify screen."
|
||||
new "## Bingkai yang digunakan sebagai sebahagian skrin pemberitahuan."
|
||||
|
||||
# gui.rpy:296
|
||||
old "## Should frame backgrounds be tiled?"
|
||||
new "## Adakah latar belakang bingkai patut dijubinkan?"
|
||||
|
||||
# gui.rpy:300
|
||||
old "## Bars, Scrollbars, and Sliders"
|
||||
new "## Bar, Bar Tatal, dan Lungsur"
|
||||
|
||||
# gui.rpy:302
|
||||
old "## These control the look and size of bars, scrollbars, and sliders."
|
||||
new "## Ini mengawal rupa dan saiz bar, bar tatal, dan lungsur."
|
||||
|
||||
# gui.rpy:304
|
||||
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written screens."
|
||||
new "## GUI lalai hanya menggunakan lungsur dan bar tatal menegak. Semua bar lain hanya digunakan dalam skrin ditulis oleh para pencipta."
|
||||
|
||||
# gui.rpy:307
|
||||
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
new "## Tinggi bar melintang, bar tatal, dan lungsur. Lebar bar menegak, bar tatal, dan lungsur."
|
||||
|
||||
# gui.rpy:313
|
||||
old "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
new "## Tetapkan True jika imej bar patut dijubinkan. Tetapkan False jika mereka patut disesuaikan saiz secara linear."
|
||||
|
||||
# gui.rpy:318
|
||||
old "## Horizontal borders."
|
||||
new "## Sempadan melintang."
|
||||
|
||||
# gui.rpy:323
|
||||
old "## Vertical borders."
|
||||
new "## Sempadan menegak."
|
||||
|
||||
# gui.rpy:328
|
||||
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
new "## Apa nak dibuat dengan bar tatal yang tidak boleh ditatalkan dalam gui. \"hide\" menyembunyikan mereka, manakala None menunjukkan mereka."
|
||||
|
||||
# gui.rpy:333
|
||||
old "## History"
|
||||
new "## Sejarah"
|
||||
|
||||
# gui.rpy:335
|
||||
old "## The history screen displays dialogue that the player has already dismissed."
|
||||
new "## Skrin sejarah memaparkan dialog yang pemain telah tolak tepi."
|
||||
|
||||
# gui.rpy:337
|
||||
old "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
new "## Jumlah blok sejarah dialog yang Ren'Py akan simpan."
|
||||
|
||||
# gui.rpy:340
|
||||
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
new "## Tinggi untuk entri skrin sejarah, atau tetapkan kepada None untuk membiarkan tinggi dikira sendiri dengan mengorbankan prestasi."
|
||||
|
||||
# gui.rpy:344
|
||||
old "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
new "## Kedudukan, lebar, dan penjajaran label yang memberikan nama kepada watak yang sedang bercakap."
|
||||
|
||||
# gui.rpy:351
|
||||
old "## The position, width, and alignment of the dialogue text."
|
||||
new "## Kedudukan, lebar, dan penjajaran tulisan dialog."
|
||||
|
||||
# gui.rpy:358
|
||||
old "## NVL-Mode"
|
||||
new "## Mod NVL"
|
||||
|
||||
# gui.rpy:360
|
||||
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
new "## Skrin mod NVL menunjukkan dialog yang dicakapkan oleh watak mod NVL."
|
||||
|
||||
# gui.rpy:362
|
||||
old "## The borders of the background of the NVL-mode background window."
|
||||
new "## Sempadan latar belakang tetingkap latar mod NVL."
|
||||
|
||||
# gui.rpy:365
|
||||
old "## The maximum number of NVL-mode entries Ren'Py will display. When more entries than this are to be show, the oldest entry will be removed."
|
||||
new "## Jumlah entri mod NVL maksimum yang Ren'Py akan paparkan. Apabila lebih banyak entri akan ditunjukkan, entri paling lama akan dibuang."
|
||||
|
||||
# gui.rpy:369
|
||||
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
new "## Tinggi entri mod NVL. Tetapkan ini kepada None untuk membuatkan entri melaraskan tinggi secara dinamik."
|
||||
|
||||
# gui.rpy:373
|
||||
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
new "## Jarak di antara entri mod NVL apabila gui.nvl_height ditetapkan kepada None, dan di antara entri mod NVL dan menu mod NVL."
|
||||
|
||||
# gui.rpy:390
|
||||
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
new "## Kedudukan, lebar, dan penjajaran tulisan nvl_thought (tulisan yang dicakapkan oleh watak nvl_narrator)."
|
||||
|
||||
# gui.rpy:397
|
||||
old "## The position of nvl menu_buttons."
|
||||
new "## Kedudukan menu_buttons nvl."
|
||||
|
||||
# gui.rpy:401
|
||||
old "## Localization"
|
||||
new "## Terjemahan"
|
||||
|
||||
# gui.rpy:403
|
||||
old "## This controls where a line break is permitted. The default is suitable for most languages. A list of available values can be found at https://www.renpy.org/doc/html/style_properties.html#style-property-language"
|
||||
new "## Ini mengawal di mana baris pemisah dibenarkan. Lalainya ia sesuai untuk semua bahasa. Senarai nilai yang ada boleh dijumpai di https://www.renpy.org/doc/html/style_properties.html#style-property-language"
|
||||
|
||||
# gui.rpy:411
|
||||
old "## Mobile devices"
|
||||
new "## Peranti mudah alih"
|
||||
|
||||
# gui.rpy:416
|
||||
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
new "## Ini menambah saiz butang cepat untuk membuatkan mereka lebih mudah disentuh pada tablet dan telefon."
|
||||
|
||||
# gui.rpy:422
|
||||
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
new "## Ini menukar saiz dan penjarakan pelbagai unsur GUI untuk memastikan mereka lebih mudah dilihat pada telefon."
|
||||
|
||||
# gui.rpy:426
|
||||
old "## Font sizes."
|
||||
new "## Saiz fon."
|
||||
|
||||
# gui.rpy:434
|
||||
old "## Adjust the location of the textbox."
|
||||
new "## Laras kedudukan kotak tulisan."
|
||||
|
||||
# gui.rpy:440
|
||||
old "## Change the size and spacing of various things."
|
||||
new "## Tukar saiz dan penjarakan pelbagai benda."
|
||||
|
||||
# gui.rpy:453
|
||||
old "## File button layout."
|
||||
new "## Tataletak butang fail."
|
||||
|
||||
# gui.rpy:457
|
||||
old "## NVL-mode."
|
||||
new "## Mod NVL."
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
translate malay strings:
|
||||
|
||||
# options.rpy:1
|
||||
old "## This file contains options that can be changed to customize your game."
|
||||
new "## Fail ini mengandungi pilihan yang boleh ditukar untuk mengubahsuai permainan anda."
|
||||
|
||||
# options.rpy:4
|
||||
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
new "## Baris bermula dengan dua tanda '#' ialah komen, dan anda tidak patut menyahkomen mereka. Baris bermula dengan satu tanda '#' ialah kod yang dikomenkan, dan anda mungkin ingin menyahkomen mereka apabila perlu."
|
||||
|
||||
# options.rpy:10
|
||||
old "## Basics"
|
||||
new "## Asas"
|
||||
|
||||
# options.rpy:12
|
||||
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
new "## Nama permainan yang boleh dibaca manusia. Ini digunakan untuk menetapkan tajuk tetingkap lalai, dan ditunjukkan dalam antara muka dan laporan ralat."
|
||||
|
||||
# options.rpy:15
|
||||
old "## The _() surrounding the string marks it as eligible for translation."
|
||||
new "## Tanda _() di sekeliling rentetan menandakan ia layak untuk diterjemah."
|
||||
|
||||
# options.rpy:17
|
||||
old "Ren'Py 7 Default GUI"
|
||||
new "GUI Lalai Ren'Py 7"
|
||||
|
||||
# options.rpy:20
|
||||
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
new "## Menentukan sama ada tajuk yang diberikan di atas ditunjukkan pada skrin menu utama. Tetapkan kepada False untuk menyembunyikan tajuk."
|
||||
|
||||
# options.rpy:26
|
||||
old "## The version of the game."
|
||||
new "## Versi permainan ini."
|
||||
|
||||
# options.rpy:31
|
||||
old "## Text that is placed on the game's about screen. Place the text between the triple-quotes, and leave a blank line between paragraphs."
|
||||
new "## Tulisan yang diletakkan pada skrin perihalan permainan. Letakkan tulisan di antara tanda petikan ganda tiga, dan biarkan baris kosong di antara perenggan."
|
||||
|
||||
# options.rpy:38
|
||||
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
new "## Nama pendek untuk permainan yang digunakan untuk boleh laku dan direktori dalam pengedaran yang dibina. Ini mestilah aksara ASCII sahaja, dan tidak boleh ada selang, titik bertindih, atau koma bertindih."
|
||||
|
||||
# options.rpy:45
|
||||
old "## Sounds and music"
|
||||
new "## Bunyi dan muzik"
|
||||
|
||||
# options.rpy:47
|
||||
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
new "## Tiga pemboleh ubah ini mengawal pengadun mana yang ditunjukkan kepada pemain secara lalainya. Menetapkan salah satu daripadanya kepada False akan menyembunyikan pengadun yang berkaitan."
|
||||
|
||||
# options.rpy:56
|
||||
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
new "## Untuk membolehkan pengguna memainkan bunyi percubaan untuk saluran bunyi atau suara, nyahkomen satu baris di bawah dan gunakannya untuk menetapkan bunyi sampel untuk dimainkan."
|
||||
|
||||
# options.rpy:63
|
||||
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
new "## Nyahkomen baris di bawah untuk menetapkan fail audio yang akan dimainkan ketika pemain berada di menu utama. Fail ini akan terus dimainkan selepas permainan bermula, sehingga ia dihentikan atau fail lain dimainkan."
|
||||
|
||||
# options.rpy:70
|
||||
old "## Transitions"
|
||||
new "## Peralihan"
|
||||
|
||||
# options.rpy:72
|
||||
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
new "## Pemboleh ubah ini menetapkan peralihan yang akan digunakan apabila berlakunya acara tertentu. Setiap pemboleh ubah patut ditetapkan kepada sejenis peralihan, atau kepada None untuk menunjukkan tiada peralihan patut digunakan."
|
||||
|
||||
# options.rpy:76
|
||||
old "## Entering or exiting the game menu."
|
||||
new "## Masuk atau keluar menu permainan."
|
||||
|
||||
# options.rpy:82
|
||||
old "## Between screens of the game menu."
|
||||
new "## Di antara skrin berbeza di menu permainan."
|
||||
|
||||
# options.rpy:87
|
||||
old "## A transition that is used after a game has been loaded."
|
||||
new "## Peralihan yang digunakan selepas permainan dimuatkan."
|
||||
|
||||
# options.rpy:92
|
||||
old "## Used when entering the main menu after the game has ended."
|
||||
new "## Digunakan ketika memasuki menu utama selepas permainan tamat."
|
||||
|
||||
# options.rpy:97
|
||||
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
new "## Pemboleh ubah untuk menetapkan peralihan yang digunakan apabila permainan yang dimulakan tidak wujud. Sebaliknya, gunakan dengan kenyataan selepas menunjukkan adegan awal."
|
||||
|
||||
# options.rpy:102
|
||||
old "## Window management"
|
||||
new "## Pengurusan tetingkap"
|
||||
|
||||
# options.rpy:104
|
||||
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
new "## Ini mengawal apabila tetingkap dialog dipaparkan. Jika ditetapkan kepada \"show\", ia akan sentiasa dipaparkan. Jika \"hide\", ia hanya dipaparkan apabila ada dialog. Jika \"auto\", tetingkap disembunyikan sebelum kenyataan adegan dan ditunjukkan semula selepas dialog dipaparkan."
|
||||
|
||||
# options.rpy:109
|
||||
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
new "## Selepas permainan dimulakan, ini boleh ditukar dengan kenyataan \"window show\", \"window hide\", dan \"window auto\"."
|
||||
|
||||
# options.rpy:115
|
||||
old "## Transitions used to show and hide the dialogue window"
|
||||
new "## Peralihan yang digunakan untuk menunjukkan dan menyembunyikan tetingkap dialog"
|
||||
|
||||
# options.rpy:121
|
||||
old "## Preference defaults"
|
||||
new "## Lalai keutamaan"
|
||||
|
||||
# options.rpy:123
|
||||
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
new "## Mengawal kelajuan lalai tulisan. Nilai lalai, 0, ialah tiada had (keluar semua serentak), manakala nombor lain ialah jumlah aksara per saat untuk ditulis."
|
||||
|
||||
# options.rpy:129
|
||||
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
new "## Lengah masa bergerak-sendiri yang lalai. Nombor lebih besar menyebabkan lengah lebih lama, dengan julat yang sah dari 0 hingga 30."
|
||||
|
||||
# options.rpy:135
|
||||
old "## Save directory"
|
||||
new "## Direktori simpan"
|
||||
|
||||
# options.rpy:137
|
||||
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
new "## Mengawal tempat khusus-platform yang Ren'Py akan letakkan fail simpan untuk permainan ini. Fail simpan akan diletakkan di:"
|
||||
|
||||
# options.rpy:140
|
||||
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
new "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
|
||||
# options.rpy:142
|
||||
old "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
new "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
|
||||
# options.rpy:144
|
||||
old "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
new "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
|
||||
# options.rpy:146
|
||||
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
new "## Secara umumnya, ini tidak patut ditukar, namun jika perlu ditukar, ia mestilah rentetan literal dan bukannya ungkapan."
|
||||
|
||||
# options.rpy:152
|
||||
old "## Icon"
|
||||
new "## Ikon"
|
||||
|
||||
# options.rpy:154
|
||||
old "## The icon displayed on the taskbar or dock."
|
||||
new "## Ikon dipaparkan di bar tugas atau dok."
|
||||
|
||||
# options.rpy:159
|
||||
old "## Build configuration"
|
||||
new "## Tatarajah pembinaan"
|
||||
|
||||
# options.rpy:161
|
||||
old "## This section controls how Ren'Py turns your project into distribution files."
|
||||
new "## Bahagian ini mengawal bagaimana Ren'Py menukarkan projek anda menjadi fail pengedaran."
|
||||
|
||||
# options.rpy:166
|
||||
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
new "## Fungsi di bawah mengambil corak fail. Corak fail tidak sensitif huruf, dan dipadankan dengan haluan relatif kepada direktori asas, dengan dan tanpa tanda pendahuluan /. Jika pelbagai corak terpadan, padanan pertama digunakan."
|
||||
|
||||
# options.rpy:171
|
||||
old "## In a pattern:"
|
||||
new "## Dalam padanan:"
|
||||
|
||||
# options.rpy:173
|
||||
old "## / is the directory separator."
|
||||
new "## / ialah pemisah direktori."
|
||||
|
||||
# options.rpy:175
|
||||
old "## * matches all characters, except the directory separator."
|
||||
new "## * padan semua aksara, kecuali pemisah direktori."
|
||||
|
||||
# options.rpy:177
|
||||
old "## ** matches all characters, including the directory separator."
|
||||
new "## ** padan semua aksara, termasuk pemisah direktori."
|
||||
|
||||
# options.rpy:179
|
||||
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
new "## Contohnya, \"*.txt\" padan dengan fail txt dalam direktori asas, \"game/**.ogg\" padan dengan fail ogg dalam direktori game atau mana-mana subdirektorinya, dan \"**.psd\" padan dengan fail psd di mana-mana dalam projek."
|
||||
|
||||
# options.rpy:183
|
||||
old "## Classify files as None to exclude them from the built distributions."
|
||||
new "## Klasifikasikan fail sebagai None untuk mengecualikan mereka daripada pengedaran yang dibina."
|
||||
|
||||
# options.rpy:191
|
||||
old "## To archive files, classify them as 'archive'."
|
||||
new "## Untuk mengarkib fail, klasifikasikan mereka sebagai 'archive'."
|
||||
|
||||
# options.rpy:196
|
||||
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
new "## Fail yang padan dengan corak pendokumenan akan dipenduakan dalam binaan aplikasi Mac, jadi mereka muncul dalam kedua-dua aplikasi dan fail zip."
|
||||
|
||||
# options.rpy:202
|
||||
old "## Set this to a string containing your Apple Developer ID Application to enable codesigning on the Mac. Be sure to change it to your own Apple-issued ID."
|
||||
new "## Tetapkan ini kepada rentetan mengandungi Aplikasi ID Pembangun Apple (Apple Developer ID Application) anda untuk membolehkan perekaan bersama di Mac. Pastikan untuk menukarnya kepada ID Apple anda sendiri."
|
||||
|
||||
# options.rpy:209
|
||||
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
|
||||
new "## Kunci lesen Google Play diperlukan untuk memuat turun fail pengembangan dan melakukan pembelian dalam aplikasi. Ia boleh dijumpai di halaman \"Services & APIs\" di konsol pembangun Google Play."
|
||||
|
||||
# options.rpy:216
|
||||
old "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
new "## Nama pengguna dan nama projek yang dikaitkan dengan projek itch.io, dipisahkan dengan tanda palang sendeng (/)."
|
||||
|
||||
@@ -0,0 +1,674 @@
|
||||
translate malay strings:
|
||||
|
||||
# screens.rpy:9
|
||||
old "## Styles"
|
||||
new "## Gaya"
|
||||
|
||||
# screens.rpy:81
|
||||
old "## In-game screens"
|
||||
new "## Skrin dalam permainan"
|
||||
|
||||
# screens.rpy:85
|
||||
old "## Say screen"
|
||||
new "## Skrin sebutan"
|
||||
|
||||
# screens.rpy:87
|
||||
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
new "## Skrin sebutan digunakan untuk memaparkan dialog kepada pemain. Ia mengambil dua parameter, who ialah nama watak yang bercakap, dan what ialah tulisan untuk dipaparkan. (Parameter who boleh ditetapkan kepada None jika tiada nama diberikan.)"
|
||||
|
||||
# screens.rpy:92
|
||||
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
new "## Skrin ini mesti mencipta tulisan yang boleh dipaparkan dengan id \"what\", kerana Ren'Py menggunakan ini untuk mengurus paparan tulisan. Ia juga boleh mencipta paparan dengan id \"who\" dan id \"window\" untuk menggunakan sifat gaya."
|
||||
|
||||
# screens.rpy:96
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
|
||||
# screens.rpy:114
|
||||
old "## If there's a side image, display it above the text. Do not display on the phone variant - there's no room."
|
||||
new "## Jika ada imej sampingan, paparkan ia di atas tulisan. Jangan paparkan ia pada varian telefon - ia tidak cukup ruang."
|
||||
|
||||
# screens.rpy:120
|
||||
old "## Make the namebox available for styling through the Character object."
|
||||
new "## Buatkan kotak nama boleh digayakan melalui objek watak (Character)."
|
||||
|
||||
# screens.rpy:164
|
||||
old "## Input screen"
|
||||
new "## Skrin input"
|
||||
|
||||
# screens.rpy:166
|
||||
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
new "## Skrin ini digunakan untuk memaparkan renpy.input. Parameter prompt digunakan untuk memberikan prom tulisan."
|
||||
|
||||
# screens.rpy:169
|
||||
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
new "## Skrin ini mesti mencipta input yang boleh dipaparkan dengan id \"input\" untuk menerima pelbagai parameter input."
|
||||
|
||||
# screens.rpy:172
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#input"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#input"
|
||||
|
||||
# screens.rpy:199
|
||||
old "## Choice screen"
|
||||
new "## Skrin pilihan"
|
||||
|
||||
# screens.rpy:201
|
||||
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
new "## Skrin ini digunakan untuk memaparkan pilihan dalam permainan yang dipersembahkan melalui kenyataan menu. Satu-satunya parameter, items, ialah senarai objek, setiap satunya dengan medan keterangan dan medan perbuatan."
|
||||
|
||||
# screens.rpy:205
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
|
||||
# screens.rpy:215
|
||||
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
|
||||
new "## Apabila ini ditetapkan kepada true, keterangan menu akan disebut oleh tukang cerita. Apabila false, keterangan menu akan dipaparkan sebagai butang kosong."
|
||||
|
||||
# screens.rpy:238
|
||||
old "## Quick Menu screen"
|
||||
new "## Skrin Menu Cepat"
|
||||
|
||||
# screens.rpy:240
|
||||
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
new "## Menu cepat dipaparkan dalam permainan untuk menyediakan capaian mudah ke menu luar permainan."
|
||||
|
||||
# screens.rpy:245
|
||||
old "## Ensure this appears on top of other screens."
|
||||
new "## Pastikan ini muncuk di atas skrin-skrin lain."
|
||||
|
||||
# screens.rpy:256
|
||||
old "Back"
|
||||
new "Kembali"
|
||||
|
||||
# screens.rpy:257
|
||||
old "History"
|
||||
new "Sejarah"
|
||||
|
||||
# screens.rpy:258
|
||||
old "Skip"
|
||||
new "Langkau"
|
||||
|
||||
# screens.rpy:259
|
||||
old "Auto"
|
||||
new "Auto"
|
||||
|
||||
# screens.rpy:260
|
||||
old "Save"
|
||||
new "Simpan"
|
||||
|
||||
# screens.rpy:261
|
||||
old "Q.Save"
|
||||
new "C.Simpan"
|
||||
|
||||
# screens.rpy:262
|
||||
old "Q.Load"
|
||||
new "C.Muat"
|
||||
|
||||
# screens.rpy:263
|
||||
old "Prefs"
|
||||
new "Keutamaan"
|
||||
|
||||
# screens.rpy:266
|
||||
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
new "## Kod ini memastikan skrin quick_menu dipaparkan dalam permainan, apabila pemain tidak menyembunyikan antara muka secara khusus."
|
||||
|
||||
# screens.rpy:284
|
||||
old "## Main and Game Menu Screens"
|
||||
new "## Skrin Menu Utama dan Permainan"
|
||||
|
||||
# screens.rpy:287
|
||||
old "## Navigation screen"
|
||||
new "## Skrin Navigasi"
|
||||
|
||||
# screens.rpy:289
|
||||
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
new "## Skrin ini disertakan dalam menu utama dan permainan, dan menyediakan navigasi ke menu lain, dan untuk memulakan permainan."
|
||||
|
||||
# screens.rpy:304
|
||||
old "Start"
|
||||
new "Mula"
|
||||
|
||||
# screens.rpy:312
|
||||
old "Load"
|
||||
new "Muat"
|
||||
|
||||
# screens.rpy:314
|
||||
old "Preferences"
|
||||
new "Keutamaan"
|
||||
|
||||
# screens.rpy:318
|
||||
old "End Replay"
|
||||
new "Tamatkan Ulang Tayang"
|
||||
|
||||
# screens.rpy:322
|
||||
old "Main Menu"
|
||||
new "Menu Utama"
|
||||
|
||||
# screens.rpy:324
|
||||
old "About"
|
||||
new "Perihal"
|
||||
|
||||
# screens.rpy:328
|
||||
old "## Help isn't necessary or relevant to mobile devices."
|
||||
new "## Bantuan tidak diperlukan atau sesuai untuk peranti mudah alih."
|
||||
|
||||
# screens.rpy:329
|
||||
old "Help"
|
||||
new "Bantuan"
|
||||
|
||||
# screens.rpy:331
|
||||
old "## The quit button is banned on iOS and unnecessary on Android."
|
||||
new "## Butang keluar tidak dibenarkan di iOS dan tidak diperlukan di Android."
|
||||
|
||||
# screens.rpy:332
|
||||
old "Quit"
|
||||
new "Keluar"
|
||||
|
||||
# screens.rpy:346
|
||||
old "## Main Menu screen"
|
||||
new "## Skrin Menu Utama"
|
||||
|
||||
# screens.rpy:348
|
||||
old "## Used to display the main menu when Ren'Py starts."
|
||||
new "## Digunakan untuk memaparkan menu utama apabila Ren'Py dimulakan."
|
||||
|
||||
# screens.rpy:350
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
|
||||
# screens.rpy:354
|
||||
old "## This ensures that any other menu screen is replaced."
|
||||
new "## Ini memastikan sebarang skrin menu lain digantikan."
|
||||
|
||||
# screens.rpy:361
|
||||
old "## This empty frame darkens the main menu."
|
||||
new "## Bingkai kosong ini menggelapkan menu utama."
|
||||
|
||||
# screens.rpy:365
|
||||
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
new "## Kenyataan use memasukkan skrin lain ke dalam skrin ini. Kandungan sebenar menu utama ada dalam skrin navigasi."
|
||||
|
||||
# screens.rpy:408
|
||||
old "## Game Menu screen"
|
||||
new "## Skrin Menu Permainan"
|
||||
|
||||
# screens.rpy:410
|
||||
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
new "## Ini meletakkan struktur biasa asas untuk skrin menu permainan. Ia dipanggil dengan tajuk skrin, dan memaparkan latar belakang, tajuk, dan navigasi."
|
||||
|
||||
# screens.rpy:413
|
||||
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
new "## Parameter tatal boleh jadi None, atau salah satu dari \"viewport\" atau \"vpgrid\". Apabila skrin ini bertujuan untuk digunakan dengan satu atau lebih anak, yang mana mereka ditransklusikan (diletakkan) ke dalamnya."
|
||||
|
||||
# screens.rpy:431
|
||||
old "## Reserve space for the navigation section."
|
||||
new "## Menyimpan ruang untuk bahagian navigasi."
|
||||
|
||||
# screens.rpy:473
|
||||
old "Return"
|
||||
new "Kembali"
|
||||
|
||||
# screens.rpy:536
|
||||
old "## About screen"
|
||||
new "## Skrin perihal"
|
||||
|
||||
# screens.rpy:538
|
||||
old "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
new "## Skrin ini memberi penghargaan dan maklumat hak cipta berkaitan permainan dan Ren'Py."
|
||||
|
||||
# screens.rpy:541
|
||||
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
new "## Tiada apa istimewa dengan skrin ini, dan sebab itu ia dikekalkan sebagai contoh cara membuat skrin sendiri."
|
||||
|
||||
# screens.rpy:548
|
||||
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
new "## Kenyataan use ini memasukkan skrin game_menu ke dalam skrin ini. Anak vbox kemudiannya dimasukkan ke dalam port pandang dalam skrin game_menu."
|
||||
|
||||
# screens.rpy:558
|
||||
old "Version [config.version!t]\n"
|
||||
new "Versi [config.version!t]\n"
|
||||
|
||||
# screens.rpy:560
|
||||
old "## gui.about is usually set in options.rpy."
|
||||
new "## gui.about selalunya ditetapkan di options.rpy."
|
||||
|
||||
# screens.rpy:564
|
||||
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
new "Dibuat menggunakan {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
|
||||
# screens.rpy:567
|
||||
old "## This is redefined in options.rpy to add text to the about screen."
|
||||
new "## Benda ini ditakrifkan semula di options.rpy untuk menambah tulisan ke skrin perihalan."
|
||||
|
||||
# screens.rpy:579
|
||||
old "## Load and Save screens"
|
||||
new "## Muat dan Simpan skrin"
|
||||
|
||||
# screens.rpy:581
|
||||
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
|
||||
new "## Skrin-skrin ini bertanggungjawab untuk membolehkan pemain menyimpan dan memuatkan permainan. Memandangkan mereka berkongsi hampir semua benda, kedua-duanya dilaksanakan dengan cara skrin ketiga, file_slots."
|
||||
|
||||
# screens.rpy:585
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
|
||||
|
||||
# screens.rpy:604
|
||||
old "Page {}"
|
||||
new "Halaman {}"
|
||||
|
||||
# screens.rpy:604
|
||||
old "Automatic saves"
|
||||
new "Simpan automatik"
|
||||
|
||||
# screens.rpy:604
|
||||
old "Quick saves"
|
||||
new "Simpan cepat"
|
||||
|
||||
# screens.rpy:610
|
||||
old "## This ensures the input will get the enter event before any of the buttons do."
|
||||
new "## Ini memastikan input mendapat acara masuk sebelum sebarang butang lain."
|
||||
|
||||
# screens.rpy:614
|
||||
old "## The page name, which can be edited by clicking on a button."
|
||||
new "## Nama halaman, yang boleh disunting dengan menekan butang."
|
||||
|
||||
# screens.rpy:626
|
||||
old "## The grid of file slots."
|
||||
new "## Grid slot fail."
|
||||
|
||||
# screens.rpy:646
|
||||
old "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
new "{#file_time}%A, %d %B %Y, %H:%M"
|
||||
|
||||
# screens.rpy:646
|
||||
old "empty slot"
|
||||
new "slot kosong"
|
||||
|
||||
# screens.rpy:654
|
||||
old "## Buttons to access other pages."
|
||||
new "## Butang untuk mencapai halaman lain."
|
||||
|
||||
# screens.rpy:663
|
||||
old "<"
|
||||
new "<"
|
||||
|
||||
# screens.rpy:666
|
||||
old "{#auto_page}A"
|
||||
new "{#auto_page}A"
|
||||
|
||||
# screens.rpy:669
|
||||
old "{#quick_page}Q"
|
||||
new "{#quick_page}Q"
|
||||
|
||||
# screens.rpy:671
|
||||
old "## range(1, 10) gives the numbers from 1 to 9."
|
||||
new "## range(1, 10) memberikan nombor dari 1 hingga 9."
|
||||
|
||||
# screens.rpy:675
|
||||
old ">"
|
||||
new ">"
|
||||
|
||||
# screens.rpy:710
|
||||
old "## Preferences screen"
|
||||
new "## Skrin keutamaan"
|
||||
|
||||
# screens.rpy:712
|
||||
old "## The preferences screen allows the player to configure the game to better suit themselves."
|
||||
new "## Skrin keutamaan membolehkan pemain untuk menatarajah permainan agar lebih selesa dengan diri mereka."
|
||||
|
||||
# screens.rpy:715
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#preferences"
|
||||
|
||||
# screens.rpy:732
|
||||
old "Display"
|
||||
new "Paparan"
|
||||
|
||||
# screens.rpy:733
|
||||
old "Window"
|
||||
new "Tetingkap"
|
||||
|
||||
# screens.rpy:734
|
||||
old "Fullscreen"
|
||||
new "Skrin Penuh"
|
||||
|
||||
# screens.rpy:738
|
||||
old "Rollback Side"
|
||||
new "Bahagian Undur"
|
||||
|
||||
# screens.rpy:739
|
||||
old "Disable"
|
||||
new "Lumpuhkan"
|
||||
|
||||
# screens.rpy:740
|
||||
old "Left"
|
||||
new "Kiri"
|
||||
|
||||
# screens.rpy:741
|
||||
old "Right"
|
||||
new "Kanan"
|
||||
|
||||
# screens.rpy:746
|
||||
old "Unseen Text"
|
||||
new "Teks Belum Lihat"
|
||||
|
||||
# screens.rpy:747
|
||||
old "After Choices"
|
||||
new "Lepas Pilihan"
|
||||
|
||||
# screens.rpy:748
|
||||
old "Transitions"
|
||||
new "Lepas Peralihan"
|
||||
|
||||
# screens.rpy:750
|
||||
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
new "## Vbox tambahan jenis \"radio_pref\" atau \"check_pref\" boleh ditambah di sini, untuk menambah keutamaan ditakrifkan oleh pencipta permainan."
|
||||
|
||||
# screens.rpy:761
|
||||
old "Text Speed"
|
||||
new "Kelajuan Tulisan"
|
||||
|
||||
# screens.rpy:765
|
||||
old "Auto-Forward Time"
|
||||
new "Masa untuk Gerak Sendiri"
|
||||
|
||||
# screens.rpy:772
|
||||
old "Music Volume"
|
||||
new "Kekuatan Muzik"
|
||||
|
||||
# screens.rpy:779
|
||||
old "Sound Volume"
|
||||
new "Kekuatan Bunyi"
|
||||
|
||||
# screens.rpy:785
|
||||
old "Test"
|
||||
new "Cuba"
|
||||
|
||||
# screens.rpy:789
|
||||
old "Voice Volume"
|
||||
new "Kekuatan Suara"
|
||||
|
||||
# screens.rpy:800
|
||||
old "Mute All"
|
||||
new "Bisukan SEMUA"
|
||||
|
||||
# screens.rpy:876
|
||||
old "## History screen"
|
||||
new "## Skrin Sejarah"
|
||||
|
||||
# screens.rpy:878
|
||||
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
new "## Ini skrin yang memaparkan sejarah dialog kepada pemain. Walaupun tiada apa yang istimewa dengan skrin ini, ia mempunyai capaian ke sejarah dialog dalam _history_list."
|
||||
|
||||
# screens.rpy:882
|
||||
old "## https://www.renpy.org/doc/html/history.html"
|
||||
new "## https://www.renpy.org/doc/html/history.html"
|
||||
|
||||
# screens.rpy:888
|
||||
old "## Avoid predicting this screen, as it can be very large."
|
||||
new "## Mengelakkan ramalan skrin ini, kerana ia boleh jadi sangat besar."
|
||||
|
||||
# screens.rpy:899
|
||||
old "## This lays things out properly if history_height is None."
|
||||
new "## Ini meletakkan semua benda dengan elok jika history_height ditetapkan ke None."
|
||||
|
||||
# screens.rpy:908
|
||||
old "## Take the color of the who text from the Character, if set."
|
||||
new "## Mengambil warna tulisan 'who' dari objek watak (Character), jika ia ditetapkan."
|
||||
|
||||
# screens.rpy:916
|
||||
old "The dialogue history is empty."
|
||||
new "Sejarah dialog kosong."
|
||||
|
||||
# screens.rpy:919
|
||||
old "## This determines what tags are allowed to be displayed on the history screen."
|
||||
new "## Ini menentukan tag apa yang dibenarkan untuk dipaparkan di skrin sejarah."
|
||||
|
||||
# screens.rpy:966
|
||||
old "## Help screen"
|
||||
new "## Skrin Bantuan"
|
||||
|
||||
# screens.rpy:968
|
||||
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
new "## Skrin yang memberikan maklumat berkaitan pengikatan kekunci dan tetikus. Ia menggunakan skrin lain (keyboard_help, mouse_help, dan gamepad_help) untuk memaparkan bantuan sebenar."
|
||||
|
||||
# screens.rpy:987
|
||||
old "Keyboard"
|
||||
new "Papan Kekunci"
|
||||
|
||||
# screens.rpy:988
|
||||
old "Mouse"
|
||||
new "Tetikus"
|
||||
|
||||
# screens.rpy:991
|
||||
old "Gamepad"
|
||||
new "Pad Permainan"
|
||||
|
||||
# screens.rpy:1004
|
||||
old "Enter"
|
||||
new "Enter"
|
||||
|
||||
# screens.rpy:1005
|
||||
old "Advances dialogue and activates the interface."
|
||||
new "Menggerakkan dialog dan mengaktifkan antara muka."
|
||||
|
||||
# screens.rpy:1008
|
||||
old "Space"
|
||||
new "Space"
|
||||
|
||||
# screens.rpy:1009
|
||||
old "Advances dialogue without selecting choices."
|
||||
new "Menggerakkan dialog tanpa memilih pilihan."
|
||||
|
||||
# screens.rpy:1012
|
||||
old "Arrow Keys"
|
||||
new "Kekunci Anak Panah"
|
||||
|
||||
# screens.rpy:1013
|
||||
old "Navigate the interface."
|
||||
new "Melayar antara muka."
|
||||
|
||||
# screens.rpy:1016
|
||||
old "Escape"
|
||||
new "Escape"
|
||||
|
||||
# screens.rpy:1017
|
||||
old "Accesses the game menu."
|
||||
new "Mencapai menu permainan."
|
||||
|
||||
# screens.rpy:1020
|
||||
old "Ctrl"
|
||||
new "Ctrl"
|
||||
|
||||
# screens.rpy:1021
|
||||
old "Skips dialogue while held down."
|
||||
new "Langkau dialog apabila ditekan."
|
||||
|
||||
# screens.rpy:1024
|
||||
old "Tab"
|
||||
new "Tab"
|
||||
|
||||
# screens.rpy:1025
|
||||
old "Toggles dialogue skipping."
|
||||
new "Menogol langkauan dialog."
|
||||
|
||||
# screens.rpy:1028
|
||||
old "Page Up"
|
||||
new "Page Up"
|
||||
|
||||
# screens.rpy:1029
|
||||
old "Rolls back to earlier dialogue."
|
||||
new "Bergerak ke dialog sebelumnya."
|
||||
|
||||
# screens.rpy:1032
|
||||
old "Page Down"
|
||||
new "Page Down"
|
||||
|
||||
# screens.rpy:1033
|
||||
old "Rolls forward to later dialogue."
|
||||
new "Bergerak ke dialog seterusnya."
|
||||
|
||||
# screens.rpy:1037
|
||||
old "Hides the user interface."
|
||||
new "Menyembunyikan antara muka pengguna."
|
||||
|
||||
# screens.rpy:1041
|
||||
old "Takes a screenshot."
|
||||
new "Mengambil tangkap skrin."
|
||||
|
||||
# screens.rpy:1045
|
||||
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
new "Menogol {a=https://www.renpy.org/l/voicing}penyuaraan sendiri{/a} yang membantu."
|
||||
|
||||
# screens.rpy:1051
|
||||
old "Left Click"
|
||||
new "Klik Kiri"
|
||||
|
||||
# screens.rpy:1055
|
||||
old "Middle Click"
|
||||
new "Klik Tengah"
|
||||
|
||||
# screens.rpy:1059
|
||||
old "Right Click"
|
||||
new "Klik Kanan"
|
||||
|
||||
# screens.rpy:1063
|
||||
old "Mouse Wheel Up\nClick Rollback Side"
|
||||
new "Tatal Ke Atas\nKlik Sisi Undur"
|
||||
|
||||
# screens.rpy:1067
|
||||
old "Mouse Wheel Down"
|
||||
new "Tatal Ke Bawah"
|
||||
|
||||
# screens.rpy:1074
|
||||
old "Right Trigger\nA/Bottom Button"
|
||||
new "Picu Kanan\nA/Butang Bawah"
|
||||
|
||||
# screens.rpy:1078
|
||||
old "Left Trigger\nLeft Shoulder"
|
||||
new "Picu Kiri\nBahu Kiri (L1)"
|
||||
|
||||
# screens.rpy:1082
|
||||
old "Right Shoulder"
|
||||
new "Bahu Kanan (R1)"
|
||||
|
||||
# screens.rpy:1087
|
||||
old "D-Pad, Sticks"
|
||||
new "D-Pad (Butang Arah), Kayu Bedik"
|
||||
|
||||
# screens.rpy:1091
|
||||
old "Start, Guide"
|
||||
new "Butang Start, Guide"
|
||||
|
||||
# screens.rpy:1095
|
||||
old "Y/Top Button"
|
||||
new "Y/Butang Atas"
|
||||
|
||||
# screens.rpy:1098
|
||||
old "Calibrate"
|
||||
new "Tentuukur"
|
||||
|
||||
# screens.rpy:1126
|
||||
old "## Additional screens"
|
||||
new "## Skrin tambahan"
|
||||
|
||||
# screens.rpy:1130
|
||||
old "## Confirm screen"
|
||||
new "## Skrin pengesahan"
|
||||
|
||||
# screens.rpy:1132
|
||||
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
new "## Skrin pengesahan dipanggil apabila Ren'Py ingin bertanya pemain soalan ya atau tidak."
|
||||
|
||||
# screens.rpy:1135
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
|
||||
# screens.rpy:1139
|
||||
old "## Ensure other screens do not get input while this screen is displayed."
|
||||
new "## Memastikan skrin-skrin lain tidak mendapat input apabila skrin ini dipaparkan."
|
||||
|
||||
# screens.rpy:1163
|
||||
old "Yes"
|
||||
new "Ya"
|
||||
|
||||
# screens.rpy:1164
|
||||
old "No"
|
||||
new "Tidak"
|
||||
|
||||
# screens.rpy:1166
|
||||
old "## Right-click and escape answer \"no\"."
|
||||
new "## Klik-kanan dan keluar menjawab \"tidak\"."
|
||||
|
||||
# screens.rpy:1193
|
||||
old "## Skip indicator screen"
|
||||
new "## Skrin Penunjuk Langkau"
|
||||
|
||||
# screens.rpy:1195
|
||||
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
new "## Skrin skip_indicator dipaparkan untuk menandakan pelangkauan sedang dilakukan."
|
||||
|
||||
# screens.rpy:1198
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
|
||||
# screens.rpy:1210
|
||||
old "Skipping"
|
||||
new "Melangkau"
|
||||
|
||||
# screens.rpy:1217
|
||||
old "## This transform is used to blink the arrows one after another."
|
||||
new "## Peralihan ini digunakan untuk mengerdipkan anak panah satu selepas satu."
|
||||
|
||||
# screens.rpy:1244
|
||||
old "## We have to use a font that has the BLACK RIGHT-POINTING SMALL TRIANGLE glyph in it."
|
||||
new "## Kami perlu menggunakan fon yang mempunyai glif bernama BLACK RIGHT-POINTING SMALL TRIANGLE (segi tiga kecil hitam menunjuk ke kanan) di dalamnya."
|
||||
|
||||
# screens.rpy:1249
|
||||
old "## Notify screen"
|
||||
new "## Skrin Pemberitahuan"
|
||||
|
||||
# screens.rpy:1251
|
||||
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
new "## Skrin pemberitahuan digunakan untuk menunjukkan mesej kepada pemain. (Contohnya, apabila permainan disimpan cepat atau tangkap skrin telah diambil.)"
|
||||
|
||||
# screens.rpy:1254
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
|
||||
# screens.rpy:1288
|
||||
old "## NVL screen"
|
||||
new "## Skrin NVL"
|
||||
|
||||
# screens.rpy:1290
|
||||
old "## This screen is used for NVL-mode dialogue and menus."
|
||||
new "## Skrin ini digunakan untuk dialog dan menu mod NVL."
|
||||
|
||||
# screens.rpy:1292
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#nvl"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#nvl"
|
||||
|
||||
# screens.rpy:1303
|
||||
old "## Displays dialogue in either a vpgrid or the vbox."
|
||||
new "## Memaparkan dialog sama ada dalam vpgrid atau vbox."
|
||||
|
||||
# screens.rpy:1316
|
||||
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
|
||||
new "## Memaparkan menu, sekiranya diberi. Menu mungkin dipaparkan dengan salah jika config.narrator_menu ditetapkan ke True, seperti di atas."
|
||||
|
||||
# screens.rpy:1346
|
||||
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
new "## Ini mengawal jumlah maksimum entri mod NVL yang boleh dipaparkan dalam sesuatu masa."
|
||||
|
||||
# screens.rpy:1408
|
||||
old "## Mobile Variants"
|
||||
new "## Varian Mudah Alih"
|
||||
|
||||
# screens.rpy:1415
|
||||
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
|
||||
new "## Memandangkan tetikus tidak semestinya ada, kami menggantikan menu cepat dengan versi yang menggunakan sedikit butang dan butang lebih besar agar lebih mudah disentuh."
|
||||
|
||||
# screens.rpy:1431
|
||||
old "Menu"
|
||||
new "Menu"
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Skrip permainan masuk ke dalam fail ini.
|
||||
|
||||
# Isytiharkan watak yang digunakan dalam permainan ini.
|
||||
# Argumen color mewarnakan nama watak.
|
||||
|
||||
define e = Character("Eileen")
|
||||
|
||||
|
||||
# Permainan bermula di sini.
|
||||
|
||||
label start:
|
||||
|
||||
# Tunjukkan latar belakang. Ini menggunakan sandaran secara lalainya,
|
||||
# namun anda boleh menambah fail (dinamakan "bg room.png" atau "bg room.jpg")
|
||||
# ke direktori images untuk menunjukkannya.
|
||||
|
||||
scene bg room
|
||||
|
||||
# Ini menunjukkan peperi watak. Sandaran digunakan, tetapi anda boleh
|
||||
# menggantikannya dengan menambah fail bernama "eileen happy.png"
|
||||
# ke dalam direktori images.
|
||||
|
||||
show eileen happy
|
||||
|
||||
# Ini memaparkan baris dialog.
|
||||
|
||||
e "Anda telah mencipta sebuah permainan Ren'Py baru."
|
||||
|
||||
e "Setelah anda menambah cerita, gambar, dan muzik, anda boleh menerbitkannya untuk semua!"
|
||||
|
||||
# Ini menamatkan permainan.
|
||||
|
||||
return
|
||||
@@ -0,0 +1,2 @@
|
||||
translate malay python:
|
||||
gui.FONT_SCALE = .9
|
||||
@@ -153,51 +153,51 @@ translate piglatin strings:
|
||||
old "{#month_short}Dec"
|
||||
new "{#month_short}Ecday"
|
||||
|
||||
# 00action_file.rpy:237
|
||||
# 00action_file.rpy:240
|
||||
old "%b %d, %H:%M"
|
||||
new "%bay %day, %Hay:%May"
|
||||
|
||||
# 00action_file.rpy:345
|
||||
# 00action_file.rpy:353
|
||||
old "Save slot %s: [text]"
|
||||
new "Avesay otslay %say: [text]"
|
||||
|
||||
# 00action_file.rpy:421
|
||||
# 00action_file.rpy:434
|
||||
old "Load slot %s: [text]"
|
||||
new "Oadlay otslay %say: [text]"
|
||||
|
||||
# 00action_file.rpy:466
|
||||
# 00action_file.rpy:487
|
||||
old "Delete slot [text]"
|
||||
new "Eleteday otslay [text]"
|
||||
|
||||
# 00action_file.rpy:546
|
||||
# 00action_file.rpy:569
|
||||
old "File page auto"
|
||||
new "Ilefay agepay autoay"
|
||||
|
||||
# 00action_file.rpy:548
|
||||
# 00action_file.rpy:571
|
||||
old "File page quick"
|
||||
new "Ilefay agepay uickqay"
|
||||
|
||||
# 00action_file.rpy:550
|
||||
# 00action_file.rpy:573
|
||||
old "File page [text]"
|
||||
new "Ilefay agepay [text]"
|
||||
|
||||
# 00action_file.rpy:740
|
||||
# 00action_file.rpy:763
|
||||
old "Next file page."
|
||||
new "Extnay ilefay agepay."
|
||||
|
||||
# 00action_file.rpy:804
|
||||
# 00action_file.rpy:827
|
||||
old "Previous file page."
|
||||
new "Reviouspay ilefay agepay."
|
||||
|
||||
# 00action_file.rpy:865
|
||||
# 00action_file.rpy:888
|
||||
old "Quick save complete."
|
||||
new "Uickqay avesay ompletecay."
|
||||
|
||||
# 00action_file.rpy:883
|
||||
# 00action_file.rpy:906
|
||||
old "Quick save."
|
||||
new "Uickqay avesay."
|
||||
|
||||
# 00action_file.rpy:902
|
||||
# 00action_file.rpy:925
|
||||
old "Quick load."
|
||||
new "Uickqay oadlay."
|
||||
|
||||
@@ -209,91 +209,91 @@ translate piglatin strings:
|
||||
old "The interactive director is not enabled here."
|
||||
new "Hetay interactiveay irectorday isay otnay enableday erehay."
|
||||
|
||||
# 00director.rpy:1478
|
||||
# 00director.rpy:1481
|
||||
old "⬆"
|
||||
new "⬆"
|
||||
|
||||
# 00director.rpy:1484
|
||||
# 00director.rpy:1487
|
||||
old "⬇"
|
||||
new "⬇"
|
||||
|
||||
# 00director.rpy:1548
|
||||
# 00director.rpy:1551
|
||||
old "Done"
|
||||
new "Oneday"
|
||||
|
||||
# 00director.rpy:1558
|
||||
# 00director.rpy:1561
|
||||
old "(statement)"
|
||||
new "(atementstay)"
|
||||
|
||||
# 00director.rpy:1559
|
||||
# 00director.rpy:1562
|
||||
old "(tag)"
|
||||
new "(agtay)"
|
||||
|
||||
# 00director.rpy:1560
|
||||
# 00director.rpy:1563
|
||||
old "(attributes)"
|
||||
new "(attributesay)"
|
||||
|
||||
# 00director.rpy:1561
|
||||
# 00director.rpy:1564
|
||||
old "(transform)"
|
||||
new "(ansformtray)"
|
||||
|
||||
# 00director.rpy:1586
|
||||
# 00director.rpy:1589
|
||||
old "(transition)"
|
||||
new "(ansitiontray)"
|
||||
|
||||
# 00director.rpy:1598
|
||||
# 00director.rpy:1601
|
||||
old "(channel)"
|
||||
new "(annelchay)"
|
||||
|
||||
# 00director.rpy:1599
|
||||
# 00director.rpy:1602
|
||||
old "(filename)"
|
||||
new "(ilenamefay)"
|
||||
|
||||
# 00director.rpy:1628
|
||||
# 00director.rpy:1631
|
||||
old "Change"
|
||||
new "Hangecay"
|
||||
|
||||
# 00director.rpy:1630
|
||||
# 00director.rpy:1633
|
||||
old "Add"
|
||||
new "Ddaay"
|
||||
|
||||
# 00director.rpy:1633
|
||||
# 00director.rpy:1636
|
||||
old "Cancel"
|
||||
new "Ancelcay"
|
||||
|
||||
# 00director.rpy:1636
|
||||
# 00director.rpy:1639
|
||||
old "Remove"
|
||||
new "Emoveray"
|
||||
|
||||
# 00director.rpy:1671
|
||||
# 00director.rpy:1674
|
||||
old "Statement:"
|
||||
new "Tatementsay:"
|
||||
|
||||
# 00director.rpy:1692
|
||||
# 00director.rpy:1695
|
||||
old "Tag:"
|
||||
new "Agtay:"
|
||||
|
||||
# 00director.rpy:1708
|
||||
# 00director.rpy:1711
|
||||
old "Attributes:"
|
||||
new "Ttributesaay:"
|
||||
|
||||
# 00director.rpy:1726
|
||||
# 00director.rpy:1729
|
||||
old "Transforms:"
|
||||
new "Ransformstay:"
|
||||
|
||||
# 00director.rpy:1745
|
||||
# 00director.rpy:1748
|
||||
old "Behind:"
|
||||
new "Ehindbay:"
|
||||
|
||||
# 00director.rpy:1764
|
||||
# 00director.rpy:1767
|
||||
old "Transition:"
|
||||
new "Ransitiontay:"
|
||||
|
||||
# 00director.rpy:1782
|
||||
# 00director.rpy:1785
|
||||
old "Channel:"
|
||||
new "Hannelcay:"
|
||||
|
||||
# 00director.rpy:1800
|
||||
# 00director.rpy:1803
|
||||
old "Audio Filename:"
|
||||
new "Udioaay Ilenamefay:"
|
||||
|
||||
@@ -561,95 +561,95 @@ translate piglatin strings:
|
||||
old "Contacting App Store\nPlease Wait..."
|
||||
new "Ontactingcay Ppaay Toresay\nLeasepay Aitway..."
|
||||
|
||||
# 00updater.rpy:372
|
||||
# 00updater.rpy:375
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "Hetay Enray'Ypay Pdateruay isay otnay upportedsay onay obilemay evicesday."
|
||||
|
||||
# 00updater.rpy:491
|
||||
# 00updater.rpy:494
|
||||
old "An error is being simulated."
|
||||
new "Naay erroray isay eingbay imulatedsay."
|
||||
|
||||
# 00updater.rpy:672
|
||||
# 00updater.rpy:678
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "Ithereay histay rojectpay oesday otnay upportsay updatingay, oray hetay updateay atusstay ilefay asway eletedday."
|
||||
|
||||
# 00updater.rpy:686
|
||||
# 00updater.rpy:692
|
||||
old "This account does not have permission to perform an update."
|
||||
new "Histay accountay oesday otnay avehay ermissionpay otay erformpay anay updateay."
|
||||
|
||||
# 00updater.rpy:689
|
||||
# 00updater.rpy:695
|
||||
old "This account does not have permission to write the update log."
|
||||
new "Histay accountay oesday otnay avehay ermissionpay otay riteway hetay updateay oglay."
|
||||
|
||||
# 00updater.rpy:716
|
||||
# 00updater.rpy:722
|
||||
old "Could not verify update signature."
|
||||
new "Ouldcay otnay erifyvay updateay ignaturesay."
|
||||
|
||||
# 00updater.rpy:991
|
||||
# 00updater.rpy:997
|
||||
old "The update file was not downloaded."
|
||||
new "Hetay updateay ilefay asway otnay ownloadedday."
|
||||
|
||||
# 00updater.rpy:1009
|
||||
# 00updater.rpy:1015
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "Hetay updateay ilefay oesday otnay avehay hetay orrectcay igestday - itay aymay avehay eenbay orruptedcay."
|
||||
|
||||
# 00updater.rpy:1065
|
||||
# 00updater.rpy:1071
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "Hileway unpackingay {}, unknownay ypetay {}."
|
||||
|
||||
# 00updater.rpy:1412
|
||||
# 00updater.rpy:1439
|
||||
old "Updater"
|
||||
new "Pdateruay"
|
||||
|
||||
# 00updater.rpy:1423
|
||||
# 00updater.rpy:1450
|
||||
old "This program is up to date."
|
||||
new "Histay rogrampay isay upay otay ateday."
|
||||
|
||||
# 00updater.rpy:1425
|
||||
# 00updater.rpy:1452
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] isay availableay. Oday ouyay antway otay installay itay?"
|
||||
|
||||
# 00updater.rpy:1427
|
||||
# 00updater.rpy:1454
|
||||
old "Preparing to download the updates."
|
||||
new "Reparingpay otay ownloadday hetay updatesay."
|
||||
|
||||
# 00updater.rpy:1429
|
||||
# 00updater.rpy:1456
|
||||
old "Downloading the updates."
|
||||
new "Ownloadingday hetay updatesay."
|
||||
|
||||
# 00updater.rpy:1431
|
||||
# 00updater.rpy:1458
|
||||
old "Unpacking the updates."
|
||||
new "Npackinguay hetay updatesay."
|
||||
|
||||
# 00updater.rpy:1435
|
||||
# 00updater.rpy:1462
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "Hetay updatesay avehay eenbay installeday. Hetay rogrampay illway estartray."
|
||||
|
||||
# 00updater.rpy:1437
|
||||
# 00updater.rpy:1464
|
||||
old "The updates have been installed."
|
||||
new "Hetay updatesay avehay eenbay installeday."
|
||||
|
||||
# 00updater.rpy:1439
|
||||
# 00updater.rpy:1466
|
||||
old "The updates were cancelled."
|
||||
new "Hetay updatesay ereway ancelledcay."
|
||||
|
||||
# 00gallery.rpy:573
|
||||
# 00gallery.rpy:585
|
||||
old "Image [index] of [count] locked."
|
||||
new "Mageiay [index] ofay [count] ockedlay."
|
||||
|
||||
# 00gallery.rpy:593
|
||||
# 00gallery.rpy:605
|
||||
old "prev"
|
||||
new "revpay"
|
||||
|
||||
# 00gallery.rpy:594
|
||||
# 00gallery.rpy:606
|
||||
old "next"
|
||||
new "extnay"
|
||||
|
||||
# 00gallery.rpy:595
|
||||
# 00gallery.rpy:607
|
||||
old "slideshow"
|
||||
new "ideshowslay"
|
||||
|
||||
# 00gallery.rpy:596
|
||||
# 00gallery.rpy:608
|
||||
old "return"
|
||||
new "eturnray"
|
||||
|
||||
|
||||
@@ -37,55 +37,67 @@ translate piglatin strings:
|
||||
old "Hide Image Load Log (F4)"
|
||||
new "Idehay Mageiay Oadlay Oglay (4fay)"
|
||||
|
||||
# _developer/developer.rpym:95
|
||||
# _developer/developer.rpym:63
|
||||
old "Image Attributes"
|
||||
new "Mageiay Ttributesaay"
|
||||
|
||||
# _developer/developer.rpym:90
|
||||
old "[name] [attributes] (hidden)"
|
||||
new "[name] [attributes] (iddenhay)"
|
||||
|
||||
# _developer/developer.rpym:94
|
||||
old "[name] [attributes]"
|
||||
new "[name] [attributes]"
|
||||
|
||||
# _developer/developer.rpym:137
|
||||
old "Nothing to inspect."
|
||||
new "Othingnay otay inspectay."
|
||||
|
||||
# _developer/developer.rpym:223
|
||||
# _developer/developer.rpym:265
|
||||
old "Return to the developer menu"
|
||||
new "Eturnray otay hetay eveloperday enumay"
|
||||
|
||||
# _developer/developer.rpym:383
|
||||
# _developer/developer.rpym:425
|
||||
old "Rectangle: %r"
|
||||
new "Ectangleray: %ray"
|
||||
|
||||
# _developer/developer.rpym:388
|
||||
# _developer/developer.rpym:430
|
||||
old "Mouse position: %r"
|
||||
new "Ousemay ositionpay: %ray"
|
||||
|
||||
# _developer/developer.rpym:393
|
||||
# _developer/developer.rpym:435
|
||||
old "Right-click or escape to quit."
|
||||
new "Ightray-ickclay oray escapeay otay uitqay."
|
||||
|
||||
# _developer/developer.rpym:425
|
||||
# _developer/developer.rpym:467
|
||||
old "Rectangle copied to clipboard."
|
||||
new "Ectangleray opiedcay otay ipboardclay."
|
||||
|
||||
# _developer/developer.rpym:428
|
||||
# _developer/developer.rpym:470
|
||||
old "Position copied to clipboard."
|
||||
new "Ositionpay opiedcay otay ipboardclay."
|
||||
|
||||
# _developer/developer.rpym:447
|
||||
# _developer/developer.rpym:489
|
||||
old "Type to filter: "
|
||||
new "Ypetay otay ilterfay: "
|
||||
|
||||
# _developer/developer.rpym:575
|
||||
# _developer/developer.rpym:617
|
||||
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
|
||||
new "Exturestay: [tex_count] ([tex_size_mb:.1f] Bmay)"
|
||||
|
||||
# _developer/developer.rpym:579
|
||||
# _developer/developer.rpym:621
|
||||
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
|
||||
new "Mageiay achecay: [cache_pct:.1f]% ([cache_size_mb:.1f] Bmay)"
|
||||
|
||||
# _developer/developer.rpym:589
|
||||
# _developer/developer.rpym:631
|
||||
old "✔ "
|
||||
new "✔ "
|
||||
|
||||
# _developer/developer.rpym:592
|
||||
# _developer/developer.rpym:634
|
||||
old "✘ "
|
||||
new "✘ "
|
||||
|
||||
# _developer/developer.rpym:597
|
||||
# _developer/developer.rpym:639
|
||||
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
new "\n{color=#cfc}✔ redictedpay imageay (oodgay){/color}\n{color=#fcc}✘ unpredicteday imageay (adbay){/color}\n{color=#fff}Ragday otay ovemay.{/color}"
|
||||
|
||||
|
||||
@@ -141,75 +141,75 @@ translate piglatin strings:
|
||||
old "Back (B)"
|
||||
new "Ackbay (Bay)"
|
||||
|
||||
# _errorhandling.rpym:528
|
||||
# _errorhandling.rpym:529
|
||||
old "Open"
|
||||
new "Penoay"
|
||||
|
||||
# _errorhandling.rpym:530
|
||||
# _errorhandling.rpym:531
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "Pensoay hetay acebacktray.xttay ilefay inay aay exttay editoray."
|
||||
|
||||
# _errorhandling.rpym:532
|
||||
# _errorhandling.rpym:533
|
||||
old "Copy"
|
||||
new "Opycay"
|
||||
|
||||
# _errorhandling.rpym:534
|
||||
# _errorhandling.rpym:535
|
||||
old "Copies the traceback.txt file to the clipboard."
|
||||
new "Opiescay hetay acebacktray.xttay ilefay otay hetay ipboardclay."
|
||||
|
||||
# _errorhandling.rpym:561
|
||||
# _errorhandling.rpym:562
|
||||
old "An exception has occurred."
|
||||
new "Naay exceptionay ashay occurreday."
|
||||
|
||||
# _errorhandling.rpym:581
|
||||
# _errorhandling.rpym:582
|
||||
old "Rollback"
|
||||
new "Ollbackray"
|
||||
|
||||
# _errorhandling.rpym:583
|
||||
# _errorhandling.rpym:584
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "Ttemptsaay aay ollray ackbay otay aay riorpay imetay, allowingay ouyay otay avesay oray oosechay aay ifferentday oicechay."
|
||||
|
||||
# _errorhandling.rpym:586
|
||||
# _errorhandling.rpym:587
|
||||
old "Ignore"
|
||||
new "Gnoreiay"
|
||||
|
||||
# _errorhandling.rpym:590
|
||||
# _errorhandling.rpym:591
|
||||
old "Ignores the exception, allowing you to continue."
|
||||
new "Gnoresiay hetay exceptionay, allowingay ouyay otay ontinuecay."
|
||||
|
||||
# _errorhandling.rpym:592
|
||||
# _errorhandling.rpym:593
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "Gnoresiay hetay exceptionay, allowingay ouyay otay ontinuecay. Histay oftenay eadslay otay additionalay errorsay."
|
||||
|
||||
# _errorhandling.rpym:596
|
||||
# _errorhandling.rpym:597
|
||||
old "Reload"
|
||||
new "Eloadray"
|
||||
|
||||
# _errorhandling.rpym:598
|
||||
# _errorhandling.rpym:599
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "Eloadsray hetay amegay omfray iskday, avingsay anday estoringray amegay atestay ifay ossiblepay."
|
||||
|
||||
# _errorhandling.rpym:601
|
||||
# _errorhandling.rpym:602
|
||||
old "Console"
|
||||
new "Onsolecay"
|
||||
|
||||
# _errorhandling.rpym:603
|
||||
# _errorhandling.rpym:604
|
||||
old "Opens a console to allow debugging the problem."
|
||||
new "Pensoay aay onsolecay otay alloway ebuggingday hetay roblempay."
|
||||
|
||||
# _errorhandling.rpym:613
|
||||
# _errorhandling.rpym:614
|
||||
old "Quits the game."
|
||||
new "Uitsqay hetay amegay."
|
||||
|
||||
# _errorhandling.rpym:637
|
||||
# _errorhandling.rpym:638
|
||||
old "Parsing the script failed."
|
||||
new "Arsingpay hetay criptsay ailedfay."
|
||||
|
||||
# _errorhandling.rpym:663
|
||||
# _errorhandling.rpym:664
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "Pensoay hetay errorsay.xttay ilefay inay aay exttay editoray."
|
||||
|
||||
# _errorhandling.rpym:667
|
||||
# _errorhandling.rpym:668
|
||||
old "Copies the errors.txt file to the clipboard."
|
||||
new "Opiescay hetay errorsay.xttay ilefay otay hetay ipboardclay."
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ translate piglatin strings:
|
||||
new "## Hetay ordersbay ofay hetay oxbay ontainingcay hetay aracterchay'say amenay, inay eftlay, optay, ightray, ottombay orderay."
|
||||
|
||||
# gui.rpy:124
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## Fiay Ruetay, hetay ackgroundbay ofay hetay ameboxnay illway ebay iledtay, ifay Alsefay, hetay ackgroundbay ifay hetay ameboxnay illway ebay caledsay."
|
||||
|
||||
# gui.rpy:129
|
||||
|
||||
@@ -34,8 +34,8 @@ translate piglatin strings:
|
||||
new "Otay uildbay Ndroidaay ackagespay, easeplay ownloadday Aptray, unzipay itay, anday aceplay itay intoay hetay Enray'Ypay irectoryday. Hentay estartray hetay Enray'Ypay auncherlay."
|
||||
|
||||
# android.rpy:31
|
||||
old "An x86 Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "Naay 86xay Avajay Evelopmentday Itkay isay equiredray otay uildbay Ndroidaay ackagespay onay Indowsway. Hetay Dkjay isay ifferentday omfray hetay Rejay, osay itay'say ossiblepay ouyay avehay Avajay ithoutway avinghay hetay Dkjay.\n\nLeasepay {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}ownloadday anday installay hetay Dkjay{/a}, hentay estartray hetay Enray'Ypay auncherlay."
|
||||
old "A Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "Aay Avajay 8ay Evelopmentday Itkay isay equiredray otay uildbay Ndroidaay ackagespay onay Indowsway. Hetay Dkjay isay ifferentday omfray hetay Rejay, osay itay'say ossiblepay ouyay avehay Avajay ithoutway avinghay hetay Dkjay.\n\nLeasepay {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}ownloadday anday installay hetay Dkjay{/a}, hentay estartray hetay Enray'Ypay auncherlay."
|
||||
|
||||
# android.rpy:32
|
||||
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
|
||||
@@ -90,113 +90,329 @@ translate piglatin strings:
|
||||
new "Uildsbay hetay Ndroidaay ackagepay, installsay itay onay anay Ndroidaay eviceday onnectedcay otay ouryay omputercay, hentay auncheslay hetay appay onay ouryay eviceday."
|
||||
|
||||
# android.rpy:48
|
||||
old "Connects to an Android device running ADB in TCP/IP mode."
|
||||
new "Onnectscay otay anay Ndroidaay eviceday unningray Dbaay inay Cptay/Piay odemay."
|
||||
|
||||
# android.rpy:49
|
||||
old "Disconnects from an Android device running ADB in TCP/IP mode."
|
||||
new "Isconnectsday omfray anay Ndroidaay eviceday unningray Dbaay inay Cptay/Piay odemay."
|
||||
|
||||
# android.rpy:50
|
||||
old "Retrieves the log from the Android device and writes it to a file."
|
||||
new "Etrievesray hetay oglay omfray hetay Ndroidaay eviceday anday ritesway itay otay aay ilefay."
|
||||
|
||||
# android.rpy:244
|
||||
# android.rpy:50
|
||||
old "Selects the Debug build, which can be accessed through Android Studio. Changing between debug and release builds requires an uninstall from your device."
|
||||
new "Electssay hetay Ebugday uildbay, hichway ancay ebay accesseday hroughtay Ndroidaay Tudiosay. Hangingcay etweenbay ebugday anday eleaseray uildsbay equiresray anay uninstallay omfray ouryay eviceday."
|
||||
|
||||
# android.rpy:51
|
||||
old "Selects the Release build, which can be uploaded to stores. Changing between debug and release builds requires an uninstall from your device."
|
||||
new "Electssay hetay Eleaseray uildbay, hichway ancay ebay uploadeday otay oresstay. Hangingcay etweenbay ebugday anday eleaseray uildsbay equiresray anay uninstallay omfray ouryay eviceday."
|
||||
|
||||
# android.rpy:243
|
||||
old "Copying Android files to distributions directory."
|
||||
new "Opyingcay Ndroidaay ilesfay otay istributionsday irectoryday."
|
||||
|
||||
# android.rpy:308
|
||||
# android.rpy:311
|
||||
old "Android: [project.current.display_name!q]"
|
||||
new "Ndroidaay: [project.current.display_name!q]"
|
||||
|
||||
# android.rpy:328
|
||||
# android.rpy:331
|
||||
old "Emulation:"
|
||||
new "Mulationeay:"
|
||||
|
||||
# android.rpy:337
|
||||
# android.rpy:340
|
||||
old "Phone"
|
||||
new "Honepay"
|
||||
|
||||
# android.rpy:341
|
||||
# android.rpy:344
|
||||
old "Tablet"
|
||||
new "Ablettay"
|
||||
|
||||
# android.rpy:345
|
||||
# android.rpy:348
|
||||
old "Television"
|
||||
new "Elevisiontay"
|
||||
|
||||
# android.rpy:357
|
||||
# android.rpy:360
|
||||
old "Build:"
|
||||
new "Uildbay:"
|
||||
|
||||
# android.rpy:365
|
||||
# android.rpy:371
|
||||
old "Debug"
|
||||
new "Ebugday"
|
||||
|
||||
# android.rpy:375
|
||||
old "Release"
|
||||
new "Eleaseray"
|
||||
|
||||
# android.rpy:382
|
||||
old "Install SDK & Create Keys"
|
||||
new "Nstalliay Dksay & Reatecay Eyskay"
|
||||
|
||||
# android.rpy:369
|
||||
# android.rpy:386
|
||||
old "Configure"
|
||||
new "Onfigurecay"
|
||||
|
||||
# android.rpy:373
|
||||
# android.rpy:390
|
||||
old "Build Package"
|
||||
new "Uildbay Ackagepay"
|
||||
|
||||
# android.rpy:377
|
||||
# android.rpy:394
|
||||
old "Build & Install"
|
||||
new "Uildbay & Nstalliay"
|
||||
|
||||
# android.rpy:381
|
||||
# android.rpy:398
|
||||
old "Build, Install & Launch"
|
||||
new "Uildbay, Nstalliay & Aunchlay"
|
||||
|
||||
# android.rpy:392
|
||||
# android.rpy:409
|
||||
old "Other:"
|
||||
new "Theroay:"
|
||||
|
||||
# android.rpy:400
|
||||
old "Remote ADB Connect"
|
||||
new "Emoteray Dbaay Onnectcay"
|
||||
|
||||
# android.rpy:404
|
||||
old "Remote ADB Disconnect"
|
||||
new "Emoteray Dbaay Isconnectday"
|
||||
|
||||
# android.rpy:408
|
||||
# android.rpy:417
|
||||
old "Logcat"
|
||||
new "Ogcatlay"
|
||||
|
||||
# android.rpy:441
|
||||
# android.rpy:450
|
||||
old "Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"
|
||||
new "Eforebay ackagingpay Ndroidaay appsay, ouyay'llay eednay otay ownloadday Aptray, hetay Enray'Ypay Ndroidaay Ackagingpay Ooltay. Ouldway ouyay ikelay otay ownloadday Aptray ownay?"
|
||||
|
||||
# android.rpy:500
|
||||
old "Remote ADB Address"
|
||||
new "Emoteray Dbaay Ddressaay"
|
||||
|
||||
# android.rpy:500
|
||||
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
|
||||
new "Leasepay enteray hetay Piay addressay anday ortpay umbernay otay onnectcay otay, inay hetay ormfay \"921ay.681ay.1ay.431ay:5555ay\". Onsultcay ouryay eviceday'say ocumentationday otay etermineday ifay itay upportssay emoteray Dbaay, anday ifay osay, hetay addressay anday ortpay otay useay."
|
||||
|
||||
# android.rpy:512
|
||||
old "Invalid remote ADB address"
|
||||
new "Nvalidiay emoteray Dbaay addressay"
|
||||
|
||||
# android.rpy:512
|
||||
old "The address must contain one exactly one ':'."
|
||||
new "Hetay addressay ustmay ontaincay oneay exactlyay oneay ':'."
|
||||
|
||||
# android.rpy:516
|
||||
old "The host may not contain whitespace."
|
||||
new "Hetay osthay aymay otnay ontaincay hitespaceway."
|
||||
|
||||
# android.rpy:522
|
||||
old "The port must be a number."
|
||||
new "Hetay ortpay ustmay ebay aay umbernay."
|
||||
|
||||
# android.rpy:548
|
||||
# android.rpy:503
|
||||
old "Retrieving logcat information from device."
|
||||
new "Etrievingray ogcatlay informationay omfray eviceday."
|
||||
|
||||
# androidstrings.rpy:7
|
||||
old "{} is not a directory."
|
||||
new "{} isay otnay aay irectoryday."
|
||||
|
||||
# androidstrings.rpy:8
|
||||
old "{} does not contain a Ren'Py game."
|
||||
new "{} oesday otnay ontaincay aay Enray'Ypay amegay."
|
||||
|
||||
# androidstrings.rpy:9
|
||||
old "Run configure before attempting to build the app."
|
||||
new "Unray onfigurecay eforebay attemptingay otay uildbay hetay appay."
|
||||
|
||||
# androidstrings.rpy:10
|
||||
old "Google Play support is enabled, but build.google_play_key is not defined."
|
||||
new "Ooglegay Laypay upportsay isay enableday, utbay uildbay.oogle_play_keygay isay otnay efinedday."
|
||||
|
||||
# androidstrings.rpy:11
|
||||
old "Creating assets directory."
|
||||
new "Reatingcay assetsay irectoryday."
|
||||
|
||||
# androidstrings.rpy:12
|
||||
old "Creating expansion file."
|
||||
new "Reatingcay expansionay ilefay."
|
||||
|
||||
# androidstrings.rpy:13
|
||||
old "Packaging internal data."
|
||||
new "Ackagingpay internalay ataday."
|
||||
|
||||
# androidstrings.rpy:14
|
||||
old "I'm using Gradle to build the package."
|
||||
new "Iay'may usingay Radlegay otay uildbay hetay ackagepay."
|
||||
|
||||
# androidstrings.rpy:15
|
||||
old "Uploading expansion file."
|
||||
new "Ploadinguay expansionay ilefay."
|
||||
|
||||
# androidstrings.rpy:16
|
||||
old "The build seems to have failed."
|
||||
new "Hetay uildbay eemssay otay avehay ailedfay."
|
||||
|
||||
# androidstrings.rpy:17
|
||||
old "Launching app."
|
||||
new "Aunchinglay appay."
|
||||
|
||||
# androidstrings.rpy:18
|
||||
old "The build seems to have succeeded."
|
||||
new "Hetay uildbay eemssay otay avehay ucceededsay."
|
||||
|
||||
# androidstrings.rpy:19
|
||||
old "What is the full name of your application? This name will appear in the list of installed applications."
|
||||
new "Hatway isay hetay ullfay amenay ofay ouryay applicationay? Histay amenay illway appearay inay hetay istlay ofay installeday applicationsay."
|
||||
|
||||
# androidstrings.rpy:20
|
||||
old "What is the short name of your application? This name will be used in the launcher, and for application shortcuts."
|
||||
new "Hatway isay hetay ortshay amenay ofay ouryay applicationay? Histay amenay illway ebay useday inay hetay auncherlay, anday orfay applicationay ortcutsshay."
|
||||
|
||||
# androidstrings.rpy:21
|
||||
old "What is the name of the package?\n\nThis is usually of the form com.domain.program or com.domain.email.program. It may only contain ASCII letters and dots. It must contain at least one dot."
|
||||
new "Hatway isay hetay amenay ofay hetay ackagepay?\n\nHistay isay usuallyay ofay hetay ormfay omcay.omainday.rogrampay oray omcay.omainday.emailay.rogrampay. Tiay aymay onlyay ontaincay Sciiaay etterslay anday otsday. Tiay ustmay ontaincay atay eastlay oneay otday."
|
||||
|
||||
# androidstrings.rpy:22
|
||||
old "The package name may not be empty."
|
||||
new "Hetay ackagepay amenay aymay otnay ebay emptyay."
|
||||
|
||||
# androidstrings.rpy:23
|
||||
old "The package name may not contain spaces."
|
||||
new "Hetay ackagepay amenay aymay otnay ontaincay pacessay."
|
||||
|
||||
# androidstrings.rpy:24
|
||||
old "The package name must contain at least one dot."
|
||||
new "Hetay ackagepay amenay ustmay ontaincay atay eastlay oneay otday."
|
||||
|
||||
# androidstrings.rpy:25
|
||||
old "The package name may not contain two dots in a row, or begin or end with a dot."
|
||||
new "Hetay ackagepay amenay aymay otnay ontaincay wotay otsday inay aay owray, oray eginbay oray enday ithway aay otday."
|
||||
|
||||
# androidstrings.rpy:26
|
||||
old "Each part of the package name must start with a letter, and contain only letters, numbers, and underscores."
|
||||
new "Acheay artpay ofay hetay ackagepay amenay ustmay artstay ithway aay etterlay, anday ontaincay onlyay etterslay, umbersnay, anday underscoresay."
|
||||
|
||||
# androidstrings.rpy:27
|
||||
old "{} is a Java keyword, and can't be used as part of a package name."
|
||||
new "{} isay aay Avajay eywordkay, anday ancay'tay ebay useday asay artpay ofay aay ackagepay amenay."
|
||||
|
||||
# androidstrings.rpy:28
|
||||
old "What is the application's version?\n\nThis should be the human-readable version that you would present to a person. It must contain only numbers and dots."
|
||||
new "Hatway isay hetay applicationay'say ersionvay?\n\nHistay ouldshay ebay hetay umanhay-eadableray ersionvay hattay ouyay ouldway resentpay otay aay ersonpay. Tiay ustmay ontaincay onlyay umbersnay anday otsday."
|
||||
|
||||
# androidstrings.rpy:29
|
||||
old "The version number must contain only numbers and dots."
|
||||
new "Hetay ersionvay umbernay ustmay ontaincay onlyay umbersnay anday otsday."
|
||||
|
||||
# androidstrings.rpy:30
|
||||
old "What is the version code?\n\nThis must be a positive integer number, and the value should increase between versions."
|
||||
new "Hatway isay hetay ersionvay odecay?\n\nHistay ustmay ebay aay ositivepay integeray umbernay, anday hetay aluevay ouldshay increaseay etweenbay ersionsvay."
|
||||
|
||||
# androidstrings.rpy:31
|
||||
old "The numeric version must contain only numbers."
|
||||
new "Hetay umericnay ersionvay ustmay ontaincay onlyay umbersnay."
|
||||
|
||||
# androidstrings.rpy:32
|
||||
old "How would you like your application to be displayed?"
|
||||
new "Owhay ouldway ouyay ikelay ouryay applicationay otay ebay isplayedday?"
|
||||
|
||||
# androidstrings.rpy:33
|
||||
old "In landscape orientation."
|
||||
new "Niay andscapelay orientationay."
|
||||
|
||||
# androidstrings.rpy:34
|
||||
old "In portrait orientation."
|
||||
new "Niay ortraitpay orientationay."
|
||||
|
||||
# androidstrings.rpy:35
|
||||
old "In the user's preferred orientation."
|
||||
new "Niay hetay useray'say referredpay orientationay."
|
||||
|
||||
# androidstrings.rpy:36
|
||||
old "Which app store would you like to support in-app purchasing through?"
|
||||
new "Hichway appay orestay ouldway ouyay ikelay otay upportsay inay-appay urchasingpay hroughtay?"
|
||||
|
||||
# androidstrings.rpy:37
|
||||
old "Google Play."
|
||||
new "Ooglegay Laypay."
|
||||
|
||||
# androidstrings.rpy:38
|
||||
old "Amazon App Store."
|
||||
new "Mazonaay Ppaay Toresay."
|
||||
|
||||
# androidstrings.rpy:39
|
||||
old "Both, in one app."
|
||||
new "Othbay, inay oneay appay."
|
||||
|
||||
# androidstrings.rpy:40
|
||||
old "Neither."
|
||||
new "Eithernay."
|
||||
|
||||
# androidstrings.rpy:41
|
||||
old "Would you like to create an expansion APK?"
|
||||
new "Ouldway ouyay ikelay otay reatecay anay expansionay Pkaay?"
|
||||
|
||||
# androidstrings.rpy:42
|
||||
old "No. Size limit of 100 MB on Google Play, but can be distributed through other stores and sideloaded."
|
||||
new "Onay. Izesay imitlay ofay 001ay Bmay onay Ooglegay Laypay, utbay ancay ebay istributedday hroughtay otheray oresstay anday ideloadedsay."
|
||||
|
||||
# androidstrings.rpy:43
|
||||
old "Yes. 2 GB size limit, but won't work outside of Google Play. (Read the documentation to get this to work.)"
|
||||
new "Esyay. 2ay Bgay izesay imitlay, utbay onway'tay orkway outsideay ofay Ooglegay Laypay. (Eadray hetay ocumentationday otay etgay histay otay orkway.)"
|
||||
|
||||
# androidstrings.rpy:44
|
||||
old "Do you want to allow the app to access the Internet?"
|
||||
new "Oday ouyay antway otay alloway hetay appay otay accessay hetay Nternetiay?"
|
||||
|
||||
# androidstrings.rpy:45
|
||||
old "Unknown configuration variable: {}"
|
||||
new "Nknownuay onfigurationcay ariablevay: {}"
|
||||
|
||||
# androidstrings.rpy:46
|
||||
old "I'm compiling a short test program, to see if you have a working JDK on your system."
|
||||
new "Iay'may ompilingcay aay ortshay esttay rogrampay, otay eesay ifay ouyay avehay aay orkingway Dkjay onay ouryay ystemsay."
|
||||
|
||||
# androidstrings.rpy:47
|
||||
old "I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Without a working JDK, I can't continue."
|
||||
new "Iay asway unableay otay useay avacjay otay ompilecay aay esttay ilefay. Fiay ouyay avenhay'tay installeday hetay Avajay Evelopmentday Itkay etyay, easeplay ownloadday itay omfray:\n\nttphay://wwway.oracleay.omcay/echnetworktay/avajay/avasejay/ownloadsday/dk8jay-ownloadsday-1331512ay.tmlhay\n\nHetay Dkjay isay ifferentday omfray hetay Rejay, osay itay'say ossiblepay ouyay avehay Avajay ithoutway avinghay hetay Dkjay. Ithoutway aay orkingway Dkjay, Iay ancay'tay ontinuecay."
|
||||
|
||||
# androidstrings.rpy:48
|
||||
old "The version of Java on your computer does not appear to be JDK 8, which is the only version supported by the Android SDK. If you need to install JDK 8, you can download it from:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nYou can also set the JAVA_HOME environment variabe to use a different version of Java."
|
||||
new "Hetay ersionvay ofay Avajay onay ouryay omputercay oesday otnay appearay otay ebay Dkjay 8ay, hichway isay hetay onlyay ersionvay upportedsay ybay hetay Ndroidaay Dksay. Fiay ouyay eednay otay installay Dkjay 8ay, ouyay ancay ownloadday itay omfray:\n\nttphay://wwway.oracleay.omcay/echnetworktay/avajay/avasejay/ownloadsday/dk8jay-ownloadsday-1331512ay.tmlhay\n\nOuyay ancay alsoay etsay hetay Ava_homejay environmentay ariabevay otay useay aay ifferentday ersionvay ofay Avajay."
|
||||
|
||||
# androidstrings.rpy:49
|
||||
old "The JDK is present and working. Good!"
|
||||
new "Hetay Dkjay isay resentpay anday orkingway. Oodgay!"
|
||||
|
||||
# androidstrings.rpy:50
|
||||
old "The Android SDK has already been unpacked."
|
||||
new "Hetay Ndroidaay Dksay ashay alreadyay eenbay unpackeday."
|
||||
|
||||
# androidstrings.rpy:51
|
||||
old "Do you accept the Android SDK Terms and Conditions?"
|
||||
new "Oday ouyay acceptay hetay Ndroidaay Dksay Ermstay anday Onditionscay?"
|
||||
|
||||
# androidstrings.rpy:52
|
||||
old "I'm downloading the Android SDK. This might take a while."
|
||||
new "Iay'may ownloadingday hetay Ndroidaay Dksay. Histay ightmay aketay aay hileway."
|
||||
|
||||
# androidstrings.rpy:53
|
||||
old "I'm extracting the Android SDK."
|
||||
new "Iay'may extractingay hetay Ndroidaay Dksay."
|
||||
|
||||
# androidstrings.rpy:54
|
||||
old "I've finished unpacking the Android SDK."
|
||||
new "Iay'evay inishedfay unpackingay hetay Ndroidaay Dksay."
|
||||
|
||||
# androidstrings.rpy:55
|
||||
old "I'm about to download and install the required Android packages. This might take a while."
|
||||
new "Iay'may aboutay otay ownloadday anday installay hetay equiredray Ndroidaay ackagespay. Histay ightmay aketay aay hileway."
|
||||
|
||||
# androidstrings.rpy:56
|
||||
old "I was unable to accept the Android licenses."
|
||||
new "Iay asway unableay otay acceptay hetay Ndroidaay icenseslay."
|
||||
|
||||
# androidstrings.rpy:57
|
||||
old "I was unable to install the required Android packages."
|
||||
new "Iay asway unableay otay installay hetay equiredray Ndroidaay ackagespay."
|
||||
|
||||
# androidstrings.rpy:58
|
||||
old "I've finished installing the required Android packages."
|
||||
new "Iay'evay inishedfay installingay hetay equiredray Ndroidaay ackagespay."
|
||||
|
||||
# androidstrings.rpy:59
|
||||
old "You set the keystore yourself, so I'll assume it's how you want it."
|
||||
new "Ouyay etsay hetay eystorekay ourselfyay, osay Iay'llay assumeay itay'say owhay ouyay antway itay."
|
||||
|
||||
# androidstrings.rpy:60
|
||||
old "You've already created an Android keystore, so I won't create a new one for you."
|
||||
new "Ouyay'evay alreadyay reatedcay anay Ndroidaay eystorekay, osay Iay onway'tay reatecay aay ewnay oneay orfay ouyay."
|
||||
|
||||
# androidstrings.rpy:61
|
||||
old "I can create an application signing key for you. Signing an application with this key allows it to be placed in the Android Market and other app stores.\n\nDo you want to create a key?"
|
||||
new "Iay ancay reatecay anay applicationay igningsay eykay orfay ouyay. Igningsay anay applicationay ithway histay eykay allowsay itay otay ebay acedplay inay hetay Ndroidaay Arketmay anday otheray appay oresstay.\n\nOday ouyay antway otay reatecay aay eykay?"
|
||||
|
||||
# androidstrings.rpy:62
|
||||
old "I will create the key in the android.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\n\\You also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of android.keystore, and keep it in a safe place?"
|
||||
new "Iay illway reatecay hetay eykay inay hetay androiday.eystorekay ilefay.\n\nOuyay eednay otay ackbay histay ilefay upay. Fiay ouyay oselay itay, ouyay illway otnay ebay ableay otay upgradeay ouryay applicationay.\n\n\\Ouyay alsoay eednay otay eepkay hetay eykay afesay. Fiay evilay eoplepay etgay histay ilefay, heytay ouldcay akemay akefay ersionsvay ofay ouryay applicationay, anday otentiallypay ealstay ouryay usersay' ataday.\n\nIllway ouyay akemay aay ackupbay ofay androiday.eystorekay, anday eepkay itay inay aay afesay aceplay?"
|
||||
|
||||
# androidstrings.rpy:63
|
||||
old "Please enter your name or the name of your organization."
|
||||
new "Leasepay enteray ouryay amenay oray hetay amenay ofay ouryay organizationay."
|
||||
|
||||
# androidstrings.rpy:64
|
||||
old "Could not create android.keystore. Is keytool in your path?"
|
||||
new "Ouldcay otnay reatecay androiday.eystorekay. Siay eytoolkay inay ouryay athpay?"
|
||||
|
||||
# androidstrings.rpy:65
|
||||
old "I've finished creating android.keystore. Please back it up, and keep it in a safe place."
|
||||
new "Iay'evay inishedfay reatingcay androiday.eystorekay. Leasepay ackbay itay upay, anday eepkay itay inay aay afesay aceplay."
|
||||
|
||||
# androidstrings.rpy:66
|
||||
old "It looks like you're ready to start packaging games."
|
||||
new "Tiay ookslay ikelay ouyay'eray eadyray otay artstay ackagingpay amesgay."
|
||||
|
||||
# choose_directory.rpy:87
|
||||
old "Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."
|
||||
new "Enray'Ypay asway unableay otay unray ythonpay ithway kintertay otay oosechay hetay irectoryday. Leasepay installay hetay ythonpay-ktay oray kintertay ackagepay."
|
||||
@@ -961,63 +1177,59 @@ translate piglatin strings:
|
||||
old "Text editor: [text]"
|
||||
new "Exttay editoray: [text]"
|
||||
|
||||
# preferences.rpy:142
|
||||
old "Update Channel:"
|
||||
new "Pdateuay Hannelcay:"
|
||||
|
||||
# preferences.rpy:162
|
||||
# preferences.rpy:145
|
||||
old "Navigation Options:"
|
||||
new "Avigationnay Ptionsoay:"
|
||||
|
||||
# preferences.rpy:166
|
||||
# preferences.rpy:149
|
||||
old "Include private names"
|
||||
new "Ncludeiay rivatepay amesnay"
|
||||
|
||||
# preferences.rpy:167
|
||||
# preferences.rpy:150
|
||||
old "Include library names"
|
||||
new "Ncludeiay ibrarylay amesnay"
|
||||
|
||||
# preferences.rpy:177
|
||||
# preferences.rpy:160
|
||||
old "Launcher Options:"
|
||||
new "Auncherlay Ptionsoay:"
|
||||
|
||||
# preferences.rpy:181
|
||||
# preferences.rpy:164
|
||||
old "Hardware rendering"
|
||||
new "Ardwarehay enderingray"
|
||||
|
||||
# preferences.rpy:182
|
||||
# preferences.rpy:165
|
||||
old "Show edit file section"
|
||||
new "Howsay editay ilefay ectionsay"
|
||||
|
||||
# preferences.rpy:183
|
||||
# preferences.rpy:166
|
||||
old "Large fonts"
|
||||
new "Argelay ontsfay"
|
||||
|
||||
# preferences.rpy:186
|
||||
# preferences.rpy:169
|
||||
old "Console output"
|
||||
new "Onsolecay outputay"
|
||||
|
||||
# preferences.rpy:190
|
||||
# preferences.rpy:173
|
||||
old "Force new tutorial"
|
||||
new "Orcefay ewnay utorialtay"
|
||||
|
||||
# preferences.rpy:194
|
||||
# preferences.rpy:177
|
||||
old "Legacy options"
|
||||
new "Egacylay optionsay"
|
||||
|
||||
# preferences.rpy:197
|
||||
# preferences.rpy:180
|
||||
old "Show templates"
|
||||
new "Howsay emplatestay"
|
||||
|
||||
# preferences.rpy:199
|
||||
# preferences.rpy:182
|
||||
old "Sponsor message"
|
||||
new "Ponsorsay essagemay"
|
||||
|
||||
# preferences.rpy:219
|
||||
# preferences.rpy:202
|
||||
old "Open launcher project"
|
||||
new "Penoay auncherlay rojectpay"
|
||||
|
||||
# preferences.rpy:233
|
||||
# preferences.rpy:216
|
||||
old "Language:"
|
||||
new "Anguagelay:"
|
||||
|
||||
@@ -1037,35 +1249,35 @@ translate piglatin strings:
|
||||
old "Have you backed up your projects recently?"
|
||||
new "Avehay ouyay ackedbay upay ouryay rojectspay ecentlyray?"
|
||||
|
||||
# project.rpy:280
|
||||
# project.rpy:281
|
||||
old "Launching the project failed."
|
||||
new "Aunchinglay hetay rojectpay ailedfay."
|
||||
|
||||
# project.rpy:280
|
||||
# project.rpy:281
|
||||
old "Please ensure that your project launches normally before running this command."
|
||||
new "Leasepay ensureay hattay ouryay rojectpay auncheslay ormallynay eforebay unningray histay ommandcay."
|
||||
|
||||
# project.rpy:296
|
||||
# project.rpy:297
|
||||
old "Ren'Py is scanning the project..."
|
||||
new "Enray'Ypay isay canningsay hetay rojectpay..."
|
||||
|
||||
# project.rpy:728
|
||||
# project.rpy:729
|
||||
old "Launching"
|
||||
new "Aunchinglay"
|
||||
|
||||
# project.rpy:762
|
||||
# project.rpy:763
|
||||
old "PROJECTS DIRECTORY"
|
||||
new "Rojectspay Irectoryday"
|
||||
|
||||
# project.rpy:762
|
||||
# project.rpy:763
|
||||
old "Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
|
||||
new "Leasepay oosechay hetay rojectspay irectoryday usingay hetay irectoryday ooserchay.\n{b}Hetay irectoryday ooserchay aymay avehay openeday ehindbay histay indowway.{/b}"
|
||||
|
||||
# project.rpy:762
|
||||
# project.rpy:763
|
||||
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
|
||||
new "Histay auncherlay illway cansay orfay rojectspay inay histay irectoryday, illway reatecay ewnay rojectspay inay histay irectoryday, anday illway aceplay uiltbay rojectspay intoay histay irectoryday."
|
||||
|
||||
# project.rpy:767
|
||||
# project.rpy:768
|
||||
old "Ren'Py has set the projects directory to:"
|
||||
new "Enray'Ypay ashay etsay hetay rojectspay irectoryday otay:"
|
||||
|
||||
@@ -1173,95 +1385,103 @@ translate piglatin strings:
|
||||
old "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[persistent.dialogue_format] in the base directory."
|
||||
new "Enray'Ypay ashay inishedfay extractingay ialogueday. Hetay extracteday ialogueday ancay ebay oundfay inay ialogueday.[persistent.dialogue_format] inay hetay asebay irectoryday."
|
||||
|
||||
# updater.rpy:75
|
||||
old "Select Update Channel"
|
||||
new "Electsay Pdateuay Hannelcay"
|
||||
|
||||
# updater.rpy:86
|
||||
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
|
||||
new "Hetay updateay annelchay ontrolscay hetay ersionvay ofay Enray'Ypay hetay updateray illway ownloadday. Leasepay electsay anay updateay annelchay:"
|
||||
|
||||
# updater.rpy:91
|
||||
old "Release"
|
||||
new "Eleaseray"
|
||||
|
||||
# updater.rpy:97
|
||||
# updater.rpy:63
|
||||
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
|
||||
new "{b}Ecommendedray.{/b} Hetay ersionvay ofay Enray'Ypay hattay ouldshay ebay useday inay allay ewlynay-eleasedray amesgay."
|
||||
|
||||
# updater.rpy:102
|
||||
# updater.rpy:65
|
||||
old "Prerelease"
|
||||
new "Rereleasepay"
|
||||
|
||||
# updater.rpy:108
|
||||
# updater.rpy:66
|
||||
old "A preview of the next version of Ren'Py that can be used for testing and taking advantage of new features, but not for final releases of games."
|
||||
new "Aay reviewpay ofay hetay extnay ersionvay ofay Enray'Ypay hattay ancay ebay useday orfay estingtay anday akingtay advantageay ofay ewnay eaturesfay, utbay otnay orfay inalfay eleasesray ofay amesgay."
|
||||
|
||||
# updater.rpy:114
|
||||
# updater.rpy:68
|
||||
old "Experimental"
|
||||
new "Xperimentaleay"
|
||||
|
||||
# updater.rpy:120
|
||||
# updater.rpy:69
|
||||
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
|
||||
new "Xperimentaleay ersionsvay ofay Enray'Ypay. Ouyay ouldnshay'tay electsay histay annelchay unlessay askeday ybay aay Enray'Ypay eveloperday."
|
||||
|
||||
# updater.rpy:126
|
||||
# updater.rpy:71
|
||||
old "Nightly"
|
||||
new "Ightlynay"
|
||||
|
||||
# updater.rpy:132
|
||||
# updater.rpy:72
|
||||
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
|
||||
new "Hetay eedingblay edgeay ofay Enray'Ypay evelopmentday. Histay aymay avehay hetay atestlay eaturesfay, oray ightmay otnay unray atay allay."
|
||||
|
||||
# updater.rpy:152
|
||||
# updater.rpy:90
|
||||
old "Select Update Channel"
|
||||
new "Electsay Pdateuay Hannelcay"
|
||||
|
||||
# updater.rpy:101
|
||||
old "The update channel controls the version of Ren'Py the updater will download."
|
||||
new "Hetay updateay annelchay ontrolscay hetay ersionvay ofay Enray'Ypay hetay updateray illway ownloadday."
|
||||
|
||||
# updater.rpy:110
|
||||
old "• This version is installed and up-to-date."
|
||||
new "• Histay ersionvay isay installeday anday upay-otay-ateday."
|
||||
|
||||
# updater.rpy:118
|
||||
old "%B %d, %Y"
|
||||
new "%Bay %day, %Yay"
|
||||
|
||||
# updater.rpy:140
|
||||
old "An error has occured:"
|
||||
new "Naay erroray ashay occureday:"
|
||||
|
||||
# updater.rpy:154
|
||||
# updater.rpy:142
|
||||
old "Checking for updates."
|
||||
new "Heckingcay orfay updatesay."
|
||||
|
||||
# updater.rpy:156
|
||||
# updater.rpy:144
|
||||
old "Ren'Py is up to date."
|
||||
new "Enray'Ypay isay upay otay ateday."
|
||||
|
||||
# updater.rpy:158
|
||||
# updater.rpy:146
|
||||
old "[u.version] is now available. Do you want to install it?"
|
||||
new "[u.version] isay ownay availableay. Oday ouyay antway otay installay itay?"
|
||||
|
||||
# updater.rpy:160
|
||||
# updater.rpy:148
|
||||
old "Preparing to download the update."
|
||||
new "Reparingpay otay ownloadday hetay updateay."
|
||||
|
||||
# updater.rpy:162
|
||||
# updater.rpy:150
|
||||
old "Downloading the update."
|
||||
new "Ownloadingday hetay updateay."
|
||||
|
||||
# updater.rpy:164
|
||||
# updater.rpy:152
|
||||
old "Unpacking the update."
|
||||
new "Npackinguay hetay updateay."
|
||||
|
||||
# updater.rpy:166
|
||||
# updater.rpy:154
|
||||
old "Finishing up."
|
||||
new "Inishingfay upay."
|
||||
|
||||
# updater.rpy:168
|
||||
# updater.rpy:156
|
||||
old "The update has been installed. Ren'Py will restart."
|
||||
new "Hetay updateay ashay eenbay installeday. Enray'Ypay illway estartray."
|
||||
|
||||
# updater.rpy:170
|
||||
# updater.rpy:158
|
||||
old "The update has been installed."
|
||||
new "Hetay updateay ashay eenbay installeday."
|
||||
|
||||
# updater.rpy:172
|
||||
# updater.rpy:160
|
||||
old "The update was cancelled."
|
||||
new "Hetay updateay asway ancelledcay."
|
||||
|
||||
# updater.rpy:189
|
||||
# updater.rpy:177
|
||||
old "Ren'Py Update"
|
||||
new "Enray'Ypay Pdateuay"
|
||||
|
||||
# updater.rpy:195
|
||||
# updater.rpy:183
|
||||
old "Proceed"
|
||||
new "Roceedpay"
|
||||
|
||||
# updater.rpy:188
|
||||
old "Fetching the list of update channels"
|
||||
new "Etchingfay hetay istlay ofay updateay annelschay"
|
||||
|
||||
|
||||
@@ -153,179 +153,187 @@ translate russian strings:
|
||||
old "{#month_short}Dec"
|
||||
new "{#month_short}Дек"
|
||||
|
||||
# 00action_file.rpy:237
|
||||
# 00action_file.rpy:240
|
||||
old "%b %d, %H:%M"
|
||||
new "%d %b, %H:%M"
|
||||
|
||||
# 00action_file.rpy:344
|
||||
# 00action_file.rpy:353
|
||||
old "Save slot %s: [text]"
|
||||
new "Слот сохранения %s: [text]"
|
||||
|
||||
# 00action_file.rpy:417
|
||||
# 00action_file.rpy:434
|
||||
old "Load slot %s: [text]"
|
||||
new "Слот загрузки %s: [text]"
|
||||
|
||||
# 00action_file.rpy:459
|
||||
# 00action_file.rpy:487
|
||||
old "Delete slot [text]"
|
||||
new "Удалить слот [text]"
|
||||
|
||||
# 00action_file.rpy:539
|
||||
# 00action_file.rpy:569
|
||||
old "File page auto"
|
||||
new "Автосохранения"
|
||||
|
||||
# 00action_file.rpy:541
|
||||
# 00action_file.rpy:571
|
||||
old "File page quick"
|
||||
new "Быстрые сохранения"
|
||||
|
||||
# 00action_file.rpy:543
|
||||
# 00action_file.rpy:573
|
||||
old "File page [text]"
|
||||
new "Страница сохранений [text]"
|
||||
|
||||
# 00action_file.rpy:733
|
||||
# 00action_file.rpy:763
|
||||
old "Next file page."
|
||||
new "Следующая страница сохранений"
|
||||
|
||||
# 00action_file.rpy:797
|
||||
# 00action_file.rpy:827
|
||||
old "Previous file page."
|
||||
new "Предыдущая страница сохранений"
|
||||
|
||||
# 00action_file.rpy:858
|
||||
# 00action_file.rpy:888
|
||||
old "Quick save complete."
|
||||
new "Быстрое сохранение завершено."
|
||||
|
||||
# 00action_file.rpy:876
|
||||
# 00action_file.rpy:906
|
||||
old "Quick save."
|
||||
new "Быстрое сохранение"
|
||||
|
||||
# 00action_file.rpy:895
|
||||
# 00action_file.rpy:925
|
||||
old "Quick load."
|
||||
new "Быстрая загрузка"
|
||||
|
||||
# 00action_other.rpy:344
|
||||
# 00action_other.rpy:355
|
||||
old "Language [text]"
|
||||
new "Язык [text]"
|
||||
|
||||
# 00director.rpy:703
|
||||
# 00director.rpy:708
|
||||
old "The interactive director is not enabled here."
|
||||
new "Интерактивный директор недоступен."
|
||||
|
||||
# 00director.rpy:1490
|
||||
# 00director.rpy:1481
|
||||
old "⬆"
|
||||
new "⬆"
|
||||
|
||||
# 00director.rpy:1487
|
||||
old "⬇"
|
||||
new "⬇"
|
||||
|
||||
# 00director.rpy:1551
|
||||
old "Done"
|
||||
new "Принять"
|
||||
|
||||
# 00director.rpy:1498
|
||||
# 00director.rpy:1561
|
||||
old "(statement)"
|
||||
new "(функция)"
|
||||
|
||||
# 00director.rpy:1499
|
||||
# 00director.rpy:1562
|
||||
old "(tag)"
|
||||
new "(тег)"
|
||||
|
||||
# 00director.rpy:1500
|
||||
# 00director.rpy:1563
|
||||
old "(attributes)"
|
||||
new "(аттрибут)"
|
||||
|
||||
# 00director.rpy:1501
|
||||
# 00director.rpy:1564
|
||||
old "(transform)"
|
||||
new "(трансформация)"
|
||||
|
||||
# 00director.rpy:1526
|
||||
# 00director.rpy:1589
|
||||
old "(transition)"
|
||||
new "(переход)"
|
||||
|
||||
# 00director.rpy:1538
|
||||
# 00director.rpy:1601
|
||||
old "(channel)"
|
||||
new "(канал)"
|
||||
|
||||
# 00director.rpy:1539
|
||||
# 00director.rpy:1602
|
||||
old "(filename)"
|
||||
new "(имя файла)"
|
||||
|
||||
# 00director.rpy:1564
|
||||
# 00director.rpy:1631
|
||||
old "Change"
|
||||
new "Изменить"
|
||||
|
||||
# 00director.rpy:1566
|
||||
# 00director.rpy:1633
|
||||
old "Add"
|
||||
new "Добавить"
|
||||
|
||||
# 00director.rpy:1569
|
||||
# 00director.rpy:1636
|
||||
old "Cancel"
|
||||
new "Отмена"
|
||||
|
||||
# 00director.rpy:1572
|
||||
# 00director.rpy:1639
|
||||
old "Remove"
|
||||
new "Убрать"
|
||||
|
||||
# 00director.rpy:1605
|
||||
# 00director.rpy:1674
|
||||
old "Statement:"
|
||||
new "Функции:"
|
||||
|
||||
# 00director.rpy:1626
|
||||
# 00director.rpy:1695
|
||||
old "Tag:"
|
||||
new "Теги:"
|
||||
|
||||
# 00director.rpy:1642
|
||||
# 00director.rpy:1711
|
||||
old "Attributes:"
|
||||
new "Аттрибут:"
|
||||
|
||||
# 00director.rpy:1660
|
||||
# 00director.rpy:1729
|
||||
old "Transforms:"
|
||||
new "Трансформации:"
|
||||
|
||||
# 00director.rpy:1679
|
||||
# 00director.rpy:1748
|
||||
old "Behind:"
|
||||
new "Позади:"
|
||||
|
||||
# 00director.rpy:1698
|
||||
# 00director.rpy:1767
|
||||
old "Transition:"
|
||||
new "Переходы:"
|
||||
|
||||
# 00director.rpy:1716
|
||||
# 00director.rpy:1785
|
||||
old "Channel:"
|
||||
new "Каналы:"
|
||||
|
||||
# 00director.rpy:1734
|
||||
# 00director.rpy:1803
|
||||
old "Audio Filename:"
|
||||
new "Имя файла:"
|
||||
|
||||
# 00gui.rpy:368
|
||||
# 00gui.rpy:370
|
||||
old "Are you sure?"
|
||||
new "Вы уверены?"
|
||||
|
||||
# 00gui.rpy:369
|
||||
# 00gui.rpy:371
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "Вы уверены, что хотите удалить это сохранение?"
|
||||
|
||||
# 00gui.rpy:370
|
||||
# 00gui.rpy:372
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "Вы уверены, что хотите перезаписать ваше сохранение?"
|
||||
|
||||
# 00gui.rpy:371
|
||||
# 00gui.rpy:373
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "Загрузка игры приведёт к потере несохранённого прогресса.\nВы уверены, что хотите это сделать?"
|
||||
|
||||
# 00gui.rpy:372
|
||||
# 00gui.rpy:374
|
||||
old "Are you sure you want to quit?"
|
||||
new "Вы уверены, что хотите выйти?"
|
||||
|
||||
# 00gui.rpy:373
|
||||
# 00gui.rpy:375
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "Вы уверены, что хотите вернуться в главное меню?\nЭто приведёт к потере несохранённого прогресса."
|
||||
|
||||
# 00gui.rpy:374
|
||||
# 00gui.rpy:376
|
||||
old "Are you sure you want to end the replay?"
|
||||
new "Вы уверены, что хотите завершить повтор?"
|
||||
|
||||
# 00gui.rpy:375
|
||||
# 00gui.rpy:377
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "Вы уверены, что хотите начать пропуск?"
|
||||
|
||||
# 00gui.rpy:376
|
||||
# 00gui.rpy:378
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "Вы точно хотите пропустить всё до следующего выбора?"
|
||||
|
||||
# 00gui.rpy:377
|
||||
# 00gui.rpy:379
|
||||
old "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
new "Вы уверены, что хотите пропустить непрочитанные диалоги до следующего выбора?"
|
||||
|
||||
@@ -379,11 +387,11 @@ translate russian strings:
|
||||
|
||||
# 00library.rpy:157
|
||||
old "increase"
|
||||
new "больше" ### но полоса прокрутки тоже здесь!
|
||||
new "больше"
|
||||
|
||||
# 00library.rpy:158
|
||||
old "decrease"
|
||||
new "меньше" ###
|
||||
new "меньше"
|
||||
|
||||
# 00library.rpy:193
|
||||
old "Skip Mode"
|
||||
@@ -431,7 +439,7 @@ translate russian strings:
|
||||
|
||||
# 00preferences.rpy:266
|
||||
old "skip unseen [text]"
|
||||
new "пропускать весь [text]" ###
|
||||
new "пропускать весь [text]"
|
||||
|
||||
# 00preferences.rpy:271
|
||||
old "skip unseen text"
|
||||
@@ -455,11 +463,11 @@ translate russian strings:
|
||||
|
||||
# 00preferences.rpy:300
|
||||
old "auto-forward"
|
||||
new "авточтение" ###
|
||||
new "авточтение"
|
||||
|
||||
# 00preferences.rpy:307
|
||||
old "Auto forward"
|
||||
new "Авточтение" ###
|
||||
new "Авточтение"
|
||||
|
||||
# 00preferences.rpy:310
|
||||
old "auto-forward after click"
|
||||
@@ -537,111 +545,271 @@ translate russian strings:
|
||||
old "mute all"
|
||||
new "режим без звука"
|
||||
|
||||
# 00preferences.rpy:498
|
||||
# 00preferences.rpy:500
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "Озвучка буфера обмена включена. Нажмите 'shift+C', чтобы отключить её."
|
||||
|
||||
# 00preferences.rpy:500
|
||||
# 00preferences.rpy:502
|
||||
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
new "Синтезатор речи должен сказать \"[renpy.display.tts.last]\". Нажмите 'alt+shift+V', чтобы отключить его."
|
||||
|
||||
# 00preferences.rpy:502
|
||||
# 00preferences.rpy:504
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "Синтезатор речи включён. Нажмите 'v', чтобы отключить его."
|
||||
|
||||
# _compat\gamemenu.rpym:198
|
||||
old "Empty Slot."
|
||||
new "Пустой слот"
|
||||
|
||||
# _compat\gamemenu.rpym:355
|
||||
old "Previous"
|
||||
new "Назад"
|
||||
|
||||
# _compat\gamemenu.rpym:362
|
||||
old "Next"
|
||||
new "Далее"
|
||||
|
||||
# _compat\preferences.rpym:428
|
||||
old "Joystick Mapping"
|
||||
new "Раскладка джойстика"
|
||||
|
||||
# _developer\developer.rpym:38
|
||||
old "Developer Menu"
|
||||
new "Меню разработчика"
|
||||
|
||||
# _developer\developer.rpym:43
|
||||
old "Interactive Director (D)"
|
||||
new "Интерактивный Директор (D)"
|
||||
|
||||
# _developer\developer.rpym:45
|
||||
old "Reload Game (Shift+R)"
|
||||
new "Перезагрузить игру (Shift+R)"
|
||||
|
||||
# _developer\developer.rpym:47
|
||||
old "Console (Shift+O)"
|
||||
new "Консоль (Shift+O)"
|
||||
|
||||
# _developer\developer.rpym:49
|
||||
old "Variable Viewer"
|
||||
new "Просмотр переменных"
|
||||
|
||||
# _developer\developer.rpym:51
|
||||
old "Image Location Picker"
|
||||
new "Инструмент позиционирования на изображениях"
|
||||
|
||||
# _developer\developer.rpym:53
|
||||
old "Filename List"
|
||||
new "Список файлов"
|
||||
|
||||
# _developer\developer.rpym:57
|
||||
old "Show Image Load Log (F4)"
|
||||
new "Показать лог загрузки изображений (F4)"
|
||||
|
||||
# _developer\developer.rpym:60
|
||||
old "Hide Image Load Log (F4)"
|
||||
new "Скрыть лог загрузки изображений (F4)"
|
||||
|
||||
# _developer\developer.rpym:63
|
||||
old "Image Attributes"
|
||||
new "Аттрибуты изображения"
|
||||
|
||||
# _developer\developer.rpym:90
|
||||
old "[name] [attributes] (hidden)"
|
||||
new "[name] [attributes] (hidden)"
|
||||
|
||||
# _developer\developer.rpym:94
|
||||
old "[name] [attributes]"
|
||||
new "[name] [attributes]"
|
||||
|
||||
# _developer\developer.rpym:137
|
||||
old "Nothing to inspect."
|
||||
new "Переменные не заданы."
|
||||
|
||||
# _developer\developer.rpym:265
|
||||
old "Return to the developer menu"
|
||||
new "Вернуться в меню разработчика"
|
||||
|
||||
# _developer\developer.rpym:425
|
||||
old "Rectangle: %r"
|
||||
new "Прямоугольник: %r"
|
||||
|
||||
# _developer\developer.rpym:430
|
||||
old "Mouse position: %r"
|
||||
new "Позиция мыши: %r"
|
||||
|
||||
# _developer\developer.rpym:435
|
||||
old "Right-click or escape to quit."
|
||||
new "Нажмите правую кнопку мыши или ESC чтобы выйти."
|
||||
|
||||
# _developer\developer.rpym:467
|
||||
old "Rectangle copied to clipboard."
|
||||
new "Координаты прямоугольника скопированы в буфер обмена."
|
||||
|
||||
# _developer\developer.rpym:470
|
||||
old "Position copied to clipboard."
|
||||
new "Координаты позиции скопированы в буфер обмена."
|
||||
|
||||
# _developer\developer.rpym:489
|
||||
old "Type to filter: "
|
||||
new "Текущий фильтр: "
|
||||
|
||||
# _developer\developer.rpym:617
|
||||
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
|
||||
new "Текстур: [tex_count] ([tex_size_mb:.1f] МБ)"
|
||||
|
||||
# _developer\developer.rpym:621
|
||||
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
|
||||
new "Кеш изображений: [cache_pct:.1f]% ([cache_size_mb:.1f] МБ)"
|
||||
|
||||
# _developer\developer.rpym:631
|
||||
old "✔ "
|
||||
new "✔ "
|
||||
|
||||
# _developer\developer.rpym:634
|
||||
old "✘ "
|
||||
new "✘ "
|
||||
|
||||
# _developer\developer.rpym:639
|
||||
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
new "\n{color=#cfc}✔ предсказанное изображение (хорошо){/color}\n{color=#fcc}✘ внезапное изображение (плохо){/color}\n{color=#fff}Нажмите, чтобы передвинуть.{/color}"
|
||||
|
||||
# _developer\inspector.rpym:38
|
||||
old "Displayable Inspector"
|
||||
new "Диспетчер объектов"
|
||||
|
||||
# _developer\inspector.rpym:61
|
||||
old "Size"
|
||||
new "Разрешение"
|
||||
|
||||
# _developer\inspector.rpym:65
|
||||
old "Style"
|
||||
new "Стиль"
|
||||
|
||||
# _developer\inspector.rpym:71
|
||||
old "Location"
|
||||
new "Местоположение"
|
||||
|
||||
# _developer\inspector.rpym:122
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "Инспектирую стили [displayable_name!q]"
|
||||
|
||||
# _developer\inspector.rpym:139
|
||||
old "displayable:"
|
||||
new "объект:"
|
||||
|
||||
# _developer\inspector.rpym:145
|
||||
old " (no properties affect the displayable)"
|
||||
new " (на объект не влияют никакие параметры)"
|
||||
|
||||
# _developer\inspector.rpym:147
|
||||
old " (default properties omitted)"
|
||||
new " (настройки по умолчанию опущены)"
|
||||
|
||||
# _developer\inspector.rpym:185
|
||||
old "<repr() failed>"
|
||||
new "<repr() провален>"
|
||||
|
||||
# _layout\classic_load_save.rpym:170
|
||||
old "a"
|
||||
new "а"
|
||||
|
||||
# _layout\classic_load_save.rpym:179
|
||||
old "q"
|
||||
new "б"
|
||||
|
||||
# 00iap.rpy:217
|
||||
old "Contacting App Store\nPlease Wait..."
|
||||
new "Связываюсь с App Store\nПожалуйста, ждите..."
|
||||
|
||||
# 00updater.rpy:372
|
||||
# 00updater.rpy:375
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "Ren'Py Updater не поддерживается на мобильных устройствах."
|
||||
|
||||
# 00updater.rpy:491
|
||||
# 00updater.rpy:494
|
||||
old "An error is being simulated."
|
||||
new "Симулируется ошибка."
|
||||
|
||||
# 00updater.rpy:672
|
||||
# 00updater.rpy:678
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "Или этот проект не поддерживает обновление, или файл статуса обновления был удалён."
|
||||
|
||||
# 00updater.rpy:686
|
||||
# 00updater.rpy:692
|
||||
old "This account does not have permission to perform an update."
|
||||
new "У этого аккаунта нет прав проводить обновление."
|
||||
|
||||
# 00updater.rpy:689
|
||||
# 00updater.rpy:695
|
||||
old "This account does not have permission to write the update log."
|
||||
new "У этого аккаунта нет прав писать лог обновления."
|
||||
|
||||
# 00updater.rpy:716
|
||||
# 00updater.rpy:722
|
||||
old "Could not verify update signature."
|
||||
new "Не могу верифицировать подпись обновления."
|
||||
|
||||
# 00updater.rpy:991
|
||||
# 00updater.rpy:997
|
||||
old "The update file was not downloaded."
|
||||
new "Файл обновления не был загружен."
|
||||
|
||||
# 00updater.rpy:1009
|
||||
# 00updater.rpy:1015
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "Файл обновления не содержит корректного дайджеста — он может быть повреждён."
|
||||
|
||||
# 00updater.rpy:1065
|
||||
# 00updater.rpy:1071
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "При распаковке {} обнаружен неизвестный тип {}."
|
||||
|
||||
# 00updater.rpy:1412
|
||||
# 00updater.rpy:1439
|
||||
old "Updater"
|
||||
new "Обновление"
|
||||
|
||||
# 00updater.rpy:1423
|
||||
# 00updater.rpy:1450
|
||||
old "This program is up to date."
|
||||
new "Эта программа обновлена."
|
||||
|
||||
# 00updater.rpy:1425
|
||||
# 00updater.rpy:1452
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] доступна. Вы хотите её установить?"
|
||||
|
||||
# 00updater.rpy:1427
|
||||
# 00updater.rpy:1454
|
||||
old "Preparing to download the updates."
|
||||
new "Подготовка к загрузке обновлений."
|
||||
|
||||
# 00updater.rpy:1429
|
||||
# 00updater.rpy:1456
|
||||
old "Downloading the updates."
|
||||
new "Загрузка обновлений."
|
||||
|
||||
# 00updater.rpy:1431
|
||||
# 00updater.rpy:1458
|
||||
old "Unpacking the updates."
|
||||
new "Распаковка обновлений."
|
||||
|
||||
# 00updater.rpy:1435
|
||||
# 00updater.rpy:1462
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "Обновления установлены. Программа будет перезапущена."
|
||||
|
||||
# 00updater.rpy:1437
|
||||
# 00updater.rpy:1464
|
||||
old "The updates have been installed."
|
||||
new "Обновления были установлены."
|
||||
|
||||
# 00updater.rpy:1439
|
||||
# 00updater.rpy:1466
|
||||
old "The updates were cancelled."
|
||||
new "Обновления были отменены."
|
||||
|
||||
# 00gallery.rpy:573
|
||||
# 00gallery.rpy:585
|
||||
old "Image [index] of [count] locked."
|
||||
new "Изображение [index] из [count] закрыто."
|
||||
|
||||
# 00gallery.rpy:593
|
||||
# 00gallery.rpy:605
|
||||
old "prev"
|
||||
new "пред"
|
||||
|
||||
# 00gallery.rpy:594
|
||||
# 00gallery.rpy:606
|
||||
old "next"
|
||||
new "след"
|
||||
|
||||
# 00gallery.rpy:595
|
||||
# 00gallery.rpy:607
|
||||
old "slideshow"
|
||||
new "слайд-шоу"
|
||||
|
||||
# 00gallery.rpy:596
|
||||
# 00gallery.rpy:608
|
||||
old "return"
|
||||
new "вернуться"
|
||||
|
||||
|
||||
@@ -1,130 +1,6 @@
|
||||
|
||||
translate russian strings:
|
||||
|
||||
# _developer/developer.rpym:38
|
||||
old "Developer Menu"
|
||||
new "Меню разработчика"
|
||||
|
||||
# _developer/developer.rpym:43
|
||||
old "Interactive Director (D)"
|
||||
new "Интерактивный Директор (D)"
|
||||
|
||||
# _developer/developer.rpym:45
|
||||
old "Reload Game (Shift+R)"
|
||||
new "Перезагрузить игру (Shift+R)"
|
||||
|
||||
# _developer/developer.rpym:47
|
||||
old "Console (Shift+O)"
|
||||
new "Консоль (Shift+O)"
|
||||
|
||||
# _developer/developer.rpym:49
|
||||
old "Variable Viewer"
|
||||
new "Просмотр переменных"
|
||||
|
||||
# _developer/developer.rpym:51
|
||||
old "Image Location Picker"
|
||||
new "Инструмент позиционирования на изображениях"
|
||||
|
||||
# _developer/developer.rpym:53
|
||||
old "Filename List"
|
||||
new "Список файлов"
|
||||
|
||||
# _developer/developer.rpym:57
|
||||
old "Show Image Load Log (F4)"
|
||||
new "Показать лог загрузки изображений (F4)"
|
||||
|
||||
# _developer/developer.rpym:60
|
||||
old "Hide Image Load Log (F4)"
|
||||
new "Скрыть лог загрузки изображений (F4)"
|
||||
|
||||
# _developer/developer.rpym:95
|
||||
old "Nothing to inspect."
|
||||
new "Переменные не заданы."
|
||||
|
||||
# _developer/developer.rpym:223
|
||||
old "Return to the developer menu"
|
||||
new "Вернуться в меню разработчика"
|
||||
|
||||
# _developer/developer.rpym:383
|
||||
old "Rectangle: %r"
|
||||
new "Прямоугольник: %r"
|
||||
|
||||
# _developer/developer.rpym:388
|
||||
old "Mouse position: %r"
|
||||
new "Позиция мыши: %r"
|
||||
|
||||
# _developer/developer.rpym:393
|
||||
old "Right-click or escape to quit."
|
||||
new "Нажмите правую кнопку мыши или ESC чтобы выйти."
|
||||
|
||||
# _developer/developer.rpym:425
|
||||
old "Rectangle copied to clipboard."
|
||||
new "Координаты прямоугольника скопированы в буфер обмена."
|
||||
|
||||
# _developer/developer.rpym:428
|
||||
old "Position copied to clipboard."
|
||||
new "Координаты позиции скопированы в буфер обмена."
|
||||
|
||||
# _developer/developer.rpym:447
|
||||
old "Type to filter: "
|
||||
new "Текущий фильтр: "
|
||||
|
||||
# _developer/developer.rpym:575
|
||||
old "Textures: [tex_count] ([tex_size_mb:.1f] MB)"
|
||||
new "Текстур: [tex_count] ([tex_size_mb:.1f] МБ)"
|
||||
|
||||
# _developer/developer.rpym:579
|
||||
old "Image cache: [cache_pct:.1f]% ([cache_size_mb:.1f] MB)"
|
||||
new "Кеш изображений: [cache_pct:.1f]% ([cache_size_mb:.1f] МБ)"
|
||||
|
||||
# _developer/developer.rpym:589
|
||||
old "✔ "
|
||||
new "✔ "
|
||||
|
||||
# _developer/developer.rpym:592
|
||||
old "✘ "
|
||||
new "✘ "
|
||||
|
||||
# _developer/developer.rpym:597
|
||||
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
new "\n{color=#cfc}✔ предсказанное изображение (хорошо){/color}\n{color=#fcc}✘ внезапное изображение (плохо){/color}\n{color=#fff}Нажмите, чтобы передвинуть.{/color}"
|
||||
|
||||
# _developer/inspector.rpym:38
|
||||
old "Displayable Inspector"
|
||||
new "Диспетчер объектов"
|
||||
|
||||
# _developer/inspector.rpym:61
|
||||
old "Size"
|
||||
new "Разрешение"
|
||||
|
||||
# _developer/inspector.rpym:65
|
||||
old "Style"
|
||||
new "Стиль"
|
||||
|
||||
# _developer/inspector.rpym:71
|
||||
old "Location"
|
||||
new "Местоположение"
|
||||
|
||||
# _developer/inspector.rpym:122
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "Инспектирую стили [displayable_name!q]"
|
||||
|
||||
# _developer/inspector.rpym:139
|
||||
old "displayable:"
|
||||
new "объект:"
|
||||
|
||||
# _developer/inspector.rpym:145
|
||||
old " (no properties affect the displayable)"
|
||||
new " (на объект не влияют никакие параметры)"
|
||||
|
||||
# _developer/inspector.rpym:147
|
||||
old " (default properties omitted)"
|
||||
new " (настройки по умолчанию опущены)"
|
||||
|
||||
# _developer/inspector.rpym:185
|
||||
old "<repr() failed>"
|
||||
new "<repr() провален>"
|
||||
|
||||
# 00console.rpy:255
|
||||
old "Press <esc> to exit console. Type help for help.\n"
|
||||
new "Нажмите <esc>, чтобы выйти из консоли. Введите help для помощи.\n"
|
||||
|
||||
@@ -141,75 +141,75 @@ translate russian strings:
|
||||
old "Back (B)"
|
||||
new "Back (B)"
|
||||
|
||||
# _errorhandling.rpym:528
|
||||
# _errorhandling.rpym:529
|
||||
old "Open"
|
||||
new "Журнал"
|
||||
|
||||
# _errorhandling.rpym:530
|
||||
# _errorhandling.rpym:531
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "Открывает файл traceback.txt в текстовом редакторе."
|
||||
|
||||
# _errorhandling.rpym:532
|
||||
# _errorhandling.rpym:533
|
||||
old "Copy"
|
||||
new "Копировать"
|
||||
|
||||
# _errorhandling.rpym:534
|
||||
# _errorhandling.rpym:535
|
||||
old "Copies the traceback.txt file to the clipboard."
|
||||
new "Копирует файл traceback.txt в буфер обмена."
|
||||
|
||||
# _errorhandling.rpym:561
|
||||
# _errorhandling.rpym:562
|
||||
old "An exception has occurred."
|
||||
new "Возникло исключение."
|
||||
|
||||
# _errorhandling.rpym:581
|
||||
# _errorhandling.rpym:582
|
||||
old "Rollback"
|
||||
new "Назад"
|
||||
|
||||
# _errorhandling.rpym:583
|
||||
# _errorhandling.rpym:584
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "Пытается вернуться назад, позволяя вам сохраниться или принять другой выбор."
|
||||
|
||||
# _errorhandling.rpym:586
|
||||
# _errorhandling.rpym:587
|
||||
old "Ignore"
|
||||
new "Игнорировать"
|
||||
|
||||
# _errorhandling.rpym:590
|
||||
# _errorhandling.rpym:591
|
||||
old "Ignores the exception, allowing you to continue."
|
||||
new "Игнорирует это исключение, позволяя вам продолжить."
|
||||
|
||||
# _errorhandling.rpym:592
|
||||
# _errorhandling.rpym:593
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "Игнорирует это исключение, позволяя вам продолжить. Зачастую это ведёт к дополнительным ошибкам."
|
||||
|
||||
# _errorhandling.rpym:596
|
||||
# _errorhandling.rpym:597
|
||||
old "Reload"
|
||||
new "Перезагрузить"
|
||||
|
||||
# _errorhandling.rpym:598
|
||||
# _errorhandling.rpym:599
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "Перезагружает игру с диска, сохраняя и восстанавливая её состояние, если это возможно."
|
||||
|
||||
# _errorhandling.rpym:601
|
||||
# _errorhandling.rpym:602
|
||||
old "Console"
|
||||
new "Консоль"
|
||||
|
||||
# _errorhandling.rpym:603
|
||||
# _errorhandling.rpym:604
|
||||
old "Opens a console to allow debugging the problem."
|
||||
new "Открывает консоль, позволяющую отладить проблему."
|
||||
|
||||
# _errorhandling.rpym:613
|
||||
# _errorhandling.rpym:614
|
||||
old "Quits the game."
|
||||
new "Выходит из игры."
|
||||
|
||||
# _errorhandling.rpym:637
|
||||
# _errorhandling.rpym:638
|
||||
old "Parsing the script failed."
|
||||
new "Обработка сценария завершилась неудачно."
|
||||
|
||||
# _errorhandling.rpym:663
|
||||
# _errorhandling.rpym:664
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "Открывает файл errors.txt в текстовом редакторе."
|
||||
|
||||
# _errorhandling.rpym:667
|
||||
# _errorhandling.rpym:668
|
||||
old "Copies the errors.txt file to the clipboard."
|
||||
new "Копирует файл errors.txt в буфер обмена."
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ translate russian strings:
|
||||
new "## Границы окна, содержащего имя персонажа слева, сверху, справа и снизу по порядку."
|
||||
|
||||
# gui.rpy:124
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## Если True, фон текстового окна будет моститься (расширяться по эффекту плитки). Если False, фон текстового окна будет фиксированным."
|
||||
|
||||
# gui.rpy:129
|
||||
@@ -221,215 +221,215 @@ translate russian strings:
|
||||
old "## The save slot button."
|
||||
new "## Кнопка слота сохранения."
|
||||
|
||||
# gui.rpy:231
|
||||
# gui.rpy:233
|
||||
old "## The width and height of thumbnails used by the save slots."
|
||||
new "## Ширина и высота миниатюры, используемой слотом сохранения."
|
||||
|
||||
# gui.rpy:235
|
||||
# gui.rpy:237
|
||||
old "## The number of columns and rows in the grid of save slots."
|
||||
new "## Количество колонок и рядов в таблице слотов."
|
||||
|
||||
# gui.rpy:240
|
||||
# gui.rpy:242
|
||||
old "## Positioning and Spacing"
|
||||
new "## Позиционирование и Интервалы"
|
||||
|
||||
# gui.rpy:242
|
||||
# gui.rpy:244
|
||||
old "## These variables control the positioning and spacing of various user interface elements."
|
||||
new "## Эти переменные контролируют позиционирование и интервалы различных элементов пользовательского интерфейса."
|
||||
|
||||
# gui.rpy:245
|
||||
# gui.rpy:247
|
||||
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
new "## Местоположение левого края навигационных кнопок по отношению к левому краю экрана."
|
||||
|
||||
# gui.rpy:249
|
||||
# gui.rpy:251
|
||||
old "## The vertical position of the skip indicator."
|
||||
new "## Вертикальная позиция индикатора пропуска."
|
||||
|
||||
# gui.rpy:252
|
||||
# gui.rpy:254
|
||||
old "## The vertical position of the notify screen."
|
||||
new "## Вертикальная позиция экрана уведомлений."
|
||||
|
||||
# gui.rpy:255
|
||||
# gui.rpy:257
|
||||
old "## The spacing between menu choices."
|
||||
new "## Интервал между выборами в меню."
|
||||
|
||||
# gui.rpy:258
|
||||
# gui.rpy:260
|
||||
old "## Buttons in the navigation section of the main and game menus."
|
||||
new "## Кнопки в секции навигации главного и игрового меню."
|
||||
|
||||
# gui.rpy:261
|
||||
# gui.rpy:263
|
||||
old "## Controls the amount of spacing between preferences."
|
||||
new "## Контролирует интервал между настройками."
|
||||
|
||||
# gui.rpy:264
|
||||
# gui.rpy:266
|
||||
old "## Controls the amount of spacing between preference buttons."
|
||||
new "## Контролирует интервал между кнопками настройки."
|
||||
|
||||
# gui.rpy:267
|
||||
# gui.rpy:269
|
||||
old "## The spacing between file page buttons."
|
||||
new "## Интервал между кнопками страниц."
|
||||
|
||||
# gui.rpy:270
|
||||
# gui.rpy:272
|
||||
old "## The spacing between file slots."
|
||||
new "## Интервал между слотами."
|
||||
|
||||
# gui.rpy:273
|
||||
# gui.rpy:275
|
||||
old "## The position of the main menu text."
|
||||
new "## Позиция текста главного меню."
|
||||
|
||||
# gui.rpy:277
|
||||
# gui.rpy:279
|
||||
old "## Frames"
|
||||
new "## Рамки"
|
||||
|
||||
# gui.rpy:279
|
||||
# gui.rpy:281
|
||||
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
new "## Эти переменные контролируют вид рамок, содержащих компоненты пользовательского интерфейса, когда наложения или окна не представлены."
|
||||
|
||||
# gui.rpy:282
|
||||
# gui.rpy:284
|
||||
old "## Generic frames."
|
||||
new "## Генерируем рамки."
|
||||
|
||||
# gui.rpy:285
|
||||
# gui.rpy:287
|
||||
old "## The frame that is used as part of the confirm screen."
|
||||
new "## Рамки, используемые в частях экрана подтверждения."
|
||||
|
||||
# gui.rpy:288
|
||||
# gui.rpy:290
|
||||
old "## The frame that is used as part of the skip screen."
|
||||
new "## Рамки, используемые в частях экрана пропуска."
|
||||
|
||||
# gui.rpy:291
|
||||
# gui.rpy:293
|
||||
old "## The frame that is used as part of the notify screen."
|
||||
new "## Рамки, используемые в частях экрана уведомлений."
|
||||
|
||||
# gui.rpy:294
|
||||
# gui.rpy:296
|
||||
old "## Should frame backgrounds be tiled?"
|
||||
new "## Должны ли фоны рамок моститься?"
|
||||
|
||||
# gui.rpy:298
|
||||
# gui.rpy:300
|
||||
old "## Bars, Scrollbars, and Sliders"
|
||||
new "## Панели, Полосы прокрутки и Ползунки"
|
||||
|
||||
# gui.rpy:300
|
||||
# gui.rpy:302
|
||||
old "## These control the look and size of bars, scrollbars, and sliders."
|
||||
new "## Эти настройки контролируют вид и размер панелей, полос прокрутки и ползунков."
|
||||
|
||||
# gui.rpy:302
|
||||
# gui.rpy:304
|
||||
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written screens."
|
||||
new "## Стандартный GUI использует только ползунки и вертикальные полосы прокрутки. Все остальные полосы используются только в новосозданных экранах."
|
||||
|
||||
# gui.rpy:305
|
||||
# gui.rpy:307
|
||||
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
new "## Высота горизонтальных панелей, полос прокрутки и ползунков. Ширина вертикальных панелей, полос прокрутки и ползунков."
|
||||
|
||||
# gui.rpy:311
|
||||
# gui.rpy:313
|
||||
old "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
new "## True, если изображения панелей должны моститься. False, если они должны быть линейно масштабированы."
|
||||
|
||||
# gui.rpy:316
|
||||
# gui.rpy:318
|
||||
old "## Horizontal borders."
|
||||
new "## Горизонтальные границы."
|
||||
|
||||
# gui.rpy:321
|
||||
# gui.rpy:323
|
||||
old "## Vertical borders."
|
||||
new "## Вертикальные границы."
|
||||
|
||||
# gui.rpy:326
|
||||
# gui.rpy:328
|
||||
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
new "## Что делать с непрокручиваемыми полосами прокрутки в интерфейсе. \"hide\" прячет их, а None их показывает."
|
||||
|
||||
# gui.rpy:331
|
||||
# gui.rpy:333
|
||||
old "## History"
|
||||
new "## История"
|
||||
|
||||
# gui.rpy:333
|
||||
# gui.rpy:335
|
||||
old "## The history screen displays dialogue that the player has already dismissed."
|
||||
new "## Экран истории показывает диалог, который игрок уже прошёл."
|
||||
|
||||
# gui.rpy:335
|
||||
# gui.rpy:337
|
||||
old "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
new "## Количество диалоговых блоков истории, которые Ren'Py будет хранить."
|
||||
|
||||
# gui.rpy:338
|
||||
# gui.rpy:340
|
||||
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
new "## Высота доступных записей на экране истории, или None, чтобы задать высоту в зависимости от производительности."
|
||||
|
||||
# gui.rpy:342
|
||||
# gui.rpy:344
|
||||
old "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
new "## Местоположение, ширина и выравнивание заголовка, показывающего имя говорящего персонажа."
|
||||
|
||||
# gui.rpy:349
|
||||
# gui.rpy:351
|
||||
old "## The position, width, and alignment of the dialogue text."
|
||||
new "## Местоположение, ширина и выравнивание диалогового текста."
|
||||
|
||||
# gui.rpy:356
|
||||
# gui.rpy:358
|
||||
old "## NVL-Mode"
|
||||
new "## Режим NVL"
|
||||
|
||||
# gui.rpy:358
|
||||
# gui.rpy:360
|
||||
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
new "## Экран режима NVL показывает диалог NVL персонажей."
|
||||
|
||||
# gui.rpy:360
|
||||
# gui.rpy:362
|
||||
old "## The borders of the background of the NVL-mode background window."
|
||||
new "## Границы фона окна NVL."
|
||||
|
||||
# gui.rpy:363
|
||||
# gui.rpy:365
|
||||
old "## The maximum number of NVL-mode entries Ren'Py will display. When more entries than this are to be show, the oldest entry will be removed."
|
||||
new "## Максимальное число показываемых строк в режиме NVL. Когда количество строчек начинает превышать это значение, старые строчки очищаются."
|
||||
|
||||
# gui.rpy:367
|
||||
# gui.rpy:369
|
||||
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
new "## Высота доступных строчек в режиме NVL. Установите на None, чтобы строчки динамически регулировали свою высоту."
|
||||
|
||||
# gui.rpy:371
|
||||
# gui.rpy:373
|
||||
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
new "## Интервал между строчками в режиме NVL, если gui.nvl_height имеет значение None, а также между строчками и меню режима NVL."
|
||||
|
||||
# gui.rpy:388
|
||||
# gui.rpy:390
|
||||
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
new "## Местоположение, ширина и выравнивание текста nvl_thought (текст от лица персонажа nvl_narrator)."
|
||||
|
||||
# gui.rpy:395
|
||||
# gui.rpy:397
|
||||
old "## The position of nvl menu_buttons."
|
||||
new "## Местоположение кнопок меню NVL."
|
||||
|
||||
# gui.rpy:399
|
||||
# gui.rpy:401
|
||||
old "## Localization"
|
||||
new "## Локализация"
|
||||
|
||||
# gui.rpy:401
|
||||
# gui.rpy:403
|
||||
old "## This controls where a line break is permitted. The default is suitable for most languages. A list of available values can be found at https://www.renpy.org/doc/html/style_properties.html#style-property-language"
|
||||
new "## Эта настройка контролирует доступ к разрыву линий. Стандартная настройка подходит для большинства языков. Список доступных значений можно найти на https://www.renpy.org/doc/html/style_properties.html#style-property-language"
|
||||
|
||||
# gui.rpy:409
|
||||
# gui.rpy:411
|
||||
old "## Mobile devices"
|
||||
new "## Мобильные устройства"
|
||||
|
||||
# gui.rpy:414
|
||||
# gui.rpy:416
|
||||
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
new "## Этот параметр увеличивает размер быстрых кнопок, чтобы сделать их доступнее для нажатия на планшетах и телефонах."
|
||||
|
||||
# gui.rpy:420
|
||||
# gui.rpy:422
|
||||
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
new "## Это изменяет размеры и интервалы различных элементов GUI, чтобы убедиться, что они будут лучше видны на телефонах."
|
||||
|
||||
# gui.rpy:424
|
||||
# gui.rpy:426
|
||||
old "## Font sizes."
|
||||
new "## Размеры шрифтов."
|
||||
|
||||
# gui.rpy:432
|
||||
# gui.rpy:434
|
||||
old "## Adjust the location of the textbox."
|
||||
new "## Регулирует местоположение текстового окна."
|
||||
|
||||
# gui.rpy:438
|
||||
# gui.rpy:440
|
||||
old "## Change the size and spacing of various things."
|
||||
new "## Изменяет размеры и интервалы различных объектов."
|
||||
|
||||
# gui.rpy:451
|
||||
# gui.rpy:453
|
||||
old "## File button layout."
|
||||
new "## Местоположение кнопок слотов."
|
||||
|
||||
# gui.rpy:455
|
||||
# gui.rpy:457
|
||||
old "## NVL-mode."
|
||||
new "## Режим NVL."
|
||||
|
||||
|
||||
@@ -34,8 +34,8 @@ translate russian strings:
|
||||
new "Чтобы построить Android-пакет, пожалуйста, загрузите RAPT, разархивируйте его и поместить в директорию Ren'Py. Затем перезагрузите лаунчер Ren'Py."
|
||||
|
||||
# android.rpy:31
|
||||
old "An x86 Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "Чтобы построить Android-пакеты на Windows требуется 32-разрядный инструментарий разработки Java. JDK отличен от JRE, и возможно, у вас есть Java без JDK.\n\nПожалуйста, {a=httpу://www.oracle.com/technetwork/java/javase/downloads/index.html}загрузите и установите JDK{/a}, и перезапустите лаунчер Ren'Py."
|
||||
old "A Java 8 Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "Чтобы построить Android-пакеты на Windows требуется инструментарий разработки Java 8. JDK отличен от JRE, и возможно, у вас есть Java без JDK.\n\nПожалуйста, {a=http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html}загрузите и установите JDK{/a}, и перезапустите лаунчер Ren'Py."
|
||||
|
||||
# android.rpy:32
|
||||
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
|
||||
@@ -90,112 +90,344 @@ translate russian strings:
|
||||
new "Собирает Android-пакет, устанавливает его на Android-устройстве, подключённом к компьютеру, а затем запускает приложение на устройстве."
|
||||
|
||||
# android.rpy:48
|
||||
old "Connects to an Android device running ADB in TCP/IP mode."
|
||||
new "Присоединение к Android-устройству с запущенным Android Debug Bridge в режиме TCP/IP."
|
||||
|
||||
# android.rpy:49
|
||||
old "Disconnects from an Android device running ADB in TCP/IP mode."
|
||||
new "Отсоединение от Android-устройства с запущенным Android Debug Bridge в режиме TCP/IP."
|
||||
old "Retrieves the log from the Android device and writes it to a file."
|
||||
new "Берёт лог с Андроид-устройства и пишет его в файл."
|
||||
|
||||
# android.rpy:50
|
||||
old "Retrieves the log from the Android device and writes it to a file."
|
||||
new "Берёт лог с Android-устройства и пишет его в файл."
|
||||
old "Selects the Debug build, which can be accessed through Android Studio. Changing between debug and release builds requires an uninstall from your device."
|
||||
new "Выбор сборки Отладки, доступной для Android Studio. Смена режимов между отладкой и релизом требует предварительного удаления приложения с вашего устройства."
|
||||
|
||||
# android.rpy:244
|
||||
# android.rpy:51
|
||||
old "Selects the Release build, which can be uploaded to stores. Changing between debug and release builds requires an uninstall from your device."
|
||||
new "Выбор сборки Релиза, которую можно загружать в магазины приложений. Смена режимов между отладкой и релизом требует предварительного удаления приложения с вашего устройства."
|
||||
|
||||
# android.rpy:245
|
||||
old "Copying Android files to distributions directory."
|
||||
new "Копирую файлы Android в директорию дистрибутивов."
|
||||
|
||||
# android.rpy:308
|
||||
# android.rpy:313
|
||||
old "Android: [project.current.display_name!q]"
|
||||
new "Android: [project.current.display_name!q]"
|
||||
|
||||
# android.rpy:328
|
||||
# android.rpy:333
|
||||
old "Emulation:"
|
||||
new "Эмуляция:"
|
||||
|
||||
# android.rpy:337
|
||||
# android.rpy:342
|
||||
old "Phone"
|
||||
new "Телефон"
|
||||
|
||||
# android.rpy:341
|
||||
# android.rpy:346
|
||||
old "Tablet"
|
||||
new "Планшет"
|
||||
|
||||
# android.rpy:345
|
||||
# android.rpy:350
|
||||
old "Television"
|
||||
new "Телевизор"
|
||||
|
||||
# android.rpy:357
|
||||
# android.rpy:362
|
||||
old "Build:"
|
||||
new "Собрать:"
|
||||
|
||||
# android.rpy:365
|
||||
# android.rpy:373
|
||||
old "Debug"
|
||||
new "Отладку"
|
||||
|
||||
# android.rpy:377
|
||||
old "Release"
|
||||
new "Релиз"
|
||||
|
||||
# android.rpy:384
|
||||
old "Install SDK & Create Keys"
|
||||
new "Установить SDK и создать ключи"
|
||||
|
||||
# android.rpy:369
|
||||
# android.rpy:388
|
||||
old "Configure"
|
||||
new "Настроить"
|
||||
|
||||
# android.rpy:373
|
||||
# android.rpy:392
|
||||
old "Build Package"
|
||||
new "Собрать Пакет"
|
||||
|
||||
# android.rpy:377
|
||||
# android.rpy:396
|
||||
old "Build & Install"
|
||||
new "Собрать и Установить"
|
||||
|
||||
# android.rpy:381
|
||||
# android.rpy:400
|
||||
old "Build, Install & Launch"
|
||||
new "Собрать, Установить и Запустить"
|
||||
|
||||
# android.rpy:392
|
||||
# android.rpy:411
|
||||
old "Other:"
|
||||
new "Другое:"
|
||||
|
||||
# android.rpy:400
|
||||
old "Remote ADB Connect"
|
||||
new "Удалённое Соединение с ADB"
|
||||
|
||||
# android.rpy:404
|
||||
old "Remote ADB Disconnect"
|
||||
new "Удалённое Отсоединение от ADB"
|
||||
|
||||
# android.rpy:408
|
||||
# android.rpy:419
|
||||
old "Logcat"
|
||||
new "Logcat"
|
||||
|
||||
# android.rpy:441
|
||||
# android.rpy:452
|
||||
old "Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"
|
||||
new "Перед тем как собирать приложения Android, вам нужно загрузить RAPT, инструмент Ren'Py для сбора пакетов Android. Хотите загрузить RAPT сейчас?"
|
||||
new "Перед упаковкой приложений Android вам нужно загрузить RAPT, инструмент упаковки Ren'Py Android. Желаете загрузить RAPT сейчас?"
|
||||
|
||||
# android.rpy:500
|
||||
old "Remote ADB Address"
|
||||
new "Удалённый адрес ADB"
|
||||
|
||||
# android.rpy:500
|
||||
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
|
||||
new "Пожалуйста, введите IP-адрес и номер порта, чтобы соединиться с устройством, по форме \"192.168.1.143:5555\". Ознакомьтесь с документацией своего устройства, чтобы определить поддерживает ли оно удалённый ADB, и если так, адрес и порт для использования."
|
||||
|
||||
# android.rpy:512
|
||||
old "Invalid remote ADB address"
|
||||
new "Неверный адрес удалённого ADB"
|
||||
|
||||
# android.rpy:512
|
||||
old "The address must contain one exactly one ':'."
|
||||
new "Адрес должен содержать один, только один ':'."
|
||||
|
||||
# android.rpy:516
|
||||
old "The host may not contain whitespace."
|
||||
new "Хост не может содержать пробелы."
|
||||
|
||||
# android.rpy:522
|
||||
old "The port must be a number."
|
||||
new "Порт должен содержать только цифры."
|
||||
|
||||
# android.rpy:548
|
||||
# android.rpy:505
|
||||
old "Retrieving logcat information from device."
|
||||
new "Извлекаю информацию logcat из устройства."
|
||||
new "Извлекаю информацию logcat с устройства."
|
||||
|
||||
# androidstrings.rpy:7
|
||||
old "{} is not a directory."
|
||||
new "{} - не папка."
|
||||
|
||||
# androidstrings.rpy:8
|
||||
old "{} does not contain a Ren'Py game."
|
||||
new "{} не содержит игру Ren'Py."
|
||||
|
||||
# androidstrings.rpy:9
|
||||
old "Run configure before attempting to build the app."
|
||||
new "Запуск настройки перед попыткой постройки приложения."
|
||||
|
||||
# androidstrings.rpy:10
|
||||
old "Google Play support is enabled, but build.google_play_key is not defined."
|
||||
new "Поддержка Google Play включена, однако переменная build.google_play_key не определена."
|
||||
|
||||
# androidstrings.rpy:11
|
||||
old "Updating project."
|
||||
new "Обновляю проект"
|
||||
|
||||
# androidstrings.rpy:12
|
||||
old "Creating assets directory."
|
||||
new "Создаю директорию ресурсов"
|
||||
|
||||
# androidstrings.rpy:13
|
||||
old "Creating expansion file."
|
||||
new "Создаю файл-расширение"
|
||||
|
||||
# androidstrings.rpy:14
|
||||
old "Packaging internal data."
|
||||
new "Пакую внутренние данные"
|
||||
|
||||
# androidstrings.rpy:15
|
||||
old "I'm using Gradle to build the package."
|
||||
new "Использую Gradle для сборки пакета"
|
||||
|
||||
# androidstrings.rpy:16
|
||||
old "Uploading expansion file."
|
||||
new "Загружаю файл-расширение"
|
||||
|
||||
# androidstrings.rpy:17
|
||||
old "The build seems to have failed."
|
||||
new "Ой, ошибка со сборкой приключилась..."
|
||||
|
||||
# androidstrings.rpy:18
|
||||
old "Launching app."
|
||||
new "Запускаю приложение"
|
||||
|
||||
# androidstrings.rpy:19
|
||||
old "The build seems to have succeeded."
|
||||
new "Кажется, сборка прошла успешно!"
|
||||
|
||||
# androidstrings.rpy:20
|
||||
old "What is the full name of your application? This name will appear in the list of installed applications."
|
||||
new "Каким будет полное имя вашего приложения? Это имя будет представлено в списке установленных приложений."
|
||||
|
||||
# androidstrings.rpy:21
|
||||
old "What is the short name of your application? This name will be used in the launcher, and for application shortcuts."
|
||||
new "Каким будет короткое имя вашего приложения? Это имя будет использоваться в лаунчере, а также ярлыках приложения."
|
||||
|
||||
# androidstrings.rpy:22
|
||||
old "What is the name of the package?\n\nThis is usually of the form com.domain.program or com.domain.email.program. It may only contain ASCII letters and dots. It must contain at least one dot."
|
||||
new "Каким будет имя собранного пакета?\n\nОбычно оно имеет форму com.domain.program или com.domain.email.program. Имя может содержать только символы ASCII и точки. Также оно должно содержать хотя бы одну точку."
|
||||
|
||||
# androidstrings.rpy:23
|
||||
old "The package name may not be empty."
|
||||
new "Имя пакета не может быть пустым."
|
||||
|
||||
# androidstrings.rpy:24
|
||||
old "The package name may not contain spaces."
|
||||
new "В имени пакета не должно быть пробелов."
|
||||
|
||||
# androidstrings.rpy:25
|
||||
old "The package name must contain at least one dot."
|
||||
new "Имя пакета должно содержать как минимум одну точку."
|
||||
|
||||
# androidstrings.rpy:26
|
||||
old "The package name may not contain two dots in a row, or begin or end with a dot."
|
||||
new "Имя пакета не должно содержать две и более точек подряд, или начинаться и заканчиваться с точки."
|
||||
|
||||
# androidstrings.rpy:27
|
||||
old "Each part of the package name must start with a letter, and contain only letters, numbers, and underscores."
|
||||
new "Каждая часть имя пакета должна начинаться с буквы и содержать только английские буквы, цифры и подчёркивания."
|
||||
|
||||
# androidstrings.rpy:28
|
||||
old "{} is a Java keyword, and can't be used as part of a package name."
|
||||
new "{} - оператор Java, его нельзя использовать в имени пакета."
|
||||
|
||||
# androidstrings.rpy:29
|
||||
old "What is the application's version?\n\nThis should be the human-readable version that you would present to a person. It must contain only numbers and dots."
|
||||
new "Какой будет версия приложения?\n\nВерсия приложения представлена для человека и независима от config.version. Она может содержать только цифры и точки."
|
||||
|
||||
# androidstrings.rpy:30
|
||||
old "The version number must contain only numbers and dots."
|
||||
new "Номер версии должен содержать только цифры и точки."
|
||||
|
||||
# androidstrings.rpy:31
|
||||
old "What is the version code?\n\nThis must be a positive integer number, and the value should increase between versions."
|
||||
new "Каким будет код версии?\n\nЭто должно быть положительное целое число, и его значение должно увеличиваться с каждой версией."
|
||||
|
||||
# androidstrings.rpy:32
|
||||
old "The numeric version must contain only numbers."
|
||||
new "Целое версии должно содержать только цифры."
|
||||
|
||||
# androidstrings.rpy:33
|
||||
old "How would you like your application to be displayed?"
|
||||
new "В какой ориентации экрана вы хотите отображать ваше приложение?"
|
||||
|
||||
# androidstrings.rpy:34
|
||||
old "In landscape orientation."
|
||||
new "В альбомном виде."
|
||||
|
||||
# androidstrings.rpy:35
|
||||
old "In portrait orientation."
|
||||
new "В портретном виде."
|
||||
|
||||
# androidstrings.rpy:36
|
||||
old "In the user's preferred orientation."
|
||||
new "По желанию пользователя."
|
||||
|
||||
# androidstrings.rpy:37
|
||||
old "Which app store would you like to support in-app purchasing through?"
|
||||
new "Через какой магазин приложений вы желаете поддерживать микротранзакции внутри приложения?"
|
||||
|
||||
# androidstrings.rpy:38
|
||||
old "Google Play."
|
||||
new "Google Play."
|
||||
|
||||
# androidstrings.rpy:39
|
||||
old "Amazon App Store."
|
||||
new "Магазин приложений Amazon."
|
||||
|
||||
# androidstrings.rpy:40
|
||||
old "Both, in one app."
|
||||
new "Оба, в одном приложении."
|
||||
|
||||
# androidstrings.rpy:41
|
||||
old "Neither."
|
||||
new "Отключить."
|
||||
|
||||
# androidstrings.rpy:42
|
||||
old "Would you like to create an expansion APK?"
|
||||
new "Желаете создать пакет в формате APK+кэш?"
|
||||
|
||||
# androidstrings.rpy:43
|
||||
old "No. Size limit of 100 MB on Google Play, but can be distributed through other stores and sideloaded."
|
||||
new "Нет. Ограничение по размеру в Google Play - 100 МБ, но может распространяться через другие магазины или локально."
|
||||
|
||||
# androidstrings.rpy:44
|
||||
old "Yes. 2 GB size limit, but won't work outside of Google Play. (Read the documentation to get this to work.)"
|
||||
new "Да. Ограничение в 2 ГБ, но не будет работать вне среды Google Play. (Ознакомьтесь с {a=https://renpy.org/doc/html/android.html?highlight=apk#google-play-expansion-apks}документацией{/a})"
|
||||
|
||||
# androidstrings.rpy:45
|
||||
old "Do you want to allow the app to access the Internet?"
|
||||
new "Желаете разрешить вашему приложению доступ в Интернет?"
|
||||
|
||||
# androidstrings.rpy:46
|
||||
old "Do you want to automatically update the generated project?"
|
||||
new "Желаете автоматически обновлять сгенерированный проект?"
|
||||
|
||||
# androidstrings.rpy:47
|
||||
old "Yes. This is the best choice for most projects."
|
||||
new "Да. Это лучшее решение для большинства проектов."
|
||||
|
||||
# androidstrings.rpy:48
|
||||
old "No. This may require manual updates when Ren'Py or the project configuration changes."
|
||||
new "Нет. Это решение может потребовать ручных обновлений при изменении Ren'Py или конфигурации проекта."
|
||||
|
||||
# androidstrings.rpy:49
|
||||
old "Unknown configuration variable: {}"
|
||||
new "Неизвестная конфигурационная переменная: {}"
|
||||
|
||||
# androidstrings.rpy:50
|
||||
old "I'm compiling a short test program, to see if you have a working JDK on your system."
|
||||
new "Сейчас я компилирую небольшую тестовую программу, чтобы убедиться, что в вашей системе есть работающий JDK."
|
||||
|
||||
# androidstrings.rpy:51
|
||||
old "I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Without a working JDK, I can't continue."
|
||||
new "Я не смогла воспользоваться javac для компиляции тестового файла. Если у вас не установлен Инструментарий Разработки Java, пожалуйста, загрузите его с:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nJDK отличается от JRE, так что есть вероятность, что у вас установлена Java без JDK. Без функционирующего JDK я не могу продолжить."
|
||||
|
||||
# androidstrings.rpy:52
|
||||
old "The version of Java on your computer does not appear to be JDK 8, which is the only version supported by the Android SDK. If you need to install JDK 8, you can download it from:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nYou can also set the JAVA_HOME environment variabe to use a different version of Java."
|
||||
new "Судя по всему, версия Java на вашем компьютере - не JDK 8, единственная версия, поддерживаемая Android SDK. Если вам нужно установить JDK 8, вы можете скачать его с:\n\nhttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html\n\nТакже вы можете изменить переменную окружения JAVA_HOME, чтобы воспользоваться другой версией Java."
|
||||
|
||||
# androidstrings.rpy:53
|
||||
old "The JDK is present and working. Good!"
|
||||
new "JDK найден и работает. Отлично!"
|
||||
|
||||
# androidstrings.rpy:54
|
||||
old "The Android SDK has already been unpacked."
|
||||
new "Android SDK уже распакован."
|
||||
|
||||
# androidstrings.rpy:55
|
||||
old "Do you accept the Android SDK Terms and Conditions?"
|
||||
new "Вы принимаете условияя и положения пользования Android SDK?"
|
||||
|
||||
# androidstrings.rpy:56
|
||||
old "I'm downloading the Android SDK. This might take a while."
|
||||
new "Загружаю Android SDK. Это может занять некоторое время."
|
||||
|
||||
# androidstrings.rpy:57
|
||||
old "I'm extracting the Android SDK."
|
||||
new "Извлекаю Android SDK."
|
||||
|
||||
# androidstrings.rpy:58
|
||||
old "I've finished unpacking the Android SDK."
|
||||
new "Извлечение Android SDK завершено."
|
||||
|
||||
# androidstrings.rpy:59
|
||||
old "I'm about to download and install the required Android packages. This might take a while."
|
||||
new "Начинаю загрузку и установку необходимых пакетов Android. Это может занять время."
|
||||
|
||||
# androidstrings.rpy:60
|
||||
old "I was unable to accept the Android licenses."
|
||||
new "Внимание, не удалось принять соглашения Android!"
|
||||
|
||||
# androidstrings.rpy:61
|
||||
old "I was unable to install the required Android packages."
|
||||
new "Установка необходимых пакетов Android не удалась!"
|
||||
|
||||
# androidstrings.rpy:62
|
||||
old "I've finished installing the required Android packages."
|
||||
new "Заканчиваю установку необходимых пакетов Android."
|
||||
|
||||
# androidstrings.rpy:63
|
||||
old "You set the keystore yourself, so I'll assume it's how you want it."
|
||||
new "Вы сами установили хранилище ключей, так что посмею предположить, что оно настроено так, как вы хотите."
|
||||
|
||||
# androidstrings.rpy:64
|
||||
old "You've already created an Android keystore, so I won't create a new one for you."
|
||||
new "Вы уже создали хранилище ключей Android, так что я не буду создавать для вас новое."
|
||||
|
||||
# androidstrings.rpy:65
|
||||
old "I can create an application signing key for you. Signing an application with this key allows it to be placed in the Android Market and other app stores.\n\nDo you want to create a key?"
|
||||
new "Я могу создать для вас ключ для подписи приложения. Подпись приложения этим ключом позволит разместить его в Android Market и других магазинах приложений.\n\nХотите создать ключ?"
|
||||
|
||||
# androidstrings.rpy:66
|
||||
old "I will create the key in the android.keystore file.\n\nYou need to back this file up. If you lose it, you will not be able to upgrade your application.\n\n\\You also need to keep the key safe. If evil people get this file, they could make fake versions of your application, and potentially steal your users' data.\n\nWill you make a backup of android.keystore, and keep it in a safe place?"
|
||||
new "Я создам ключ в файле android.keystore.\n\nВам нужно сохранить этот файл. Если вы его потеряете, то не сможете обновлять ваше приложение. n.\n\n\\Также вам нужно держать ваш ключ в безопасность. Если злоумышленникам удастся получить его, они потенциально могут создать вредоносную версию приложения и красть данные ваших пользователей.\n\nБудете ли вы хранить android.keystore и держать его в надёжном месте?"
|
||||
|
||||
# androidstrings.rpy:67
|
||||
old "Please enter your name or the name of your organization."
|
||||
new "Пожалуйста, введите ваше имя или имя вашей организации."
|
||||
|
||||
# androidstrings.rpy:68
|
||||
old "Could not create android.keystore. Is keytool in your path?"
|
||||
new "Не могу создать android.keystore. Хранилище ключей расположено в вашем пути файлов?"
|
||||
|
||||
# androidstrings.rpy:69
|
||||
old "I've finished creating android.keystore. Please back it up, and keep it in a safe place."
|
||||
new "Создание android.keystore завершено. Пожалуйста, сохраните его и держите в надёжном месте."
|
||||
|
||||
# androidstrings.rpy:70
|
||||
old "It looks like you're ready to start packaging games."
|
||||
new "Похоже, вы готовы собирать игры!"
|
||||
|
||||
# choose_directory.rpy:87
|
||||
old "Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."
|
||||
@@ -569,75 +801,75 @@ translate russian strings:
|
||||
old "Please click on the color scheme you wish to use, then click Continue. These colors can be changed and customized later."
|
||||
new "Пожалуйста, кликните на цветовую схему, которую вы хотите использовать, а затем кликните Продолжить. Эти цвета можно изменить позже."
|
||||
|
||||
# gui7.rpy:310
|
||||
# gui7.rpy:311
|
||||
old "{b}Warning{/b}\nContinuing will overwrite customized bar, button, save slot, scrollbar, and slider images.\n\nWhat would you like to do?"
|
||||
new "{b}Внимание{/b}\nПродолжив, вы перепишете настроенные полосы, кнопки, слоты сохранения, полосы прокрутки и ползунки.\n\nЧто вы хотите сделать?"
|
||||
|
||||
# gui7.rpy:310
|
||||
# gui7.rpy:311
|
||||
old "Choose new colors, then regenerate image files."
|
||||
new "Выбрать новые цвета, затем воссоздать файлы изображений."
|
||||
|
||||
# gui7.rpy:310
|
||||
# gui7.rpy:311
|
||||
old "Regenerate the image files using the colors in gui.rpy."
|
||||
new "Воссоздать файлы изображений используя цвета из gui.rpy."
|
||||
|
||||
# gui7.rpy:330
|
||||
# gui7.rpy:331
|
||||
old "PROJECT NAME"
|
||||
new "ИМЯ ПРОЕКТА"
|
||||
|
||||
# gui7.rpy:330
|
||||
# gui7.rpy:331
|
||||
old "Please enter the name of your project:"
|
||||
new "Пожалуйста, введите имя проекта:"
|
||||
|
||||
# gui7.rpy:338
|
||||
# gui7.rpy:339
|
||||
old "The project name may not be empty."
|
||||
new "Имя проекта не должно быть пустым."
|
||||
|
||||
# gui7.rpy:343
|
||||
# gui7.rpy:344
|
||||
old "[project_name!q] already exists. Please choose a different project name."
|
||||
new "[project_name!q] уже существует. Выберите другое имя проекта."
|
||||
|
||||
# gui7.rpy:346
|
||||
# gui7.rpy:347
|
||||
old "[project_dir!q] already exists. Please choose a different project name."
|
||||
new "[project_dir!q] уже существует. Выберите другое имя проекта."
|
||||
|
||||
# gui7.rpy:357
|
||||
# gui7.rpy:358
|
||||
old "What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."
|
||||
new "Какое разрешение будет использовать ваш проект? Хотя Ren'Py может масштабировать окно, это будет целевой размер окна, по отношению к которому будут вырисовываться ресурсы, и на котором они будут наиболее чёткие.\n\nСтандартный 1280x720 — резонный компромисс."
|
||||
|
||||
# gui7.rpy:357
|
||||
# gui7.rpy:358
|
||||
old "Custom. The GUI is optimized for a 16:9 aspect ratio."
|
||||
new "Своё. GUI оптимизирован под соотношение сторон 16:9."
|
||||
|
||||
# gui7.rpy:372
|
||||
# gui7.rpy:373
|
||||
old "WIDTH"
|
||||
new "ШИРИНА"
|
||||
|
||||
# gui7.rpy:372
|
||||
# gui7.rpy:373
|
||||
old "Please enter the width of your game, in pixels."
|
||||
new "Пожалуйста, введите ширину вашей игры в пикселях."
|
||||
|
||||
# gui7.rpy:377
|
||||
# gui7.rpy:378
|
||||
old "The width must be a number."
|
||||
new "Ширина должна быть цифрой."
|
||||
|
||||
# gui7.rpy:379
|
||||
# gui7.rpy:380
|
||||
old "HEIGHT"
|
||||
new "ВЫСОТА"
|
||||
|
||||
# gui7.rpy:379
|
||||
# gui7.rpy:380
|
||||
old "Please enter the height of your game, in pixels."
|
||||
new "Пожалуйста, введите высоту вашей игры в пикселях."
|
||||
|
||||
# gui7.rpy:384
|
||||
# gui7.rpy:385
|
||||
old "The height must be a number."
|
||||
new "Высота должна быть цифрой."
|
||||
|
||||
# gui7.rpy:426
|
||||
# gui7.rpy:427
|
||||
old "Creating the new project..."
|
||||
new "Создаю новый проект..."
|
||||
|
||||
# gui7.rpy:428
|
||||
# gui7.rpy:429
|
||||
old "Updating the project..."
|
||||
new "Обновляю проект..."
|
||||
|
||||
@@ -821,7 +1053,7 @@ translate russian strings:
|
||||
old "Please {a=https://itch.io/game/new}create your project{/a}, then add a line like \n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5} to options.rpy."
|
||||
new "Пожалуйста, {a=https://itch.io/game/new}создайте ваш проект{/a}, затем добавьте строку типа\n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5} в options.rpy."
|
||||
|
||||
# mobilebuild.rpy:109
|
||||
# mobilebuild.rpy:110
|
||||
old "{a=%s}%s{/a}"
|
||||
new "{a=%s}%s{/a}"
|
||||
|
||||
@@ -829,7 +1061,7 @@ translate russian strings:
|
||||
old "Navigate: [project.current.display_name!q]"
|
||||
new "Навигация: [project.current.display_name!q]"
|
||||
|
||||
# navigation.rpy:177
|
||||
# navigation.rpy:178
|
||||
old "Order: "
|
||||
new "Порядок: "
|
||||
|
||||
@@ -933,91 +1165,87 @@ translate russian strings:
|
||||
old "Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'."
|
||||
new "Пожалуйста, выберите образец, на котором основывать ваш проект. Образец задаёт шрифт и язык по умолчанию для интерфейса. Если ваш язык не поддерживается, выберите 'english'."
|
||||
|
||||
# preferences.rpy:72
|
||||
# preferences.rpy:73
|
||||
old "Launcher Preferences"
|
||||
new "Настройки лаунчера"
|
||||
|
||||
# preferences.rpy:93
|
||||
# preferences.rpy:94
|
||||
old "Projects Directory:"
|
||||
new "Папка проектов:"
|
||||
|
||||
# preferences.rpy:100
|
||||
# preferences.rpy:101
|
||||
old "[persistent.projects_directory!q]"
|
||||
new "[persistent.projects_directory!q]"
|
||||
|
||||
# preferences.rpy:102
|
||||
# preferences.rpy:103
|
||||
old "Projects directory: [text]"
|
||||
new "Папка проектов: [text]"
|
||||
|
||||
# preferences.rpy:104
|
||||
# preferences.rpy:105
|
||||
old "Not Set"
|
||||
new "Не задано"
|
||||
|
||||
# preferences.rpy:119
|
||||
# preferences.rpy:120
|
||||
old "Text Editor:"
|
||||
new "Текстовый редактор:"
|
||||
|
||||
# preferences.rpy:125
|
||||
# preferences.rpy:126
|
||||
old "Text editor: [text]"
|
||||
new "Текстовый редактор: [text]"
|
||||
|
||||
# preferences.rpy:141
|
||||
old "Update Channel:"
|
||||
new "Канал обновлений:"
|
||||
|
||||
# preferences.rpy:161
|
||||
# preferences.rpy:145
|
||||
old "Navigation Options:"
|
||||
new "Опции навигации:"
|
||||
|
||||
# preferences.rpy:165
|
||||
# preferences.rpy:149
|
||||
old "Include private names"
|
||||
new "Включать приватные имена"
|
||||
|
||||
# preferences.rpy:166
|
||||
# preferences.rpy:150
|
||||
old "Include library names"
|
||||
new "Включать имена библиотек"
|
||||
|
||||
# preferences.rpy:176
|
||||
# preferences.rpy:160
|
||||
old "Launcher Options:"
|
||||
new "Опции лаунчера:"
|
||||
|
||||
# preferences.rpy:180
|
||||
# preferences.rpy:164
|
||||
old "Hardware rendering"
|
||||
new "Аппаратный рендеринг"
|
||||
|
||||
# preferences.rpy:181
|
||||
# preferences.rpy:165
|
||||
old "Show edit file section"
|
||||
new "Показывать секцию редактирования"
|
||||
|
||||
# preferences.rpy:182
|
||||
# preferences.rpy:166
|
||||
old "Large fonts"
|
||||
new "Большие шрифты"
|
||||
|
||||
# preferences.rpy:185
|
||||
# preferences.rpy:169
|
||||
old "Console output"
|
||||
new "Вывод на консоль"
|
||||
|
||||
# preferences.rpy:187
|
||||
# preferences.rpy:173
|
||||
old "Force new tutorial"
|
||||
new "Новое обучение"
|
||||
|
||||
# preferences.rpy:189
|
||||
# preferences.rpy:177
|
||||
old "Legacy options"
|
||||
new "Включить старые темы"
|
||||
|
||||
# preferences.rpy:192
|
||||
# preferences.rpy:180
|
||||
old "Show templates"
|
||||
new "Показывать образцы"
|
||||
|
||||
# preferences.rpy:194
|
||||
# preferences.rpy:182
|
||||
old "Sponsor message"
|
||||
new "Сообщение спонсорам"
|
||||
|
||||
# preferences.rpy:214
|
||||
# preferences.rpy:202
|
||||
old "Open launcher project"
|
||||
new "Открыть проект лаунчера"
|
||||
|
||||
# preferences.rpy:228
|
||||
# preferences.rpy:216
|
||||
old "Language:"
|
||||
new "Язык:"
|
||||
|
||||
@@ -1037,35 +1265,35 @@ translate russian strings:
|
||||
old "Have you backed up your projects recently?"
|
||||
new "Давно сохраняли свои проекты?"
|
||||
|
||||
# project.rpy:280
|
||||
# project.rpy:281
|
||||
old "Launching the project failed."
|
||||
new "Запуск проекта провален."
|
||||
|
||||
# project.rpy:280
|
||||
# project.rpy:281
|
||||
old "Please ensure that your project launches normally before running this command."
|
||||
new "Пожалуйста, убедитесь, что ваш проект нормально запускается перед использованием этой команды."
|
||||
|
||||
# project.rpy:296
|
||||
# project.rpy:297
|
||||
old "Ren'Py is scanning the project..."
|
||||
new "Ren'Py сканирует проект..."
|
||||
|
||||
# project.rpy:725
|
||||
# project.rpy:729
|
||||
old "Launching"
|
||||
new "Запускаю"
|
||||
|
||||
# project.rpy:759
|
||||
# project.rpy:763
|
||||
old "PROJECTS DIRECTORY"
|
||||
new "ДИРЕКТОРИЯ ПРОЕКТОВ"
|
||||
|
||||
# project.rpy:759
|
||||
# project.rpy:763
|
||||
old "Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
|
||||
new "Пожалуйста, выберите директорию проектов, используя выборщик директорий.\n{b}Он мог появиться позади этого окна.{/b}"
|
||||
|
||||
# project.rpy:759
|
||||
# project.rpy:763
|
||||
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
|
||||
new "Лаунчер будет искать проекты в этой директории, создавать новые проекты в этой директории, и размещать построенные проекты в этой директории."
|
||||
|
||||
# project.rpy:764
|
||||
# project.rpy:768
|
||||
old "Ren'Py has set the projects directory to:"
|
||||
new "Ren'Py установила директорию проектов на:"
|
||||
|
||||
@@ -1173,95 +1401,102 @@ translate russian strings:
|
||||
old "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[persistent.dialogue_format] in the base directory."
|
||||
new "Ren'Py завершила извлечение диалога. Извлечённый диалог можно найти в файле dialogue.[persistent.dialogue_format] в директории проекта."
|
||||
|
||||
# updater.rpy:75
|
||||
old "Select Update Channel"
|
||||
new "Выберите канал обновлений"
|
||||
|
||||
# updater.rpy:86
|
||||
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
|
||||
new "Канал обновлений выбирает, какую версию Ren'Py скачает программа для обновления. Выберите канал:"
|
||||
|
||||
# updater.rpy:91
|
||||
old "Release"
|
||||
new "Релиз"
|
||||
|
||||
# updater.rpy:97
|
||||
# updater.rpy:63
|
||||
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
|
||||
new "{b}Рекомендуется.{/b} Эта версия Ren'Py должна использоваться для всех новых игр."
|
||||
|
||||
# updater.rpy:102
|
||||
# updater.rpy:65
|
||||
old "Prerelease"
|
||||
new "Пререлиз"
|
||||
|
||||
# updater.rpy:108
|
||||
# updater.rpy:66
|
||||
old "A preview of the next version of Ren'Py that can be used for testing and taking advantage of new features, but not for final releases of games."
|
||||
new "Публичный анонс следующей версии Ren'Py, который можно использовать для тестирования, в том числе новых возможностей Ren'Py, но не для финальных релизов игр."
|
||||
|
||||
# updater.rpy:114
|
||||
# updater.rpy:68
|
||||
old "Experimental"
|
||||
new "Экспериментальный"
|
||||
|
||||
# updater.rpy:120
|
||||
# updater.rpy:69
|
||||
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
|
||||
new "Экспериментальные версии Ren'Py. Не выбирайте этот канал, если вас не просил об этом разработчик Ren'Py."
|
||||
|
||||
# updater.rpy:126
|
||||
# updater.rpy:71
|
||||
old "Nightly"
|
||||
new "Ночной"
|
||||
|
||||
# updater.rpy:132
|
||||
# updater.rpy:72
|
||||
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
|
||||
new "Развитие Ren'Py на краю горизонта событий. Здесь можно найти новейшие возможности Ren'Py или всё может просто не запуститься."
|
||||
|
||||
# updater.rpy:152
|
||||
# updater.rpy:90
|
||||
old "Select Update Channel"
|
||||
new "Выберите канал обновлений"
|
||||
|
||||
# updater.rpy:101
|
||||
old "The update channel controls the version of Ren'Py the updater will download."
|
||||
new "Канал обновлений отвечает за версию Ren'Py, скачиваемую через обновление."
|
||||
|
||||
# updater.rpy:110
|
||||
old "• This version is installed and up-to-date."
|
||||
new "• На данный момент установлена эта версия."
|
||||
|
||||
# updater.rpy:118
|
||||
old "%B %d, %Y"
|
||||
new "%B %d, %Y"
|
||||
|
||||
# updater.rpy:140
|
||||
old "An error has occured:"
|
||||
new "Возникла ошибка:"
|
||||
|
||||
# updater.rpy:154
|
||||
# updater.rpy:142
|
||||
old "Checking for updates."
|
||||
new "Проверка обновлений."
|
||||
|
||||
# updater.rpy:156
|
||||
# updater.rpy:144
|
||||
old "Ren'Py is up to date."
|
||||
new "Ren'Py обновлена."
|
||||
|
||||
# updater.rpy:158
|
||||
# updater.rpy:146
|
||||
old "[u.version] is now available. Do you want to install it?"
|
||||
new "[u.version] доступна. Вы хотите её установить?"
|
||||
|
||||
# updater.rpy:160
|
||||
# updater.rpy:148
|
||||
old "Preparing to download the update."
|
||||
new "Подготовка к обновлению."
|
||||
|
||||
# updater.rpy:162
|
||||
# updater.rpy:150
|
||||
old "Downloading the update."
|
||||
new "Загрузка обновления."
|
||||
|
||||
# updater.rpy:164
|
||||
# updater.rpy:152
|
||||
old "Unpacking the update."
|
||||
new "Распаковка обновления."
|
||||
|
||||
# updater.rpy:166
|
||||
# updater.rpy:154
|
||||
old "Finishing up."
|
||||
new "Завершаю..."
|
||||
|
||||
# updater.rpy:168
|
||||
# updater.rpy:156
|
||||
old "The update has been installed. Ren'Py will restart."
|
||||
new "Обновление было установлено. Ren'Py будет перезапущена."
|
||||
|
||||
# updater.rpy:170
|
||||
# updater.rpy:158
|
||||
old "The update has been installed."
|
||||
new "Обновление было установлено."
|
||||
|
||||
# updater.rpy:172
|
||||
# updater.rpy:160
|
||||
old "The update was cancelled."
|
||||
new "Обновление было отменено."
|
||||
|
||||
# updater.rpy:189
|
||||
# updater.rpy:177
|
||||
old "Ren'Py Update"
|
||||
new "Обновление Ren'Py"
|
||||
|
||||
# updater.rpy:195
|
||||
# updater.rpy:183
|
||||
old "Proceed"
|
||||
new "Продолжить"
|
||||
|
||||
# updater.rpy:188
|
||||
old "Fetching the list of update channels"
|
||||
new "Запрашиваю список каналов обновления"
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
|
||||
translate russian strings:
|
||||
|
||||
# _layout/classic_joystick_preferences.rpym:94
|
||||
old "Joystick Mapping"
|
||||
new "Раскладка джойстика"
|
||||
|
||||
# _layout/classic_load_save.rpym:138
|
||||
old "Empty Slot."
|
||||
new "Пустой слот"
|
||||
|
||||
# _layout/classic_load_save.rpym:170
|
||||
old "a"
|
||||
new "а"
|
||||
|
||||
# _layout/classic_load_save.rpym:179
|
||||
old "q"
|
||||
new "б"
|
||||
|
||||
# _compat/gamemenu.rpym:355
|
||||
old "Previous"
|
||||
new "Назад"
|
||||
|
||||
# _compat/gamemenu.rpym:362
|
||||
old "Next"
|
||||
new "Далее"
|
||||
|
||||
@@ -205,7 +205,7 @@ translate russian strings:
|
||||
old "## Reserve space for the navigation section."
|
||||
new "## Резервирует пространство для навигации."
|
||||
|
||||
# screens.rpy:471
|
||||
# screens.rpy:473
|
||||
old "Return"
|
||||
new "Вернуться"
|
||||
|
||||
@@ -297,7 +297,7 @@ translate russian strings:
|
||||
old "{#auto_page}A"
|
||||
new "{#auto_page}А"
|
||||
|
||||
# screens.rpy:667
|
||||
# screens.rpy:669
|
||||
old "{#quick_page}Q"
|
||||
new "{#quick_page}Б"
|
||||
|
||||
|
||||
@@ -138,8 +138,8 @@ translate simplified_chinese strings:
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
@@ -138,7 +138,7 @@ translate spanish strings:
|
||||
new "## Los bordes de la caja que contiene el nombre del personaje, en orden: izquierda, arriba, derecha, abajo."
|
||||
|
||||
# gui.rpy:124
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## Si es 'True, el fondo de la caja del nombre será en mosaico, si es 'False', el fondo, si la caja del nombre es escalada."
|
||||
|
||||
# gui.rpy:129
|
||||
@@ -159,7 +159,7 @@ translate spanish strings:
|
||||
|
||||
# gui.rpy:145
|
||||
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
new "## Estas variables, junto con las imágenes de 'gui/button', controal el aspecto de los botones."
|
||||
new "## Estas variables, junto con las imágenes de 'gui/button', controla el aspecto de los botones."
|
||||
|
||||
# gui.rpy:148
|
||||
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
|
||||
@@ -138,8 +138,8 @@ translate traditional_chinese strings:
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
@@ -138,8 +138,8 @@ translate vietnamese strings:
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background of the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
@@ -117,7 +117,7 @@ screen update_channel(channels):
|
||||
|
||||
$ date = _strftime(__("%B %d, %Y"), time.localtime(c["timestamp"]))
|
||||
|
||||
text "[date] • [c[pretty_version]] [current]" style "l_small_text"
|
||||
text "[date] • [c[pretty_version]] [current!t]" style "l_small_text"
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
@@ -189,8 +189,10 @@ label update:
|
||||
|
||||
import urllib2
|
||||
import json
|
||||
import ssl
|
||||
|
||||
channels = json.load(urllib2.urlopen(CHANNELS_URL))["releases"]
|
||||
context = ssl._create_unverified_context()
|
||||
channels = json.load(urllib2.urlopen(CHANNELS_URL, context=context))["releases"]
|
||||
|
||||
renpy.call_screen("update_channel", channels)
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
cdef extern from "fribidi/fribidi.h":
|
||||
cdef extern from "fribidi.h":
|
||||
int FRIBIDI_TYPE_LTR
|
||||
int FRIBIDI_TYPE_ON
|
||||
int FRIBIDI_TYPE_RTL
|
||||
@@ -29,7 +29,7 @@ cdef extern from "fribidi/fribidi.h":
|
||||
int FRIBIDI_TYPE_WL
|
||||
|
||||
cdef extern from "renpybidicore.h":
|
||||
object renpybidi_log2vis(object, int *)
|
||||
object renpybidi_log2vis(unicode, int *)
|
||||
|
||||
WLTR = FRIBIDI_TYPE_WL
|
||||
LTR = FRIBIDI_TYPE_LTR
|
||||
@@ -37,9 +37,9 @@ ON = FRIBIDI_TYPE_ON
|
||||
RTL = FRIBIDI_TYPE_RTL
|
||||
WRTL = FRIBIDI_TYPE_WR
|
||||
|
||||
def log2vis(s, int direction=FRIBIDI_TYPE_ON):
|
||||
|
||||
s = s.encode("utf8")
|
||||
def log2vis(unicode s, int direction=FRIBIDI_TYPE_ON):
|
||||
|
||||
s = renpybidi_log2vis(s, &direction)
|
||||
return s.decode("utf8"), direction
|
||||
return s, direction
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
behdad: Behdad Esfahbod <behdad@gnu.org>
|
||||
#
|
||||
# Behdad Esfahbod is the only author that actually codes these days. He
|
||||
# maintains the package too. He has revised all of the code written by
|
||||
# others, and has written much of the code himself. He's listed (or should
|
||||
# be listed) on every file in the package as one of the authors. Behdad
|
||||
# designs, implements, documents, maintains, ...
|
||||
#
|
||||
|
||||
dov-g: Dov Grobgeld <dov@imagic.weizmann.ac.il>
|
||||
#
|
||||
# Dov Grobgeld originally wrote FriBidi. The 0.1.* releases were all done
|
||||
# by him. After that, Dov rarely touched the code, but contributed ideas.
|
||||
# All files that he has originally authored have him listed as an author in
|
||||
# the header of the file.
|
||||
#
|
||||
|
||||
roozbeh: Roozbeh Pournader <roozbeh@gnu.org>
|
||||
#
|
||||
# Roozbeh Pournader hasn't contributed much code to FriBidi personally; but
|
||||
# has maintained, promoted, and supported the project for a while. He has
|
||||
# helped with making GNU FriBidi standards compliant, and has sometimes
|
||||
# lobbied with the Unicode Consortium when needed. Roozbeh was supposed to
|
||||
# be a co-maintainer of GNU FriBidi, but he's not doing that yet.
|
||||
#
|
||||
|
||||
|
||||
#
|
||||
# Note: Other people have contributed significant amounts of code, but
|
||||
# usually the code has faded out because of restructuring and redesigning
|
||||
# things around GNU FriBidi. As an example, the FriBidiEnv patch by Omer
|
||||
# Zak, made itself into FriBidi CVS for a couple of years, but was finally
|
||||
# implemented in a better way by Behdad.
|
||||
#
|
||||
# Note: GNU getopt is distributed with and used in GNU FriBidi under bin/, but
|
||||
# is not part of GNU FriBidi.
|
||||
#
|
||||
# Note: Parts of the Unicode Character Database are distributed with and used
|
||||
# in GNU FriBidi under gen.tab/unidata/, but are not part of GNU FriBidi.
|
||||
#
|
||||
@@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
||||
51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Library General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
<signature of Ty Coon>, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Library General
|
||||
Public License instead of this License.
|
||||
@@ -0,0 +1,30 @@
|
||||
Thanks to:
|
||||
|
||||
Behnam Esfahbod <behnam@esfahbod.info>
|
||||
* Testing and auditing code.
|
||||
|
||||
|
||||
And for the previous versions of FriBidi (pre 2002), thanks to:
|
||||
|
||||
|
||||
Tomas Frydrych <tomas@frydrych.uklinux.net>
|
||||
* Contirbuted patches for compiling GNU FriBidi under other OSes.
|
||||
|
||||
Dov Grobgeld <dov@imagic.weizmann.ac.il>
|
||||
* Initial author, and maintainer before the 0.9 releases.
|
||||
|
||||
Franck Portaneri
|
||||
* For the Mozilla BiDi languges support document;
|
||||
|
||||
Roozbeh Pournader <roozbeh@sharif.edu>
|
||||
* Fixed things here and there.
|
||||
|
||||
Pablo Saratxaga <pablo@mandrakesoft.com>
|
||||
* Contributed several Arabic charset converters.
|
||||
|
||||
Owen Tayler <otaylor@redhat.com>
|
||||
* Contributed very important memory leak and speed patches.
|
||||
|
||||
Omer Zak <omerz@actcom.co.il>
|
||||
* Contributed several bug fixes, and several considerations for
|
||||
embedded systems.
|
||||
@@ -0,0 +1,105 @@
|
||||
/* config.h. Generated from config.h.in by configure. */
|
||||
/* config.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
/* Define to 1 if you want to include debug code in the library */
|
||||
#define DEBUG 1
|
||||
|
||||
/* Define to 1 if you have the <asm/page.h> header file. */
|
||||
/* #undef HAVE_ASM_PAGE_H */
|
||||
|
||||
/* Define to 1 if you have the <dlfcn.h> header file. */
|
||||
#define HAVE_DLFCN_H 1
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#define HAVE_INTTYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the `memmove' function. */
|
||||
#define HAVE_MEMMOVE 1
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#define HAVE_MEMORY_H 1
|
||||
|
||||
/* Define to 1 if you have the `memset' function. */
|
||||
#define HAVE_MEMSET 1
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#define HAVE_STDINT_H 1
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#define HAVE_STDLIB_H 1
|
||||
|
||||
/* Define to 1 if you have the `strdup' function. */
|
||||
#define HAVE_STRDUP 1
|
||||
|
||||
/* Define to 1 if cpp supports the ANSI # stringizing operator. */
|
||||
#define HAVE_STRINGIZE 1
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#define HAVE_STRINGS_H 1
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#define HAVE_STRING_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#define HAVE_SYS_STAT_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/times.h> header file. */
|
||||
#define HAVE_SYS_TIMES_H 1
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#define HAVE_SYS_TYPES_H 1
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#define HAVE_UNISTD_H 1
|
||||
|
||||
/* Define to 1 if you have the <wchar.h> header file. */
|
||||
#define HAVE_WCHAR_H 1
|
||||
|
||||
/* Define to the sub-directory in which libtool stores uninstalled libraries.
|
||||
*/
|
||||
#define LT_OBJDIR ".libs/"
|
||||
|
||||
/* Name of package */
|
||||
#define PACKAGE "fribidi"
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#define PACKAGE_BUGREPORT "http://fribidi.org/bug"
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#define PACKAGE_NAME "GNU FriBidi"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "GNU FriBidi 0.19.2"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "fribidi"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "0.19.2"
|
||||
|
||||
/* Define as the return type of signal handlers (`int' or `void'). */
|
||||
#define RETSIGTYPE void
|
||||
|
||||
/* The size of `int', as computed by sizeof. */
|
||||
#define SIZEOF_INT 4
|
||||
|
||||
/* The size of `short', as computed by sizeof. */
|
||||
#define SIZEOF_SHORT 2
|
||||
|
||||
/* The size of `void *', as computed by sizeof. */
|
||||
#define SIZEOF_VOID_P 8
|
||||
|
||||
/* The size of `wchar_t', as computed by sizeof. */
|
||||
#define SIZEOF_WCHAR_T 4
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Define to 1 if you want to use simple mallocs instead of memory chunks */
|
||||
/* #undef USE_SIMPLE_MALLOC */
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "0.19.2"
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
/* #undef const */
|
||||
@@ -0,0 +1,94 @@
|
||||
/* The tables in this file should all be sorted on their first item. */
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
|
||||
const PairMap mandatory_liga_table[] = {
|
||||
{{0xFEDF, 0xFE82}, 0xFEF5},
|
||||
{{0xFEDF, 0xFE84}, 0xFEF7},
|
||||
{{0xFEDF, 0xFE88}, 0xFEF9},
|
||||
{{0xFEDF, 0xFE8E}, 0xFEFB},
|
||||
{{0xFEE0, 0xFE82}, 0xFEF6},
|
||||
{{0xFEE0, 0xFE84}, 0xFEF8},
|
||||
{{0xFEE0, 0xFE88}, 0xFEFA},
|
||||
{{0xFEE0, 0xFE8E}, 0xFEFC},
|
||||
};
|
||||
|
||||
|
||||
const PairMap console_liga_table[] = {
|
||||
{{0x0640, 0xFC60}, 0xFCF2},
|
||||
{{0x0640, 0xFC61}, 0xFCF3},
|
||||
{{0x0640, 0xFC62}, 0xFCF4},
|
||||
{{0x0640, 0xFE70}, 0xFE71},
|
||||
{{0x0640, 0xFE76}, 0xFE77},
|
||||
{{0x0640, 0xFE78}, 0xFE79},
|
||||
{{0x0640, 0xFE7A}, 0xFE7B},
|
||||
{{0x0640, 0xFE7C}, 0xFE7D},
|
||||
{{0x0640, 0xFE7E}, 0xFE7F},
|
||||
{{0xFBE8, 0x0654}, 0xFE8B},
|
||||
{{0xFBE9, 0x0654}, 0xFE8C},
|
||||
{{0xFBFC, 0x0654}, 0xFE89},
|
||||
{{0xFBFC, 0x0670}, 0xFC5D},
|
||||
{{0xFBFD, 0x0654}, 0xFE8A},
|
||||
{{0xFBFD, 0x0670}, 0xFC90},
|
||||
{{0xFE7C, 0x0670}, 0xFC63},
|
||||
{{0xFE7C, 0xFE72}, 0xFC5E},
|
||||
{{0xFE7C, 0xFE74}, 0xFC5F},
|
||||
{{0xFE7C, 0xFE76}, 0xFC60},
|
||||
{{0xFE7C, 0xFE78}, 0xFC61},
|
||||
{{0xFE7C, 0xFE7A}, 0xFC62},
|
||||
{{0xFE7D, 0xFE76}, 0xFCF2},
|
||||
{{0xFE7D, 0xFE77}, 0xFCF2},
|
||||
{{0xFE7D, 0xFE78}, 0xFCF3},
|
||||
{{0xFE7D, 0xFE79}, 0xFCF3},
|
||||
{{0xFE7D, 0xFE7A}, 0xFCF4},
|
||||
{{0xFE7D, 0xFE7B}, 0xFCF4},
|
||||
{{0xFE8D, 0x0653}, 0xFE81},
|
||||
{{0xFE8D, 0x0654}, 0xFE83},
|
||||
{{0xFE8D, 0x0655}, 0xFE87},
|
||||
{{0xFE8D, 0xFE70}, 0xFD3D},
|
||||
{{0xFE8E, 0x0653}, 0xFE82},
|
||||
{{0xFE8E, 0x0654}, 0xFE84},
|
||||
{{0xFE8E, 0x0655}, 0xFE88},
|
||||
{{0xFE8E, 0xFE70}, 0xFD3C},
|
||||
{{0xFEE9, 0x0654}, 0xFBA4},
|
||||
{{0xFEEA, 0x0654}, 0xFBA5},
|
||||
{{0xFEED, 0x0654}, 0xFE85},
|
||||
{{0xFEEE, 0x0654}, 0xFE86},
|
||||
{{0xFEEF, 0x0654}, 0xFE89},
|
||||
{{0xFEEF, 0x0670}, 0xFC5D},
|
||||
{{0xFEF0, 0x0654}, 0xFE8A},
|
||||
{{0xFEF0, 0x0670}, 0xFC90},
|
||||
{{0xFEF1, 0x0654}, 0xFE89},
|
||||
{{0xFEF1, 0x0670}, 0xFC5D},
|
||||
{{0xFEF2, 0x0654}, 0xFE8A},
|
||||
{{0xFEF2, 0x0670}, 0xFC90},
|
||||
{{0xFEF3, 0x0654}, 0xFE8B},
|
||||
{{0xFEF4, 0x0654}, 0xFE8C},
|
||||
{{0xFEFB, 0x0653}, 0xFEF5},
|
||||
{{0xFEFB, 0x0654}, 0xFEF7},
|
||||
{{0xFEFB, 0x0655}, 0xFEF9},
|
||||
{{0xFEFC, 0x0653}, 0xFEF6},
|
||||
{{0xFEFC, 0x0654}, 0xFEF8},
|
||||
{{0xFEFC, 0x0655}, 0xFEFA},
|
||||
};
|
||||
|
||||
|
||||
static const FriBidiChar NSMShap[][4] = {
|
||||
{0xFE70, 0xFE71, 0xFE70, 0xFE71,},
|
||||
{0xFE72, 0xFE72, 0xFE72, 0xFE72,},
|
||||
{0xFE74, 0xFE74, 0xFE74, 0xFE74,},
|
||||
{0xFE76, 0xFE77, 0xFE76, 0xFE77,},
|
||||
{0xFE78, 0xFE79, 0xFE78, 0xFE79,},
|
||||
{0xFE7A, 0xFE7B, 0xFE7A, 0xFE7B,},
|
||||
{0xFE7C, 0xFE7D, 0xFE7C, 0xFE7D,},
|
||||
{0xFE7E, 0xFE7F, 0xFE7E, 0xFE7F,},
|
||||
};
|
||||
|
||||
/* *INDENT-ON* */
|
||||
|
||||
#ifndef FRIBIDI_ACCESS_SHAPE_TABLE
|
||||
# define FRIBIDI_ACCESS_SHAPE_TABLE(table,min,max,x,shape) \
|
||||
(((x)<(min)||(x)>(max))?(x):(table)[(x)-(min)][(shape)])
|
||||
#endif
|
||||
|
||||
#define FRIBIDI_GET_ARABIC_SHAPE_NSM(x,shape) FRIBIDI_ACCESS_SHAPE_TABLE(NSMShap, 0x064B, 0x0652, (x), (shape))
|
||||
@@ -0,0 +1,205 @@
|
||||
/* arabic-shaping.tab.i
|
||||
* generated by gen-arabic-shaping-tab (GNU FriBidi 0.19.1)
|
||||
* from the files UnicodeData.txt, (null) of Unicode version 5.1.0. */
|
||||
|
||||
/*
|
||||
use FRIBIDI_GET_ARABIC_SHAPE_PRES(key,shape) to access your table
|
||||
|
||||
required memory: 2864
|
||||
*/
|
||||
|
||||
|
||||
/* *INDENT-OFF* */
|
||||
|
||||
static const FriBidiChar ArShap[179][4] = {
|
||||
{0xfe80,0x0621,0x0621,0x0621,},
|
||||
{0xfe81,0xfe82,0x0622,0x0622,},
|
||||
{0xfe83,0xfe84,0x0623,0x0623,},
|
||||
{0xfe85,0xfe86,0x0624,0x0624,},
|
||||
{0xfe87,0xfe88,0x0625,0x0625,},
|
||||
{0xfe89,0xfe8a,0xfe8b,0xfe8c,},
|
||||
{0xfe8d,0xfe8e,0x0627,0x0627,},
|
||||
{0xfe8f,0xfe90,0xfe91,0xfe92,},
|
||||
{0xfe93,0xfe94,0x0629,0x0629,},
|
||||
{0xfe95,0xfe96,0xfe97,0xfe98,},
|
||||
{0xfe99,0xfe9a,0xfe9b,0xfe9c,},
|
||||
{0xfe9d,0xfe9e,0xfe9f,0xfea0,},
|
||||
{0xfea1,0xfea2,0xfea3,0xfea4,},
|
||||
{0xfea5,0xfea6,0xfea7,0xfea8,},
|
||||
{0xfea9,0xfeaa,0x062f,0x062f,},
|
||||
{0xfeab,0xfeac,0x0630,0x0630,},
|
||||
{0xfead,0xfeae,0x0631,0x0631,},
|
||||
{0xfeaf,0xfeb0,0x0632,0x0632,},
|
||||
{0xfeb1,0xfeb2,0xfeb3,0xfeb4,},
|
||||
{0xfeb5,0xfeb6,0xfeb7,0xfeb8,},
|
||||
{0xfeb9,0xfeba,0xfebb,0xfebc,},
|
||||
{0xfebd,0xfebe,0xfebf,0xfec0,},
|
||||
{0xfec1,0xfec2,0xfec3,0xfec4,},
|
||||
{0xfec5,0xfec6,0xfec7,0xfec8,},
|
||||
{0xfec9,0xfeca,0xfecb,0xfecc,},
|
||||
{0xfecd,0xfece,0xfecf,0xfed0,},
|
||||
{0x063b,0x063b,0x063b,0x063b,},
|
||||
{0x063c,0x063c,0x063c,0x063c,},
|
||||
{0x063d,0x063d,0x063d,0x063d,},
|
||||
{0x063e,0x063e,0x063e,0x063e,},
|
||||
{0x063f,0x063f,0x063f,0x063f,},
|
||||
{0x0640,0x0640,0x0640,0x0640,},
|
||||
{0xfed1,0xfed2,0xfed3,0xfed4,},
|
||||
{0xfed5,0xfed6,0xfed7,0xfed8,},
|
||||
{0xfed9,0xfeda,0xfedb,0xfedc,},
|
||||
{0xfedd,0xfede,0xfedf,0xfee0,},
|
||||
{0xfee1,0xfee2,0xfee3,0xfee4,},
|
||||
{0xfee5,0xfee6,0xfee7,0xfee8,},
|
||||
{0xfee9,0xfeea,0xfeeb,0xfeec,},
|
||||
{0xfeed,0xfeee,0x0648,0x0648,},
|
||||
{0xfeef,0xfef0,0xfbe8,0xfbe9,},
|
||||
{0xfef1,0xfef2,0xfef3,0xfef4,},
|
||||
{0x064b,0x064b,0x064b,0x064b,},
|
||||
{0x064c,0x064c,0x064c,0x064c,},
|
||||
{0x064d,0x064d,0x064d,0x064d,},
|
||||
{0x064e,0x064e,0x064e,0x064e,},
|
||||
{0x064f,0x064f,0x064f,0x064f,},
|
||||
{0x0650,0x0650,0x0650,0x0650,},
|
||||
{0x0651,0x0651,0x0651,0x0651,},
|
||||
{0x0652,0x0652,0x0652,0x0652,},
|
||||
{0x0653,0x0653,0x0653,0x0653,},
|
||||
{0x0654,0x0654,0x0654,0x0654,},
|
||||
{0x0655,0x0655,0x0655,0x0655,},
|
||||
{0x0656,0x0656,0x0656,0x0656,},
|
||||
{0x0657,0x0657,0x0657,0x0657,},
|
||||
{0x0658,0x0658,0x0658,0x0658,},
|
||||
{0x0659,0x0659,0x0659,0x0659,},
|
||||
{0x065a,0x065a,0x065a,0x065a,},
|
||||
{0x065b,0x065b,0x065b,0x065b,},
|
||||
{0x065c,0x065c,0x065c,0x065c,},
|
||||
{0x065d,0x065d,0x065d,0x065d,},
|
||||
{0x065e,0x065e,0x065e,0x065e,},
|
||||
{0x065f,0x065f,0x065f,0x065f,},
|
||||
{0x0660,0x0660,0x0660,0x0660,},
|
||||
{0x0661,0x0661,0x0661,0x0661,},
|
||||
{0x0662,0x0662,0x0662,0x0662,},
|
||||
{0x0663,0x0663,0x0663,0x0663,},
|
||||
{0x0664,0x0664,0x0664,0x0664,},
|
||||
{0x0665,0x0665,0x0665,0x0665,},
|
||||
{0x0666,0x0666,0x0666,0x0666,},
|
||||
{0x0667,0x0667,0x0667,0x0667,},
|
||||
{0x0668,0x0668,0x0668,0x0668,},
|
||||
{0x0669,0x0669,0x0669,0x0669,},
|
||||
{0x066a,0x066a,0x066a,0x066a,},
|
||||
{0x066b,0x066b,0x066b,0x066b,},
|
||||
{0x066c,0x066c,0x066c,0x066c,},
|
||||
{0x066d,0x066d,0x066d,0x066d,},
|
||||
{0x066e,0x066e,0x066e,0x066e,},
|
||||
{0x066f,0x066f,0x066f,0x066f,},
|
||||
{0x0670,0x0670,0x0670,0x0670,},
|
||||
{0xfb50,0xfb51,0x0671,0x0671,},
|
||||
{0x0672,0x0672,0x0672,0x0672,},
|
||||
{0x0673,0x0673,0x0673,0x0673,},
|
||||
{0x0674,0x0674,0x0674,0x0674,},
|
||||
{0x0675,0x0675,0x0675,0x0675,},
|
||||
{0x0676,0x0676,0x0676,0x0676,},
|
||||
{0xfbdd,0x0677,0x0677,0x0677,},
|
||||
{0x0678,0x0678,0x0678,0x0678,},
|
||||
{0xfb66,0xfb67,0xfb68,0xfb69,},
|
||||
{0xfb5e,0xfb5f,0xfb60,0xfb61,},
|
||||
{0xfb52,0xfb53,0xfb54,0xfb55,},
|
||||
{0x067c,0x067c,0x067c,0x067c,},
|
||||
{0x067d,0x067d,0x067d,0x067d,},
|
||||
{0xfb56,0xfb57,0xfb58,0xfb59,},
|
||||
{0xfb62,0xfb63,0xfb64,0xfb65,},
|
||||
{0xfb5a,0xfb5b,0xfb5c,0xfb5d,},
|
||||
{0x0681,0x0681,0x0681,0x0681,},
|
||||
{0x0682,0x0682,0x0682,0x0682,},
|
||||
{0xfb76,0xfb77,0xfb78,0xfb79,},
|
||||
{0xfb72,0xfb73,0xfb74,0xfb75,},
|
||||
{0x0685,0x0685,0x0685,0x0685,},
|
||||
{0xfb7a,0xfb7b,0xfb7c,0xfb7d,},
|
||||
{0xfb7e,0xfb7f,0xfb80,0xfb81,},
|
||||
{0xfb88,0xfb89,0x0688,0x0688,},
|
||||
{0x0689,0x0689,0x0689,0x0689,},
|
||||
{0x068a,0x068a,0x068a,0x068a,},
|
||||
{0x068b,0x068b,0x068b,0x068b,},
|
||||
{0xfb84,0xfb85,0x068c,0x068c,},
|
||||
{0xfb82,0xfb83,0x068d,0x068d,},
|
||||
{0xfb86,0xfb87,0x068e,0x068e,},
|
||||
{0x068f,0x068f,0x068f,0x068f,},
|
||||
{0x0690,0x0690,0x0690,0x0690,},
|
||||
{0xfb8c,0xfb8d,0x0691,0x0691,},
|
||||
{0x0692,0x0692,0x0692,0x0692,},
|
||||
{0x0693,0x0693,0x0693,0x0693,},
|
||||
{0x0694,0x0694,0x0694,0x0694,},
|
||||
{0x0695,0x0695,0x0695,0x0695,},
|
||||
{0x0696,0x0696,0x0696,0x0696,},
|
||||
{0x0697,0x0697,0x0697,0x0697,},
|
||||
{0xfb8a,0xfb8b,0x0698,0x0698,},
|
||||
{0x0699,0x0699,0x0699,0x0699,},
|
||||
{0x069a,0x069a,0x069a,0x069a,},
|
||||
{0x069b,0x069b,0x069b,0x069b,},
|
||||
{0x069c,0x069c,0x069c,0x069c,},
|
||||
{0x069d,0x069d,0x069d,0x069d,},
|
||||
{0x069e,0x069e,0x069e,0x069e,},
|
||||
{0x069f,0x069f,0x069f,0x069f,},
|
||||
{0x06a0,0x06a0,0x06a0,0x06a0,},
|
||||
{0x06a1,0x06a1,0x06a1,0x06a1,},
|
||||
{0x06a2,0x06a2,0x06a2,0x06a2,},
|
||||
{0x06a3,0x06a3,0x06a3,0x06a3,},
|
||||
{0xfb6a,0xfb6b,0xfb6c,0xfb6d,},
|
||||
{0x06a5,0x06a5,0x06a5,0x06a5,},
|
||||
{0xfb6e,0xfb6f,0xfb70,0xfb71,},
|
||||
{0x06a7,0x06a7,0x06a7,0x06a7,},
|
||||
{0x06a8,0x06a8,0x06a8,0x06a8,},
|
||||
{0xfb8e,0xfb8f,0xfb90,0xfb91,},
|
||||
{0x06aa,0x06aa,0x06aa,0x06aa,},
|
||||
{0x06ab,0x06ab,0x06ab,0x06ab,},
|
||||
{0x06ac,0x06ac,0x06ac,0x06ac,},
|
||||
{0xfbd3,0xfbd4,0xfbd5,0xfbd6,},
|
||||
{0x06ae,0x06ae,0x06ae,0x06ae,},
|
||||
{0xfb92,0xfb93,0xfb94,0xfb95,},
|
||||
{0x06b0,0x06b0,0x06b0,0x06b0,},
|
||||
{0xfb9a,0xfb9b,0xfb9c,0xfb9d,},
|
||||
{0x06b2,0x06b2,0x06b2,0x06b2,},
|
||||
{0xfb96,0xfb97,0xfb98,0xfb99,},
|
||||
{0x06b4,0x06b4,0x06b4,0x06b4,},
|
||||
{0x06b5,0x06b5,0x06b5,0x06b5,},
|
||||
{0x06b6,0x06b6,0x06b6,0x06b6,},
|
||||
{0x06b7,0x06b7,0x06b7,0x06b7,},
|
||||
{0x06b8,0x06b8,0x06b8,0x06b8,},
|
||||
{0x06b9,0x06b9,0x06b9,0x06b9,},
|
||||
{0xfb9e,0xfb9f,0x06ba,0x06ba,},
|
||||
{0xfba0,0xfba1,0xfba2,0xfba3,},
|
||||
{0x06bc,0x06bc,0x06bc,0x06bc,},
|
||||
{0x06bd,0x06bd,0x06bd,0x06bd,},
|
||||
{0xfbaa,0xfbab,0xfbac,0xfbad,},
|
||||
{0x06bf,0x06bf,0x06bf,0x06bf,},
|
||||
{0xfba4,0xfba5,0x06c0,0x06c0,},
|
||||
{0xfba6,0xfba7,0xfba8,0xfba9,},
|
||||
{0x06c2,0x06c2,0x06c2,0x06c2,},
|
||||
{0x06c3,0x06c3,0x06c3,0x06c3,},
|
||||
{0x06c4,0x06c4,0x06c4,0x06c4,},
|
||||
{0xfbe0,0xfbe1,0x06c5,0x06c5,},
|
||||
{0xfbd9,0xfbda,0x06c6,0x06c6,},
|
||||
{0xfbd7,0xfbd8,0x06c7,0x06c7,},
|
||||
{0xfbdb,0xfbdc,0x06c8,0x06c8,},
|
||||
{0xfbe2,0xfbe3,0x06c9,0x06c9,},
|
||||
{0x06ca,0x06ca,0x06ca,0x06ca,},
|
||||
{0xfbde,0xfbdf,0x06cb,0x06cb,},
|
||||
{0xfbfc,0xfbfd,0xfbfe,0xfbff,},
|
||||
{0x06cd,0x06cd,0x06cd,0x06cd,},
|
||||
{0x06ce,0x06ce,0x06ce,0x06ce,},
|
||||
{0x06cf,0x06cf,0x06cf,0x06cf,},
|
||||
{0xfbe4,0xfbe5,0xfbe6,0xfbe7,},
|
||||
{0x06d1,0x06d1,0x06d1,0x06d1,},
|
||||
{0xfbae,0xfbaf,0x06d2,0x06d2,},
|
||||
{0xfbb0,0xfbb1,0x06d3,0x06d3,},
|
||||
};
|
||||
|
||||
/* *INDENT-ON* */
|
||||
|
||||
#ifndef FRIBIDI_ACCESS_SHAPE_TABLE
|
||||
# define FRIBIDI_ACCESS_SHAPE_TABLE(table,min,max,x,shape) \
|
||||
(((x)<(min)||(x)>(max))?(x):(table)[(x)-(min)][(shape)])
|
||||
#endif
|
||||
|
||||
#define FRIBIDI_GET_ARABIC_SHAPE_PRES(x,shape) FRIBIDI_ACCESS_SHAPE_TABLE(ArShap, 0x0621, 0x06d3, (x), (shape))
|
||||
|
||||
/* End of generated arabic-shaping.tab.i */
|
||||
@@ -0,0 +1,61 @@
|
||||
/* FriBidi
|
||||
* bidi-types.h - define internal bidi types
|
||||
*
|
||||
* $Id: bidi-types.h,v 1.7 2006/01/31 03:23:12 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:12 $
|
||||
* $Revision: 1.7 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/bidi-types.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _BIDI_TYPES_H
|
||||
#define _BIDI_TYPES_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-types.h>
|
||||
#include <fribidi-bidi-types.h>
|
||||
|
||||
#include <fribidi-begindecls.h>
|
||||
|
||||
#define FRIBIDI_LEVEL_INVALID FRIBIDI_BIDI_MAX_RESOLVED_LEVELS
|
||||
#define FRIBIDI_SENTINEL -1
|
||||
|
||||
#if DEBUG+0
|
||||
|
||||
#define fribidi_char_from_bidi_type FRIBIDI_PRIVATESPACE(char_from_bidi_type)
|
||||
char
|
||||
fribidi_char_from_bidi_type (
|
||||
FriBidiCharType t /* input bidi type */
|
||||
) FRIBIDI_GNUC_HIDDEN;
|
||||
|
||||
#endif /* DEBUG */
|
||||
|
||||
#include <fribidi-enddecls.h>
|
||||
|
||||
#endif /* !_BIDI_TYPES_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,190 @@
|
||||
/* FriBidi
|
||||
* common.h - common include for library sources
|
||||
*
|
||||
* $Id: common.h,v 1.20 2008-04-08 21:38:23 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2008-04-08 21:38:23 $
|
||||
* $Revision: 1.20 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/common.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _COMMON_H
|
||||
#define _COMMON_H
|
||||
|
||||
#if HAVE_CONFIG_H+0
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <fribidi-common.h>
|
||||
|
||||
/* FRIBIDI_PRIVATESPACE is a macro used to name library internal symbols. */
|
||||
#ifndef FRIBIDI_PRIVATESPACE
|
||||
# define FRIBIDI_PRIVATESPACE1(A,B) A##B
|
||||
# define FRIBIDI_PRIVATESPACE0(A,B) FRIBIDI_PRIVATESPACE1(A,B)
|
||||
# define FRIBIDI_PRIVATESPACE(SYMBOL) FRIBIDI_PRIVATESPACE0(_,FRIBIDI_NAMESPACE(_##SYMBOL##__internal__))
|
||||
#endif /* !FRIBIDI_PRIVATESPACE */
|
||||
|
||||
#if (defined(WIN32)) || (defined(_WIN32_WCE))
|
||||
# define FRIBIDI_ENTRY __declspec(dllexport)
|
||||
#endif /* WIN32 */
|
||||
|
||||
#if FRIBIDI_USE_GLIB+0
|
||||
# ifndef SIZEOF_LONG
|
||||
# define SIZEOF_LONG GLIB_SIZEOF_LONG
|
||||
# endif /* !SIZEOF_LONG */
|
||||
# ifndef SIZEOF_VOID_P
|
||||
# define SIZEOF_VOID_P GLIB_SIZEOF_VOID_P
|
||||
# endif /* !SIZEOF_VOID_P */
|
||||
# ifndef __FRIBIDI_DOC
|
||||
# include <glib/gmem.h>
|
||||
# endif /* !__FRIBIDI_DOC */
|
||||
# ifndef fribidi_malloc
|
||||
# define fribidi_malloc g_try_malloc
|
||||
# define fribidi_free g_free
|
||||
# endif /* !fribidi_malloc */
|
||||
# ifndef fribidi_assert
|
||||
# ifndef __FRIBIDI_DOC
|
||||
# include <glib/gmessages.h>
|
||||
# endif /* !__FRIBIDI_DOC */
|
||||
# define fribidi_assert g_assert
|
||||
# endif /* !fribidi_assert */
|
||||
# ifndef __FRIBIDI_DOC
|
||||
# include <glib/gmacros.h>
|
||||
# endif /* !__FRIBIDI_DOC */
|
||||
# ifndef FRIBIDI_BEGIN_STMT
|
||||
# define FRIBIDI_BEGIN_STMT G_STMT_START {
|
||||
# define FRIBIDI_END_STMT } G_STMT_END
|
||||
# endif /* !FRIBIDI_BEGIN_STMT */
|
||||
# ifndef LIKELY
|
||||
# define LIKELY G_LIKELY
|
||||
# define UNLIKELY G_UNLIKELY
|
||||
# endif /* !LIKELY */
|
||||
# ifndef false
|
||||
# define false FALSE
|
||||
# endif /* !false */
|
||||
# ifndef true
|
||||
# define true TRUE
|
||||
# endif /* !true */
|
||||
#endif /* FRIBIDI_USE_GLIB */
|
||||
|
||||
#ifndef false
|
||||
# define false (0)
|
||||
# endif /* !false */
|
||||
# ifndef true
|
||||
# define true (!false)
|
||||
# endif /* !true */
|
||||
|
||||
#ifndef NULL
|
||||
# ifdef __cplusplus
|
||||
# define NULL (0L)
|
||||
# else /* !__cplusplus */
|
||||
# define NULL ((void*) 0)
|
||||
# endif /* !__cplusplus */
|
||||
#endif /* !NULL */
|
||||
|
||||
/* fribidi_malloc and fribidi_free should be used instead of malloc and free.
|
||||
* No need to include any headers. */
|
||||
#ifndef fribidi_malloc
|
||||
# if HAVE_STDLIB_H
|
||||
# ifndef __FRIBIDI_DOC
|
||||
# include <stdlib.h>
|
||||
# endif /* __FRIBIDI_DOC */
|
||||
# define fribidi_malloc malloc
|
||||
# else /* !HAVE_STDLIB_H */
|
||||
# define fribidi_malloc (void *) malloc
|
||||
# endif /* !HAVE_STDLIB_H */
|
||||
# define fribidi_free free
|
||||
#else /* fribidi_malloc */
|
||||
# ifndef fribidi_free
|
||||
# error You should define fribidi_free too when you define fribidi_malloc.
|
||||
# endif /* !fribidi_free */
|
||||
#endif /* fribidi_malloc */
|
||||
|
||||
#if HAVE_STRING_H+0
|
||||
# if !STDC_HEADERS && HAVE_MEMORY_H
|
||||
# include <memory.h>
|
||||
# endif
|
||||
# include <string.h>
|
||||
#endif
|
||||
#if HAVE_STRINGS_H+0
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
/* FRIBIDI_CHUNK_SIZE is the number of bytes in each chunk of memory being
|
||||
* allocated for data structure pools. */
|
||||
#ifndef FRIBIDI_CHUNK_SIZE
|
||||
# if HAVE_ASM_PAGE_H
|
||||
# ifndef __FRIBIDI_DOC
|
||||
# include <asm/page.h>
|
||||
# endif /* __FRIBIDI_DOC */
|
||||
# define FRIBIDI_CHUNK_SIZE (PAGE_SIZE - 16)
|
||||
# else /* !HAVE_ASM_PAGE_H */
|
||||
# define FRIBIDI_CHUNK_SIZE (4096 - 16)
|
||||
# endif /* !HAVE_ASM_PAGE_H */
|
||||
#else /* FRIBIDI_CHUNK_SIZE */
|
||||
# if FRIBIDI_CHUNK_SIZE < 256
|
||||
# error FRIBIDI_CHUNK_SIZE now should define the size of a chunk in bytes.
|
||||
# endif /* FRIBIDI_CHUNK_SIZE < 256 */
|
||||
#endif /* FRIBIDI_CHUNK_SIZE */
|
||||
|
||||
/* FRIBIDI_BEGIN_STMT should be used at the beginning of your macro
|
||||
* definitions that are to behave like simple statements. Use
|
||||
* FRIBIDI_END_STMT at the end of the macro after the semicolon or brace. */
|
||||
#ifndef FRIBIDI_BEGIN_STMT
|
||||
# define FRIBIDI_BEGIN_STMT do {
|
||||
# define FRIBIDI_END_STMT } while (0)
|
||||
#endif /* !FRIBIDI_BEGIN_STMT */
|
||||
|
||||
/* LIKEYLY and UNLIKELY are used to give a hint on branch prediction to the
|
||||
* compiler. */
|
||||
#ifndef LIKELY
|
||||
# define LIKELY
|
||||
# define UNLIKELY
|
||||
#endif /* !LIKELY */
|
||||
|
||||
#ifndef FRIBIDI_EMPTY_STMT
|
||||
# define FRIBIDI_EMPTY_STMT FRIBIDI_BEGIN_STMT (void) 0; FRIBIDI_END_STMT
|
||||
#endif /* !FRIBIDI_EMPTY_STMT */
|
||||
|
||||
#if HAVE_STRINGIZE+0
|
||||
# define STRINGIZE(symbol) #symbol
|
||||
#else /* !HAVE_STRINGIZE */
|
||||
# define STRINGIZE(symbol) (no stringize operator available)
|
||||
#endif /* !HAVE_STRINGIZE */
|
||||
|
||||
/* As per recommendation of GNU Coding Standards. */
|
||||
#ifndef _GNU_SOURCE
|
||||
# define _GNU_SOURCE
|
||||
#endif /* !_GNU_SOURCE */
|
||||
|
||||
/* We respect our own rules. */
|
||||
#define FRIBIDI_NO_DEPRECATED
|
||||
|
||||
|
||||
#include "debug.h"
|
||||
|
||||
#endif /* !_COMMON_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,113 @@
|
||||
/* FriBidi
|
||||
* debug.h - debug-only interfaces
|
||||
*
|
||||
* $Id: debug.h,v 1.10 2006/01/31 03:23:12 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:12 $
|
||||
* $Revision: 1.10 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/debug.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _DEBUG_H
|
||||
#define _DEBUG_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-types.h>
|
||||
|
||||
#include <fribidi-begindecls.h>
|
||||
|
||||
#if DEBUG+0
|
||||
|
||||
/* These definitions should only be used in DEBUG mode: */
|
||||
#ifndef __LINE__
|
||||
# define __LINE__ 0
|
||||
#endif /* !__LINE__ */
|
||||
#ifndef __FILE__
|
||||
# define __FILE__ "unknown"
|
||||
#endif /* !__FILE__ */
|
||||
|
||||
#ifndef FRIBIDI_FPRINTF
|
||||
# ifndef __FRIBIDI_DOC
|
||||
# include <stdio.h>
|
||||
# endif /* !__FRIBIDI_DOC */
|
||||
# define FRIBIDI_FPRINTF fprintf
|
||||
# define FRIBIDI_STDERR_ stderr,
|
||||
#endif /* !FRIBIDI_FPRINTF */
|
||||
|
||||
#ifndef MSG
|
||||
#define MSG(s) \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
FRIBIDI_FPRINTF(FRIBIDI_STDERR_ s); \
|
||||
FRIBIDI_END_STMT
|
||||
#define MSG2(s, t) \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
FRIBIDI_FPRINTF(FRIBIDI_STDERR_ s, t); \
|
||||
FRIBIDI_END_STMT
|
||||
#define MSG5(s, t, u, v, w) \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
FRIBIDI_FPRINTF(FRIBIDI_STDERR_ s, t, u, v, w); \
|
||||
FRIBIDI_END_STMT
|
||||
#endif /* !MSG */
|
||||
|
||||
#ifndef DBG
|
||||
# define DBG(s) \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
if (fribidi_debug_status()) { MSG(FRIBIDI ": " s "\n"); } \
|
||||
FRIBIDI_END_STMT
|
||||
# define DBG2(s, t) \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
if (fribidi_debug_status()) { MSG2(FRIBIDI ": " s "\n", t); } \
|
||||
FRIBIDI_END_STMT
|
||||
#endif /* !DBG */
|
||||
|
||||
#ifndef fribidi_assert
|
||||
# define fribidi_assert(cond) \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
if (!(cond)) { \
|
||||
DBG(__FILE__ ":" STRINGIZE(__LINE__) ": " \
|
||||
"assertion failed (" STRINGIZE(cond) ")"); \
|
||||
} \
|
||||
FRIBIDI_END_STMT
|
||||
#endif /* !fribidi_assert */
|
||||
|
||||
#else /* !DEBUG */
|
||||
|
||||
#ifndef DBG
|
||||
# define DBG(s) FRIBIDI_EMPTY_STMT
|
||||
# define DBG2(s, t) FRIBIDI_EMPTY_STMT
|
||||
#endif /* !DBG */
|
||||
#ifndef fribidi_assert
|
||||
# define fribidi_assert(cond) FRIBIDI_EMPTY_STMT
|
||||
#endif /* !fribidi_assert */
|
||||
|
||||
#endif /* !DEBUG */
|
||||
|
||||
#include <fribidi-enddecls.h>
|
||||
|
||||
#endif /* !_DEBUG_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,193 @@
|
||||
/* fribidi-arabic.c - Arabic shaping
|
||||
*
|
||||
* Copyright (C) 2005 Behdad Esfahbod
|
||||
*
|
||||
* This file is part of GNU FriBidi.
|
||||
*
|
||||
* GNU FriBidi is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* GNU FriBidi is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with GNU FriBidi; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info> or write to
|
||||
* Sharif FarsiWeb, Inc., PO Box 13445-389, Tehran, Iran.
|
||||
*/
|
||||
/* $Id: fribidi-arabic.c,v 1.3 2007/04/05 16:14:39 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2007/04/05 16:14:39 $
|
||||
* $Revision: 1.3 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-arabic.c,v $
|
||||
*
|
||||
* Author(s):
|
||||
* Behdad Esfahbod, 2005
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#if HAVE_STDLIB_H+0
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include <fribidi-arabic.h>
|
||||
#include <fribidi-unicode.h>
|
||||
|
||||
|
||||
typedef struct _PairMap {
|
||||
FriBidiChar pair[2], to;
|
||||
} PairMap;
|
||||
|
||||
|
||||
#define FRIBIDI_ACCESS_SHAPE_TABLE(table,min,max,x,shape) (table), (min), (max)
|
||||
# define FRIBIDI_ACCESS_SHAPE_TABLE_REAL(table,min,max,x,shape) \
|
||||
(((x)<(min)||(x)>(max))?(x):(table)[(x)-(min)][(shape)])
|
||||
|
||||
#include "arabic-shaping.tab.i"
|
||||
#include "arabic-misc.tab.i"
|
||||
|
||||
|
||||
static void
|
||||
fribidi_shape_arabic_joining (
|
||||
/* input */
|
||||
const FriBidiChar table[][4],
|
||||
FriBidiChar min,
|
||||
FriBidiChar max,
|
||||
const FriBidiStrIndex len,
|
||||
const FriBidiArabicProp *ar_props,
|
||||
/* input and output */
|
||||
FriBidiChar *str
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
if (FRIBIDI_ARAB_SHAPES(ar_props[i]))
|
||||
str[i] = FRIBIDI_ACCESS_SHAPE_TABLE_REAL (table, min, max, str[i], FRIBIDI_JOIN_SHAPE (ar_props[i]));
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int
|
||||
comp_PairMap (const void *pa, const void *pb)
|
||||
{
|
||||
PairMap *a = (PairMap *)pa;
|
||||
PairMap *b = (PairMap *)pb;
|
||||
|
||||
if (a->pair[0] != b->pair[0])
|
||||
return a->pair[0] < b->pair[0] ? -1 : +1;
|
||||
else
|
||||
return a->pair[1] < b->pair[1] ? -1 :
|
||||
a->pair[1] > b->pair[1] ? +1 :
|
||||
0;
|
||||
}
|
||||
|
||||
|
||||
static FriBidiChar
|
||||
find_pair_match (const PairMap *table, int size, FriBidiChar first, FriBidiChar second)
|
||||
{
|
||||
PairMap *match;
|
||||
PairMap x;
|
||||
x.pair[0] = first;
|
||||
x.pair[1] = second;
|
||||
x.to = 0;
|
||||
match = bsearch (&x, table, size, sizeof (table[0]), comp_PairMap);
|
||||
return match ? match->to : 0;
|
||||
}
|
||||
|
||||
#define PAIR_MATCH(table,len,first,second) \
|
||||
((first)<(table[0].pair[0])||(first)>(table[len-1].pair[0])?0: \
|
||||
find_pair_match(table, len, first, second))
|
||||
|
||||
static void
|
||||
fribidi_shape_arabic_ligature (
|
||||
/* input */
|
||||
const PairMap *table,
|
||||
int size,
|
||||
const FriBidiLevel *embedding_levels,
|
||||
const FriBidiStrIndex len,
|
||||
/* input and output */
|
||||
FriBidiArabicProp *ar_props,
|
||||
FriBidiChar *str
|
||||
)
|
||||
{
|
||||
/* TODO: This doesn't form ligatures for even-level Arabic text.
|
||||
* no big problem though. */
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
for (i = 0; i < len - 1; i++) {
|
||||
register FriBidiChar c;
|
||||
if (FRIBIDI_LEVEL_IS_RTL(embedding_levels[i]) &&
|
||||
embedding_levels[i] == embedding_levels[i+1] &&
|
||||
(c = PAIR_MATCH(table, size, str[i], str[i+1])))
|
||||
{
|
||||
str[i] = FRIBIDI_CHAR_FILL;
|
||||
FRIBIDI_SET_BITS(ar_props[i], FRIBIDI_MASK_LIGATURED);
|
||||
str[i+1] = c;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#define DO_LIGATURING(table, levels, len, ar_props, str) \
|
||||
fribidi_shape_arabic_ligature ((table), sizeof(table)/sizeof((table)[0]), levels, len, ar_props, str)
|
||||
|
||||
#define DO_SHAPING(tablemacro, len, ar_props, str) \
|
||||
fribidi_shape_arabic_joining (tablemacro(,), len, ar_props, str);
|
||||
|
||||
|
||||
|
||||
|
||||
FRIBIDI_ENTRY void
|
||||
fribidi_shape_arabic (
|
||||
/* input */
|
||||
FriBidiFlags flags,
|
||||
const FriBidiLevel *embedding_levels,
|
||||
const FriBidiStrIndex len,
|
||||
/* input and output */
|
||||
FriBidiArabicProp *ar_props,
|
||||
FriBidiChar *str
|
||||
)
|
||||
{
|
||||
DBG ("in fribidi_shape_arabic");
|
||||
|
||||
if UNLIKELY
|
||||
(len == 0 || !str) return;
|
||||
|
||||
DBG ("in fribidi_shape");
|
||||
|
||||
fribidi_assert (ar_props);
|
||||
|
||||
if (FRIBIDI_TEST_BITS (flags, FRIBIDI_FLAG_SHAPE_ARAB_PRES))
|
||||
{
|
||||
DO_SHAPING (FRIBIDI_GET_ARABIC_SHAPE_PRES, len, ar_props, str);
|
||||
}
|
||||
|
||||
if (FRIBIDI_TEST_BITS (flags, FRIBIDI_FLAG_SHAPE_ARAB_LIGA))
|
||||
{
|
||||
DO_LIGATURING (mandatory_liga_table, embedding_levels, len, ar_props, str);
|
||||
}
|
||||
|
||||
if (FRIBIDI_TEST_BITS (flags, FRIBIDI_FLAG_SHAPE_ARAB_CONSOLE))
|
||||
{
|
||||
DO_LIGATURING (console_liga_table, embedding_levels, len, ar_props, str);
|
||||
DO_SHAPING (FRIBIDI_GET_ARABIC_SHAPE_NSM, len, ar_props, str);
|
||||
}
|
||||
}
|
||||
|
||||
/* Editor directions:
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 2
|
||||
* indent-tabs-mode: t
|
||||
* tab-width: 8
|
||||
* End:
|
||||
* vim: textwidth=78: autoindent: cindent: shiftwidth=2: tabstop=8:
|
||||
*/
|
||||
@@ -0,0 +1,88 @@
|
||||
/* fribidi-arabic.h - do Arabic shaping to presentation forms
|
||||
*
|
||||
* Copyright (C) 2005 Behdad Esfahbod
|
||||
*
|
||||
* This file is part of GNU FriBidi.
|
||||
*
|
||||
* GNU FriBidi is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* GNU FriBidi is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with GNU FriBidi; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info> or write to
|
||||
* Sharif FarsiWeb, Inc., PO Box 13445-389, Tehran, Iran.
|
||||
*/
|
||||
/* $Id: fribidi-arabic.h,v 1.1 2005/11/03 01:39:01 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2005/11/03 01:39:01 $
|
||||
* $Revision: 1.1 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-arabic.h,v $
|
||||
*
|
||||
* Author(s):
|
||||
* Behdad Esfahbod, 2005
|
||||
*/
|
||||
#ifndef _FRIBIDI_ARABIC_H
|
||||
#define _FRIBIDI_ARABIC_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
#include "fribidi-flags.h"
|
||||
#include "fribidi-bidi-types.h"
|
||||
#include "fribidi-joining.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
|
||||
#define fribidi_shape_arabic FRIBIDI_NAMESPACE(shape_arabic)
|
||||
/* fribidi_shape_arabic - do Arabic shaping
|
||||
*
|
||||
* The actual shaping that is done depends on the flags set. Only flags
|
||||
* starting with FRIBIDI_FLAG_SHAPE_ARAB_ affect this function.
|
||||
* Currently these are:
|
||||
*
|
||||
* * FRIBIDI_FLAG_SHAPE_MIRRORING: Do mirroring.
|
||||
* * FRIBIDI_FLAG_SHAPE_ARAB_PRES: Shape Arabic characters to their
|
||||
* presentation form glyphs.
|
||||
* * FRIBIDI_FLAG_SHAPE_ARAB_LIGA: Form mandatory Arabic ligatures.
|
||||
* * FRIBIDI_FLAG_SHAPE_ARAB_CONSOLE: Perform additional Arabic shaping
|
||||
* suitable for text rendered on
|
||||
* grid terminals with no mark
|
||||
* rendering capabilities.
|
||||
*
|
||||
* Of the above, FRIBIDI_FLAG_SHAPE_ARAB_CONSOLE is only used in special
|
||||
* cases, but the rest are recommended in any enviroment that doesn't have
|
||||
* other means for doing Arabic shaping. The set of extra flags that enable
|
||||
* this level of Arabic support has a shortcut named FRIBIDI_FLAGS_ARABIC.
|
||||
*/
|
||||
FRIBIDI_ENTRY void
|
||||
fribidi_shape_arabic (
|
||||
FriBidiFlags flags, /* shaping flags */
|
||||
const FriBidiLevel *embedding_levels,
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
FriBidiArabicProp *ar_props, /* input/output Arabic properties as
|
||||
* computed by fribidi_join_arabic */
|
||||
FriBidiChar *str /* string to shape */
|
||||
);
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_ARABIC_H */
|
||||
/* Editor directions:
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 2
|
||||
* indent-tabs-mode: t
|
||||
* tab-width: 8
|
||||
* End:
|
||||
* vim: textwidth=78: autoindent: cindent: shiftwidth=2: tabstop=8:
|
||||
*/
|
||||
@@ -0,0 +1,3 @@
|
||||
#ifdef FRIBIDI_BEGIN_DECLS
|
||||
FRIBIDI_BEGIN_DECLS
|
||||
#endif /* FRIBIDI_BEGIN_DECLS */
|
||||
@@ -0,0 +1,98 @@
|
||||
#ifndef __FRIBIDI_DOC
|
||||
/* FriBidi
|
||||
* fribidi-bidi-types-list.h - list of bidi types
|
||||
*
|
||||
* $Id: fribidi-bidi-types-list.h,v 1.5 2004/06/13 20:11:42 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2004/06/13 20:11:42 $
|
||||
* $Revision: 1.5 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-bidi-types-list.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
/* *INDENT-OFF* */
|
||||
#endif /* !__FRIBIDI_DOC */
|
||||
#ifndef _FRIBIDI_ADD_TYPE
|
||||
# define _FRIBIDI_ADD_TYPE(x,y)
|
||||
#endif
|
||||
#ifndef _FRIBIDI_ADD_ALIAS
|
||||
# define _FRIBIDI_ADD_ALIAS(x1,x2)
|
||||
#endif
|
||||
|
||||
#if !defined(_FRIBIDI_PAR_TYPES) || defined(_FRIBIDI_ALL_TYPES)
|
||||
|
||||
_FRIBIDI_ADD_TYPE (LTR, 'L') /* Left-To-Right letter */
|
||||
_FRIBIDI_ADD_TYPE (RTL, 'R') /* Right-To-Left letter */
|
||||
_FRIBIDI_ADD_TYPE (AL, 'A') /* Arabic Letter */
|
||||
_FRIBIDI_ADD_TYPE (EN, '1') /* European Numeral */
|
||||
_FRIBIDI_ADD_TYPE (AN, '9') /* Arabic Numeral */
|
||||
_FRIBIDI_ADD_TYPE (ES, 'w') /* European number Separator */
|
||||
_FRIBIDI_ADD_TYPE (ET, 'w') /* European number Terminator */
|
||||
_FRIBIDI_ADD_TYPE (CS, 'w') /* Common Separator */
|
||||
_FRIBIDI_ADD_TYPE (NSM, '`') /* Non Spacing Mark */
|
||||
_FRIBIDI_ADD_TYPE (BN, 'b') /* Boundary Neutral */
|
||||
_FRIBIDI_ADD_TYPE (BS, 'B') /* Block Separator */
|
||||
_FRIBIDI_ADD_TYPE (SS, 'S') /* Segment Separator */
|
||||
_FRIBIDI_ADD_TYPE (WS, '_') /* WhiteSpace */
|
||||
_FRIBIDI_ADD_TYPE (ON, 'n') /* Other Neutral */
|
||||
_FRIBIDI_ADD_TYPE (LRE, '+') /* Left-to-Right Embedding */
|
||||
_FRIBIDI_ADD_TYPE (RLE, '+') /* Right-to-Left Embedding */
|
||||
_FRIBIDI_ADD_TYPE (LRO, '+') /* Left-to-Right Override */
|
||||
_FRIBIDI_ADD_TYPE (RLO, '+') /* Right-to-Left Override */
|
||||
_FRIBIDI_ADD_TYPE (PDF, '-') /* Pop Directional Flag */
|
||||
|
||||
#if defined(_FRIBIDI_ADD_ALIAS)
|
||||
_FRIBIDI_ADD_ALIAS (L, LTR)
|
||||
_FRIBIDI_ADD_ALIAS (R, RTL)
|
||||
_FRIBIDI_ADD_ALIAS (B, BS)
|
||||
_FRIBIDI_ADD_ALIAS (S, SS)
|
||||
#endif /* _FRIBIDI_ADD_ALIAS */
|
||||
|
||||
#if defined(_FRIBIDI_SENTINEL_TYPE) || defined(_FRIBIDI_ALL_TYPES)
|
||||
_FRIBIDI_ADD_TYPE (SENTINEL, '$') /* SENTINEL */
|
||||
#endif /* _FRIBIDI_SENTINEL_TYPES || _FRIBIDI_ALL_TYPES*/
|
||||
#endif /* !_FRIBIDI_PAR_TYPES || _FRIBIDI_ALL_TYPES */
|
||||
|
||||
#if defined(_FRIBIDI_PAR_TYPES) || defined(_FRIBIDI_ALL_TYPES)
|
||||
# if !defined(_FRIBIDI_ALL_TYPES)
|
||||
_FRIBIDI_ADD_TYPE (LTR, 'L') /* Left-To-Right paragraph */
|
||||
_FRIBIDI_ADD_TYPE (RTL, 'R') /* Right-To-Left paragraph */
|
||||
_FRIBIDI_ADD_TYPE (ON, 'n') /* directiOn-Neutral paragraph */
|
||||
# endif /* !_FRIBIDI_ALL_TYPES */
|
||||
_FRIBIDI_ADD_TYPE (WLTR, 'l') /* Weak Left To Right paragraph */
|
||||
_FRIBIDI_ADD_TYPE (WRTL, 'r') /* Weak Right To Left paragraph */
|
||||
#endif /* _FRIBIDI_PAR_TYPES || _FRIBIDI_ALL_TYPES*/
|
||||
|
||||
#if defined(_FRIBIDI_ENUM_TYPES)
|
||||
typedef enum {
|
||||
# define _FRIBIDI_ADD_TYPE _FRIBIDI_ENUM_ADD_TYPE
|
||||
# include "fribidi-bidi-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
_FRIBIDI_TYPES_MAX
|
||||
} _FRIBIDI_ENUM_TYPES
|
||||
#endif /* _FRIBIDI_ENUM_TYPES */
|
||||
|
||||
#ifndef __FRIBIDI_DOC
|
||||
/* *INDENT-ON* */
|
||||
#endif /* !__FRIBIDI_DOC */
|
||||
@@ -0,0 +1,125 @@
|
||||
/* FriBidi
|
||||
* fribidi-bidi-types.c - character bidi types
|
||||
*
|
||||
* $Id: fribidi-bidi-types.c,v 1.9 2006/01/31 03:23:13 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:13 $
|
||||
* $Revision: 1.9 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-bidi-types.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-bidi-types.h>
|
||||
|
||||
#include "bidi-types.h"
|
||||
|
||||
enum FriBidiCharTypeLinearEnum
|
||||
{
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) TYPE,
|
||||
# include "fribidi-bidi-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
_FRIBIDI_NUM_TYPES
|
||||
};
|
||||
|
||||
#include "bidi-type.tab.i"
|
||||
|
||||
/* Map FriBidiCharTypeLinearEnum to FriBidiCharType. */
|
||||
static const FriBidiCharType linear_enum_to_char_type[] = {
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) FRIBIDI_TYPE_##TYPE,
|
||||
# include "fribidi-bidi-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
};
|
||||
|
||||
FRIBIDI_ENTRY FriBidiCharType
|
||||
fribidi_get_bidi_type (
|
||||
/* input */
|
||||
FriBidiChar ch
|
||||
)
|
||||
{
|
||||
return linear_enum_to_char_type[FRIBIDI_GET_BIDI_TYPE (ch)];
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY void
|
||||
fribidi_get_bidi_types (
|
||||
/* input */
|
||||
const FriBidiChar *str,
|
||||
const FriBidiStrIndex len,
|
||||
/* output */
|
||||
FriBidiCharType *btypes
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i = len;
|
||||
for (; i; i--)
|
||||
{
|
||||
*btypes++ = linear_enum_to_char_type[FRIBIDI_GET_BIDI_TYPE (*str)];
|
||||
str++;
|
||||
}
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY const char *
|
||||
fribidi_get_bidi_type_name (
|
||||
/* input */
|
||||
FriBidiCharType t
|
||||
)
|
||||
{
|
||||
switch (t)
|
||||
{
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_TYPE_##TYPE: return STRINGIZE(TYPE);
|
||||
# define _FRIBIDI_ALL_TYPES
|
||||
# include "fribidi-bidi-types-list.h"
|
||||
# undef _FRIBIDI_ALL_TYPES
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
default:
|
||||
return "?";
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG+0
|
||||
|
||||
char
|
||||
fribidi_char_from_bidi_type (
|
||||
/* input */
|
||||
FriBidiCharType t
|
||||
)
|
||||
{
|
||||
switch (t)
|
||||
{
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_TYPE_##TYPE: return SYMBOL;
|
||||
# define _FRIBIDI_ALL_TYPES
|
||||
# include "fribidi-bidi-types-list.h"
|
||||
# undef _FRIBIDI_ALL_TYPES
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
default:
|
||||
return '?';
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* DEBUG */
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,389 @@
|
||||
/* FriBidi
|
||||
* fribidi-bidi-types.h - character bidi types
|
||||
*
|
||||
* $Id: fribidi-bidi-types.h,v 1.15 2008-11-24 17:48:31 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2008-11-24 17:48:31 $
|
||||
* $Revision: 1.15 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-bidi-types.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_BIDI_TYPES_H
|
||||
#define _FRIBIDI_BIDI_TYPES_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
typedef signed char FriBidiLevel;
|
||||
|
||||
/*
|
||||
* Define bit masks that bidi types are based on, each mask has
|
||||
* only one bit set.
|
||||
*/
|
||||
|
||||
/* RTL mask better be the least significant bit. */
|
||||
#define FRIBIDI_MASK_RTL 0x00000001L /* Is right to left */
|
||||
#define FRIBIDI_MASK_ARABIC 0x00000002L /* Is arabic */
|
||||
|
||||
/* Each char can be only one of the three following. */
|
||||
#define FRIBIDI_MASK_STRONG 0x00000010L /* Is strong */
|
||||
#define FRIBIDI_MASK_WEAK 0x00000020L /* Is weak */
|
||||
#define FRIBIDI_MASK_NEUTRAL 0x00000040L /* Is neutral */
|
||||
#define FRIBIDI_MASK_SENTINEL 0x00000080L /* Is sentinel */
|
||||
/* Sentinels are not valid chars, just identify the start/end of strings. */
|
||||
|
||||
/* Each char can be only one of the five following. */
|
||||
#define FRIBIDI_MASK_LETTER 0x00000100L /* Is letter: L, R, AL */
|
||||
#define FRIBIDI_MASK_NUMBER 0x00000200L /* Is number: EN, AN */
|
||||
#define FRIBIDI_MASK_NUMSEPTER 0x00000400L /* Is separator or terminator: ES, ET, CS */
|
||||
#define FRIBIDI_MASK_SPACE 0x00000800L /* Is space: BN, BS, SS, WS */
|
||||
#define FRIBIDI_MASK_EXPLICIT 0x00001000L /* Is expilict mark: LRE, RLE, LRO, RLO, PDF */
|
||||
|
||||
/* Can be set only if FRIBIDI_MASK_SPACE is also set. */
|
||||
#define FRIBIDI_MASK_SEPARATOR 0x00002000L /* Is text separator: BS, SS */
|
||||
/* Can be set only if FRIBIDI_MASK_EXPLICIT is also set. */
|
||||
#define FRIBIDI_MASK_OVERRIDE 0x00004000L /* Is explicit override: LRO, RLO */
|
||||
|
||||
/* The following exist to make types pairwise different, some of them can
|
||||
* be removed but are here because of efficiency (make queries faster). */
|
||||
|
||||
#define FRIBIDI_MASK_ES 0x00010000L
|
||||
#define FRIBIDI_MASK_ET 0x00020000L
|
||||
#define FRIBIDI_MASK_CS 0x00040000L
|
||||
|
||||
#define FRIBIDI_MASK_NSM 0x00080000L
|
||||
#define FRIBIDI_MASK_BN 0x00100000L
|
||||
|
||||
#define FRIBIDI_MASK_BS 0x00200000L
|
||||
#define FRIBIDI_MASK_SS 0x00400000L
|
||||
#define FRIBIDI_MASK_WS 0x00800000L
|
||||
|
||||
/* We reserve a single bit for user's private use: we will never use it. */
|
||||
#define FRIBIDI_MASK_PRIVATE 0x01000000L
|
||||
|
||||
|
||||
/*
|
||||
* Define values for FriBidiCharType
|
||||
*/
|
||||
|
||||
/* Strong types */
|
||||
|
||||
/* Left-To-Right letter */
|
||||
#define FRIBIDI_TYPE_LTR_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_LETTER )
|
||||
/* Right-To-Left letter */
|
||||
#define FRIBIDI_TYPE_RTL_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_LETTER \
|
||||
| FRIBIDI_MASK_RTL)
|
||||
/* Arabic Letter */
|
||||
#define FRIBIDI_TYPE_AL_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_LETTER \
|
||||
| FRIBIDI_MASK_RTL | FRIBIDI_MASK_ARABIC )
|
||||
/* Left-to-Right Embedding */
|
||||
#define FRIBIDI_TYPE_LRE_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT)
|
||||
/* Right-to-Left Embedding */
|
||||
#define FRIBIDI_TYPE_RLE_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT \
|
||||
| FRIBIDI_MASK_RTL )
|
||||
/* Left-to-Right Override */
|
||||
#define FRIBIDI_TYPE_LRO_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT \
|
||||
| FRIBIDI_MASK_OVERRIDE )
|
||||
/* Right-to-Left Override */
|
||||
#define FRIBIDI_TYPE_RLO_VAL ( FRIBIDI_MASK_STRONG | FRIBIDI_MASK_EXPLICIT \
|
||||
| FRIBIDI_MASK_RTL | FRIBIDI_MASK_OVERRIDE )
|
||||
|
||||
/* Weak types */
|
||||
|
||||
/* Pop Directional Flag*/
|
||||
#define FRIBIDI_TYPE_PDF_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_EXPLICIT )
|
||||
/* European Numeral */
|
||||
#define FRIBIDI_TYPE_EN_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMBER )
|
||||
/* Arabic Numeral */
|
||||
#define FRIBIDI_TYPE_AN_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMBER \
|
||||
| FRIBIDI_MASK_ARABIC )
|
||||
/* European number Separator */
|
||||
#define FRIBIDI_TYPE_ES_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMSEPTER \
|
||||
| FRIBIDI_MASK_ES )
|
||||
/* European number Terminator */
|
||||
#define FRIBIDI_TYPE_ET_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMSEPTER \
|
||||
| FRIBIDI_MASK_ET )
|
||||
/* Common Separator */
|
||||
#define FRIBIDI_TYPE_CS_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NUMSEPTER \
|
||||
| FRIBIDI_MASK_CS )
|
||||
/* Non Spacing Mark */
|
||||
#define FRIBIDI_TYPE_NSM_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_NSM )
|
||||
/* Boundary Neutral */
|
||||
#define FRIBIDI_TYPE_BN_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_SPACE \
|
||||
| FRIBIDI_MASK_BN )
|
||||
|
||||
/* Neutral types */
|
||||
|
||||
/* Block Separator */
|
||||
#define FRIBIDI_TYPE_BS_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_SPACE \
|
||||
| FRIBIDI_MASK_SEPARATOR | FRIBIDI_MASK_BS )
|
||||
/* Segment Separator */
|
||||
#define FRIBIDI_TYPE_SS_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_SPACE \
|
||||
| FRIBIDI_MASK_SEPARATOR | FRIBIDI_MASK_SS )
|
||||
/* WhiteSpace */
|
||||
#define FRIBIDI_TYPE_WS_VAL ( FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_SPACE \
|
||||
| FRIBIDI_MASK_WS )
|
||||
/* Other Neutral */
|
||||
#define FRIBIDI_TYPE_ON_VAL ( FRIBIDI_MASK_NEUTRAL )
|
||||
|
||||
|
||||
/* The following are used in specifying paragraph direction only. */
|
||||
|
||||
/* Weak Left-To-Right */
|
||||
#define FRIBIDI_TYPE_WLTR_VAL ( FRIBIDI_MASK_WEAK )
|
||||
/* Weak Right-To-Left */
|
||||
#define FRIBIDI_TYPE_WRTL_VAL ( FRIBIDI_MASK_WEAK | FRIBIDI_MASK_RTL )
|
||||
|
||||
/* start or end of text (run list) SENTINEL. Only used internally */
|
||||
#define FRIBIDI_TYPE_SENTINEL ( FRIBIDI_MASK_SENTINEL )
|
||||
|
||||
/* Private types for applications. More private types can be obtained by
|
||||
* summing up from this one. */
|
||||
#define FRIBIDI_TYPE_PRIVATE ( FRIBIDI_MASK_PRIVATE )
|
||||
|
||||
|
||||
/* Define Enums only if sizeof(int) == 4 (UTF-32), and not compiling C++.
|
||||
* The problem with C++ is that then casts between int32 and enum will fail!
|
||||
*/
|
||||
#if defined(__FRIBIDI_DOC) || (FRIBIDI_SIZEOF_INT+0 == 4 && !defined(__cplusplus))
|
||||
|
||||
typedef enum
|
||||
{
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) \
|
||||
FRIBIDI_TYPE_##TYPE = FRIBIDI_TYPE_##TYPE##_VAL,
|
||||
# include "fribidi-bidi-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
_FRIBIDI_TYPE_SENTINEL = FRIBIDI_TYPE_SENTINEL /* Don't use this */
|
||||
} FriBidiCharType;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
# define _FRIBIDI_PAR_TYPES
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) \
|
||||
FRIBIDI_PAR_##TYPE = FRIBIDI_TYPE_##TYPE##_VAL,
|
||||
# include "fribidi-bidi-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
# undef _FRIBIDI_PAR_TYPES
|
||||
_FRIBIDI_PAR_SENTINEL = FRIBIDI_TYPE_SENTINEL /* Don't use this */
|
||||
} FriBidiParType;
|
||||
|
||||
#else
|
||||
|
||||
typedef fribidi_uint32 FriBidiCharType;
|
||||
# define FRIBIDI_TYPE_LTR FRIBIDI_TYPE_LTR_VAL
|
||||
# define FRIBIDI_TYPE_RTL FRIBIDI_TYPE_RTL_VAL
|
||||
# define FRIBIDI_TYPE_AL FRIBIDI_TYPE_AL_VAL
|
||||
# define FRIBIDI_TYPE_EN FRIBIDI_TYPE_EN_VAL
|
||||
# define FRIBIDI_TYPE_AN FRIBIDI_TYPE_AN_VAL
|
||||
# define FRIBIDI_TYPE_ES FRIBIDI_TYPE_ES_VAL
|
||||
# define FRIBIDI_TYPE_ET FRIBIDI_TYPE_ET_VAL
|
||||
# define FRIBIDI_TYPE_CS FRIBIDI_TYPE_CS_VAL
|
||||
# define FRIBIDI_TYPE_NSM FRIBIDI_TYPE_NSM_VAL
|
||||
# define FRIBIDI_TYPE_BN FRIBIDI_TYPE_BN_VAL
|
||||
# define FRIBIDI_TYPE_BS FRIBIDI_TYPE_BS_VAL
|
||||
# define FRIBIDI_TYPE_SS FRIBIDI_TYPE_SS_VAL
|
||||
# define FRIBIDI_TYPE_WS FRIBIDI_TYPE_WS_VAL
|
||||
# define FRIBIDI_TYPE_ON FRIBIDI_TYPE_ON_VAL
|
||||
# define FRIBIDI_TYPE_LRE FRIBIDI_TYPE_LRE_VAL
|
||||
# define FRIBIDI_TYPE_RLE FRIBIDI_TYPE_RLE_VAL
|
||||
# define FRIBIDI_TYPE_LRO FRIBIDI_TYPE_LRO_VAL
|
||||
# define FRIBIDI_TYPE_RLO FRIBIDI_TYPE_RLO_VAL
|
||||
# define FRIBIDI_TYPE_PDF FRIBIDI_TYPE_PDF_VAL
|
||||
|
||||
typedef fribidi_uint32 FriBidiParType;
|
||||
# define FRIBIDI_PAR_LTR FRIBIDI_TYPE_LTR_VAL
|
||||
# define FRIBIDI_PAR_RTL FRIBIDI_TYPE_RTL_VAL
|
||||
# define FRIBIDI_PAR_ON FRIBIDI_TYPE_ON_VAL
|
||||
# define FRIBIDI_PAR_WLTR FRIBIDI_TYPE_WLTR_VAL
|
||||
# define FRIBIDI_PAR_WRTL FRIBIDI_TYPE_WRTL_VAL
|
||||
|
||||
#endif
|
||||
|
||||
/* Please don't use these two type names, use FRIBIDI_PAR_* form instead. */
|
||||
#define FRIBIDI_TYPE_WLTR FRIBIDI_PAR_WLTR
|
||||
#define FRIBIDI_TYPE_WRTL FRIBIDI_PAR_WRTL
|
||||
|
||||
|
||||
/*
|
||||
* Defining macros for needed queries, It is fully dependent on the
|
||||
* implementation of FriBidiCharType.
|
||||
*/
|
||||
|
||||
|
||||
/* Is right-to-left level? */
|
||||
#define FRIBIDI_LEVEL_IS_RTL(lev) ((lev) & 1)
|
||||
|
||||
/* Return the bidi type corresponding to the direction of the level number,
|
||||
FRIBIDI_TYPE_LTR for evens and FRIBIDI_TYPE_RTL for odds. */
|
||||
#define FRIBIDI_LEVEL_TO_DIR(lev) \
|
||||
(FRIBIDI_LEVEL_IS_RTL (lev) ? FRIBIDI_TYPE_RTL : FRIBIDI_TYPE_LTR)
|
||||
|
||||
/* Return the minimum level of the direction, 0 for FRIBIDI_TYPE_LTR and
|
||||
1 for FRIBIDI_TYPE_RTL and FRIBIDI_TYPE_AL. */
|
||||
#define FRIBIDI_DIR_TO_LEVEL(dir) \
|
||||
((FriBidiLevel) (FRIBIDI_IS_RTL (dir) ? 1 : 0))
|
||||
|
||||
/* Is right to left: RTL, AL, RLE, RLO? */
|
||||
#define FRIBIDI_IS_RTL(p) ((p) & FRIBIDI_MASK_RTL)
|
||||
/* Is arabic: AL, AN? */
|
||||
#define FRIBIDI_IS_ARABIC(p) ((p) & FRIBIDI_MASK_ARABIC)
|
||||
|
||||
/* Is strong? */
|
||||
#define FRIBIDI_IS_STRONG(p) ((p) & FRIBIDI_MASK_STRONG)
|
||||
/* Is weak? */
|
||||
#define FRIBIDI_IS_WEAK(p) ((p) & FRIBIDI_MASK_WEAK)
|
||||
/* Is neutral? */
|
||||
#define FRIBIDI_IS_NEUTRAL(p) ((p) & FRIBIDI_MASK_NEUTRAL)
|
||||
/* Is sentinel? */
|
||||
#define FRIBIDI_IS_SENTINEL(p) ((p) & FRIBIDI_MASK_SENTINEL)
|
||||
|
||||
/* Is letter: L, R, AL? */
|
||||
#define FRIBIDI_IS_LETTER(p) ((p) & FRIBIDI_MASK_LETTER)
|
||||
/* Is number: EN, AN? */
|
||||
#define FRIBIDI_IS_NUMBER(p) ((p) & FRIBIDI_MASK_NUMBER)
|
||||
/* Is number separator or terminator: ES, ET, CS? */
|
||||
#define FRIBIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR(p) \
|
||||
((p) & FRIBIDI_MASK_NUMSEPTER)
|
||||
/* Is space: BN, BS, SS, WS? */
|
||||
#define FRIBIDI_IS_SPACE(p) ((p) & FRIBIDI_MASK_SPACE)
|
||||
/* Is explicit mark: LRE, RLE, LRO, RLO, PDF? */
|
||||
#define FRIBIDI_IS_EXPLICIT(p) ((p) & FRIBIDI_MASK_EXPLICIT)
|
||||
|
||||
/* Is text separator: BS, SS? */
|
||||
#define FRIBIDI_IS_SEPARATOR(p) ((p) & FRIBIDI_MASK_SEPARATOR)
|
||||
|
||||
/* Is explicit override: LRO, RLO? */
|
||||
#define FRIBIDI_IS_OVERRIDE(p) ((p) & FRIBIDI_MASK_OVERRIDE)
|
||||
|
||||
/* Some more: */
|
||||
|
||||
/* Is left to right letter: LTR? */
|
||||
#define FRIBIDI_IS_LTR_LETTER(p) \
|
||||
((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) == FRIBIDI_MASK_LETTER)
|
||||
|
||||
/* Is right to left letter: RTL, AL? */
|
||||
#define FRIBIDI_IS_RTL_LETTER(p) \
|
||||
((p) & (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL) \
|
||||
== (FRIBIDI_MASK_LETTER | FRIBIDI_MASK_RTL))
|
||||
|
||||
/* Is ES or CS: ES, CS? */
|
||||
#define FRIBIDI_IS_ES_OR_CS(p) \
|
||||
((p) & (FRIBIDI_MASK_ES | FRIBIDI_MASK_CS))
|
||||
|
||||
/* Is explicit or BN: LRE, RLE, LRO, RLO, PDF, BN? */
|
||||
#define FRIBIDI_IS_EXPLICIT_OR_BN(p) \
|
||||
((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN))
|
||||
|
||||
/* Is explicit or BN or NSM: LRE, RLE, LRO, RLO, PDF, BN, NSM? */
|
||||
#define FRIBIDI_IS_EXPLICIT_OR_BN_OR_NSM(p) \
|
||||
((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN | FRIBIDI_MASK_NSM))
|
||||
|
||||
/* Is explicit or BN or WS: LRE, RLE, LRO, RLO, PDF, BN, WS? */
|
||||
#define FRIBIDI_IS_EXPLICIT_OR_BN_OR_WS(p) \
|
||||
((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_BN | FRIBIDI_MASK_WS))
|
||||
|
||||
/* Is explicit or separator or BN or WS: LRE, RLE, LRO, RLO, PDF, BS, SS, BN, WS? */
|
||||
#define FRIBIDI_IS_EXPLICIT_OR_SEPARATOR_OR_BN_OR_WS(p) \
|
||||
((p) & (FRIBIDI_MASK_EXPLICIT | FRIBIDI_MASK_SEPARATOR \
|
||||
| FRIBIDI_MASK_BN | FRIBIDI_MASK_WS))
|
||||
|
||||
/* Is private-use type for application? */
|
||||
#define FRIBIDI_IS_PRIVATE(p) ((p) & FRIBIDI_MASK_PRIVATE)
|
||||
|
||||
/* Define some conversions. */
|
||||
|
||||
/* Change numbers to RTL: EN,AN -> RTL. */
|
||||
#define FRIBIDI_CHANGE_NUMBER_TO_RTL(p) \
|
||||
(FRIBIDI_IS_NUMBER(p) ? FRIBIDI_TYPE_RTL : (p))
|
||||
|
||||
/* Override status of an explicit mark:
|
||||
* LRO,LRE->LTR, RLO,RLE->RTL, otherwise->ON. */
|
||||
#define FRIBIDI_EXPLICIT_TO_OVERRIDE_DIR(p) \
|
||||
(FRIBIDI_IS_OVERRIDE(p) ? FRIBIDI_LEVEL_TO_DIR(FRIBIDI_DIR_TO_LEVEL(p)) \
|
||||
: FRIBIDI_TYPE_ON)
|
||||
|
||||
/* Weaken type for paragraph fallback purposes:
|
||||
* LTR->WLTR, RTL->WRTL. */
|
||||
#define FRIBIDI_WEAK_PARAGRAPH(p) (FRIBIDI_PAR_WLTR | ((p) & FRIBIDI_MASK_RTL))
|
||||
|
||||
|
||||
/* Functions finally */
|
||||
|
||||
|
||||
#define fribidi_get_bidi_type FRIBIDI_NAMESPACE(get_bidi_type)
|
||||
/* fribidi_get_bidi_type - get character bidi type
|
||||
*
|
||||
* This function returns the bidi type of a character as defined in Table 3.7
|
||||
* Bidirectional Character Types of the Unicode Bidirectional Algorithm
|
||||
* available at
|
||||
* http://www.unicode.org/reports/tr9/#Bidirectional_Character_Types, using
|
||||
* data provided in file UnicodeData.txt of the Unicode Character Database
|
||||
* available at http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
|
||||
*
|
||||
* There are a few macros defined in fribidi-bidi-types.h for querying a bidi
|
||||
* type.
|
||||
*/
|
||||
FRIBIDI_ENTRY FriBidiCharType
|
||||
fribidi_get_bidi_type (
|
||||
FriBidiChar ch /* input character */
|
||||
) FRIBIDI_GNUC_CONST;
|
||||
|
||||
#define fribidi_get_bidi_types FRIBIDI_NAMESPACE(get_bidi_types)
|
||||
/* fribidi_get_bidi_types - get bidi types for an string of characters
|
||||
*
|
||||
* This function finds the bidi types of an string of characters. See
|
||||
* fribidi_get_bidi_type() for more information about the bidi types returned
|
||||
* by this function.
|
||||
*/
|
||||
FRIBIDI_ENTRY void fribidi_get_bidi_types (
|
||||
const FriBidiChar *str, /* input string */
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
FriBidiCharType *btypes /* output bidi types */
|
||||
);
|
||||
|
||||
#define fribidi_get_bidi_type_name FRIBIDI_NAMESPACE(get_bidi_type_name)
|
||||
/* fribidi_get_bidi_type_name - get bidi type name
|
||||
*
|
||||
* This function returns the bidi type name of a character type. The
|
||||
* returned string is a static string and should not be freed.
|
||||
*
|
||||
* The type names are the same as ones defined in Table 3.7 Bidirectional
|
||||
* Character Types of the Unicode Bidirectional Algorithm available at
|
||||
* http://www.unicode.org/reports/tr9/#Bidirectional_Character_Types, with a
|
||||
* few modifications: L->LTR, R->RTL, B->BS, S->SS.
|
||||
*/
|
||||
FRIBIDI_ENTRY const char *fribidi_get_bidi_type_name (
|
||||
FriBidiCharType t /* input bidi type */
|
||||
) FRIBIDI_GNUC_CONST;
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_BIDI_TYPES_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,992 @@
|
||||
/* FriBidi
|
||||
* fribidi-bidi.c - bidirectional algorithm
|
||||
*
|
||||
* $Id: fribidi-bidi.c,v 1.21 2007/03/15 18:09:25 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2007/03/15 18:09:25 $
|
||||
* $Revision: 1.21 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-bidi.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
* Dov Grobgeld, 1999, 2000
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
* Copyright (C) 1999,2000 Dov Grobgeld
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-bidi.h>
|
||||
#include <fribidi-mirroring.h>
|
||||
#include <fribidi-unicode.h>
|
||||
|
||||
#include "mem.h"
|
||||
#include "bidi-types.h"
|
||||
#include "run.h"
|
||||
|
||||
/*
|
||||
* This file implements most of Unicode Standard Annex #9, Tracking Number 13.
|
||||
*/
|
||||
|
||||
#ifndef MAX
|
||||
# define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||
#endif /* !MAX */
|
||||
|
||||
/* Some convenience macros */
|
||||
#define RL_TYPE(list) ((list)->type)
|
||||
#define RL_LEN(list) ((list)->len)
|
||||
#define RL_POS(list) ((list)->pos)
|
||||
#define RL_LEVEL(list) ((list)->level)
|
||||
|
||||
static FriBidiRun *
|
||||
merge_with_prev (
|
||||
FriBidiRun *second
|
||||
)
|
||||
{
|
||||
FriBidiRun *first;
|
||||
|
||||
fribidi_assert (second);
|
||||
fribidi_assert (second->next);
|
||||
first = second->prev;
|
||||
fribidi_assert (first);
|
||||
|
||||
first->next = second->next;
|
||||
first->next->prev = first;
|
||||
RL_LEN (first) += RL_LEN (second);
|
||||
free_run (second);
|
||||
return first;
|
||||
}
|
||||
|
||||
static void
|
||||
compact_list (
|
||||
FriBidiRun *list
|
||||
)
|
||||
{
|
||||
fribidi_assert (list);
|
||||
|
||||
if (list->next)
|
||||
for_run_list (list, list)
|
||||
if (RL_TYPE (list->prev) == RL_TYPE (list)
|
||||
&& RL_LEVEL (list->prev) == RL_LEVEL (list))
|
||||
list = merge_with_prev (list);
|
||||
}
|
||||
|
||||
static void
|
||||
compact_neutrals (
|
||||
FriBidiRun *list
|
||||
)
|
||||
{
|
||||
fribidi_assert (list);
|
||||
|
||||
if (list->next)
|
||||
{
|
||||
for_run_list (list, list)
|
||||
{
|
||||
if (RL_LEVEL (list->prev) == RL_LEVEL (list)
|
||||
&&
|
||||
((RL_TYPE
|
||||
(list->prev) == RL_TYPE (list)
|
||||
|| (FRIBIDI_IS_NEUTRAL (RL_TYPE (list->prev))
|
||||
&& FRIBIDI_IS_NEUTRAL (RL_TYPE (list))))))
|
||||
list = merge_with_prev (list);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG+0
|
||||
/*======================================================================
|
||||
* For debugging, define some functions for printing the types and the
|
||||
* levels.
|
||||
*----------------------------------------------------------------------*/
|
||||
|
||||
static char char_from_level_array[] = {
|
||||
'$', /* -1 == FRIBIDI_SENTINEL, indicating
|
||||
* start or end of string. */
|
||||
/* 0-61 == 0-9,a-z,A-Z are the the only valid levels before resolving
|
||||
* implicits. after that the level @ may be appear too. */
|
||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
|
||||
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
|
||||
'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
|
||||
'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
|
||||
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||
'Y', 'Z',
|
||||
|
||||
'@', /* 62 == only must appear after resolving
|
||||
* implicits. */
|
||||
|
||||
'!', /* 63 == FRIBIDI_LEVEL_INVALID, internal error,
|
||||
* this level shouldn't be seen. */
|
||||
|
||||
'*', '*', '*', '*', '*' /* >= 64 == overflows, this levels and higher
|
||||
* levels show a real bug!. */
|
||||
};
|
||||
|
||||
#define fribidi_char_from_level(level) char_from_level_array[(level) + 1]
|
||||
|
||||
static void
|
||||
print_types_re (
|
||||
const FriBidiRun *pp
|
||||
)
|
||||
{
|
||||
fribidi_assert (pp);
|
||||
|
||||
MSG (" Run types : ");
|
||||
for_run_list (pp, pp)
|
||||
{
|
||||
MSG5 ("%d:%d(%s)[%d] ",
|
||||
pp->pos, pp->len, fribidi_get_bidi_type_name (pp->type), pp->level);
|
||||
}
|
||||
MSG ("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_resolved_levels (
|
||||
const FriBidiRun *pp
|
||||
)
|
||||
{
|
||||
fribidi_assert (pp);
|
||||
|
||||
MSG (" Res. levels: ");
|
||||
for_run_list (pp, pp)
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
for (i = RL_LEN (pp); i; i--)
|
||||
MSG2 ("%c", fribidi_char_from_level (RL_LEVEL (pp)));
|
||||
}
|
||||
MSG ("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_resolved_types (
|
||||
const FriBidiRun *pp
|
||||
)
|
||||
{
|
||||
fribidi_assert (pp);
|
||||
|
||||
MSG (" Res. types : ");
|
||||
for_run_list (pp, pp)
|
||||
{
|
||||
FriBidiStrIndex i;
|
||||
for (i = RL_LEN (pp); i; i--)
|
||||
MSG2 ("%c", fribidi_char_from_bidi_type (pp->type));
|
||||
}
|
||||
MSG ("\n");
|
||||
}
|
||||
|
||||
static void
|
||||
print_bidi_string (
|
||||
/* input */
|
||||
const FriBidiCharType *bidi_types,
|
||||
const FriBidiStrIndex len
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
fribidi_assert (bidi_types);
|
||||
|
||||
MSG (" Org. types : ");
|
||||
for (i = 0; i < len; i++)
|
||||
MSG2 ("%c", fribidi_char_from_bidi_type (bidi_types[i]));
|
||||
MSG ("\n");
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
|
||||
/*=========================================================================
|
||||
* define macros for push and pop the status in to / out of the stack
|
||||
*-------------------------------------------------------------------------*/
|
||||
|
||||
/* There are a few little points in pushing into and poping from the status
|
||||
stack:
|
||||
1. when the embedding level is not valid (more than
|
||||
FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL=61), you must reject it, and not to push
|
||||
into the stack, but when you see a PDF, you must find the matching code,
|
||||
and if it was pushed in the stack, pop it, it means you must pop if and
|
||||
only if you have pushed the matching code, the over_pushed var counts the
|
||||
number of rejected codes so far.
|
||||
2. there's a more confusing point too, when the embedding level is exactly
|
||||
FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL-1=60, an LRO or LRE is rejected
|
||||
because the new level would be FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL+1=62, that
|
||||
is invalid; but an RLO or RLE is accepted because the new level is
|
||||
FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL=61, that is valid, so the rejected codes
|
||||
may be not continuous in the logical order, in fact there are at most two
|
||||
continuous intervals of codes, with an RLO or RLE between them. To support
|
||||
this case, the first_interval var counts the number of rejected codes in
|
||||
the first interval, when it is 0, means that there is only one interval.
|
||||
*/
|
||||
|
||||
/* a. If this new level would be valid, then this embedding code is valid.
|
||||
Remember (push) the current embedding level and override status.
|
||||
Reset current level to this new level, and reset the override status to
|
||||
new_override.
|
||||
b. If the new level would not be valid, then this code is invalid. Don't
|
||||
change the current level or override status.
|
||||
*/
|
||||
#define PUSH_STATUS \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
if LIKELY(new_level <= FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL) \
|
||||
{ \
|
||||
if UNLIKELY(level == FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL - 1) \
|
||||
first_interval = over_pushed; \
|
||||
status_stack[stack_size].level = level; \
|
||||
status_stack[stack_size].override = override; \
|
||||
stack_size++; \
|
||||
level = new_level; \
|
||||
override = new_override; \
|
||||
} else \
|
||||
over_pushed++; \
|
||||
FRIBIDI_END_STMT
|
||||
|
||||
/* If there was a valid matching code, restore (pop) the last remembered
|
||||
(pushed) embedding level and directional override.
|
||||
*/
|
||||
#define POP_STATUS \
|
||||
FRIBIDI_BEGIN_STMT \
|
||||
if (stack_size) \
|
||||
{ \
|
||||
if UNLIKELY(over_pushed > first_interval) \
|
||||
over_pushed--; \
|
||||
else \
|
||||
{ \
|
||||
if LIKELY(over_pushed == first_interval) \
|
||||
first_interval = 0; \
|
||||
stack_size--; \
|
||||
level = status_stack[stack_size].level; \
|
||||
override = status_stack[stack_size].override; \
|
||||
} \
|
||||
} \
|
||||
FRIBIDI_END_STMT
|
||||
|
||||
|
||||
/* Return the type of previous run or the SOR, if already at the start of
|
||||
a level run. */
|
||||
#define PREV_TYPE_OR_SOR(pp) \
|
||||
( \
|
||||
RL_LEVEL(pp->prev) == RL_LEVEL(pp) ? \
|
||||
RL_TYPE(pp->prev) : \
|
||||
FRIBIDI_LEVEL_TO_DIR(MAX(RL_LEVEL(pp->prev), RL_LEVEL(pp))) \
|
||||
)
|
||||
|
||||
/* Return the type of next run or the EOR, if already at the end of
|
||||
a level run. */
|
||||
#define NEXT_TYPE_OR_EOR(pp) \
|
||||
( \
|
||||
RL_LEVEL(pp->next) == RL_LEVEL(pp) ? \
|
||||
RL_TYPE(pp->next) : \
|
||||
FRIBIDI_LEVEL_TO_DIR(MAX(RL_LEVEL(pp->next), RL_LEVEL(pp))) \
|
||||
)
|
||||
|
||||
|
||||
/* Return the embedding direction of a link. */
|
||||
#define FRIBIDI_EMBEDDING_DIRECTION(link) \
|
||||
FRIBIDI_LEVEL_TO_DIR(RL_LEVEL(link))
|
||||
|
||||
|
||||
FRIBIDI_ENTRY FriBidiParType
|
||||
fribidi_get_par_direction (
|
||||
/* input */
|
||||
const FriBidiCharType *bidi_types,
|
||||
const FriBidiStrIndex len
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
fribidi_assert (bidi_types);
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
if (FRIBIDI_IS_LETTER (bidi_types[i]))
|
||||
return FRIBIDI_IS_RTL (bidi_types[i]) ? FRIBIDI_PAR_RTL :
|
||||
FRIBIDI_PAR_LTR;
|
||||
|
||||
return FRIBIDI_PAR_ON;
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY FriBidiLevel
|
||||
fribidi_get_par_embedding_levels (
|
||||
/* input */
|
||||
const FriBidiCharType *bidi_types,
|
||||
const FriBidiStrIndex len,
|
||||
/* input and output */
|
||||
FriBidiParType *pbase_dir,
|
||||
/* output */
|
||||
FriBidiLevel *embedding_levels
|
||||
)
|
||||
{
|
||||
FriBidiLevel base_level, max_level = 0;
|
||||
FriBidiParType base_dir;
|
||||
FriBidiRun *main_run_list = NULL, *explicits_list = NULL, *pp;
|
||||
fribidi_boolean status = false;
|
||||
|
||||
if UNLIKELY
|
||||
(!len)
|
||||
{
|
||||
status = true;
|
||||
goto out;
|
||||
}
|
||||
|
||||
DBG ("in fribidi_get_par_embedding_levels");
|
||||
|
||||
fribidi_assert (bidi_types);
|
||||
fribidi_assert (pbase_dir);
|
||||
fribidi_assert (embedding_levels);
|
||||
|
||||
/* Determinate character types */
|
||||
{
|
||||
/* Get run-length encoded character types */
|
||||
main_run_list = run_list_encode_bidi_types (bidi_types, len);
|
||||
if UNLIKELY
|
||||
(!main_run_list) goto out;
|
||||
}
|
||||
|
||||
/* Find base level */
|
||||
/* If no strong base_dir was found, resort to the weak direction
|
||||
that was passed on input. */
|
||||
base_level = FRIBIDI_DIR_TO_LEVEL (*pbase_dir);
|
||||
if (!FRIBIDI_IS_STRONG (*pbase_dir))
|
||||
/* P2. P3. Search for first strong character and use its direction as
|
||||
base direction */
|
||||
{
|
||||
for_run_list (pp, main_run_list) if (FRIBIDI_IS_LETTER (RL_TYPE (pp)))
|
||||
{
|
||||
base_level = FRIBIDI_DIR_TO_LEVEL (RL_TYPE (pp));
|
||||
*pbase_dir = FRIBIDI_LEVEL_TO_DIR (base_level);
|
||||
break;
|
||||
}
|
||||
}
|
||||
base_dir = FRIBIDI_LEVEL_TO_DIR (base_level);
|
||||
DBG2 (" base level : %c", fribidi_char_from_level (base_level));
|
||||
DBG2 (" base dir : %c", fribidi_char_from_bidi_type (base_dir));
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_types_re (main_run_list);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
/* Explicit Levels and Directions */
|
||||
DBG ("explicit levels and directions");
|
||||
{
|
||||
FriBidiLevel level, new_level;
|
||||
FriBidiCharType override, new_override;
|
||||
FriBidiStrIndex i;
|
||||
int stack_size, over_pushed, first_interval;
|
||||
struct
|
||||
{
|
||||
FriBidiCharType override; /* only LTR, RTL and ON are valid */
|
||||
FriBidiLevel level;
|
||||
} *status_stack;
|
||||
FriBidiRun temp_link;
|
||||
|
||||
/* explicits_list is a list like main_run_list, that holds the explicit
|
||||
codes that are removed from main_run_list, to reinsert them later by
|
||||
calling the shadow_run_list.
|
||||
*/
|
||||
explicits_list = new_run_list ();
|
||||
if UNLIKELY
|
||||
(!explicits_list) goto out;
|
||||
|
||||
/* X1. Begin by setting the current embedding level to the paragraph
|
||||
embedding level. Set the directional override status to neutral.
|
||||
Process each character iteratively, applying rules X2 through X9.
|
||||
Only embedding levels from 0 to 61 are valid in this phase. */
|
||||
|
||||
level = base_level;
|
||||
override = FRIBIDI_TYPE_ON;
|
||||
/* stack */
|
||||
stack_size = 0;
|
||||
over_pushed = 0;
|
||||
first_interval = 0;
|
||||
status_stack = fribidi_malloc (sizeof (status_stack[0]) *
|
||||
FRIBIDI_BIDI_MAX_RESOLVED_LEVELS);
|
||||
|
||||
for_run_list (pp, main_run_list)
|
||||
{
|
||||
FriBidiCharType this_type = RL_TYPE (pp);
|
||||
if (FRIBIDI_IS_EXPLICIT_OR_BN (this_type))
|
||||
{
|
||||
if (FRIBIDI_IS_STRONG (this_type))
|
||||
{ /* LRE, RLE, LRO, RLO */
|
||||
/* 1. Explicit Embeddings */
|
||||
/* X2. With each RLE, compute the least greater odd
|
||||
embedding level. */
|
||||
/* X3. With each LRE, compute the least greater even
|
||||
embedding level. */
|
||||
/* 2. Explicit Overrides */
|
||||
/* X4. With each RLO, compute the least greater odd
|
||||
embedding level. */
|
||||
/* X5. With each LRO, compute the least greater even
|
||||
embedding level. */
|
||||
new_override = FRIBIDI_EXPLICIT_TO_OVERRIDE_DIR (this_type);
|
||||
for (i = RL_LEN (pp); i; i--)
|
||||
{
|
||||
new_level =
|
||||
((level + FRIBIDI_DIR_TO_LEVEL (this_type) + 2) & ~1) -
|
||||
FRIBIDI_DIR_TO_LEVEL (this_type);
|
||||
PUSH_STATUS;
|
||||
}
|
||||
}
|
||||
else if (this_type == FRIBIDI_TYPE_PDF)
|
||||
{
|
||||
/* 3. Terminating Embeddings and overrides */
|
||||
/* X7. With each PDF, determine the matching embedding or
|
||||
override code. */
|
||||
for (i = RL_LEN (pp); i; i--)
|
||||
POP_STATUS;
|
||||
}
|
||||
|
||||
/* X9. Remove all RLE, LRE, RLO, LRO, PDF, and BN codes. */
|
||||
/* Remove element and add it to explicits_list */
|
||||
RL_LEVEL (pp) = FRIBIDI_SENTINEL;
|
||||
temp_link.next = pp->next;
|
||||
move_node_before (pp, explicits_list);
|
||||
pp = &temp_link;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* X6. For all types besides RLE, LRE, RLO, LRO, and PDF:
|
||||
a. Set the level of the current character to the current
|
||||
embedding level.
|
||||
b. Whenever the directional override status is not neutral,
|
||||
reset the current character type to the directional override
|
||||
status. */
|
||||
RL_LEVEL (pp) = level;
|
||||
if (!FRIBIDI_IS_NEUTRAL (override))
|
||||
RL_TYPE (pp) = override;
|
||||
}
|
||||
/* X8. All explicit directional embeddings and overrides are
|
||||
completely terminated at the end of each paragraph. Paragraph
|
||||
separators are not included in the embedding. */
|
||||
/* This function is running on a single paragraph, so we can do
|
||||
X8 after all the input is processed. */
|
||||
}
|
||||
|
||||
/* Implementing X8. It has no effect on a single paragraph! */
|
||||
level = base_level;
|
||||
override = FRIBIDI_TYPE_ON;
|
||||
stack_size = 0;
|
||||
over_pushed = 0;
|
||||
|
||||
fribidi_free (status_stack);
|
||||
}
|
||||
/* X10. The remaining rules are applied to each run of characters at the
|
||||
same level. For each run, determine the start-of-level-run (sor) and
|
||||
end-of-level-run (eor) type, either L or R. This depends on the
|
||||
higher of the two levels on either side of the boundary (at the start
|
||||
or end of the paragraph, the level of the 'other' run is the base
|
||||
embedding level). If the higher level is odd, the type is R, otherwise
|
||||
it is L. */
|
||||
/* Resolving Implicit Levels can be done out of X10 loop, so only change
|
||||
of Resolving Weak Types and Resolving Neutral Types is needed. */
|
||||
|
||||
compact_list (main_run_list);
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_types_re (main_run_list);
|
||||
print_bidi_string (bidi_types, len);
|
||||
print_resolved_levels (main_run_list);
|
||||
print_resolved_types (main_run_list);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
/* 4. Resolving weak types */
|
||||
DBG ("resolving weak types");
|
||||
{
|
||||
FriBidiCharType last_strong, prev_type_orig;
|
||||
fribidi_boolean w4;
|
||||
|
||||
last_strong = base_dir;
|
||||
|
||||
for_run_list (pp, main_run_list)
|
||||
{
|
||||
register FriBidiCharType prev_type, this_type, next_type;
|
||||
|
||||
prev_type = PREV_TYPE_OR_SOR (pp);
|
||||
this_type = RL_TYPE (pp);
|
||||
next_type = NEXT_TYPE_OR_EOR (pp);
|
||||
|
||||
if (FRIBIDI_IS_STRONG (prev_type))
|
||||
last_strong = prev_type;
|
||||
|
||||
/* W1. NSM
|
||||
Examine each non-spacing mark (NSM) in the level run, and change the
|
||||
type of the NSM to the type of the previous character. If the NSM
|
||||
is at the start of the level run, it will get the type of sor. */
|
||||
/* Implementation note: it is important that if the previous character
|
||||
is not sor, then we should merge this run with the previous,
|
||||
because of rules like W5, that we assume all of a sequence of
|
||||
adjacent ETs are in one FriBidiRun. */
|
||||
if (this_type == FRIBIDI_TYPE_NSM)
|
||||
{
|
||||
if (RL_LEVEL (pp->prev) == RL_LEVEL (pp))
|
||||
pp = merge_with_prev (pp);
|
||||
else
|
||||
RL_TYPE (pp) = prev_type;
|
||||
continue; /* As we know the next condition cannot be true. */
|
||||
}
|
||||
|
||||
/* W2: European numbers. */
|
||||
if (this_type == FRIBIDI_TYPE_EN && last_strong == FRIBIDI_TYPE_AL)
|
||||
{
|
||||
RL_TYPE (pp) = FRIBIDI_TYPE_AN;
|
||||
|
||||
/* Resolving dependency of loops for rules W1 and W2, so we
|
||||
can merge them in one loop. */
|
||||
if (next_type == FRIBIDI_TYPE_NSM)
|
||||
RL_TYPE (pp->next) = FRIBIDI_TYPE_AN;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
last_strong = base_dir;
|
||||
/* Resolving dependency of loops for rules W4 and W5, W5 may
|
||||
want to prevent W4 to take effect in the next turn, do this
|
||||
through "w4". */
|
||||
w4 = true;
|
||||
/* Resolving dependency of loops for rules W4 and W5 with W7,
|
||||
W7 may change an EN to L but it sets the prev_type_orig if needed,
|
||||
so W4 and W5 in next turn can still do their works. */
|
||||
prev_type_orig = FRIBIDI_TYPE_ON;
|
||||
|
||||
for_run_list (pp, main_run_list)
|
||||
{
|
||||
register FriBidiCharType prev_type, this_type, next_type;
|
||||
|
||||
prev_type = PREV_TYPE_OR_SOR (pp);
|
||||
this_type = RL_TYPE (pp);
|
||||
next_type = NEXT_TYPE_OR_EOR (pp);
|
||||
|
||||
if (FRIBIDI_IS_STRONG (prev_type))
|
||||
last_strong = prev_type;
|
||||
|
||||
/* W3: Change ALs to R. */
|
||||
if (this_type == FRIBIDI_TYPE_AL)
|
||||
{
|
||||
RL_TYPE (pp) = FRIBIDI_TYPE_RTL;
|
||||
w4 = true;
|
||||
prev_type_orig = FRIBIDI_TYPE_ON;
|
||||
continue;
|
||||
}
|
||||
|
||||
/* W4. A single european separator changes to a european number.
|
||||
A single common separator between two numbers of the same type
|
||||
changes to that type. */
|
||||
if (w4
|
||||
&& RL_LEN (pp) == 1 && FRIBIDI_IS_ES_OR_CS (this_type)
|
||||
&& FRIBIDI_IS_NUMBER (prev_type_orig)
|
||||
&& prev_type_orig == next_type
|
||||
&& (prev_type_orig == FRIBIDI_TYPE_EN
|
||||
|| this_type == FRIBIDI_TYPE_CS))
|
||||
{
|
||||
RL_TYPE (pp) = prev_type;
|
||||
this_type = RL_TYPE (pp);
|
||||
}
|
||||
w4 = true;
|
||||
|
||||
/* W5. A sequence of European terminators adjacent to European
|
||||
numbers changes to All European numbers. */
|
||||
if (this_type == FRIBIDI_TYPE_ET
|
||||
&& (prev_type_orig == FRIBIDI_TYPE_EN
|
||||
|| next_type == FRIBIDI_TYPE_EN))
|
||||
{
|
||||
RL_TYPE (pp) = FRIBIDI_TYPE_EN;
|
||||
w4 = false;
|
||||
this_type = RL_TYPE (pp);
|
||||
}
|
||||
|
||||
/* W6. Otherwise change separators and terminators to other neutral. */
|
||||
if (FRIBIDI_IS_NUMBER_SEPARATOR_OR_TERMINATOR (this_type))
|
||||
RL_TYPE (pp) = FRIBIDI_TYPE_ON;
|
||||
|
||||
/* W7. Change european numbers to L. */
|
||||
if (this_type == FRIBIDI_TYPE_EN && last_strong == FRIBIDI_TYPE_LTR)
|
||||
{
|
||||
RL_TYPE (pp) = FRIBIDI_TYPE_LTR;
|
||||
prev_type_orig = (RL_LEVEL (pp) == RL_LEVEL (pp->next) ?
|
||||
FRIBIDI_TYPE_EN : FRIBIDI_TYPE_ON);
|
||||
}
|
||||
else
|
||||
prev_type_orig = PREV_TYPE_OR_SOR (pp->next);
|
||||
}
|
||||
}
|
||||
|
||||
compact_neutrals (main_run_list);
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_resolved_levels (main_run_list);
|
||||
print_resolved_types (main_run_list);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
/* 5. Resolving Neutral Types */
|
||||
DBG ("resolving neutral types");
|
||||
{
|
||||
/* N1. and N2.
|
||||
For each neutral, resolve it. */
|
||||
for_run_list (pp, main_run_list)
|
||||
{
|
||||
FriBidiCharType prev_type, this_type, next_type;
|
||||
|
||||
/* "European and Arabic numbers are treated as though they were R"
|
||||
FRIBIDI_CHANGE_NUMBER_TO_RTL does this. */
|
||||
this_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (RL_TYPE (pp));
|
||||
prev_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (PREV_TYPE_OR_SOR (pp));
|
||||
next_type = FRIBIDI_CHANGE_NUMBER_TO_RTL (NEXT_TYPE_OR_EOR (pp));
|
||||
|
||||
if (FRIBIDI_IS_NEUTRAL (this_type))
|
||||
RL_TYPE (pp) = (prev_type == next_type) ?
|
||||
/* N1. */ prev_type :
|
||||
/* N2. */ FRIBIDI_EMBEDDING_DIRECTION (pp);
|
||||
}
|
||||
}
|
||||
|
||||
compact_list (main_run_list);
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_resolved_levels (main_run_list);
|
||||
print_resolved_types (main_run_list);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
/* 6. Resolving implicit levels */
|
||||
DBG ("resolving implicit levels");
|
||||
{
|
||||
max_level = base_level;
|
||||
|
||||
for_run_list (pp, main_run_list)
|
||||
{
|
||||
FriBidiCharType this_type;
|
||||
int level;
|
||||
|
||||
this_type = RL_TYPE (pp);
|
||||
level = RL_LEVEL (pp);
|
||||
|
||||
/* I1. Even */
|
||||
/* I2. Odd */
|
||||
if (FRIBIDI_IS_NUMBER (this_type))
|
||||
RL_LEVEL (pp) = (level + 2) & ~1;
|
||||
else
|
||||
RL_LEVEL (pp) =
|
||||
level +
|
||||
(FRIBIDI_LEVEL_IS_RTL (level) ^ FRIBIDI_DIR_TO_LEVEL (this_type));
|
||||
|
||||
if (RL_LEVEL (pp) > max_level)
|
||||
max_level = RL_LEVEL (pp);
|
||||
}
|
||||
}
|
||||
|
||||
compact_list (main_run_list);
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_bidi_string (bidi_types, len);
|
||||
print_resolved_levels (main_run_list);
|
||||
print_resolved_types (main_run_list);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
/* Reinsert the explicit codes & BN's that are already removed, from the
|
||||
explicits_list to main_run_list. */
|
||||
DBG ("reinserting explicit codes");
|
||||
if UNLIKELY
|
||||
(explicits_list->next != explicits_list)
|
||||
{
|
||||
register FriBidiRun *p;
|
||||
register fribidi_boolean stat =
|
||||
shadow_run_list (main_run_list, explicits_list, true);
|
||||
explicits_list = NULL;
|
||||
if UNLIKELY
|
||||
(!stat) goto out;
|
||||
|
||||
/* Set level of inserted explicit chars to that of their previous
|
||||
* char, such that they do not affect reordering. */
|
||||
p = main_run_list->next;
|
||||
if (p != main_run_list && p->level == FRIBIDI_SENTINEL)
|
||||
p->level = base_level;
|
||||
for_run_list (p, main_run_list) if (p->level == FRIBIDI_SENTINEL)
|
||||
p->level = p->prev->level;
|
||||
}
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_types_re (main_run_list);
|
||||
print_resolved_levels (main_run_list);
|
||||
print_resolved_types (main_run_list);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
DBG ("reset the embedding levels, 1, 2, 3.");
|
||||
{
|
||||
register int j, state, pos;
|
||||
register FriBidiCharType char_type;
|
||||
register FriBidiRun *p, *q, *list;
|
||||
|
||||
/* L1. Reset the embedding levels of some chars:
|
||||
1. segment separators,
|
||||
2. paragraph separators,
|
||||
3. any sequence of whitespace characters preceding a segment
|
||||
separator or paragraph separator, and
|
||||
... (to be continued in fribidi_reorder_line()). */
|
||||
list = new_run_list ();
|
||||
if UNLIKELY
|
||||
(!list) goto out;
|
||||
q = list;
|
||||
state = 1;
|
||||
pos = len - 1;
|
||||
for (j = len - 1; j >= -1; j--)
|
||||
{
|
||||
/* close up the open link at the end */
|
||||
if (j >= 0)
|
||||
char_type = bidi_types[j];
|
||||
else
|
||||
char_type = FRIBIDI_TYPE_ON;
|
||||
if (!state && FRIBIDI_IS_SEPARATOR (char_type))
|
||||
{
|
||||
state = 1;
|
||||
pos = j;
|
||||
}
|
||||
else if (state && !FRIBIDI_IS_EXPLICIT_OR_SEPARATOR_OR_BN_OR_WS
|
||||
(char_type))
|
||||
{
|
||||
state = 0;
|
||||
p = new_run ();
|
||||
if UNLIKELY
|
||||
(!p)
|
||||
{
|
||||
free_run_list (list);
|
||||
goto out;
|
||||
}
|
||||
p->pos = j + 1;
|
||||
p->len = pos - j;
|
||||
p->type = base_dir;
|
||||
p->level = base_level;
|
||||
move_node_before (p, q);
|
||||
q = p;
|
||||
}
|
||||
}
|
||||
if UNLIKELY
|
||||
(!shadow_run_list (main_run_list, list, false)) goto out;
|
||||
}
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_types_re (main_run_list);
|
||||
print_resolved_levels (main_run_list);
|
||||
print_resolved_types (main_run_list);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
{
|
||||
FriBidiStrIndex pos = 0;
|
||||
for_run_list (pp, main_run_list)
|
||||
{
|
||||
register FriBidiStrIndex l;
|
||||
register FriBidiLevel level = pp->level;
|
||||
for (l = pp->len; l; l--)
|
||||
embedding_levels[pos++] = level;
|
||||
}
|
||||
}
|
||||
|
||||
status = true;
|
||||
|
||||
out:
|
||||
DBG ("leaving fribidi_get_par_embedding_levels");
|
||||
|
||||
if (main_run_list)
|
||||
free_run_list (main_run_list);
|
||||
if UNLIKELY
|
||||
(explicits_list) free_run_list (explicits_list);
|
||||
|
||||
return status ? max_level + 1 : 0;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
bidi_string_reverse (
|
||||
FriBidiChar *str,
|
||||
const FriBidiStrIndex len
|
||||
)
|
||||
{
|
||||
FriBidiStrIndex i;
|
||||
|
||||
fribidi_assert (str);
|
||||
|
||||
for (i = 0; i < len / 2; i++)
|
||||
{
|
||||
FriBidiChar tmp = str[i];
|
||||
str[i] = str[len - 1 - i];
|
||||
str[len - 1 - i] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
index_array_reverse (
|
||||
FriBidiStrIndex *arr,
|
||||
const FriBidiStrIndex len
|
||||
)
|
||||
{
|
||||
FriBidiStrIndex i;
|
||||
|
||||
fribidi_assert (arr);
|
||||
|
||||
for (i = 0; i < len / 2; i++)
|
||||
{
|
||||
FriBidiStrIndex tmp = arr[i];
|
||||
arr[i] = arr[len - 1 - i];
|
||||
arr[len - 1 - i] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
FRIBIDI_ENTRY FriBidiLevel
|
||||
fribidi_reorder_line (
|
||||
/* input */
|
||||
FriBidiFlags flags, /* reorder flags */
|
||||
const FriBidiCharType *bidi_types,
|
||||
const FriBidiStrIndex len,
|
||||
const FriBidiStrIndex off,
|
||||
const FriBidiParType base_dir,
|
||||
/* input and output */
|
||||
FriBidiLevel *embedding_levels,
|
||||
FriBidiChar *visual_str,
|
||||
/* output */
|
||||
FriBidiStrIndex *map
|
||||
)
|
||||
{
|
||||
fribidi_boolean status = false;
|
||||
FriBidiLevel max_level = 0;
|
||||
|
||||
if UNLIKELY
|
||||
(len == 0)
|
||||
{
|
||||
status = true;
|
||||
goto out;
|
||||
}
|
||||
|
||||
DBG ("in fribidi_reorder_line");
|
||||
|
||||
fribidi_assert (bidi_types);
|
||||
fribidi_assert (embedding_levels);
|
||||
|
||||
DBG ("reset the embedding levels, 4. whitespace at the end of line");
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
/* L1. Reset the embedding levels of some chars:
|
||||
4. any sequence of white space characters at the end of the line. */
|
||||
for (i = off + len - 1; i >= off &&
|
||||
FRIBIDI_IS_EXPLICIT_OR_BN_OR_WS (bidi_types[i]); i--)
|
||||
embedding_levels[i] = FRIBIDI_DIR_TO_LEVEL (base_dir);
|
||||
}
|
||||
|
||||
/* 7. Reordering resolved levels */
|
||||
{
|
||||
register FriBidiLevel level;
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
/* Reorder both the outstring and the order array */
|
||||
{
|
||||
if (FRIBIDI_TEST_BITS (flags, FRIBIDI_FLAG_REORDER_NSM))
|
||||
{
|
||||
/* L3. Reorder NSMs. */
|
||||
for (i = off + len - 1; i >= off; i--)
|
||||
if (FRIBIDI_LEVEL_IS_RTL (embedding_levels[i])
|
||||
&& bidi_types[i] == FRIBIDI_TYPE_NSM)
|
||||
{
|
||||
register FriBidiStrIndex seq_end = i;
|
||||
level = embedding_levels[i];
|
||||
|
||||
for (i--; i >= off &&
|
||||
FRIBIDI_IS_EXPLICIT_OR_BN_OR_NSM (bidi_types[i])
|
||||
&& embedding_levels[i] == level; i--)
|
||||
;
|
||||
|
||||
if (i < off || embedding_levels[i] != level)
|
||||
{
|
||||
i++;
|
||||
DBG ("warning: NSM(s) at the beggining of level run");
|
||||
}
|
||||
|
||||
if (visual_str)
|
||||
{
|
||||
bidi_string_reverse (visual_str + i, seq_end - i + 1);
|
||||
}
|
||||
if (map)
|
||||
{
|
||||
index_array_reverse (map + i, seq_end - i + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Find max_level of the line. We don't reuse the paragraph
|
||||
* max_level, both for a cleaner API, and that the line max_level
|
||||
* may be far less than paragraph max_level. */
|
||||
for (i = off + len - 1; i >= off; i--)
|
||||
if (embedding_levels[i] > max_level)
|
||||
max_level = embedding_levels[i];
|
||||
|
||||
/* L2. Reorder. */
|
||||
for (level = max_level; level > 0; level--)
|
||||
for (i = off + len - 1; i >= off; i--)
|
||||
if (embedding_levels[i] >= level)
|
||||
{
|
||||
/* Find all stretches that are >= level_idx */
|
||||
register FriBidiStrIndex seq_end = i;
|
||||
for (i--; i >= off && embedding_levels[i] >= level; i--)
|
||||
;
|
||||
|
||||
if (visual_str)
|
||||
bidi_string_reverse (visual_str + i + 1, seq_end - i);
|
||||
if (map)
|
||||
index_array_reverse (map + i + 1, seq_end - i);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
status = true;
|
||||
|
||||
out:
|
||||
|
||||
return status ? max_level + 1 : 0;
|
||||
}
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,149 @@
|
||||
/* FriBidi
|
||||
* fribidi-bidi.h - bidirectional algorithm
|
||||
*
|
||||
* $Id: fribidi-bidi.h,v 1.15 2005/11/03 01:39:01 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2005/11/03 01:39:01 $
|
||||
* $Revision: 1.15 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-bidi.h,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
* Dov Grobgeld, 1999, 2000
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
* Copyright (C) 1999,2000 Dov Grobgeld
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_BIDI_H
|
||||
#define _FRIBIDI_BIDI_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
#include "fribidi-flags.h"
|
||||
#include "fribidi-bidi-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
#define fribidi_get_par_embedding_levels FRIBIDI_NAMESPACE(get_par_embedding_levels)
|
||||
/* fribidi_get_par_direction - get base paragraph direction
|
||||
*
|
||||
* This function finds the base direction of a single paragraph,
|
||||
* as defined by rule P2 of the Unicode Bidirectional Algorithm available at
|
||||
* http://www.unicode.org/reports/tr9/#P2.
|
||||
*
|
||||
* You typically do not need this function as
|
||||
* fribidi_get_par_embedding_levels() knows how to compute base direction
|
||||
* itself, but you may need this to implement a more sophisticated paragraph
|
||||
* direction handling. Note that you can pass more than a paragraph to this
|
||||
* function and the direction of the first non-neutral paragraph is returned,
|
||||
* which is a very good heuristic to set direction of the neutral paragraphs
|
||||
* at the beginning of text. For other neutral paragraphs, you better use the
|
||||
* direction of the previous paragraph.
|
||||
*
|
||||
* Returns: Base pargraph direction. No weak paragraph direction is returned,
|
||||
* only LTR, RTL, or ON.
|
||||
*/
|
||||
FRIBIDI_ENTRY FriBidiParType fribidi_get_par_direction (
|
||||
const FriBidiCharType *bidi_types, /* input list of bidi types as returned by
|
||||
fribidi_get_bidi_types() */
|
||||
const FriBidiStrIndex len /* input string length */
|
||||
);
|
||||
|
||||
#define fribidi_get_par_embedding_levels FRIBIDI_NAMESPACE(get_par_embedding_levels)
|
||||
/* fribidi_get_par_embedding_levels - get bidi embedding levels of a paragraph
|
||||
*
|
||||
* This function finds the bidi embedding levels of a single paragraph,
|
||||
* as defined by the Unicode Bidirectional Algorithm available at
|
||||
* http://www.unicode.org/reports/tr9/. This function implements rules P2 to
|
||||
* I1 inclusive, and parts 1 to 3 of L1, except for rule X9 which is
|
||||
* implemented in fribidi_remove_bidi_marks(). Part 4 of L1 is implemented
|
||||
* in fribidi_reorder_line().
|
||||
*
|
||||
* There are a few macros defined in fribidi-bidi-types.h to work with this
|
||||
* embedding levels.
|
||||
*
|
||||
* Returns: Maximum level found plus one, or zero if any error occured
|
||||
* (memory allocation failure most probably).
|
||||
*/
|
||||
FRIBIDI_ENTRY FriBidiLevel
|
||||
fribidi_get_par_embedding_levels (
|
||||
const FriBidiCharType *bidi_types, /* input list of bidi types as returned by
|
||||
fribidi_get_bidi_types() */
|
||||
const FriBidiStrIndex len, /* input string length of the paragraph */
|
||||
FriBidiParType *pbase_dir, /* requested and resolved paragraph
|
||||
* base direction */
|
||||
FriBidiLevel *embedding_levels /* output list of embedding levels */
|
||||
) FRIBIDI_GNUC_WARN_UNUSED;
|
||||
|
||||
#define fribidi_reorder_line FRIBIDI_NAMESPACE(reorder_line)
|
||||
/* fribidi_reorder_line - reorder a line of logical string to visual
|
||||
*
|
||||
* This function reorders the characters in a line of text from logical to
|
||||
* final visual order. This function implements part 4 of rule L1, and rules
|
||||
* L2 and L3 of the Unicode Bidirectional Algorithm available at
|
||||
* http://www.unicode.org/reports/tr9/#Reordering_Resolved_Levels.
|
||||
*
|
||||
* As a side effect it also sets position maps if not NULL.
|
||||
*
|
||||
* You should provide the resolved paragraph direction and embedding levels as
|
||||
* set by fribidi_get_par_embedding_levels(). Also note that the embedding
|
||||
* levels may change a bit. To be exact, the embedding level of any sequence
|
||||
* of white space at the end of line is reset to the paragraph embedding level
|
||||
* (That is part 4 of rule L1).
|
||||
*
|
||||
* Note that the bidi types and embedding levels are not reordered. You can
|
||||
* reorder these (or any other) arrays using the map later. The user is
|
||||
* responsible to initialize map to something sensible, like an identity
|
||||
* mapping, or pass NULL if no map is needed.
|
||||
*
|
||||
* There is an optional part to this function, which is whether non-spacing
|
||||
* marks for right-to-left parts of the text should be reordered to come after
|
||||
* their base characters in the visual string or not. Most rendering engines
|
||||
* expect this behavior, but console-based systems for example do not like it.
|
||||
* This is controlled by the FRIBIDI_FLAG_REORDER_NSM flag. The flag is on
|
||||
* in FRIBIDI_FLAGS_DEFAULT.
|
||||
*
|
||||
* Returns: Maximum level found in this line plus one, or zero if any error
|
||||
* occured (memory allocation failure most probably).
|
||||
*/
|
||||
FRIBIDI_ENTRY FriBidiLevel fribidi_reorder_line (
|
||||
FriBidiFlags flags, /* reorder flags */
|
||||
const FriBidiCharType *bidi_types, /* input list of bidi types as returned by
|
||||
fribidi_get_bidi_types() */
|
||||
const FriBidiStrIndex len, /* input length of the line */
|
||||
const FriBidiStrIndex off, /* input offset of the beginning of the line
|
||||
in the paragraph */
|
||||
const FriBidiParType base_dir, /* resolved paragraph base direction */
|
||||
FriBidiLevel *embedding_levels, /* input list of embedding levels,
|
||||
as returned by
|
||||
fribidi_get_par_embedding_levels */
|
||||
FriBidiChar *visual_str, /* visual string to reorder */
|
||||
FriBidiStrIndex *map /* a map of string indices which is reordered
|
||||
* to reflect where each glyph ends up. */
|
||||
) FRIBIDI_GNUC_WARN_UNUSED;
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_BIDI_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,130 @@
|
||||
/* FriBidi
|
||||
* fribidi-common.h - common include for library headers
|
||||
*
|
||||
* $Id: fribidi-common.h,v 1.13 2007/04/05 16:13:24 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2007/04/05 16:13:24 $
|
||||
* $Revision: 1.13 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-common.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_COMMON_H
|
||||
#define _FRIBIDI_COMMON_H
|
||||
|
||||
#if DONT_HAVE_FRIBIDI_CONFIG_H+0
|
||||
# define FRIBIDI "fribidi"
|
||||
# define FRIBIDI_NAME "fribidi"
|
||||
# define FRIBIDI_VERSION "unknown"
|
||||
# define FRIBIDI_BUGREPORT "unknown"
|
||||
# define FRIBIDI_INTERFACE_VERSION_STRING "unknown"
|
||||
#else /* !DONT_HAVE_FRIBIDI_CONFIG_H */
|
||||
# include "fribidi-config.h"
|
||||
#endif /* !DONT_HAVE_FRIBIDI_CONFIG_H */
|
||||
|
||||
#if HAVE_FRIBIDI_CUSTOM_H+0
|
||||
# include <fribidi-custom.h>
|
||||
#endif /* HAVE_FRIBIDI_CUSTOM_H */
|
||||
|
||||
/* FRIBIDI_NAMESPACE is a macro used to name library symbols. */
|
||||
#ifndef FRIBIDI_NAMESPACE
|
||||
# define FRIBIDI_NAMESPACE(SYMBOL) fribidi##_##SYMBOL
|
||||
#endif /* !FRIBIDI_NAMESPACE */
|
||||
|
||||
/* FRIBIDI_ENTRY is a macro used to declare library entry points. */
|
||||
#ifndef FRIBIDI_ENTRY
|
||||
# if (defined(WIN32)) || (defined(_WIN32_WCE))
|
||||
# define FRIBIDI_ENTRY __declspec(dllimport)
|
||||
# else /* !WIN32 */
|
||||
# define FRIBIDI_ENTRY /* empty */
|
||||
# endif /* !WIN32 */
|
||||
#endif /* !FRIBIDI_ENTRY */
|
||||
|
||||
#if FRIBIDI_USE_GLIB+0
|
||||
# ifndef __FRIBIDI_DOC
|
||||
# include <glib/gmacros.h>
|
||||
# endif /* !__FRIBIDI_DOC */
|
||||
# define FRIBIDI_BEGIN_DECLS G_BEGIN_DECLS
|
||||
# define FRIBIDI_END_DECLS G_END_DECLS
|
||||
# define FRIBIDI_GNUC_CONST G_GNUC_CONST
|
||||
# define FRIBIDI_GNUC_DEPRECATED G_GNUC_DEPRECATED
|
||||
# if __GNUC__ > 2
|
||||
# define FRIBIDI_GNUC_WARN_UNUSED \
|
||||
__attribute__((__warn_unused_result__))
|
||||
# define FRIBIDI_GNUC_MALLOC \
|
||||
__attribute__((__malloc__))
|
||||
# define FRIBIDI_GNUC_HIDDEN \
|
||||
__attribute__((__visibility__ ("hidden")))
|
||||
# else /* __GNUC__ <= 2 */
|
||||
# define FRIBIDI_GNUC_WARN_UNUSED
|
||||
# define FRIBIDI_GNUC_MALLOC
|
||||
# define FRIBIDI_GNUC_HIDDEN
|
||||
# endif /* __GNUC__ <= 2 */
|
||||
#else /* !FRIBIDI_USE_GLIB */
|
||||
# define FRIBIDI_GNUC_CONST
|
||||
# define FRIBIDI_GNUC_DEPRECATED
|
||||
# define FRIBIDI_GNUC_WARN_UNUSED
|
||||
# define FRIBIDI_GNUC_MALLOC
|
||||
# define FRIBIDI_GNUC_HIDDEN
|
||||
#endif /* !FRIBIDI_USE_GLIB */
|
||||
|
||||
/* FRIBIDI_BEGIN_DECLS should be used at the beginning of your declarations,
|
||||
* so that C++ compilers don't mangle their names. Use FRIBIDI_END_DECLS at
|
||||
* the end of C declarations. */
|
||||
#ifndef FRIBIDI_BEGIN_DECLS
|
||||
# ifdef __cplusplus
|
||||
# define FRIBIDI_BEGIN_DECLS extern "C" {
|
||||
# define FRIBIDI_END_DECLS }
|
||||
# else /* !__cplusplus */
|
||||
# define FRIBIDI_BEGIN_DECLS /* empty */
|
||||
# define FRIBIDI_END_DECLS /* empty */
|
||||
# endif /* !__cplusplus */
|
||||
#endif /* !FRIBIDI_BEGIN_DECLS */
|
||||
|
||||
|
||||
|
||||
|
||||
#define fribidi_debug_status FRIBIDI_NAMESPACE(debug_status)
|
||||
FRIBIDI_ENTRY int fribidi_debug_status (
|
||||
void
|
||||
);
|
||||
#define fribidi_set_debug FRIBIDI_NAMESPACE(set_debug)
|
||||
FRIBIDI_ENTRY int
|
||||
fribidi_set_debug (
|
||||
int state /* new state to set */
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif /* !_FRIBIDI_COMMON_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,26 @@
|
||||
/* lib/fribidi-config.h. Generated from fribidi-config.h.in by configure. */
|
||||
/* Not copyrighted, in public domain. */
|
||||
#ifndef FRIBIDI_CONFIG_H
|
||||
#define FRIBIDI_CONFIG_H
|
||||
|
||||
#define FRIBIDI "fribidi"
|
||||
#define FRIBIDI_NAME "GNU FriBidi"
|
||||
#define FRIBIDI_BUGREPORT "http://fribidi.org/bug"
|
||||
|
||||
#define FRIBIDI_VERSION "0.19.2"
|
||||
#define FRIBIDI_MAJOR_VERSION 0
|
||||
#define FRIBIDI_MINOR_VERSION 19
|
||||
#define FRIBIDI_MICRO_VERSION 2
|
||||
#define FRIBIDI_INTERFACE_VERSION 3
|
||||
#define FRIBIDI_INTERFACE_VERSION_STRING "3"
|
||||
|
||||
/* Define to 1 if you want charset conversion codes in the library */
|
||||
#define FRIBIDI_CHARSETS 0
|
||||
|
||||
/* Define to 1 if you want to use glib */
|
||||
#define FRIBIDI_USE_GLIB 0
|
||||
|
||||
/* The size of a `int', as computed by sizeof. */
|
||||
#define FRIBIDI_SIZEOF_INT 4
|
||||
|
||||
#endif /* FRIBIDI_CONFIG_H */
|
||||
@@ -0,0 +1,26 @@
|
||||
/* @configure_input@ */
|
||||
/* Not copyrighted, in public domain. */
|
||||
#ifndef FRIBIDI_CONFIG_H
|
||||
#define FRIBIDI_CONFIG_H
|
||||
|
||||
#define FRIBIDI "@PACKAGE@"
|
||||
#define FRIBIDI_NAME "@PACKAGE_NAME@"
|
||||
#define FRIBIDI_BUGREPORT "@PACKAGE_BUGREPORT@"
|
||||
|
||||
#define FRIBIDI_VERSION "@FRIBIDI_VERSION@"
|
||||
#define FRIBIDI_MAJOR_VERSION @FRIBIDI_MAJOR_VERSION@
|
||||
#define FRIBIDI_MINOR_VERSION @FRIBIDI_MINOR_VERSION@
|
||||
#define FRIBIDI_MICRO_VERSION @FRIBIDI_MICRO_VERSION@
|
||||
#define FRIBIDI_INTERFACE_VERSION @FRIBIDI_INTERFACE_VERSION@
|
||||
#define FRIBIDI_INTERFACE_VERSION_STRING "@FRIBIDI_INTERFACE_VERSION@"
|
||||
|
||||
/* Define to 1 if you want charset conversion codes in the library */
|
||||
#define FRIBIDI_CHARSETS @FRIBIDI_CHARSETS@
|
||||
|
||||
/* Define to 1 if you want to use glib */
|
||||
#define FRIBIDI_USE_GLIB @FRIBIDI_USE_GLIB@
|
||||
|
||||
/* The size of a `int', as computed by sizeof. */
|
||||
#define FRIBIDI_SIZEOF_INT @SIZEOF_INT@
|
||||
|
||||
#endif /* FRIBIDI_CONFIG_H */
|
||||
@@ -0,0 +1,314 @@
|
||||
/* FriBidi
|
||||
* fribidi-deprecated.c - deprecated interfaces.
|
||||
*
|
||||
* $Id: fribidi-deprecated.c,v 1.6 2006/06/01 22:53:55 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/06/01 22:53:55 $
|
||||
* $Revision: 1.6 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-deprecated.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
* Dov Grobgeld, 1999, 2000
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
* Copyright (C) 1999,2000 Dov Grobgeld
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#undef FRIBIDI_NO_DEPRECATED
|
||||
|
||||
#include <fribidi-deprecated.h>
|
||||
#include <fribidi.h>
|
||||
|
||||
#if FRIBIDI_NO_DEPRECATED+0
|
||||
#else
|
||||
|
||||
static FriBidiFlags flags = FRIBIDI_FLAGS_DEFAULT | FRIBIDI_FLAGS_ARABIC;
|
||||
|
||||
FRIBIDI_ENTRY fribidi_boolean
|
||||
fribidi_set_mirroring (
|
||||
/* input */
|
||||
fribidi_boolean state
|
||||
)
|
||||
{
|
||||
return FRIBIDI_ADJUST_AND_TEST_BITS (flags, FRIBIDI_FLAG_SHAPE_MIRRORING, state);
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY fribidi_boolean
|
||||
fribidi_mirroring_status (
|
||||
void
|
||||
)
|
||||
{
|
||||
return FRIBIDI_TEST_BITS (flags, FRIBIDI_FLAG_SHAPE_MIRRORING);
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY fribidi_boolean
|
||||
fribidi_set_reorder_nsm (
|
||||
/* input */
|
||||
fribidi_boolean state
|
||||
)
|
||||
{
|
||||
return FRIBIDI_ADJUST_AND_TEST_BITS (flags, FRIBIDI_FLAG_REORDER_NSM, state);
|
||||
}
|
||||
|
||||
fribidi_boolean
|
||||
fribidi_reorder_nsm_status (
|
||||
void
|
||||
)
|
||||
{
|
||||
return FRIBIDI_TEST_BITS (flags, FRIBIDI_FLAG_REORDER_NSM);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
FRIBIDI_ENTRY FriBidiLevel
|
||||
fribidi_log2vis_get_embedding_levels (
|
||||
const FriBidiCharType *bidi_types, /* input list of bidi types as returned by
|
||||
fribidi_get_bidi_types() */
|
||||
const FriBidiStrIndex len, /* input string length of the paragraph */
|
||||
FriBidiParType *pbase_dir, /* requested and resolved paragraph
|
||||
* base direction */
|
||||
FriBidiLevel *embedding_levels /* output list of embedding levels */
|
||||
)
|
||||
{
|
||||
return fribidi_get_par_embedding_levels (bidi_types, len, pbase_dir, embedding_levels);
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY FriBidiCharType
|
||||
fribidi_get_type (
|
||||
FriBidiChar ch /* input character */
|
||||
)
|
||||
{
|
||||
return fribidi_get_bidi_type (ch);
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY FriBidiCharType
|
||||
fribidi_get_type_internal (
|
||||
FriBidiChar ch /* input character */
|
||||
)
|
||||
{
|
||||
return fribidi_get_bidi_type (ch);
|
||||
}
|
||||
|
||||
|
||||
|
||||
FRIBIDI_ENTRY FriBidiStrIndex
|
||||
fribidi_remove_bidi_marks (
|
||||
FriBidiChar *str,
|
||||
const FriBidiStrIndex len,
|
||||
FriBidiStrIndex *positions_to_this,
|
||||
FriBidiStrIndex *position_from_this_list,
|
||||
FriBidiLevel *embedding_levels
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i, j = 0;
|
||||
fribidi_boolean private_from_this = false;
|
||||
fribidi_boolean status = false;
|
||||
|
||||
if UNLIKELY
|
||||
(len == 0)
|
||||
{
|
||||
status = true;
|
||||
goto out;
|
||||
}
|
||||
|
||||
DBG ("in fribidi_remove_bidi_marks");
|
||||
|
||||
fribidi_assert (str);
|
||||
|
||||
/* If to_this is not NULL, we must have from_this as well. If it is
|
||||
not given by the caller, we have to make a private instance of it. */
|
||||
if (positions_to_this && !position_from_this_list)
|
||||
{
|
||||
position_from_this_list = fribidi_malloc (sizeof
|
||||
(position_from_this_list[0]) *
|
||||
len);
|
||||
if UNLIKELY
|
||||
(!position_from_this_list) goto out;
|
||||
private_from_this = true;
|
||||
for (i = 0; i < len; i++)
|
||||
position_from_this_list[positions_to_this[i]] = i;
|
||||
}
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
if (!FRIBIDI_IS_EXPLICIT_OR_BN (fribidi_get_bidi_type (str[i]))
|
||||
&& str[i] != FRIBIDI_CHAR_LRM && str[i] != FRIBIDI_CHAR_RLM)
|
||||
{
|
||||
str[j] = str[i];
|
||||
if (embedding_levels)
|
||||
embedding_levels[j] = embedding_levels[i];
|
||||
if (position_from_this_list)
|
||||
position_from_this_list[j] = position_from_this_list[i];
|
||||
j++;
|
||||
}
|
||||
|
||||
/* Convert the from_this list to to_this */
|
||||
if (positions_to_this)
|
||||
{
|
||||
for (i = 0; i < len; i++)
|
||||
positions_to_this[i] = -1;
|
||||
for (i = 0; i < len; i++)
|
||||
positions_to_this[position_from_this_list[i]] = i;
|
||||
}
|
||||
|
||||
status = true;
|
||||
|
||||
out:
|
||||
|
||||
if (private_from_this)
|
||||
fribidi_free (position_from_this_list);
|
||||
|
||||
return status ? j : -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
FRIBIDI_ENTRY FriBidiLevel
|
||||
fribidi_log2vis (
|
||||
/* input */
|
||||
const FriBidiChar *str,
|
||||
FriBidiStrIndex len,
|
||||
/* input and output */
|
||||
FriBidiParType *pbase_dir,
|
||||
/* output */
|
||||
FriBidiChar *visual_str,
|
||||
FriBidiStrIndex *positions_L_to_V,
|
||||
FriBidiStrIndex *positions_V_to_L,
|
||||
FriBidiLevel *embedding_levels
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
FriBidiLevel max_level = 0;
|
||||
fribidi_boolean private_V_to_L = false;
|
||||
fribidi_boolean private_embedding_levels = false;
|
||||
fribidi_boolean status = false;
|
||||
FriBidiArabicProp *ar_props = NULL;
|
||||
FriBidiCharType *bidi_types = NULL;
|
||||
|
||||
if UNLIKELY
|
||||
(len == 0)
|
||||
{
|
||||
status = true;
|
||||
goto out;
|
||||
}
|
||||
|
||||
DBG ("in fribidi_log2vis");
|
||||
|
||||
fribidi_assert (str);
|
||||
fribidi_assert (pbase_dir);
|
||||
|
||||
bidi_types = fribidi_malloc (len * sizeof bidi_types[0]);
|
||||
if (!bidi_types)
|
||||
goto out;
|
||||
|
||||
fribidi_get_bidi_types (str, len, bidi_types);
|
||||
|
||||
if (!embedding_levels)
|
||||
{
|
||||
embedding_levels = fribidi_malloc (len * sizeof embedding_levels[0]);
|
||||
if (!embedding_levels)
|
||||
goto out;
|
||||
private_embedding_levels = true;
|
||||
}
|
||||
|
||||
max_level = fribidi_get_par_embedding_levels (bidi_types, len, pbase_dir,
|
||||
embedding_levels) - 1;
|
||||
if UNLIKELY
|
||||
(max_level < 0) goto out;
|
||||
|
||||
/* If l2v is to be calculated we must have v2l as well. If it is not
|
||||
given by the caller, we have to make a private instance of it. */
|
||||
if (positions_L_to_V && !positions_V_to_L)
|
||||
{
|
||||
positions_V_to_L =
|
||||
(FriBidiStrIndex *) fribidi_malloc (sizeof (FriBidiStrIndex) * len);
|
||||
if (!positions_V_to_L)
|
||||
goto out;
|
||||
private_V_to_L = true;
|
||||
}
|
||||
|
||||
/* Set up the ordering array to identity order */
|
||||
if (positions_V_to_L)
|
||||
{
|
||||
for (i = 0; i < len; i++)
|
||||
positions_V_to_L[i] = i;
|
||||
}
|
||||
|
||||
|
||||
if (visual_str)
|
||||
{
|
||||
/* Using memcpy instead
|
||||
for (i = len - 1; i >= 0; i--)
|
||||
visual_str[i] = str[i];
|
||||
*/
|
||||
memcpy (visual_str, str, len * sizeof (*visual_str));
|
||||
|
||||
/* Arabic joining */
|
||||
ar_props = fribidi_malloc (len * sizeof ar_props[0]);
|
||||
fribidi_get_joining_types (str, len, ar_props);
|
||||
fribidi_join_arabic (bidi_types, len, embedding_levels, ar_props);
|
||||
|
||||
fribidi_shape (flags, embedding_levels, len, ar_props, visual_str);
|
||||
}
|
||||
|
||||
/* line breaking goes here, but we assume one line in this function */
|
||||
|
||||
/* and this should be called once per line, but again, we assume one
|
||||
* line in this deprecated function */
|
||||
status =
|
||||
fribidi_reorder_line (flags, bidi_types, len, 0, *pbase_dir,
|
||||
embedding_levels, visual_str,
|
||||
positions_V_to_L);
|
||||
|
||||
/* Convert the v2l list to l2v */
|
||||
if (positions_L_to_V)
|
||||
{
|
||||
for (i = 0; i < len; i++)
|
||||
positions_L_to_V[i] = -1;
|
||||
for (i = 0; i < len; i++)
|
||||
positions_L_to_V[positions_V_to_L[i]] = i;
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
if (private_V_to_L)
|
||||
fribidi_free (positions_V_to_L);
|
||||
|
||||
if (private_embedding_levels)
|
||||
fribidi_free (embedding_levels);
|
||||
|
||||
if (ar_props)
|
||||
fribidi_free (ar_props);
|
||||
|
||||
if (bidi_types)
|
||||
fribidi_free (bidi_types);
|
||||
|
||||
return status ? max_level + 1 : 0;
|
||||
}
|
||||
|
||||
#endif /* !FRIBIDI_NO_DEPRECATED */
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,243 @@
|
||||
/* FriBidi
|
||||
* fribidi-deprecated.h - Deprecated interfaces
|
||||
*
|
||||
* $Id: fribidi-deprecated.h,v 1.3 2006/01/31 03:23:13 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:13 $
|
||||
* $Revision: 1.3 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-deprecated.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2004, 2005
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2004, 2005 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_DEPRECATED_H
|
||||
#define _FRIBIDI_DEPRECATED_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
|
||||
#include "fribidi-bidi-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
|
||||
|
||||
#define fribidi_mirroring_status FRIBIDI_NAMESPACE(mirroring_status)
|
||||
/* fribidi_mirroring_status - get current mirroring status
|
||||
*
|
||||
* This function is deprecated and only used with other deprecated functions.
|
||||
*/
|
||||
FRIBIDI_ENTRY fribidi_boolean fribidi_mirroring_status (
|
||||
void
|
||||
) FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
#define fribidi_set_mirroring FRIBIDI_NAMESPACE(set_mirroring)
|
||||
/* fribidi_set_mirroring - set mirroring on or off
|
||||
*
|
||||
* This function is used to turn character mirroring on or off.
|
||||
* Character mirroring is the act of replacing a mirrorable glyph
|
||||
* (character), eg. left paranthesis, with the matching glyph,
|
||||
* eg. right paranthesis, in a right-to-left resolved context.
|
||||
* If your rendering engine does mirroring itself, you may want to
|
||||
* turn it off here.
|
||||
*
|
||||
* This flag is on by default.
|
||||
* This function is deprecated and only used with other deprecated functions.
|
||||
*
|
||||
* Returns: the new mirroring status.
|
||||
*/
|
||||
FRIBIDI_ENTRY fribidi_boolean fribidi_set_mirroring (
|
||||
fribidi_boolean state /* new state to set */
|
||||
) FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
|
||||
#define fribidi_reorder_nsm_status FRIBIDI_NAMESPACE(reorder_nsm_status)
|
||||
/* fribidi_reorder_nsm_status - get current marks reordering status
|
||||
*
|
||||
* This function is deprecated and only used with other deprecated functions.
|
||||
*/
|
||||
FRIBIDI_ENTRY fribidi_boolean fribidi_reorder_nsm_status (
|
||||
void
|
||||
) FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
#define fribidi_set_reorder_nsm FRIBIDI_NAMESPACE(set_reorder_nsm)
|
||||
/* fribidi_set_reorder_nsm - set marks reordering on or off
|
||||
*
|
||||
* This function is used to turn non-spacing marks reordering on or
|
||||
* off. Reordering non-spacing marks is the act of placing non-spacing
|
||||
* marks (bidi class NSM) after their base character in a right-to-left
|
||||
* resolved context. If your rendering engine expects non-spacing marks
|
||||
* always after the base character in the memory representation of the
|
||||
* visual string, you need this option on. An example of where people
|
||||
* may need it off is when rendering in the console when non-spacing
|
||||
* marks cannot be applied on top of the base character.
|
||||
*
|
||||
* This flag is on by default.
|
||||
* This function is deprecated and only used with other deprecated functions.
|
||||
*
|
||||
* Returns: the new marks reordering status.
|
||||
*/
|
||||
FRIBIDI_ENTRY fribidi_boolean fribidi_set_reorder_nsm (
|
||||
fribidi_boolean state /* new state to set */
|
||||
) FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
|
||||
|
||||
|
||||
/* fribidi_log2vis_get_embedding_levels - get embedding levels
|
||||
*
|
||||
* Deprecated. Replaced by fribidi_get_par_embedding_levels.
|
||||
*/
|
||||
#define fribidi_log2vis_get_embedding_levels FRIBIDI_NAMESPACE(log2vis_get_embedding_levels)
|
||||
FRIBIDI_ENTRY FriBidiLevel
|
||||
fribidi_log2vis_get_embedding_levels (
|
||||
const FriBidiCharType *bidi_types, /* input list of bidi types as returned by
|
||||
fribidi_get_bidi_types() */
|
||||
const FriBidiStrIndex len, /* input string length of the paragraph */
|
||||
FriBidiParType *pbase_dir, /* requested and resolved paragraph
|
||||
* base direction */
|
||||
FriBidiLevel *embedding_levels /* output list of embedding levels */
|
||||
) FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
/* fribidi_get_type - get character bidi type
|
||||
*
|
||||
* Deprecated. Replaced by fribidi_get_bidi_type.
|
||||
*/
|
||||
#define fribidi_get_type FRIBIDI_NAMESPACE(get_type)
|
||||
FRIBIDI_ENTRY FriBidiCharType
|
||||
fribidi_get_type (
|
||||
FriBidiChar ch /* input character */
|
||||
) FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
/* fribidi_get_type_internal - get character bidi type
|
||||
*
|
||||
* Deprecated. Replaced by fribidi_get_bidi_type.
|
||||
*/
|
||||
#define fribidi_get_type_internal FRIBIDI_NAMESPACE(get_type_internal)
|
||||
FRIBIDI_ENTRY FriBidiCharType
|
||||
fribidi_get_type_internal (
|
||||
FriBidiChar ch /* input character */
|
||||
) FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
#define fribidi_remove_bidi_marks FRIBIDI_NAMESPACE(remove_bidi_marks)
|
||||
/* fribidi_remove_bidi_marks - remove bidi marks out of an string
|
||||
*
|
||||
* This function removes the bidi and boundary-neutral marks out of an string
|
||||
* and the accompanying lists. It implements rule X9 of the Unicode
|
||||
* Bidirectional Algorithm available at
|
||||
* http://www.unicode.org/reports/tr9/#X9, with the exception that it removes
|
||||
* U+200E LEFT-TO-RIGHT MARK and U+200F RIGHT-TO-LEFT MARK too.
|
||||
*
|
||||
* If any of the input lists are NULL, the list is skipped. If str is the
|
||||
* visual string, then positions_to_this is positions_L_to_V and
|
||||
* position_from_this_list is positions_V_to_L; if str is the logical
|
||||
* string, the other way. Moreover, the position maps should be filled with
|
||||
* valid entries.
|
||||
*
|
||||
* A position map pointing to a removed character is filled with -1. By the
|
||||
* way, you should not use embedding_levels if str is visual string.
|
||||
*
|
||||
* For best results this function should be run on a whole paragraph, not
|
||||
* lines; but feel free to do otherwise if you know what you are doing.
|
||||
* Deprecated. Use fribidi_remove_special_chars instead.
|
||||
*
|
||||
* Returns: New length of the string, or -1 if an error occured (memory
|
||||
* allocation failure most probably).
|
||||
*/
|
||||
FRIBIDI_ENTRY FriBidiStrIndex
|
||||
fribidi_remove_bidi_marks (
|
||||
FriBidiChar *str, /* input string to clean */
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
FriBidiStrIndex *positions_to_this, /* list mapping positions to the
|
||||
order used in str */
|
||||
FriBidiStrIndex *position_from_this_list, /* list mapping positions from the
|
||||
order used in str */
|
||||
FriBidiLevel *embedding_levels /* list of embedding levels */
|
||||
)
|
||||
FRIBIDI_GNUC_WARN_UNUSED FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
|
||||
#define fribidi_log2vis FRIBIDI_NAMESPACE(log2vis)
|
||||
/* fribidi_log2vis - get visual string
|
||||
*
|
||||
* This function converts the logical input string to the visual output
|
||||
* strings as specified by the Unicode Bidirectional Algorithm. As a side
|
||||
* effect it also generates mapping lists between the two strings, and the
|
||||
* list of embedding levels as defined by the algorithm.
|
||||
*
|
||||
* If NULL is passed as any of the the lists, the list is ignored and not
|
||||
* filled.
|
||||
*
|
||||
* This function is obsolete because it only handles one-line paragraphs.
|
||||
* Please consider using other functions instead. Deprecated.
|
||||
*
|
||||
* Returns: Maximum level found plus one, or zero if any error occured
|
||||
* (memory allocation failure most probably).
|
||||
*/
|
||||
FRIBIDI_ENTRY FriBidiLevel fribidi_log2vis (
|
||||
const FriBidiChar *str, /* input logical string */
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
FriBidiParType *pbase_dir, /* requested and resolved paragraph
|
||||
* base direction */
|
||||
FriBidiChar *visual_str, /* output visual string */
|
||||
FriBidiStrIndex *positions_L_to_V, /* output mapping from logical to
|
||||
* visual string positions */
|
||||
FriBidiStrIndex *positions_V_to_L, /* output mapping from visual string
|
||||
* back to the logical string
|
||||
* positions */
|
||||
FriBidiLevel *embedding_levels /* output list of embedding levels */
|
||||
)
|
||||
FRIBIDI_GNUC_WARN_UNUSED FRIBIDI_GNUC_DEPRECATED;
|
||||
|
||||
|
||||
#define UNI_MAX_BIDI_LEVEL FRIBIDI_BIDI_MAX_EXPLICIT_LEVEL
|
||||
#define UNI_LRM FRIBIDI_CHAR_LRM
|
||||
#define UNI_RLM FRIBIDI_CHAR_RLM
|
||||
#define UNI_LRE FRIBIDI_CHAR_LRE
|
||||
#define UNI_RLE FRIBIDI_CHAR_RLE
|
||||
#define UNI_LRO FRIBIDI_CHAR_LRO
|
||||
#define UNI_RLO FRIBIDI_CHAR_RLO
|
||||
#define UNI_LS FRIBIDI_CHAR_LS
|
||||
#define UNI_PS FRIBIDI_CHAR_PS
|
||||
#define UNI_ZWNJ FRIBIDI_CHAR_ZWNJ
|
||||
#define UNI_ZWJ FRIBIDI_CHAR_ZWJ
|
||||
#define UNI_HEBREW_ALEF FRIBIDI_CHAR_HEBREW_ALEF
|
||||
#define UNI_ARABIC_ALEF FRIBIDI_CHAR_ARABIC_ALEF
|
||||
#define UNI_ARABIC_ZERO FRIBIDI_CHAR_ARABIC_ZERO
|
||||
#define UNI_FARSI_ZERO FRIBIDI_CHAR_PERSIAN_ZERO
|
||||
|
||||
#define FRIBIDI_TYPE_WL FRIBIDI_PAR_WLTR
|
||||
#define FRIBIDI_TYPE_WR FRIBIDI_PAR_WRTL
|
||||
#define FRIBIDI_TYPE_L FRIBIDI_PAR_LTR
|
||||
#define FRIBIDI_TYPE_R FRIBIDI_PAR_RTL
|
||||
#define FRIBIDI_TYPE_N FRIBIDI_PAR_ON
|
||||
#define FRIBIDI_TYPE_B FRIBIDI_TYPE_BS
|
||||
#define FRIBIDI_TYPE_S FRIBIDI_TYPE_SS
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_DEPRECATED_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,3 @@
|
||||
#ifdef FRIBIDI_END_DECLS
|
||||
FRIBIDI_END_DECLS
|
||||
#endif /* FRIBIDI_END_DECLS */
|
||||
@@ -0,0 +1,78 @@
|
||||
/* FriBidi
|
||||
* fribidi-flags.h - option flags
|
||||
*
|
||||
* $Id: fribidi-flags.h,v 1.1 2005/11/03 01:39:01 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2005/11/03 01:39:01 $
|
||||
* $Revision: 1.1 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-flags.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2005
|
||||
*
|
||||
* Copyright (C) 2005 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_FLAGS_H
|
||||
#define _FRIBIDI_FLAGS_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
typedef fribidi_uint32 FriBidiFlags;
|
||||
|
||||
/*
|
||||
* Define option flags that various functions use. Each mask has
|
||||
* only one bit set.
|
||||
*/
|
||||
|
||||
#define FRIBIDI_FLAG_SHAPE_MIRRORING 0x00000001
|
||||
#define FRIBIDI_FLAG_REORDER_NSM 0x00000002
|
||||
|
||||
#define FRIBIDI_FLAG_SHAPE_ARAB_PRES 0x00000100
|
||||
#define FRIBIDI_FLAG_SHAPE_ARAB_LIGA 0x00000200
|
||||
#define FRIBIDI_FLAG_SHAPE_ARAB_CONSOLE 0x00000400
|
||||
|
||||
#define FRIBIDI_FLAG_REMOVE_BIDI 0x00010000
|
||||
#define FRIBIDI_FLAG_REMOVE_JOINING 0x00020000
|
||||
#define FRIBIDI_FLAG_REMOVE_SPECIALS 0x00040000
|
||||
|
||||
|
||||
/*
|
||||
* And their combinations.
|
||||
*/
|
||||
|
||||
#define FRIBIDI_FLAGS_DEFAULT ( \
|
||||
FRIBIDI_FLAG_SHAPE_MIRRORING | \
|
||||
FRIBIDI_FLAG_REORDER_NSM | \
|
||||
FRIBIDI_FLAG_REMOVE_SPECIALS )
|
||||
|
||||
#define FRIBIDI_FLAGS_ARABIC ( \
|
||||
FRIBIDI_FLAG_SHAPE_ARAB_PRES | \
|
||||
FRIBIDI_FLAG_SHAPE_ARAB_LIGA )
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_FLAGS_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,50 @@
|
||||
#ifndef __FRIBIDI_DOC
|
||||
/* FriBidi
|
||||
* fribidi-joining-types-list.h - list of joining types
|
||||
*
|
||||
* $Id: fribidi-joining-types-list.h,v 1.2 2004/06/15 11:52:02 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2004/06/15 11:52:02 $
|
||||
* $Revision: 1.2 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-joining-types-list.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2004 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
/* *INDENT-OFF* */
|
||||
#endif /* !__FRIBIDI_DOC */
|
||||
#ifndef _FRIBIDI_ADD_TYPE
|
||||
# define _FRIBIDI_ADD_TYPE(x,y)
|
||||
#endif
|
||||
|
||||
_FRIBIDI_ADD_TYPE (U, '|') /* nUn-joining, e.g. Full Stop */
|
||||
_FRIBIDI_ADD_TYPE (R, '<') /* Right-joining, e.g. Arabic Letter Dal */
|
||||
_FRIBIDI_ADD_TYPE (D, '+') /* Dual-joining, e.g. Arabic Letter Ain */
|
||||
_FRIBIDI_ADD_TYPE (C, '-') /* join-Causing, e.g. Tatweel, ZWJ */
|
||||
_FRIBIDI_ADD_TYPE (T, '^') /* Transparent, e.g. Arabic Fatha */
|
||||
_FRIBIDI_ADD_TYPE (L, '>') /* Left-joining, i.e. fictional */
|
||||
_FRIBIDI_ADD_TYPE (G, '~') /* iGnored, e.g. LRE, RLE, ZWNBSP */
|
||||
|
||||
#ifndef __FRIBIDI_DOC
|
||||
/* *INDENT-ON* */
|
||||
#endif /* !__FRIBIDI_DOC */
|
||||
@@ -0,0 +1,118 @@
|
||||
/* FriBidi
|
||||
* fribidi-joining-types.c - character joining types
|
||||
*
|
||||
* $Id: fribidi-joining-types.c,v 1.5 2006/01/31 03:23:13 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:13 $
|
||||
* $Revision: 1.5 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-joining-types.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-joining-types.h>
|
||||
|
||||
#include "joining-types.h"
|
||||
|
||||
enum FriBidiJoiningTypeShortEnum
|
||||
{
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) TYPE = FRIBIDI_JOINING_TYPE_##TYPE,
|
||||
# include "fribidi-joining-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
_FRIBIDI_NUM_TYPES
|
||||
};
|
||||
|
||||
#include "joining-type.tab.i"
|
||||
|
||||
FRIBIDI_ENTRY FriBidiJoiningType
|
||||
fribidi_get_joining_type (
|
||||
/* input */
|
||||
FriBidiChar ch
|
||||
)
|
||||
{
|
||||
return FRIBIDI_GET_JOINING_TYPE (ch);
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY void
|
||||
fribidi_get_joining_types (
|
||||
/* input */
|
||||
const FriBidiChar *str,
|
||||
const FriBidiStrIndex len,
|
||||
/* output */
|
||||
FriBidiJoiningType *jtypes
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i = len;
|
||||
for (; i; i--)
|
||||
{
|
||||
*jtypes++ = FRIBIDI_GET_JOINING_TYPE (*str);
|
||||
str++;
|
||||
}
|
||||
}
|
||||
|
||||
FRIBIDI_ENTRY const char *
|
||||
fribidi_get_joining_type_name (
|
||||
/* input */
|
||||
FriBidiJoiningType j
|
||||
)
|
||||
{
|
||||
switch (j)
|
||||
{
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) case FRIBIDI_JOINING_TYPE_##TYPE: return STRINGIZE(TYPE);
|
||||
# include "fribidi-joining-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
default:
|
||||
return "?";
|
||||
}
|
||||
}
|
||||
|
||||
#if DEBUG+0
|
||||
|
||||
char
|
||||
fribidi_char_from_joining_type (
|
||||
/* input */
|
||||
FriBidiJoiningType j,
|
||||
fribidi_boolean visual
|
||||
)
|
||||
{
|
||||
/* switch left and right if on visual run */
|
||||
if (visual & ((FRIBIDI_JOINS_RIGHT (j) && !FRIBIDI_JOINS_LEFT (j)) |
|
||||
(!FRIBIDI_JOINS_RIGHT (j) && FRIBIDI_JOINS_LEFT (j))))
|
||||
j ^= FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT;
|
||||
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) \
|
||||
if (FRIBIDI_IS_JOINING_TYPE_##TYPE(j)) return SYMBOL;
|
||||
# include "fribidi-joining-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
|
||||
return '?';
|
||||
}
|
||||
|
||||
#endif /* DEBUG */
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,258 @@
|
||||
/* FriBidi
|
||||
* fribidi-joining-types.h - character joining types
|
||||
*
|
||||
* $Id: fribidi-joining-types.h,v 1.5 2005/11/03 01:39:01 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2005/11/03 01:39:01 $
|
||||
* $Revision: 1.5 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-joining-types.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc.
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_JOINING_TYPES_H
|
||||
#define _FRIBIDI_JOINING_TYPES_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
/*
|
||||
* Define bit masks that joining types are based on, each mask has
|
||||
* only one bit set.
|
||||
*/
|
||||
|
||||
#define FRIBIDI_MASK_JOINS_RIGHT 0x01 /* May join to right */
|
||||
#define FRIBIDI_MASK_JOINS_LEFT 0x02 /* May join to right */
|
||||
#define FRIBIDI_MASK_ARAB_SHAPES 0x04 /* May Arabic shape */
|
||||
#define FRIBIDI_MASK_TRANSPARENT 0x08 /* Is transparent */
|
||||
#define FRIBIDI_MASK_IGNORED 0x10 /* Is ignored */
|
||||
#define FRIBIDI_MASK_LIGATURED 0x20 /* Is ligatured */
|
||||
|
||||
/*
|
||||
* Define values for FriBidiJoiningType
|
||||
*/
|
||||
|
||||
/* nUn-joining */
|
||||
#define FRIBIDI_JOINING_TYPE_U_VAL ( 0 )
|
||||
|
||||
/* Right-joining */
|
||||
#define FRIBIDI_JOINING_TYPE_R_VAL \
|
||||
( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* Dual-joining */
|
||||
#define FRIBIDI_JOINING_TYPE_D_VAL \
|
||||
( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
|
||||
| FRIBIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* join-Causing */
|
||||
#define FRIBIDI_JOINING_TYPE_C_VAL \
|
||||
( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT )
|
||||
|
||||
/* Left-joining */
|
||||
#define FRIBIDI_JOINING_TYPE_L_VAL \
|
||||
( FRIBIDI_MASK_JOINS_LEFT | FRIBIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* Transparent */
|
||||
#define FRIBIDI_JOINING_TYPE_T_VAL \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_ARAB_SHAPES )
|
||||
|
||||
/* iGnored */
|
||||
#define FRIBIDI_JOINING_TYPE_G_VAL ( FRIBIDI_MASK_IGNORED )
|
||||
|
||||
|
||||
enum _FriBidiJoiningTypeEnum
|
||||
{
|
||||
# define _FRIBIDI_ADD_TYPE(TYPE,SYMBOL) \
|
||||
FRIBIDI_JOINING_TYPE_##TYPE = FRIBIDI_JOINING_TYPE_##TYPE##_VAL,
|
||||
# include "fribidi-joining-types-list.h"
|
||||
# undef _FRIBIDI_ADD_TYPE
|
||||
_FRIBIDI_JOINING_TYPE_JUNK /* Don't use this */
|
||||
};
|
||||
|
||||
#ifdef __FRIBIDI_DOC
|
||||
typedef enum _FriBidiJoiningTypeEnum FriBidiJoiningType;
|
||||
#else /* !__FRIBIDI_DOC */
|
||||
typedef fribidi_uint8 FriBidiJoiningType;
|
||||
#endif /* !__FRIBIDI_DOC */
|
||||
|
||||
/* FriBidiArabicProp is essentially the same type as FriBidiJoiningType, but
|
||||
* not limited to the few values returned by fribidi_get_joining_type. */
|
||||
typedef fribidi_uint8 FriBidiArabicProp;
|
||||
|
||||
/*
|
||||
* The equivalent of JoiningType values for ArabicProp
|
||||
*/
|
||||
|
||||
/* Primary Arabic Joining Classes (Table 8-2) */
|
||||
|
||||
/* nUn-joining */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_U(p) \
|
||||
( 0 == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Right-joining */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_R(p) \
|
||||
( FRIBIDI_MASK_JOINS_RIGHT == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Dual-joining */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_D(p) \
|
||||
( ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
|
||||
| FRIBIDI_MASK_ARAB_SHAPES ) == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
|
||||
| FRIBIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
/* join-Causing */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_C(p) \
|
||||
( ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT \
|
||||
| FRIBIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
/* Left-joining */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_L(p) \
|
||||
( FRIBIDI_MASK_JOINS_LEFT == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
/* Transparent */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_T(p) \
|
||||
( FRIBIDI_MASK_TRANSPARENT == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED ) ) )
|
||||
|
||||
/* iGnored */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_G(p) \
|
||||
( FRIBIDI_MASK_IGNORED == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED ) ) )
|
||||
|
||||
/* and for Derived Arabic Joining Classes (Table 8-3) */
|
||||
|
||||
/* Right join-Causing */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_RC(p) \
|
||||
( FRIBIDI_MASK_JOINS_RIGHT == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_JOINS_RIGHT ) ) )
|
||||
|
||||
/* Left join-Causing */
|
||||
#define FRIBIDI_IS_JOINING_TYPE_LC(p) \
|
||||
( FRIBIDI_MASK_JOINS_LEFT == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_JOINS_LEFT ) ) )
|
||||
|
||||
|
||||
/*
|
||||
* Defining macros for needed queries, It is fully dependent on the
|
||||
* implementation of FriBidiJoiningType.
|
||||
*/
|
||||
|
||||
/* Joins to right: R, D, C? */
|
||||
#define FRIBIDI_JOINS_RIGHT(p) ((p) & FRIBIDI_MASK_JOINS_RIGHT)
|
||||
|
||||
/* Joins to left: L, D, C? */
|
||||
#define FRIBIDI_JOINS_LEFT(p) ((p) & FRIBIDI_MASK_JOINS_LEFT)
|
||||
|
||||
/* May shape: R, D, L, T? */
|
||||
#define FRIBIDI_ARAB_SHAPES(p) ((p) & FRIBIDI_MASK_ARAB_SHAPES)
|
||||
|
||||
/* Is skipped in joining: T, G? */
|
||||
#define FRIBIDI_IS_JOIN_SKIPPED(p) \
|
||||
((p) & (FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED))
|
||||
|
||||
/* Is base that will be shaped: R, D, L? */
|
||||
#define FRIBIDI_IS_JOIN_BASE_SHAPES(p) \
|
||||
( FRIBIDI_MASK_ARAB_SHAPES == ( (p) & \
|
||||
( FRIBIDI_MASK_TRANSPARENT | FRIBIDI_MASK_IGNORED \
|
||||
| FRIBIDI_MASK_ARAB_SHAPES ) ) )
|
||||
|
||||
#define FRIBIDI_JOINS_PRECEDING_MASK(level) \
|
||||
(FRIBIDI_LEVEL_IS_RTL (level) ? FRIBIDI_MASK_JOINS_RIGHT \
|
||||
: FRIBIDI_MASK_JOINS_LEFT)
|
||||
|
||||
#define FRIBIDI_JOINS_FOLLOWING_MASK(level) \
|
||||
(FRIBIDI_LEVEL_IS_RTL (level) ? FRIBIDI_MASK_JOINS_LEFT \
|
||||
: FRIBIDI_MASK_JOINS_RIGHT)
|
||||
|
||||
#define FRIBIDI_JOIN_SHAPE(p) \
|
||||
((p) & ( FRIBIDI_MASK_JOINS_RIGHT | FRIBIDI_MASK_JOINS_LEFT ))
|
||||
|
||||
/* Functions finally */
|
||||
|
||||
|
||||
#define fribidi_get_joining_type FRIBIDI_NAMESPACE(get_joining_type)
|
||||
/* fribidi_get_joining_type - get character joining type
|
||||
*
|
||||
* This function returns the joining type of a character as defined in Table
|
||||
* 8-2 Primary Arabic Joining Classes of the Unicode standard available at
|
||||
* http://www.unicode.org/versions/Unicode4.0.0/ch08.pdf#G7462, using data
|
||||
* provided in file ArabicShaping.txt and UnicodeData.txt of the Unicode
|
||||
* Character Database available at
|
||||
* http://www.unicode.org/Public/UNIDATA/ArabicShaping.txt and
|
||||
* http://www.unicode.org/Public/UNIDATA/UnicodeData.txt.
|
||||
*
|
||||
* There are a few macros defined in fribidi-joining-types.h for querying a
|
||||
* joining type.
|
||||
*/
|
||||
FRIBIDI_ENTRY FriBidiJoiningType
|
||||
fribidi_get_joining_type (
|
||||
FriBidiChar ch /* input character */
|
||||
) FRIBIDI_GNUC_CONST;
|
||||
|
||||
#define fribidi_get_joining_types FRIBIDI_NAMESPACE(get_joining_types)
|
||||
/* fribidi_get_joining_types - get joining types for an string of characters
|
||||
*
|
||||
* This function finds the joining types of an string of characters. See
|
||||
* fribidi_get_joining_type for more information about the joining types
|
||||
* returned by this function.
|
||||
*/
|
||||
FRIBIDI_ENTRY void fribidi_get_joining_types (
|
||||
const FriBidiChar *str, /* input string */
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
FriBidiJoiningType *jtypes /* output joining types */
|
||||
);
|
||||
|
||||
#define fribidi_get_joining_type_name FRIBIDI_NAMESPACE(get_joining_type_name)
|
||||
/* fribidi_get_joining_type_name - get joining type name
|
||||
*
|
||||
* This function returns the joining type name of a joining type. The
|
||||
* returned string is a static string and should not be freed.
|
||||
*
|
||||
* The type names are the same as ones defined in Table 8-2 Primary Arabic
|
||||
* Joining Classes of the Unicode standard available at
|
||||
* http://www.unicode.org/versions/Unicode4.0.0/ch08.pdf#G7462.
|
||||
*/
|
||||
FRIBIDI_ENTRY const char *fribidi_get_joining_type_name (
|
||||
FriBidiJoiningType j /* input joining type */
|
||||
) FRIBIDI_GNUC_CONST;
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_JOINING_TYPES_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,193 @@
|
||||
/* FriBidi
|
||||
* fribidi-joining.h - Arabic joining algorithm
|
||||
*
|
||||
* $Id: fribidi-joining.c,v 1.6 2006/01/31 03:23:13 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:13 $
|
||||
* $Revision: 1.6 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-joining.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2004 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-joining.h>
|
||||
|
||||
#include "mem.h"
|
||||
#include "bidi-types.h"
|
||||
#include "joining-types.h"
|
||||
|
||||
#if DEBUG+0
|
||||
/*======================================================================
|
||||
* For debugging, define some functions for printing joining types and
|
||||
* properties.
|
||||
*----------------------------------------------------------------------*/
|
||||
|
||||
static void
|
||||
print_joining_types (
|
||||
/* input */
|
||||
const FriBidiLevel *embedding_levels,
|
||||
const FriBidiStrIndex len,
|
||||
const FriBidiJoiningType *jtypes
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
fribidi_assert (jtypes);
|
||||
|
||||
MSG (" Join. types: ");
|
||||
for (i = 0; i < len; i++)
|
||||
MSG2 ("%c", fribidi_char_from_joining_type (jtypes[i],
|
||||
!FRIBIDI_LEVEL_IS_RTL
|
||||
(embedding_levels[i])));
|
||||
MSG ("\n");
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
#define FRIBIDI_CONSISTENT_LEVEL(i) \
|
||||
(FRIBIDI_IS_EXPLICIT_OR_BN (bidi_types[(i)]) \
|
||||
? FRIBIDI_SENTINEL \
|
||||
: embedding_levels[(i)])
|
||||
|
||||
#define FRIBIDI_LEVELS_MATCH(i, j) \
|
||||
((i) == (j) || (i) == FRIBIDI_SENTINEL || (j) == FRIBIDI_SENTINEL)
|
||||
|
||||
FRIBIDI_ENTRY void
|
||||
fribidi_join_arabic (
|
||||
/* input */
|
||||
const FriBidiCharType *bidi_types,
|
||||
const FriBidiStrIndex len,
|
||||
const FriBidiLevel *embedding_levels,
|
||||
/* input and output */
|
||||
FriBidiArabicProp *ar_props
|
||||
)
|
||||
{
|
||||
if UNLIKELY
|
||||
(len == 0) return;
|
||||
|
||||
DBG ("in fribidi_join_arabic");
|
||||
|
||||
fribidi_assert (bidi_types);
|
||||
fribidi_assert (embedding_levels);
|
||||
fribidi_assert (ar_props);
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_joining_types (embedding_levels, len, ar_props);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
/* The joining algorithm turned out very very dirty :(. That's what happens
|
||||
* when you follow the standard which has never been implemented closely
|
||||
* before.
|
||||
*/
|
||||
|
||||
/* 8.2 Arabic - Cursive Joining */
|
||||
DBG ("Arabic cursive joining");
|
||||
{
|
||||
/* The following do not need to be initialized as long as joins is
|
||||
* initialized to false. We just do to turn off compiler warnings. */
|
||||
register FriBidiStrIndex saved = 0;
|
||||
register FriBidiLevel saved_level = FRIBIDI_SENTINEL;
|
||||
register fribidi_boolean saved_shapes = false;
|
||||
register FriBidiArabicProp saved_joins_following_mask = 0;
|
||||
|
||||
register fribidi_boolean joins = false;
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
for (i = 0; i < len; i++)
|
||||
if (!FRIBIDI_IS_JOINING_TYPE_G (ar_props[i]))
|
||||
{
|
||||
register fribidi_boolean disjoin = false;
|
||||
register fribidi_boolean shapes = FRIBIDI_ARAB_SHAPES (ar_props[i]);
|
||||
register FriBidiLevel level = FRIBIDI_CONSISTENT_LEVEL (i);
|
||||
|
||||
if (joins && !FRIBIDI_LEVELS_MATCH (saved_level, level))
|
||||
{
|
||||
disjoin = true;
|
||||
joins = false;
|
||||
}
|
||||
|
||||
if (!FRIBIDI_IS_JOIN_SKIPPED (ar_props[i]))
|
||||
{
|
||||
register const FriBidiArabicProp joins_preceding_mask =
|
||||
FRIBIDI_JOINS_PRECEDING_MASK (level);
|
||||
|
||||
if (!joins)
|
||||
{
|
||||
if (shapes)
|
||||
FRIBIDI_UNSET_BITS (ar_props[i], joins_preceding_mask);
|
||||
}
|
||||
else if (!FRIBIDI_TEST_BITS (ar_props[i], joins_preceding_mask))
|
||||
{
|
||||
disjoin = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
register FriBidiStrIndex j;
|
||||
/* This is a FriBidi extension: we set joining properties
|
||||
* for skipped characters in between, so we can put NSMs on tatweel
|
||||
* later if we want. Useful on console for example.
|
||||
*/
|
||||
for (j = saved + 1; j < i; j++)
|
||||
FRIBIDI_SET_BITS (ar_props[j], joins_preceding_mask | saved_joins_following_mask);
|
||||
}
|
||||
}
|
||||
|
||||
if (disjoin && saved_shapes)
|
||||
FRIBIDI_UNSET_BITS (ar_props[saved], saved_joins_following_mask);
|
||||
|
||||
if (!FRIBIDI_IS_JOIN_SKIPPED (ar_props[i]))
|
||||
{
|
||||
saved = i;
|
||||
saved_level = level;
|
||||
saved_shapes = shapes;
|
||||
saved_joins_following_mask =
|
||||
FRIBIDI_JOINS_FOLLOWING_MASK (level);
|
||||
joins =
|
||||
FRIBIDI_TEST_BITS (ar_props[i], saved_joins_following_mask);
|
||||
}
|
||||
}
|
||||
if ((joins) && saved_shapes)
|
||||
FRIBIDI_UNSET_BITS (ar_props[saved], saved_joins_following_mask);
|
||||
|
||||
}
|
||||
|
||||
# if DEBUG
|
||||
if UNLIKELY
|
||||
(fribidi_debug_status ())
|
||||
{
|
||||
print_joining_types (embedding_levels, len, ar_props);
|
||||
}
|
||||
# endif /* DEBUG */
|
||||
|
||||
DBG ("leaving fribidi_join_arabic");
|
||||
}
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,81 @@
|
||||
/* FriBidi
|
||||
* fribidi-joining.h - Arabic joining algorithm
|
||||
*
|
||||
* $Id: fribidi-joining.h,v 1.3 2004/06/21 21:15:31 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2004/06/21 21:15:31 $
|
||||
* $Revision: 1.3 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-joining.h,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2004 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_JOINING_H
|
||||
#define _FRIBIDI_JOINING_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
#include "fribidi-bidi-types.h"
|
||||
#include "fribidi-joining-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
#define fribidi_join_arabic FRIBIDI_NAMESPACE(join_arabic)
|
||||
/* fribidi_join_arabic - do Arabic joining
|
||||
*
|
||||
* This function does the Arabic joining algorithm. Means, given Arabic
|
||||
* joining types of the characters in ar_props (don't worry,
|
||||
* FriBidiJoiningType can be casted to FriBidiArabicProp automagically), this
|
||||
* function modifies this properties to grasp the effect of neighboring
|
||||
* characters. You probably need this information later to do Arabic shaping.
|
||||
*
|
||||
* This function implements rules R1 to R7 inclusive (all rules) of the Arabic
|
||||
* Cursive Joining algorithm of the Unicode standard as available at
|
||||
* http://www.unicode.org/versions/Unicode4.0.0/ch08.pdf#G7462. It also
|
||||
* interacts correctly with the bidirection algorithm as defined in Section
|
||||
* 3.5 Shaping of the Unicode Bidirectional Algorithm available at
|
||||
* http://www.unicode.org/reports/tr9/#Shaping.
|
||||
*
|
||||
* There are a few macros defined in fribidi-joining-types.h for querying the
|
||||
* Arabic properties computed by this function.
|
||||
*/
|
||||
FRIBIDI_ENTRY void fribidi_join_arabic (
|
||||
const FriBidiCharType *bidi_types, /* input list of bidi types as
|
||||
returned by
|
||||
fribidi_get_bidi_types() */
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
const FriBidiLevel *embedding_levels, /* input list of embedding
|
||||
levels, as returned by
|
||||
fribidi_get_par_embedding_levels */
|
||||
FriBidiArabicProp *ar_props /* Arabic properties to analyze, initilized by
|
||||
joining types, as returned by
|
||||
fribidi_get_joining_types */
|
||||
);
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_JOINING_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,140 @@
|
||||
/* FriBidi
|
||||
* fribidi-mem.c - memory manipulation routines
|
||||
*
|
||||
* $Id: fribidi-mem.c,v 1.8 2006/01/31 03:23:13 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:13 $
|
||||
* $Revision: 1.8 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-mem.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include "mem.h"
|
||||
|
||||
#if FRIBIDI_USE_GLIB+0
|
||||
#else
|
||||
#if USE_SIMPLE_MALLOC+0
|
||||
#else
|
||||
|
||||
struct _FriBidiMemChunk
|
||||
{
|
||||
int atom_size;
|
||||
int area_size;
|
||||
int empty_size;
|
||||
void *chunk;
|
||||
};
|
||||
|
||||
FriBidiMemChunk *
|
||||
fribidi_mem_chunk_new (
|
||||
/* input */
|
||||
const char *name,
|
||||
int atom_size,
|
||||
unsigned long area_size,
|
||||
int alloc_type
|
||||
)
|
||||
{
|
||||
register FriBidiMemChunk *m;
|
||||
|
||||
fribidi_assert (area_size >= atom_size * 8);
|
||||
|
||||
m = (FriBidiMemChunk *) fribidi_malloc (sizeof (FriBidiMemChunk));
|
||||
if LIKELY
|
||||
(m)
|
||||
{
|
||||
m->atom_size = atom_size;
|
||||
m->area_size = area_size;
|
||||
m->empty_size = 0;
|
||||
m->chunk = NULL;
|
||||
}
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
void *
|
||||
fribidi_mem_chunk_alloc (
|
||||
/* input */
|
||||
FriBidiMemChunk *mem_chunk
|
||||
)
|
||||
{
|
||||
fribidi_assert (mem_chunk);
|
||||
|
||||
if UNLIKELY
|
||||
(mem_chunk->empty_size < mem_chunk->atom_size)
|
||||
{
|
||||
register void *chunk = fribidi_malloc (mem_chunk->area_size);
|
||||
if LIKELY
|
||||
(chunk)
|
||||
{
|
||||
if (mem_chunk->chunk)
|
||||
*(void **) chunk =
|
||||
(char *) mem_chunk->chunk + mem_chunk->empty_size -
|
||||
mem_chunk->area_size;
|
||||
chunk = (char *) chunk + mem_chunk->atom_size;
|
||||
mem_chunk->chunk = chunk;
|
||||
mem_chunk->empty_size = mem_chunk->area_size - mem_chunk->atom_size;
|
||||
}
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
|
||||
{
|
||||
register void *m = mem_chunk->chunk;
|
||||
mem_chunk->chunk = (char *) mem_chunk->chunk + mem_chunk->atom_size;
|
||||
mem_chunk->empty_size -= mem_chunk->atom_size;
|
||||
|
||||
return m;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
fribidi_mem_chunk_destroy (
|
||||
/* input */
|
||||
FriBidiMemChunk *mem_chunk
|
||||
)
|
||||
{
|
||||
register void *chunk;
|
||||
|
||||
fribidi_assert (mem_chunk);
|
||||
|
||||
chunk =
|
||||
(char *) mem_chunk->chunk + mem_chunk->empty_size - mem_chunk->area_size;
|
||||
while LIKELY
|
||||
(chunk)
|
||||
{
|
||||
register void *tofree = chunk;
|
||||
chunk = *(void **) chunk;
|
||||
fribidi_free (tofree);
|
||||
}
|
||||
fribidi_free (mem_chunk);
|
||||
}
|
||||
|
||||
#endif /* !USE_SIMPLE_MALLOC */
|
||||
#endif /* !FRIBIDI_USE_GLIB */
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,96 @@
|
||||
/* fribidi-mirroring.c - get mirrored character
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2001, 2002, 2004 Behdad Esfahbod
|
||||
* Copyright (C) 1999, 2000 Dov Grobgeld
|
||||
*
|
||||
* This file is part of GNU FriBidi.
|
||||
*
|
||||
* GNU FriBidi is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* GNU FriBidi is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with GNU FriBidi; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info> or write to
|
||||
* Sharif FarsiWeb, Inc., PO Box 13445-389, Tehran, Iran.
|
||||
*/
|
||||
/* $Id: fribidi-mirroring.c,v 1.15 2005/11/03 01:39:01 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2005/11/03 01:39:01 $
|
||||
* $Revision: 1.15 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-mirroring.c,v $
|
||||
*
|
||||
* Author(s):
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
* Dov Grobgeld, 1999, 2000
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-mirroring.h>
|
||||
|
||||
#include "mirroring.tab.i"
|
||||
|
||||
FRIBIDI_ENTRY fribidi_boolean
|
||||
fribidi_get_mirror_char (
|
||||
/* input */
|
||||
FriBidiChar ch,
|
||||
/* output */
|
||||
FriBidiChar *mirrored_ch
|
||||
)
|
||||
{
|
||||
register FriBidiChar result;
|
||||
result = FRIBIDI_GET_MIRRORING (ch);
|
||||
if (mirrored_ch)
|
||||
*mirrored_ch = result;
|
||||
return ch != result ? true : false;
|
||||
}
|
||||
|
||||
|
||||
FRIBIDI_ENTRY void
|
||||
fribidi_shape_mirroring (
|
||||
/* input */
|
||||
const FriBidiLevel *embedding_levels,
|
||||
const FriBidiStrIndex len,
|
||||
/* input and output */
|
||||
FriBidiChar *str
|
||||
)
|
||||
{
|
||||
register FriBidiStrIndex i;
|
||||
|
||||
DBG ("in fribidi_shape_mirroring");
|
||||
|
||||
if UNLIKELY
|
||||
(len == 0 || !str) return;
|
||||
|
||||
fribidi_assert (embedding_levels);
|
||||
|
||||
/* L4. Mirror all characters that are in odd levels and have mirrors. */
|
||||
for (i = len - 1; i >= 0; i--)
|
||||
if (FRIBIDI_LEVEL_IS_RTL (embedding_levels[i]))
|
||||
{
|
||||
FriBidiChar mirrored_ch;
|
||||
|
||||
if (fribidi_get_mirror_char (str[i], &mirrored_ch))
|
||||
str[i] = mirrored_ch;
|
||||
}
|
||||
}
|
||||
|
||||
/* Editor directions:
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 2
|
||||
* indent-tabs-mode: t
|
||||
* tab-width: 8
|
||||
* End:
|
||||
* vim: textwidth=78: autoindent: cindent: shiftwidth=2: tabstop=8:
|
||||
*/
|
||||
@@ -0,0 +1,94 @@
|
||||
/* fribidi-mirroring.h - get mirrored character
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2001, 2002, 2004 Behdad Esfahbod
|
||||
* Copyright (C) 1999, 2000 Dov Grobgeld
|
||||
*
|
||||
* This file is part of GNU FriBidi.
|
||||
*
|
||||
* GNU FriBidi is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 2.1
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* GNU FriBidi is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with GNU FriBidi; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info> or write to
|
||||
* Sharif FarsiWeb, Inc., PO Box 13445-389, Tehran, Iran.
|
||||
*/
|
||||
/* $Id: fribidi-mirroring.h,v 1.10 2004/09/28 07:58:57 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2004/09/28 07:58:57 $
|
||||
* $Revision: 1.10 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-mirroring.h,v $
|
||||
*
|
||||
* Author(s):
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
* Dov Grobgeld, 1999, 2000
|
||||
*/
|
||||
#ifndef _FRIBIDI_MIRRORING_H
|
||||
#define _FRIBIDI_MIRRORING_H
|
||||
|
||||
#include "fribidi-common.h"
|
||||
|
||||
#include "fribidi-types.h"
|
||||
#include "fribidi-bidi-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
#define fribidi_get_mirror_char FRIBIDI_NAMESPACE(get_mirror_char)
|
||||
/* fribidi_get_mirror_char - get mirrored character
|
||||
*
|
||||
* This function finds the mirrored equivalent of a character as defined in
|
||||
* the file BidiMirroring.txt of the Unicode Character Database available at
|
||||
* http://www.unicode.org/Public/UNIDATA/BidiMirroring.txt.
|
||||
*
|
||||
* If the input character is a declared as a mirroring character in the
|
||||
* Unicode standard and has a mirrored equivalent. The matching mirrored
|
||||
* character is put in the output, otherwise the input character itself is
|
||||
* put.
|
||||
*
|
||||
* Returns: if the character has a mirroring equivalent or not.
|
||||
*/
|
||||
FRIBIDI_ENTRY fribidi_boolean fribidi_get_mirror_char (
|
||||
FriBidiChar ch, /* input character */
|
||||
FriBidiChar *mirrored_ch /* output mirrored character */
|
||||
);
|
||||
|
||||
#define fribidi_shape_mirroring FRIBIDI_NAMESPACE(shape_mirroring)
|
||||
/* fribidi_shape_mirroring - do mirroring shaping
|
||||
*
|
||||
* This functions replaces mirroring characters on right-to-left embeddings in
|
||||
* string with their mirrored equivalent as returned by
|
||||
* fribidi_get_mirror_char().
|
||||
*
|
||||
* This function implements rule L4 of the Unicode Bidirectional Algorithm
|
||||
* available at http://www.unicode.org/reports/tr9/#L4.
|
||||
*/
|
||||
FRIBIDI_ENTRY void fribidi_shape_mirroring (
|
||||
const FriBidiLevel *embedding_levels, /* input list of embedding
|
||||
levels, as returned by
|
||||
fribidi_get_par_embedding_levels */
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
FriBidiChar *str /* string to shape */
|
||||
);
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_MIRRORING_H */
|
||||
/* Editor directions:
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 2
|
||||
* indent-tabs-mode: t
|
||||
* tab-width: 8
|
||||
* End:
|
||||
* vim: textwidth=78: autoindent: cindent: shiftwidth=2: tabstop=8:
|
||||
*/
|
||||
@@ -0,0 +1,376 @@
|
||||
/* FriBidi
|
||||
* fribidi-run.c - text run data type
|
||||
*
|
||||
* $Id: fribidi-run.c,v 1.8 2006/01/31 03:23:13 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/31 03:23:13 $
|
||||
* $Revision: 1.8 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-run.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
* Dov Grobgeld, 1999, 2000
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2001,2002 Behdad Esfahbod
|
||||
* Copyright (C) 1999,2000 Dov Grobgeld
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-bidi-types.h>
|
||||
|
||||
#include "run.h"
|
||||
#include "mem.h"
|
||||
#include "bidi-types.h"
|
||||
|
||||
#if USE_SIMPLE_MALLOC+0
|
||||
#else
|
||||
static FriBidiRun *free_runs = NULL;
|
||||
#endif
|
||||
|
||||
FriBidiRun *
|
||||
new_run (
|
||||
void
|
||||
)
|
||||
{
|
||||
register FriBidiRun *run;
|
||||
|
||||
#if USE_SIMPLE_MALLOC+0
|
||||
run = fribidi_malloc (sizeof (FriBidiRun));
|
||||
#else /* !USE_SIMPLE_MALLOC */
|
||||
if (free_runs)
|
||||
{
|
||||
run = free_runs;
|
||||
free_runs = run->next;
|
||||
}
|
||||
else
|
||||
{
|
||||
static FriBidiMemChunk *run_mem_chunk = NULL;
|
||||
|
||||
if UNLIKELY
|
||||
(!run_mem_chunk)
|
||||
run_mem_chunk = fribidi_chunk_new_for_type (FriBidiRun);
|
||||
|
||||
if LIKELY
|
||||
(run_mem_chunk)
|
||||
run = fribidi_chunk_new (FriBidiRun, run_mem_chunk);
|
||||
else
|
||||
run = NULL;
|
||||
}
|
||||
#endif /* !USE_SIMPLE_MALLOC */
|
||||
|
||||
if LIKELY
|
||||
(run)
|
||||
{
|
||||
run->len = run->pos = run->level = 0;
|
||||
run->next = run->prev = NULL;
|
||||
}
|
||||
return run;
|
||||
}
|
||||
|
||||
void
|
||||
free_run (
|
||||
/* input */
|
||||
FriBidiRun *run
|
||||
)
|
||||
{
|
||||
fribidi_assert (run);
|
||||
#if USE_SIMPLE_MALLOC+0
|
||||
fribidi_free (run);
|
||||
#else /* !USE_SIMPLE_MALLOC */
|
||||
run->next = free_runs;
|
||||
free_runs = run;
|
||||
#endif /* !USE_SIMPLE_MALLOC */
|
||||
}
|
||||
|
||||
FriBidiRun *
|
||||
new_run_list (
|
||||
void
|
||||
)
|
||||
{
|
||||
register FriBidiRun *run;
|
||||
|
||||
run = new_run ();
|
||||
|
||||
if LIKELY
|
||||
(run)
|
||||
{
|
||||
run->type = FRIBIDI_TYPE_SENTINEL;
|
||||
run->level = FRIBIDI_SENTINEL;
|
||||
run->pos = FRIBIDI_SENTINEL;
|
||||
run->len = FRIBIDI_SENTINEL;
|
||||
run->next = run->prev = run;
|
||||
}
|
||||
|
||||
return run;
|
||||
}
|
||||
|
||||
void
|
||||
free_run_list (
|
||||
FriBidiRun *run_list
|
||||
)
|
||||
{
|
||||
if (!run_list)
|
||||
return;
|
||||
|
||||
fribidi_validate_run_list (run_list);
|
||||
|
||||
#if USE_SIMPLE_MALLOC+0
|
||||
{
|
||||
register FriBidiRun *pp;
|
||||
|
||||
pp = run_list;
|
||||
pp->prev->next = NULL;
|
||||
while LIKELY
|
||||
(pp)
|
||||
{
|
||||
register FriBidiRun *p;
|
||||
|
||||
p = pp;
|
||||
pp = pp->next;
|
||||
free_run (p);
|
||||
};
|
||||
}
|
||||
#else /* !USE_SIMPLE_MALLOC */
|
||||
run_list->prev->next = free_runs;
|
||||
free_runs = run_list;
|
||||
#endif /* !USE_SIMPLE_MALLOC */
|
||||
}
|
||||
|
||||
|
||||
FriBidiRun *
|
||||
run_list_encode_bidi_types (
|
||||
/* input */
|
||||
const FriBidiCharType *bidi_types,
|
||||
const FriBidiStrIndex len
|
||||
)
|
||||
{
|
||||
FriBidiRun *list, *last;
|
||||
register FriBidiRun *run = NULL;
|
||||
FriBidiStrIndex i;
|
||||
|
||||
fribidi_assert (bidi_types);
|
||||
|
||||
/* Create the list sentinel */
|
||||
list = new_run_list ();
|
||||
if UNLIKELY
|
||||
(!list) return NULL;
|
||||
last = list;
|
||||
|
||||
/* Scan over the character types */
|
||||
for (i = 0; i < len; i++)
|
||||
{
|
||||
register FriBidiCharType char_type = bidi_types[i];
|
||||
if (char_type != last->type)
|
||||
{
|
||||
run = new_run ();
|
||||
if UNLIKELY
|
||||
(!run) break;
|
||||
run->type = char_type;
|
||||
run->pos = i;
|
||||
last->len = run->pos - last->pos;
|
||||
last->next = run;
|
||||
run->prev = last;
|
||||
last = run;
|
||||
}
|
||||
}
|
||||
|
||||
/* Close the circle */
|
||||
last->len = len - last->pos;
|
||||
last->next = list;
|
||||
list->prev = last;
|
||||
|
||||
if UNLIKELY
|
||||
(!run)
|
||||
{
|
||||
/* Memory allocation failed */
|
||||
free_run_list (list);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
fribidi_validate_run_list (list);
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
/* override the run list 'base', with the runs in the list 'over', to
|
||||
reinsert the previously-removed explicit codes (at X9) from
|
||||
'explicits_list' back into 'type_rl_list' for example. This is used at the
|
||||
end of I2 to restore the explicit marks, and also to reset the character
|
||||
types of characters at L1.
|
||||
|
||||
it is assumed that the 'pos' of the first element in 'base' list is not
|
||||
more than the 'pos' of the first element of the 'over' list, and the
|
||||
'pos' of the last element of the 'base' list is not less than the 'pos'
|
||||
of the last element of the 'over' list. these two conditions are always
|
||||
satisfied for the two usages mentioned above.
|
||||
|
||||
Note:
|
||||
frees the over list.
|
||||
|
||||
Todo:
|
||||
use some explanatory names instead of p, q, ...
|
||||
rewrite comment above to remove references to special usage.
|
||||
*/
|
||||
fribidi_boolean
|
||||
shadow_run_list (
|
||||
/* input */
|
||||
FriBidiRun *base,
|
||||
FriBidiRun *over,
|
||||
fribidi_boolean preserve_length
|
||||
)
|
||||
{
|
||||
register FriBidiRun *p = base, *q, *r, *s, *t;
|
||||
register FriBidiStrIndex pos = 0, pos2;
|
||||
fribidi_boolean status = false;
|
||||
|
||||
fribidi_validate_run_list (base);
|
||||
fribidi_validate_run_list (over);
|
||||
|
||||
for_run_list (q, over)
|
||||
{
|
||||
if UNLIKELY
|
||||
(!q->len || q->pos < pos) continue;
|
||||
pos = q->pos;
|
||||
while (p->next->type != FRIBIDI_TYPE_SENTINEL && p->next->pos <= pos)
|
||||
p = p->next;
|
||||
/* now p is the element that q must be inserted 'in'. */
|
||||
pos2 = pos + q->len;
|
||||
r = p;
|
||||
while (r->next->type != FRIBIDI_TYPE_SENTINEL && r->next->pos < pos2)
|
||||
r = r->next;
|
||||
if (preserve_length)
|
||||
r->len += q->len;
|
||||
/* now r is the last element that q affects. */
|
||||
if LIKELY
|
||||
(p == r)
|
||||
{
|
||||
/* split p into at most 3 intervals, and insert q in the place of
|
||||
the second interval, set r to be the third part. */
|
||||
/* third part needed? */
|
||||
if (p->pos + p->len > pos2)
|
||||
{
|
||||
r = new_run ();
|
||||
if UNLIKELY
|
||||
(!r) goto out;
|
||||
p->next->prev = r;
|
||||
r->next = p->next;
|
||||
r->level = p->level;
|
||||
r->type = p->type;
|
||||
r->len = p->pos + p->len - pos2;
|
||||
r->pos = pos2;
|
||||
}
|
||||
else
|
||||
r = r->next;
|
||||
|
||||
if LIKELY
|
||||
(p->pos + p->len >= pos)
|
||||
{
|
||||
/* first part needed? */
|
||||
if (p->pos < pos)
|
||||
/* cut the end of p. */
|
||||
p->len = pos - p->pos;
|
||||
else
|
||||
{
|
||||
t = p;
|
||||
p = p->prev;
|
||||
free_run (t);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if LIKELY
|
||||
(p->pos + p->len >= pos)
|
||||
{
|
||||
/* p needed? */
|
||||
if (p->pos < pos)
|
||||
/* cut the end of p. */
|
||||
p->len = pos - p->pos;
|
||||
else
|
||||
p = p->prev;
|
||||
}
|
||||
|
||||
/* r needed? */
|
||||
if (r->pos + r->len > pos2)
|
||||
{
|
||||
/* cut the begining of r. */
|
||||
r->len = r->pos + r->len - pos2;
|
||||
r->pos = pos2;
|
||||
}
|
||||
else
|
||||
r = r->next;
|
||||
|
||||
/* remove the elements between p and r. */
|
||||
for (s = p->next; s != r;)
|
||||
{
|
||||
t = s;
|
||||
s = s->next;
|
||||
free_run (t);
|
||||
}
|
||||
}
|
||||
/* before updating the next and prev runs to point to the inserted q,
|
||||
we must remember the next element of q in the 'over' list.
|
||||
*/
|
||||
t = q;
|
||||
q = q->prev;
|
||||
delete_node (t);
|
||||
p->next = t;
|
||||
t->prev = p;
|
||||
t->next = r;
|
||||
r->prev = t;
|
||||
}
|
||||
status = true;
|
||||
|
||||
fribidi_validate_run_list (base);
|
||||
|
||||
out:
|
||||
free_run_list (over);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
#if DEBUG+0
|
||||
|
||||
void
|
||||
fribidi_validate_run_list (
|
||||
FriBidiRun *run_list /* input run list */
|
||||
)
|
||||
{
|
||||
register FriBidiRun *q;
|
||||
|
||||
fribidi_assert (run_list);
|
||||
fribidi_assert (run_list->next);
|
||||
fribidi_assert (run_list->next->prev == run_list);
|
||||
fribidi_assert (run_list->type == FRIBIDI_TYPE_SENTINEL);
|
||||
for_run_list (q, run_list)
|
||||
{
|
||||
fribidi_assert (q->next);
|
||||
fribidi_assert (q->next->prev == q);
|
||||
}
|
||||
fribidi_assert (q == run_list);
|
||||
}
|
||||
|
||||
#endif /* !DEBUG */
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,69 @@
|
||||
/* FriBidi
|
||||
* fribidi-shape.c - shaping
|
||||
*
|
||||
* $Id: fribidi-shape.c,v 1.1 2005/11/03 01:39:01 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2005/11/03 01:39:01 $
|
||||
* $Revision: 1.1 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-shape.c,v $
|
||||
*
|
||||
* Authors:
|
||||
* Behdad Esfahbod, 2001, 2002, 2004
|
||||
* Dov Grobgeld, 1999, 2000
|
||||
*
|
||||
* Copyright (C) 2005 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#include <fribidi-shape.h>
|
||||
#include <fribidi-mirroring.h>
|
||||
#include <fribidi-arabic.h>
|
||||
|
||||
|
||||
FRIBIDI_ENTRY void
|
||||
fribidi_shape (
|
||||
/* input */
|
||||
FriBidiFlags flags,
|
||||
const FriBidiLevel *embedding_levels,
|
||||
const FriBidiStrIndex len,
|
||||
/* input and output */
|
||||
FriBidiArabicProp *ar_props,
|
||||
FriBidiChar *str
|
||||
)
|
||||
{
|
||||
if UNLIKELY
|
||||
(len == 0 || !str) return;
|
||||
|
||||
DBG ("in fribidi_shape");
|
||||
|
||||
fribidi_assert (embedding_levels);
|
||||
|
||||
if (ar_props)
|
||||
fribidi_shape_arabic (flags, embedding_levels, len, ar_props, str);
|
||||
|
||||
if (FRIBIDI_TEST_BITS (flags, FRIBIDI_FLAG_SHAPE_MIRRORING))
|
||||
fribidi_shape_mirroring (embedding_levels, len, str);
|
||||
}
|
||||
|
||||
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||
@@ -0,0 +1,78 @@
|
||||
/* FriBidi
|
||||
* fribidi-shape.h - shaping
|
||||
*
|
||||
* $Id: fribidi-shape.h,v 1.2 2006/01/14 12:09:29 behdad Exp $
|
||||
* $Author: behdad $
|
||||
* $Date: 2006/01/14 12:09:29 $
|
||||
* $Revision: 1.2 $
|
||||
* $Source: /cvs/fribidi/fribidi2/lib/fribidi-shape.h,v $
|
||||
*
|
||||
* Author:
|
||||
* Behdad Esfahbod, 2004, 2005
|
||||
*
|
||||
* Copyright (C) 2004 Sharif FarsiWeb, Inc
|
||||
* Copyright (C) 2004, 2005 Behdad Esfahbod
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with this library, in a file named COPYING; if not, write to the
|
||||
* Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
* Boston, MA 02111-1307, USA
|
||||
*
|
||||
* For licensing issues, contact <license@farsiweb.info>.
|
||||
*/
|
||||
#ifndef _FRIBIDI_SHAPE_H
|
||||
#define _FRIBIDI_SHAPE_H
|
||||
|
||||
#include "fribidi-types.h"
|
||||
#include "fribidi-flags.h"
|
||||
#include "fribidi-bidi-types.h"
|
||||
#include "fribidi-joining-types.h"
|
||||
|
||||
#include "fribidi-begindecls.h"
|
||||
|
||||
|
||||
#define fribidi_shape FRIBIDI_NAMESPACE(shape)
|
||||
/* fribidi_shape - do bidi-aware shaping
|
||||
*
|
||||
* This function does all shaping work that depends on the resolved embedding
|
||||
* levels of the characters. Currently it does mirroring and Arabic shaping,
|
||||
* but the list may grow in the future. This function is a wrapper around
|
||||
* fribidi_shape_mirroring and fribidi_shape_arabic.
|
||||
*
|
||||
* The flags parameter specifies which shapings are applied. The only flags
|
||||
* affecting the functionality of this function are those beginning with
|
||||
* FRIBIDI_FLAG_SHAPE_. Of these, only FRIBIDI_FLAG_SHAPE_MIRRORING is on
|
||||
* in FRIBIDI_FLAGS_DEFAULT. For details of the Arabic-specific flags see
|
||||
* fribidi_shape_arabic. If ar_props is NULL, no Arabic shaping is performed.
|
||||
*
|
||||
* Feel free to do your own shaping before or after calling this function,
|
||||
* but you should take care of embedding levels yourself then.
|
||||
*/
|
||||
FRIBIDI_ENTRY void fribidi_shape (
|
||||
FriBidiFlags flags, /* shaping flags */
|
||||
const FriBidiLevel *embedding_levels, /* input list of embedding
|
||||
levels, as returned by
|
||||
fribidi_get_par_embedding_levels */
|
||||
const FriBidiStrIndex len, /* input string length */
|
||||
FriBidiArabicProp *ar_props, /* input/output Arabic properties as
|
||||
* computed by fribidi_join_arabic */
|
||||
FriBidiChar *str /* string to shape */
|
||||
);
|
||||
|
||||
|
||||
#include "fribidi-enddecls.h"
|
||||
|
||||
#endif /* !_FRIBIDI_SHAPE_H */
|
||||
/* Editor directions:
|
||||
* vim:textwidth=78:tabstop=8:shiftwidth=2:autoindent:cindent
|
||||
*/
|
||||